From fdd20042c1c98f1f740d01d83002f787688c413b Mon Sep 17 00:00:00 2001 From: Hafiyyan Date: Mon, 30 Sep 2019 14:36:11 +0700 Subject: [PATCH 001/103] Login sso fix --- core/tests/test_accounts.py | 7 ++++-- core/tests/test_vacancies.py | 12 ++++++--- core/views/accounts.py | 19 ++++++-------- core/views/sso_login.py | 48 ++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 core/views/sso_login.py diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 35458de..25281a7 100644 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -8,6 +8,7 @@ from core.models.accounts import Company, Supervisor, Student class LoginTests(APITestCase): @requests_mock.Mocker() def test_succesful_student_login_relogin(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.mahasiswa", "nama": "Dummy Mahasiswa", @@ -16,7 +17,7 @@ class LoginTests(APITestCase): "kodeidentitas": "1234567890", "nama_role": "mahasiswa" }, status_code=200) - m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={ + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ "kota_lahir": "kota_kota", "tgl_lahir": "2017-12-31", "program": [{ @@ -35,6 +36,7 @@ class LoginTests(APITestCase): @requests_mock.Mocker() def test_successful_supervisor_login_relogin(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.dosen", "nama": "Dummy Dosen", @@ -106,6 +108,7 @@ class ProfileUpdateTests(APITestCase): @requests_mock.Mocker() def test_student_profile_update(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.mahasiswa", "nama": "Dummy Mahasiswa", @@ -114,7 +117,7 @@ class ProfileUpdateTests(APITestCase): "kodeidentitas": "1234567890", "nama_role": "mahasiswa" }, status_code=200) - m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={ + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ "kota_lahir": "kota_kota", "tgl_lahir": "2017-12-31", "program": [{ diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index 78cdc5a..1667ac1 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -12,6 +12,7 @@ from core.models.vacancies import Vacancy, Application class ApplicationTests(APITestCase): @requests_mock.Mocker() def test_application_list(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.mahasiswa", "nama": "Dummy Mahasiswa", @@ -20,7 +21,7 @@ class ApplicationTests(APITestCase): "kodeidentitas": "1234567890", "nama_role": "mahasiswa" }, status_code=200) - m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={ + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ "kota_lahir": "kota_kota", "tgl_lahir": "2017-12-31", "program": [{ @@ -42,6 +43,7 @@ class ApplicationTests(APITestCase): @requests_mock.Mocker() def test_application_create_and_delete(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.mahasiswa", "nama": "Dummy Mahasiswa", @@ -50,7 +52,7 @@ class ApplicationTests(APITestCase): "kodeidentitas": "1234567890", "nama_role": "mahasiswa" }, status_code=200) - m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={ + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ "kota_lahir": "kota_kota", "tgl_lahir": "2017-12-31", "program": [{ @@ -84,6 +86,7 @@ class ApplicationTests(APITestCase): class BookmarkApplicationTests(APITestCase): @requests_mock.Mocker() def test_application_list(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.mahasiswa", "nama": "Dummy Mahasiswa", @@ -92,7 +95,7 @@ class BookmarkApplicationTests(APITestCase): "kodeidentitas": "1234567890", "nama_role": "mahasiswa" }, status_code=200) - m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={ + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ "kota_lahir": "kota_kota", "tgl_lahir": "2017-12-31", "program": [{ @@ -114,6 +117,7 @@ class BookmarkApplicationTests(APITestCase): @requests_mock.Mocker() def test_application_create_and_delete(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ "username": "dummy.mahasiswa", "nama": "Dummy Mahasiswa", @@ -122,7 +126,7 @@ class BookmarkApplicationTests(APITestCase): "kodeidentitas": "1234567890", "nama_role": "mahasiswa" }, status_code=200) - m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={ + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ "kota_lahir": "kota_kota", "tgl_lahir": "2017-12-31", "program": [{ diff --git a/core/views/accounts.py b/core/views/accounts.py index 0b74350..9ea10d8 100644 --- a/core/views/accounts.py +++ b/core/views/accounts.py @@ -9,6 +9,7 @@ from rest_framework.parsers import FormParser,MultiPartParser from rest_framework.permissions import AllowAny from rest_framework.permissions import IsAdminUser, IsAuthenticated from rest_framework.response import Response +from .sso_login import get_access_token, verify_user, get_riwayat_user, get_summary_user from core.lib.permissions import IsAdminOrStudent, IsAdminOrSelfOrReadOnly, IsAdminOrCompany, IsAdminOrSupervisor, \ IsAdminOrSupervisorOrCompanyOrSelf @@ -81,14 +82,9 @@ class StudentViewSet(viewsets.ModelViewSet): raise PermissionDenied("You are not allowed to see other student's transcript") if student.show_transcript: - s = requests.Session() - credentials = settings.API_CS_CREDENTIALS - s.get('https://api.cs.ui.ac.id/api-auth/login/') - csrf = s.cookies['csrftoken'] - resp = s.post('https://api.cs.ui.ac.id/api-auth/login/', - data={'username': credentials["user"], 'password': credentials["password"], - 'csrfmiddlewaretoken': csrf}) - response = s.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/' + str(student.npm) + '/riwayat/') + access_token = get_access_token(credentials["user"], credentials["password"]) + ver_user = verify_user(access_token) + response = get_riwayat_user(access_token, ver_user['identity_number']) return Response({'name': student.full_name, 'transcript': response.json()}, status=status.HTTP_200_OK) else: return Response({'name': student.full_name, 'error': 'student does not allow transcript to be shown'}, @@ -146,7 +142,7 @@ class LoginViewSet(viewsets.GenericViewSet): return Response(status=status.HTTP_400_BAD_REQUEST) if login_type == "sso-ui": r = requests.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', - json={"username": username, "password": password}) + data={"username": username, "password": password}) resp = r.json() if resp.get('state') != 0: # create user @@ -167,8 +163,9 @@ class LoginViewSet(viewsets.GenericViewSet): login(request, user) if created: if resp.get('nama_role') == "mahasiswa": - student_detail = requests.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/{}/'.format(resp.get("kodeidentitas"))) - resp_student_detail = student_detail.json() + access_token = get_access_token(username, password) + ver_user = verify_user(access_token) + resp_student_detail = get_summary_user(access_token, ver_user['identity_number']) student = Student.objects.create( user=user, npm=resp.get("kodeidentitas"), diff --git a/core/views/sso_login.py b/core/views/sso_login.py new file mode 100644 index 0000000..669bf2b --- /dev/null +++ b/core/views/sso_login.py @@ -0,0 +1,48 @@ +import requests + +API_MAHASISWA = "https://api.cs.ui.ac.id/siakngcs/mahasiswa/" +API_RIWAYAT_MAHASISWA = API_MAHASISWA+'{npm}/riwayat/' +API_VERIFY_USER = "https://akun.cs.ui.ac.id/oauth/token/verify/" +def get_access_token(username, password): + try: + url = "https://akun.cs.ui.ac.id/oauth/token/" + + payload = "username=" + username + "&password=" + password + "&grant_type=password" + headers = { + 'authorization': "Basic WDN6TmtGbWVwa2RBNDdBU05NRFpSWDNaOWdxU1UxTHd5d3U1V2VwRzpCRVFXQW43RDl6a2k3NEZ0bkNpWVhIRk50Ymg3eXlNWmFuNnlvMU1uaUdSVWNGWnhkQnBobUU5TUxuVHZiTTEzM1dsUnBwTHJoTXBkYktqTjBxcU9OaHlTNGl2Z0doczB0OVhlQ3M0Ym1JeUJLMldwbnZYTXE4VU5yTEFEMDNZeA==", + 'cache-control': "no-cache", + 'content-type': "application/x-www-form-urlencoded" + } + response = requests.request("POST", url, data=payload, headers=headers) + + return response.json()["access_token"] + except Exception as e: + return None + # raise Exception("username atau password sso salah, input : [{}, {}]".format(username, password,)) + +def get_client_id(): + client_id = 'X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG' + return client_id + +def verify_user(access_token): + print ("#get identity number") + parameters = {"access_token": access_token, "client_id": get_client_id()} + response = requests.get(API_VERIFY_USER, params=parameters) + print ("response => ", response.json()) + return response.json() + +def get_summary_user(access_token, npm): + print ("#get summary user => ", npm) + parameters = {"access_token": access_token, "client_id": get_client_id()} + response = requests.get(API_MAHASISWA+str(npm), params=parameters) + print ("response => ", response.text) + print ("response => ", response.json()) + return response.json() + +def get_riwayat_user(access_token, npm): + print ("#get riwayat user => ", npm) + parameters = {"access_token": access_token, "client_id": get_client_id()} + response = requests.get(API_RIWAYAT_MAHASISWA.format(npm=npm), params=parameters) + print ("response => ", response.text) + print ("response => ", response.json()) + return response.json() -- GitLab From 03a94f57eeccdec20e2660144afe11e5eca9bc40 Mon Sep 17 00:00:00 2001 From: Ivana Irene Thomas Date: Wed, 2 Oct 2019 11:02:37 +0700 Subject: [PATCH 002/103] add test application request will return 400 if vacancy is closed --- core/tests/test_vacancies.py | 37 +++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index 1667ac1..b45d3fa 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timedelta import requests_mock from django.contrib.auth.models import User @@ -81,7 +81,42 @@ class ApplicationTests(APITestCase): url = '/api/students/' + str(student_id) + '/applied-vacancies/' + str(new_vacancy.pk) + '/' response = self.client.delete(url) self.assertEqual(response.status_code, status.HTTP_200_OK) + + @requests_mock.Mocker() + def test_cannot_create_application_if_vacancy_is_closed(self, m): + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) + m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ + "username": "dummy.mahasiswa", + "nama": "Dummy Mahasiswa", + "state": 1, + "kode_org": "01.00.12.01:mahasiswa", + "kodeidentitas": "1234567890", + "nama_role": "mahasiswa" + }, status_code=200) + m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={ + "kota_lahir": "kota_kota", + "tgl_lahir": "2017-12-31", + "program": [{ + "nm_org": "Ilmu Informasi", + "angkatan": "2017" + }] + }, status_code=200) + + url = '/api/login/' + + response = self.client.post(url, {'username': 'dummy.mahasiswa', 'password': 'lalala', 'login-type': 'sso-ui'}, + format='json') + student_id = response.data.get('student').get('id') + new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, + address=None) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today() - timedelta(days=1)) + url = '/api/students/' + str(student_id) + '/applied-vacancies/' + response = self.client.post(url, {'vacancy_id': new_vacancy.pk, 'cover_letter': 'this is a cover letter.'}, + format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) class BookmarkApplicationTests(APITestCase): @requests_mock.Mocker() -- GitLab From 46845b6c570610f775ec890b35701b580d826b5c Mon Sep 17 00:00:00 2001 From: Ivana Irene Thomas Date: Wed, 2 Oct 2019 11:48:33 +0700 Subject: [PATCH 003/103] modify commit, return 400 when vacancy close_time less than today --- core/tests/test_vacancies.py | 8 ++++---- core/views/vacancies.py | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index b45d3fa..bada03a 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -1,5 +1,5 @@ from datetime import datetime, timedelta - +from django.utils import timezone import requests_mock from django.contrib.auth.models import User from rest_framework import status @@ -71,7 +71,7 @@ class ApplicationTests(APITestCase): new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + description="lalala", close_time=(timezone.now() + timedelta(days=1))) url = '/api/students/' + str(student_id) + '/applied-vacancies/' response = self.client.post(url, {'vacancy_id': new_vacancy.pk, 'cover_letter': 'this is a cover letter.'}, @@ -81,7 +81,7 @@ class ApplicationTests(APITestCase): url = '/api/students/' + str(student_id) + '/applied-vacancies/' + str(new_vacancy.pk) + '/' response = self.client.delete(url) self.assertEqual(response.status_code, status.HTTP_200_OK) - + @requests_mock.Mocker() def test_cannot_create_application_if_vacancy_is_closed(self, m): m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, status_code=200) @@ -112,7 +112,7 @@ class ApplicationTests(APITestCase): new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today() - timedelta(days=1)) + description="lalala", close_time=(timezone.now() - timedelta(days=1))) url = '/api/students/' + str(student_id) + '/applied-vacancies/' response = self.client.post(url, {'vacancy_id': new_vacancy.pk, 'cover_letter': 'this is a cover letter.'}, format='json') diff --git a/core/views/vacancies.py b/core/views/vacancies.py index e4b8b98..7ce8c39 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -1,4 +1,5 @@ import requests +from django.utils import timezone from django.conf import settings from rest_framework import viewsets, status from rest_framework.decorators import detail_route @@ -137,6 +138,9 @@ class StudentApplicationViewSet(viewsets.GenericViewSet): """ cover_letter = request.data.get('cover_letter') vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data.get('vacancy_id')) + if vacancy.close_time < timezone.now(): + return Response({"error": "vacancy is closed"}, \ + status=status.HTTP_400_BAD_REQUEST) student = get_object_or_404(Student.objects.all(), pk=student_id) if Application.objects.filter(vacancy=vacancy, student=student).exists(): raise ValidationError("You have already applied for the vacancy") -- GitLab From 0955dd709fb9bfbfddd56cbdc08ddf7ec5f9d548 Mon Sep 17 00:00:00 2001 From: Ivana Irene Thomas Date: Wed, 2 Oct 2019 11:57:28 +0700 Subject: [PATCH 004/103] disable Daftar button if application is overdue --- assets/js/components/ApplyModal.jsx | 4 +++- assets/js/components/Vacancy.jsx | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/assets/js/components/ApplyModal.jsx b/assets/js/components/ApplyModal.jsx index fbd6d62..acb63cc 100644 --- a/assets/js/components/ApplyModal.jsx +++ b/assets/js/components/ApplyModal.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import moment from 'moment'; import { Icon, Modal, Button, TextArea, Form, Message } from 'semantic-ui-react'; import ModalAlert from './../components/ModalAlert'; import Server from './../lib/Server'; @@ -65,6 +66,7 @@ export default class ApplyModal extends React.Component { }; render() { + const isApplicationClosed = moment(this.props.data.close_time) < moment.now() return ( {this.props.buttonTitle}} @@ -104,7 +106,7 @@ export default class ApplyModal extends React.Component { )} - diff --git a/assets/js/components/Vacancy.jsx b/assets/js/components/Vacancy.jsx index a755cca..51e3921 100644 --- a/assets/js/components/Vacancy.jsx +++ b/assets/js/components/Vacancy.jsx @@ -89,6 +89,7 @@ export default class Vacancy extends React.Component { header: this.props.data.name, description: this.props.data.description, id: this.props.data.id, + close_time: this.props.data.close_time }} resume={this.props.user.data.student.resume} buttonTitle="Detail" -- GitLab From 8b61b8c051204c4d83afe0c1847fbdd9c221a97d Mon Sep 17 00:00:00 2001 From: Daya Adianto Date: Thu, 3 Oct 2019 18:41:22 +0700 Subject: [PATCH 005/103] Fix SonarScanner CI job and add project badges --- .gitlab/CODEOWNERS | 4 ++++ README.md | 7 +++++++ sonar-project.properties | 1 + 3 files changed, 12 insertions(+) create mode 100644 .gitlab/CODEOWNERS diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS new file mode 100644 index 0000000..a690232 --- /dev/null +++ b/.gitlab/CODEOWNERS @@ -0,0 +1,4 @@ +# Code owners file + +## Changes to these file(s) require approval from the teaching team +sonar-project.properties @addianto @hafiyyan94 \ No newline at end of file diff --git a/README.md b/README.md index 3020546..3734ba0 100755 --- a/README.md +++ b/README.md @@ -2,6 +2,13 @@ > Internship matchmaking platform for students and companies. +[![pipeline status](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/badges/master/pipeline.svg)](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/commits/master) +[![coverage report](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/badges/master/coverage.svg)](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/commits/master) + +[![Quality Gate Status](https://pmpl.cs.ui.ac.id/sonarqube/api/project_badges/measure?project=id.ac.ui.cs.foss%3Akape&metric=alert_status)](https://pmpl.cs.ui.ac.id/sonarqube/dashboard?id=id.ac.ui.cs.foss%3Akape) +[![Bugs](https://pmpl.cs.ui.ac.id/sonarqube/api/project_badges/measure?project=id.ac.ui.cs.foss%3Akape&metric=bugs)](https://pmpl.cs.ui.ac.id/sonarqube/dashboard?id=id.ac.ui.cs.foss%3Akape) +[![Code Smells](https://pmpl.cs.ui.ac.id/sonarqube/api/project_badges/measure?project=id.ac.ui.cs.foss%3Akape&metric=code_smells)](https://pmpl.cs.ui.ac.id/sonarqube/dashboard?id=id.ac.ui.cs.foss%3Akape) + ## Table of Contents - [Install](#install) diff --git a/sonar-project.properties b/sonar-project.properties index 48a6c49..c3db74c 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -7,6 +7,7 @@ sonar.projectKey=id.ac.ui.cs.foss:kape sonar.exclusions=/.devcontainer/,/.gitlab/,*.config.js,/.tmp/, sonar.scm.provider=git +sonar.projectVersion=1.0.0 ## Authentication ### sonar.login=[pass token via CLI/CI] -- GitLab From e891c101292e563332db1aee9e7d3c3ea60216b6 Mon Sep 17 00:00:00 2001 From: Daya Adianto Date: Thu, 3 Oct 2019 18:41:22 +0700 Subject: [PATCH 006/103] Fix SonarScanner CI job and add project badges add test case for new vacancy fail or success implemented new vacancy fail or success add test case for update vacancy fail or success implemented update vacancy fail or success --- .gitlab/CODEOWNERS | 4 ++ README.md | 7 +++ core/tests/test_create_vacancies.py | 66 +++++++++++++++++++++++++++++ core/views/vacancies.py | 38 +++++++++++++++-- sonar-project.properties | 1 + 5 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 .gitlab/CODEOWNERS create mode 100644 core/tests/test_create_vacancies.py diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS new file mode 100644 index 0000000..a690232 --- /dev/null +++ b/.gitlab/CODEOWNERS @@ -0,0 +1,4 @@ +# Code owners file + +## Changes to these file(s) require approval from the teaching team +sonar-project.properties @addianto @hafiyyan94 \ No newline at end of file diff --git a/README.md b/README.md index 3020546..3734ba0 100755 --- a/README.md +++ b/README.md @@ -2,6 +2,13 @@ > Internship matchmaking platform for students and companies. +[![pipeline status](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/badges/master/pipeline.svg)](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/commits/master) +[![coverage report](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/badges/master/coverage.svg)](https://gitlab.cs.ui.ac.id/pmpl/class-project/kape/commits/master) + +[![Quality Gate Status](https://pmpl.cs.ui.ac.id/sonarqube/api/project_badges/measure?project=id.ac.ui.cs.foss%3Akape&metric=alert_status)](https://pmpl.cs.ui.ac.id/sonarqube/dashboard?id=id.ac.ui.cs.foss%3Akape) +[![Bugs](https://pmpl.cs.ui.ac.id/sonarqube/api/project_badges/measure?project=id.ac.ui.cs.foss%3Akape&metric=bugs)](https://pmpl.cs.ui.ac.id/sonarqube/dashboard?id=id.ac.ui.cs.foss%3Akape) +[![Code Smells](https://pmpl.cs.ui.ac.id/sonarqube/api/project_badges/measure?project=id.ac.ui.cs.foss%3Akape&metric=code_smells)](https://pmpl.cs.ui.ac.id/sonarqube/dashboard?id=id.ac.ui.cs.foss%3Akape) + ## Table of Contents - [Install](#install) diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py new file mode 100644 index 0000000..3a8fd4a --- /dev/null +++ b/core/tests/test_create_vacancies.py @@ -0,0 +1,66 @@ +from datetime import datetime + +import requests_mock +from django.contrib.auth.models import User +from rest_framework import status +from rest_framework.test import APITestCase + +from core.models.accounts import Company, Student, Supervisor +from core.models.vacancies import Vacancy, Application + +class CreateAndUpdateVacancyTest(APITestCase): + def test_new_vacancy_success(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + url = '/api/vacancies/' + response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0), + 'close_time': datetime.today(), 'name': 'new_vacancy', 'description': 'new_vacancy '}, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + vacancies = Vacancy.objects.count() + self.assertEqual(vacancies,1) + + def test_new_vacancy_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + url = '/api/vacancies/' + response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(), + 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancies = Vacancy.objects.count() + self.assertEqual(vacancies,0) + + def test_update_vacancy_success(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today(), name='new_company') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), + 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_update_vacancy_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today(), name='new_company') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0), + 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/core/views/vacancies.py b/core/views/vacancies.py index e4b8b98..39f7422 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -21,9 +21,9 @@ from core.views.accounts import StudentViewSet class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): queryset = Vacancy.objects.all() serializer_class = VacancySerializer - serializer_action_classes = { - 'create': PostVacancySerializer - } + # serializer_action_classes = { + # 'create': PostVacancySerializer + # } permission_classes = [IsAdminOrCompany] pagination_class = PageNumberPagination @@ -44,6 +44,38 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): return self.get_paginated_response(VacancySerializer(page, many=True, context={'request': request}).data) return Response(VacancySerializer(vacancies, many=True, context={'request': request}).data) + def create(self, request): + data = request.data + company_set = Company.objects.filter(id=data['company']) + if len(company_set) == 0: + raise ValidationError('no company') + company = company_set[0] + open_time = data['open_time'] + close_time = data['close_time'] + name = data['name'] + description = data['description'] + if close_time < open_time: + raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') + vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description) + vacancy.save() + return Response(status=status.HTTP_200_OK) + + def partial_update(self, request, pk): + data = request.data + vacancy = Vacancy.objects.get(pk=pk) + open_time = data['open_time'] + close_time = data['close_time'] + name = data['name'] + description = data['description'] + if close_time < open_time: + raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') + vacancy.open_time = open_time + vacancy.close_time = close_time + vacancy.name = name + vacancy.description = description + vacancy.save() + return Response(status=status.HTTP_200_OK) + @detail_route(permission_classes=[IsAdminOrCompany]) def count(self, request, pk=None): vacancy = self.get_object() diff --git a/sonar-project.properties b/sonar-project.properties index 48a6c49..c3db74c 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -7,6 +7,7 @@ sonar.projectKey=id.ac.ui.cs.foss:kape sonar.exclusions=/.devcontainer/,/.gitlab/,*.config.js,/.tmp/, sonar.scm.provider=git +sonar.projectVersion=1.0.0 ## Authentication ### sonar.login=[pass token via CLI/CI] -- GitLab From 2a9e8aa557897bffea94c6bc61a7a8ff1a0cfdab Mon Sep 17 00:00:00 2001 From: Arga Ghulam Ahmad Date: Sat, 5 Oct 2019 19:09:39 +0700 Subject: [PATCH 007/103] Extract login process to a new method on FeedbackTests Remove duplications on FeedbackTests. --- core/admin.py | 4 +- core/migrations/0014_feedback.py | 27 ++++ core/models/feedbacks.py | 10 ++ core/serializers/feedbacks.py | 9 ++ core/tests/__init__.py | 1 + core/tests/test_feedbacks.py | 258 +++++++++++++++++++++++++++++++ core/views/feedbacks.py | 63 ++++++++ kape/urls.py | 2 + 8 files changed, 372 insertions(+), 2 deletions(-) create mode 100644 core/migrations/0014_feedback.py create mode 100644 core/models/feedbacks.py create mode 100644 core/serializers/feedbacks.py create mode 100644 core/tests/test_feedbacks.py create mode 100644 core/views/feedbacks.py diff --git a/core/admin.py b/core/admin.py index f30ded6..b54eadf 100755 --- a/core/admin.py +++ b/core/admin.py @@ -1,11 +1,11 @@ from django.contrib import admin from core.models.accounts import Company, Supervisor, Student +from core.models.feedbacks import Feedback from core.models.vacancies import Vacancy admin.site.register(Company) admin.site.register(Student) admin.site.register(Supervisor) admin.site.register(Vacancy) - - +admin.site.register(Feedback) diff --git a/core/migrations/0014_feedback.py b/core/migrations/0014_feedback.py new file mode 100644 index 0000000..e818319 --- /dev/null +++ b/core/migrations/0014_feedback.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-03 13:39 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0013_auto_20170602_1130'), + ] + + operations = [ + migrations.CreateModel( + name='Feedback', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True)), + ('title', models.CharField(blank=True, default=b'', max_length=100)), + ('content', models.TextField()), + ], + options={ + 'ordering': ['created'], + }, + ), + ] diff --git a/core/models/feedbacks.py b/core/models/feedbacks.py new file mode 100644 index 0000000..c473ae8 --- /dev/null +++ b/core/models/feedbacks.py @@ -0,0 +1,10 @@ +from django.db import models + + +class Feedback(models.Model): + created = models.DateTimeField(auto_now_add=True) + title = models.CharField(max_length=100, blank=True, default='') + content = models.TextField() + + class Meta: + ordering = ['created'] diff --git a/core/serializers/feedbacks.py b/core/serializers/feedbacks.py new file mode 100644 index 0000000..2558730 --- /dev/null +++ b/core/serializers/feedbacks.py @@ -0,0 +1,9 @@ +from rest_framework import serializers + +from core.models.feedbacks import Feedback + + +class FeedbackSerializer(serializers.ModelSerializer): + class Meta: + model = Feedback + fields = ['id', 'title', 'content'] diff --git a/core/tests/__init__.py b/core/tests/__init__.py index 76d673e..e8d87c6 100755 --- a/core/tests/__init__.py +++ b/core/tests/__init__.py @@ -1,3 +1,4 @@ # __init__.py from core.tests.test_accounts import LoginTests, RegisterTests from core.tests.test_vacancies import ApplicationTests, BookmarkApplicationTests, CompanyListsTests +from core.tests.test_feedbacks import FeedbacksTests diff --git a/core/tests/test_feedbacks.py b/core/tests/test_feedbacks.py new file mode 100644 index 0000000..f45dba9 --- /dev/null +++ b/core/tests/test_feedbacks.py @@ -0,0 +1,258 @@ +import requests_mock +from rest_framework import status +from rest_framework.test import APITestCase + +from core.models.feedbacks import Feedback + + +class FeedbacksTests(APITestCase): + def login(self, m): + # Login + m.get('https://akun.cs.ui.ac.id/oauth/token/verify/?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', + json={"username": 'dummy.mahasiswa', "role": 'mahasiswa', "identity_number": '1234567890'}, + status_code=200) + m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ + "username": "dummy.mahasiswa", + "nama": "Dummy Mahasiswa", + "state": 1, + "kode_org": "01.00.12.01:mahasiswa", + "kodeidentitas": "1234567890", + "nama_role": "mahasiswa" + }, status_code=200) + m.get( + 'https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890?client_id=X3zNkFmepkdA47ASNMDZRX3Z9gqSU1Lwywu5WepG', + json={ + "kota_lahir": "kota_kota", + "tgl_lahir": "2017-12-31", + "program": [{ + "nm_org": "Ilmu Informasi", + "angkatan": "2017" + }] + }, status_code=200) + login_url = '/api/login/' + self.client.post(login_url, {'username': 'dummy.mahasiswa', 'password': 'lalala', 'login-type': 'sso-ui'}, + format='json') + + @requests_mock.Mocker() + def test_feedback_list_with_more_than_10_feedback_and_with_page_number(self, m): + self.login(m) + + # test_feedback_list_with_more_than_10_feedback_and_with_page_number + for i in range(15): + Feedback.objects.create(content="a feedback", title="a title") + + feedbacks_url = '/api/feedbacks/' + feedbacks_url_page_1 = '/api/feedbacks/?page=1' + feedbacks_url_page_2 = '/api/feedbacks/?page=2' + + response1 = self.client.get(feedbacks_url_page_1) + self.assertEqual(response1.status_code, status.HTTP_200_OK) + self.assertEqual(response1.data['count'], 15) + self.assertIn(feedbacks_url_page_2, response1.data['next']) + self.assertEqual(response1.data['previous'], None) + self.assertEqual(len(response1.data['results']), 10) + + response2 = self.client.get(feedbacks_url_page_2) + self.assertEqual(response2.status_code, status.HTTP_200_OK) + self.assertEqual(response2.data['count'], 15) + self.assertIn(feedbacks_url, response2.data['previous']) + self.assertEqual(response2.data['next'], None) + self.assertEqual(len(response2.data['results']), 5) + + @requests_mock.Mocker() + def test_feedback_list_with_more_than_10_feedback_and_without_page_number(self, m): + self.login(m) + + # test_feedback_list_with_more_than_10_feedback_and_without_page_number + for i in range(15): + Feedback.objects.create(content="a feedback", title="a title") + + feedbacks_url = '/api/feedbacks/' + feedbacks_url_page_2 = '/api/feedbacks/?page=2' + + response1 = self.client.get(feedbacks_url) + self.assertEqual(response1.status_code, status.HTTP_200_OK) + self.assertEqual(response1.data['count'], 15) + self.assertIn(feedbacks_url_page_2, response1.data['next']) + self.assertEqual(response1.data['previous'], None) + self.assertEqual(len(response1.data['results']), 10) + + response2 = self.client.get(feedbacks_url_page_2) + self.assertEqual(response2.status_code, status.HTTP_200_OK) + self.assertEqual(response2.data['count'], 15) + self.assertIn(feedbacks_url, response2.data['previous']) + self.assertEqual(response2.data['next'], None) + self.assertEqual(len(response2.data['results']), 5) + + @requests_mock.Mocker() + def test_feedback_list_with_less_than_or_equals_10_feedbacks_and_with_zero_feedback_and_without_page_number(self, + m): + self.login(m) + + # test_feedback_list_with_more_than_10_feedback_and_without_page_number + feedbacks_url = '/api/feedbacks/' + + response1 = self.client.get(feedbacks_url) + self.assertEqual(response1.status_code, status.HTTP_200_OK) + self.assertEqual(response1.data['count'], 0) + self.assertEqual(response1.data['next'], None) + self.assertEqual(response1.data['previous'], None) + self.assertEqual(len(response1.data['results']), 0) + + @requests_mock.Mocker() + def test_feedback_list_with_less_than_or_equals_10_feedbacks_and_with_more_than_zero_feedback_and_with_page_number( + self, m): + self.login(m) + + # test_feedback_list_with_less_than_10_feedbacks_and_with_more_than_zero_feedback_and_with_page_number + for i in range(5): + Feedback.objects.create(content="a feedback", title="a title") + + feedbacks_url_page_1 = '/api/feedbacks/?page=1' + + response1 = self.client.get(feedbacks_url_page_1) + self.assertEqual(response1.status_code, status.HTTP_200_OK) + self.assertEqual(response1.data['count'], 5) + self.assertEqual(response1.data['previous'], None) + self.assertEqual(response1.data['next'], None) + self.assertEqual(len(response1.data['results']), 5) + + @requests_mock.Mocker() + def test_feedback_list_with_less_than_or_equals_10_feedbacks_and_with_more_than_zero_feedback_and_without_page_number( + self, + m): + self.login(m) + + # test_feedback_list_with_less_than_10_feedbacks_and_with_more_than_zero_feedback_and_without_page_number + for i in range(5): + Feedback.objects.create(content="a feedback", title="a title") + + feedbacks_url = '/api/feedbacks/' + + response1 = self.client.get(feedbacks_url) + self.assertEqual(response1.status_code, status.HTTP_200_OK) + self.assertEqual(response1.data['count'], 5) + self.assertEqual(response1.data['previous'], None) + self.assertEqual(response1.data['next'], None) + self.assertEqual(len(response1.data['results']), 5) + + @requests_mock.Mocker() + def test_feedback_list_with_less_than_or_equals_10_feedbacks_and_with_zero_feedback_and_with_page_number(self, m): + self.login(m) + + # test_feedback_list_with_less_than_10_feedbacks_and_with_zero_feedback_and_with_page_number + feedbacks_url = '/api/feedbacks/?page=1' + + response1 = self.client.get(feedbacks_url) + self.assertEqual(response1.status_code, status.HTTP_200_OK) + self.assertEqual(response1.data['count'], 0) + self.assertEqual(response1.data['next'], None) + self.assertEqual(response1.data['previous'], None) + self.assertEqual(len(response1.data['results']), 0) + + @requests_mock.Mocker() + def test_feedbacks_create_with_title_and_content(self, m): + self.login(m) + + # test_feedbacks_create_with_title_and_content + feedbacks_url = '/api/feedbacks/' + response = self.client.post(feedbacks_url, + {"content": "a content", "title": "a title"}) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["title"], "a title") + self.assertEqual(response.data["content"], "a content") + + @requests_mock.Mocker() + def test_feedbacks_create_without_title_and_with_content(self, m): + self.login(m) + + # test_feedbacks_create_without_title_and_with_content + feedbacks_url = '/api/feedbacks/' + response = self.client.post(feedbacks_url, + {"content": "a content"}) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.data['detail'], "Please send a json object that have title and content property") + + @requests_mock.Mocker() + def test_feedbacks_create_without_content_and_with_title(self, m): + self.login(m) + + # test_feedbacks_create_without_content_and_with_title + feedbacks_url = '/api/feedbacks/' + response = self.client.post(feedbacks_url, + {"title": "a title"}) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.data['detail'], "Please send a json object that have title and content property") + + @requests_mock.Mocker() + def test_feedbacks_create_without_content_and_without_title(self, m): + self.login(m) + + # test_feedbacks_create_without_content_and_without_title + feedbacks_url = '/api/feedbacks/' + response = self.client.post(feedbacks_url, + {}) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.data['detail'], "Please send a json object that have title and content property") + + @requests_mock.Mocker() + def test_feedbacks_delete_with_exist_data_and_with_data_id(self, m): + self.login(m) + + # test_feedbacks_delete_with_exist_data_and_with_data_id + + new_feedback = Feedback(title="a title", content="a content") + new_feedback.save() + feedback_id = new_feedback.id + + feedbacks_url = '/api/feedbacks/' + str(feedback_id) + '/' + response = self.client.delete(feedbacks_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["detail"], "Feedback with id {} was removed".format(feedback_id)) + + @requests_mock.Mocker() + def test_feedbacks_delete_with_exist_data_and_with_data_id(self, m): + self.login(m) + + # test_feedbacks_delete_with_exist_data_and_with_data_id + + new_feedback = Feedback(title="a title", content="a content") + new_feedback.save() + feedback_id = new_feedback.id + + feedbacks_url = '/api/feedbacks/' + str(feedback_id) + '/' + response = self.client.delete(feedbacks_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["detail"], "Feedback with id {} was removed".format(feedback_id)) + + @requests_mock.Mocker() + def test_feedbacks_delete_with_not_exist_data_and_with_data_id(self, m): + self.login(m) + + # test_feedbacks_delete_with_not_exist_data_and_with_data_id + new_feedback = Feedback(title="a title", content="a content") + new_feedback.save() + feedback_id = new_feedback.id + new_feedback.delete() + + feedbacks_url = '/api/feedbacks/' + str(feedback_id) + '/' + response = self.client.delete(feedbacks_url) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(response.data["detail"], "Feedback with id {} doesn't exist".format(feedback_id)) + + @requests_mock.Mocker() + def test_feedbacks_delete_without_data_id(self, m): + self.login(m) + + # test_feedbacks_delete_without_data_id + feedbacks_url = '/api/feedbacks/' + response = self.client.delete(feedbacks_url) + + self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED) diff --git a/core/views/feedbacks.py b/core/views/feedbacks.py new file mode 100644 index 0000000..42464b6 --- /dev/null +++ b/core/views/feedbacks.py @@ -0,0 +1,63 @@ +from rest_framework import viewsets, status +from rest_framework.response import Response + +from core.lib.permissions import IsAdminOrStudent +from core.models.feedbacks import Feedback +from core.serializers.feedbacks import FeedbackSerializer + + +class FeedbackViewSet(viewsets.GenericViewSet): + """ + This viewset automatically provides `list`, `create`, `retrieve`, + `update` and `destroy` feedback actions. + + Additionally we also provide an extra `highlight` action. + """ + queryset = Feedback.objects.all() + serializer_class = FeedbackSerializer + permission_classes = [IsAdminOrStudent] + + def list(self, request): + """ + Get list of feedbacks + --- + """ + feedbacks = Feedback.objects.all() + page = self.paginate_queryset(feedbacks) + serialized_page_data = FeedbackSerializer(page, many=True, context={'request': request}).data + print (serialized_page_data) + return self.get_paginated_response(serialized_page_data) + + def create(self, request): + """ + Create a feedback + --- + """ + if 'title' in request.data and 'content' in request.data: + new_feedback = Feedback(title=request.data['title'], content=request.data['content']) + new_feedback.save() + serialized_new_feedback = FeedbackSerializer(new_feedback, context={'request': request}) + serialized_new_feedback_data = serialized_new_feedback.data + print(serialized_new_feedback_data) + return Response(serialized_new_feedback_data) + else: + message = {"detail": "Please send a json object that have title and content property"} + print(message) + return Response(message, status=status.HTTP_400_BAD_REQUEST) + + def destroy(self, request, pk): + """ + Remove feedback {id} + --- + """ + if Feedback.objects.filter(id=pk).count() != 0: + print (request.data) + delete_feedback = Feedback.objects.get(id=pk) + delete_feedback.delete() + message = {"detail": "Feedback with id {} was removed".format(pk)} + print(message) + return Response(message, status=status.HTTP_200_OK) + else: + message = {"detail": "Feedback with id {} doesn't exist".format(pk)} + print(message) + return Response(message, status=status.HTTP_400_BAD_REQUEST) diff --git a/kape/urls.py b/kape/urls.py index 21a1d46..5ae9c07 100755 --- a/kape/urls.py +++ b/kape/urls.py @@ -26,6 +26,7 @@ from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSe CompanyRegisterViewSet from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewSet, StudentApplicationViewSet, \ CompanyApplicationViewSet, CompanyVacanciesViewSet, ApplicationViewSet +from core.views.feedbacks import FeedbackViewSet schema_view = get_swagger_view() router = routers.DefaultRouter() @@ -37,6 +38,7 @@ router.register(r'login', LoginViewSet) router.register(r'register', CompanyRegisterViewSet) router.register(r'vacancies', VacancyViewSet) router.register(r'applications', ApplicationViewSet) +router.register(r'feedbacks', FeedbackViewSet) # router.register(r'students/(?P\d+)/profile', StudentProfileViewSet) router.register(r'students/(?P\d+)/bookmarked-vacancies', BookmarkedVacancyByStudentViewSet, base_name='bookmarked-vacancy-list') -- GitLab From d092361576c9fca74e3ef089173fdc6624528813 Mon Sep 17 00:00:00 2001 From: Fajrin Kingwijati Date: Sat, 5 Oct 2019 19:11:36 +0700 Subject: [PATCH 008/103] 1606837631-10 Sebagai perusahaan, saya ingin menyimpan kategori perusahaan #10 --- assets/js/CompanyProfile.jsx | 2 +- assets/js/__test__/CompanyProfile-test.jsx | 1 + assets/js/components/CompanyRegisterModal.jsx | 39 ++++++++++++++++++- core/migrations/0014_company_category.py | 20 ++++++++++ core/models/accounts.py | 1 + core/tests/test_accounts.py | 2 +- core/views/accounts.py | 5 ++- 7 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 core/migrations/0014_company_category.py diff --git a/assets/js/CompanyProfile.jsx b/assets/js/CompanyProfile.jsx index dca18ab..3c909b0 100644 --- a/assets/js/CompanyProfile.jsx +++ b/assets/js/CompanyProfile.jsx @@ -21,7 +21,7 @@ export default class CompanyProfile extends React.Component {

{ data.name }

{ data.address }t

-

{ data.description }

+

{ data.category } - { data.description }

diff --git a/assets/js/__test__/CompanyProfile-test.jsx b/assets/js/__test__/CompanyProfile-test.jsx index 8e80e7b..e1a9d65 100644 --- a/assets/js/__test__/CompanyProfile-test.jsx +++ b/assets/js/__test__/CompanyProfile-test.jsx @@ -24,6 +24,7 @@ const companyUser = { verified: true, logo: 'http://localhost:8001/files/company-logo/8a258a48-3bce-4873-b5d1-538b360d0059.png', address: 'Jl. Kebayoran Baru nomor 13, Jakarta Barat', + category: 'Belum ada kategori perusahaan', }, supervisor: null, student: null, diff --git a/assets/js/components/CompanyRegisterModal.jsx b/assets/js/components/CompanyRegisterModal.jsx index e33732d..7843895 100644 --- a/assets/js/components/CompanyRegisterModal.jsx +++ b/assets/js/components/CompanyRegisterModal.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { browserHistory } from 'react-router'; -import { Modal, Button, Form, Input, TextArea, Header, Icon } from 'semantic-ui-react'; +import { Modal, Button, Form, Input, TextArea, Header, Icon, Dropdown } from 'semantic-ui-react'; import ModalAlert from './../components/ModalAlert'; import Server from './../lib/Server'; import Storage from './../lib/Storage'; @@ -17,6 +17,26 @@ export default class CompanyRegisterModal extends React.Component { this.handleSubmit = this.handleSubmit.bind(this); } + categoryOptions = [ + { value: 'Perusahaan Asuransi', text: 'Perusahaan Asuransi' }, + { value: 'Perusahaan Bioteknologi', text: 'Perusahaan Bioteknologi' }, + { value: 'Perusahaan Elektronik', text: 'Perusahaan Elektronik' }, + { value: 'Perusahaan Energi', text: 'Perusahaan Energi' }, + { value: 'Perusahaan Farmasi', text: 'Perusahaan Farmasi' }, + { value: 'Firma Akuntansi', text: 'Firma Akuntansi' }, + { value: 'Agen Periklanan', text: 'Agen Periklanan' }, + { value: 'Perusahaan Internet', text: 'Perusahaan Internet' }, + { value: 'Perusahaan Jasa', text: 'Perusahaan Jasa' }, + { value: 'Perusahaan Komputer', text: 'Perusahaan Komputer' }, + { value: 'Perusahaan Konsultansi', text: 'Perusahaan Konsultansi' }, + { value: 'Perusahaan Logistik', text: 'Perusahaan Logistik' }, + { value: 'Perusahaan Media', text: 'Perusahaan Media' }, + { value: 'Perusahaan Perangkat Keras', text: 'Perusahaan Perangkat Keras' }, + { value: 'Perusahaan Perangkat Lunak', text: 'Perusahaan Perangkat Lunak' }, + { value: 'Perusahaan Teknologi', text: 'Perusahaan Teknologi' }, + { value: 'Perusahaan Telekomunikasi', text: 'Perusahaan Telekomunikasi' }, + ] + componentWillUpdate() { this.fixBody(); } @@ -34,6 +54,10 @@ export default class CompanyRegisterModal extends React.Component { this.setState({ [e.target.name]: e.target.value }); }; + handleSelectChange = (e, data) => { + this.setState({ [data.name]: data.value }); + } + handleFile = (e) => { this.setState({ [e.target.name]: e.target.files[0] }); }; @@ -99,6 +123,19 @@ export default class CompanyRegisterModal extends React.Component { + + + + + Date: Sat, 5 Oct 2019 22:23:28 +0700 Subject: [PATCH 009/103] 1606895171 41 --- .DS_Store | Bin 0 -> 6148 bytes assets/js/ProfilePage.jsx | 19 + assets/js/__test__/ProfilePage-test.jsx | 4 +- core/migrations/0014_student_region.py | 20 + core/migrations/0015_merge_20191005_1957.py | 17 + core/models/accounts.py | 1 + core/serializers/accounts.py | 6 +- core/tests/test_accounts.py | 5 + package-lock.json | 10643 ++++++++++++++++++ requirements.txt | 32 +- 10 files changed, 10727 insertions(+), 20 deletions(-) create mode 100644 .DS_Store create mode 100644 core/migrations/0014_student_region.py create mode 100644 core/migrations/0015_merge_20191005_1957.py create mode 100644 package-lock.json mode change 100755 => 100644 requirements.txt diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0No. Hp + + + + @@ -239,6 +246,18 @@ export default class ProfilePage extends React.Component { + + + + + + + + +

{ this.state.region || 'N/A' }

+
+
+
diff --git a/assets/js/__test__/ProfilePage-test.jsx b/assets/js/__test__/ProfilePage-test.jsx index a98b345..1adcf18 100644 --- a/assets/js/__test__/ProfilePage-test.jsx +++ b/assets/js/__test__/ProfilePage-test.jsx @@ -139,7 +139,7 @@ describe('ProfilePage', () => { const profile = ReactTestUtils.renderIntoDocument( ); - const checkboxNode = ReactTestUtils.scryRenderedDOMComponentsWithTag(profile, 'Input')[4]; + const checkboxNode = ReactTestUtils.scryRenderedDOMComponentsWithTag(profile, 'Input')[5]; const checkbox = false; checkboxNode.value = checkbox; profile.getProfile().then(()=> expect(profile.state.show_transcript).to.equal(true)); @@ -213,4 +213,4 @@ describe('ProfilePage', () => { }); -}); +}); \ No newline at end of file diff --git a/core/migrations/0014_student_region.py b/core/migrations/0014_student_region.py new file mode 100644 index 0000000..702015e --- /dev/null +++ b/core/migrations/0014_student_region.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-10-05 10:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0013_auto_20170602_1130'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='region', + field=models.CharField(blank=True, max_length=30, null=True), + ), + ] diff --git a/core/migrations/0015_merge_20191005_1957.py b/core/migrations/0015_merge_20191005_1957.py new file mode 100644 index 0000000..fe7de18 --- /dev/null +++ b/core/migrations/0015_merge_20191005_1957.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-10-05 12:57 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0014_feedback'), + ('core', '0014_company_category'), + ('core', '0014_student_region'), + ] + + operations = [ + ] diff --git a/core/models/accounts.py b/core/models/accounts.py index ed406bf..a118168 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -65,6 +65,7 @@ class Student(models.Model): batch = models.CharField(max_length=4, blank=True, null=True) show_transcript = models.BooleanField(default=False) photo = models.FileField(upload_to=get_student_photo_file_path, null=True, blank=True, validators=[validate_image_file_extension]) + region = models.CharField(max_length=30, blank=True, null=True) @property def name(self): diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index e57747c..5f3e8d1 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -19,7 +19,7 @@ class StudentSerializer(serializers.ModelSerializer): class Meta: model = Student fields = ['id', 'name', 'user', 'npm', 'resume', 'phone_number', 'birth_place', 'birth_date', 'major', 'batch', \ - 'show_transcript', 'photo', 'accepted_no'] + 'show_transcript', 'photo', 'accepted_no', 'region'] def get_accepted_no(self, obj): apps = Application.objects.filter(student=obj, status=4) @@ -41,6 +41,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'resume': resume, 'email': instance.user.email, 'phone_number': instance.phone_number, + 'region': instance.region, 'photo': photo, 'show_transcript': instance.show_transcript } @@ -49,6 +50,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): instance.resume = validated_data.get('resume', instance.resume) instance.show_transcript = validated_data.get('show_transcript', instance.show_transcript) instance.phone_number = validated_data.get('phone_number', instance.phone_number) + instance.region = validated_data.get('region', instance.region) instance.photo = validated_data.get('photo', instance.photo) instance.user.email = validated_data.get('email', instance.user.email) instance.save() @@ -57,7 +59,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): class Meta: model = Student - fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript'] + fields = ['resume', 'email', 'phone_number', 'region', 'photo', 'show_transcript'] class CompanyUpdateSerializer(serializers.ModelSerializer): diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 35812f9..d1ee00d 100644 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -136,6 +136,11 @@ class ProfileUpdateTests(APITestCase): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.data.get('phone_number'), '08123123123') + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'region': 'Indonesia'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('region'), 'Indonesia') + url = '/api/students/' + str(student_id) + "/profile/" response = self.client.patch(url, {'email': 'saasdasd'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1a8e2aa --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10643 @@ +{ + "name": "kape", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "~2.1.11", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "requires": { + "object-assign": "4.x" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "alter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "dev": true, + "requires": { + "stable": "~0.1.3" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.3.0.tgz", + "integrity": "sha1-y4qZhOKGJxHIPICt5bj1yg3itGc=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "array.prototype.find": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", + "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0" + } + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.0.tgz", + "integrity": "sha1-J5ZkJyNXOFlWVjP8YnRES+4vjOM=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "axios": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "requires": { + "follow-redirects": "1.0.0" + } + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "babel-traverse": "^6.23.1", + "babel-types": "^6.23.0", + "babylon": "^6.17.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-istanbul": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/babel-istanbul/-/babel-istanbul-0.3.20.tgz", + "integrity": "sha1-M7HralCJEEKhlUVp3KXPrymXreA=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "babel-core": "5.8.x", + "babel-runtime": "5.8.x", + "escodegen": "1.6.x", + "esprima": "2.5.x", + "fileset": "0.2.x", + "handlebars": "3.0.0", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "source-map": "0.4.x", + "supports-color": "1.3.x", + "which": "1.0.x", + "wordwrap": "0.0.x" + }, + "dependencies": { + "babel-core": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", + "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", + "dev": true, + "requires": { + "babel-plugin-constant-folding": "^1.0.1", + "babel-plugin-dead-code-elimination": "^1.0.2", + "babel-plugin-eval": "^1.0.1", + "babel-plugin-inline-environment-variables": "^1.0.1", + "babel-plugin-jscript": "^1.0.4", + "babel-plugin-member-expression-literals": "^1.0.1", + "babel-plugin-property-literals": "^1.0.1", + "babel-plugin-proto-to-assign": "^1.0.3", + "babel-plugin-react-constant-elements": "^1.0.3", + "babel-plugin-react-display-name": "^1.0.3", + "babel-plugin-remove-console": "^1.0.1", + "babel-plugin-remove-debugger": "^1.0.1", + "babel-plugin-runtime": "^1.0.7", + "babel-plugin-undeclared-variables-check": "^1.0.2", + "babel-plugin-undefined-to-void": "^1.1.6", + "babylon": "^5.8.38", + "bluebird": "^2.9.33", + "chalk": "^1.0.0", + "convert-source-map": "^1.1.0", + "core-js": "^1.0.0", + "debug": "^2.1.1", + "detect-indent": "^3.0.0", + "esutils": "^2.0.0", + "fs-readdir-recursive": "^0.1.0", + "globals": "^6.4.0", + "home-or-tmp": "^1.0.0", + "is-integer": "^1.0.4", + "js-tokens": "1.0.1", + "json5": "^0.4.0", + "lodash": "^3.10.0", + "minimatch": "^2.0.3", + "output-file-sync": "^1.1.0", + "path-exists": "^1.0.0", + "path-is-absolute": "^1.0.0", + "private": "^0.1.6", + "regenerator": "0.8.40", + "regexpu": "^1.3.0", + "repeating": "^1.1.2", + "resolve": "^1.1.6", + "shebang-regex": "^1.0.0", + "slash": "^1.0.0", + "source-map": "^0.5.0", + "source-map-support": "^0.2.10", + "to-fast-properties": "^1.0.0", + "trim-right": "^1.0.0", + "try-resolve": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", + "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", + "dev": true, + "requires": { + "core-js": "^1.0.0" + } + }, + "babylon": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", + "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", + "dev": true + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + }, + "detect-indent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" + } + }, + "fs-readdir-recursive": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", + "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", + "dev": true + }, + "globals": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", + "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", + "dev": true + }, + "home-or-tmp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", + "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", + "dev": true, + "requires": { + "os-tmpdir": "^1.0.1", + "user-home": "^1.1.1" + } + }, + "js-tokens": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", + "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", + "dev": true + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "^1.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "source-map-support": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "dev": true, + "requires": { + "source-map": "0.1.32" + }, + "dependencies": { + "source-map": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "supports-color": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", + "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=", + "dev": true + } + } + }, + "babel-istanbul-instrumenter-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-istanbul-instrumenter-loader/-/babel-istanbul-instrumenter-loader-1.0.1.tgz", + "integrity": "sha1-1LSYIJXd0eQ1wfyTPF4z55nkGNc=", + "dev": true, + "requires": { + "babel-istanbul": "^0.3.20" + } + }, + "babel-loader": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", + "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "loader-utils": "^0.2.16", + "mkdirp": "^0.5.1", + "object-assign": "^4.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-constant-folding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", + "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", + "dev": true + }, + "babel-plugin-dead-code-elimination": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", + "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", + "dev": true + }, + "babel-plugin-eval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", + "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", + "dev": true + }, + "babel-plugin-inline-environment-variables": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", + "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", + "dev": true + }, + "babel-plugin-jscript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", + "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", + "dev": true + }, + "babel-plugin-member-expression-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", + "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", + "dev": true + }, + "babel-plugin-property-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", + "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", + "dev": true + }, + "babel-plugin-proto-to-assign": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", + "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", + "dev": true, + "requires": { + "lodash": "^3.9.3" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "babel-plugin-react-constant-elements": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", + "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", + "dev": true + }, + "babel-plugin-react-display-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", + "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", + "dev": true + }, + "babel-plugin-remove-console": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", + "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", + "dev": true + }, + "babel-plugin-remove-debugger": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", + "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", + "dev": true + }, + "babel-plugin-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", + "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "requires": { + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "requires": { + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "requires": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "requires": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-undeclared-variables-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", + "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", + "dev": true, + "requires": { + "leven": "^1.0.2" + } + }, + "babel-plugin-undefined-to-void": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", + "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", + "dev": true + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" + } + }, + "babel-preset-es2016": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz", + "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=", + "dev": true, + "requires": { + "babel-plugin-transform-exponentiation-operator": "^6.24.1" + } + }, + "babel-preset-es2017": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", + "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.24.1" + } + }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "requires": { + "babel-plugin-transform-flow-strip-types": "^6.22.0" + } + }, + "babel-preset-latest": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz", + "integrity": "sha1-Z33gaRVKdIXC0lxXfAL2JLhbheg=", + "dev": true, + "requires": { + "babel-preset-es2015": "^6.24.1", + "babel-preset-es2016": "^6.24.1", + "babel-preset-es2017": "^6.24.1" + } + }, + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "requires": { + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "breakable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify-aes": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "^1.0.1", + "deep-eql": "^0.1.3", + "type-detect": "^1.0.0" + } + }, + "chai-as-promised": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz", + "integrity": "sha1-CdekApCKpw39vq1T5YU/x50+8hw=", + "dev": true + }, + "chai-dom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.8.1.tgz", + "integrity": "sha512-ysWinPU3fc+Bp+xMn/u2/PQyk65jnnCZl0alWupUuFFMGaG+KxrUnsoYOgjMDhSKPkm3WqE/5RTnOowIb7asMg==", + "dev": true + }, + "chai-jquery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chai-jquery/-/chai-jquery-2.1.0.tgz", + "integrity": "sha512-DiKSXcmInlt4d+WC5PkisDL5MsgJPd1lCSfZ3NgeSZJ34CJntEIpPOCdpalH2IhOWHeLpESJaiuHFxX1dpZ6bw==", + "dev": true + }, + "chai-things": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chai-things/-/chai-things-0.2.0.tgz", + "integrity": "sha1-xVEoN4+bs5nplPAAUhUZhO1uvnA=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true, + "optional": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "commander": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "commoner": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", + "dev": true, + "requires": { + "commander": "^2.5.0", + "detective": "^4.3.1", + "glob": "^5.0.15", + "graceful-fs": "^4.1.2", + "iconv-lite": "^0.4.5", + "mkdirp": "^0.5.0", + "private": "^0.1.6", + "q": "^1.1.2", + "recast": "^0.11.17" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + } + } + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", + "requires": { + "component-indexof": "0.0.3" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + } + } + }, + "compression-webpack-plugin": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-0.3.2.tgz", + "integrity": "sha1-Ht+w50nXNm0+cBZwxGM1mywM9wQ=", + "dev": true, + "requires": { + "async": "0.2.x", + "node-zopfli": "^2.0.0", + "webpack-sources": "^0.1.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true, + "optional": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "crypto-browserify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "dev": true, + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } + }, + "css-animation": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", + "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", + "requires": { + "babel-runtime": "6.x", + "component-classes": "^1.2.5" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "optional": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "defs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", + "dev": true, + "requires": { + "alter": "~0.2.0", + "ast-traverse": "~0.1.1", + "breakable": "~1.0.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "simple-fmt": "~0.1.0", + "simple-is": "~0.2.0", + "stringmap": "~0.2.2", + "stringset": "~0.2.1", + "tryor": "~0.1.2", + "yargs": "~3.27.0" + }, + "dependencies": { + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + } + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "^5.2.1", + "defined": "^1.0.0" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-scroll-into-view": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", + "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" + }, + "dependencies": { + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + } + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "envify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/envify/-/envify-0.2.0.tgz", + "integrity": "sha1-ZFCRz68Seff4NkqJOwz4HGgOy+A=", + "dev": true, + "requires": { + "falafel": "~0.2.1", + "through": "~2.3.4" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", + "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", + "dev": true, + "requires": { + "stackframe": "^0.3.1" + } + }, + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.51" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.6.1.tgz", + "integrity": "sha1-Nn3hfYUQVA0SvG3Liz+Rg5EmWBU=", + "dev": true, + "requires": { + "esprima": "^1.2.2", + "estraverse": "^1.9.1", + "esutils": "^1.1.6", + "optionator": "^0.5.0", + "source-map": "~0.1.40" + }, + "dependencies": { + "esprima": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=", + "dev": true + }, + "esutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", + "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "eslint-config-airbnb": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-14.1.0.tgz", + "integrity": "sha1-NV0pAEC7+OAL+LSxn0twy+fCMX8=", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^11.1.0" + } + }, + "eslint-config-airbnb-base": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz", + "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==", + "dev": true, + "requires": { + "eslint-restricted-globals": "^0.1.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz", + "integrity": "sha1-d5uw/nsI2lZKQiYkkR3hAGHgSO4=", + "dev": true, + "requires": { + "aria-query": "^0.3.0", + "ast-types-flow": "0.0.7", + "damerau-levenshtein": "^1.0.0", + "emoji-regex": "^6.1.0", + "jsx-ast-utils": "^1.0.0", + "object-assign": "^4.0.1" + } + }, + "eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "dev": true, + "requires": { + "array.prototype.find": "^2.0.1", + "doctrine": "^1.2.2", + "has": "^1.0.1", + "jsx-ast-utils": "^1.3.4", + "object.assign": "^4.0.4" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-watch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/eslint-watch/-/eslint-watch-3.1.5.tgz", + "integrity": "sha512-6iEMRwo6RUpSaYyU7547qWQbgUKSYtkn4eGId/hZJvi+gMnRVeNfIzv/HAOPUmH6y53p1Ks9oNvWm/xZh4RPGQ==", + "dev": true, + "requires": { + "babel-polyfill": "^6.20.0", + "bluebird": "^3.5.1", + "chalk": "^2.1.0", + "chokidar": "^2.0.0", + "debug": "^3.0.1", + "keypress": "^0.2.1", + "lodash": "^4.17.4", + "optionator": "^0.8.2", + "source-map-support": "^0.5.3", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "unicons": "0.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "bluebird": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", + "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.5.0.tgz", + "integrity": "sha1-84ekb9NEwbGjm6+MIL+0O20AWMw=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "^0.1.0" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "falafel": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-0.2.1.tgz", + "integrity": "sha1-nvxRzhnsVykIayKuiJ5dfQ4lZgE=", + "dev": true, + "requires": { + "esprima": "github:substack/esprima#is-keyword" + }, + "dependencies": { + "esprima": { + "version": "github:substack/esprima#0a7f8489a11b44b019ce168506f535f22d0be290", + "from": "github:substack/esprima#is-keyword", + "dev": true + } + } + }, + "fast-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", + "integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "fetch-mock": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-5.13.1.tgz", + "integrity": "sha512-eWUo2KI4sRGnRu8tKELCBfasALM5BfvrCxdI7J02j3eUM9mf+uYzJkURA0PSn/29JVapVrYFm+z+9XijXu1PdA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.3.0", + "node-fetch": "^1.3.3", + "path-to-regexp": "^1.7.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.2.1.tgz", + "integrity": "sha1-WI74lzxmI7KnbfRlEFaWuWqsgGc=", + "dev": true, + "requires": { + "glob": "5.x", + "minimatch": "2.x" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "^1.0.0" + } + } + } + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "requires": { + "debug": "^2.2.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "formatio": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", + "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "dev": true, + "requires": { + "samsam": "~1.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "handlebars": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-3.0.0.tgz", + "integrity": "sha1-f05Tf03WmShp1mwBt1BeujVhpdU=", + "dev": true, + "requires": { + "optimist": "^0.6.1", + "source-map": "^0.1.40", + "uglify-js": "~2.3" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "happypack": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/happypack/-/happypack-3.1.0.tgz", + "integrity": "sha1-i8VeNwG6z/cY04icuItQIWQcrVk=", + "requires": { + "async": "1.5.0", + "json-stringify-safe": "5.0.1", + "loader-utils": "0.2.16", + "mkdirp": "0.5.1", + "serialize-error": "^2.1.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "history": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz", + "integrity": "sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=", + "requires": { + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "query-string": "^4.2.2", + "warning": "^3.0.0" + } + }, + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.2.tgz", + "integrity": "sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-integer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", + "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", + "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", + "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "isparta": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/isparta/-/isparta-4.1.1.tgz", + "integrity": "sha512-kGwkNqmALQzdfGhgo5o8kOA88p14R3Lwg0nfQ/qzv4IhB4rXarT9maPMaYbo6cms4poWbeulrlFlURLUR6rDwQ==", + "dev": true, + "requires": { + "babel-core": "^6.1.4", + "escodegen": "^1.6.1", + "esprima": "^4.0.0", + "istanbul": "0.4.5", + "mkdirp": "^0.5.0", + "nomnomnomnom": "^2.0.0", + "object-assign": "^4.0.1", + "source-map": "^0.5.0", + "which": "^1.0.9" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "isparta-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isparta-loader/-/isparta-loader-2.0.0.tgz", + "integrity": "sha1-RCX0lsk/dlu8603ZOFdtowdWbtE=", + "dev": true, + "requires": { + "isparta": "4.x.x" + } + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "handlebars": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.2.tgz", + "integrity": "sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", + "dev": true, + "requires": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + } + } + }, + "istanbul-instrumenter-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz", + "integrity": "sha1-5UkpAKsLuoNe+oAkywC+mz7qJwA=", + "dev": true, + "requires": { + "convert-source-map": "^1.3.0", + "istanbul-lib-instrument": "^1.1.3", + "loader-utils": "^0.2.16", + "object-assign": "^4.1.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + }, + "dependencies": { + "handlebars": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.2.tgz", + "integrity": "sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + } + } + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", + "dev": true + }, + "karma": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^3.8.0", + "log4js": "^0.6.31", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "1.7.3", + "source-map": "^0.5.3", + "tmp": "0.0.31", + "useragent": "^2.1.12" + }, + "dependencies": { + "bluebird": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", + "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-chai-plugins": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/karma-chai-plugins/-/karma-chai-plugins-0.8.0.tgz", + "integrity": "sha1-4YN055tija27q6F37TSNEwh59o0=", + "dev": true, + "requires": { + "chai": "^3.4.1", + "chai-as-promised": "^5.1.0", + "chai-dom": "^1.2.2", + "chai-jquery": "^2.0.0", + "chai-things": "^0.2.0", + "sinon": "^1.17.2", + "sinon-chai": "^2.8.0" + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "karma-coverage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", + "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", + "dev": true, + "requires": { + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "lodash": "^4.17.0", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.3.tgz", + "integrity": "sha1-O13/RmT6W41RlrmInj9hwforgNk=", + "dev": true, + "requires": { + "istanbul-api": "^1.3.1", + "minimatch": "^3.0.4" + } + }, + "karma-firefox-launcher": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz", + "integrity": "sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ==", + "dev": true, + "requires": { + "is-wsl": "^2.1.0" + } + }, + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "karma-webpack": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.13.tgz", + "integrity": "sha512-2cyII34jfrAabbI2+4Rk4j95Nazl98FvZQhgSiqKUDarT317rxfv/EdzZ60CyATN4PQxJdO5ucR5bOOXkEVrXw==", + "dev": true, + "requires": { + "async": "^2.0.0", + "babel-runtime": "^6.0.0", + "loader-utils": "^1.0.0", + "lodash": "^4.0.0", + "source-map": "^0.5.6", + "webpack-dev-middleware": "^1.12.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "keypress": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", + "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "leven": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", + "dev": true + }, + "levn": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", + "integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.0", + "type-check": "~0.3.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "loader-utils": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.16.tgz", + "integrity": "sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=", + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._basecreate": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "~1.0.2", + "semver": "~4.3.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "lolex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", + "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "mock-cookie": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mock-cookie/-/mock-cookie-0.3.2.tgz", + "integrity": "sha1-K/VkO+oAJ7rGTPISa2r6XjAhX0U=", + "dev": true + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "needle": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + } + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-libs-browser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.1.4", + "buffer": "^4.9.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "0.0.1", + "os-browserify": "^0.2.0", + "path-browserify": "0.0.0", + "process": "^0.11.0", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.0.5", + "stream-browserify": "^2.0.1", + "stream-http": "^2.3.1", + "string_decoder": "^0.10.25", + "timers-browserify": "^2.0.2", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "node-pre-gyp": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", + "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "node-zopfli": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-zopfli/-/node-zopfli-2.0.3.tgz", + "integrity": "sha512-ydEByn1ljj+phArLpuFiIP3FBLkYMmN6SuNovPOJQ9owJewS5EULMo0dHzidgVkvMaS03E3bYkrv9utOXCLCuA==", + "dev": true, + "optional": true, + "requires": { + "commander": "^2.20.0", + "defaults": "^1.0.3", + "nan": "^2.13.2", + "node-pre-gyp": "^0.13.0" + } + }, + "nomnomnomnom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nomnomnomnom/-/nomnomnomnom-2.0.1.tgz", + "integrity": "sha1-siOfAxyNBNpn4yg24eMZnhL3qOI=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "open": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "optionator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.5.0.tgz", + "integrity": "sha1-t1qJlaLUF98ltuTjhi9QqohlE2g=", + "dev": true, + "requires": { + "deep-is": "~0.1.2", + "fast-levenshtein": "~1.0.0", + "levn": "~0.2.5", + "prelude-ls": "~1.1.1", + "type-check": "~0.3.1", + "wordwrap": "~0.0.2" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pbkdf2-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "rc-animate": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.10.0.tgz", + "integrity": "sha512-gZM3WteZO0e3X8B71KP0bs95EY2tAPRuiZyKnlhdLpOjTX/64SrhDZM3pT2Z8mJjKWNiiB5q2SSSf+BD8ljwVw==", + "requires": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "css-animation": "^1.3.2", + "prop-types": "15.x", + "raf": "^3.4.0", + "rc-util": "^4.8.0", + "react-lifecycles-compat": "^3.0.4" + }, + "dependencies": { + "rc-util": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.11.2.tgz", + "integrity": "sha512-BsQlyu5MnoJ/U1qYmv2OBJ41zLo2USJDwjalHXDORI/4tcwPyR9MCufIjZnI8bbRPSfwQsddc86izTtKVRUVRw==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "babel-runtime": "6.x", + "prop-types": "^15.5.10", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^0.2.2" + } + } + } + }, + "rc-util": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-3.4.1.tgz", + "integrity": "sha1-S34LDHWTvbz/jtBF2I+7x3OnsGE=", + "requires": { + "add-dom-event-listener": "1.x", + "classnames": "2.x", + "shallowequal": "0.2.x" + } + }, + "react": { + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/react/-/react-15.4.2.tgz", + "integrity": "sha1-QfeZGyYYU5K6m66WyIiefgGDl+8=", + "requires": { + "fbjs": "^0.8.4", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0" + } + }, + "react-addons-test-utils": { + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz", + "integrity": "sha1-k7yqcY/K5zYNQuj7HAl1bMNjAqI=", + "requires": { + "fbjs": "^0.8.4", + "object-assign": "^4.1.0" + } + }, + "react-ckeditor-wrapper": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/react-ckeditor-wrapper/-/react-ckeditor-wrapper-1.1.2.tgz", + "integrity": "sha512-/COVfezpSKFQxC/OjFoZf1PyzxTvUxzndlpGjEcajzjRgKPzSFZiCoh/VqqwGaaHJROO9pePQ9JxmJy2YlzDAQ==", + "requires": { + "babel-runtime": "6.x", + "classnames": "2.x", + "dom-scroll-into-view": "1.x", + "happypack": "3.1.0", + "rc-animate": "2.x", + "rc-util": "3.x" + } + }, + "react-datepicker": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-0.44.0.tgz", + "integrity": "sha1-wJ8o06oG56yXBi8q8Gnkwdtdkn0=", + "requires": { + "classnames": "^2.2.5", + "moment": "^2.17.1", + "react-onclickoutside": "^5.9.0", + "tether": "^1.4.0" + } + }, + "react-deep-force-update": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-2.1.3.tgz", + "integrity": "sha512-lqD4eHKVuB65RyO/hGbEST53E2/GPbcIPcFYyeW/p4vNngtH4G7jnKGlU6u1OqrFo0uNfIvwuBOg98IbLHlNEA==", + "dev": true + }, + "react-dom": { + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.4.2.tgz", + "integrity": "sha1-AVNj8FsKH9Uq6e/dOgBg2QaVII8=", + "requires": { + "fbjs": "^0.8.1", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0" + } + }, + "react-hot-loader": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-3.1.3.tgz", + "integrity": "sha512-d7nZf78irxoGN5PY4zd6CSgZiroOhvIWzRast3qwTn4sSnBwlt08kV8WMQ9mitmxEdlCTwZt+5ClrRSjxWguMQ==", + "dev": true, + "requires": { + "global": "^4.3.0", + "react-deep-force-update": "^2.1.1", + "react-proxy": "^3.0.0-alpha.0", + "redbox-react": "^1.3.6", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "react-is": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-onclickoutside": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-5.11.1.tgz", + "integrity": "sha1-ADFOUlZ89V+rqUyrus0RlhkHBiM=", + "requires": { + "create-react-class": "^15.5.x" + } + }, + "react-proxy": { + "version": "3.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz", + "integrity": "sha1-RABCa8+oDKpnJMd1VpUxUgn6Swc=", + "dev": true, + "requires": { + "lodash": "^4.6.1" + } + }, + "react-router": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-3.2.4.tgz", + "integrity": "sha512-5kIJXV1Yx+FYk0lDJoPQnt+qFf7HxS6XrIm2aCw0r3XQTxixFd0HSVlHenYRWKmSHlcvSQ7bpYWgdRwJGXWPKw==", + "requires": { + "create-react-class": "^15.5.1", + "history": "^3.0.0", + "hoist-non-react-statics": "^2.3.1", + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "prop-types": "^15.7.2", + "react-is": "^16.8.6", + "warning": "^3.0.0" + } + }, + "react-tap-event-plugin": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-tap-event-plugin/-/react-tap-event-plugin-2.0.1.tgz", + "integrity": "sha1-MWvrO8ZVbinshppyk+icgmqQdNI=", + "requires": { + "fbjs": "^0.8.6" + } + }, + "react-test-utils": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/react-test-utils/-/react-test-utils-0.0.1.tgz", + "integrity": "sha1-zWmjfD5Ncm40l+MlRioyeFoZwCY=", + "dev": true, + "requires": { + "envify": "~0.2.0", + "react": "~0.8.0" + }, + "dependencies": { + "react": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/react/-/react-0.8.0.tgz", + "integrity": "sha1-mu8NvD4FtE2WE5zb2qXXJ7BQbh4=", + "dev": true + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "recast": { + "version": "0.10.33", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", + "dev": true, + "requires": { + "ast-types": "0.8.12", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "ast-types": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", + "dev": true + }, + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redbox-react": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/redbox-react/-/redbox-react-1.6.0.tgz", + "integrity": "sha512-mLjM5eYR41yOp5YKHpd3syFeGq6B4Wj5vZr64nbLvTZW5ZLff4LYk7VE4ITpVxkZpCY6OZuqh0HiP3A3uEaCpg==", + "dev": true, + "requires": { + "error-stack-parser": "^1.3.6", + "object-assign": "^4.0.1", + "prop-types": "^15.5.4", + "sourcemapped-stacktrace": "^1.1.6" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator": { + "version": "0.8.40", + "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", + "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", + "dev": true, + "requires": { + "commoner": "~0.10.3", + "defs": "~1.1.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "recast": "0.10.33", + "through": "~2.3.8" + }, + "dependencies": { + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", + "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", + "dev": true, + "requires": { + "esprima": "^2.6.0", + "recast": "^0.10.10", + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", + "dev": true + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "samsam": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", + "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semantic-ui-react": { + "version": "0.67.2", + "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-0.67.2.tgz", + "integrity": "sha1-MMEnEjn65ySpYRfOoIe/MIT4SA4=", + "requires": { + "babel-runtime": "^6.22.0", + "classnames": "^2.1.5", + "debug": "^2.6.3", + "lodash": "^4.17.2" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", + "dev": true + }, + "shallowequal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", + "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", + "requires": { + "lodash.keys": "^3.1.2" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-fmt": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", + "dev": true + }, + "simple-is": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", + "dev": true + }, + "sinon": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", + "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", + "dev": true, + "requires": { + "formatio": "1.1.1", + "lolex": "1.3.2", + "samsam": "1.1.2", + "util": ">=0.10.3 <1" + } + }, + "sinon-chai": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", + "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemapped-stacktrace": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.11.tgz", + "integrity": "sha512-O0pcWjJqzQFVsisPlPXuNawJHHg9N9UgpJ/aDmvi9+vnS3x1C0NhwkVFzzZ1VN0Xo+bekyweoqYvBw5ZBKiNnQ==", + "dev": true, + "requires": { + "source-map": "0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", + "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", + "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", + "dev": true + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringmap": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", + "dev": true + }, + "stringset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "tether": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/tether/-/tether-1.4.7.tgz", + "integrity": "sha512-Z0J1aExjoFU8pybVkQAo/vD2wfSO63r+XOPfWQMC5qtf1bI7IWqNk4MiyBcgvvnY8kqnY06dVdvwTK2S3PU/Fw==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "time-stamp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", + "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", + "dev": true + }, + "tryor": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.20", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", + "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" + }, + "uglify-js": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", + "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=", + "dev": true, + "optional": true, + "requires": { + "async": "~0.2.6", + "optimist": "~0.3.5", + "source-map": "~0.1.7" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true, + "optional": true + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "optional": true, + "requires": { + "wordwrap": "~0.0.2" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "unicons": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/unicons/-/unicons-0.0.3.tgz", + "integrity": "sha1-bmp6Gm6uuwHKPYsSrZaHJ56rpSQ=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "util": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.1.tgz", + "integrity": "sha512-MREAtYOp+GTt9/+kwf00IYoHZyjM8VU4aVrkzUlejyqaIjd2GztVl5V9hGXKlvBKE3gENn/FMfHE5v6hElXGcQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "object.entries": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "^1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "dev": true, + "requires": { + "async": "^0.9.0", + "chokidar": "^1.0.0", + "graceful-fs": "^4.1.2" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "webpack": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", + "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", + "dev": true, + "requires": { + "acorn": "^3.0.0", + "async": "^1.3.0", + "clone": "^1.0.2", + "enhanced-resolve": "~0.9.0", + "interpret": "^0.6.4", + "loader-utils": "^0.2.11", + "memory-fs": "~0.3.0", + "mkdirp": "~0.5.0", + "node-libs-browser": "^0.7.0", + "optimist": "~0.6.0", + "supports-color": "^3.1.0", + "tapable": "~0.1.8", + "uglify-js": "~2.7.3", + "watchpack": "^0.2.1", + "webpack-core": "~0.6.9" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", + "dev": true + }, + "memory-fs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "webpack-bundle-tracker": { + "version": "0.0.93", + "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-0.0.93.tgz", + "integrity": "sha1-+gs3ZMJU8mawXaxBgHY7bc5MXLk=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1", + "strip-ansi": "^2.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", + "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=", + "dev": true + }, + "strip-ansi": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", + "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", + "dev": true, + "requires": { + "ansi-regex": "^1.0.0" + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "1.16.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz", + "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", + "dev": true, + "requires": { + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "express": "^4.13.3", + "http-proxy-middleware": "~0.17.1", + "open": "0.0.5", + "optimist": "~0.6.1", + "serve-index": "^1.7.2", + "sockjs": "^0.3.15", + "sockjs-client": "^1.0.3", + "stream-cache": "~0.0.1", + "strip-ansi": "^3.0.0", + "supports-color": "^3.1.1", + "webpack-dev-middleware": "^1.10.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.5.3" + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", + "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", + "dev": true, + "requires": { + "camelcase": "^1.2.1", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "os-locale": "^1.4.0", + "window-size": "^0.1.2", + "y18n": "^3.2.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/requirements.txt b/requirements.txt old mode 100755 new mode 100644 index 46dd30d..b09af25 --- a/requirements.txt +++ b/requirements.txt @@ -1,16 +1,16 @@ -appdirs==1.4.0 -Django==1.10.5 -django-webpack-loader==0.4.1 -djangorestframework==3.5.4 -packaging==16.8 -psycopg2==2.6.2 -pyparsing==2.1.10 -six==1.10.0 -gunicorn -django-nose==1.4.4 -coverage -django-rest-swagger -django-silk==1.0.0 -requests -requests-mock==1.3.0 -django-filter==1.1.0 +appdirs==1.4.0 +Django==1.11.17 +django-webpack-loader==0.4.1 +djangorestframework==3.5.4 +packaging==16.8 +psycopg2-binary==2.8.3 +pyparsing==2.1.10 +six==1.10.0 +gunicorn +django-nose +coverage +django-rest-swagger +django-silk +requests +requests-mock +django-filter==1.1.0 -- GitLab From ef66ae2f2a279692c356b5e0f80d10c26222195d Mon Sep 17 00:00:00 2001 From: Muhammad Ilham Peruzzi Date: Sat, 5 Oct 2019 23:13:42 +0700 Subject: [PATCH 010/103] change open_time value because there is bug in newer python and change closed_time value to use timezone module instead --- core/tests/test_vacancies.py | 45 +++++++------- core/views/vacancies.py | 111 ++++++++++++++++++++++++----------- 2 files changed, 100 insertions(+), 56 deletions(-) diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index 1667ac1..d8c654f 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -1,4 +1,5 @@ from datetime import datetime +from django.utils import timezone import requests_mock from django.contrib.auth.models import User @@ -70,8 +71,8 @@ class ApplicationTests(APITestCase): new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) url = '/api/students/' + str(student_id) + '/applied-vacancies/' response = self.client.post(url, {'vacancy_id': new_vacancy.pk, 'cover_letter': 'this is a cover letter.'}, @@ -144,8 +145,8 @@ class BookmarkApplicationTests(APITestCase): new_user = User.objects.create_user('dummy.company2', 'dummy.compan2y@company.com', 'lalala123') new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) url = '/api/students/' + str(student_id) + '/bookmarked-vacancies/' response = self.client.post(url, {'vacancy_id': new_vacancy.pk}, format='json') @@ -253,8 +254,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -271,8 +272,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.student', 'dummy.company3@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") new_user3 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') @@ -293,8 +294,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.student', 'dummy.company3@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") new_user3 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') @@ -315,8 +316,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -333,8 +334,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -352,8 +353,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -371,8 +372,8 @@ class CompanyListsTests(APITestCase): new_user2 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') new_student = Student.objects.create(user=new_user2, npm=1234123412) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -410,8 +411,8 @@ class SupervisorApprovalTests(APITestCase): new_user2 = User.objects.create_user('dummy.company2', 'dummy.compan2y@company.com', 'lalala123') new_company2 = Company.objects.create(user=new_user2, description="lalala", status=Company.VERIFIED, logo=None, address=None) - new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=False, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=False, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) url = '/api/vacancies/' + str(new_vacancy2.pk) + '/verify/' response = self.client.patch(url, {'verified': True}, format='json') @@ -426,8 +427,8 @@ class SupervisorApprovalTests(APITestCase): address=None) self.client.force_authenticate(user=new_user) - new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(1541319300.0), + description="lalala", close_time=timezone.now()) url = '/api/vacancies/' + str(new_vacancy.pk) + '/verify/' response = self.client.patch(url, format='json') diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 39f7422..56165ca 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -187,6 +187,11 @@ class StudentApplicationViewSet(viewsets.GenericViewSet): application.delete() return Response(ApplicationSerializer(application, context={'request': request}).data) +class StatusError(Exception): + pass + +class UnauthorizeError(Exception): + pass class CompanyApplicationViewSet(viewsets.GenericViewSet): queryset = Application.objects.all() @@ -198,18 +203,25 @@ class CompanyApplicationViewSet(viewsets.GenericViewSet): Get list of company {company_id}'s applications --- """ - company = get_object_or_404(Company.objects.all(), pk=company_id) - if not request.user.is_superuser and request.user != company.user: + try: + company = self.__get_company_list_by_company_id(request, company_id) + vacancies = self.__get_vacancy_list_filter_by_company(company) + applications = self.__get_application_list_filter_by_vacancies(vacancies) + st = self.__get_status_from_request_param(request) + if st is not None: + st = int(st) + self.__validating_application_status(st) + applications = applications.filter(status=st) + page = self.paginate_queryset(applications) + if page is not None: + return self.get_paginated_response( + ApplicationSerializer(page, many=True, context={'request': request}).data) + return Response(ApplicationSerializer(applications, many=True, context={'request': request}).data) + except UnauthorizeError: return Response({"error": "forbidden"}, status=status.HTTP_403_FORBIDDEN) - vacancies = Vacancy.objects.filter(company=company) - applications = Application.objects.filter(vacancy__in=vacancies) - if 'status' in request.query_params: - applications = applications.filter(status=request.query_params['status']) - page = self.paginate_queryset(applications) - if page is not None: - return self.get_paginated_response( - ApplicationSerializer(page, many=True, context={'request': request}).data) - return Response(ApplicationSerializer(applications, many=True, context={'request': request}).data) + except (StatusError, ValueError): + return Response({"error": "status must be an integer between 0 and 4"}, \ + status=status.HTTP_400_BAD_REQUEST) @detail_route(methods=["get"]) def by_vacancy(self, request, company_id, pk=None): @@ -217,32 +229,63 @@ class CompanyApplicationViewSet(viewsets.GenericViewSet): Get list of company {company_id}'s applications by vacancy {id} --- """ - if pk is None: - return list(self, request, company_id) - company = get_object_or_404(Company.objects.all().order_by('-updated'), pk=company_id) - if not request.user.is_superuser and request.user != company.user: - return Response({"error": "forbidden"}, status=status.HTTP_403_FORBIDDEN) - vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk) - if vacancy.company != company: - return Response({"error": "forbidden"}, status=status.HTTP_403_FORBIDDEN) - applications = Application.objects.filter(vacancy=vacancy) - st = request.query_params.get('status', None) - if st is not None: - try: + try: + if pk is None: + return list(self, request, company_id) + company = self.__get_company_list_by_company_id(request, company_id) + vacancy = self.__get_vacancy_list_by_pk(pk, company) + applications = self.__get_aplication_by_vacancy(vacancy) + st = self.__get_status_from_request_param(request) + if st is not None: st = int(st) - if st < 0 or st > 4: - return Response({"error": "status must be an integer between 0 and 4"}, - status=status.HTTP_400_BAD_REQUEST) + self.__validating_application_status(st) applications = applications.filter(status=st) - except: - return Response({"error": "status must be an integer between 0 and 4"}, \ - status=status.HTTP_400_BAD_REQUEST) - page = self.paginate_queryset(applications) - if page is not None: - return self.get_paginated_response( - ApplicationSerializer(page, many=True, context={'request': request}).data) - return Response(ApplicationSerializer(applications, many=True, context={'request': request}).data) + page = self.paginate_queryset(applications) + if page is not None: + return self.get_paginated_response( + ApplicationSerializer(page, many=True, context={'request': request}).data) + return Response(ApplicationSerializer(applications, many=True, context={'request': request}).data) + except UnauthorizeError: + return Response({"error": "forbidden"}, status=status.HTTP_403_FORBIDDEN) + except (StatusError, ValueError): + return Response({"error": "status must be an integer between 0 and 4"}, \ + status=status.HTTP_400_BAD_REQUEST) + def __get_company_list_by_company_id(self, request, company_id): + company = get_object_or_404(Company.objects.all().order_by('-updated'), pk=company_id) + if not self.__validating_user(request, company): + raise UnauthorizeError + return company + + def __validating_user(self, request, company): + return request.user.is_superuser or request.user == company.user + + def __get_vacancy_list_by_pk(self, pk, company): + vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk) + if not self.__validating_vacancy(vacancy, company): + raise UnauthorizeError + return vacancy + + def __validating_vacancy(self, vacancy, company): + return vacancy.company == company + + def __get_vacancy_list_filter_by_company(self, company): + return Vacancy.objects.filter(company=company) + + def __get_application_list_filter_by_vacancies(self, vacancies): + return Application.objects.filter(vacancy__in=vacancies) + + def __get_aplication_by_vacancy(self, vacancy): + return Application.objects.filter(vacancy=vacancy) + + def __get_status_from_request_param(self, request): + return request.query_params.get('status', None) + + def __validating_application_status(self, status): + list_status = {0 : "NEW", 1 : "READ", 2 : "BOOKMARKED", 3 : "REJECTED", 4: "ACCEPTED"} + if status not in list_status: + raise StatusError + return True class CompanyVacanciesViewSet(viewsets.GenericViewSet): queryset = Vacancy.objects.all() -- GitLab From 4c82b1b6470efab08eb5565c934ceef322950fb7 Mon Sep 17 00:00:00 2001 From: Fajrin Kingwijati Date: Sun, 6 Oct 2019 00:30:41 +0700 Subject: [PATCH 011/103] Merge branch '1606837631-hotfix-migrations_conflict' of gitlab.cs.ui.ac.id:pmpl/class-project/kape into 1606837631-hotfix-migrations_conflict --- core/migrations/0015_merge_20191005_1926.py | 16 ++++++++++++++++ core/migrations/0016_merge_20191005_2235.py | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 core/migrations/0015_merge_20191005_1926.py create mode 100644 core/migrations/0016_merge_20191005_2235.py diff --git a/core/migrations/0015_merge_20191005_1926.py b/core/migrations/0015_merge_20191005_1926.py new file mode 100644 index 0000000..ae7f6c5 --- /dev/null +++ b/core/migrations/0015_merge_20191005_1926.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 12:26 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0014_feedback'), + ('core', '0014_company_category'), + ] + + operations = [ + ] diff --git a/core/migrations/0016_merge_20191005_2235.py b/core/migrations/0016_merge_20191005_2235.py new file mode 100644 index 0000000..eb0946c --- /dev/null +++ b/core/migrations/0016_merge_20191005_2235.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 15:35 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0015_merge_20191005_1926'), + ('core', '0015_merge_20191005_1957'), + ] + + operations = [ + ] -- GitLab From 3e2bed982cf45edfea95a92efdee91084a20133a Mon Sep 17 00:00:00 2001 From: Muhammad At Thoriq Date: Sun, 6 Oct 2019 03:30:36 +0700 Subject: [PATCH 012/103] Merge branch 'master' into '1606918484-03' # Conflicts: # kape/urls.py --- core/migrations/0015_merge_20191005_2038.py | 16 ++++ core/migrations/0017_merge_20191006_0134.py | 16 ++++ core/models/vacancies.py | 1 + core/serializers/vacancies.py | 2 +- core/tests/test_vacancies.py | 93 +++++++++++++++++++++ core/views/vacancies.py | 20 +++++ kape/urls.py | 3 +- 7 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 core/migrations/0015_merge_20191005_2038.py create mode 100644 core/migrations/0017_merge_20191006_0134.py diff --git a/core/migrations/0015_merge_20191005_2038.py b/core/migrations/0015_merge_20191005_2038.py new file mode 100644 index 0000000..d4afc1b --- /dev/null +++ b/core/migrations/0015_merge_20191005_2038.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 13:38 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0014_feedback'), + ('core', '0014_company_category'), + ] + + operations = [ + ] diff --git a/core/migrations/0017_merge_20191006_0134.py b/core/migrations/0017_merge_20191006_0134.py new file mode 100644 index 0000000..d41f21a --- /dev/null +++ b/core/migrations/0017_merge_20191006_0134.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 18:34 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0015_merge_20191005_2038'), + ('core', '0016_merge_20191005_2235'), + ] + + operations = [ + ] diff --git a/core/models/vacancies.py b/core/models/vacancies.py index f2b5dc4..8968e62 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -23,6 +23,7 @@ class Application(models.Model): BOOKMARKED = 2 REJECTED = 3 ACCEPTED = 4 + ABORTED = 5 cover_letter = models.TextField(null=True, blank=True) student = models.ForeignKey(Student, on_delete=models.CASCADE) diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index 313f206..a2bd2e4 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -61,7 +61,7 @@ class ApplicationStatusSerializer(serializers.ModelSerializer): class SupervisorStudentApplicationSerializer(serializers.ModelSerializer): def to_representation(self, instance): - status_map = ["new", "read", "bookmarked", "rejected", "accepted" ] + status_map = ["new", "read", "bookmarked", "rejected", "accepted","aborted" ] return { 'name' : instance.student.full_name, 'npm' : instance.student.npm, diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index d8c654f..f6ab793 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -1,6 +1,7 @@ from datetime import datetime from django.utils import timezone +import json import requests_mock from django.contrib.auth.models import User from rest_framework import status @@ -434,3 +435,95 @@ class SupervisorApprovalTests(APITestCase): response = self.client.patch(url, format='json') self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(new_vacancy.verified, False) + +class AcceptOneOfferTests(APITestCase): + + def generateObject(self): + new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, + address=None) + + new_user2 = User.objects.create_user('dummy.company2', 'dummy.company2@company.com', 'lalala123') + new_company2 = Company.objects.create(user=new_user2, description="lalala", status=Company.VERIFIED, logo=None, + address=None) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today()) + + new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today()) + + new_user3 = User.objects.create_user('dummy.student', 'dummy.student@company.com', 'lalala123') + new_student = Student.objects.create(user=new_user3, npm=1234123412) + + return new_user3, new_vacancy, new_vacancy2, new_student + + def test_number_of_content_response_object_given_id_auth(self): + + new_user3, new_vacancy, new_vacancy2, new_student = self.generateObject() + + self.client.force_authenticate(new_user3) + + Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") + Application.objects.create(student=new_student, vacancy=new_vacancy2, cover_letter="asdasdasd") + + url = '/api/acceptoffer/' + str(new_student.pk) + '/vacancy/' + str(new_vacancy.pk) + '/' + + response = self.client.patch(url, format='json') + body = json.loads(response.content) + + status_response = [] + for app in body: + status_response.append(app['status']) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertTrue(len(body) >= 2) + self.assertFalse(len(body) == 0) + self.assertTrue('new' in status_response) + self.assertTrue('aborted' in status_response) + + def test_student_not_exist_given_auth(self): + new_user3,new_vacancy, new_vacancy2, new_student = self.generateObject() + + self.client.force_authenticate(new_user3) + + user4 = User.objects.create_user('student_user_4', 'student_user_4@company.com', 'lalala123') + other_student = Student.objects.create(user=user4, npm=1098765432) + + Application.objects.create(student=other_student, vacancy=new_vacancy, cover_letter="asdasdasd") + Application.objects.create(student=other_student, vacancy=new_vacancy2, cover_letter="asdasdasd") + + url = '/api/acceptoffer/' + str(new_student.pk) + '/vacancy/' + str(new_vacancy.pk) + '/' + + response = self.client.patch(url, format='json') + body = json.loads(response.content) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertTrue(len(body) == 0) + + def test_type_error_if_input_null(self): + new_user3, new_vacancy, new_vacancy2, new_student = self.generateObject() + + self.client.force_authenticate(new_user3) + + Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") + Application.objects.create(student=new_student, vacancy=new_vacancy2, cover_letter="asdasdasd") + + with self.assertRaises(TypeError): + url = '/api/acceptoffer/' + None + '/vacancy/' + str(new_vacancy.pk) + '/' + + with self.assertRaises(TypeError): + url = '/api/acceptoffer/' + str(new_student.pk) + '/vacancy/' + None + '/' + + def test_if_requester_is_not_authenticated(self): + new_user3, new_vacancy, new_vacancy2, new_student = self.generateObject() + + Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") + Application.objects.create(student=new_student, vacancy=new_vacancy2, cover_letter="asdasdasd") + + url = '/api/acceptoffer/' + str(new_student.pk) + '/vacancy/' + str(new_vacancy.pk) + '/' + + response = self.client.patch(url, format='json') + body = json.loads(response.content) + + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 56165ca..2f80513 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -350,3 +350,23 @@ class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet): student.bookmarked_vacancies.remove(vacancy) return Response( self.serializer_class(student.bookmarked_vacancies, many=True, context={'request': request}).data) + +class AcceptOfferByStudentViewSet(MultiSerializerViewSetMixin, viewsets.GenericViewSet): + queryset = Application.objects.all() + permission_classes = [IsAdminOrStudent] + + def partial_update(self, request, student_id, pk=None): + """ + Get list of a student {student_id}'s cancel offered vacancies + --- + """ + student = get_object_or_404(Student.objects.all().order_by('-updated'), pk=student_id) + apps = Application.objects.filter(student=student) + + for a in apps: + if a.vacancy_id != int(pk): + serializer = ApplicationStatusSerializer(a, data={'status': 5}, partial=True) + if serializer.is_valid(): + serializer.save() + + return Response(SupervisorStudentApplicationSerializer(apps, many=True, context={'request': request}).data) \ No newline at end of file diff --git a/kape/urls.py b/kape/urls.py index 5ae9c07..ade154c 100755 --- a/kape/urls.py +++ b/kape/urls.py @@ -25,7 +25,7 @@ from core import apps from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSet, UserViewSet, LoginViewSet, \ CompanyRegisterViewSet from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewSet, StudentApplicationViewSet, \ - CompanyApplicationViewSet, CompanyVacanciesViewSet, ApplicationViewSet + CompanyApplicationViewSet, CompanyVacanciesViewSet, ApplicationViewSet, AcceptOfferByStudentViewSet from core.views.feedbacks import FeedbackViewSet schema_view = get_swagger_view() @@ -40,6 +40,7 @@ router.register(r'vacancies', VacancyViewSet) router.register(r'applications', ApplicationViewSet) router.register(r'feedbacks', FeedbackViewSet) # router.register(r'students/(?P\d+)/profile', StudentProfileViewSet) +router.register(r'acceptoffer/(?P\d+)/vacancy', AcceptOfferByStudentViewSet) router.register(r'students/(?P\d+)/bookmarked-vacancies', BookmarkedVacancyByStudentViewSet, base_name='bookmarked-vacancy-list') router.register(r'students/(?P\d+)/applied-vacancies', StudentApplicationViewSet, -- GitLab From 715950317fbdb5ec072752d57b42750b440eabcd Mon Sep 17 00:00:00 2001 From: Aldo Bima Syahputra Date: Sun, 6 Oct 2019 06:36:54 +0700 Subject: [PATCH 013/103] 1606833463 31 (Menambah Atribut alamat LinkedIn pada profile mahasiswa) --- assets/js/ProfilePage.jsx | 19 ++++++++++++++++++- assets/js/__test__/ProfilePage-test.jsx | 2 +- core/migrations/0014_student_linkedin_url.py | 20 ++++++++++++++++++++ core/migrations/0016_merge_20191005_2256.py | 16 ++++++++++++++++ core/migrations/0018_merge_20191006_0603.py | 16 ++++++++++++++++ core/models/accounts.py | 1 + core/serializers/accounts.py | 8 +++++--- core/tests/test_accounts.py | 8 ++++++++ 8 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 core/migrations/0014_student_linkedin_url.py create mode 100644 core/migrations/0016_merge_20191005_2256.py create mode 100644 core/migrations/0018_merge_20191006_0603.py diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index 3b130dd..11a3fc8 100644 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -42,6 +42,7 @@ export default class ProfilePage extends React.Component { acceptedNo: 0, refresh: 1, loading: false, + linkedin_url: '', }; this.getProfile = this.getProfile.bind(this); this.handleChange = this.handleChange.bind(this); @@ -74,6 +75,7 @@ export default class ProfilePage extends React.Component { acceptedNo: data.accepted_no, bagikanTranskrip: data.show_transcript, refresh: this.state.refresh + 1, + linkedin_url: data.linkedin_url, }); if (this.props.route.own) { const newSession = this.props.user.data; @@ -157,10 +159,15 @@ export default class ProfilePage extends React.Component {
+ + + + + @@ -248,7 +255,18 @@ export default class ProfilePage extends React.Component { + + + + + + { this.state.linkedin_url || 'N/A' } + + + + + @@ -258,7 +276,6 @@ export default class ProfilePage extends React.Component { -
diff --git a/assets/js/__test__/ProfilePage-test.jsx b/assets/js/__test__/ProfilePage-test.jsx index 1adcf18..77b9c51 100644 --- a/assets/js/__test__/ProfilePage-test.jsx +++ b/assets/js/__test__/ProfilePage-test.jsx @@ -139,7 +139,7 @@ describe('ProfilePage', () => { const profile = ReactTestUtils.renderIntoDocument( ); - const checkboxNode = ReactTestUtils.scryRenderedDOMComponentsWithTag(profile, 'Input')[5]; + const checkboxNode = ReactTestUtils.scryRenderedDOMComponentsWithTag(profile, 'Input')[6]; const checkbox = false; checkboxNode.value = checkbox; profile.getProfile().then(()=> expect(profile.state.show_transcript).to.equal(true)); diff --git a/core/migrations/0014_student_linkedin_url.py b/core/migrations/0014_student_linkedin_url.py new file mode 100644 index 0000000..b4bbeae --- /dev/null +++ b/core/migrations/0014_student_linkedin_url.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 08:48 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0013_auto_20170602_1130'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='linkedin_url', + field=models.URLField(blank=True, null=True), + ), + ] diff --git a/core/migrations/0016_merge_20191005_2256.py b/core/migrations/0016_merge_20191005_2256.py new file mode 100644 index 0000000..e8b0c6b --- /dev/null +++ b/core/migrations/0016_merge_20191005_2256.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 15:56 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0015_merge_20191005_1957'), + ('core', '0014_student_linkedin_url'), + ] + + operations = [ + ] diff --git a/core/migrations/0018_merge_20191006_0603.py b/core/migrations/0018_merge_20191006_0603.py new file mode 100644 index 0000000..f3a0c37 --- /dev/null +++ b/core/migrations/0018_merge_20191006_0603.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 23:03 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0016_merge_20191005_2256'), + ('core', '0017_merge_20191006_0134'), + ] + + operations = [ + ] diff --git a/core/models/accounts.py b/core/models/accounts.py index a118168..cf67771 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -65,6 +65,7 @@ class Student(models.Model): batch = models.CharField(max_length=4, blank=True, null=True) show_transcript = models.BooleanField(default=False) photo = models.FileField(upload_to=get_student_photo_file_path, null=True, blank=True, validators=[validate_image_file_extension]) + linkedin_url = models.URLField(max_length=200,blank=True, null=True) region = models.CharField(max_length=30, blank=True, null=True) @property diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index 5f3e8d1..3dc36c2 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -19,7 +19,7 @@ class StudentSerializer(serializers.ModelSerializer): class Meta: model = Student fields = ['id', 'name', 'user', 'npm', 'resume', 'phone_number', 'birth_place', 'birth_date', 'major', 'batch', \ - 'show_transcript', 'photo', 'accepted_no', 'region'] + 'show_transcript', 'photo', 'accepted_no', 'linkedin_url', 'region'] def get_accepted_no(self, obj): apps = Application.objects.filter(student=obj, status=4) @@ -43,7 +43,8 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'phone_number': instance.phone_number, 'region': instance.region, 'photo': photo, - 'show_transcript': instance.show_transcript + 'show_transcript': instance.show_transcript, + 'linkedin_url' : instance.linkedin_url, } def update(self, instance, validated_data): @@ -53,13 +54,14 @@ class StudentUpdateSerializer(serializers.ModelSerializer): instance.region = validated_data.get('region', instance.region) instance.photo = validated_data.get('photo', instance.photo) instance.user.email = validated_data.get('email', instance.user.email) + instance.linkedin_url = validated_data.get('linkedin_url', instance.linkedin_url) instance.save() instance.user.save() return instance class Meta: model = Student - fields = ['resume', 'email', 'phone_number', 'region', 'photo', 'show_transcript'] + fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript', 'linkedin_url', 'region'] class CompanyUpdateSerializer(serializers.ModelSerializer): diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index d1ee00d..22c9dc7 100644 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -137,6 +137,10 @@ class ProfileUpdateTests(APITestCase): self.assertEqual(response.data.get('phone_number'), '08123123123') url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'linkedin_url': 'https://www.linkedin.com/in/jojo/'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('linkedin_url'), 'https://www.linkedin.com/in/jojo/') + response = self.client.patch(url, {'region': 'Indonesia'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.data.get('region'), 'Indonesia') @@ -149,6 +153,10 @@ class ProfileUpdateTests(APITestCase): response = self.client.patch(url, {'phone_number': '08123123123'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'linkedin_url': 'this is not valid url'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + new_user = User.objects.create_user('dummy.student2', 'dummy.student@student.com', 'lalala123') new_student = Student.objects.create(user=new_user, npm="1212121212") -- GitLab From b5b558fcea048c57f1111bec0aa7fb144a144476 Mon Sep 17 00:00:00 2001 From: HANIF AGUNG PRAYOGA Date: Sun, 6 Oct 2019 09:22:20 +0700 Subject: [PATCH 014/103] 1606884344 58 --- assets/js/ProfilePage.jsx | 21 +++++++++++++++++++++ core/migrations/0018_student_intro.py | 20 ++++++++++++++++++++ core/migrations/0019_merge_20191006_0852.py | 16 ++++++++++++++++ core/models/accounts.py | 2 ++ core/serializers/accounts.py | 6 ++++-- core/tests/test_accounts.py | 5 +++++ 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 core/migrations/0018_student_intro.py create mode 100644 core/migrations/0019_merge_20191006_0852.py diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index 11a3fc8..a2d40e7 100644 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -30,6 +30,7 @@ export default class ProfilePage extends React.Component { phone_number: '', show_transcript: '', photo: '', + intro: '', form: { picture: '', email: '', @@ -37,6 +38,7 @@ export default class ProfilePage extends React.Component { region: '', resume: '', show_transcript: '', + intro: '', }, bagikanTranskrip: '', acceptedNo: 0, @@ -75,6 +77,7 @@ export default class ProfilePage extends React.Component { acceptedNo: data.accepted_no, bagikanTranskrip: data.show_transcript, refresh: this.state.refresh + 1, + intro: data.intro, linkedin_url: data.linkedin_url, }); if (this.props.route.own) { @@ -172,6 +175,10 @@ export default class ProfilePage extends React.Component { + + + + + + + + +

Intro

+
+ +

{ this.state.intro || 'N/A' }

+
+
+
+ + +
diff --git a/core/migrations/0018_student_intro.py b/core/migrations/0018_student_intro.py new file mode 100644 index 0000000..fa1b78c --- /dev/null +++ b/core/migrations/0018_student_intro.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-10-05 22:59 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0017_merge_20191006_0134'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='intro', + field=models.CharField(blank=True, max_length=50, null=True), + ), + ] diff --git a/core/migrations/0019_merge_20191006_0852.py b/core/migrations/0019_merge_20191006_0852.py new file mode 100644 index 0000000..38ac5fa --- /dev/null +++ b/core/migrations/0019_merge_20191006_0852.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-10-06 01:52 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0018_student_intro'), + ('core', '0018_merge_20191006_0603'), + ] + + operations = [ + ] diff --git a/core/models/accounts.py b/core/models/accounts.py index cf67771..2ada280 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -67,6 +67,8 @@ class Student(models.Model): photo = models.FileField(upload_to=get_student_photo_file_path, null=True, blank=True, validators=[validate_image_file_extension]) linkedin_url = models.URLField(max_length=200,blank=True, null=True) region = models.CharField(max_length=30, blank=True, null=True) + + intro = models.CharField(max_length=50, blank=True, null=True) @property def name(self): diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index 3dc36c2..bc52f31 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -19,7 +19,7 @@ class StudentSerializer(serializers.ModelSerializer): class Meta: model = Student fields = ['id', 'name', 'user', 'npm', 'resume', 'phone_number', 'birth_place', 'birth_date', 'major', 'batch', \ - 'show_transcript', 'photo', 'accepted_no', 'linkedin_url', 'region'] + 'show_transcript', 'photo', 'accepted_no', 'linkedin_url', 'region', 'intro'] def get_accepted_no(self, obj): apps = Application.objects.filter(student=obj, status=4) @@ -44,6 +44,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'region': instance.region, 'photo': photo, 'show_transcript': instance.show_transcript, + 'intro': instance.intro, 'linkedin_url' : instance.linkedin_url, } @@ -54,6 +55,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): instance.region = validated_data.get('region', instance.region) instance.photo = validated_data.get('photo', instance.photo) instance.user.email = validated_data.get('email', instance.user.email) + instance.intro = validated_data.get('intro', instance.intro) instance.linkedin_url = validated_data.get('linkedin_url', instance.linkedin_url) instance.save() instance.user.save() @@ -61,7 +63,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): class Meta: model = Student - fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript', 'linkedin_url', 'region'] + fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript', 'linkedin_url', 'region', 'intro'] class CompanyUpdateSerializer(serializers.ModelSerializer): diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 22c9dc7..d606b62 100644 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -163,3 +163,8 @@ class ProfileUpdateTests(APITestCase): url = '/api/students/' + str(new_student.pk) + "/profile/" response = self.client.patch(url, {'phone_number': '08123123123'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + url = '/api/students/' + str(student_id) + '/profile/' + response = self.client.patch(url, {'intro': 'Saya tertarik dengan dunia front-end development'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('intro'), 'Saya tertarik dengan dunia front-end development') -- GitLab From c264ce23a55760b4ce41d3412d22af9f26e8f3f6 Mon Sep 17 00:00:00 2001 From: Kianutama Radianur Date: Sun, 6 Oct 2019 09:45:21 +0700 Subject: [PATCH 015/103] Add test to count the sum of person who already register to a vacancy --- core/tests/test_vacancies.py | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index 1667ac1..f856e48 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -82,6 +82,49 @@ class ApplicationTests(APITestCase): response = self.client.delete(url) self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_count_application_a_person_is_already_register(self): + new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123') + new_user2 = User.objects.create_user('dummy.student', 'dummy.student@student.com', 'lalala123') + + self.client.force_authenticate(new_user) + self.client.force_authenticate(new_user2) + + new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, + address=None) + new_student = Student.objects.create(user=new_user2, npm=1234123412) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today()) + + application = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="lorem ipsum") + + url = '/api/applications/' + str(new_vacancy.pk) + '/count/' + + response = self.client.get(url, format='json') + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()['count'], 1) + + def test_count_application_nobody_register(self): + new_user = User.objects.create_user('dummy.company', 'dummy.company@company.com', 'lalala123') + new_user2 = User.objects.create_user('dummy.student', 'dummy.student@student.com', 'lalala123') + + self.client.force_authenticate(new_user) + self.client.force_authenticate(new_user2) + + new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, + address=None) + new_student = Student.objects.create(user=new_user2, npm=1234123412) + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today()) + + url = '/api/applications/' + str(new_vacancy.pk) + '/count/' + + response = self.client.get(url, format='json') + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()['count'], 0) + class BookmarkApplicationTests(APITestCase): @requests_mock.Mocker() -- GitLab From 0835830ae066a240c1752db23cf96d620fb9772c Mon Sep 17 00:00:00 2001 From: "hadlinar.rahmadinni" Date: Sun, 6 Oct 2019 09:59:34 +0700 Subject: [PATCH 016/103] add test for requirements --- assets/js/CreateVacancy.jsx | 1 + .../js/__test__/components/Vacancy-test.jsx | 2 + .../__test__/components/VacancyList-test.jsx | 8 ++ core/migrations/0001_initial.py | 92 ------------------ core/migrations/0002_auto_20170328_1131.py | 36 ------- core/migrations/0003_auto_20170328_1400.py | 33 ------- core/migrations/0004_auto_20170328_1417.py | 20 ---- core/migrations/0005_auto_20170328_1904.py | 43 -------- core/migrations/0006_auto_20170328_1950.py | 19 ---- core/migrations/0007_auto_20170424_0720.py | 40 -------- core/migrations/0007_auto_20170425_1550.py | 24 ----- core/migrations/0008_auto_20170424_0725.py | 25 ----- core/migrations/0009_auto_20170424_0909.py | 20 ---- core/migrations/0010_student_photo.py | 21 ---- core/migrations/0011_merge_20170425_2214.py | 16 --- core/migrations/0012_auto_20170502_0925.py | 40 -------- core/migrations/0013_auto_20170602_1130.py | 32 ------ core/migrations/0014_company_category.py | 20 ---- core/migrations/0014_feedback.py | 27 ----- core/migrations/0014_student_linkedin_url.py | 20 ---- core/migrations/0014_student_region.py | 20 ---- core/migrations/0015_merge_20191005_1926.py | 16 --- core/migrations/0015_merge_20191005_1957.py | 17 ---- core/migrations/0015_merge_20191005_2038.py | 16 --- core/migrations/0016_merge_20191005_2235.py | 16 --- core/migrations/0016_merge_20191005_2256.py | 16 --- core/migrations/0017_merge_20191006_0134.py | 16 --- core/migrations/0018_merge_20191006_0603.py | 16 --- core/migrations/0018_student_intro.py | 20 ---- core/migrations/0019_merge_20191006_0852.py | 16 --- core/migrations/__init__.py | 0 core/tests/test_create_vacancies.py | 6 +- core/tests/test_vacancies.py | 26 ++--- .../32cf01da-0e39-4742-b0f8-e5d73195d0ea.png | Bin 0 -> 123832 bytes kape/settings.py | 2 +- 35 files changed, 28 insertions(+), 714 deletions(-) delete mode 100644 core/migrations/0001_initial.py delete mode 100644 core/migrations/0002_auto_20170328_1131.py delete mode 100644 core/migrations/0003_auto_20170328_1400.py delete mode 100644 core/migrations/0004_auto_20170328_1417.py delete mode 100644 core/migrations/0005_auto_20170328_1904.py delete mode 100644 core/migrations/0006_auto_20170328_1950.py delete mode 100644 core/migrations/0007_auto_20170424_0720.py delete mode 100644 core/migrations/0007_auto_20170425_1550.py delete mode 100644 core/migrations/0008_auto_20170424_0725.py delete mode 100644 core/migrations/0009_auto_20170424_0909.py delete mode 100644 core/migrations/0010_student_photo.py delete mode 100644 core/migrations/0011_merge_20170425_2214.py delete mode 100644 core/migrations/0012_auto_20170502_0925.py delete mode 100644 core/migrations/0013_auto_20170602_1130.py delete mode 100644 core/migrations/0014_company_category.py delete mode 100644 core/migrations/0014_feedback.py delete mode 100644 core/migrations/0014_student_linkedin_url.py delete mode 100644 core/migrations/0014_student_region.py delete mode 100644 core/migrations/0015_merge_20191005_1926.py delete mode 100644 core/migrations/0015_merge_20191005_1957.py delete mode 100644 core/migrations/0015_merge_20191005_2038.py delete mode 100644 core/migrations/0016_merge_20191005_2235.py delete mode 100644 core/migrations/0016_merge_20191005_2256.py delete mode 100644 core/migrations/0017_merge_20191006_0134.py delete mode 100644 core/migrations/0018_merge_20191006_0603.py delete mode 100644 core/migrations/0018_student_intro.py delete mode 100644 core/migrations/0019_merge_20191006_0852.py delete mode 100755 core/migrations/__init__.py create mode 100644 files/company-logo/32cf01da-0e39-4742-b0f8-e5d73195d0ea.png diff --git a/assets/js/CreateVacancy.jsx b/assets/js/CreateVacancy.jsx index b2bff53..a6d6ff8 100644 --- a/assets/js/CreateVacancy.jsx +++ b/assets/js/CreateVacancy.jsx @@ -32,6 +32,7 @@ export default class CreateVacancy extends React.Component { close_time: moment(), name: '', description: '', + }; if (this.state.vacancyId) { diff --git a/assets/js/__test__/components/Vacancy-test.jsx b/assets/js/__test__/components/Vacancy-test.jsx index 9f1e253..2d621bf 100644 --- a/assets/js/__test__/components/Vacancy-test.jsx +++ b/assets/js/__test__/components/Vacancy-test.jsx @@ -16,6 +16,7 @@ describe('Vacancy', () => { }, created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', + requirements: 'requirements', id: 3, name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', @@ -33,6 +34,7 @@ describe('Vacancy', () => { }, created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', + requirements: 'requirements', id: 3, name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', diff --git a/assets/js/__test__/components/VacancyList-test.jsx b/assets/js/__test__/components/VacancyList-test.jsx index 0ac2b46..fe82137 100644 --- a/assets/js/__test__/components/VacancyList-test.jsx +++ b/assets/js/__test__/components/VacancyList-test.jsx @@ -135,6 +135,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + requirements: 'requirements', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -163,6 +164,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + requirements: 'requirements', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -191,6 +193,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + requirements: 'requirements', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -219,6 +222,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + requirements: 'requirements', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -247,6 +251,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + requirements: 'requirements', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -267,6 +272,7 @@ describe('VacancyList', () => { }, created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', + requirements: 'requirements', id: 1, name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', @@ -282,6 +288,7 @@ describe('VacancyList', () => { }, created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', + requirements: 'requirements', id: 2, name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', @@ -299,6 +306,7 @@ describe('VacancyList', () => { }, created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', + requirements: 'requirements', id: 2, name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py deleted file mode 100644 index adb92de..0000000 --- a/core/migrations/0001_initial.py +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-03-28 04:06 -from __future__ import unicode_literals - -import core.models.accounts -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Application', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ], - ), - migrations.CreateModel( - name='Company', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now=True)), - ('description', models.TextField()), - ('verified', models.BooleanField(default=False)), - ('logo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path)), - ('alamat', models.CharField(blank=True, max_length=1000, null=True)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Student', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now=True)), - ('npm', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])), - ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path)), - ('phone_number', models.CharField(blank=True, db_index=True, max_length=100, null=True)), - ], - ), - migrations.CreateModel( - name='Supervisor', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('updated', models.DateTimeField(auto_now=True)), - ('nip', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Vacancy', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('verified', models.BooleanField(default=False)), - ('open_time', models.DateTimeField()), - ('description', models.TextField(blank=True)), - ('close_time', models.DateTimeField()), - ('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vacancies', to='core.Company')), - ], - ), - migrations.AddField( - model_name='student', - name='bookmarked_vacancies', - field=models.ManyToManyField(blank=True, to='core.Vacancy'), - ), - migrations.AddField( - model_name='student', - name='user', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='application', - name='student_npm', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.Student'), - ), - migrations.AddField( - model_name='application', - name='vacancy_id', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'), - ), - ] diff --git a/core/migrations/0002_auto_20170328_1131.py b/core/migrations/0002_auto_20170328_1131.py deleted file mode 100644 index 1b2481f..0000000 --- a/core/migrations/0002_auto_20170328_1131.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-03-28 04:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='application', - name='student_npm', - ), - migrations.RemoveField( - model_name='application', - name='vacancy_id', - ), - migrations.AddField( - model_name='student', - name='applied_vacancies', - field=models.ManyToManyField(blank=True, related_name='applied_vacancies', to='core.Vacancy'), - ), - migrations.AlterField( - model_name='student', - name='bookmarked_vacancies', - field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'), - ), - migrations.DeleteModel( - name='Application', - ), - ] diff --git a/core/migrations/0003_auto_20170328_1400.py b/core/migrations/0003_auto_20170328_1400.py deleted file mode 100644 index 51e0a30..0000000 --- a/core/migrations/0003_auto_20170328_1400.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-03-28 07:00 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_auto_20170328_1131'), - ] - - operations = [ - migrations.AddField( - model_name='vacancy', - name='created', - field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), - preserve_default=False, - ), - migrations.AddField( - model_name='vacancy', - name='name', - field=models.CharField(default=django.utils.timezone.now, max_length=100), - preserve_default=False, - ), - migrations.AddField( - model_name='vacancy', - name='updated', - field=models.DateTimeField(auto_now=True), - ), - ] diff --git a/core/migrations/0004_auto_20170328_1417.py b/core/migrations/0004_auto_20170328_1417.py deleted file mode 100644 index d0801ce..0000000 --- a/core/migrations/0004_auto_20170328_1417.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-03-28 07:17 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0003_auto_20170328_1400'), - ] - - operations = [ - migrations.RenameField( - model_name='company', - old_name='alamat', - new_name='address', - ), - ] diff --git a/core/migrations/0005_auto_20170328_1904.py b/core/migrations/0005_auto_20170328_1904.py deleted file mode 100644 index bde8129..0000000 --- a/core/migrations/0005_auto_20170328_1904.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-03-28 12:04 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0004_auto_20170328_1417'), - ] - - operations = [ - migrations.CreateModel( - name='Application', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('cover_letter', models.TextField(blank=True, null=True)), - ('allow_transcript', models.BooleanField(default=True)), - ], - ), - migrations.RemoveField( - model_name='student', - name='applied_vacancies', - ), - migrations.AddField( - model_name='student', - name='applied_vacancies', - field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'), - ), - migrations.AddField( - model_name='application', - name='student', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Student'), - ), - migrations.AddField( - model_name='application', - name='vacancy', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'), - ), - ] diff --git a/core/migrations/0006_auto_20170328_1950.py b/core/migrations/0006_auto_20170328_1950.py deleted file mode 100644 index 85ba09d..0000000 --- a/core/migrations/0006_auto_20170328_1950.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-03-28 12:50 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0005_auto_20170328_1904'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='application', - unique_together=set([('student', 'vacancy')]), - ), - ] diff --git a/core/migrations/0007_auto_20170424_0720.py b/core/migrations/0007_auto_20170424_0720.py deleted file mode 100644 index 23313a7..0000000 --- a/core/migrations/0007_auto_20170424_0720.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-04-24 07:20 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0006_auto_20170328_1950'), - ] - - operations = [ - migrations.AddField( - model_name='student', - name='batch', - field=models.CharField(blank=True, max_length=4, null=True), - ), - migrations.AddField( - model_name='student', - name='birth_date', - field=models.DateField(blank=True, null=True), - ), - migrations.AddField( - model_name='student', - name='birth_place', - field=models.TextField(blank=True, max_length=100, null=True), - ), - migrations.AddField( - model_name='student', - name='major', - field=models.CharField(blank=True, max_length=100, null=True), - ), - migrations.AddField( - model_name='student', - name='show_resume', - field=models.BooleanField(default=False), - ), - ] diff --git a/core/migrations/0007_auto_20170425_1550.py b/core/migrations/0007_auto_20170425_1550.py deleted file mode 100644 index ce925a3..0000000 --- a/core/migrations/0007_auto_20170425_1550.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-04-25 15:50 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0006_auto_20170328_1950'), - ] - - operations = [ - migrations.RemoveField( - model_name='application', - name='allow_transcript', - ), - migrations.AddField( - model_name='application', - name='status', - field=models.IntegerField(default=0), - ), - ] diff --git a/core/migrations/0008_auto_20170424_0725.py b/core/migrations/0008_auto_20170424_0725.py deleted file mode 100644 index bacc0eb..0000000 --- a/core/migrations/0008_auto_20170424_0725.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-04-24 07:25 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0007_auto_20170424_0720'), - ] - - operations = [ - migrations.AlterField( - model_name='student', - name='birth_place', - field=models.CharField(blank=True, max_length=30, null=True), - ), - migrations.AlterField( - model_name='student', - name='major', - field=models.CharField(blank=True, max_length=30, null=True), - ), - ] diff --git a/core/migrations/0009_auto_20170424_0909.py b/core/migrations/0009_auto_20170424_0909.py deleted file mode 100644 index 151a05c..0000000 --- a/core/migrations/0009_auto_20170424_0909.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-04-24 09:09 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0008_auto_20170424_0725'), - ] - - operations = [ - migrations.RenameField( - model_name='student', - old_name='show_resume', - new_name='show_transcript', - ), - ] diff --git a/core/migrations/0010_student_photo.py b/core/migrations/0010_student_photo.py deleted file mode 100644 index 2ed279a..0000000 --- a/core/migrations/0010_student_photo.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-04-24 13:34 -from __future__ import unicode_literals - -import core.models.accounts -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0009_auto_20170424_0909'), - ] - - operations = [ - migrations.AddField( - model_name='student', - name='photo', - field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path), - ), - ] diff --git a/core/migrations/0011_merge_20170425_2214.py b/core/migrations/0011_merge_20170425_2214.py deleted file mode 100644 index c255ca5..0000000 --- a/core/migrations/0011_merge_20170425_2214.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-04-25 22:14 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0010_student_photo'), - ('core', '0007_auto_20170425_1550'), - ] - - operations = [ - ] diff --git a/core/migrations/0012_auto_20170502_0925.py b/core/migrations/0012_auto_20170502_0925.py deleted file mode 100644 index 692e227..0000000 --- a/core/migrations/0012_auto_20170502_0925.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-05-02 02:25 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0011_merge_20170425_2214'), - ] - - operations = [ - migrations.AlterModelOptions( - name='company', - options={'ordering': ['-updated']}, - ), - migrations.AlterModelOptions( - name='student', - options={'ordering': ['-updated']}, - ), - migrations.AlterModelOptions( - name='supervisor', - options={'ordering': ['-updated']}, - ), - migrations.AlterModelOptions( - name='vacancy', - options={'ordering': ['-updated']}, - ), - migrations.RemoveField( - model_name='company', - name='verified', - ), - migrations.AddField( - model_name='company', - name='status', - field=models.IntegerField(default=0), - ), - ] diff --git a/core/migrations/0013_auto_20170602_1130.py b/core/migrations/0013_auto_20170602_1130.py deleted file mode 100644 index 4b30a1b..0000000 --- a/core/migrations/0013_auto_20170602_1130.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2017-06-02 04:30 -from __future__ import unicode_literals - -import core.lib.validators -import core.models.accounts -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0012_auto_20170502_0925'), - ] - - operations = [ - migrations.AlterField( - model_name='company', - name='logo', - field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path, validators=[core.lib.validators.validate_image_file_extension]), - ), - migrations.AlterField( - model_name='student', - name='photo', - field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[core.lib.validators.validate_image_file_extension]), - ), - migrations.AlterField( - model_name='student', - name='resume', - field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[core.lib.validators.validate_document_file_extension]), - ), - ] diff --git a/core/migrations/0014_company_category.py b/core/migrations/0014_company_category.py deleted file mode 100644 index 7d2db3c..0000000 --- a/core/migrations/0014_company_category.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 04:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0013_auto_20170602_1130'), - ] - - operations = [ - migrations.AddField( - model_name='company', - name='category', - field=models.CharField(default=b'Belum ada kategori perusahaan', max_length=140), - ), - ] diff --git a/core/migrations/0014_feedback.py b/core/migrations/0014_feedback.py deleted file mode 100644 index e818319..0000000 --- a/core/migrations/0014_feedback.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-03 13:39 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0013_auto_20170602_1130'), - ] - - operations = [ - migrations.CreateModel( - name='Feedback', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', models.DateTimeField(auto_now_add=True)), - ('title', models.CharField(blank=True, default=b'', max_length=100)), - ('content', models.TextField()), - ], - options={ - 'ordering': ['created'], - }, - ), - ] diff --git a/core/migrations/0014_student_linkedin_url.py b/core/migrations/0014_student_linkedin_url.py deleted file mode 100644 index b4bbeae..0000000 --- a/core/migrations/0014_student_linkedin_url.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 08:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0013_auto_20170602_1130'), - ] - - operations = [ - migrations.AddField( - model_name='student', - name='linkedin_url', - field=models.URLField(blank=True, null=True), - ), - ] diff --git a/core/migrations/0014_student_region.py b/core/migrations/0014_student_region.py deleted file mode 100644 index 702015e..0000000 --- a/core/migrations/0014_student_region.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.17 on 2019-10-05 10:07 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0013_auto_20170602_1130'), - ] - - operations = [ - migrations.AddField( - model_name='student', - name='region', - field=models.CharField(blank=True, max_length=30, null=True), - ), - ] diff --git a/core/migrations/0015_merge_20191005_1926.py b/core/migrations/0015_merge_20191005_1926.py deleted file mode 100644 index ae7f6c5..0000000 --- a/core/migrations/0015_merge_20191005_1926.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 12:26 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0014_feedback'), - ('core', '0014_company_category'), - ] - - operations = [ - ] diff --git a/core/migrations/0015_merge_20191005_1957.py b/core/migrations/0015_merge_20191005_1957.py deleted file mode 100644 index fe7de18..0000000 --- a/core/migrations/0015_merge_20191005_1957.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.17 on 2019-10-05 12:57 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0014_feedback'), - ('core', '0014_company_category'), - ('core', '0014_student_region'), - ] - - operations = [ - ] diff --git a/core/migrations/0015_merge_20191005_2038.py b/core/migrations/0015_merge_20191005_2038.py deleted file mode 100644 index d4afc1b..0000000 --- a/core/migrations/0015_merge_20191005_2038.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 13:38 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0014_feedback'), - ('core', '0014_company_category'), - ] - - operations = [ - ] diff --git a/core/migrations/0016_merge_20191005_2235.py b/core/migrations/0016_merge_20191005_2235.py deleted file mode 100644 index eb0946c..0000000 --- a/core/migrations/0016_merge_20191005_2235.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 15:35 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0015_merge_20191005_1926'), - ('core', '0015_merge_20191005_1957'), - ] - - operations = [ - ] diff --git a/core/migrations/0016_merge_20191005_2256.py b/core/migrations/0016_merge_20191005_2256.py deleted file mode 100644 index e8b0c6b..0000000 --- a/core/migrations/0016_merge_20191005_2256.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 15:56 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0015_merge_20191005_1957'), - ('core', '0014_student_linkedin_url'), - ] - - operations = [ - ] diff --git a/core/migrations/0017_merge_20191006_0134.py b/core/migrations/0017_merge_20191006_0134.py deleted file mode 100644 index d41f21a..0000000 --- a/core/migrations/0017_merge_20191006_0134.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 18:34 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0015_merge_20191005_2038'), - ('core', '0016_merge_20191005_2235'), - ] - - operations = [ - ] diff --git a/core/migrations/0018_merge_20191006_0603.py b/core/migrations/0018_merge_20191006_0603.py deleted file mode 100644 index f3a0c37..0000000 --- a/core/migrations/0018_merge_20191006_0603.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-05 23:03 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0016_merge_20191005_2256'), - ('core', '0017_merge_20191006_0134'), - ] - - operations = [ - ] diff --git a/core/migrations/0018_student_intro.py b/core/migrations/0018_student_intro.py deleted file mode 100644 index fa1b78c..0000000 --- a/core/migrations/0018_student_intro.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.17 on 2019-10-05 22:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0017_merge_20191006_0134'), - ] - - operations = [ - migrations.AddField( - model_name='student', - name='intro', - field=models.CharField(blank=True, max_length=50, null=True), - ), - ] diff --git a/core/migrations/0019_merge_20191006_0852.py b/core/migrations/0019_merge_20191006_0852.py deleted file mode 100644 index 38ac5fa..0000000 --- a/core/migrations/0019_merge_20191006_0852.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.17 on 2019-10-06 01:52 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0018_student_intro'), - ('core', '0018_merge_20191006_0603'), - ] - - operations = [ - ] diff --git a/core/migrations/__init__.py b/core/migrations/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 3a8fd4a..b71f78b 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -17,7 +17,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0), - 'close_time': datetime.today(), 'name': 'new_vacancy', 'description': 'new_vacancy '}, format='json') + 'close_time': datetime.today(), 'name': 'new_vacancy', 'description': 'new_vacancy ', 'requirements': 'new_vacancy'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) vacancies = Vacancy.objects.count() @@ -31,7 +31,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(), - 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json') + 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy', 'description': 'new_vacancy', 'requirements': 'new_vacancy'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) vacancies = Vacancy.objects.count() @@ -48,7 +48,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), - 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) def test_update_vacancy_failed(self): diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index f6ab793..eeb2c11 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -73,7 +73,7 @@ class ApplicationTests(APITestCase): new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) url = '/api/students/' + str(student_id) + '/applied-vacancies/' response = self.client.post(url, {'vacancy_id': new_vacancy.pk, 'cover_letter': 'this is a cover letter.'}, @@ -146,7 +146,7 @@ class BookmarkApplicationTests(APITestCase): new_user = User.objects.create_user('dummy.company2', 'dummy.compan2y@company.com', 'lalala123') new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, requirements: "requirements", open_time=datetime.fromtimestamp(1541319300.0), description="lalala", close_time=timezone.now()) url = '/api/students/' + str(student_id) + '/bookmarked-vacancies/' @@ -256,7 +256,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -274,7 +274,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") new_user3 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') @@ -296,7 +296,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") new_user3 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') @@ -318,7 +318,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -336,7 +336,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -355,7 +355,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -374,7 +374,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -413,7 +413,7 @@ class SupervisorApprovalTests(APITestCase): new_company2 = Company.objects.create(user=new_user2, description="lalala", status=Company.VERIFIED, logo=None, address=None) new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=False, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) url = '/api/vacancies/' + str(new_vacancy2.pk) + '/verify/' response = self.client.patch(url, {'verified': True}, format='json') @@ -429,7 +429,7 @@ class SupervisorApprovalTests(APITestCase): self.client.force_authenticate(user=new_user) new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", close_time=timezone.now()) + description="lalala", requirements: "requirements", close_time=timezone.now()) url = '/api/vacancies/' + str(new_vacancy.pk) + '/verify/' response = self.client.patch(url, format='json') @@ -448,10 +448,10 @@ class AcceptOneOfferTests(APITestCase): address=None) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + description="lalala", requirements: "requirements", close_time=datetime.today()) new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", close_time=datetime.today()) + description="lalala", requirements: "requirements", close_time=datetime.today()) new_user3 = User.objects.create_user('dummy.student', 'dummy.student@company.com', 'lalala123') new_student = Student.objects.create(user=new_user3, npm=1234123412) diff --git a/files/company-logo/32cf01da-0e39-4742-b0f8-e5d73195d0ea.png b/files/company-logo/32cf01da-0e39-4742-b0f8-e5d73195d0ea.png new file mode 100644 index 0000000000000000000000000000000000000000..9e784d856a019135d4a560cbea43aef2d894a38e GIT binary patch literal 123832 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%0DB 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Ⓢ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

Wpb6zY|uLkgoj=1r2T*k@R5 zg295A{t)gAa;pw4OKY#D%uUH{MgLx*+7|It=mTnw@!p+}Ir-iQhIz3-?<67oeX2-B zF{7tvYAb+KXzl9ZDY7L5auGVCv=_oJrg_X4@b|vl_Q_$*bdCI}cWU=4{DCs|#Vc@V z3=gG$KVLjxso!+e-Bz-`cO#Lb&G#*?VV5c)F&=OOo1&{Jtb?vW7z&JG3S-VTEv0E5(0$2wajVfLZJqJ6h(Jf zrElC8lLP7dB*H_dlNt1CWm*iSSZ#IX#Ni_M-g=gp%*lcC(EKE+mNZ)lNCn$ST1hVy zKb`cGP6(Sf!&?>u8;;0oa&qvq5m7TX)(L9lIfplyxM6>K<%N#7uN?Si)~=|fxJ@9h zTln1csq;X8N8m(^4*G@cHLK0?2+=ar z(CUwmX5lXDBr1IvcU#bu^Qa_#T#EfHNh?tTdD450(g>tB8bh77O+i$z&+ZrxY0RjQ zL}9Z>`#uO_!6m;;ZgOvf6?#nn)Kr|e;+fhkGg^mrb0hggj*o%J>0*b)#Ilo!+iGyo zvT=Aa`ImFYgw?=P{*UcCgI2_v3@rlGzyoWc{{&!i## z361->bsBGqBRg@F9Iw*{Sy7uPeqYn=sD{74b}cg}yA!BweZDH=vd1+_XfRtoch>VK zBsK?snfCg(pNsHzKv!C#ICU-$vMwY<$SJhHH^ch~{d1B-@HLMQW3Xrj#!*JvD6H;g zj5dINJHfDK>(BMCo=iE!Zm_8Muov8a3Q)x+u;`O-)gd@-ot~f43@{B|Ua zuI}uA!N(Qx@^=2D!K$DVwcmK{wu{_S9c#$hcSKv?BQq+J{=PTnn z@u!?yIVAMSewvtVAMU8ZPVYeutxTWb47mdnDU*u=7rt4<1y23NOSVZ!7}iW={WZ~F zyTZ?6;uo7gAYahJI_f%PzjxLJ#$>3Zur9``*H?>bwtiQ@+g6vyDJw2cyG+ieKcen} z&mUQR_Cs(F`SBg19p_u9_*?2c4ZW+wU#m35cmZme6R(8Huszo*E(O|XN4phh6D}M~ zWf>(ipse4{;v!+Ax}^#B`IA|jCCVQSr#~Z9uyczl5+dtuf{ZjrRa8l`V{WR zPk3t4U&5U-1YlO-sdteoHc5e}MtNNGW5UBai9)gErHt5eMnO1I)Vei59&!h^RTPn0 z4fb~LP$hm5RUz09#6X%6jj3zcaEhNQ$#)w&KW=X`Ma}pQ%i0=$t8W%)euV!vI6Fgw z2+kT1^~;_ZYcn!bk;E3C#*r3dP0YWXSIabcH5>SgI8Hqb^fKr2i~bwXF8+J4W?_-) z`l(S0;3~!)=c4q0<{e}`yo@x+Tv>(*)Qs&mOBKyb=`u{ADV8iWe)s!0GzCOB6j!Us z+=Un%3j>DT^-ph%bF^TusFHain*9dNL~&T8%gytQqR}2u1@;fWyMS0^u}ZE1^giCy z7AUXC#DOGZu6O8X2`_*nLV_$sV+5ItYV5V#^dIgoi)84*0hBdrQzhqWU!EZuiyALv-oKE+;`vN8OjIA(x3Ll@76r({Oj_^ zsjWKrVfOneyvi1J@QxmktWTKcc}o*N>@NZhju&wTGRv1HNy+z5J>D0)3CL@}?aAg}vj&e;=| zy~0hh&18oCcg<4trA3+xs15ehZE8?;Jl`FP+Zl6JF*fE!`F-ifY`zbQsDg>!jWh_+ zV%~i;Z3mv3KyK7mY9-IVozBm{G$vi}Nz}-f1xKDLXdM>CWN5%teU46WsYMa@WjSWJ znG`Ybb~jXql?W{C>;MTs*Pny@7By!Mo@#Dh5Df0~3K?H2u&_-r%R;6nXq=`S zw+r=O7fv!3Vah&JUBBb+;$z?y9jCN3aK9Saul1D!K^tXpyFesRlJr`R4@EF3F}Y$P z`1$>%n@b4UbV*C5-j-ZK+VV9m8dmGis0Zr)y2X$dUuKC+z_YV$PNDS#+ft4VhK=&< zgoiZm$HlQW$Tg?C)-Ba;Bq`}l2Uo&S+7A$G(Lpxa4UYIa<>gv41i=9 za(zQE?E6ydaH=r0yvEMJ)Rb0&W^D=HXStAlt?%*=6p23utT!BtyW_1AT*gVd0*5vU z7*^29CzcGb$b#_Z-M?`IOONa=8^kjXZJ{QPQ=3fumGc0xH#rjtQ;D&z0H7%Ng=@^N|ns^kQ1&j5pt zN9f~HXy$#0BvOFfEvr%q#L~ZQS4=Mt%WMT1UUfone!$`$sgOO#qc}zh6YdnM=NOfV zETV&hqN~(g(Cjo+{oMbi()w6pM4q0TZWnK?zrLScTYJ44?DE9Xkh24TVu~Lyf-J}* z?XXKO`o*3rBEr`x=8IZQFB;HgPdyxPFAXpY$NwY)l(#uSEJFq1+BzBUC5sL4x$_S% z|A4mL5lw~;LQLo~(itZ=YjJG7z16qUk=)kOjYRp?LYjSYZvB+^GN01Pul)iy{Clq> z_BO@S72yK0kCBGJ?OB^1Z(_0ep=cO(m$CPMEX~X5JRi_6#J}%hDtA^jbE+n2Zdvsb zsu+ap8G}r<&=ji;|2QyC$NsMFs9(9UB|KtvS&WUM0c7rJR&;fiTP#SPiyUC+C4po* zzwim!tKKY-jTFpEEv9cuv9uz z{Xs99W?TC`gC1Lucw678Xx&n`FN}uIn9Y7Vk4E68W$4mv^*!nP5o|Fol^wEpm*kiY zbw`ZzvYR<=P0f?A5YYR*@-`VY9(J|{HWIDVx;?>t#d-KGT%8X~@_O}MU6L&B`Jo4g zgPbbIsV)TxYR2TrY4FkUmvaR;fB6wWK3vfL`{nRh(MIom&z)F0hI4CB%Ecx;1Ieo~ zv?T`Vq%v5-r-AZKBU%>iOevHK`CDDDrTeckz0DCpo1oSRlEvX`Sx@yQ%vyDReknLf z{?8R%i%#W8&BD%MBtnEA)N;qc>VsLstQZ!G(E4fCqtwvsULr)vG6x|B!q0Vyo}&b) zUMFA{abbA`R&J3xsD{>ci?*tx(uC_z%U!<+=1f+v|IApxf8%o#)FXc+*nt~u=rh(g zC?C`*A?c_q)V3^Aj=|yB45oUE9L_SUpeL1g%5)#QNk?&Kd+&_N-u-%+2*N%0yMduQ zaYx)ryArc=yp6}M8U7eTE^ znd@G`qYm-a7vJ-Hw;=n=sXJIy^|M145jP!sCRSw$R2ibi1jsKs%~BsBoaLbDzKX3| zAIx!PgM@&u2~^A8?>XyIe7Ylc@0Zx;I3m7QD+4>7VLal$rgPil-z|EnIv{G005$(b z)+DM1szQkt9FH`(0x!yw&>2#`MZTe4`O|C_+4M_P8worwH+2$#p`wd{Mp za#%4BLAV_7R)&1E6fuhJsmA$_8YN2^T7c@S|>Uc4Ux-oFeoICd0`p&1=3iD@QqtA`dwselPgI@%ec zs4(z$=4SE#U4l-}Rlcnd2eAlxy3G&{h2TJ-P1hLTZTHSt4EJ;NL(s> z8z3x_8S$XtQLJ1X#S_*=exQO%Wg5uBVjB1}j!$A*H>1R96@I$EKs})}51+ck8^lk% zysnbf&}F7kv)eXh*-dI>GH$Vck!)yd4tO&)y%?d5JbLel5iMAL5`bIqqXvkNz3cFG zp;-AZQ!Kte=0nIa?t0b^V}&8~=-D8SBa9_91TwT%$fXnTd8sGo8b&w4_&j_GpvY%% zb0SWmzA)Q2Bby*@mj0oHd^FhUY5M^=5KDSnj10-^eZ8F=_BWbpVb8*Gt?6{_2vJg( zT)t+TF|8CyP{fXQVSU;k*>M*ZQcuhl>QeHP_a0(S;SY&{xT@I5CZLa*z+EXkkahBZ zszhjYjFQ`)ZGcgRr1r~ZylTm1E4!%^ZeO?Q2OAXM58x(;Mcz1y^^#|afsy7==1v>5 z*;-{oRcUBE5ytX=i|jfV_SAvkn#`&?b2%B&6O*^(1Ip&tC%*JNU0)Ka=f4BrnoIvvQb?65l~?u)b+q%-}#-fIGQrEM>0g_herU9G@5 zcnn2w--4sV>(d5J?+s^Je5ED1nHDDqMJ$gZ?IQf5o7z(IM4mPdv-;}NB!r_pem`kC zQP|R$e#z2TW=;M)zP|(;h+fB&ZNN&I<0k``$zK#R()w)wrS8bLlk$&QKI-mrklTE2 z#U|aha&frb2UC>YUxD%V>CgI~f?s;ZVZH*LS_g&7f7F1V6pDmfw1(oBoWpu@`(=Z* z!W2{pbU|_cGGMC~AX0?^Ks6;rwdW5~%ntyDqBCIsO;COjS=6;=Fqm$4C-e&AZt71- z#n1a68-L#Y$!sJi${KeSXw%^)ynV*-;VsQdoZ6B8s>@4ji#uc8K)+Q&vz1*_BArOQ zO>Z*>7Pj>cGazB*;%l#l*5!(!+~LygsaFsMc7Y85N0QT zHc?u!3zaE6Z%nSoIS)2nkqO~P?HG6+k-`di-31FCkNAyr$uCVrz31U$zKAR%JaXn` zk#0W*%-#fpMEH3l_i>6Y;W}4>YrKaoMkf_>Aq!*}n}C180Stm*3fpG~llX3P(BI8=}noiG742A|yWSC*g-Uy8>8)b_t%au5tKBYMC>nd6i8u zi2`atp<2?8bvR~QPMFU;=cif@q#+DLb)S1=_EU#=9Jf7=V7Siy_Op^SqPY9A`x5cu zdLY3H2n}YGM9wwb&1!lf#J%aKxK4885 z>mNoVg2XhnUi4gi%!{aS8*Ox#beD23b!*p{78jpzHTK~LTqvq>`%oj1mNF=_nJY*e zo0bT<#TTN{Kx3*CNf&n@?E$!+UYAO|AFifY3TH%9Z!MT59>SG_;^6_LeMZx+Z-`p} z$@5ZY5O)mF0OgmRvUDi4f#u2A=}OjnlK2YkF632nR}kh=s&wBq&dh=VDy!QKOo2)n zS0h*cGTUI>34Rg%#z?4h$FquAbCMU6$x+Yk;y4deOKd5i-kZC27ccthbgKEmu>& zdi?e`)hCO>cSl?Y@3>rl0E~PJul@}at96<}zgxFlc+nWu*iO0Z+*!{{seVqU2EtZ_ z`~SPw2{n$j4uhXrSQApra^Uz2YO^zrtO0dGye?rv{#8tTGOgxQStzFlxh;P^1~UsR+JAW2V@4>J zw9);igh2G&6b|BRUOW+Ft`x3akBtYyiCyV6t0OOQh@4w8J!I`J17eT9(3AS@3G8_` zIGv+)q)>opdo@Kf16L(gbAka^7=HdgK10$T#^0Xr;0URoJ0)o+%X&m zW!&~J<$QqWl$lpm_uM2>A1Ae~d^Z{rknNyeHf<7`~JDzqfQE4VbPuHC@Wr1&uiFKm+eT3+KMlr84r3SVMgAx z^+>ud9|^xU%WXsS+W-r%_jrM_T&*Oas(HZO{8NnRLsHu;qcfPqwB5F{Ytq~a)^DzalOfWnwdRM~opOM7d6z%Vf;!CAa~ zG&(W*?YCp0i2nD$+J!3-%d*5h{w;7OaGrDMBDpg5$b-Wf9YH~?N;M-|OrgPHL5{X* zb?os1ftMJHKzOOQJ^R9!6De#pX<>COVzbA+fd z@7fXhg(}q$`}e_18U^~7Bm%c6vRM8(=GQrDtSEn6GkUi`!TdVFbh$>-%&va#MA-24Y4ipeTd!$Pp2>vc7*t0oSrri59bpc=liXHZ85wdx#?& zq>%pU^lX$^Bkf;ZHgU>tq~ru#=tSM5xO=u4L>(G6+r^{#kM-LAg0>>npf1qNjEp3f zr>VDy)>;O(L$xo|YrZ1(&-2teojOS++=A`2N`AV!;Ww2S@>OeXY8vtmHHzYM*T-SQ zyCG;=b(ch}Lv)uh(a}M--O}X5ROkDdz(o>utV{!FjpZ)mIPAUmJwc%%j8M)OK2SLb zS1&`KNcK^)=*)nNYq&YQxpl!rP@nS#JjH1mW Date: Sun, 6 Oct 2019 10:12:56 +0700 Subject: [PATCH 017/103] add some tests for adding requirements --- core/migrations/0001_initial.py | 141 ++++++++++++++++++++++++++++ core/migrations/__init__.py | 0 core/tests/test_create_vacancies.py | 2 +- core/tests/test_vacancies.py | 26 ++--- 4 files changed, 155 insertions(+), 14 deletions(-) create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__init__.py diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..0fdfbb6 --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-10-06 03:05 +from __future__ import unicode_literals + +import core.lib.validators +import core.models.accounts +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Application', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cover_letter', models.TextField(blank=True, null=True)), + ('status', models.IntegerField(default=0)), + ], + ), + migrations.CreateModel( + name='Company', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('description', models.TextField()), + ('status', models.IntegerField(default=0)), + ('logo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path, validators=[core.lib.validators.validate_image_file_extension])), + ('address', models.CharField(blank=True, max_length=1000, null=True)), + ('category', models.CharField(default=b'Belum ada kategori perusahaan', max_length=140)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ['-updated'], + }, + ), + migrations.CreateModel( + name='Feedback', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True)), + ('title', models.CharField(blank=True, default=b'', max_length=100)), + ('content', models.TextField()), + ], + options={ + 'ordering': ['created'], + }, + ), + migrations.CreateModel( + name='Student', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('npm', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])), + ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[core.lib.validators.validate_document_file_extension])), + ('phone_number', models.CharField(blank=True, db_index=True, max_length=100, null=True)), + ('birth_place', models.CharField(blank=True, max_length=30, null=True)), + ('birth_date', models.DateField(blank=True, null=True)), + ('major', models.CharField(blank=True, max_length=30, null=True)), + ('batch', models.CharField(blank=True, max_length=4, null=True)), + ('show_transcript', models.BooleanField(default=False)), + ('photo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[core.lib.validators.validate_image_file_extension])), + ('linkedin_url', models.URLField(blank=True, null=True)), + ('region', models.CharField(blank=True, max_length=30, null=True)), + ('intro', models.CharField(blank=True, max_length=50, null=True)), + ], + options={ + 'ordering': ['-updated'], + }, + ), + migrations.CreateModel( + name='Supervisor', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('nip', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ['-updated'], + }, + ), + migrations.CreateModel( + name='Vacancy', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('verified', models.BooleanField(default=False)), + ('open_time', models.DateTimeField()), + ('description', models.TextField(blank=True)), + ('close_time', models.DateTimeField()), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('name', models.CharField(max_length=100)), + ('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vacancies', to='core.Company')), + ], + options={ + 'ordering': ['-updated'], + }, + ), + migrations.AddField( + model_name='student', + name='applied_vacancies', + field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'), + ), + migrations.AddField( + model_name='student', + name='bookmarked_vacancies', + field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'), + ), + migrations.AddField( + model_name='student', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='application', + name='student', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Student'), + ), + migrations.AddField( + model_name='application', + name='vacancy', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'), + ), + migrations.AlterUniqueTogether( + name='application', + unique_together=set([('student', 'vacancy')]), + ), + ] diff --git a/core/migrations/__init__.py b/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index b71f78b..8b6ec44 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -62,5 +62,5 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0), - 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index eeb2c11..464ef0d 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -73,7 +73,7 @@ class ApplicationTests(APITestCase): new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) url = '/api/students/' + str(student_id) + '/applied-vacancies/' response = self.client.post(url, {'vacancy_id': new_vacancy.pk, 'cover_letter': 'this is a cover letter.'}, @@ -146,7 +146,7 @@ class BookmarkApplicationTests(APITestCase): new_user = User.objects.create_user('dummy.company2', 'dummy.compan2y@company.com', 'lalala123') new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) - new_vacancy = Vacancy.objects.create(company=new_company, verified=True, requirements: "requirements", open_time=datetime.fromtimestamp(1541319300.0), + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, requirements= "requirements", open_time=datetime.fromtimestamp(1541319300.0), description="lalala", close_time=timezone.now()) url = '/api/students/' + str(student_id) + '/bookmarked-vacancies/' @@ -256,7 +256,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -274,7 +274,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") new_user3 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') @@ -296,7 +296,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") new_user3 = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') @@ -318,7 +318,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -336,7 +336,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -355,7 +355,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -374,7 +374,7 @@ class CompanyListsTests(APITestCase): new_student = Student.objects.create(user=new_user2, npm=1234123412) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) new_app = Application.objects.create(student=new_student, vacancy=new_vacancy, cover_letter="asdasdasd") self.client.force_authenticate(new_user) @@ -413,7 +413,7 @@ class SupervisorApprovalTests(APITestCase): new_company2 = Company.objects.create(user=new_user2, description="lalala", status=Company.VERIFIED, logo=None, address=None) new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=False, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) url = '/api/vacancies/' + str(new_vacancy2.pk) + '/verify/' response = self.client.patch(url, {'verified': True}, format='json') @@ -429,7 +429,7 @@ class SupervisorApprovalTests(APITestCase): self.client.force_authenticate(user=new_user) new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(1541319300.0), - description="lalala", requirements: "requirements", close_time=timezone.now()) + description="lalala", requirements= "requirements", close_time=timezone.now()) url = '/api/vacancies/' + str(new_vacancy.pk) + '/verify/' response = self.client.patch(url, format='json') @@ -448,10 +448,10 @@ class AcceptOneOfferTests(APITestCase): address=None) new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", requirements: "requirements", close_time=datetime.today()) + description="lalala", requirements= "requirements", close_time=datetime.today()) new_vacancy2 = Vacancy.objects.create(company=new_company2, verified=True, open_time=datetime.fromtimestamp(0), - description="lalala", requirements: "requirements", close_time=datetime.today()) + description="lalala", requirements= "requirements", close_time=datetime.today()) new_user3 = User.objects.create_user('dummy.student', 'dummy.student@company.com', 'lalala123') new_student = Student.objects.create(user=new_user3, npm=1234123412) -- GitLab From 99eeb065ed3b37002a54694c44d9b86b05641193 Mon Sep 17 00:00:00 2001 From: ISNAINI NURUL KHASANAH Date: Sun, 6 Oct 2019 10:22:39 +0700 Subject: [PATCH 018/103] 1906336984 50 Menambahkan kolom major di halaman rekap pendaftaran --- assets/js/SupervisorPage.jsx | 1 + assets/js/components/ApplicationList.jsx | 3 ++- core/serializers/vacancies.py | 5 +++-- core/tests/test_vacancies.py | 9 +++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/assets/js/SupervisorPage.jsx b/assets/js/SupervisorPage.jsx index 3b9edbe..1aa981c 100644 --- a/assets/js/SupervisorPage.jsx +++ b/assets/js/SupervisorPage.jsx @@ -7,6 +7,7 @@ import ApplicationList from './components/ApplicationList'; const cols = [ { key: 'StudentName', label: 'Nama' }, { key: 'StudentID', label: 'NPM' }, + { key: 'Major', label: 'Major' }, { key: 'Perusahaan', label: 'Perusahaan' }, { key: 'Posisi', label: 'Posisi' }, { key: 'Status', label: 'Status' }, diff --git a/assets/js/components/ApplicationList.jsx b/assets/js/components/ApplicationList.jsx index bf2decb..6432a00 100644 --- a/assets/js/components/ApplicationList.jsx +++ b/assets/js/components/ApplicationList.jsx @@ -23,9 +23,10 @@ export default class ApplicationList extends React.Component { generateRows() { return this.props.items.map(item => ( - + {item.name} {item.npm} + {item.major} {item.company_name} diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index a2bd2e4..5938e5f 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -65,6 +65,7 @@ class SupervisorStudentApplicationSerializer(serializers.ModelSerializer): return { 'name' : instance.student.full_name, 'npm' : instance.student.npm, + 'major' : instance.student.major, 'vacancy_name' : instance.vacancy.name, 'company_name' : instance.vacancy.company.name, 'status' : status_map[instance.status] @@ -72,8 +73,8 @@ class SupervisorStudentApplicationSerializer(serializers.ModelSerializer): class Meta: model = Application - fields = ['name', 'npm', 'vacancy_name', 'company_name', 'status'] - read_only_fields = ['name', 'npm', 'vacancy_name', 'company_name', 'status'] + fields = ['name', 'npm', 'major', 'vacancy_name', 'company_name', 'status'] + read_only_fields = ['name', 'npm', 'major', 'vacancy_name', 'company_name', 'status'] class VacancyApplicationSerializer(serializers.ModelSerializer): vacancy = VacancySerializer() diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index f6ab793..62246e8 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -382,7 +382,16 @@ class CompanyListsTests(APITestCase): url = '/api/companies/' + str(new_company.pk) + '/applications/' + str(new_vacancy.pk) + '/by_vacancy/?status=5' response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + def test_company_application_list_with_major(self): + new_user = User.objects.create_user('dummy.company4', 'dummy.company4@company.com', 'lalala123') + new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, address=None) + + self.client.force_authenticate(new_user) + url = '/api/companies/' + str(new_company.pk) + '/applications/?major=0' + response = self.client.get(url, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) class SupervisorStudentApplicationTests(APITestCase): def test_list_student_application(self): -- GitLab From 83c3f1049bff9c5bce6a4a50de21886d8e291adc Mon Sep 17 00:00:00 2001 From: "hadlinar.rahmadinni" Date: Sun, 6 Oct 2019 10:52:19 +0700 Subject: [PATCH 019/103] add requirements in views, serializer, adn models --- core/migrations/0002_vacancy_requirements.py | 20 ++++++++++++++++++++ core/models/vacancies.py | 1 + core/serializers/vacancies.py | 2 +- core/views/vacancies.py | 4 +++- kape/settings.py | 2 +- 5 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 core/migrations/0002_vacancy_requirements.py diff --git a/core/migrations/0002_vacancy_requirements.py b/core/migrations/0002_vacancy_requirements.py new file mode 100644 index 0000000..cefd5e2 --- /dev/null +++ b/core/migrations/0002_vacancy_requirements.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-10-06 03:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='vacancy', + name='requirements', + field=models.TextField(blank=True), + ), + ] diff --git a/core/models/vacancies.py b/core/models/vacancies.py index 8968e62..c797ccb 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -8,6 +8,7 @@ class Vacancy(models.Model): verified = models.BooleanField(default=False) open_time = models.DateTimeField() description = models.TextField(blank=True) + requirements = models.TextField(blank=True) close_time = models.DateTimeField() created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index a2bd2e4..ce75aa8 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -32,7 +32,7 @@ class VacancySerializer(serializers.ModelSerializer): class Meta: model = Vacancy - fields = ['company', 'verified', 'open_time', 'description', 'close_time', 'created', 'updated', 'name', \ + fields = ['company', 'verified', 'open_time', 'description', 'requirements','close_time', 'created', 'updated', 'name', \ 'status', 'bookmarked', 'id'] diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 2f80513..69459cc 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -54,9 +54,10 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): close_time = data['close_time'] name = data['name'] description = data['description'] + requirements = data['requirements'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') - vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description) + vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description, requirements=requirements) vacancy.save() return Response(status=status.HTTP_200_OK) @@ -67,6 +68,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): close_time = data['close_time'] name = data['name'] description = data['description'] + requirements = data['requirements'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') vacancy.open_time = open_time diff --git a/kape/settings.py b/kape/settings.py index 94aef2b..2a2b579 100755 --- a/kape/settings.py +++ b/kape/settings.py @@ -159,7 +159,7 @@ USE_TZ = True STATIC_URL = '/assets/' STATIC_ROOT = '/home/kape/assets' MEDIA_URL = '/files/' -MEDIA_ROOT = '/Users/hadlinar/Desktop/PMPL/kape/files' +MEDIA_ROOT = '/kape/files' REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, -- GitLab From 7aa7dae490409c288461a30d53edf342de3b90c3 Mon Sep 17 00:00:00 2001 From: Refo Ilmiya Akbar Date: Sun, 6 Oct 2019 11:06:48 +0700 Subject: [PATCH 020/103] 1606876033 12 --- core/migrations/0017_vacancy_amount.py | 20 ++++++++ core/models/vacancies.py | 1 + core/tests/test_create_vacancies.py | 66 +++++++++++++++++++++++++- core/views/vacancies.py | 16 +++++-- 4 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 core/migrations/0017_vacancy_amount.py diff --git a/core/migrations/0017_vacancy_amount.py b/core/migrations/0017_vacancy_amount.py new file mode 100644 index 0000000..e4c4c91 --- /dev/null +++ b/core/migrations/0017_vacancy_amount.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-05 19:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0016_merge_20191005_2235'), + ] + + operations = [ + migrations.AddField( + model_name='vacancy', + name='amount', + field=models.IntegerField(null=True), + ), + ] diff --git a/core/models/vacancies.py b/core/models/vacancies.py index 8968e62..bdb75cd 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -12,6 +12,7 @@ class Vacancy(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) + amount = models.IntegerField(null=True) class Meta: ordering = ['-updated'] diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 3a8fd4a..9d8cd65 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -23,6 +23,21 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancies = Vacancy.objects.count() self.assertEqual(vacancies,1) + def test_new_vacancy_with_amount_success(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + url = '/api/vacancies/' + response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0), + 'close_time': datetime.today(), 'name': 'new_vacancy', + 'description': 'new_vacancy ', 'amount': 10}, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + vacancy = Vacancy.objects.first() + self.assertEqual(vacancy.amount, 10) + def test_new_vacancy_failed(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, @@ -37,6 +52,21 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancies = Vacancy.objects.count() self.assertEqual(vacancies,0) + def test_new_vacancy_with_amount_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + url = '/api/vacancies/' + response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0), + 'close_time': datetime.today(), 'name': 'new_vacancy', + 'description': 'new_vacancy ', 'amount': 'sepuluh'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancies_count = Vacancy.objects.count() + self.assertEqual(vacancies_count, 0) + def test_update_vacancy_success(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, @@ -51,6 +81,23 @@ class CreateAndUpdateVacancyTest(APITestCase): 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_update_vacancy_with_amount_success(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today(), name='new_company') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10}, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + vacancy = Vacancy.objects.first() + self.assertEqual(vacancy.amount, 10) + def test_update_vacancy_failed(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, @@ -63,4 +110,21 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) \ No newline at end of file + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + def test_update_vacancy_with_amount_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today(), name='new_company') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancy = Vacancy.objects.first() + self.assertEqual(vacancy.amount, None) diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 2f80513..a5da9a9 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -57,6 +57,11 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description) + if 'amount' in data: + if isinstance(data['amount'], int): + vacancy.amount = data['amount'] + else: + return Response(status=status.HTTP_400_BAD_REQUEST) vacancy.save() return Response(status=status.HTTP_200_OK) @@ -73,6 +78,11 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): vacancy.close_time = close_time vacancy.name = name vacancy.description = description + if 'amount' in data: + if isinstance(data['amount'], int): + vacancy.amount = data['amount'] + else: + return Response(status=status.HTTP_400_BAD_REQUEST) vacancy.save() return Response(status=status.HTTP_200_OK) @@ -255,11 +265,11 @@ class CompanyApplicationViewSet(viewsets.GenericViewSet): company = get_object_or_404(Company.objects.all().order_by('-updated'), pk=company_id) if not self.__validating_user(request, company): raise UnauthorizeError - return company + return company def __validating_user(self, request, company): return request.user.is_superuser or request.user == company.user - + def __get_vacancy_list_by_pk(self, pk, company): vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk) if not self.__validating_vacancy(vacancy, company): @@ -280,7 +290,7 @@ class CompanyApplicationViewSet(viewsets.GenericViewSet): def __get_status_from_request_param(self, request): return request.query_params.get('status', None) - + def __validating_application_status(self, status): list_status = {0 : "NEW", 1 : "READ", 2 : "BOOKMARKED", 3 : "REJECTED", 4: "ACCEPTED"} if status not in list_status: -- GitLab From b9dba95daed74606897ab9b5420101b90ade4096 Mon Sep 17 00:00:00 2001 From: Kianutama Radianur Date: Sun, 6 Oct 2019 11:14:16 +0700 Subject: [PATCH 021/103] implememt count pendaftar from a vacancy --- assets/js/components/Vacancy.jsx | 11 ++++++++++- core/views/vacancies.py | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/assets/js/components/Vacancy.jsx b/assets/js/components/Vacancy.jsx index a755cca..2372f4d 100644 --- a/assets/js/components/Vacancy.jsx +++ b/assets/js/components/Vacancy.jsx @@ -41,6 +41,7 @@ export default class Vacancy extends React.Component { deleteLoading: false, }; moment.locale('id'); + this.count(); this.bookmark = this.bookmark.bind(this); this.updateStatus = this.updateStatus.bind(this); this.generateAction = this.generateAction.bind(this); @@ -48,6 +49,13 @@ export default class Vacancy extends React.Component { this.removeVacancyApplication = this.removeVacancyApplication.bind(this); } + count() { + console.log('masuk kok'); + Server.get(`/applications/${this.props.data.id}/count/`, false).then((data) => { + this.setState({ count: data.count }); + }); + } + bookmark() { const data = { vacancy_id: this.props.data.id }; if (this.state.bookmarked < 1) { @@ -124,7 +132,8 @@ export default class Vacancy extends React.Component {

{ this.props.data.name }

{ this.props.data.company.name }
- { this.props.data.company.address }

+ { this.props.data.company.address }
+ { this.state.count } orang telah mendaftar!
{`Ditutup ${moment(moment(this.props.data.close_time)).fromNow()}`} diff --git a/core/views/vacancies.py b/core/views/vacancies.py index e4b8b98..d3ea259 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -1,5 +1,6 @@ import requests from django.conf import settings +from django.db.models import Count from rest_framework import viewsets, status from rest_framework.decorators import detail_route from rest_framework.exceptions import ValidationError @@ -82,6 +83,11 @@ class ApplicationViewSet(MultiSerializerViewSetMixin, viewsets.GenericViewSet): serializer(applications, many=True, context={'request': request}).data) return Response(serializer(applications, many=True, context={'request': request}).data) + @detail_route(methods=['get'], permission_classes=[IsAdminOrStudent]) + def count(self, request, pk=None): + count = Application.objects.filter(vacancy_id=pk).count() + return Response({"count": count}, status=status.HTTP_200_OK) + def partial_update(self, request, pk=None): application = self.get_object() serializer = self.get_serializer_class()(application, data=request.data, partial=True) -- GitLab From 874f7bc3d9c5f75384be04f9747ae4106453324a Mon Sep 17 00:00:00 2001 From: "hadlinar.rahmadinni" Date: Sun, 6 Oct 2019 11:14:45 +0700 Subject: [PATCH 022/103] add fields for requirements --- assets/js/CreateVacancy.jsx | 19 +++++++++++++++---- assets/js/__test__/CreateVacancy-test.jsx | 5 +++++ assets/js/components/ApplyModal.jsx | 4 ++++ assets/js/components/Vacancy.jsx | 1 + core/views/vacancies.py | 1 + kape/settings.py | 2 +- 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/assets/js/CreateVacancy.jsx b/assets/js/CreateVacancy.jsx index a6d6ff8..6a7e9fa 100644 --- a/assets/js/CreateVacancy.jsx +++ b/assets/js/CreateVacancy.jsx @@ -19,7 +19,8 @@ export default class CreateVacancy extends React.Component { /* istanbul ignore next */ this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); - this.handleEditor = this.handleEditor.bind(this); + this.handleDescription = this.handleDescription.bind(this); + this.handleRequirements = this.handleRequirements.bind(this); this.setCloseTime = this.setCloseTime.bind(this); this.setOpenTime = this.setOpenTime.bind(this); @@ -32,13 +33,14 @@ export default class CreateVacancy extends React.Component { close_time: moment(), name: '', description: '', - + requirements: '', }; if (this.state.vacancyId) { Server.get(`/vacancies/${this.state.vacancyId}/`).then((r) => { this.setState({ description: r.description, + requirements : r.requirements, name: r.name, open_time: moment(r.open_time), close_time: moment(r.close_time), @@ -60,10 +62,14 @@ export default class CreateVacancy extends React.Component { this.setState({ [e.target.name]: e.target.value }); }; - handleEditor(value) { + handleDescription(value) { this.setState({ description: value }); } + handleRequirements(value) { + this.setState({ requirements: value }); + } + handleSubmit = (e) => { e.preventDefault(); this.setState({ formLoading: true }); @@ -71,6 +77,7 @@ export default class CreateVacancy extends React.Component { const data = {}; data.name = this.state.name; data.description = this.state.description; + data.requirements = this.state.requirements; data.open_time = this.state.open_time.format(); data.close_time = this.state.close_time.format(); if (!this.state.vacancyId) { @@ -102,8 +109,12 @@ export default class CreateVacancy extends React.Component { { !this.state.loading && - } + } + + { !this.state.loading && + } +
{ createVacancy.setState({ name: 'stub', description: 'stub', + requirements: 'stub', }); createVacancy.handleChange({ target: { name: 'test', value: 'hue' } }); expect(createVacancy.state.test).to.equal('hue'); @@ -87,6 +88,7 @@ describe('CreateVacancy', () => { createVacancy.setState({ name: 'stub', description: 'stub', + requirements: 'stub', }); const openField = ReactTestUtils.findRenderedDOMComponentWithClass(createVacancy, 'open-time-field'); @@ -112,6 +114,7 @@ describe('CreateVacancy', () => { createVacancy.setState({ name: 'stub', description: 'stub', + requirements: 'stub', }); expect(createVacancy.state.formLoading).to.equal(false); @@ -130,6 +133,7 @@ describe('CreateVacancy', () => { createVacancy.setState({ name: 'stub', description: 'stub', + requirements: 'stub', }); const openField = ReactTestUtils.findRenderedDOMComponentWithClass(createVacancy, 'open-time-field'); @@ -157,6 +161,7 @@ describe('CreateVacancy', () => { createVacancy.setState({ name: 'stub', description: 'stub', + requirements: 'stub', }); expect(createVacancy.state.formLoading).to.equal(false); diff --git a/assets/js/components/ApplyModal.jsx b/assets/js/components/ApplyModal.jsx index fbd6d62..ef27207 100644 --- a/assets/js/components/ApplyModal.jsx +++ b/assets/js/components/ApplyModal.jsx @@ -79,6 +79,10 @@ export default class ApplyModal extends React.Component {

Deskripsi Lowongan

{
} + +

Persyaratan

+ {
} + {this.props.active && (

diff --git a/assets/js/components/Vacancy.jsx b/assets/js/components/Vacancy.jsx index a755cca..6b68881 100644 --- a/assets/js/components/Vacancy.jsx +++ b/assets/js/components/Vacancy.jsx @@ -88,6 +88,7 @@ export default class Vacancy extends React.Component { data={{ header: this.props.data.name, description: this.props.data.description, + requirements: this.props.data.requirements, id: this.props.data.id, }} resume={this.props.user.data.student.resume} diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 69459cc..34a904e 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -75,6 +75,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): vacancy.close_time = close_time vacancy.name = name vacancy.description = description + vacancy.requirements = requirements vacancy.save() return Response(status=status.HTTP_200_OK) diff --git a/kape/settings.py b/kape/settings.py index 2a2b579..61d01ca 100755 --- a/kape/settings.py +++ b/kape/settings.py @@ -159,7 +159,7 @@ USE_TZ = True STATIC_URL = '/assets/' STATIC_ROOT = '/home/kape/assets' MEDIA_URL = '/files/' -MEDIA_ROOT = '/kape/files' +MEDIA_ROOT = 'Users/hadlinar/Desktop/PMPL/kape/files' REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, -- GitLab From aef73c861ade85c4830133617df88d0ca4eee48f Mon Sep 17 00:00:00 2001 From: "hadlinar.rahmadinni" Date: Sun, 6 Oct 2019 11:29:16 +0700 Subject: [PATCH 023/103] modify CreateVacancy.jsx --- assets/js/CreateVacancy.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/js/CreateVacancy.jsx b/assets/js/CreateVacancy.jsx index 6a7e9fa..1abbb5f 100644 --- a/assets/js/CreateVacancy.jsx +++ b/assets/js/CreateVacancy.jsx @@ -111,7 +111,8 @@ export default class CreateVacancy extends React.Component { { !this.state.loading && } - +
+ { !this.state.loading && } -- GitLab From 76ac1a74c847065648419a3a8e4dc53793b69b66 Mon Sep 17 00:00:00 2001 From: FARI QODRI ANDANA Date: Sun, 6 Oct 2019 13:52:27 +0700 Subject: [PATCH 024/103] 1606875964-23 Saring lowongan berdasarkan perusahaan --- core/tests/test_vacancies.py | 26 ++++++++++++++++++++++++++ core/views/vacancies.py | 3 +++ 2 files changed, 29 insertions(+) diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index 62246e8..70bcc64 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -9,6 +9,7 @@ from rest_framework.test import APITestCase from core.models.accounts import Company, Student, Supervisor from core.models.vacancies import Vacancy, Application +from core.serializers.vacancies import VacancySerializer class ApplicationTests(APITestCase): @@ -174,6 +175,31 @@ class VacancyTest(APITestCase): url = '/api/vacancies/?verified=false' response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_filter_vacancy_list_by_company_ids(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + self.client.force_authenticate(user=superuser) + + new_user = User.objects.create_user('dummy.company3', 'dummy.company3@company.com', 'lalala123') + new_company = Company.objects.create(user=new_user, description="lalala", status=Company.VERIFIED, logo=None, + address=None) + + new_user2 = User.objects.create_user('dummy.companyzxc', 'dummy.companyzxc@company.com', 'lalala123') + new_company2 = Company.objects.create(user=new_user2, description="lalalaasdsad", status=Company.VERIFIED, + logo=None, + address=None) + open_time = datetime(2019, 10, 20) + close_time = datetime(2019, 12, 20) + vacancy1 = Vacancy.objects.create(company=new_company, verified=True, open_time=open_time, + description='', close_time=close_time, name='vacancy1') + vacancy2 = Vacancy.objects.create(company=new_company2, verified=True, open_time=open_time, + description='', close_time=close_time, name='vacancy2') + url = '/api/vacancies/?company={}&company={}'.format(new_company.id, new_company2.id) + response = self.client.get(url, format='json') + vacancies = Vacancy.objects.filter(company__id__in=[new_company.id, new_company2.id]) + self.assertEqual(dict(response.data)['count'], Vacancy.objects.count()) + self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_fail_on_unverified_user_vacancy_list(self): url = '/api/vacancies/' diff --git a/core/views/vacancies.py b/core/views/vacancies.py index a5da9a9..f51cfd3 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -35,10 +35,13 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): def list(self, request, *args, **kwargs): vacancies = Vacancy.objects.all() verified = request.query_params['verified'] if 'verified' in request.query_params else "True" + companies = [int(x) for x in request.query_params.getlist('company', [])] if verified.lower() in ("yes", "true", "t", "1"): vacancies = vacancies.filter(verified=True) if verified.lower() in {"no", "false", "f", "0"}: vacancies = vacancies.filter(verified=False) + if len(companies) > 0: + vacancies = vacancies.filter(company__id__in=companies) page = self.paginate_queryset(vacancies) if page is not None: return self.get_paginated_response(VacancySerializer(page, many=True, context={'request': request}).data) -- GitLab From ae7b1d6b88a256815faac21868ec19bf09b0dea0 Mon Sep 17 00:00:00 2001 From: "regensa.tjahjanto" Date: Sun, 6 Oct 2019 14:28:51 +0700 Subject: [PATCH 025/103] added unit test for create vacancy --- core/tests/test_create_vacancies.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 9d8cd65..6c23cb3 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -128,3 +128,17 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancy = Vacancy.objects.first() self.assertEqual(vacancy.amount, None) + + def test_create_vacancy_with_same_date_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + url = '/api/vacancies/' + response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(), + 'close_time': datetime.today(), 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancies = Vacancy.objects.count() + self.assertEqual(vacancies,0) \ No newline at end of file -- GitLab From 79ae3176086bd8e4925696a8dfd3c0660a133d6a Mon Sep 17 00:00:00 2001 From: root Date: Sun, 6 Oct 2019 14:37:52 +0700 Subject: [PATCH 026/103] implementasi fitur and testing --- .../js/__test__/components/Vacancy-test.jsx | 5 ++- assets/js/components/Vacancy.jsx | 2 +- core/models/vacancies.py | 10 +++++- core/serializers/vacancies.py | 2 +- core/tests/__init__.py | 2 +- core/tests/test_vacancies.py | 33 +++++++++++++++++++ core/views/vacancies.py | 2 ++ 7 files changed, 51 insertions(+), 5 deletions(-) diff --git a/assets/js/__test__/components/Vacancy-test.jsx b/assets/js/__test__/components/Vacancy-test.jsx index 9f1e253..7a4d61b 100644 --- a/assets/js/__test__/components/Vacancy-test.jsx +++ b/assets/js/__test__/components/Vacancy-test.jsx @@ -8,6 +8,7 @@ describe('Vacancy', () => { const fetchMock = require('fetch-mock'); const response = { close_time: '2019-03-28T05:55:42Z', + apply_before: '28 March 2019' company: { address: 'kebayoran baru', id: 1, @@ -17,7 +18,7 @@ describe('Vacancy', () => { created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', id: 3, - name: 'Software Engineer', + name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', updated: '2017-03-28T07:34:13.122093Z', verified: true, @@ -25,6 +26,7 @@ describe('Vacancy', () => { const response2 = { close_time: '2019-03-28T05:55:42Z', + apply_before: '28 March 2019' company: { address: 'kebayoran baru', id: 1, @@ -44,6 +46,7 @@ describe('Vacancy', () => { role: 'company', data: { url: 'http://localhost:8001/api/users/8/', + username: 'Tutuplapak', email: '', is_staff: false, diff --git a/assets/js/components/Vacancy.jsx b/assets/js/components/Vacancy.jsx index a755cca..11077dc 100644 --- a/assets/js/components/Vacancy.jsx +++ b/assets/js/components/Vacancy.jsx @@ -125,7 +125,7 @@ export default class Vacancy extends React.Component {

{ this.props.data.name }

{ this.props.data.company.name }
{ this.props.data.company.address }

- {`Ditutup ${moment(moment(this.props.data.close_time)).fromNow()}`} + {this.props.data.apply_before} diff --git a/core/models/vacancies.py b/core/models/vacancies.py index f2b5dc4..44ddc83 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -1,7 +1,8 @@ from django.db import models from core.models.accounts import Company, Student - +import datetime +from django.utils import timezone class Vacancy(models.Model): company = models.ForeignKey(Company, related_name="vacancies", null=False) @@ -13,6 +14,12 @@ class Vacancy(models.Model): updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) + @property + def apply_before(self): + if(self.close_time Date: Sun, 6 Oct 2019 14:52:05 +0700 Subject: [PATCH 027/103] finished implementing validation feature --- core/tests/test_create_vacancies.py | 24 +++++++++++++++++++++--- core/views/vacancies.py | 4 ++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 6c23cb3..8a06e56 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -135,10 +135,28 @@ class CreateAndUpdateVacancyTest(APITestCase): address=None) self.client.force_authenticate(user=superuser) + today = datetime.today() + url = '/api/vacancies/' - response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(), - 'close_time': datetime.today(), 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json') + response = self.client.post(url, {'company': new_company.pk, 'open_time': today, + 'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) vacancies = Vacancy.objects.count() - self.assertEqual(vacancies,0) \ No newline at end of file + self.assertEqual(vacancies,0) + + def test_update_vacancy_with_same_date_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + today = datetime.today() + + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today(), name='new_company') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': today, 'close_time': today, + 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/core/views/vacancies.py b/core/views/vacancies.py index a5da9a9..bbfdda9 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -56,6 +56,8 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): description = data['description'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') + elif close_time == open_time: + raise ValidationError('Waktu tutup dan buka lowongan tidak boleh sama!') vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description) if 'amount' in data: if isinstance(data['amount'], int): @@ -74,6 +76,8 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): description = data['description'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') + elif close_time == open_time: + raise ValidationError('Waktu tutup dan buka lowongan tidak boleh sama!') vacancy.open_time = open_time vacancy.close_time = close_time vacancy.name = name -- GitLab From 7287930c28e51d26644ed6b7957c27b31b9e2913 Mon Sep 17 00:00:00 2001 From: "regensa.tjahjanto" Date: Sun, 6 Oct 2019 14:28:51 +0700 Subject: [PATCH 028/103] added unit test for create vacancy finished implementing validation feature --- core/tests/test_create_vacancies.py | 32 +++++++++++++++++++++++++++++ core/views/vacancies.py | 4 ++++ 2 files changed, 36 insertions(+) diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 9d8cd65..8a06e56 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -128,3 +128,35 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancy = Vacancy.objects.first() self.assertEqual(vacancy.amount, None) + + def test_create_vacancy_with_same_date_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + today = datetime.today() + + url = '/api/vacancies/' + response = self.client.post(url, {'company': new_company.pk, 'open_time': today, + 'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancies = Vacancy.objects.count() + self.assertEqual(vacancies,0) + + def test_update_vacancy_with_same_date_failed(self): + superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') + new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, + address=None) + self.client.force_authenticate(user=superuser) + + today = datetime.today() + + new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=datetime.today(), name='new_company') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': today, 'close_time': today, + 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/core/views/vacancies.py b/core/views/vacancies.py index a5da9a9..bbfdda9 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -56,6 +56,8 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): description = data['description'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') + elif close_time == open_time: + raise ValidationError('Waktu tutup dan buka lowongan tidak boleh sama!') vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description) if 'amount' in data: if isinstance(data['amount'], int): @@ -74,6 +76,8 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): description = data['description'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') + elif close_time == open_time: + raise ValidationError('Waktu tutup dan buka lowongan tidak boleh sama!') vacancy.open_time = open_time vacancy.close_time = close_time vacancy.name = name -- GitLab From e4cf865cb5df25919cb0ad945005a153c23a40c7 Mon Sep 17 00:00:00 2001 From: Azhar Kurnia Date: Sun, 6 Oct 2019 15:48:34 +0700 Subject: [PATCH 029/103] test: create new Vacancy attribute: salary test in React and Django --- assets/js/__test__/components/Vacancy-test.jsx | 2 ++ assets/js/__test__/components/VacancyList-test.jsx | 8 ++++++++ core/models/vacancies.py | 2 ++ core/tests/test_create_vacancies.py | 13 +++++++------ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/assets/js/__test__/components/Vacancy-test.jsx b/assets/js/__test__/components/Vacancy-test.jsx index 9f1e253..31986e0 100644 --- a/assets/js/__test__/components/Vacancy-test.jsx +++ b/assets/js/__test__/components/Vacancy-test.jsx @@ -7,6 +7,7 @@ import Storage from '../../lib/Storage'; describe('Vacancy', () => { const fetchMock = require('fetch-mock'); const response = { + salary: '1', close_time: '2019-03-28T05:55:42Z', company: { address: 'kebayoran baru', @@ -24,6 +25,7 @@ describe('Vacancy', () => { }; const response2 = { + salary: '1', close_time: '2019-03-28T05:55:42Z', company: { address: 'kebayoran baru', diff --git a/assets/js/__test__/components/VacancyList-test.jsx b/assets/js/__test__/components/VacancyList-test.jsx index 0ac2b46..a3e4d51 100644 --- a/assets/js/__test__/components/VacancyList-test.jsx +++ b/assets/js/__test__/components/VacancyList-test.jsx @@ -135,6 +135,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + salary: '1', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -163,6 +164,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + salary: '1', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -191,6 +193,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + salary: '1', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -219,6 +222,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + salary: '1', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -247,6 +251,7 @@ describe('VacancyList', () => { verified: true, open_time: '2017-04-26T03:39:11Z', description: 'deskripsi', + salary: '1', close_time: '2017-04-30T03:39:11Z', created: '2017-04-26T03:39:39.916758Z', updated: '2017-04-26T03:41:07.157634Z', @@ -258,6 +263,7 @@ describe('VacancyList', () => { ]; const response = [{ + salary: '1', close_time: '2019-03-28T05:55:42Z', company: { address: 'kebayoran baru', @@ -273,6 +279,7 @@ describe('VacancyList', () => { updated: '2017-03-28T07:34:13.122093Z', verified: true, }, { + salary: '1', close_time: '2019-03-28T05:55:42Z', company: { address: 'kebayoran baru', @@ -290,6 +297,7 @@ describe('VacancyList', () => { }]; const response2 = [{ + salary: '1', close_time: '2019-03-28T05:55:42Z', company: { address: 'kebayoran baru', diff --git a/core/models/vacancies.py b/core/models/vacancies.py index bdb75cd..93faa69 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -13,6 +13,8 @@ class Vacancy(models.Model): updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) amount = models.IntegerField(null=True) + salary = models.IntegerField(default=0) + class Meta: ordering = ['-updated'] diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 9d8cd65..dba96d2 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -23,7 +23,7 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancies = Vacancy.objects.count() self.assertEqual(vacancies,1) - def test_new_vacancy_with_amount_success(self): + def test_new_vacancy_with_amount_salary_success(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, address=None) @@ -37,6 +37,7 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancy = Vacancy.objects.first() self.assertEqual(vacancy.amount, 10) + self.assertEqual(vacancy.salary, 0) def test_new_vacancy_failed(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') @@ -61,7 +62,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), 'name': 'new_vacancy', - 'description': 'new_vacancy ', 'amount': 'sepuluh'}, format='json') + 'description': 'new_vacancy ', 'amount': 'sepuluh', 'salary':'dua juta'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) vacancies_count = Vacancy.objects.count() @@ -81,7 +82,7 @@ class CreateAndUpdateVacancyTest(APITestCase): 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) - def test_update_vacancy_with_amount_success(self): + def test_update_vacancy_with_amount_salary_success(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, address=None) @@ -92,7 +93,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), - 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10}, format='json') + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) vacancy = Vacancy.objects.first() @@ -112,7 +113,7 @@ class CreateAndUpdateVacancyTest(APITestCase): 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - def test_update_vacancy_with_amount_failed(self): + def test_update_vacancy_with_amount_salary_string_failed(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None, address=None) @@ -123,7 +124,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), - 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json') + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'salary': 'dua juta'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) vacancy = Vacancy.objects.first() -- GitLab From 366ad60dd53588eab47fd72397a99503f67d9ea5 Mon Sep 17 00:00:00 2001 From: Azhar Kurnia Date: Sun, 6 Oct 2019 15:57:57 +0700 Subject: [PATCH 030/103] add new django migrations to add new field --- core/migrations/0020_merge_20191006_1406.py | 16 ++++++++++++++++ core/migrations/0021_vacancy_salary.py | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 core/migrations/0020_merge_20191006_1406.py create mode 100644 core/migrations/0021_vacancy_salary.py diff --git a/core/migrations/0020_merge_20191006_1406.py b/core/migrations/0020_merge_20191006_1406.py new file mode 100644 index 0000000..12d371c --- /dev/null +++ b/core/migrations/0020_merge_20191006_1406.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-06 07:06 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0017_vacancy_amount'), + ('core', '0019_merge_20191006_0852'), + ] + + operations = [ + ] diff --git a/core/migrations/0021_vacancy_salary.py b/core/migrations/0021_vacancy_salary.py new file mode 100644 index 0000000..94f1f06 --- /dev/null +++ b/core/migrations/0021_vacancy_salary.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2019-10-06 07:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0020_merge_20191006_1406'), + ] + + operations = [ + migrations.AddField( + model_name='vacancy', + name='salary', + field=models.IntegerField(default=0), + ), + ] -- GitLab From f40992f232281f1928e8b498a6bf724e846e7c41 Mon Sep 17 00:00:00 2001 From: Azhar Kurnia Date: Sun, 6 Oct 2019 15:58:27 +0700 Subject: [PATCH 031/103] feat: implement new column Salary in front end and back end --- assets/js/CreateVacancy.jsx | 4 ++++ assets/js/components/Vacancy.jsx | 3 ++- assets/js/components/VacancyList.jsx | 1 + core/serializers/vacancies.py | 2 +- core/views/vacancies.py | 5 ++++- 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/assets/js/CreateVacancy.jsx b/assets/js/CreateVacancy.jsx index b2bff53..1d5122f 100644 --- a/assets/js/CreateVacancy.jsx +++ b/assets/js/CreateVacancy.jsx @@ -32,6 +32,7 @@ export default class CreateVacancy extends React.Component { close_time: moment(), name: '', description: '', + salary: 0, }; if (this.state.vacancyId) { @@ -39,6 +40,7 @@ export default class CreateVacancy extends React.Component { this.setState({ description: r.description, name: r.name, + salary: r.salary, open_time: moment(r.open_time), close_time: moment(r.close_time), loading: false, @@ -70,6 +72,7 @@ export default class CreateVacancy extends React.Component { const data = {}; data.name = this.state.name; data.description = this.state.description; + data.salary = this.state.salary; data.open_time = this.state.open_time.format(); data.close_time = this.state.close_time.format(); if (!this.state.vacancyId) { @@ -104,6 +107,7 @@ export default class CreateVacancy extends React.Component { }
+

{ this.props.data.name }

{ this.props.data.company.name }
- { this.props.data.company.address }

+ { this.props.data.company.address }
+ Rp. { this.props.data.salary }

{`Ditutup ${moment(moment(this.props.data.close_time)).fromNow()}`}
diff --git a/assets/js/components/VacancyList.jsx b/assets/js/components/VacancyList.jsx index 56efd84..654baa0 100644 --- a/assets/js/components/VacancyList.jsx +++ b/assets/js/components/VacancyList.jsx @@ -70,6 +70,7 @@ export default class VacancyList extends React.Component { bookmarked={vacancy.bookmarked ? 1 : 0} data={vacancy} studentId={this.props.userId} + salary={this.props.salary} /> ), ); diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index 5938e5f..c519a4d 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -33,7 +33,7 @@ class VacancySerializer(serializers.ModelSerializer): class Meta: model = Vacancy fields = ['company', 'verified', 'open_time', 'description', 'close_time', 'created', 'updated', 'name', \ - 'status', 'bookmarked', 'id'] + 'status', 'bookmarked', 'id', 'salary'] class PostVacancySerializer(serializers.ModelSerializer): diff --git a/core/views/vacancies.py b/core/views/vacancies.py index f51cfd3..38b9028 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -56,10 +56,11 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): open_time = data['open_time'] close_time = data['close_time'] name = data['name'] + salary = data['salary'] description = data['description'] if close_time < open_time: raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!') - vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description) + vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description, salary=salary) if 'amount' in data: if isinstance(data['amount'], int): vacancy.amount = data['amount'] @@ -72,6 +73,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): data = request.data vacancy = Vacancy.objects.get(pk=pk) open_time = data['open_time'] + salary = data['salary'] close_time = data['close_time'] name = data['name'] description = data['description'] @@ -80,6 +82,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): vacancy.open_time = open_time vacancy.close_time = close_time vacancy.name = name + vacancy.salary = salary vacancy.description = description if 'amount' in data: if isinstance(data['amount'], int): -- GitLab From 919f31ff1f74544c83d873d5d5ae4445ddc315bc Mon Sep 17 00:00:00 2001 From: "hadlinar.rahmadinni" Date: Sun, 6 Oct 2019 16:08:50 +0700 Subject: [PATCH 032/103] deleted logo files --- assets/js/components/ApplyModal.jsx | 1 + .../1f53ddd7-feb7-4e04-a8d8-1602c40409cb.jpg | Bin 30300 -> 0 bytes .../32cf01da-0e39-4742-b0f8-e5d73195d0ea.png | Bin 123832 -> 0 bytes .../5b0eba63-9c80-45c7-b5b8-8253e8a04930.png | Bin 123832 -> 0 bytes .../7db160e7-6eb8-4d71-84a1-c14459374953.jpg | Bin 757180 -> 0 bytes .../cd4183cd-5f44-4806-a92d-fa34a70b2feb.jpg | Bin 92738 -> 0 bytes kape/settings.py | 2 +- 7 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 files/company-logo/1f53ddd7-feb7-4e04-a8d8-1602c40409cb.jpg delete mode 100644 files/company-logo/32cf01da-0e39-4742-b0f8-e5d73195d0ea.png delete mode 100644 files/company-logo/5b0eba63-9c80-45c7-b5b8-8253e8a04930.png delete mode 100644 files/company-logo/7db160e7-6eb8-4d71-84a1-c14459374953.jpg delete mode 100644 files/company-logo/cd4183cd-5f44-4806-a92d-fa34a70b2feb.jpg diff --git a/assets/js/components/ApplyModal.jsx b/assets/js/components/ApplyModal.jsx index 42e6271..e3a5f0c 100644 --- a/assets/js/components/ApplyModal.jsx +++ b/assets/js/components/ApplyModal.jsx @@ -79,6 +79,7 @@ export default class ApplyModal extends React.Component {

Deskripsi Lowongan

{
} +

Persyaratan

{
} diff --git a/files/company-logo/1f53ddd7-feb7-4e04-a8d8-1602c40409cb.jpg b/files/company-logo/1f53ddd7-feb7-4e04-a8d8-1602c40409cb.jpg deleted file mode 100644 index a94f84e590886c6a4b953ca17bb3a060f2ee5c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30300 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 diff --git a/files/company-logo/32cf01da-0e39-4742-b0f8-e5d73195d0ea.png b/files/company-logo/32cf01da-0e39-4742-b0f8-e5d73195d0ea.png deleted file mode 100644 index 9e784d856a019135d4a560cbea43aef2d894a38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123832 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%0DB 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ⓈR5&6oMPg3OJn=6!V*zAN2jSoX*iWmBPuE_sE=I&*yxKT)MK0p#Vwki9IF1SB>krDY5z2xQi_ef*FU8 z{H?8QHFF!7TS}!{BiHq)%*k8Xyjwy{UcHmj({DlS{3RvoTxI42iqE3-Y~8W%ns=++ ziz0d_jTid=WTD##KV4SL`K0UrdYh$6U+>?=)cbl=!ILGXbJD*?J6DI`hbgX*^ zbCE|&PU-iBNzvc`FsReSmxZ2~1KiHpWlCpy394Z2G1CclJV`!1y+W?&2;T~=!+btM zZ>pik`^j~q3F4A#8D;^_b51Ew z#FLJjyvrx~#!6p}gP)WWnM%rJu_BxCmq0zG*Ew~fE^_{AqIUfD?-90_lwMN#V3iXHiW5KzRISe@4_HC(&*&bIiB^3W})S?Uq|vq%8Kvs^ND?+5%c+pOcLE;@##ACxeX|N<3Z+z zrS83lI+uE+pl(Kyc|0O#c_R`|UHF)TI7cjinJ_Mhs+rV3ZUBxshz9oarLOinkSD{g zS@((`T|IJVYfbwGr&%nl`^xtS+o1h?3gNTR2jkXLO5qRx2-RCKPiZh;ymnn4M9}g8 z6OcPnJWD$McxVQojwcOu5}NWj&(N!B6vw<eTV zui2IO0+_#nU|-e^!I;Dci0-czB3!}R@PFd$oA;b9`Sb>%4MC0 z)cv6h-m4Vu90qrZ31*pYG)6=AjN#9A zt51#h$ylr;Ca`SUDV1X{X}$o(nFw3+zI$(>bcQ?>O7B5-^w*Pex5{MU%YMA$GTxT- zo~mcW9!lqx4yC_qVS7GUQ}AB0?*Tj;d7*cT;CN0w-u(H4M)o>_b>DLu=nP`Bxh2)d zm2{rvUb62crK4|G8C?$Xu6(^cmIsF(kjP2Qh@J#Qu2-h#-iy1u0Qyb|{PEs|8{o$8 zyh8_^Q}OAZqn=gt06U3J8-tZR zohXC*%FfoFOweKL$pj^tN(>?qXVFKlW?BtGH+om;b-PdW@K3c)D;3pqD}D#(j;k!~ zqEaqo9=RYL9{YWvbbNXd$(8wZVQ1ilc`u6T(I96x8LuzO<~_+A z3-2G_!JKb4rKEE}+C`Q(a3B?sJWIKh1M&-rx2@ovw!vqK;|5zX>!#)dxlL+e$oVDw z3iiFv?j1aM@8G=}n82Q$Ov&5i=W!wo!p_g0-Q_l>jh}LxtE&fhkE0nIM+)$8kFkz$ ze|@F@#Y&nRI!QjEPbR-OA;&Kn)D%dR>YXQ6xJ z_pzh&q8gThdJ?+zGi5Rl>eG&%-Rn`g@9lAR_F0dEdE$ZHQ#>qH0sZJ~ z-aPy0;JpB6Bke`N5~omf;(h*#NU0o||HRY{we1^d zA$wZ`)4vR|Pcrysg&*4btu9fzLZ?E`I1ZO?IX!A;=o!hkfze2@oCH4&IiHg3dVFMJ z&9O+2J+mA8e^kKxmq(L<%%gTe-va{K0Nt;-sCCQ8xf!{kKsp%0JrwX>LB_^QNHx&SK6-Ta-lL`ydyjg-gNw6!c|UJX zd;T$hnD_bS$RJ01>>WINFBQNFeKzoC?>)hA0>INPQT|k|dg(Ts-f6Kh3v65*eZR}p z+ol|vdfU`P53|TRyGl=KG?SXhokVZj;GUZM%8{ofC}zrEQTsuPOnMk zofTYYPiKS+&_ggu>M;Dh(k)YWzBG0(qt1IeQvArXRPLu%Hu}OMbr@PK>lDcq_Pr>k z>(x7u`xEmA4eE7-Vmfs*smx|5XTSGS-AvZGww)cALHz_@Y>yM~_vp$QnZM6%vVww* z4bcu(zR*2-^elk6o5^`cNK#I)(=k0ci}=~d07uVq7C%@12;@z(kM5l<>YzOv;{1w4 z7{*+XIK9zP2U&_G! zQ|(_hwgX5_-Iq12H^~J*oCQt*i1R zbl;bvecm2V%r2S|*Y->W^+M^Lgr3Uh5y7kUWYYtDHt$@M$SxykaFIH53Y&xfEPtyV1iTdE*vq7E2Pr3WwW~I{s zdPp?0DfNyjxl;IEs+-ZGcO;pU=r;p(I!03c&U`(powRb;F#WnIm=7B~42vC>R(1%q z04Kw9(_C)AvLgxhoLgm2eQQB|Z;Nhm@3F`NW&{dBW(Xf_zcn|RrQ+;0f5%>o9u|bz z*7KH5DWApBTtSB0-9_a8{P0UWQUben{!^yvq7~DAK|09hF-~)T@yaW)|KgQj{DLR(>Or5d^Y&@HI_=;zeunw5c*9)Y zHSLvYW{{jjD`(FEniKs?O9`Vv{*ZK$cJEEukE6&t4qR&hyyxw>z^Zf!;xGO3;g^0{ zfERmYfI|-x+ksv1iTUux;ZADg@My8KRu#)mez-COUkdkxuJD2Wnl8P;q00L7`i&c# zfnEo6q;55Z$#N!A&(@pBEuyyqxS*kI%T_Y$Xq+FSghUuiBt_551YPQ7l{3kr=K|X~ zMYaUrcNEZByN!;Kd(feR(W(RXgaOKADoaS$JBhkq> zZ3pKbe8n3@>hz?z`Dtf=mi#ccoWJ6aRF)@-TZwZ>yp$)%hq3#bE+md-0#ZCpKiuV| zhhH**{3Z6t0-^fge#oePswKKa-wd#XEk!!82f5&({vlT1U85g~TKu!FpTs0`_LXX? z-`KQq<6P!@uRF>d3D!82#12J^9#L#hf-f`fRvQ;7>O?39nFysYB_XQ-6Hg)Q$p{J&vO7tn#;o?Q#xCGsMCctAsZ;U_PPAuS4vS%vO z5wD$`5khAUx%xSq=OFd9G08tlPZ@*mpIA%+lBmc)!+P%`h0!NiqqG}F0nnCVcrXh0 z>RGqK$Mu43ow``Iuk_@WSioT)=3Dn3q88L*RGh6(wKu3r&3~89}KT ztaQ>iZiO_^?YV*PI)rB+kMmOGh|YKU6`zo>7%2}3UiNbZo)dW^EJ=C|Z{Zf!<`>-J zRiEfL(iR@%7kHA$A^D&~IykM%Kfmr5jMp4-7ehmFmpv`ZMoMz-khRZ| zHm~6cQUfFUrp4dpKxgJ*&aJbqx>)y%SB~)AtMufpKbd%_TkKiqMtf!vv0r>4%pK+8 z+ysD^{1LJL0z*%6DRHO#bd(UA^A7&Qt!tfyuamqIe^A7R6o${RJ z|L{ja{nWz`3;mQux`h4EHnw3Lh8;@S(Y#@v8v{g~*lslSdSgzu%mDe09XnL|=K8g3 z8!B3yoY-O5PL%|8ou$yJ^AL0AluUVH7U&PofIWVg97UeOmN13=jI-FkgGb(-KZKA> zfFdqQFhmCCh#oWYP z*qjy z?VN@kGg?}hotTMIh>dKxc0=}L0#n3*awifb7L3gyAMrl&lAN9CJ}2kYJlS%r?iHkd zAr`(v=>T`4P`4t9R&l$>MY8bm)Y@2EStFGH+5l8C{DKZ2O!VR&Lwm!ErZ=wFU%L`h8gU`J}@bMfn=aFIw zkLQO7v~tl2nMX>^7=#S{rSH4F`6j3f^kRSbqcuKPRZ~sAzAgJ=wT!MDhq66Z*hP`7cWS=@gkD4icv} zoQbq_A}I~0Ac31{WTojADgs_Pa%2dFuYg`ahPQN6I-hvl=jGs^phF$|4)|^t)6sH3 zqW&C?70Ap)!yLOUP(OPX!5<@73Fv{h+a)X`atTZKGL_vWtRmx0uASJm zOu!H<06W0}kAXv;8;GTO4(0?Hu}3B_D?|$91ct_haVmmDA?HAm^^AkGN3Y2#J`bh8 znUH_~`-!{Y3;1t-^d>u6=LCA3J`cE`VlSmbr()9roC@+&58?i;(4V?&%9I0)UffZ? z3FxF9hpV@=jG5vT^-gwJB%=W6lhpKRM%;T!TP#{a%*ZC`Mw$evDn8^+CDN2BW5%@9 z)a*P0^&v<-bgaD9ICZjF$1*o%oqG`*`w0r94BWDoMp0DhHQDGeMlaA4KIBLh9=i-F{Z zBRdmD3m$-cC z)Gr|)n$N`HZt32F9z{HGQ=1R=DX(tmU0qpOzkSXew7zl9;mYb3ka=NvlQcA2L=zioa= z^SbzPz<75cqaavX?%1)GV<+hse{#dgW5lP&8fusV^L*w3Qs$NN0+Q zmyGk>u%A4D9rO?%0$-31Azz7lV0y|$V7HWj0Vu2hPst2E|Fncx$nXzt?Sj4&Z7+)S zCKvHg=_JG+n96qv_eo659`;PP~)w{1weYN-0MF$R4Zr=`d_BlH$s}CHQLJ{x~ z1;B@gVi$&<+BS3>;h$OHkbB{;<2>9Z-$RYJ4V8676A!<7n;&fj;y?Qfmi0c+UQ^S0 zgszQ4AZ7}~t%gZ9wWj*@aM#`{JipiKJj*`K6YgjUw$!1<;11;-+1b=o&)BSE%AIQ3 zP&_S%2z|(qAe*EsxPMoQw@dtzZsXuBagXC!*qx=_QyMZkwjrwr4ymeIJ+P`OWrTF( z33-8xkZ+nZ!aHy)If?KQWP_LAefeD`25?IUl>S^7R2~X1cxT+{>6_orwB>%PWb}Xe z<}X9AJrk%Zx1muJ;q<&#q%0mlK zO5yjVp5pwHnU{V@-uYvhV-&q#NMNVf`8E@E#@@=D#Hqce0rOHdaL6S&;s@XVe)9A4 zPmP!Pc&WP$fV|KLt{yU(UovF%5U$vvT{WZ%6A*R))<@*c8-_e5bz;FN8x+VZ>2U`s%BTrY>5v z=s@4feK6lX=dSIQl?M(idNrzil2yot0x$6}4|ih&MLji3Tga!l^TR{P-cOtE$v` zeGOeFgSvvRVW|q0J}x}E?3C*G@u2(nC!v%4v7EBbKm8|%ox%PQ*acr4;;G23j zh{KGB>Qt}dzhrXkasSh@LSkM3_k0fR)st73?hKslRyBF`>Z;XhK8ruFuU;kSLHoSw)eYyTWvG#RvXK5?% zRDTHd^eg!6zS}po_Ui@ok?0e_vWKY-wI+X_mfSoSc|1>sK3sb=%x3E0E08*3pFbY2 zS~Uu-rO$1$#DIN=@nq#jf;!eYIp<`k#cwVcH$Gb?tVsX>AOJ~3K~&tg zx=wk*+d}_TCNcrrKp124-6nJ3w?^(5GMQYF{*dAb{YYU4xFSM8=|MUl z{!l`lF8=WS|0UuAJBT}ocU%cRL?0I($Q=ds-+_G56Z_Zi+Ya--+xzz2zi1JL-;5DC z1l;WWI88pO-v5`{iI-kV!cNz51K=qIc7G%09iboSyM0c-QB@;H4vHzi3BwX{j%d}< zZS!e2&A@Ys%%xY0EYL~qP7`nXW>&h;p%NAz6R*-ij@Ahto0^o-xB=t+R#&4nzWnh+ z3b%a85TGmjpsvvedP-)4$N}CcXI?J!f_0z{-2GK~JXTNcAM9lf=y;@)xeoBT>=yzr z%7IAToWf~!7xfHcj|J&C`;41l|MU0R0k5zN)aB=2zWM!MmUxRio_s%ReG!xwJ+Z#; zzJ2@dszm5M{ph1835axH2xAZ0_LD3bU3qhq|VfRmZZ&bd{TGj9;#RBKG@A>TnyoD9X~SJ7?5J0 zTl{fheNt37fcFv%u2$(mUGPvYQhMr3B#)2>{3k;9En(*qc})FBgaK?Xee}_*DE$eQ zz5?id_ubof{S%9R2lGTd@&|cD`XsW6m!Foxc*KijsPBg{QR!{lH_dFqxM$|-JjL0!}Cr(T49gt5N#@1h!s1sF%3sr{DiynD}hv75e$qQ@$WB5L?vn z00iXJ^?>$wU{UDz?pv|%-W4lWtY5$AcT#`rBeD?r;!Ws#EN$k4PowVrARoVgD}=tM zt!8`cOvAX5tiYvhPeQjab|KL3KN84m_PDXP?TG|?O4+@Rj9jhxCt&L+yc-qd${ier zFV62i4y{*JH8s(9vYkm!1A0{bz6)`BUs%6Vz@?JKO14b8lohgVm$`YZJV~9!hPro` zHV0q_=CLE)M&@I_j1%|t@v$cZ(0_G*cS8WTF!>!ZU>Jsc5Bm^G&%6aK;COh?OZUhU zYQ4j$$F20*A5tV}jxe~R)c+CnJ;C&!KT_#WJh6T~z}xO^yLbJ^AXn<&{}*CI?LpeL z4rUrNl@)<(W}Dc;cW428tGC$wxp3)=+V{0KjT#j~PX(^5bCGusp|=*K6YqSiX$#38 zA-e?kB=%g8`(}4G>u9pn4dJUOtPWYbcTBwChX@GHC$^sbjd^4Xw zE8jBY-N!>);-<0P$HEy|cb7D0HnC^$TwcjFk1G+rRv_%Zm{%9ny&E21^5F)O=+mX4 zKvk7KUH4tmy0E>WHz#=&?0phk;-cdad4eBD>OowM2T9lfSNpzb{rZR6_6fZWcTr54puvE>Wp+@Mv=C!u2s!`s* zTefG}9`@5^=-a~9?;5i9wgP#Ajt__L zkV_;#ZpgSH9ZC=E%$U1Wd~^6o?W44W+K6|cg)sspqlPg;+ooaI~M z9na%g6~``r_$6F@xTO=c{}4``lY1%YeTmxm;>${TIm39r%)SRgpi_`m>6-R7sDB($ z+($5v*s%1;34G~kr;GSq#V^dS@c#I0h2C#eFRV0(VJ@tq_?30OsV$((9O|dtmXR|1 zg8Rskt1r~S&nLHl+AQNIW~Cdy59x^B+mE62oku`UdmN4LDM8iHJrW96<>v=!>RIS1 zq4IpWy8CMW-ekwkS z8HoQZ{Dd5Xo^;GNt#SXp%)gscqY!$*JfO=wiM_yCZbrK59d-i02Gr5NDWjVt3Tsc$V z&$Q1uVb0xDaEW+kuCP0R_rfa0c4hx7!@z6gt2FXzy_5nsgo*3>k59a-iW6_@@=KVr zzZu(~At7-Pv%e|npzXK)=AR|X10Sm`5AKprww+wSYrMfw3)@S8EpnB;Lpf*=MVq0qe#K6oYF@xLa5fu3|cMbj0&wo&aZH1Yb!br zO)K+Ixpn6z?4lD zutj?bddIfI8_qoV{`u-HRdE^7dBo)@I!E3J+?~HRpm$(TzFfjr$~o_zyoc0DM)z^y zlTO@2@=53v{E)mUPLoyoFa3T&|7SMUo{_^C%JCKd8E>t?gK3Bz@F8`6mb3XKmDG7L zLT?=Vzeqg-_z2!t-Ap)nKE!LF%O_h&VBrl?nA~~s_sZ&>XcUVXJ*(Uhh>s_Qu$c@ zw}d5~c8Gh`tJjrdDZ-Tj52zi7VBVk1)_;8W_zRNG6Z@p}H^BCW&;#_F(oVaa%aTmr zq^4c1yTt*8yS@2KtKY3vqqZ%TtyE)j>TN4F-7fWgZ4}w2QeeZUi`^7~qGE?BheGNF z;q%Y@#P`4N=YHJQwyAYh>-{KQ<~VbuN$M_hi)x$pwY9_bz=l1`HZ0q4dc*0{wuYbN zY6GqC@>lSYYFcTZRq7${_?ST+lhP@sGuSQF$YrHBq4X%PT|$){h2J7<3j7?bAzj^l zh+n@u$p{D>Sk`=bo(Zt zx9$0Os^L4_-};E(Rp>miPlW&PKm6hU{=*+L?ecTH5Edaa6U;YR^}-j03x>LtG6Izkw3@z23kZNal6@$C$(^#M^r=&6 z2&Gw7;#AL2X8U-3+rCvZp)Q6+dww@n-eCWTUsDPibmC||v;G6r|M-W03ij#hpLj-Q zAYtC$`rXuzKW^K%sr6^~ANlG?>rM^5wC)hMCN42=Zv**MP5bFF;D-81h%5IECtJpB zn8LQ~0CGq0*3~spY9CUVi)=SS=}0-vN)zoZ#~7aX$}3dvRQ-3HuG7sq<5BAzL3Q(E`dADz-JWbT=-F2C+CZ@)_z=X-Q}MXb}bVP&)QKQ{VIP zvas-gcawa?jl>dv_;W`7$N%xiKm3ol<|1FooIQm87WQLLTN|dmwb%UwU&id3_pr)V z%Jdr5PumXjJ&UGJwTO25^cYCHM~|m5W9U(d_QzoMH!Op?Ehw!!siLRIKHtyjuHnc^ z@810gQQ<4baT}tEO{G5v^dr`}gID5gRTQG)B=(W9m#R*y&}P+@vhxrZK7sZ91@BR& zUZZr{;kbK&I6*GXr5k(}u&*RbrN_D012o{z1@8OCb`cwf8o>u?E6f%P5V^eRK-5^VfTmMvfHJmCE^Ic z{|_mPJT4M)MX&0EIv#zh%v)RM&AT6wLnlgD7k+cTybRo_afkVy^^5kDkYnCOuFOxL z^bbB~Qqs;4JT|ULa@d#f7Yq zINPYIl1$67i@w(p>Wh0xJX4OF=NB){$qsxU12NSgZqm$oy}o)R*buTK^iaA{T(4gJ zS_vABANWlw{WLM0(8nlrh{L>=P3$Ng>ZrKMo_0g5l_gmZtG9@1@gb{w?Q~Katvj(l z%%M&XWtrpFvj-36nD@Z0&P5;kuDUWroDP8%rH?}5%xV?D!HeFDJduQ6czIoZk%Br; zMh5cpnf@DhKu*lx|2*ihcAGl&Esqcnd1sy(JA|b^W$Kin3}WX*zt1?IznHhNm=$*GVZ5Ux6n@qb+Mb2 z`koCNqJ13eK4^%a*B#qo0>4V{u1A-7l+w$UZXic^oYao%rr4a)Y8vnGTI4*ur`WlTy*Coy61FdB#p?w4pa!b#-NXW&8fVw539w=pE*BK;E=z zQw_za15!tU#?@1o0Y84vvZ?+J{w>4!lZLUm=X?;E;nZ7GKf-lj+bN*K9CscP&*%x_ zC=!7jgMvj_gv{UKqxmIcaOpDU;GUCr#w?S&6)yIKInsRyN@wdX^vF+6Gk2t<^kaMW zTJf&ZkI)&>WR=Y1)r8D?^iolr@0X~J!r7H3xqpd6uglm7<=DOiJd$>uV_bVkz!UGt z6X^hF@=-j94ry&QeG=OK)b@Si{f?Vmqzqgsb8%`J7X@))N_8qU)7INd_c24KtmC+B z${02hw|E9|3_H}99jLBuudJ->TiMokJ=mYXr{mD;Tjw;@Z>P;7s7G0Q?Dc}MQ|qDb=Y*wQ7>ZF3X56*uQQ@m#Mf*z=*Mnz%CP zfjcnE+XqJuhmiBoU>ygbZ@_F%@gZooF(K;>kf!j%cgkT)%Z8Sg7O-zP7D}flXLGGSf1!i+l{=WqxwqNrqRBIcZT&Hx1F; zRtn{C5+$WyNWB@ePemYyQ$Mzs_oDPvWTP{Z_3cqWqSX?Qt^g&@g)tT-s(=nwkO%I| zJh_|hKZ0++pO(IylD#ic55=o>y*TZx5wY{xseeU@V`d%_KOeev!KJry(M8H&UbYP2 zY{7lml%dOzxkfxhybLPKdWVjC2WoXA_?DL1EgM>^p-T=rGe} z%j&*Of!)^0?NnyAx5K)chdHF0pXXPYe@F&h=Oh}&ELBzGc{c@dzC!bS7~rJzu*5*O zHC2C}iU<@AF&^ZmF=I|EY`LrSTAu))^gUQyi`SP%-E61qNDQ5$N&L;H9+UKp)W`tqpgv`&RQW>Gv-KDx z0F99ifC+tD#t6ElHXa@$RkyUaw`>4BF5QtWVy976=wOF=D+az&>KOU86I^6Lr2q^mN@EPJqXCa9f!UN<8Ez$IyWvktxw-z zunz8);GKhbOK>6d=oDeGyOYw5)(dMAa{sgTpW53v6ujVu{^RJ?UUg4By@ zxVX5CEP#cMyTU9>iEY-ltZh6mwY$jL{S%p&|H@BOdWYD%Bxj9b2}3#z5Dh}o0_1G)MMCyy%B7u1ba0< zpxmqD^ER|lYsMBM1vy2MI8)cmZEEUAc~|88Z}UYSJ{{(^e_KMgH8nYOgT5#fMjR(< z|0flmbj~rVW64km9g0;nk*IS%)(-H|MoZ{UpUULY<1aCe%jR9?HmKU9np)YY>`tk> zC;LBPeC!Wn5_P_e=foeMl(<{ulXy8=T}JjQkeBoQ#Ow2+nGe*)h{(g5$^>=%=t zA!yi!!YuAQK-3$2)2(w+dB2@ItBz1a3VU{;*wJ_tvn;Ej9HFP`S3`IAsbuLX zr}?*V=LT}h-2{E>V-b2?^5_=3SM!lMqn6_k5qjX~fb1z^=NCW0x|h@E_mn^7 zI+%l9^m_L$0!|TGSa8a%In|CS@l2FCLS{=mDTw=IM%l)=ZKW>v1`Iq>ucx54Y18)Y zkY^-HYrl}Xea+~O5JLi!(xHyrTNoMYc9ut-!$i5_%p2*IRx`I%8{8}D+#Zdo8YSvW z;lo$gs~3`NB~sL-2k=uM$6@9FsgU}Zb?f9G$YGAqqb?m6O}QMg;rY#-zd5d0=+#)-85PLT7 z+IbRQU5769up%Y6VD`p2DRN(b+SzpKDMh7xm%?WU%Q5IWVFx+Fh?~XXSc`W1SjHZA z6K|lm)VUv&j*xWhcfai@#CylxDeJ5skU z9*jyiTsqL1fN;J-59WjT^g-V|(hKGY-P$;rpDrn#UKI3*qZ>sB^jlp zl!({yj(F6y)Xe};q4b6Z+5N9?UqXUb5TCSwdJG))A5@v(k%`~vRP`9kQO zYy3G}QV5rs^UV!X>2hI%`D$uVl0&B`A3Be^WD0B%us|JgbIjPox`%Nm94|2kPWsF+ z?${DXNu)A5^>&Fl&{N&J{USR$!=B4Ko~OwT>|-5^%p~^F8&*S=Qh!dujuQv2`fC8- z8|FQne3Z?#?-bWe3Y*QJ@k!kDPNYvFo~(OT`j(am!V8q=oY8K}3{biuVjOl$gH}Fr zL&nWyLNh>4YN-pU*EP>=X8O4H>I2n%0lyuoZ>kr1y;_Gm*rBL>52dG%%+_7wu6gHS z7ULH;&<~M8qEUTv#KC)ZGE(Ip!WeTfh9htf+ip#q&K&60C2QRa10Tf4tYZS$@aQMC z)-cSiGr}<>NUSG@JrEqX&Q<`?xm449T%X^PYS{3 zv;RR^N({Ndg@TWx+}-6W+D^>#PecX~zKQes(2e6Fm{aRrfDCpX6)g=j8ZgqzEkw)# znhlz2-82#=G)KwIxl>m?qn+2hYN)FKw#SB`9`9`k=+(z4iXUjRJKbmyel3FG7*nXM+)_|h-X2XZ8Zs)*tS@&9RmlhO%@5IWFP*H?s2_3guA zry^pCE~^x*B=a6+H9A%B>nV1N&{#aJ#?29*Xww#0;BG$?jHOIwr0R8_4Whp``i2C z*{OJkIp)0;>ZG}d*G=Yz?jiHco&ejcI#qtGB_T&z)SeKyt8{x2$G->kguOeVdkEc% z{Y6yfQ$VMJIa(4Zl$L~k663CYN9nqBI#z^3k524E-km>ywL34KA0HVe1fdI^hIAZy z2t6$PG;D*}MDyOE^xPBrUt`W|3A=A9GC+x5=L!|LRxfoHijDl z@(caXLy)FKCLr&*X58Ya3_=|vD1!TUOL$xHef#M1jLf9 zVLrg#(Y{8<>C>l|p>%CSQhL}1!uAZiIHh6H#qkrfz$Y4e|DSVGfDR82YV;eAPC)56 zukd-9M8$w_;~9|i+X8qTLgVRa7mPa0k$af;ieo~9e8F7m&CLyRpR3U0fyhxfn&yoX zPpIpf-FTxvGI#CVjdOQ2*whvwJViHZX6l=^BJ!r4TcZ!T*s&Z0??!SK4ALfT_pt59 z@GRz#SF9T6dtOZw2i+RjOjej7cFJok&VX@`PVO|?r3PB5W8al}By@ffUyjn5)!p)% z2n*S2-Ra;?0=a3vpIp?%9itkU`eC4-Jyx?fm(%U|{%=4pjfg&`oL;?3`br8z~;GibDNtv zhj))0(K4f&;0^l6e9F7ocuP?Chnt%>LVYdVsi0x?^f`03&e^(oGq_`8x*JI{Yf}Rq z&IF$~l!s9_vcR;*N5|X9E-7ze=t_KWtcW^Gd8t9;PH_!O=3M3wGJuU*h zzWtcw0AHbc^n9(Iqc5On~!Wx z)L+@UwLW9#1C!z*PpTtEY_XIOsTt#L@P~1)BG#Jk7=n;SSYOS&+x$U;j*Kd-`?6(O z=yvF`-6+XCpr1zTft(Usbc)r!Cl3vCD`!fx(agVa2!TTMm|-RYyIO$#*jdawi-Sjd zx<0*AC|8C*v+u^-lm9#E--*3o9p|8n+I?awqaBxtbujlb1#;rvrG00EC#r`v*1kfL zC|%@ianOEO2xUeE4%Yx4z-}0MmEK%|GvEyx2(%9MdbD1@!%5^eqV&yMk8Eb%JCwe4 zE|dNvb+2%MaWlhU& zH@?QHwERa2o!E`dN*Sq#((OGVb98H1c7*84VT_Dvi{oniNeB!cXncFmyObhDmBJW82&P06U+)Mm!IkarjJvE%4lwAET1vSv30jLP_6MU?wr|BR`05-sNSVF zpHTr%frsAfD%7qz*GF&kLMhiZlQ%HKDf(0CDR1~HKadPWGr=5Em-^Zrb2eh(H*eki zoR60?^ziJ!EySLf^Z9(rTz{Aqo?On2xfz|`1)byfXwxVqLL7BYAEzN$e=7EA$f>4D zp77m%Ah8t9lt!9bjNg=c*!CoKjlN0`;nLL~Sw;W=AOJ~3K~z-=>puV83l+O2o{z<$ zrxsN_y43OMR_2@~_QR)R95nAvNYIhWp8Y?AeC|(mK+m8%saUusr5ZD6>wrfN?iaBUu?UK#m7^wTSDx?FBooQb**Mr(*qF!TE>oX z2=}dtuSlrj)f|_QgF2kw#=?{4T(NfT+nYDPy!GYhR63h1S-=U$vDPpj+70gD_U~w@ zSgUdIO(cSWDrZlOVc#X{MDZ3>oZpAZvZ{9O#4b=ffS;&N%|f+y>zcBT9v^m=S+{P4 zyH1@nhB?SPgdRS9h|`BtrDkD@m=1@sGuG$>`bn1LWJBiU6I{B@aze+c7qq;H2Dfx0 z8s2jA8`hx19u(Az3<6L`wwr%F#M9z4=P)6NXeEm}rO5atn z1(9#z>@Kk)6<5v8mo_)UeB%|U9gd{6YXQ$&$t9YJ_^C4$XO2TUo>r{!-kP;nY`kLQ z+iTxmd&LzTy)J|vXOR0@&1-?&+_0nha6@%P!{Lg<&2BrI!&0O`0O(b#VP1S=G1V7O z_*VD^;-A~RnUCYM_`9$c`l($8sI@a-ZaVqe$q_s_xSefzEvkQP&7tc3$h#m`>aOI- zwBH;F?2fQ{6RUPH4e$oL(}mEj8>WTkl|t#vnsCVyn0b)k5|u%n!qy z^_{kE-ug1pUsaV-r$~~i=Rz%COv=!k2Wk*D)@v{Lt1vt*nyg)^8KDKjuSp&59^7i9 zvNw=hOef(Xkou5V>}vq{xdn4%t{=c15c=5`M2Su2JD($uP@zLNiWsQuEM5gC&uI#p zPPpSq`FqSFu?;}F1Hx7tn&r)Ra;>VB_CRTO1}$=8^5Fg{)Dc&N&m2N$p1Lfo$lI=k z(BD;YoG<=(#jfKV(pGW2S@>YT6xnXQf*tf5vDSe-(+;V7eG|T1mHWdLeJa+hS-a+n z^!PyfC?4!v3-E70$4Bu&hx5lItAW_I*iXKesnc1mxG<`RC)?80S09l+5ynSX@OgnvoRpDf|hU1gl5 ze9k?T9f_CWAD3NVvvAkKT_RuTMbLuzuHYV-0DjHKE1*s=C-$I@xku9&bH3%AZW1*% zop<)((<&AouXqINq)X$-0pWvP@Y&G6?T2ACu;&$Izrz*P3l}a-CIa9{ee-7aP2XMo@<+aylc&O!|`l;Nvp2eD< za}$Q$5Dwf1{v(V6WX_@vGG`GDR$WOev;>;K)`7HiRc_mh`TqlR!1Vyrbkr$(Rorn_ z-wZsdxkU54i_H-CTj1!yC;53?@(m^0IgaiE=SO&meOKwh<#C=J-*ucF`jHck!WynMyWZ@(N?ZZ+gWelg)CVB^< ze+~NlB&qAqg{`soo!Ep+WX2%@4#t_Huf*%=!dyW5Wa6D=E$PHH@h(4}f4_^o-KH;G zx{wD~@;<(6`qEuX;V$#gydu5{4TC+XC-Py0!#Xz`x@prf>Dc!*sC?J)M|R=Z`()gG z`aJSTpLiB--Veae>oCkd{?K8p1NLU&Bac)Z20Lj7*sa#tJO|=AVdf(?<(sJjxo^^d z#9zgqcd6K0CQiA{1)`ZXo{hC$MvSO+%^%ZAc3gU`y`j-MGl}5SNdX=F08eeH6wKER zZ5+yy;sITyx9r8ZPitVICRR#F%)=mqyaX|^jcnO*Fn46M|E`nRi-ddQGAlTAjAE0T zH>bPB6O~+e&dqOc=F(%wy_6T;?sDI*r3-g0oxXJXuIX{u#f^AOU%GJVaUNuY$OT$@ zEq4cXzvi_(1z11>TOZzZlYU*PLw(`#<79-J*4(rP+>b#0kw(>N({X5?S%-^1~@$lipkECJ;pGcNe?#Q^irFkJRaSWL{-16@gsv~G%nUBbX4b+N~TD!8QbW2aA#8M=-^RZ@3Zs2uTworRh< z#+oRsuY?Uw;!Q`M6v-DN0|>kfd7)8xnK%j+jPbPWkUq;7eTO!hEhn*i=|STinL((0 zC(sVqZ_jy~-Ob(GY@6SHy9>hFa^IHe3-6nb(5J_dTk&N2^pO7Xg$s`_1fe3n3IBY> zrF^wvo`rTriq6-py>u-uy8?|@tl@nXH}yIG2+S8QeS~wLJ~#FG5f|Je_33licdc2I zu%{2XbS;jbT(OY1^g-uJ{qUT_@b<6X?5aO-&neq`bWUbjbNCUm?b4;kkDtL58E-0g z>Wa>^VC8QcKK#FL`xV=^ZGX3I_!85$*bg-#;#l zurL^o{p@SFb(ZHkIBnxWsv6k+vIAF%U>UV@FY~+O#32}Im-SL1-uzkl=lIBYtNB5& z>HXAVvr*%*c`KH3E9TOOoD@uf>xFxyD?TuW>YTb@Pqzp=4lutjaW^AO--7nB`e+@u z5BQ2cXqjRdU+Y>>@kyC|l*%~39dcxjJ}4XJPc6Og_dXiM)YnQf03FB<345#%!f9zz)a&3 z90co%f}P^Mpv>7ncUrr+0_?Y`a%?_)#h?)NQRN*-8xpTv0} z)#Q}Lo>E|6d&S1Uekp2)J9@4-&T%2$0p|B1cA@|1_)}y8_N5jR9&zh%_~sT;DFEPl z&KiiXfo({=A8uXHtOdjR5S5i=3KJOw>wtT@XyRwsE?TK5$o?si+L20PmeH6;j_4@`iit;P!b=LW&2Pe*}MPDJ)ER#_owvirq4~ zj$MP^hir1+eM^PR5t;w!vrjF(YU$Do*u2HZk&iGU3m;iiiuDA)=7Tll&%__ROD95oMv!lAM(w+5YiCXQ>F`;SUxLOJ z`x4AMW45Yk*`rT(Q`6?AolX6kTIs`Qmra;EEC%XBw;j?Su!i_>78BL8pA6~=JEa#& zmN{h{g|X7u;s>@{=Vxkxc;JxuIB^ezIo!2rJ8i2 zylh1-{UD_*bfs>ItzYu!cj4y`R~|N}?w`KUKif}7;Meo1_gsF_Qsq9;bmqo0yOjJc zPrD}6o~fNUYu2pcYJLfi;Ztg-Fixj}m0;<+SKs94H_h43=*sQwbmwH?rUUO;OLRDE ziVh$CxQhXf#;>zam~jjBJ+wHpQ*hv4M@D?nNn?~r$~Q$*$P$6 zp=iKHZs8;1v;7<|xXW*ei}YK0qU_k#1PGak`vZ7L9S<6>UcpnIbV0g&fqZ}Q1>Sc7 z20kOdZ~F9$re84qq6;n(I|uTEs4(?K*-KgaDbV)wA{a9u3o~sIO$QE@i>|-wv!8wH zvrk=r)zYh^GhI&cVR1CzOMd7q!H zldcE*Mb}Tfd}0Yaz!UR8KXJlDx&IXKjk6jlyw8w%qRv`@O>?4e{`SiDwssoo7^^vk z={CfUOCR0{_Tf^;vDdv*U~^D79sFFeh-~=3Y9%4>O@wla8ntAbRacXdQpfwu6ICyHN6@znl+ayL{s1*I$19 z_17=`%*5-jpLqQ}ODA4Gk&u4k(i@ka*>z)VXU>Ry;;f0a>=UV`r821DFl&NtkFbzm z#Lz2-R#)1YlVSF~ZJr(BQo&k=C5=xvHa-sX+Sew?yaMK_c6zOOJ`}dLFnn;;oSMQO zCZkyXYI-prL%>PAg@Ab_U1}(}^x(bH=cXUc_tFzWEn;Feeko2eC7xbtnPx2!mqi<% zba~{k1RuGtkUC%G1;B=Xh+O6u`2al^e8u3p@2UHqdgQ4`9(kbPPIhwV_i*NSirsje zl3Jffo_Y$XS6$C0_N%T3IiCWj3lP5iugA(4-0yqpDZK|`e>*E(p&P!to7UWQ80Hae zN*#^!M+qF{pILf2$Wgo7(xvwh)p450MkY8jk!NSZ^n?6Ntxd=@&alvTJ$-dI@zJa! z<~U1N602ZP)|QqnwfF$24}ZMz@lg8+sMk)IfO#iUjADXcrQfqkGG_83AxK9+v%|)s z)49|&4teL**d$FJ@P|2YOL3>e`N%td5x-cf9NhzcLJ)-_VBf@p0__?PU2>JlBlkU` ze>9aVue$ zHq@{BEZg;8_yW8oe$_=+U4MZeirVq@SCOmC01w>62ax8lr|{is8N52!y+gUYlDw(g z@P{wI{PNFS{~4(#^q1d*;ICim<_`G0-y`~^_W*yQ=6=^M#7clr31qgrw(pC*@4m`5 zq@JKNa+gZnMr=dv;{jac2%RvI;(=eK-*3h&-xTF^#5!ELlhSJ`4`f*964DmitjUx3h+^+gwb?lW$m@%TBP zeC~2i7hQhA1z)(}zN_R8_!NOD&)7XAXdeXlOXc2&IPR&d0zJ?n&f{{pyIp=gABgTD zfBjV#U2xS?5B%tXJ{kLAARi8a&%vuxY}>5SzYFZiwinnx19_<@^1|=He*N`l$N=|X z@zuVvhq|ubmV%0kO0f4$Y5l$FOg?Bo4E5?QA@-utrglOt%%LvxP`dTfeyPQ`%YSTc zmwEj2A4IepPZNA!a7+6+^k7_~UIsr|^mIJuC-PH`&6-QCIZNu!*bDY%&70f+f77KE zm)->QO#P`csiXD|=Dz`UqJOzL0Pdgr4A?KY;Htp>K%WA8pG$*$l6&Ot5BS%$@_qVP zPJiI3Q2H0H{{mk93zuL2g{!W=FGR0e%>k&L=T|-Oz>oSsUAzdL$SqOV$eSpCs&@av zkhn4r=z>pbPm-5=Qar%DxJPH7OnnHwf>u453;o`{_pT@1+qaD;xb^DF>Wb=in`yVS z&_Fw5hPVM`??6K|1!E1l@DfXQjna_OYa`yAm_40>$#;(?RhUu63(lf`;MB~umh1D|O z&y05gef|3VZEX(3A}dr@+Rc}afb zNMaB6!McR}b6@xZyVwCQdW<-l2D_;<_4r+Z{ecI>4&TdBJZBhx;XZ;p)PBMBX#E0j z2J=22+$D2}yH&D2uZhB2lw-l(=QtDrF85EMe);7~KSKd7(^l%3c(s0cP^TG*4gg4< zw4d4T*iCKgHSyeI_7t{+oqiZCGbrM*c|0>A%KtLIl!GZ`wdT@3e$#~kFsjMa%)IX;_{ei&VVe92y)U!ke=<@-;G^{+_mAV1pRXi-i zp>Kq#nC~{YmLdm(pTPd*0!N*}kt=>Du(dtL@xRAAiAP=4)#wSl2_M zqW`mesmEzsAa3~)WtE%y6q+l@2lxVX@D{zyxOuMePN+-l&waUYBb>1ce#8|R8BDoZ zPNYfVVD$p}-Ylh#%P#PWq8HpLhKcM=dK4n zc|-~WN9uU>N`<~X zYTb?NKA2;mYvO}{^jQqKTK_*U?~r?3eTK687~A~dOtd6 z5?ch`hDYDm2J^lw_|EX^no6jHyMi&jXuVpw+s_iEPgpv^O8(CtKl9no0^O9D-*gk_ z{B4Ki{nz~(^1%yILf+Y@M|fAnfx-2hOrgw!dp_zVlF#Ow4#08JZzqKZZ>1j3<5?WK z5RLI26J0;>fk(nQa3{H=czio@|Kx<#FA^3Z$dgz2ph!<~BnKq&7US5X+T~J2frF=H zei5}Zr0Mq|{Hrb?w!7f+&s|O?_=41Ff8}T9Pyvr|*X_C}^Bll)jq>SY5tSFg{ie?b z_TPNwH`;k0lsL#jJTBtd#LwV7sF|l&r=OpwZ~yG|_7K@Zs>Z-GZ$f1oYe_M+g#Y(Uv=-nDIcL}LrO_7kqep(^*JyQQpC5I6!|4jp zN&9gG-I@R>Ls=%gy7Wj1ZztyIUFMhcb_@M$tQF9{qx5o3hmoht3tbtET*Ab|p7)po zDsBQgf2hRMLAk@614{ z1|P%E_d@V!oeb$JtOTmR2s1DA>#us?DPjW)>PGKIav}9F?e*CB>iq|-eLuWr%@x++ z5F+6?0=(1%JB3T^28BQ><*5oHJA(dzH}XsZ+hsK)r9}J|?1XZ)@9* zWv70IwO`x_=-Qd-u%?>Hvf3F^ZC6W1d!E6q6Bk$pTuK+CNVG{j#sBowkBDUZQ2Z#P z9`-Fu5hGyYFQ>jVfG5DB1Y<^pFRR=nyGfV1d-KDrAle?_lQIR%&5E5A8kjZzqVa z*}lDDd&F~yJrZMi>34Z%V(n52f7J1jp1PhYCEFxuKX}T9Bl7bDL@)FsVbjs4#FbQ# zn{GHcW51S!G6v$AE-k#JH;F6s0=dBlo6sK!v8(m4 z@F-C530nrAqB>|tBp>IJ(l6qwL>lMB6U4(ZDy#Kfb`LYyWkFlL)c-(y0`7eag ze+n7X!fI2xHSQ|i3i2lUM^;sBo>RZ$aCPtAy=fnK>Nwir3yXBqBUgRFP%}&r%uO`z zOkaxH@$E&jRqj3-bqU@{4zF}t6s9F-nj$Q_B9Hoa>)-*uqXyR=$+>ozdBxV+853#C zS-N!kndwmlU{mqZ=x}BU*nfzgLNY&2=JsEwBui^jpFVUfhK3q2>L%Gl0>F$?uA~6W ztz-b=<~hvynev3wyvf~c#YRX+-hw#629-9vbexyg+{E9r=J=YV^km|pt{Yb892P=d z#b?d$549H}k27B_UNn$flfh{nYe}tBcpTZ=FRmxDz_Zy-TQ^5O)6YK1*P+`jhx%zkJr zw5|H~I zo_D#*a&ckdwZ>n60HycQ;l>sRyu8BK$QLQZq@<+oqj;gyInc{JG8F&);VoO3AbKrD zAw?$kHGMw#QJ5yMKM-9mdN1rf{QzyJ1Z(z=qw9edo>;DundF!Y*x{>m72H@~QQaHn zFTC)=^eww~^{Ke@QhN{4Z-6|tp9X~9FZ6!3_p2|EGr*2dhjx_UCSFcHkPlH@b!D`& z!JNgKn30m-P-EYjeN38yHz%0m$#&;NV$KZaMT*gkfM?2dh4^ew%&u)4vP z15?rQN=EEyFCdR){)a%lt8be1U6}1`f2NYH*$rRg0C+g zS`c}bg^yxC4qvcq>(#ov@is`l3x-(iLNVRNgS;7XCyRm{tv~g^*TdL{k=J}Du+qNB zUGv_Fb*Cp`?g{Xoq9t$3;jQ%c%bi1CejDuk!Nz+0Tl{T!L!3E1OrS@FD{rOtjrtf| z`;JN`scNla${7Z*MQ3t)qSminxDcehx7c^Z-Uq2?8ijaAOHy^Wv7T+?+AUz8NTu!N z6QgNn=|wM0KTJ0#hetAY`pD)Z1FOnh0}3jy1eO*XQUN z$6(2=Ti24=cF`?}{st%vDxxR9nJ#7-Zig@^rTB1Nahtyj=l{1L40 zn&<^pjMjMh<&E?MU!!q0iTjgMzAtim5{jK3g%LSq=6nFCm3Y+DMAc0&k2gWSPnR#y zcG5}f8gx*r^qi=+AtOBX^#^d$h1CY@Z$5Vs3MYiaa$-w6fj;+%X1@1*2eu4!MOtR& z;32qyXfpEZ2joMeu@4?uvvFXI4v6sq-MS6fNts;7{x;aFhKwuC=)%Wz>vjZDBlo!j zyA5C~5`EA&Z)Dg&F}mcE0h_nnHk}$;qNA)kH-%|WU{7wE*=}-IGxFhwgL*hmM zOg?)j$Q$TFd8FIB9lwWHwmSB+V#~sYm-BxX|6I2L1GZLgS-9}2J`X%aly|BBLm?SlJ0ci#)W*ZMyX*tzGe zx89n%r{;)X!X<0*c9hR<`rxJq{9o6uiEkqEgao=>@^Un+(VV_xJDh_{KJa0iuaNq{ z1kKxK1%Ahl9XWT!y>0`lU!A^dsl+d$KzI2?)2F|DNvDs>pO{X3+L4+jKBjcH+W_Y^ zt7)Ih$G=12bGE~ z8~I!ENBPHnZ9uop4&`}d?Ipag_#NqID*9adBb;4{`lnwc)`fi!qLdek6o#GgMIrfA zg216iV98172|Gle(!578UE(m0L)dz%*dFPF;H|GSDp&D1%Fnq2U$6eJq|aP{d#&8e zKUVYSfBJ`i`lrAD`~Tzb|KXqh_~#nFgRKV+m|w|LA3X5Enzb7TY<}yH|HPX({L>%* zxbtfR5jk~p82I`DHGll4e@MwU{PFbH-lgAneSNn9ytkD8_=lze4GotJIOQk!+y1y` zz{?oa}2S{?T&!{7398z-$jpa{nJ1E{XhJ} z-~ZL$gPgAu?DYe>9ci~etd&{(8*AV0HusOd_*Z}BJN{}%Zbx{S_bb|8MVnLgUJ^ zG#}a+k=S|yfpY1D0y8FZV~C=*S|o&annhDk3=|B#u}TXYdR2)Lcu`QGgz#Ev z41)6b@t`wx)?=eMkAwYf-p zeYbP$s(-`d%nk+phM?oY2lk-ePoO~9opXabZE=A;gco;$r=ryVp7q`oh4!n%Znb|#Cawv1 za%b9y-RLiL=67L)6^A?PM~~-c`fL?ba%VVuHmK;TjAi!UHa~xScR-F#GX?dHH9;qm z^`rwnxuhpCexN}*Fv)BJMnwcf8gC$A5< zXemm9UVXKXN?+(6OXP6&9hf8apPe35o!7%s4tg6vo-aSgXnAzc=8dgA3p;KKwv!&PyFfd>nx_p9nJ?_?2$f!y3VvNBX$I4o@5=)&}pnhUmA;JY?m zn7&^<<6<5%Jq_rmkDo0*=`8aAz%ImV8?RAT%ctm;z8hv07d#d)W?^mZ4D)hx@!k<8 z2aKjbaV>M8H$3j_5SH_(T42pA@n3q=8~x7SB8-f)1Z=2VnSR9b`q2f-tL)D&2#+Pa zJ|oDjk^!}0$PMHIZvUd&p+9B5W&O)4n8=qlQkgE`%!_;ndRU0l;}#w}VILzr3ZC;+ z>}hAc2=)2e){E}^*>G(rlX${BCYhr~L#jPpZ!ghGN08R;Bc!`bHy_9i<$JmU*&S%7 zT2MSj3?n8;{mu>pOIOv>#~H6x3W_`L+wS#DalAYFvLKDe^}_g*s|#0NPA^oqqr>>GGlG+7+cq{ z3A=z+3%zruo6qk%gMY@(UZ9M4G^NG-I~&XZdgns}EBL(F+M1Xn^!^?>1LL1>b~`oH zpdr>}4(^Kg6R}i0vOpl$;Xya6R3;+M`?Rv`}6L?S;<0>S9~iGLCq4r_OP07w^1@nSKGh8i`oQ$ zUW>V@Hym{KAJL`5KEc&sP0(8{z(F0hTE|l-um5_0)J;As%M~JL2i?>AcRPOx&E3iWgC5O*WTAoVmt6C&iM3$Xui`>bws6Vv?o+CZq_Td-qybf#h174-@%v?U#an z&Uoc~!Cl`hQ=Q6UJm#stuNoAQ6uOVWK5=ckJ+ayO3Q3OAB~RCeXO7wn__I9)`0TLi z9zW5>7L?WgX;&KCpG9~7P;S={&3QLjV1WEq7FbP<}sl6 z?^m5Oio!cH8qgoTy4s!~xXbXan|HqW_8j#5iI>wR5PcF%-z`iBC}2mtzkk_ziD1rM z@eIS$nfcSBFBhL+w_8|9$gQ4#hFu}xqP{UasGgoK&TFOjxDbgw=<$cuUjHj9nkjJ3 zDCI3d|MrV7R&N6}PzCb9F4M3Fgek5U&>}cB+RmfGj~LQXQ%~e_B@D zTL@-11~V^+vcI;n-QMgj2UoJcq~7##r&?UZlllD7zDy^Bl2wrf!*V<<8Phri^W0bxahT%2!NkG?hdf} z_cv;$2lT>pU<=-vNp!w}yr6C&U>b$%Kx&#!&zX*1n3U*A`LPRO&2;!K*I{}%UWmRO z`7Y=r#NpL(%4^oy>Na9K>XAv@nGpU-HQ$Yy982wqox3obEQIRAhf|%-$)HoDC9rI) zomS8BpkLcs`Lf$R4(O4h1@>XpIc@Lm9vz*&sGiKOwF>H)Pa_6iFIQdI6@Y8WL6uFW zBi?JKKdfFve_StN`xBG=Q6t{r_WQxf$yELMgr&itdh|@DgEyaE3($*j59WY=%n@y3 zZXQ?5vbx8Svune?UYe@Af1hpdYN`*qkNRP{#llj=t**_Uom9(%&ckT>@;p7rUW<1m z{Al`u7(7;r`5qxow1|_~G7LjQcQ_u1ITqawvx7Pk9Wh+P4&)@oJ50Z7bVM7XZ(sX5 zsQ>ZWMA}i?v~k*ltxl=IHL%yxU9OvQ^`OqI06&iV_WHbF0)o#Bbx&UR`<(;KV5R#k zpg(P2o!D+K-LIZthzoXWIBfY#UZB+PZ|$}h4^L~IJ`M0SN8V2j2A!|qj%Srjh3QYI zvfb^#bYX|-{h7^IG9AtH8IO4L!AiS;?v;Ae%Z)2^^n3E+85X5biq$mYy@LdT>Bx8f z`|P0FTYR>=xZ9oQv3P_Yf4$Ma+rfQ)vd~$$uQkCmoE<(xkS`$KqW~m1WgLYD%@;an zC@2#*fp~9p`kU2YUd#7DK9cS1DVPWK$#d96JV3J_*CmyI1DmuT2Oc@EbVu4l@kn@Ny#BPY)DXU~y?yQ8{1kdugB`g-k^v(bGcxJm5dm=leJz;lk?Wwki;doz z9xhi;Y?nRUrHtxw0Ly92`Rd@5_r@NL+hX5^W$JXep07W*@#ui`C&x;t_Gkk z@DzYIF#lc)^)0^VumgAqpUuQGDCQg3G3eI=dVm*fnszK?f}SwD{F^b(>h_V0m+9sM zwi3_1cD!KA$a%tHxivw!!xoNOL5EM%gV$sRzc^ev-Q8EOcH6I>bq59XR`OqVVB2@F z*vv>N=VzSh5KyKg-lNlFV@`awG}ka4^PNk*KEIPJb(c?ZxfY!swgdWmjuRd3NJrpf z6wb=CqiVok13D6Gi0FFO{_=45baAG8Ka_^+8-JPaF2iZ8QxC)6&n@wN*y(m&Zs4}y zim8yCGyTCTxWVY#igh3#(Odzpf=6%jF%{UIi#VElG=Z%4wJ^^u(SfkQ&YHNdwlLT1 zxd!yo5&?hhj}X7u@{ofv5oawrpP<^4P=n9yXTJ67uv1z8AtQRzohd2cX9ER#-w=h}8LMo`qhsv27DnCh zC0DT=txccd)G5>1U?EHwa=x>(r&#YiORAL?>2ap>U;h)S!w2iKLIBZ_O0Wzb^*$y7 zh`{f&&aw`eY3_(SJL}kRYM9LP>JiU^1&2xcq1%1bcJt?pkE?&SgeML6)!xUwUMU%R z^CMDAy0QP`75}XA3 z>hD#jRp*m-FkySyxVqZ1o3{~4WQs`pk?SsyO^Wy;=2h+qWFoq(cssH@AOkegX<<>>NUU*`Va5_-oU1d>n+SCGe(Re=|boY)P zKYjw}T&on(lVQud5px{}gHwWLcDHu-)J93{(z4sj zZeKmBPOYbJ6wDz#_>hIe{!7T!|NZZ`R<3SeeK_Cgo2@N&z3)uDr}ztcZ^QQR-IXtQ zyTv&}=D#0`Kx?}79?8qapy7X^UNmC*>9|hUBiG*kK8BpAf3`HH)BQtjGr+3$pNY)&ZkovD-y3Uzd zF3}fs^cPBfYB-IZ(4rg^&||$b=H7!_R@5$}PgxUgO|*JC$2`RWZ;WCfQr>)r=>RUs z#2pg&I$1u2`>T#Q19d??WN%;((G zLM6~@Fc{*SL!|Z9XARST1j3OI9jJku_Msm?MFI%>n>&+uQZd3)Wjkj(#iXcn(5`_O z?M&b<)$vJ9YRun3uiJq!gO9*>;6cboz(>+U4Sed__WI|U&J!hC)J-+=7lb=24eT_| z&~2i{jZnt=+G7z9a+^rjx%E z0~F!w&@-0YkSxbX)<5IOXm#r8kNRUCIhmd+o3^Er=fODBxtiA$b-sYU(0$%sY(Pge zv5#b>qUEox?JtPQSh=w~b5{{9=(u63Cx^S=5_-A*VD~AY_sWxQJnTfgV~TjCWyBFT ziPLYYt^*#IvhCxb({B*DY_y=M%=1f8AW_M#Vb_s9O6-fFk05}0qqGXaR}t&uOplUZ zT|&GYp*tFN#yruc6Z;^)1?jQHCblU7C1G=skn*VPGBUwOxStF7Ab*RoP1>j3>U3jm z*kBF|$YemG;GZqi=wwjqlL~`}1PsT%#O}Byxj1Clokwy4Iy#-5fG|8!D2l@JC$I<; z;TR8JT5Z+oGY89no_e}`I|THxAijy4TkVB7XHe??TNFxZ^+3iy>3-MVjYlq`f?8Wp z=f*gAZ3xw?J%_w}vq+n+WMvP{=he>Px9jx7ytlOb^a)I_HQ8~*JKBhIXQ%r#CvjCk zr^Sx@ZLRhD;kl)|-+2Pi4b}lZv+oFBr!J>t2laXuqzmvd-<9sLy@o=O9*IuGYk1B) zg@9tPgdwMw%|xuKWM9HDBi#BjG`+8(kqhOwuNg^P5^fu0zM*wS*R3|iD-0hM0U-B7 zGyJ{v-A6NB)H+y4>g5M&g`4=^H&?_If2v!6vfp|6a_YUX%Jku*nN7s|O7|ZW@4(dS zsR**SuMrFl-@n9~BSV=8ychs_@yNZyY?SHSUsHNZx-z#l=8;3P3VfZAwjAJt^Pwh|JnMz>$AI{TI+2Y+03rZT5yZ)HxN7u3NS zbkX2IFW4jbp6IAC&_}R`?BP4u6Cti)eHG`4kY9kE@q+9SXwA%WW$nB{KfmEQGddwM zr~}bb|KkH$i-e?Qtw?8{7UYy`1gH}ufsG94>>PBKv48;FX&McBY?^vc z7Fr}Q+TjpQ>jR5{ppP+K$oS&s-O}fn>Lasu`_-VTTiLjZHvy&`h`wDL?sPxjT5JtQYrY=d#+6$@F*~yE-fY1o!Ef=yHAlS4E)x_HHyDeBt8p49%nqC zQVg<8&5fqyq~_NZkD7eYT7v3nJS%)pZzk*J5*~pb%>CKU;sx9TIk1x^Gthu#D(H)O zlzbqk&+*ZV&mR+4)P0?nWt1SWw~&`fSibXzui8&zyOXcroSO4VDq)tA?r+^TH_v#Iy%ZpGjvw9oztD@@QaR?a$478mtcy!mFg`tN5*u^cPt zpJ=_8M!e&bGycgk=6zG5ho97-r|i!=l+<_^woeI!N09(JBdXhTA)OU8?F;h3S#PZ4 zA>+%-`hx;?nLn6pR<-^}thVB5aRgpt=8K%ipi31F*Ci4iyxRrwt!u1|(h9xGjU$Ka zXtIndaXqBRW)$?yBH-y}zGGN;yl?}9OtrgxcrfQXJ?v5^BObwgh^9Y|*JcWWKoQEv zaL|4HCD!}S2=u8bk2U+qE%NYq>ZJyDxQOrl+bc@hn>c90@Dp2RPVLf7#cFWl5?f}9~2+PfqgF#h?~i>_Q1HR4%c^PaT9 zOM_?09%|~u47L&P==4%fS|`|P64avO=eV%FNrof-}M13f~Hcq&9# z`~Lm;#*ibwKWcEP=I_6H)_y)yGhM2CA4D&QyD*(_o*7NKr=8c_@jF~{8yK72N4$z; z>E7nbCT(x;5Dgr@fy)p#ELFCe=~Dx56Ue!1&>k-9qltJ|%XRIQH5xaJF{5rM*fZHP zwE!R4F8q8x6?YIP2{@lskPYgQzY^QEGDo)S*`E{iNO+2$tV$%AggJcEtmO0oma0<{%nV~)XJJAseJKMtR}Xe? zoPLEj5YrO*4riA;`~5?EthKv@N=Byx``N-tKZcx8!}OC*M3azH+^B`Y{hMZqfUTh&=tf}0^mJEJ}BWwgScJ2UQn0+pl?FTPaNI)e*N~soB3q7F) zP%v*{4;7|s5x{gnCwGGpD4|!=*-8DPnjsCQ&Ot}K;}o#Lg~S1Heg5%bf+%Rx3DY;u zxC8+JT#R)JqXJz_(iYZT( zIRZ+Z9`UaA9z!nXJ9W0aEWx**+{jm2=X*|acy7lXlD!#3JeZ3*oJOht2+R()Qn)_} z<+Zt^)1~yNBMV{9hP^UZucM?O`wE@BlYn}R>d-u>*Lt0iB+KN;pQ+{t_Uqc2!NX_O!I)0(9D6vDT_KO< z_fws2gO&*sfmb*1q87R$lOBCVlSw7$79h?i=FzF@oJ>(J0{)<1#5=+xSLk={9vIa_ zp_}DyXtN(wkNe99Q+-T#ODPXFd~K2GbQX+*Pl4OObJ*RN>9Gg_8>SDqW-#~nHBAhz zwKQ#Ix&sKB9HArx=e>kto?dB6b;+$z_sh$)O!be84}5oqn2(a&mh?fs{GNlp#JD5B zyz`Bb?Qi*k?uNvPIzAhr2lryg347Fg26sWeJIV{A`drNrqSt^tQXY?Ie4dz2?W384 zvj|Hv2XDJ-{RHoXPj9uA#!4O3mVOf3*n>SsB0sd?*Lp-8pZ2@^+Wko|y>Cu=G!u*w zbZvj@>D@7=gBlunES(J>R@^~-CI0K|{qga8r-#gV5qH18&^=tnIWvm}nZ+PeRO~ON zD_trWl*o<0R)c>3v^sFZJMMsg`SAWVZwgqZB~3fuxYv!dsqW*#bnXs0@oS8SJY*~L zHC8FRls@f}n&}yT0?;A&k#93(0nG1dxJ8*auosZa9GTAOCmM33anz}mtKVzfU0}5l z?}osw+Exn9N%t_h;dN%ij;V3;5Z zV&sA*s1MEKGd+_@rANsWw!8T8X`-mm2j-r|!f2J(eY!P`f&Mc2<_u@7pp$P}?|9@8 z?{UM1=v<-xMKqK11aVAV0G+#Nd69g*fe!@P5g3^QX|NCBQjZ?C59ep@Q+uQsa9g_l z9`&CsbpJP|yW(B`r;*l%0PdO}2)|tI7~qbthTEJC(+PZ5K=F?_87TbkSp{@HIA5@|0T1?d z3g40Qw3pSw>^O1&03WVNL_t)hoE3HkbqUQ2;&ua`0QCuEJ7ONxuk*#vbFID9-a&Yi z8k~jBT&CJa9s}9nrCo-2d?*v70mlWoZf#k|?4VD5r>W(^^eHn^n&83ysN=*iC^^qlsb_1 zJ5_&i8LG35KuFHz`DQghknOa!U3DWJ4j0yS<#hM-)p0e`Ii|Z~OmlIKtEanj%*FIf zU)?cX(@b}FyuUB;o#Y4 z(7Ae}pG4$9A{Zg-LRCK1CN!QhJqXR~6f$`URFWvVI;=$;4OX*PJ1`eP!>sy3--<*t zg}c8V|3g&$^JG)E@uGfterfdSqHrZqK+Z$BZmnw{q^PI|{KT_r-8Be%dS@nDhcFE^10w7*)RcqrFM)ASCa(~kVnl1-#|*How@HRu!9%lX`!vTPC&3eb z#JjDHByF-Yj_)GSN9m5euNo#^Eq!x(A;y^xB^ti0c9_~@63Il&^u%i*~n0URy^8I;%@ zGZ_v=%l=BVUn$aMsq25usc57qS_Fa%I#4)6u>N|lfGn|D{KNQUF|7q_FUR^S5=BRr}tq8sk)-Cwx? z4i&c-kLK`Ub^EQLon6C*RU7E|;t1|Y$Oe!P-PeBGuis&dIQm-(`N->EMXMXyKe7Bg zJhF+%kX!k#QqTw_iY)k{g9WOg$jBveSs)@Nov`X0yJcaSR2^EJSYl!+P~3toY&bUs zqLJ@qRxW-KD09rBUDPGt(#BpG|C!b69sTyG)%1w4f8&=L7pi|k8hWTXO1ow`lBW2N zN`s1~v)V4uVm8CLi7X1q(1MX#JMNVKQz%XjUW+@8Wf$S4Fj~MC)QXb=9YHl#$0i^G zx6Uz6rw{VI?Wn6`>6>>Cjh}K)E_Z)x)HCoKX}vm2oGMd43c7luf6u~kUrbr#6N-@H8k_R!+vw`pQr?}z-ZIUlf>cAfD2a6`S3a0cF6Hb0}G+2}XE z?N&*{?<4n$uw)P1z`4YxR?*)H1RZeqcH*F+Q#&t-4@RbpBcA5%DoAn?CV3uFj(M^> zU&}SH5!<-eUs^M^qSTb~v@4hpaHmV-{;r_dhgL`rDcHedO_Vd$4P z4udHEc1V}gf697gs=7(S@bAHeQLugf znY(@KMTdu6%jbN0AX_*`!GzkBVp6F2r9C=2|J618@9J0Q-iwW(3yWEiQ(7q|_UglN z*LQe-c)IWA3-m%4YW%RO8=$I@brsJ!U&qkeCjd{#>E^U>NrTJ>%alaSvQvkko?L

Wpb6zY|uLkgoj=1r2T*k@R5 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