From 575f213e8e8f463b62490a274ad73ab8726897ca Mon Sep 17 00:00:00 2001 From: dantudor Date: Wed, 20 Jun 2018 22:36:09 +0100 Subject: [PATCH] Squash and migrate to navexplorer/navexplorer-frontend --- .env.dist | 13 + .gitignore | 19 + assets/.gitignore | 0 assets/css/app.scss | 134 + assets/css/buttons.scss | 10 + assets/css/chart.scss | 8 + assets/css/colors.scss | 9 + assets/css/distribution.scss | 14 + assets/css/footer.scss | 43 + assets/css/form.scss | 24 + assets/css/header.scss | 70 + assets/css/open-iconic.scss | 957 +++ assets/css/search.scss | 21 + assets/css/soft-fork.scss | 25 + assets/css/table.scss | 124 + assets/css/transaction.scss | 66 + assets/js/app.js | 10 + assets/js/page/AddressIndexPage.js | 56 + assets/js/page/BlockIndexPage.js | 56 + assets/js/page/BlockViewPage.js | 19 + assets/js/page/Home.js | 12 + assets/js/page/RichListIndexPage.js | 18 + assets/js/page/TransactionIndexPage.js | 63 + assets/js/services/Distribution.js | 103 + assets/js/services/FormFilter.js | 19 + assets/js/services/NavNumberFormat.js | 30 + assets/js/services/Pagination.js | 175 + assets/js/services/TableManager.js | 84 + assets/js/services/Timezone.js | 15 + assets/js/services/TransactionLoader.js | 104 + bin/console | 39 + composer.json | 71 + composer.lock | 4021 ++++++++++++ config/bundles.php | 12 + config/deploy/exclude-files.txt | 5 + config/nginx/sites-available/www | 34 + config/packages/dev/jms_serializer.yaml | 7 + config/packages/dev/monolog.yaml | 11 + config/packages/dev/routing.yaml | 3 + config/packages/endroid_qr_code.yaml | 8 + config/packages/framework.yaml | 30 + config/packages/jms_serializer.yaml | 13 + config/packages/prod/jms_serializer.yaml | 6 + config/packages/prod/monolog.yaml | 11 + config/packages/routing.yaml | 3 + config/packages/test/framework.yaml | 4 + config/packages/test/monolog.yaml | 7 + config/packages/test/web_profiler.yaml | 6 + config/packages/twig.yaml | 4 + config/packages/twig_extensions.yaml | 10 + config/routes.yaml | 3 + config/routes/annotations.yaml | 3 + config/routes/dev/twig.yaml | 3 + config/routes/dev/web_profiler.yaml | 7 + config/routes/endroid_qr_code.yaml | 3 + config/services.yaml | 86 + docker-compose.yml | 17 + docker/nginx/Dockerfile | 21 + docker/nginx/app.conf | 23 + docker/nginx/nginx.conf | 29 + docker/php7-fpm/Dockerfile | 51 + package.json | 13 + public/fonts/open-iconic.eot | Bin 0 -> 28196 bytes public/fonts/open-iconic.otf | Bin 0 -> 20996 bytes public/fonts/open-iconic.svg | 543 ++ public/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes public/fonts/open-iconic.woff | Bin 0 -> 14984 bytes public/images/arrow-thick-right.svg | 3 + public/images/favicon-1.png | Bin 0 -> 602 bytes public/images/logo-extended.png | Bin 0 -> 28273 bytes public/images/logo-mark.png | Bin 0 -> 22161 bytes public/images/nav-cartoons-bloodbath.png | Bin 0 -> 66188 bytes public/images/nav-square.jpg | Bin 0 -> 49926 bytes public/index.php | 39 + src/Controller/AddressController.php | 98 + src/Controller/Api/SoftForkController.php | 38 + src/Controller/Api/StakeReportController.php | 84 + src/Controller/BlockController.php | 117 + src/Controller/BlockGroupController.php | 51 + src/Controller/DistributionController.php | 49 + src/Controller/HomeController.php | 78 + src/Controller/RichListController.php | 44 + src/Controller/SearchController.php | 80 + src/Controller/SoftForkController.php | 53 + src/Controller/TransactionController.php | 96 + .../AddressIndexIncompleteException.php | 13 + src/Exception/AddressInvalidException.php | 13 + src/Exception/BlockNotFoundException.php | 13 + src/Exception/DistributionException.php | 13 + src/Exception/ServerRequestException.php | 13 + .../TransactionNotFoundException.php | 13 + src/Kernel.php | 59 + src/Navcoin/Address/Api/AddressApi.php | 58 + src/Navcoin/Address/Api/StakingApi.php | 27 + src/Navcoin/Address/Api/TransactionApi.php | 68 + src/Navcoin/Address/Entity/Address.php | 227 + src/Navcoin/Address/Entity/Transaction.php | 194 + src/Navcoin/Address/Entity/Transactions.php | 19 + src/Navcoin/Address/Mapper/AddressMapper.php | 56 + .../Address/Mapper/TransactionMapper.php | 37 + .../Address/Type/AddressTransactionType.php | 15 + .../Filter/AddressTransactionTypeFilter.php | 21 + src/Navcoin/Block/Api/BlockApi.php | 83 + src/Navcoin/Block/Api/BlockGroupApi.php | 35 + src/Navcoin/Block/Api/TransactionApi.php | 81 + src/Navcoin/Block/Entity/Block.php | 370 ++ src/Navcoin/Block/Entity/BlockGroup.php | 206 + src/Navcoin/Block/Entity/BlockGroups.php | 19 + src/Navcoin/Block/Entity/BlockSignal.php | 68 + src/Navcoin/Block/Entity/BlockSignals.php | 19 + src/Navcoin/Block/Entity/Blocks.php | 19 + src/Navcoin/Block/Entity/Input.php | 103 + src/Navcoin/Block/Entity/Inputs.php | 45 + src/Navcoin/Block/Entity/Output.php | 104 + src/Navcoin/Block/Entity/Outputs.php | 45 + src/Navcoin/Block/Entity/Transaction.php | 238 + src/Navcoin/Block/Entity/Transactions.php | 19 + src/Navcoin/Block/Mapper/BlockGroupMapper.php | 35 + src/Navcoin/Block/Mapper/BlockMapper.php | 71 + .../Block/Mapper/TransactionMapper.php | 92 + .../Serializer/TransactionNormalizer.php | 35 + src/Navcoin/Client/ClientManager.php | 81 + src/Navcoin/Client/MainNetClient.php | 13 + src/Navcoin/Client/NavcoinClient.php | 50 + src/Navcoin/Client/TestNetClient.php | 13 + src/Navcoin/Common/AbstractFilter.php | 66 + src/Navcoin/Common/Entity/IteratorEntity.php | 63 + .../Common/Entity/IteratorEntityInterface.php | 13 + src/Navcoin/Common/Entity/Paginator.php | 270 + src/Navcoin/Common/Mapper/BaseMapper.php | 89 + src/Navcoin/Common/Mapper/MapperInterface.php | 14 + src/Navcoin/Common/NavcoinApi.php | 81 + src/Navcoin/Common/Network.php | 14 + .../Distribution/Api/DistributionApi.php | 34 + .../Distribution/Entity/Distribution.php | 40 + .../Entity/DistributionSegment.php | 87 + .../Mapper/DistributionMapper.php | 51 + src/Navcoin/Search/Api/SearchApi.php | 32 + src/Navcoin/Search/Entity/SearchResult.php | 53 + .../Exception/SearchResultMissException.php | 13 + src/Navcoin/SoftFork/Api/SoftForkApi.php | 31 + src/Navcoin/SoftFork/Entity/SoftFork.php | 115 + src/Navcoin/SoftFork/Entity/SoftForks.php | 20 + .../SoftFork/Mapper/SoftForkMapper.php | 42 + src/Twig/DateExtension.php | 99 + src/Twig/OrdinalExtension.php | 44 + src/Twig/StakeExtension.php | 49 + symfony.lock | 284 + .../address/components/summary.html.twig | 57 + .../address/components/transactions.html.twig | 31 + templates/address/index.html.twig | 24 + templates/address/not_found.html.twig | 21 + templates/base.html.twig | 46 + .../block/components/index_blocks.html.twig | 21 + .../block/components/view_softforks.html.twig | 21 + .../block/components/view_summary.html.twig | 97 + .../components/view_transactions.html.twig | 3 + templates/block/index.html.twig | 17 + templates/block/not_found.html.twig | 22 + templates/block/view.html.twig | 33 + .../TwigBundle/Exception/error.html.twig | 18 + .../TwigBundle/Exception/error404.html.twig | 18 + templates/components/alpha-warning.html.twig | 1 + templates/components/footer.html.twig | 16 + templates/components/header.html.twig | 9 + templates/components/nav.html.twig | 38 + .../components/testnet-warning.html.twig | 5 + templates/error/address_unavailable.html.twig | 20 + templates/error/backend_unavailable.html.twig | 23 + templates/home/components/overview.html.twig | 38 + templates/home/hud.html.twig | 43 + templates/home/index.html.twig | 21 + .../components/index_marketcap.html.twig | 0 .../components/index_summary.html.twig | 7 + templates/network/index.html.twig | 22 + templates/not_found.html.twig | 15 + .../components/top_addresses.html.twig | 38 + .../components/wealth_distribution.html.twig | 20 + templates/rich_list/index.html.twig | 24 + templates/search/components/form.html.twig | 13 + templates/search/results.html.twig | 23 + templates/search/search.html.twig | 17 + templates/soft_fork/index.html.twig | 111 + .../components/index_transactions.html.twig | 20 + .../components/view_inputs.html.twig | 38 + .../components/view_outputs.html.twig | 40 + .../components/view_summary.html.twig | 59 + templates/transaction/index.html.twig | 17 + templates/transaction/view.html.twig | 23 + webpack.config.js | 24 + yarn.lock | 5740 +++++++++++++++++ 191 files changed, 19439 insertions(+) create mode 100644 .env.dist create mode 100644 .gitignore create mode 100644 assets/.gitignore create mode 100644 assets/css/app.scss create mode 100644 assets/css/buttons.scss create mode 100644 assets/css/chart.scss create mode 100644 assets/css/colors.scss create mode 100644 assets/css/distribution.scss create mode 100644 assets/css/footer.scss create mode 100644 assets/css/form.scss create mode 100644 assets/css/header.scss create mode 100644 assets/css/open-iconic.scss create mode 100644 assets/css/search.scss create mode 100644 assets/css/soft-fork.scss create mode 100644 assets/css/table.scss create mode 100644 assets/css/transaction.scss create mode 100644 assets/js/app.js create mode 100644 assets/js/page/AddressIndexPage.js create mode 100644 assets/js/page/BlockIndexPage.js create mode 100644 assets/js/page/BlockViewPage.js create mode 100644 assets/js/page/Home.js create mode 100644 assets/js/page/RichListIndexPage.js create mode 100644 assets/js/page/TransactionIndexPage.js create mode 100644 assets/js/services/Distribution.js create mode 100644 assets/js/services/FormFilter.js create mode 100644 assets/js/services/NavNumberFormat.js create mode 100644 assets/js/services/Pagination.js create mode 100644 assets/js/services/TableManager.js create mode 100644 assets/js/services/Timezone.js create mode 100644 assets/js/services/TransactionLoader.js create mode 100755 bin/console create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/bundles.php create mode 100644 config/deploy/exclude-files.txt create mode 100644 config/nginx/sites-available/www create mode 100644 config/packages/dev/jms_serializer.yaml create mode 100644 config/packages/dev/monolog.yaml create mode 100644 config/packages/dev/routing.yaml create mode 100644 config/packages/endroid_qr_code.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/jms_serializer.yaml create mode 100644 config/packages/prod/jms_serializer.yaml create mode 100644 config/packages/prod/monolog.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/test/framework.yaml create mode 100644 config/packages/test/monolog.yaml create mode 100644 config/packages/test/web_profiler.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/twig_extensions.yaml create mode 100644 config/routes.yaml create mode 100644 config/routes/annotations.yaml create mode 100644 config/routes/dev/twig.yaml create mode 100644 config/routes/dev/web_profiler.yaml create mode 100644 config/routes/endroid_qr_code.yaml create mode 100644 config/services.yaml create mode 100644 docker-compose.yml create mode 100644 docker/nginx/Dockerfile create mode 100644 docker/nginx/app.conf create mode 100644 docker/nginx/nginx.conf create mode 100644 docker/php7-fpm/Dockerfile create mode 100644 package.json create mode 100755 public/fonts/open-iconic.eot create mode 100755 public/fonts/open-iconic.otf create mode 100755 public/fonts/open-iconic.svg create mode 100755 public/fonts/open-iconic.ttf create mode 100755 public/fonts/open-iconic.woff create mode 100755 public/images/arrow-thick-right.svg create mode 100644 public/images/favicon-1.png create mode 100644 public/images/logo-extended.png create mode 100644 public/images/logo-mark.png create mode 100644 public/images/nav-cartoons-bloodbath.png create mode 100644 public/images/nav-square.jpg create mode 100644 public/index.php create mode 100644 src/Controller/AddressController.php create mode 100644 src/Controller/Api/SoftForkController.php create mode 100644 src/Controller/Api/StakeReportController.php create mode 100644 src/Controller/BlockController.php create mode 100644 src/Controller/BlockGroupController.php create mode 100644 src/Controller/DistributionController.php create mode 100644 src/Controller/HomeController.php create mode 100644 src/Controller/RichListController.php create mode 100644 src/Controller/SearchController.php create mode 100644 src/Controller/SoftForkController.php create mode 100644 src/Controller/TransactionController.php create mode 100644 src/Exception/AddressIndexIncompleteException.php create mode 100644 src/Exception/AddressInvalidException.php create mode 100644 src/Exception/BlockNotFoundException.php create mode 100644 src/Exception/DistributionException.php create mode 100644 src/Exception/ServerRequestException.php create mode 100644 src/Exception/TransactionNotFoundException.php create mode 100644 src/Kernel.php create mode 100644 src/Navcoin/Address/Api/AddressApi.php create mode 100644 src/Navcoin/Address/Api/StakingApi.php create mode 100644 src/Navcoin/Address/Api/TransactionApi.php create mode 100644 src/Navcoin/Address/Entity/Address.php create mode 100644 src/Navcoin/Address/Entity/Transaction.php create mode 100644 src/Navcoin/Address/Entity/Transactions.php create mode 100644 src/Navcoin/Address/Mapper/AddressMapper.php create mode 100644 src/Navcoin/Address/Mapper/TransactionMapper.php create mode 100644 src/Navcoin/Address/Type/AddressTransactionType.php create mode 100644 src/Navcoin/Address/Type/Filter/AddressTransactionTypeFilter.php create mode 100644 src/Navcoin/Block/Api/BlockApi.php create mode 100644 src/Navcoin/Block/Api/BlockGroupApi.php create mode 100644 src/Navcoin/Block/Api/TransactionApi.php create mode 100644 src/Navcoin/Block/Entity/Block.php create mode 100644 src/Navcoin/Block/Entity/BlockGroup.php create mode 100644 src/Navcoin/Block/Entity/BlockGroups.php create mode 100644 src/Navcoin/Block/Entity/BlockSignal.php create mode 100644 src/Navcoin/Block/Entity/BlockSignals.php create mode 100644 src/Navcoin/Block/Entity/Blocks.php create mode 100644 src/Navcoin/Block/Entity/Input.php create mode 100644 src/Navcoin/Block/Entity/Inputs.php create mode 100644 src/Navcoin/Block/Entity/Output.php create mode 100644 src/Navcoin/Block/Entity/Outputs.php create mode 100644 src/Navcoin/Block/Entity/Transaction.php create mode 100644 src/Navcoin/Block/Entity/Transactions.php create mode 100644 src/Navcoin/Block/Mapper/BlockGroupMapper.php create mode 100644 src/Navcoin/Block/Mapper/BlockMapper.php create mode 100644 src/Navcoin/Block/Mapper/TransactionMapper.php create mode 100644 src/Navcoin/Block/Serializer/TransactionNormalizer.php create mode 100644 src/Navcoin/Client/ClientManager.php create mode 100644 src/Navcoin/Client/MainNetClient.php create mode 100644 src/Navcoin/Client/NavcoinClient.php create mode 100644 src/Navcoin/Client/TestNetClient.php create mode 100644 src/Navcoin/Common/AbstractFilter.php create mode 100644 src/Navcoin/Common/Entity/IteratorEntity.php create mode 100644 src/Navcoin/Common/Entity/IteratorEntityInterface.php create mode 100644 src/Navcoin/Common/Entity/Paginator.php create mode 100644 src/Navcoin/Common/Mapper/BaseMapper.php create mode 100644 src/Navcoin/Common/Mapper/MapperInterface.php create mode 100644 src/Navcoin/Common/NavcoinApi.php create mode 100644 src/Navcoin/Common/Network.php create mode 100644 src/Navcoin/Distribution/Api/DistributionApi.php create mode 100644 src/Navcoin/Distribution/Entity/Distribution.php create mode 100644 src/Navcoin/Distribution/Entity/DistributionSegment.php create mode 100644 src/Navcoin/Distribution/Mapper/DistributionMapper.php create mode 100644 src/Navcoin/Search/Api/SearchApi.php create mode 100644 src/Navcoin/Search/Entity/SearchResult.php create mode 100644 src/Navcoin/Search/Exception/SearchResultMissException.php create mode 100644 src/Navcoin/SoftFork/Api/SoftForkApi.php create mode 100644 src/Navcoin/SoftFork/Entity/SoftFork.php create mode 100644 src/Navcoin/SoftFork/Entity/SoftForks.php create mode 100644 src/Navcoin/SoftFork/Mapper/SoftForkMapper.php create mode 100644 src/Twig/DateExtension.php create mode 100644 src/Twig/OrdinalExtension.php create mode 100644 src/Twig/StakeExtension.php create mode 100644 symfony.lock create mode 100644 templates/address/components/summary.html.twig create mode 100644 templates/address/components/transactions.html.twig create mode 100644 templates/address/index.html.twig create mode 100644 templates/address/not_found.html.twig create mode 100644 templates/base.html.twig create mode 100644 templates/block/components/index_blocks.html.twig create mode 100644 templates/block/components/view_softforks.html.twig create mode 100644 templates/block/components/view_summary.html.twig create mode 100644 templates/block/components/view_transactions.html.twig create mode 100644 templates/block/index.html.twig create mode 100644 templates/block/not_found.html.twig create mode 100644 templates/block/view.html.twig create mode 100644 templates/bundles/TwigBundle/Exception/error.html.twig create mode 100644 templates/bundles/TwigBundle/Exception/error404.html.twig create mode 100644 templates/components/alpha-warning.html.twig create mode 100644 templates/components/footer.html.twig create mode 100644 templates/components/header.html.twig create mode 100644 templates/components/nav.html.twig create mode 100644 templates/components/testnet-warning.html.twig create mode 100644 templates/error/address_unavailable.html.twig create mode 100644 templates/error/backend_unavailable.html.twig create mode 100644 templates/home/components/overview.html.twig create mode 100644 templates/home/hud.html.twig create mode 100644 templates/home/index.html.twig create mode 100644 templates/network/components/index_marketcap.html.twig create mode 100644 templates/network/components/index_summary.html.twig create mode 100644 templates/network/index.html.twig create mode 100644 templates/not_found.html.twig create mode 100644 templates/rich_list/components/top_addresses.html.twig create mode 100644 templates/rich_list/components/wealth_distribution.html.twig create mode 100644 templates/rich_list/index.html.twig create mode 100644 templates/search/components/form.html.twig create mode 100644 templates/search/results.html.twig create mode 100644 templates/search/search.html.twig create mode 100644 templates/soft_fork/index.html.twig create mode 100644 templates/transaction/components/index_transactions.html.twig create mode 100644 templates/transaction/components/view_inputs.html.twig create mode 100644 templates/transaction/components/view_outputs.html.twig create mode 100644 templates/transaction/components/view_summary.html.twig create mode 100644 templates/transaction/index.html.twig create mode 100644 templates/transaction/view.html.twig create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.env.dist b/.env.dist new file mode 100644 index 0000000..2766b0e --- /dev/null +++ b/.env.dist @@ -0,0 +1,13 @@ +# This file is a "template" of which env vars need to be defined for your application +# Copy this file to .env file for development, create environment variables when deploying to production +# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration + +###> symfony/framework-bundle ### +APP_ENV=prod +APP_SECRET=NOT_A_SECRET +#TRUSTED_PROXIES=127.0.0.1,127.0.0.2 +#TRUSTED_HOSTS=localhost,example.com +###< symfony/framework-bundle ### + +BACKEND_MAINNET=http://backend.navexplorer.com +BACKEND_TESTNET=http://backend.navexplorer.com:8080 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..48718bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +.idea + +###> symfony/framework-bundle ### +.env +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> symfony/web-server-bundle ### +.web-server-pid +###< symfony/web-server-bundle ### + +###> symfony/webpack-encore-pack ### +/node_modules/ +/public/build/ +###< symfony/webpack-encore-pack ### + +docker/logs/nginx/* \ No newline at end of file diff --git a/assets/.gitignore b/assets/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/assets/css/app.scss b/assets/css/app.scss new file mode 100644 index 0000000..c8ffb55 --- /dev/null +++ b/assets/css/app.scss @@ -0,0 +1,134 @@ +@import 'open-iconic'; + +@import 'colors'; +@import 'buttons'; +@import 'table'; +@import 'header'; +@import 'footer'; +@import 'transaction'; +@import 'form'; +@import 'chart'; +@import 'search'; +@import 'soft-fork'; +@import 'distribution'; + +.body { + padding-bottom: 50px; +} + +a { + color: $purple; + span { + position: absolute; + top: -9999px; + left: -9999px; + } +} + +a.disabled { + pointer-events: none; + opacity: 0.5; + color: $grey; +} + +a:hover { + color: $blue; + text-decoration: none; +} + +p { + margin-bottom: 0.5rem; +} + +.badge { + font-weight: normal; +} + +small { + color: $grey; +} + +.container-fluid { + max-width: 1200px; +} + + +.badge-transaction-count { + margin-right: 1rem; +} + +.badge-staking { + margin-right: 1rem; +} + +.block-summary, +.transaction-summary { + margin-bottom: 1.25rem; +} + +.block-links { + padding: 0.5rem 0.25rem; + vertical-align: top; + border-top: 1px solid #DFD7CA; +} + +.block-transactions { + margin-bottom: 28px; + + + ul { + list-style: none; + padding: initial; + } + + li { + clear: both; + overflow: hidden; + } +} + + + +.card-list { + margin-bottom: 2rem; + + .card-header { + font-size: 1.25rem; + } + + .card-body { + padding: 0.5rem; + } + + .list-group-title { + font-weight: bold; + } + + .list-group-item { + padding: 0.25rem 1.25rem; + } +} + +.break-word { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + /* These are technically the same, but use both */ + overflow-wrap: break-word; + word-wrap: break-word; + + -ms-word-break: break-all; + /* This is the dangerous one in WebKit, as it breaks things wherever */ + word-break: break-all; + /* Instead use this non-standard one: */ + word-break: break-word; + + /* Adds a hyphen where the word breaks, if supported (No Blink) */ + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: none; + hyphens: none; + +} \ No newline at end of file diff --git a/assets/css/buttons.scss b/assets/css/buttons.scss new file mode 100644 index 0000000..fc2bf61 --- /dev/null +++ b/assets/css/buttons.scss @@ -0,0 +1,10 @@ +.btn-info { + color: #fff; + background-color: $purple; + border-color: $purple; +} + +.btn-info:hover { + background-color: $dark-purple; + border-color: $dark-purple; +} \ No newline at end of file diff --git a/assets/css/chart.scss b/assets/css/chart.scss new file mode 100644 index 0000000..1c9bdb7 --- /dev/null +++ b/assets/css/chart.scss @@ -0,0 +1,8 @@ +svg { + .legend { + font-size: 0.875rem; + } + rect { + stroke-width: 2; + } +} \ No newline at end of file diff --git a/assets/css/colors.scss b/assets/css/colors.scss new file mode 100644 index 0000000..cfb844f --- /dev/null +++ b/assets/css/colors.scss @@ -0,0 +1,9 @@ +$purple: #7d59b5; +$dark-purple: #4d3474; +$blue: hsl(199, 81%, 59%); +$grey: grey; +$green: green; +$light-grey: #f9f9f9; +$white: #ffffff; +$off-white: #cccccc; +$yellow: #f0c067 \ No newline at end of file diff --git a/assets/css/distribution.scss b/assets/css/distribution.scss new file mode 100644 index 0000000..9c7849b --- /dev/null +++ b/assets/css/distribution.scss @@ -0,0 +1,14 @@ +.distribution { + svg { + margin-bottom: 1rem; + } + + table { + .box { + width: 1rem; + height: 1rem; + display: inline-block; + border-radius: 0.25rem; + } + } +} \ No newline at end of file diff --git a/assets/css/footer.scss b/assets/css/footer.scss new file mode 100644 index 0000000..46910e4 --- /dev/null +++ b/assets/css/footer.scss @@ -0,0 +1,43 @@ +footer { + position: fixed; + //height: 20px; + bottom: 0; + width: 100%; + border-top: $purple 5px solid; + background-color: $dark-purple; + margin-top: 2rem; + padding: 0.25rem; + color: $off-white; + + .network { + float:left; + + ul { + list-style: none; + padding: 0; + margin: 0; + + li { + display: inline-block; + padding-right: 0.2rem; + + a { + color: $grey; + text-transform: capitalize; + } + a:hover { + color: $white; + } + a.active { + pointer-events: none; + color: $white; + } + + } + + li:not(:first-child):before { + content: "| "; + } + } + } +} \ No newline at end of file diff --git a/assets/css/form.scss b/assets/css/form.scss new file mode 100644 index 0000000..ad65968 --- /dev/null +++ b/assets/css/form.scss @@ -0,0 +1,24 @@ +.form-filter { + float: right; + margin-top: 0.5rem; + + span { + font-size: 1rem; + } + + label { + padding-left: 0.5rem; + } + + input { + margin-left: 0.25rem; + } +} + +.form-filter-disabled { + pointer-events: none; + + label, input { + opacity: 0.5; + } +} \ No newline at end of file diff --git a/assets/css/header.scss b/assets/css/header.scss new file mode 100644 index 0000000..85b5f03 --- /dev/null +++ b/assets/css/header.scss @@ -0,0 +1,70 @@ +header { + margin-bottom: 1.25rem; + background-color: $light-grey; + border-bottom: $purple 5px solid; + + @media (max-width: 575px) { + a { + display:none; + } + } + + a, a:hover { + color: $blue; + } + + h1 { + font-size: 4.4em; + margin-bottom: 12px; + padding: 0.5rem; + + @media (min-width: 576px) { + padding: 14px 0 2px 210px; + + span { + display: none; + } + + background: url("/images/logo-extended.png") 0 100% no-repeat; + background-size: 200px 62px; + } + } + + .navbar-dark .navbar-nav .nav-link { + color: #FFF; + text-shadow: 0 0.075em 0.075em rgba(0,0,0,.5); + font-size: 1.1em; + line-height: 22px; + font-weight: 100; + text-transform: inherit; + padding: 0.5rem 1.8rem 0.5rem 0; + } + + .bg-nav { + background-color: $dark-purple; + } +} + + +.alpha-warning { + position: sticky; + top: 0; + z-index: 1000; + font-size: 14px; + background-color: #dc3545; + color: $white; + padding: 0.5rem; + text-align: center; +} + + +.testnet-warning { + position: sticky; + top: 0; + z-index: 1000; + font-size: 14px; + background-color: $blue; + color: $white; + padding: 0.5rem; + text-align: center; +} \ No newline at end of file diff --git a/assets/css/open-iconic.scss b/assets/css/open-iconic.scss new file mode 100644 index 0000000..993cf84 --- /dev/null +++ b/assets/css/open-iconic.scss @@ -0,0 +1,957 @@ +/* Bootstrap */ + +/* Override Bootstrap default variable */ +$icon-font-path: '../fonts/' !default; + +@font-face { + font-family: 'Icons'; + src: url('#{$icon-font-path}open-iconic.eot'); + src: url('#{$icon-font-path}open-iconic.eot?#iconic-sm') format('embedded-opentype'), url('#{$icon-font-path}open-iconic.woff') format('woff'), url('#{$icon-font-path}open-iconic.ttf') format('truetype'), url('#{$icon-font-path}open-iconic.svg#iconic-sm') format('svg'); + font-weight: normal; + font-style: normal; +} + +// Catchall baseclass +.oi { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Icons'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + + &:empty:before { + width: 1em; + text-align: center; + box-sizing: content-box; + } + + &.oi-align-center:before { + text-align: center; + } + + &.oi-align-left:before { + text-align: left; + } + + &.oi-align-right:before { + text-align: right; + } + + + &.oi-flip-horizontal:before { + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); + } + + &.oi-flip-vertical:before { + -webkit-transform: scale(1, -1); + -ms-transform: scale(-1, 1); + transform: scale(1, -1); + } + + &.oi-flip-horizontal-vertical:before { + -webkit-transform: scale(-1, -1); + -ms-transform: scale(-1, 1); + transform: scale(-1, -1); + } +} + + + +.oi-account-login:before { + content:'\e000'; +} + +.oi-account-logout:before { + content:'\e001'; +} + +.oi-action-redo:before { + content:'\e002'; +} + +.oi-action-undo:before { + content:'\e003'; +} + +.oi-align-center:before { + content:'\e004'; +} + +.oi-align-left:before { + content:'\e005'; +} + +.oi-align-right:before { + content:'\e006'; +} + +.oi-aperture:before { + content:'\e007'; +} + +.oi-arrow-bottom:before { + content:'\e008'; +} + +.oi-arrow-circle-bottom:before { + content:'\e009'; +} + +.oi-arrow-circle-left:before { + content:'\e00a'; +} + +.oi-arrow-circle-right:before { + content:'\e00b'; +} + +.oi-arrow-circle-top:before { + content:'\e00c'; +} + +.oi-arrow-left:before { + content:'\e00d'; +} + +.oi-arrow-right:before { + content:'\e00e'; +} + +.oi-arrow-thick-bottom:before { + content:'\e00f'; +} + +.oi-arrow-thick-left:before { + content:'\e010'; +} + +.oi-arrow-thick-right:before { + content:'\e011'; +} + +.oi-arrow-thick-top:before { + content:'\e012'; +} + +.oi-arrow-top:before { + content:'\e013'; +} + +.oi-audio-spectrum:before { + content:'\e014'; +} + +.oi-audio:before { + content:'\e015'; +} + +.oi-badge:before { + content:'\e016'; +} + +.oi-ban:before { + content:'\e017'; +} + +.oi-bar-chart:before { + content:'\e018'; +} + +.oi-basket:before { + content:'\e019'; +} + +.oi-battery-empty:before { + content:'\e01a'; +} + +.oi-battery-full:before { + content:'\e01b'; +} + +.oi-beaker:before { + content:'\e01c'; +} + +.oi-bell:before { + content:'\e01d'; +} + +.oi-bluetooth:before { + content:'\e01e'; +} + +.oi-bold:before { + content:'\e01f'; +} + +.oi-bolt:before { + content:'\e020'; +} + +.oi-book:before { + content:'\e021'; +} + +.oi-bookmark:before { + content:'\e022'; +} + +.oi-box:before { + content:'\e023'; +} + +.oi-briefcase:before { + content:'\e024'; +} + +.oi-british-pound:before { + content:'\e025'; +} + +.oi-browser:before { + content:'\e026'; +} + +.oi-brush:before { + content:'\e027'; +} + +.oi-bug:before { + content:'\e028'; +} + +.oi-bullhorn:before { + content:'\e029'; +} + +.oi-calculator:before { + content:'\e02a'; +} + +.oi-calendar:before { + content:'\e02b'; +} + +.oi-camera-slr:before { + content:'\e02c'; +} + +.oi-caret-bottom:before { + content:'\e02d'; +} + +.oi-caret-left:before { + content:'\e02e'; +} + +.oi-caret-right:before { + content:'\e02f'; +} + +.oi-caret-top:before { + content:'\e030'; +} + +.oi-cart:before { + content:'\e031'; +} + +.oi-chat:before { + content:'\e032'; +} + +.oi-check:before { + content:'\e033'; +} + +.oi-chevron-bottom:before { + content:'\e034'; +} + +.oi-chevron-left:before { + content:'\e035'; +} + +.oi-chevron-right:before { + content:'\e036'; +} + +.oi-chevron-top:before { + content:'\e037'; +} + +.oi-circle-check:before { + content:'\e038'; +} + +.oi-circle-x:before { + content:'\e039'; +} + +.oi-clipboard:before { + content:'\e03a'; +} + +.oi-clock:before { + content:'\e03b'; +} + +.oi-cloud-download:before { + content:'\e03c'; +} + +.oi-cloud-upload:before { + content:'\e03d'; +} + +.oi-cloud:before { + content:'\e03e'; +} + +.oi-cloudy:before { + content:'\e03f'; +} + +.oi-code:before { + content:'\e040'; +} + +.oi-cog:before { + content:'\e041'; +} + +.oi-collapse-down:before { + content:'\e042'; +} + +.oi-collapse-left:before { + content:'\e043'; +} + +.oi-collapse-right:before { + content:'\e044'; +} + +.oi-collapse-up:before { + content:'\e045'; +} + +.oi-command:before { + content:'\e046'; +} + +.oi-comment-square:before { + content:'\e047'; +} + +.oi-compass:before { + content:'\e048'; +} + +.oi-contrast:before { + content:'\e049'; +} + +.oi-copywriting:before { + content:'\e04a'; +} + +.oi-credit-card:before { + content:'\e04b'; +} + +.oi-crop:before { + content:'\e04c'; +} + +.oi-dashboard:before { + content:'\e04d'; +} + +.oi-data-transfer-download:before { + content:'\e04e'; +} + +.oi-data-transfer-upload:before { + content:'\e04f'; +} + +.oi-delete:before { + content:'\e050'; +} + +.oi-dial:before { + content:'\e051'; +} + +.oi-document:before { + content:'\e052'; +} + +.oi-dollar:before { + content:'\e053'; +} + +.oi-double-quote-sans-left:before { + content:'\e054'; +} + +.oi-double-quote-sans-right:before { + content:'\e055'; +} + +.oi-double-quote-serif-left:before { + content:'\e056'; +} + +.oi-double-quote-serif-right:before { + content:'\e057'; +} + +.oi-droplet:before { + content:'\e058'; +} + +.oi-eject:before { + content:'\e059'; +} + +.oi-elevator:before { + content:'\e05a'; +} + +.oi-ellipses:before { + content:'\e05b'; +} + +.oi-envelope-closed:before { + content:'\e05c'; +} + +.oi-envelope-open:before { + content:'\e05d'; +} + +.oi-euro:before { + content:'\e05e'; +} + +.oi-excerpt:before { + content:'\e05f'; +} + +.oi-expand-down:before { + content:'\e060'; +} + +.oi-expand-left:before { + content:'\e061'; +} + +.oi-expand-right:before { + content:'\e062'; +} + +.oi-expand-up:before { + content:'\e063'; +} + +.oi-external-link:before { + content:'\e064'; +} + +.oi-eye:before { + content:'\e065'; +} + +.oi-eyedropper:before { + content:'\e066'; +} + +.oi-file:before { + content:'\e067'; +} + +.oi-fire:before { + content:'\e068'; +} + +.oi-flag:before { + content:'\e069'; +} + +.oi-flash:before { + content:'\e06a'; +} + +.oi-folder:before { + content:'\e06b'; +} + +.oi-fork:before { + content:'\e06c'; +} + +.oi-fullscreen-enter:before { + content:'\e06d'; +} + +.oi-fullscreen-exit:before { + content:'\e06e'; +} + +.oi-globe:before { + content:'\e06f'; +} + +.oi-graph:before { + content:'\e070'; +} + +.oi-grid-four-up:before { + content:'\e071'; +} + +.oi-grid-three-up:before { + content:'\e072'; +} + +.oi-grid-two-up:before { + content:'\e073'; +} + +.oi-hard-drive:before { + content:'\e074'; +} + +.oi-header:before { + content:'\e075'; +} + +.oi-headphones:before { + content:'\e076'; +} + +.oi-heart:before { + content:'\e077'; +} + +.oi-home:before { + content:'\e078'; +} + +.oi-image:before { + content:'\e079'; +} + +.oi-inbox:before { + content:'\e07a'; +} + +.oi-infinity:before { + content:'\e07b'; +} + +.oi-info:before { + content:'\e07c'; +} + +.oi-italic:before { + content:'\e07d'; +} + +.oi-justify-center:before { + content:'\e07e'; +} + +.oi-justify-left:before { + content:'\e07f'; +} + +.oi-justify-right:before { + content:'\e080'; +} + +.oi-key:before { + content:'\e081'; +} + +.oi-laptop:before { + content:'\e082'; +} + +.oi-layers:before { + content:'\e083'; +} + +.oi-lightbulb:before { + content:'\e084'; +} + +.oi-link-broken:before { + content:'\e085'; +} + +.oi-link-intact:before { + content:'\e086'; +} + +.oi-list-rich:before { + content:'\e087'; +} + +.oi-list:before { + content:'\e088'; +} + +.oi-location:before { + content:'\e089'; +} + +.oi-lock-locked:before { + content:'\e08a'; +} + +.oi-lock-unlocked:before { + content:'\e08b'; +} + +.oi-loop-circular:before { + content:'\e08c'; +} + +.oi-loop-square:before { + content:'\e08d'; +} + +.oi-loop:before { + content:'\e08e'; +} + +.oi-magnifying-glass:before { + content:'\e08f'; +} + +.oi-map-marker:before { + content:'\e090'; +} + +.oi-map:before { + content:'\e091'; +} + +.oi-media-pause:before { + content:'\e092'; +} + +.oi-media-play:before { + content:'\e093'; +} + +.oi-media-record:before { + content:'\e094'; +} + +.oi-media-skip-backward:before { + content:'\e095'; +} + +.oi-media-skip-forward:before { + content:'\e096'; +} + +.oi-media-step-backward:before { + content:'\e097'; +} + +.oi-media-step-forward:before { + content:'\e098'; +} + +.oi-media-stop:before { + content:'\e099'; +} + +.oi-medical-cross:before { + content:'\e09a'; +} + +.oi-menu:before { + content:'\e09b'; +} + +.oi-microphone:before { + content:'\e09c'; +} + +.oi-minus:before { + content:'\e09d'; +} + +.oi-monitor:before { + content:'\e09e'; +} + +.oi-moon:before { + content:'\e09f'; +} + +.oi-move:before { + content:'\e0a0'; +} + +.oi-musical-note:before { + content:'\e0a1'; +} + +.oi-paperclip:before { + content:'\e0a2'; +} + +.oi-pencil:before { + content:'\e0a3'; +} + +.oi-people:before { + content:'\e0a4'; +} + +.oi-person:before { + content:'\e0a5'; +} + +.oi-phone:before { + content:'\e0a6'; +} + +.oi-pie-chart:before { + content:'\e0a7'; +} + +.oi-pin:before { + content:'\e0a8'; +} + +.oi-play-circle:before { + content:'\e0a9'; +} + +.oi-plus:before { + content:'\e0aa'; +} + +.oi-power-standby:before { + content:'\e0ab'; +} + +.oi-print:before { + content:'\e0ac'; +} + +.oi-project:before { + content:'\e0ad'; +} + +.oi-pulse:before { + content:'\e0ae'; +} + +.oi-puzzle-piece:before { + content:'\e0af'; +} + +.oi-question-mark:before { + content:'\e0b0'; +} + +.oi-rain:before { + content:'\e0b1'; +} + +.oi-random:before { + content:'\e0b2'; +} + +.oi-reload:before { + content:'\e0b3'; +} + +.oi-resize-both:before { + content:'\e0b4'; +} + +.oi-resize-height:before { + content:'\e0b5'; +} + +.oi-resize-width:before { + content:'\e0b6'; +} + +.oi-rss-alt:before { + content:'\e0b7'; +} + +.oi-rss:before { + content:'\e0b8'; +} + +.oi-script:before { + content:'\e0b9'; +} + +.oi-share-boxed:before { + content:'\e0ba'; +} + +.oi-share:before { + content:'\e0bb'; +} + +.oi-shield:before { + content:'\e0bc'; +} + +.oi-signal:before { + content:'\e0bd'; +} + +.oi-signpost:before { + content:'\e0be'; +} + +.oi-sort-ascending:before { + content:'\e0bf'; +} + +.oi-sort-descending:before { + content:'\e0c0'; +} + +.oi-spreadsheet:before { + content:'\e0c1'; +} + +.oi-star:before { + content:'\e0c2'; +} + +.oi-sun:before { + content:'\e0c3'; +} + +.oi-tablet:before { + content:'\e0c4'; +} + +.oi-tag:before { + content:'\e0c5'; +} + +.oi-tags:before { + content:'\e0c6'; +} + +.oi-target:before { + content:'\e0c7'; +} + +.oi-task:before { + content:'\e0c8'; +} + +.oi-terminal:before { + content:'\e0c9'; +} + +.oi-text:before { + content:'\e0ca'; +} + +.oi-thumb-down:before { + content:'\e0cb'; +} + +.oi-thumb-up:before { + content:'\e0cc'; +} + +.oi-timer:before { + content:'\e0cd'; +} + +.oi-transfer:before { + content:'\e0ce'; +} + +.oi-trash:before { + content:'\e0cf'; +} + +.oi-underline:before { + content:'\e0d0'; +} + +.oi-vertical-align-bottom:before { + content:'\e0d1'; +} + +.oi-vertical-align-center:before { + content:'\e0d2'; +} + +.oi-vertical-align-top:before { + content:'\e0d3'; +} + +.oi-video:before { + content:'\e0d4'; +} + +.oi-volume-high:before { + content:'\e0d5'; +} + +.oi-volume-low:before { + content:'\e0d6'; +} + +.oi-volume-off:before { + content:'\e0d7'; +} + +.oi-warning:before { + content:'\e0d8'; +} + +.oi-wifi:before { + content:'\e0d9'; +} + +.oi-wrench:before { + content:'\e0da'; +} + +.oi-x:before { + content:'\e0db'; +} + +.oi-yen:before { + content:'\e0dc'; +} + +.oi-zoom-in:before { + content:'\e0dd'; +} + +.oi-zoom-out:before { + content:'\e0de'; +} diff --git a/assets/css/search.scss b/assets/css/search.scss new file mode 100644 index 0000000..4a77684 --- /dev/null +++ b/assets/css/search.scss @@ -0,0 +1,21 @@ +.search-form { + margin-bottom: 2rem; + + input { + float: left; + margin: 0 0.75rem 0.75rem 0; + width: 80%; + } + + button { + min-width: 18%; + } +} + +@media only screen and (max-width: 670px) { + .search-form { + input { + width: 75%; + } + } +} \ No newline at end of file diff --git a/assets/css/soft-fork.scss b/assets/css/soft-fork.scss new file mode 100644 index 0000000..2792336 --- /dev/null +++ b/assets/css/soft-fork.scss @@ -0,0 +1,25 @@ +.page-soft-forks-index { + .card { + margin-bottom: 1.25rem; + } + + .progressbar-position { + color: #DFD7CA; + background-color: #DFD7CA; + border-right: 2px solid $grey; + } + + .progressbar-signalled { + color: $purple; + background-color: $purple; + } + + .threshold { + position: absolute; + margin-left: 75%; + height: 2rem; + margin-top: -0.5rem; + border: none; + border-left: $grey 2px dashed; + } +} \ No newline at end of file diff --git a/assets/css/table.scss b/assets/css/table.scss new file mode 100644 index 0000000..e606755 --- /dev/null +++ b/assets/css/table.scss @@ -0,0 +1,124 @@ +.table { + margin-bottom: 0; + + th, + td { + padding: 0.5rem 0.25rem; + } + + badge { + margin-left: 0.25rem; + } +} + +.table-striped { + thead { + th { + border-bottom: 0; + } + } + + tbody { + tr:nth-of-type(odd) { + background-color: $light-grey; + } + } +} + +@media only screen and (max-width: 576px) { + .table-adaptive { + + .table-pagination { + .float-right { + float: none !important; + } + } + + margin-bottom: 1.75rem; + + thead, tbody, th, td, tr { + display: block; + } + + thead { + tr { + position: absolute; + top: -9999px; + left: -9999px; + } + } + + tbody { + tr { + border: 1px solid #ccc; + border-bottom: 0; + } + + th { + font-weight: normal; + } + + td { + /* Behave like a "row" */ + border: none; + border-bottom: 1px solid #eee; + position: relative; + padding: 0.25rem 1rem 0.25rem 35%; + text-align: right !important; + } + + td:before { + /* Now like a table header */ + position: absolute; + /* Top/left values mimic padding */ + top: 0.25rem; + left: 0.25rem; + //width: 45%; + padding-right: 10px; + white-space: nowrap; + } + } + + td[data-role="address"]:before { content: "Address"; } + td[data-role="amount"]:before { content: "Amount"; } + td[data-role="balance"]:before { content: "Balance"; } + td[data-role="block"]:before { content: "Block"; } + td[data-role="blocks"]:before { content: "Blocks"; } + td[data-role="date/time"]:before { content: "Date/Time"; } + td[data-role="hourlyPeriod"]:before { content: "Period"; } + td[data-role="hash"]:before { content: "Hash"; } + td[data-role="height"]:before { content: "Height"; } + td[data-role="index"]:before { content: "Index"; } + td[data-role="lastBlock"]:before { content: "Last Block"; } + td[data-role="percentageOfCoins"]:before { content: "% of Coins"; } + td[data-role="previousOutput"]:before { content: "Previous Output"; } + td[data-role="stakedBy"]:before { content: "Staked By"; } + td[data-role="stakeRewards"]:before { content: "Stake Rewards"; } + td[data-role="rank"]:before { content: "Rank"; } + td[data-role="redeemedIn"]:before { content: "Redeemed In"; } + td[data-role="stake"]:before { content: "Stake"; } + td[data-role="navSpent"]:before { content: "NAV Spent"; } + td[data-role="transactions"]:before { content: "Transactions"; } + } +} + + +.table-pagination { + ul { + list-style: none; + padding: 0; + + li { + display: inline-block; + padding-right: 0.2rem; + + a { + text-transform: capitalize; + } + } + + li:not(:first-child):before { + content: "| "; + } + } +} \ No newline at end of file diff --git a/assets/css/transaction.scss b/assets/css/transaction.scss new file mode 100644 index 0000000..4ca0525 --- /dev/null +++ b/assets/css/transaction.scss @@ -0,0 +1,66 @@ +.transaction-list { + .card { + margin-bottom: 1.25rem; + + .card-header { + background-color: #eee; + + small { + color: inherit; + } + } + + .card-body { + padding: 0; + + .row { + + @media (max-width: 767px) { + span.caption { + font-size: 1rem; + } + .inputs { + border-bottom: 1px solid rgba(223,215,202,0.75); + padding-bottom: 0.75rem; + margin-bottom: 0.75rem; + } + } + @media (min-width: 768px) { + background: url("/images/arrow-thick-right.svg") 50% 50% no-repeat; + background-size: 28px; + + span.caption { + display: none; + } + + .inputs { + padding-right: 2rem; + } + + .outputs { + padding-left: 2rem; + } + } + + padding: 0.75rem 1.25rem; + + ul { + list-style: none; + padding: 0; + margin: 0; + + li { + overflow: hidden; + + .address { + max-width: 65%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/assets/js/app.js b/assets/js/app.js new file mode 100644 index 0000000..b416dd7 --- /dev/null +++ b/assets/js/app.js @@ -0,0 +1,10 @@ +require('../css/app.scss'); + +require('./services/Timezone'); + +require('./page/AddressIndexPage'); +require('./page/BlockIndexPage'); +require('./page/BlockViewPage'); +require('./page/Home'); +require('./page/RichListIndexPage'); +require('./page/TransactionIndexPage'); \ No newline at end of file diff --git a/assets/js/page/AddressIndexPage.js b/assets/js/page/AddressIndexPage.js new file mode 100644 index 0000000..77b17eb --- /dev/null +++ b/assets/js/page/AddressIndexPage.js @@ -0,0 +1,56 @@ +const $ = require('jquery'); + +import TableManager from "../services/TableManager"; +import NavNumberFormat from "../services/NavNumberFormat"; +import moment from 'moment/src/moment'; + +class AddressIndexPage { + constructor() { + console.log("Page: Address Index"); + + this.tableManager = new TableManager('#transaction-list table', 'transactions', this.createTableRow); + } + + createTableRow(data) { + let numberFormatter = new NavNumberFormat(); + + let $row = $(document.createElement('tr')); + $row.attr('data-id', data.id); + + $row.append($(document.createElement('td')) + .attr('data-role', 'block') + .append(''+data.height+'') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'date/time') + .append(moment(data.time).utc().format('MMM[ ]Do[ ]YYYY, h:mm:ss[ ]a')) + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'hash') + .append('' + data.transaction.substr(0, 15) + '...') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'amount') + .append(numberFormatter.format(data.amount) + ' NAV') + .append(data.type === "STAKING" ? ' Stake' : '') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'balance') + .addClass("text-right") + .append(numberFormatter.format(data.balance) + ' NAV') + ); + + return $row; + } +} + + +$(function() { + if ($('body').is('.page-address-index')) { + new AddressIndexPage(); + } +}); \ No newline at end of file diff --git a/assets/js/page/BlockIndexPage.js b/assets/js/page/BlockIndexPage.js new file mode 100644 index 0000000..677e7d2 --- /dev/null +++ b/assets/js/page/BlockIndexPage.js @@ -0,0 +1,56 @@ +const $ = require('jquery'); + +import TableManager from "../services/TableManager"; +import NavNumberFormat from "../services/NavNumberFormat"; +import moment from 'moment/src/moment'; + +class BlockIndexPage { + constructor() { + console.log("Block Index Page"); + + this.tableManager = new TableManager('#block-list table', 'blocks', this.createTableRow); + } + + createTableRow(data) { + let numberFormatter = new NavNumberFormat(); + + let $row = $(document.createElement('tr')); + $row.attr('data-id', data.id); + + $row.append($(document.createElement('td')) + .attr('data-role', 'height') + .append(''+data.height+'') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'date/time') + .append(moment(data.created).utc().format('MMM[ ]Do[ ]YYYY, h:mm:ss[ ]a')) + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'transactions') + .addClass('text-center') + .append(data.transactions) + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'stakedBy') + .append(data.staked_by ? '' + data.staked_by + '' : ' ') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'stake') + .addClass("text-right") + .append(numberFormatter.formatNav(data.stake)) + ); + + return $row; + } +} + + +$(function() { + if ($('body').is('.page-block-index')) { + new BlockIndexPage(); + } +}); \ No newline at end of file diff --git a/assets/js/page/BlockViewPage.js b/assets/js/page/BlockViewPage.js new file mode 100644 index 0000000..150315e --- /dev/null +++ b/assets/js/page/BlockViewPage.js @@ -0,0 +1,19 @@ +const $ = require('jquery'); + +import TransactionLoader from "../services/TransactionLoader"; + +class BlockViewPage { + constructor() { + console.log("Block View Page"); + + let transactionLoader = new TransactionLoader(); + transactionLoader.loadBlockTransactions(); + } +} + + +$(function() { + if ($('body').is('.page-block-view')) { + new BlockViewPage(); + } +}); \ No newline at end of file diff --git a/assets/js/page/Home.js b/assets/js/page/Home.js new file mode 100644 index 0000000..4fe6c48 --- /dev/null +++ b/assets/js/page/Home.js @@ -0,0 +1,12 @@ +const $ = require('jquery'); + +class PageHome { + constructor() + { + console.log("Home Page"); + } +} + +if ($('body').is('.page-home')) { + new PageHome(); +} \ No newline at end of file diff --git a/assets/js/page/RichListIndexPage.js b/assets/js/page/RichListIndexPage.js new file mode 100644 index 0000000..68120b6 --- /dev/null +++ b/assets/js/page/RichListIndexPage.js @@ -0,0 +1,18 @@ +const $ = require('jquery'); + +import Distribution from "../services/Distribution"; + +class RichListIndexPage { + constructor() { + console.log("Rich List Index Page"); + + let wealthDistribution = new Distribution('#wealthDistribution', '/distribution/balance.json'); + } +} + + +$(function() { + if ($('body').is('.page-richList-index')) { + new RichListIndexPage(); + } +}); \ No newline at end of file diff --git a/assets/js/page/TransactionIndexPage.js b/assets/js/page/TransactionIndexPage.js new file mode 100644 index 0000000..623a738 --- /dev/null +++ b/assets/js/page/TransactionIndexPage.js @@ -0,0 +1,63 @@ +const $ = require('jquery'); + + +import TableManager from "../services/TableManager"; +import NavNumberFormat from "../services/NavNumberFormat"; +import moment from 'moment/src/moment'; + +class PageTransaction { + constructor() { + console.log("Transaction Index Page"); + + this.tableManager = new TableManager('#transaction-list table', 'transactions', this.createTableRow); + } + + createTableRow(data) { + let numberFormatter = new NavNumberFormat(); + + let $row = $(document.createElement('tr')); + $row.attr('data-id', data.id); + + $row.append($(document.createElement('td')) + .attr('data-role', 'hash') + .append('' + data.hash.substring(20) + '...') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'height') + .append(''+ data.height + '') + ); + + $row.append($(document.createElement('td')) + .attr('data-role', 'date/time') + .append(moment(data.time).utc().format('MMM[ ]Do[ ]YYYY, h:mm:ss[ ]a')) + ); + + if (data.stake) { + $row.append($(document.createElement('td')) + .addClass("text-right") + .attr('data-role', 'amount') + .append('Staking') + .append(numberFormatter.format(data.stake) + ' NAV') + ); + } else { + let amount = 0; + data.outputs.forEach(function (output) { + amount += output.amount; + }); + $row.append($(document.createElement('td')) + .addClass("text-right") + .attr('data-role', 'amount') + .append(numberFormatter.format(amount) + ' NAV') + ); + } + + return $row; + } +} + +$(function() { + if ($('body').is('.page-transaction-index')) { + new PageTransaction(); + } +}); diff --git a/assets/js/services/Distribution.js b/assets/js/services/Distribution.js new file mode 100644 index 0000000..2df3eaa --- /dev/null +++ b/assets/js/services/Distribution.js @@ -0,0 +1,103 @@ +const $ = require('jquery'); + +import axios from "axios"; +import * as d3 from "d3"; +import NavNumberFormat from "../services/NavNumberFormat"; + +export default class Distribution { + constructor(target, dataUrl) { + this.target = target; + this.dataUrl = dataUrl; + this.init(); + } + + init() { + this.dataSet = []; + axios.get(this.dataUrl).then(this.handleData.bind(this)); + this.colors = ['#4d3474', '#44B5E9', '#1547AE', '#CE2DAF', '#5A78D1', '#5879D2', '#1547AE', '#41BEEB']; + } + + handleData(response) { + if (response.status !== 200) { + return; + } + + this.rawData = response.data; + + if (typeof this.rawData.segments === "undefined") { + return; + } + this.buildChart(this.rawData.segments); + this.buildTable(this.rawData.segments); + } + + buildChart(segments) { + let navNumberFormat = new NavNumberFormat(); + segments.forEach(function (segment) { + this.dataSet.push({ + 'label': segment.position ? 'Top ' + segment.position + ' (' + segment.percentage.toFixed(2) + '%) - ' + navNumberFormat.formatNav(segment.total, false) : 'All - ' + navNumberFormat.formatNav(segment.total, false), + 'count': segment.value, + }); + }.bind(this)); + + let width = 290; + let height = 290; + let radius = Math.min(width, height) / 2; + + let colors = d3.scaleOrdinal().range(this.colors); + + let svg = d3.select(this.target + " svg") + .attr('width', width) + .attr('height', height) + .append('g') + .attr('transform', 'translate(' + width/2 + ',' + height/2 +')'); + + let arc = d3.arc() + .innerRadius(radius - 75) + .outerRadius(radius); + + let pie = d3.pie() + .value(function(d) { return d.count; }) + .sort(null); + + let path = svg.selectAll('path') + .data(pie(this.dataSet)) + .enter() + .append('path') + .attr('d', arc) + .attr('fill', function(d, i) { + return colors(d.data.label); + }); + } + + buildTable(segments) { + let numberFormatter = new NavNumberFormat(); + + let $table = $(this.target + " table"); + let $tablebody = $table.find("tbody").empty(); + let colors = this.colors; + + segments.forEach(function(segment, index) { + let $row = $(document.createElement('tr')); + + $row.append($(document.createElement('td')) + .attr('class', 'text-center') + .append('') + ); + + $row.append($(document.createElement('td')) + .append(segment.position ? numberFormatter.format(segment.position) : 'All') + ); + + $row.append($(document.createElement('td')) + .append(numberFormatter.formatNav(segment.value, false)) + ); + + $row.append($(document.createElement('td')) + .attr('class', 'text-center') + .append(numberFormatter.format(segment.percentage, false) + '%') + ); + $tablebody.append($row); + }); + } +} \ No newline at end of file diff --git a/assets/js/services/FormFilter.js b/assets/js/services/FormFilter.js new file mode 100644 index 0000000..5362e64 --- /dev/null +++ b/assets/js/services/FormFilter.js @@ -0,0 +1,19 @@ +const $ = require('jquery'); + +export default class FormFilter { + constructor() { + $(function() { + $(".form-filter input").change(function() { + let $form = $(this).closest('form'); + let filters = ''; + $form.find('input').each(function() { + if ($(this).prop('checked')) { + filters += $(this).attr('name') + ','; + } + }); + filters = filters.substring(0, filters.length - 1) + document.location.href = $form.attr('action')+'?filters='+filters; + }); + }); + } +} \ No newline at end of file diff --git a/assets/js/services/NavNumberFormat.js b/assets/js/services/NavNumberFormat.js new file mode 100644 index 0000000..b1c5561 --- /dev/null +++ b/assets/js/services/NavNumberFormat.js @@ -0,0 +1,30 @@ +export default class NavNumberFormat { + format(x, decimals = true) { + if (typeof x === "undefined") { + return false; + } + + let parts = x.toString().split("."); + + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); + + if (decimals === false) { + return parts[0]; + } + + if (typeof parts[1] !== 'undefined') { + parts[1] = '' + parts[1] + ''; + } + + return parts.join("."); + } + + formatNav(x, decimals = true) { + let number = this.format(x, decimals); + if (number === false) { + return false; + } + + return number + " NAV"; + } +} \ No newline at end of file diff --git a/assets/js/services/Pagination.js b/assets/js/services/Pagination.js new file mode 100644 index 0000000..87f40bd --- /dev/null +++ b/assets/js/services/Pagination.js @@ -0,0 +1,175 @@ +const $ = require('jquery'); + +export default class Pagination { + constructor(tableManager) { + this.tableManager = tableManager; + let containers = tableManager.table.find('.table-pagination'); + if (containers.length !== 0) { + this.containers = containers; + this.active = true; + this.initialized = false; + } else { + this.active = false; + } + } + + hide() { + if (this.active === true) { + this.containers.each(function() { + $(this).hide(); + }); + } + } + + init(data) { + this.state = {}; + this.state.first = typeof data.first !== "undefined" ? data.first : true; + this.state.last = typeof data.last !== "undefined" ? data.last : true; + this.state.page = typeof data.number !== "undefined" ? data.number : 0; + this.state.size = typeof data.size !== "undefined" ? data.size : 50; + this.state.numberOfElements = typeof data.number_of_elements !== "undefined" ? data.number_of_elements : 0; + this.state.totalElements = typeof data.total_elements !== "undefined" ? data.total_elements : 0; + this.state.totalPages = typeof data.total_pages !== "undefined" ? data.total_pages : 1; + + let lastPageSize = (this.state.totalElements % this.state.size); + this.state.lastPageElements = (lastPageSize === 0) ? this.state.size : lastPageSize; + + this.initialized = true; + + return this; + } + + click(event) { + event.preventDefault(); + + let button = $(event.target); + $(event.target).addClass("disabled"); + + if (button.hasClass('paginator-first')) { + this.clickFirst(); + } + + if (button.hasClass('paginator-previous')) { + this.clickPrevious(); + } + + if (button.hasClass('paginator-next')) { + this.clickNext(); + } + + if (button.hasClass('paginator-last')) { + this.clickLast(); + } + + this.updateStateFirstPage(); + this.updateStateLastPage(); + } + + clickFirst() { + this.tableManager.loadNextPage(this.tableManager.dataUrl); + this.state.page = 0; + } + + clickPrevious() { + let urlSplit = this.tableManager.dataUrl.split('?'); + let queryParam = (urlSplit.length > 1 && urlSplit[1] !== '') ? '&' : '?'; + let id = this.tableManager.table.find('tbody tr:first').attr('data-id'); + + this.tableManager.loadNextPage(this.tableManager.dataUrl + queryParam + 'to=' + id); + this.state.page--; + } + + clickNext() { + let urlSplit = this.tableManager.dataUrl.split('?'); + let queryParam = (urlSplit.length > 1 && urlSplit[1] !== '') ? '&' : '?'; + let id = this.tableManager.table.find('tbody tr:last').attr('data-id'); + + this.tableManager.loadNextPage(this.tableManager.dataUrl + queryParam + 'from=' + id); + this.state.page++; + } + + clickLast() { + let urlSplit = this.tableManager.dataUrl.split('?'); + let queryParam = (urlSplit.length > 1 && urlSplit[1] !== '') ? '&' : '?'; + + this.tableManager.loadNextPage(this.tableManager.dataUrl + queryParam + 'to=last&size='+this.state.lastPageElements); + this.state.page = this.state.totalPages - 1; + } + + updateStateFirstPage() { + this.state.first = (this.state.page === 0); + } + + updateStateLastPage() { + this.state.last = (this.state.page === this.state.totalPages - 1); + } + + render() { + var pagination = this; + this.containers.each(function () { + $(this).empty(); + + let container = $(this); + + let details = $(document.createElement('span')); + details.addClass('pagination-details'); + details.html("Showing page " + (pagination.state.page+1) + " of " + pagination.state.totalPages); + + let buttons = $(document.createElement('span')); + buttons.addClass('float-right'); + + let buttonList = $(document.createElement('ul')); + buttons.append(buttonList); + + let firstButton = $(document.createElement('li')); + let firstButtonLink = pagination.renderButton('first'); + firstButtonLink.click(pagination.click.bind(pagination)); + if (pagination.state.first === true) { + firstButtonLink.addClass('disabled'); + } + firstButton.append(firstButtonLink); + buttonList.append(firstButton); + + let previousButton = $(document.createElement('li')); + let previousButtonLink = pagination.renderButton('previous'); + previousButtonLink.click(pagination.click.bind(pagination)); + if (pagination.state.first === true) { + previousButtonLink.addClass('disabled'); + } + previousButton.append(previousButtonLink); + buttonList.append(previousButton); + + let nextButton = $(document.createElement('li')); + let nextButtonLink = pagination.renderButton('next'); + nextButtonLink.click(pagination.click.bind(pagination)); + if (pagination.state.last === true) { + nextButtonLink.addClass('disabled'); + } + nextButton.append(nextButtonLink); + buttonList.append(nextButton); + + let lastButton = $(document.createElement('li')); + let lastButtonLink = pagination.renderButton('last'); + lastButtonLink.click(pagination.click.bind(pagination)); + if (pagination.state.last === true) { + lastButtonLink.addClass('disabled'); + } + lastButton.append(lastButtonLink); + buttonList.append(lastButton); + + container.append(details); + container.append(buttons); + }); + } + + renderButton(id) { + let lastButtonLink = $(document.createElement('a')); + + lastButtonLink.attr('href', '#'); + lastButtonLink.addClass('paginator'); + lastButtonLink.addClass('paginator-' + id); + lastButtonLink.html(id); + + return lastButtonLink; + } +} diff --git a/assets/js/services/TableManager.js b/assets/js/services/TableManager.js new file mode 100644 index 0000000..3e0d9f3 --- /dev/null +++ b/assets/js/services/TableManager.js @@ -0,0 +1,84 @@ +const $ = require('jquery'); + +import axios from "axios"; +import Pagination from "../services/Pagination"; +import FormFilter from "../services/FormFilter"; + +export default class TableManager { + constructor(identifier, elementType, rowCreatedCallback) { + let table = $(identifier); + this.elementType = elementType; + this.rowCreatedCallback = rowCreatedCallback; + + if (table.length !== 1) { + return; + } + + this.init(table); + } + + init(table) { + this.table = table; + this.dataUrl = this.table.attr('data-url'); + this.pagination = new Pagination(this); + this.formFilter = new FormFilter(); + + this.loadDefaultPage(this.dataUrl); + } + + loadDefaultPage(dataUrl) { + axios.get(dataUrl).then(this.handleDefaultResponse.bind(this)); + } + + loadNextPage(dataUrl) { + axios.get(dataUrl).then(this.handleNextResponse.bind(this)); + } + + handleDefaultResponse(response) { + let elements = response.data.elements; + if (typeof elements === "undefined") { + if (this.paginated === true) { + this.pagination.hide(); + } + } else { + this.pagination.init(response.data); + this.handleResponse(elements); + } + } + + handleNextResponse(response) { + let elements = response.data.elements; + + if (typeof elements === "undefined") { + if (this.paginated === true) { + this.pagination.hide(); + } + } else { + this.handleResponse(elements); + } + } + + handleResponse(elements) { + this.emptyTable(); + + if (elements.length === 0) { + this.noResultsFound(); + } + + elements.forEach(function (tx) { + this.table.append(this.rowCreatedCallback(tx)); + }.bind(this)); + + this.pagination.render(); + } + + noResultsFound() { + let columnCount = this.table.find("thead tr:first th").length; + + this.table.append('There are no ' + this.elementType + ''); + } + + emptyTable() { + this.table.find('tbody').empty(); + } +} \ No newline at end of file diff --git a/assets/js/services/Timezone.js b/assets/js/services/Timezone.js new file mode 100644 index 0000000..b562c8c --- /dev/null +++ b/assets/js/services/Timezone.js @@ -0,0 +1,15 @@ +const $ = require('jquery'); + +import moment from 'moment/src/moment'; + +class Timezone { + constructor() { + $(function() { + $('.date-localised').each(function() { + // $(this).html(moment($(this).data('timestamp')).format('MMM[ ]Do[ ]YYYY, h:mm:ss[ ]a')); + }); + }); + } +} + +new Timezone(); \ No newline at end of file diff --git a/assets/js/services/TransactionLoader.js b/assets/js/services/TransactionLoader.js new file mode 100644 index 0000000..77b065f --- /dev/null +++ b/assets/js/services/TransactionLoader.js @@ -0,0 +1,104 @@ +const $ = require('jquery'); + +import axios from "axios"; + +export default class TransactionLoader { + loadBlockTransactions() { + let self = this; + let height = $('.block').data('height'); + + axios.get('/block/'+height+'/tx.json').then(function (response) { + self.transactionHtml(response.data); + }); + } + + loadAddressTransactions(callback) { + let address = $('.address').data('hash'); + + axios.get('/address/'+address+'/tx').then(callback); + } + + transactionHtml(data) { + let self = this; + let $transactionList = $(".transaction-list"); + data.elements.forEach(function (tx) { + $transactionList.append( + '
\n' + + '
\n' + + ' ' + tx.hash + '' + + self.sumOutputs(tx.outputs) + + '
\n' + + '
\n' + + '
\n' + + '
Inputs' + self.inputList(tx.inputs) + '
\n' + + '
Outputs' + self.inputList(tx.outputs) + '
\n' + + '
\n' + + '
\n' + + '
' + ); + }); + } + + inputList(inputs) { + let BreakException = {}; + let list = $(document.createElement('ul')); + let self = this; + + if (inputs) { + try { + inputs.forEach(function (input, index) { + let address = $(document.createElement('div')); + address.attr('class', 'address float-left'); + if (typeof input.address !== 'undefined') { + let a = $(document.createElement('a')).attr('href', '/address/' + input.address).html(input.address); + address.append(a); + } else { + address.html('N/A'); + } + + let amount = $(document.createElement('div')); + amount.attr('class', 'amount float-right'); + amount.html((input.amount ? self.numberWithCommas(input.amount) : '0') + ' NAV'); + + let item = $(document.createElement('li')); + item.append(address) + item.append(amount) + + list.append(item); + }); + } catch (e) { + if (e === BreakException) { + let item = $(document.createElement('li')).append(''+(inputs.length-5)+' more inputs...'); + list.append(item); + } else { + throw e; + } + } + } + + return list[0].outerHTML; + } + + numberWithCommas(x) { + let parts = x.toString().split("."); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); + + if (typeof parts[1] !== 'undefined') { + parts[1] = ''+parts[1]+''; + } + + return parts.join("."); + } + + sumOutputs(outputs) { + let sum = 0; + + if (outputs) { + outputs.forEach(function (output) { + sum += output.amount; + }); + } + + return '' + this.numberWithCommas(sum) + ' NAV' + ''; + } +} \ No newline at end of file diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..14932be --- /dev/null +++ b/bin/console @@ -0,0 +1,39 @@ +#!/usr/bin/env php +load(__DIR__.'/../.env'); +} + +$input = new ArgvInput(); +$env = $input->getParameterOption(['--env', '-e'], $_SERVER['APP_ENV'] ?? 'dev', true); +$debug = ($_SERVER['APP_DEBUG'] ?? ('prod' !== $env)) && !$input->hasParameterOption('--no-debug', true); + +if ($debug) { + umask(0000); + + if (class_exists(Debug::class)) { + Debug::enable(); + } +} + +$kernel = new Kernel($env, $debug); +$application = new Application($kernel); +$application->run($input); diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..88f1456 --- /dev/null +++ b/composer.json @@ -0,0 +1,71 @@ +{ + "type": "project", + "license": "proprietary", + "require": { + "php": "^7.0.8", + "ext-iconv": "*", + "endroid/qr-code-bundle": "^3.2", + "guzzlehttp/guzzle": "^6.3", + "sensio/framework-extra-bundle": "^5.1", + "symfony/asset": "^3.4", + "symfony/console": "^3.4", + "symfony/expression-language": "^3.4", + "symfony/flex": "^1.0", + "symfony/framework-bundle": "^3.4", + "symfony/lts": "^3", + "symfony/monolog-bundle": "^3.2", + "symfony/property-access": "^3.4", + "symfony/serializer": "^3.4", + "symfony/twig-bundle": "^3.4", + "symfony/webpack-encore-pack": "^1.0", + "symfony/yaml": "^3.4", + "twig/extensions": "^1.5" + }, + "require-dev": { + "symfony/dotenv": "^3.4", + "symfony/profiler-pack": "^1.0", + "symfony/web-server-bundle": "^3.4" + }, + "config": { + "preferred-install": { + "*": "dist" + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php70": "*", + "symfony/polyfill-php56": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "id": "01C82JP6SJW45NYZS446EVXYEX", + "allow-contrib": false + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..c50fad7 --- /dev/null +++ b/composer.lock @@ -0,0 +1,4021 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "89f496b825fc4220acb3b10dbfccdebe", + "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/5a91b62b9d37cee635bbf8d553f4546057250bee", + "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": "^5.4|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "suggest": { + "ext-gd": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-0": { + "BaconQrCode": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "http://www.dasprids.de", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "time": "2017-10-17T09:59:25+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+00:00" + }, + { + "name": "doctrine/cache", + "version": "v1.7.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a", + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a", + "shasum": "" + }, + "require": { + "php": "~7.1" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2017-08-25T07:02:50+00:00" + }, + { + "name": "doctrine/collections", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2017-07-22T10:37:32+00:00" + }, + { + "name": "doctrine/common", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~7.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2017-08-31T08:43:38+00:00" + }, + { + "name": "doctrine/inflector", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2018-01-09T20:05:19+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "endroid/qr-code", + "version": "3.2.8", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "844f9ea95bd6b012097890c6106c909cd802add2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/844f9ea95bd6b012097890c6106c909cd802add2", + "reference": "844f9ea95bd6b012097890c6106c909cd802add2", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^1.0.3", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^1.0", + "myclabs/php-enum": "^1.5", + "php": ">=7.1", + "symfony/options-resolver": "^2.7|^3.0|^4.0", + "symfony/property-access": "^2.7|^3.0|^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl", + "homepage": "https://endroid.nl/" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/qr-code", + "keywords": [ + "bundle", + "code", + "endroid", + "php", + "qr", + "qrcode" + ], + "time": "2018-02-27T21:35:30+00:00" + }, + { + "name": "endroid/qr-code-bundle", + "version": "3.2.3", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code-bundle.git", + "reference": "2b971be53ec4666d2b1064a0143206a153464657" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code-bundle/zipball/2b971be53ec4666d2b1064a0143206a153464657", + "reference": "2b971be53ec4666d2b1064a0143206a153464657", + "shasum": "" + }, + "require": { + "endroid/qr-code": "^3.2.5", + "php": ">=7.1", + "symfony/framework-bundle": "^3.4|^4.0", + "symfony/twig-bundle": "^3.4|^4.0", + "symfony/yaml": "^3.4|^4.0" + }, + "require-dev": { + "endroid/bundle-test": "dev-master" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCodeBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl", + "homepage": "https://endroid.nl/" + } + ], + "description": "Endroid QR Code Bundle", + "homepage": "https://github.com/endroid/qr-code-bundle", + "keywords": [ + "bundle", + "code", + "endroid", + "php", + "qr", + "symfony" + ], + "time": "2018-04-02T19:28:50+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "khanamiryan/qrcode-detector-decoder", + "version": "1", + "source": { + "type": "git", + "url": "https://github.com/khanamiryan/php-qrcode-detector-decoder.git", + "reference": "96d5f80680b04803c4f1b69d6e01735e876b80c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/khanamiryan/php-qrcode-detector-decoder/zipball/96d5f80680b04803c4f1b69d6e01735e876b80c7", + "reference": "96d5f80680b04803c4f1b69d6e01735e876b80c7", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ], + "files": [ + "lib/common/customFunctions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ashot Khanamiryan", + "email": "a.khanamiryan@gmail.com", + "homepage": "https://github.com/khanamiryan", + "role": "Developer" + } + ], + "description": "QR code decoder / reader", + "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder", + "keywords": [ + "barcode", + "qr", + "zxing" + ], + "time": "2017-01-13T09:11:46+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "3ed7088cfd0a0e06534b7f8b0eee82acea574fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/3ed7088cfd0a0e06534b7f8b0eee82acea574fac", + "reference": "3ed7088cfd0a0e06534b7f8b0eee82acea574fac", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2017-06-28T16:24:08+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v5.1.6", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "bf4940572e43af679aaa13be98f3446a1c237bd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bf4940572e43af679aaa13be98f3446a1c237bd8", + "reference": "bf4940572e43af679aaa13be98f3446a1c237bd8", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.2", + "symfony/config": "^3.3|^4.0", + "symfony/dependency-injection": "^3.3|^4.0", + "symfony/framework-bundle": "^3.3|^4.0", + "symfony/http-kernel": "^3.3|^4.0" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.6", + "doctrine/orm": "^2.5", + "symfony/browser-kit": "^3.3|^4.0", + "symfony/dom-crawler": "^3.3|^4.0", + "symfony/expression-language": "^3.3|^4.0", + "symfony/finder": "^3.3|^4.0", + "symfony/phpunit-bridge": "^3.3|^4.0", + "symfony/psr-http-message-bridge": "^0.3", + "symfony/security-bundle": "^3.3|^4.0", + "symfony/twig-bundle": "^3.3|^4.0", + "symfony/yaml": "^3.3|^4.0", + "twig/twig": "~1.12|~2.0", + "zendframework/zend-diactoros": "^1.3" + }, + "suggest": { + "symfony/expression-language": "", + "symfony/psr-http-message-bridge": "To use the PSR-7 converters", + "symfony/security-bundle": "" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "time": "2018-02-14T08:40:54+00:00" + }, + { + "name": "symfony/asset", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "89e9267bf33a8214efceb1ead12fb73504e81089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/89e9267bf33a8214efceb1ead12fb73504e81089", + "reference": "89e9267bf33a8214efceb1ead12fb73504e81089", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Asset Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:37:34+00:00" + }, + { + "name": "symfony/cache", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "cce49c7aa2fc82077355c8a6dfcd9e619abe6e98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/cce49c7aa2fc82077355c8a6dfcd9e619abe6e98", + "reference": "cce49c7aa2fc82077355c8a6dfcd9e619abe6e98", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "symfony/polyfill-apcu": "~1.1" + }, + "conflict": { + "symfony/var-dumper": "<3.3" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.4", + "predis/predis": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "time": "2018-02-11T14:42:07+00:00" + }, + { + "name": "symfony/class-loader", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/class-loader.git", + "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e63c12699822bb3b667e7216ba07fbcc3a3e203e", + "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/polyfill-apcu": "~1.1" + }, + "suggest": { + "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ClassLoader\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ClassLoader Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:37:34+00:00" + }, + { + "name": "symfony/config", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "05e10567b529476a006b00746c5f538f1636810e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/05e10567b529476a006b00746c5f538f1636810e", + "reference": "05e10567b529476a006b00746c5f538f1636810e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2018-02-14T10:03:57+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "067339e9b8ec30d5f19f5950208893ff026b94f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/067339e9b8ec30d5f19f5950208893ff026b94f7", + "reference": "067339e9b8ec30d5f19f5950208893ff026b94f7", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-02-26T15:46:28+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/9b1071f86e79e1999b3d3675d2e0e7684268b9bc", + "reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2018-02-28T21:49:22+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "12e901abc1cb0d637a0e5abe9923471361d96b07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/12e901abc1cb0d637a0e5abe9923471361d96b07", + "reference": "12e901abc1cb0d637a0e5abe9923471361d96b07", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/container": "^1.0" + }, + "conflict": { + "symfony/config": "<3.3.7", + "symfony/finder": "<3.3", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2018-03-04T03:54:53+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "58990682ac3fdc1f563b7e705452921372aad11d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/58990682ac3fdc1f563b7e705452921372aad11d", + "reference": "58990682ac3fdc1f563b7e705452921372aad11d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2018-02-14T10:03:57+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/867e4d1f5d4e52435a8ffff6b24fd6a801582241", + "reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/cache": "~3.1|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:37:34+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2018-02-22T10:48:49+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "a479817ce0a9e4adfd7d39c6407c95d97c254625" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/a479817ce0a9e4adfd7d39c6407c95d97c254625", + "reference": "a479817ce0a9e4adfd7d39c6407c95d97c254625", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-03-05T18:28:11+00:00" + }, + { + "name": "symfony/flex", + "version": "v1.0.70", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "1f00c05d35523dc0ac52e4a457989a069be5a7a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/1f00c05d35523dc0ac52e4a457989a069be5a7a4", + "reference": "1f00c05d35523dc0ac52e4a457989a069be5a7a4", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": "^7.0" + }, + "require-dev": { + "composer/composer": "^1.0.2", + "symfony/phpunit-bridge": "^3.2.8" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "time": "2018-02-22T07:00:47+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "ee18b39bb52c6cc7ed550a9df981650660d4be92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ee18b39bb52c6cc7ed550a9df981650660d4be92", + "reference": "ee18b39bb52c6cc7ed550a9df981650660d4be92", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^5.5.9|>=7.0.8", + "symfony/cache": "~3.4|~4.0", + "symfony/class-loader": "~3.2", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "^3.4.3|^4.0.3", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/filesystem": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^3.3.11|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^3.4.5|^4.0.5" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.0", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/asset": "<3.3", + "symfony/console": "<3.4", + "symfony/form": "<3.4", + "symfony/property-info": "<3.3", + "symfony/serializer": "<3.3", + "symfony/stopwatch": "<3.4", + "symfony/translation": "<3.4", + "symfony/validator": "<3.4", + "symfony/workflow": "<3.3" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "fig/link-util": "^1.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/asset": "~3.3|~4.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/form": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/property-info": "~3.3|~4.0", + "symfony/security": "~2.8|~3.0|~4.0", + "symfony/security-core": "~3.2|~4.0", + "symfony/security-csrf": "~2.8|~3.0|~4.0", + "symfony/serializer": "~3.3|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~3.4|~4.0", + "symfony/validator": "~3.4|~4.0", + "symfony/var-dumper": "~3.3|~4.0", + "symfony/web-link": "~3.3|~4.0", + "symfony/workflow": "~3.3|~4.0", + "symfony/yaml": "~3.2|~4.0", + "twig/twig": "~1.34|~2.4" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony FrameworkBundle", + "homepage": "https://symfony.com", + "time": "2018-03-01T14:51:10+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "6f5935723c11b4125fc9927db6ad2feaa196e175" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6f5935723c11b4125fc9927db6ad2feaa196e175", + "reference": "6f5935723c11b4125fc9927db6ad2feaa196e175", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" + }, + "require-dev": { + "symfony/expression-language": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2018-02-22T10:48:49+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "a443bbbd93682aa08e623fade4c94edd586ed2de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a443bbbd93682aa08e623fade4c94edd586ed2de", + "reference": "a443bbbd93682aa08e623fade4c94edd586ed2de", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^3.4.4|^4.0.4" + }, + "conflict": { + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", + "symfony/class-loader": "~2.8|~3.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.5|^4.0.5", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "", + "symfony/var-dumper": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2018-03-05T19:41:07+00:00" + }, + { + "name": "symfony/inflector", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "217fa0f0e8fce417bd225e4195b12c56e87273a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/217fa0f0e8fce417bd225e4195b12c56e87273a8", + "reference": "217fa0f0e8fce417bd225e4195b12c56e87273a8", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "time": "2018-01-03T17:14:19+00:00" + }, + { + "name": "symfony/lts", + "version": "v3", + "source": { + "type": "git", + "url": "https://github.com/symfony/lts.git", + "reference": "3a4e88df038e3197e6b66d091d2495fd7d255c0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/lts/zipball/3a4e88df038e3197e6b66d091d2495fd7d255c0b", + "reference": "3a4e88df038e3197e6b66d091d2495fd7d255c0b", + "shasum": "" + }, + "conflict": { + "symfony/asset": ">=4", + "symfony/browser-kit": ">=4", + "symfony/cache": ">=4", + "symfony/class-loader": ">=4", + "symfony/config": ">=4", + "symfony/console": ">=4", + "symfony/css-selector": ">=4", + "symfony/debug": ">=4", + "symfony/debug-bundle": ">=4", + "symfony/dependency-injection": ">=4", + "symfony/doctrine-bridge": ">=4", + "symfony/dom-crawler": ">=4", + "symfony/dotenv": ">=4", + "symfony/event-dispatcher": ">=4", + "symfony/expression-language": ">=4", + "symfony/filesystem": ">=4", + "symfony/finder": ">=4", + "symfony/form": ">=4", + "symfony/framework-bundle": ">=4", + "symfony/http-foundation": ">=4", + "symfony/http-kernel": ">=4", + "symfony/inflector": ">=4", + "symfony/intl": ">=4", + "symfony/ldap": ">=4", + "symfony/lock": ">=4", + "symfony/monolog-bridge": ">=4", + "symfony/options-resolver": ">=4", + "symfony/process": ">=4", + "symfony/property-access": ">=4", + "symfony/property-info": ">=4", + "symfony/proxy-manager-bridge": ">=4", + "symfony/routing": ">=4", + "symfony/security": ">=4", + "symfony/security-bundle": ">=4", + "symfony/security-core": ">=4", + "symfony/security-csrf": ">=4", + "symfony/security-guard": ">=4", + "symfony/security-http": ">=4", + "symfony/serializer": ">=4", + "symfony/stopwatch": ">=4", + "symfony/symfony": ">=4", + "symfony/templating": ">=4", + "symfony/translation": ">=4", + "symfony/twig-bridge": ">=4", + "symfony/twig-bundle": ">=4", + "symfony/validator": ">=4", + "symfony/var-dumper": ">=4", + "symfony/web-link": ">=4", + "symfony/web-profiler-bundle": ">=4", + "symfony/web-server-bundle": ">=4", + "symfony/workflow": ">=4", + "symfony/yaml": ">=4" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-master": "3-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Enforces Long Term Supported versions of Symfony components", + "homepage": "https://symfony.com", + "time": "2017-10-19T02:02:36+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v3.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "9bf32d32810d09b6409fde30844b9ab2bc554ee7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9bf32d32810d09b6409fde30844b9ab2bc554ee7", + "reference": "9bf32d32810d09b6409fde30844b9ab2bc554ee7", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.19", + "php": "^5.5.9|>=7.0.8", + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/http-foundation": "<3.3" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/security-core": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings. You need version ~2.3 of the console for it.", + "symfony/event-dispatcher": "Needed when using log messages in console commands.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Monolog Bridge", + "homepage": "https://symfony.com", + "time": "2018-05-11T15:52:51+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "8781649349fe418d51d194f8c9d212c0b97c40dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/8781649349fe418d51d194f8c9d212c0b97c40dd", + "reference": "8781649349fe418d51d194f8c9d212c0b97c40dd", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.22", + "php": ">=5.3.2", + "symfony/config": "~2.7|~3.0|~4.0", + "symfony/dependency-injection": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0", + "symfony/monolog-bridge": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "symfony/console": "~2.3|~3.0|~4.0", + "symfony/phpunit-bridge": "^3.3|^4.0", + "symfony/yaml": "~2.3|~3.0|~4.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony MonologBundle", + "homepage": "http://symfony.com", + "keywords": [ + "log", + "logging" + ], + "time": "2018-03-05T14:51:36+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v3.4.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2018-01-11T07:56:07+00:00" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, + { + "name": "symfony/property-access", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "a6e8c778b220dfd5cd5f5dcb09f87ee232dd608a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/a6e8c778b220dfd5cd5f5dcb09f87ee232dd608a", + "reference": "a6e8c778b220dfd5cd5f5dcb09f87ee232dd608a", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/inflector": "~3.1|~4.0", + "symfony/polyfill-php70": "~1.0" + }, + "require-dev": { + "symfony/cache": "~3.1|~4.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "time": "2018-01-03T07:37:34+00:00" + }, + { + "name": "symfony/routing", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "8773a9d52715f1a579576ce0e60213de34f5ef3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/8773a9d52715f1a579576ce0e60213de34f5ef3e", + "reference": "8773a9d52715f1a579576ce0e60213de34f5ef3e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/common": "~2.2", + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/dependency-injection": "For loading routes from a service", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "time": "2018-02-28T21:49:22+00:00" + }, + { + "name": "symfony/serializer", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "11bea1aebe9c8d506f47c01931b0df9f18629a8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/11bea1aebe9c8d506f47c01931b0df9f18629a8f", + "reference": "11bea1aebe9c8d506f47c01931b0df9f18629a8f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "phpdocumentor/type-resolver": "<0.2.1", + "symfony/dependency-injection": "<3.2", + "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4", + "symfony/property-info": "<3.1", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/cache": "~3.1|~4.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.2|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/property-access": "~2.8|~3.0|~4.0", + "symfony/property-info": "~3.1|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/http-foundation": "To use the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Serializer Component", + "homepage": "https://symfony.com", + "time": "2018-02-14T14:07:03+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "9cb6f18ab49fa3c28137533966e5ceb74c20f766" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9cb6f18ab49fa3c28137533966e5ceb74c20f766", + "reference": "9cb6f18ab49fa3c28137533966e5ceb74c20f766", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "twig/twig": "^1.35|^2.4.4" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/form": "<3.4.5|<4.0.5,>=4.0" + }, + "require-dev": { + "symfony/asset": "~2.8|~3.0|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/dependency-injection": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/form": "^3.4.5|^4.0.5", + "symfony/http-foundation": "^3.3.11|~4.0", + "symfony/http-kernel": "~3.2|~4.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/security": "~2.8|~3.0|~4.0", + "symfony/security-acl": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~2.8.10|~3.1.4|~3.2|~4.0", + "symfony/web-link": "~3.3|~4.0", + "symfony/workflow": "~3.3|~4.0", + "symfony/yaml": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security": "For using the SecurityExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/templating": "For using the TwigEngine", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "time": "2018-03-01T10:20:21+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "c06e47e4b93500c1e6dbf9a29d10f88845d7958c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c06e47e4b93500c1e6dbf9a29d10f88845d7958c", + "reference": "c06e47e4b93500c1e6dbf9a29d10f88845d7958c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/config": "~3.2|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/http-kernel": "^3.3|~4.0", + "symfony/twig-bridge": "^3.4.3|^4.0.3", + "twig/twig": "~1.34|~2.4" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<3.3.1" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "symfony/asset": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/form": "~2.8|~3.0|~4.0", + "symfony/framework-bundle": "^3.3.11|~4.0", + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/web-link": "~3.3|~4.0", + "symfony/yaml": "~2.8|~3.0|~4.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony TwigBundle", + "homepage": "https://symfony.com", + "time": "2018-02-14T12:23:44+00:00" + }, + { + "name": "symfony/webpack-encore-pack", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-pack.git", + "reference": "f9f4e91659e5f55de370d6aebe77e64bce35e4d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-pack/zipball/f9f4e91659e5f55de370d6aebe77e64bce35e4d3", + "reference": "f9f4e91659e5f55de370d6aebe77e64bce35e4d3", + "shasum": "" + }, + "type": "symfony-pack", + "extra": { + "thanks": { + "name": "symfony/webpack-encore", + "url": "https://github.com/symfony/webpack-encore" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for Symfony Encore", + "time": "2017-12-21T02:20:09+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "6af42631dcf89e9c616242c900d6c52bd53bd1bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/6af42631dcf89e9c616242c900d6c52bd53bd1bb", + "reference": "6af42631dcf89e9c616242c900d6c52bd53bd1bb", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-02-16T09:50:28+00:00" + }, + { + "name": "twig/extensions", + "version": "v1.5.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig-extensions.git", + "reference": "d188c76168b853481cc75879ea045bf93d718e9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/d188c76168b853481cc75879ea045bf93d718e9c", + "reference": "d188c76168b853481cc75879ea045bf93d718e9c", + "shasum": "" + }, + "require": { + "twig/twig": "~1.27|~2.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "~3.3@dev", + "symfony/translation": "~2.3|~3.0" + }, + "suggest": { + "symfony/translation": "Allow the time_diff output to be translated" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_Extensions_": "lib/" + }, + "psr-4": { + "Twig\\Extensions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Common additional features for Twig that do not directly belong in core", + "homepage": "http://twig.sensiolabs.org/doc/extensions/index.html", + "keywords": [ + "i18n", + "text" + ], + "time": "2017-06-08T18:19:53+00:00" + }, + { + "name": "twig/twig", + "version": "v2.4.6", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "d2117ec118c1ff3d28ccddca8212d82787a4809f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/d2117ec118c1ff3d28ccddca8212d82787a4809f", + "reference": "d2117ec118c1ff3d28ccddca8212d82787a4809f", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~3.3@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2018-03-03T16:23:01+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "jms/metadata", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/6a06970a10e0a532fb52d3959547123b84a3b3ab", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2016-12-05T10:18:33+00:00" + }, + { + "name": "jms/parser-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" + }, + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" + }, + { + "name": "jms/serializer", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/e7c53477ff55c21d1b1db7d062edc050a24f465f", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" + }, + "conflict": { + "twig/twig": "<1.12" + }, + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0", + "twig/twig": "~1.12|~2.0" + }, + "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2018-02-04T17:48:54+00:00" + }, + { + "name": "jms/serializer-bundle", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", + "reference": "9dec7ab62248aa97f33cce70c301af15154f8f0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/9dec7ab62248aa97f33cce70c301af15154f8f0b", + "reference": "9dec7ab62248aa97f33cce70c301af15154f8f0b", + "shasum": "" + }, + "require": { + "jms/serializer": "^1.10", + "php": "^5.4|^7.0", + "phpoption/phpoption": "^1.1.0", + "symfony/framework-bundle": "~2.3|~3.0|~4.0" + }, + "require-dev": { + "doctrine/orm": "*", + "phpunit/phpunit": "^4.8.35|^5.4.3|^6.0", + "symfony/expression-language": "~2.6|~3.0|~4.0", + "symfony/finder": "^2.3|^3.0|^4.0", + "symfony/form": "*", + "symfony/stopwatch": "*", + "symfony/twig-bundle": "*", + "symfony/validator": "*", + "symfony/yaml": "*" + }, + "suggest": { + "jms/di-extra-bundle": "Required to get lazy loading (de)serialization visitors, ~1.3", + "symfony/finder": "Required for cache warmup, supported versions ^2.3|^3.0|^4.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "JMS\\SerializerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Allows you to easily serialize, and deserialize data of any complexity", + "homepage": "http://jmsyst.com/bundles/JMSSerializerBundle", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2017-12-08T19:49:08+00:00" + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17T12:39:23+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25T16:39:46+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "66265f80c0f585cd6aec3fbdfc4ffdf7a0d75992" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/66265f80c0f585cd6aec3fbdfc4ffdf7a0d75992", + "reference": "66265f80c0f585cd6aec3fbdfc4ffdf7a0d75992", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/process": "~3.2|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2018-01-03T17:14:19+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "cc4aea21f619116aaf1c58016a944e4821c8e8af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/cc4aea21f619116aaf1c58016a944e4821c8e8af", + "reference": "cc4aea21f619116aaf1c58016a944e4821c8e8af", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2018-02-12T17:55:00+00:00" + }, + { + "name": "symfony/profiler-pack", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/profiler-pack.git", + "reference": "fa2e2dad522a3bef322196abad28ffce6d0fdbc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/profiler-pack/zipball/fa2e2dad522a3bef322196abad28ffce6d0fdbc5", + "reference": "fa2e2dad522a3bef322196abad28ffce6d0fdbc5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/stopwatch": "^3.3|^4.0", + "symfony/twig-bundle": "^3.3|^4.0", + "symfony/web-profiler-bundle": "^3.3|^4.0" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony web profiler", + "time": "2017-12-12T01:48:24+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/eb17cfa072cab26537ac37e9c4ece6c0361369af", + "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2018-02-17T14:55:25+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "80964679d81da3d5618519e0e4be488c3d7ecd7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/80964679d81da3d5618519e0e4be488c3d7ecd7d", + "reference": "80964679d81da3d5618519e0e4be488c3d7ecd7d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, + "require-dev": { + "ext-iconv": "*", + "twig/twig": "~1.34|~2.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "ext-symfony_debug": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2018-02-22T17:29:24+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "355591d4749c9bbc03036e264886a9b8bdd1f45f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/355591d4749c9bbc03036e264886a9b8bdd1f45f", + "reference": "355591d4749c9bbc03036e264886a9b8bdd1f45f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/http-kernel": "~3.3|~4.0", + "symfony/polyfill-php70": "~1.0", + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/twig-bridge": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0", + "twig/twig": "~1.34|~2.4" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<3.3.1", + "symfony/var-dumper": "<3.3" + }, + "require-dev": { + "symfony/config": "~3.4|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebProfilerBundle", + "homepage": "https://symfony.com", + "time": "2018-03-02T08:27:00+00:00" + }, + { + "name": "symfony/web-server-bundle", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-server-bundle.git", + "reference": "44a6b2deb1c58b2dfd3592139db9091d7cfce8ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-server-bundle/zipball/44a6b2deb1c58b2dfd3592139db9091d7cfce8ed", + "reference": "44a6b2deb1c58b2dfd3592139db9091d7cfce8ed", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/http-kernel": "~3.3|~4.0", + "symfony/process": "~3.3.14|^3.4.2|^4.0.2" + }, + "suggest": { + "symfony/expression-language": "For using the filter option of the log server.", + "symfony/monolog-bridge": "For using the log server." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebServerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebServerBundle", + "homepage": "https://symfony.com", + "time": "2018-01-03T17:14:19+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.0.8", + "ext-iconv": "*" + }, + "platform-dev": [] +} diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..e07fb5d --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,12 @@ + ['all' => true], + Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true], + Endroid\QrCodeBundle\EndroidQrCodeBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], +]; diff --git a/config/deploy/exclude-files.txt b/config/deploy/exclude-files.txt new file mode 100644 index 0000000..ba33ad3 --- /dev/null +++ b/config/deploy/exclude-files.txt @@ -0,0 +1,5 @@ +.idea +.git +assets +node_modules +var diff --git a/config/nginx/sites-available/www b/config/nginx/sites-available/www new file mode 100644 index 0000000..5fcdac1 --- /dev/null +++ b/config/nginx/sites-available/www @@ -0,0 +1,34 @@ +server { + listen 443; + + root /data/www/current/public; + + server_name www.navexplorer.com; + + location / { + # try to serve file directly, fallback to app.php + try_files $uri /index.php$is_args$args; + } + + location ~ ^/index\.php(/|$) { + fastcgi_pass unix:/run/php/php7.1-fpm.sock; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + + internal; + } + + # return 404 for all other php files not matching the front controller + # this prevents access to other php files you don't want to be accessible. + location ~ \.php$ { + return 404; + } + + error_log /var/log/nginx/www_navexplorer_error.log; + access_log /var/log/nginx/www_navexplorer_access.log; + + ssl_certificate /etc/letsencrypt/live/navexplorer.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/navexplorer.com/privkey.pem; # managed by Certbot +} diff --git a/config/packages/dev/jms_serializer.yaml b/config/packages/dev/jms_serializer.yaml new file mode 100644 index 0000000..353e460 --- /dev/null +++ b/config/packages/dev/jms_serializer.yaml @@ -0,0 +1,7 @@ +jms_serializer: + visitors: + json: + options: + - JSON_PRETTY_PRINT + - JSON_UNESCAPED_SLASHES + - JSON_PRESERVE_ZERO_FRACTION diff --git a/config/packages/dev/monolog.yaml b/config/packages/dev/monolog.yaml new file mode 100644 index 0000000..b7dbb31 --- /dev/null +++ b/config/packages/dev/monolog.yaml @@ -0,0 +1,11 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/config/packages/dev/routing.yaml b/config/packages/dev/routing.yaml new file mode 100644 index 0000000..4116679 --- /dev/null +++ b/config/packages/dev/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: true diff --git a/config/packages/endroid_qr_code.yaml b/config/packages/endroid_qr_code.yaml new file mode 100644 index 0000000..fd7bd58 --- /dev/null +++ b/config/packages/endroid_qr_code.yaml @@ -0,0 +1,8 @@ +endroid_qr_code: + writer: 'png' + size: 300 + margin: 0 + error_correction_level: 'low' + validate_result: true + logo_path: '%kernel.root_dir%/../public/images/logo-mark.png' + logo_width: 150 diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..8b24418 --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,30 @@ +framework: + secret: '%env(APP_SECRET)%' + #default_locale: en + #csrf_protection: true + #http_method_override: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: ~ + + #esi: true + #fragments: true + php_errors: + log: true + + cache: + # Put the unique name of your app here: the prefix seed + # is used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The app cache caches to the filesystem by default. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu diff --git a/config/packages/jms_serializer.yaml b/config/packages/jms_serializer.yaml new file mode 100644 index 0000000..bab42da --- /dev/null +++ b/config/packages/jms_serializer.yaml @@ -0,0 +1,13 @@ +jms_serializer: + visitors: + xml: + format_output: '%kernel.debug%' +# metadata: +# auto_detection: false +# directories: +# any-name: +# namespace_prefix: "My\\FooBundle" +# path: "@MyFooBundle/Resources/config/serializer" +# another-name: +# namespace_prefix: "My\\BarBundle" +# path: "@MyBarBundle/Resources/config/serializer" diff --git a/config/packages/prod/jms_serializer.yaml b/config/packages/prod/jms_serializer.yaml new file mode 100644 index 0000000..bc97faf --- /dev/null +++ b/config/packages/prod/jms_serializer.yaml @@ -0,0 +1,6 @@ +jms_serializer: + visitors: + json: + options: + - JSON_UNESCAPED_SLASHES + - JSON_PRESERVE_ZERO_FRACTION diff --git a/config/packages/prod/monolog.yaml b/config/packages/prod/monolog.yaml new file mode 100644 index 0000000..b7dbb31 --- /dev/null +++ b/config/packages/prod/monolog.yaml @@ -0,0 +1,11 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..368bc7f --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: ~ diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml new file mode 100644 index 0000000..d051c84 --- /dev/null +++ b/config/packages/test/framework.yaml @@ -0,0 +1,4 @@ +framework: + test: true + session: + storage_id: session.storage.mock_file diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml new file mode 100644 index 0000000..2762653 --- /dev/null +++ b/config/packages/test/monolog.yaml @@ -0,0 +1,7 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] diff --git a/config/packages/test/web_profiler.yaml b/config/packages/test/web_profiler.yaml new file mode 100644 index 0000000..03752de --- /dev/null +++ b/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..3b315dc --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,4 @@ +twig: + paths: ['%kernel.project_dir%/templates'] + debug: '%kernel.debug%' + strict_variables: '%kernel.debug%' diff --git a/config/packages/twig_extensions.yaml b/config/packages/twig_extensions.yaml new file mode 100644 index 0000000..417b7bc --- /dev/null +++ b/config/packages/twig_extensions.yaml @@ -0,0 +1,10 @@ +services: + _defaults: + public: false + autowire: true + autoconfigure: true + + #Twig\Extensions\ArrayExtension: ~ + #Twig\Extensions\DateExtension: ~ + #Twig\Extensions\IntlExtension: ~ + #Twig\Extensions\TextExtension: ~ diff --git a/config/routes.yaml b/config/routes.yaml new file mode 100644 index 0000000..3fab0c6 --- /dev/null +++ b/config/routes.yaml @@ -0,0 +1,3 @@ +#index: +# path: / +# defaults: { _controller: 'App\Controller\DefaultController::index' } diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml new file mode 100644 index 0000000..d49a502 --- /dev/null +++ b/config/routes/annotations.yaml @@ -0,0 +1,3 @@ +controllers: + resource: ../../src/Controller/ + type: annotation diff --git a/config/routes/dev/twig.yaml b/config/routes/dev/twig.yaml new file mode 100644 index 0000000..f4ee839 --- /dev/null +++ b/config/routes/dev/twig.yaml @@ -0,0 +1,3 @@ +_errors: + resource: '@TwigBundle/Resources/config/routing/errors.xml' + prefix: /_error diff --git a/config/routes/dev/web_profiler.yaml b/config/routes/dev/web_profiler.yaml new file mode 100644 index 0000000..c82beff --- /dev/null +++ b/config/routes/dev/web_profiler.yaml @@ -0,0 +1,7 @@ +web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + prefix: /_wdt + +web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + prefix: /_profiler diff --git a/config/routes/endroid_qr_code.yaml b/config/routes/endroid_qr_code.yaml new file mode 100644 index 0000000..ceab54e --- /dev/null +++ b/config/routes/endroid_qr_code.yaml @@ -0,0 +1,3 @@ +endroid_qr_code: + resource: "@EndroidQrCodeBundle/Resources/config/routes.yaml" + prefix: /qr-code diff --git a/config/services.yaml b/config/services.yaml new file mode 100644 index 0000000..e65312d --- /dev/null +++ b/config/services.yaml @@ -0,0 +1,86 @@ +# Put parameters here that don't need to change on each machine where the app is deployed +# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration +parameters: + navcoin.main_net.base_uri: '%env(BACKEND_MAINNET)%' + navcoin.test_net.base_uri: '%env(BACKEND_TESTNET)%' + +services: + # default configuration for services in *this* file + _defaults: + autowire: true # Automatically injects dependencies in your services. + autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + public: false # Allows optimizing the container by removing unused services; this also means + # fetching services directly from the container via $container->get() won't work. + # The best practice is to be explicit about your dependencies anyway. + + # makes classes in src/ available to be used as services + # this creates a service per class whose id is the fully-qualified class name + App\: + resource: '../src/*' + exclude: '../src/{Entity,Migrations,Tests,Kernel.php}' + + # controllers are imported separately to make sure services can be injected + # as action arguments even if you don't extend any base controller class + App\Controller\: + resource: '../src/Controller' + tags: ['controller.service_arguments'] + + # add more service definitions when explicit configuration is needed + # please note that last definitions always *replace* previous ones + + # Navcoin Clients + App\Navcoin\Client\MainNetClient: + arguments: ['%navcoin.main_net.base_uri%'] + + App\Navcoin\Client\TestNetClient: + arguments: ['%navcoin.test_net.base_uri%'] + + # Navcoin APIs + App\Navcoin\Address\Api\AddressApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\Address\Mapper\AddressMapper' + + App\Navcoin\Address\Api\StakingApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + + App\Navcoin\Address\Api\TransactionApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\Address\Mapper\TransactionMapper' + calls: + - method: setFilter + arguments: ['@App\Navcoin\Address\Type\Filter\AddressTransactionTypeFilter'] + + App\Navcoin\Block\Api\BlockApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\Block\Mapper\BlockMapper' + + App\Navcoin\Block\Api\BlockGroupApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\Block\Mapper\BlockGroupMapper' + + App\Navcoin\Block\Api\TransactionApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\Block\Mapper\TransactionMapper' + + App\Navcoin\Distribution\Api\DistributionApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\Distribution\Mapper\DistributionMapper' + + App\Navcoin\Search\Api\SearchApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + + App\Navcoin\SoftFork\Api\SoftForkApi: + arguments: + - '@App\Navcoin\Client\ClientManager' + - '@App\Navcoin\SoftFork\Mapper\SoftForkMapper' + + # Filters + App\Navcoin\Address\Type\Filter\AddressTransactionTypeFilter: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c065c17 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +version: '2' + +services: + php: + build: docker/php7-fpm + volumes: + - ./:/var/www + extra_hosts: + - backend:172.16.222.111 #sudo ifconfig lo0 alias 172.16.222.111 + nginx: + build: docker/nginx + ports: + - 80:80 + volumes_from: + - php + volumes: + - ./docker/logs/nginx/:/var/log/nginx \ No newline at end of file diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 0000000..f9d187d --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,21 @@ +FROM debian:jessie + +MAINTAINER Maxence POUTORD + +RUN apt-get update && apt-get install -y \ + nginx + +ADD nginx.conf /etc/nginx/ +ADD app.conf /etc/nginx/sites-available/ + +RUN ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/app +RUN rm /etc/nginx/sites-enabled/default + +RUN echo "upstream php-upstream { server php:9000; }" > /etc/nginx/conf.d/upstream.conf + +RUN usermod -u 1000 www-data + +CMD ["nginx"] + +EXPOSE 80 +EXPOSE 443 \ No newline at end of file diff --git a/docker/nginx/app.conf b/docker/nginx/app.conf new file mode 100644 index 0000000..5ca5b99 --- /dev/null +++ b/docker/nginx/app.conf @@ -0,0 +1,23 @@ +server { + server_name www.navexplorer.dev; + root /var/www/public; + + location / { + try_files $uri @rewriteapp; + } + + location @rewriteapp { + rewrite ^(.*)$ /index.php/$1 last; + } + + location ~ ^/index\.php(/|$) { + fastcgi_pass php-upstream; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param HTTPS off; + } + + error_log /var/log/nginx/navexplorer_error.log; + access_log /var/log/nginx/navexplorer_access.log; +} \ No newline at end of file diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf new file mode 100644 index 0000000..3ea65a8 --- /dev/null +++ b/docker/nginx/nginx.conf @@ -0,0 +1,29 @@ +user www-data; +worker_processes 4; +pid /run/nginx.pid; + +events { + worker_connections 2048; + multi_accept on; + use epoll; +} + +http { + server_tokens off; + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 15; + types_hash_max_size 2048; + include /etc/nginx/mime.types; + default_type application/octet-stream; + access_log off; + error_log off; + gzip on; + gzip_disable "msie6"; + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + open_file_cache max=100; +} + +daemon off; \ No newline at end of file diff --git a/docker/php7-fpm/Dockerfile b/docker/php7-fpm/Dockerfile new file mode 100644 index 0000000..563324a --- /dev/null +++ b/docker/php7-fpm/Dockerfile @@ -0,0 +1,51 @@ +FROM php:7.1-fpm + +MAINTAINER Maxence POUTORD + +RUN apt-get update && apt-get install -y \ + git \ + libpng-dev \ + libicu-dev \ + wget \ + gnupg + +RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - +RUN apt-get install -y nodejs + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +RUN composer --version + +RUN apt-get update \ + && apt-get install -y wget git zlib1g-dev libicu-dev \ + && rm -r /var/lib/apt/lists/* \ + && docker-php-ext-configure zip \ + && docker-php-ext-install zip \ + && docker-php-ext-configure intl \ + && docker-php-ext-install intl \ + && docker-php-ext-configure pcntl \ + && docker-php-ext-install pcntl \ + && docker-php-ext-configure opcache \ + && docker-php-ext-install opcache \ + && docker-php-ext-configure pdo_mysql \ + && docker-php-ext-install pdo_mysql + +# install xdebug +RUN pecl install xdebug +RUN docker-php-ext-enable xdebug +RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini + +# Install NodeJS, Yarn, and Ruby +RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - +RUN apt-get install -y nodejs ruby +RUN rm -r /var/lib/apt/lists/* +RUN npm install -g bower +RUN gem install yarn + +WORKDIR /var/www \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..23c3ed8 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "devDependencies": { + "@symfony/webpack-encore": "^0.19.0", + "node-sass": "^4.8.1", + "sass-loader": "^6.0.7" + }, + "dependencies": { + "axios": "^0.18.0", + "d3": "^5.1.0", + "jquery": "^3.3.1", + "moment": "^2.22.0" + } +} diff --git a/public/fonts/open-iconic.eot b/public/fonts/open-iconic.eot new file mode 100755 index 0000000000000000000000000000000000000000..f98177dbf711863eff7c90f84d5d419d02d99ba8 GIT binary patch literal 28196 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 f%X4~$E_2;^J#ifP;CI~=<%5iE_!YyhznS + + + + +Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014 + By P.J. Onori +Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/open-iconic.ttf b/public/fonts/open-iconic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..fab604866cd5e55ef4525ea22e420c411f510b01 GIT binary patch literal 28028 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 literal 0 HcmV?d00001 diff --git a/public/fonts/open-iconic.woff b/public/fonts/open-iconic.woff new file mode 100755 index 0000000000000000000000000000000000000000..f9309988aeab3868040d3b322658902098eba27f GIT binary patch literal 14984 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 literal 0 HcmV?d00001 diff --git a/public/images/arrow-thick-right.svg b/public/images/arrow-thick-right.svg new file mode 100755 index 0000000..33a8502 --- /dev/null +++ b/public/images/arrow-thick-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/images/favicon-1.png b/public/images/favicon-1.png new file mode 100644 index 0000000000000000000000000000000000000000..564d87ec19c35a70c85082225d582fa1e72d8693 GIT binary patch literal 602 zcmV-g0;Te zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00F{DL_t(I%hi+3P7`4ihM#Z# z+nJVv1uIpE*0>-VYC>2^TtGB>Ro;U4;ldlxXk4HM#UKeOnu@eqq%cg|=}g=C`CLFO zu2~r0-N{LwocEmf2q~rH0#dl3{yjiDUxb|@t$K%{lt@kG>U^I3gz={zr;=@Vgf9U_ zvXIlx0VM3bZu9b4jRQucd54upH&}ak1x-60bo1Acr#n7B1Qc_EC%2rjh0q<+{@|em zDt$MCL}h2UPklcCU=XFeX@var6S^@h<_vDy`WWDT_VB*+(9yB=ET(SYdJ!AjT?WI1 zT6@I1W=NDmK^3e`o0zI{Y9S6{j^DeCx)G_OaCfE5VFG)-gw0)_>lKGjUc^B!VPFeZ ziw4!R-Dm)Qt%vvVgd|L{%O=Z@XQ{Ua)L*nY?!-KQ>+&5zAO(|#!h@25rJh|OjZ(bz zBZ6i?A_UhK3(Qn(tQm`~uYH=|0yege@Cz2vti!#MMRiIa=U~|AjGXMYp07*qoM6N<$f+t}Ey8r+H literal 0 HcmV?d00001 diff --git a/public/images/logo-extended.png b/public/images/logo-extended.png new file mode 100644 index 0000000000000000000000000000000000000000..f588f484eac31b3f1586ccfdc4cd2e37de327aca GIT binary patch literal 28273 zcmX_Hc|26__qUT>nv$rHZEVRFvQzfNTw@p6_g&UdmXsn5F}9Jx+_4+Gk;uM{W$b%) zSrSUZZ$95Ye*ete*Ymn_?m6%0ectEX=XvI}k>MjIdQN&WGBPF|ZB1h`GAfXajNFHg zk~C8O`PmQ|86}yKK1}P8k3Rp?PJySLq)%(_!8>-H63+=1UW1ka1kyEWko5W5b&zzS znX~-=BczL1x1lQSHqsC4wOWHiiFeD^B78^uBF66*uRMP~CRVZL7&{ddN=!HD6vAzY zm#sYy8Ebmj`q8w@>h0`Tt=2T4OFMH(xMriypgmKsT_bzh=FKdSGN0%&*sIb4e3%z# zSW`x=^eN#7A2jndY>=KPk6uf8)=#=1ne~qtPkc2I5KfdYT)SJcnG`djh1)7n{eseH z&CqUBC|GUQX^W4WOzGMjNJihWtheqwTC}PnuVfy{!4&BO4pBEElCY=Hq%MFqZTG`8YKP+H@&XDJ05kaF? zNwcZ?-$+66HS}^dg_fg|U;p453z6z%=y$Bdl&;5>7#Mc^rOA8-+oW2-oR%0AG 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 literal 0 HcmV?d00001 diff --git a/public/images/logo-mark.png b/public/images/logo-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..e913c62a30832ea1bf7378845e5834ae38b601f9 GIT binary patch literal 22161 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

Z_WN3MJ4OK5^}B8?!+6m~g$ z%km=vOy>n65)97$8u*Ngs@WImhOv*%xF^VY>AOWw46{mCDT#$GuOEtHAe{rEbFB0?-nxxEGm7Opl9*WO(-Fm(XzV2-EYzHKKg3V^ABM1Xy);XsB{z$JOM5O=64wCmknD$E5ZYD0>h z<=IHA1fL1TYzy9yGcn zJ#c}-QeRl&Hq^fO^w55}NDj05De88175flqQ4B2fE>;dPIJ#JFQdYNDMtmHuIjWri zxrrewV3=qwEH31G9>Seul|@8ASAlhZIxKKmVtSxv?08R zJFG=PPjD8of8eoy*X!`?qzCW3mP3q#+5HVjWJXI)j}7&cL=ILpUH8mRK?nD4EC2U;o#HD%xifyy2;D*lR0F(`w^Y;PB7jai?@e;`TVtYTYls-!vLwTxA(V{ zFy`!4If%FF1(1t+LU+LpNMuqJZY%x4m;f=p$i%sHCL_7|{giz(1fV6(`y<_D9rUJ` z|7C>=3Q)r99*F>%WD2_r!B=CY{#BF!E$}STfIAjHI&2uG-`ZDd9?`M<$aOK?L!HXT zJUfU6Q-ZDhU$-i&uxn0t0{Myx9iSPP(pNE*<`?<)JXGpvL04s$Y)5{_+{cdy|cunO1L$URDHBx ze2R^bXTs!zZDagyBO>CqZo>D%fD9w@$ai)k&Kb@ z|LJ#xKf$MqD1yzFeZ-%g@Tsr?>NmIB!9)5Cv1uMQY8l`d@#UYrx|eBmL#zuoFg?F( zV-<@H^IeMq85d zmD)#l*j3Sba~aq9)AhIzvcNygF?)r+b?@Z|8?h|&b%47t&nZc0o5}8%n{pC*B@NHk zzqcSBUfOf1>ITR=GzMs+9srAxQaVy6f&`@J8fjw^lG)5M66RI~0HD?TJYJ3w6*Pep zEv;25`0a~H^7FNqn8L;XqN1ODBLliYj2N~o|8<}Lu&sL0_~hb_1W zj9QJu7`oa+GDp`lKf&428y4G|D$C|ws*HL1aADpEPUzl|b62<-#qwic zG8;^9L5xwRBw5LB-~a2xhuP14mJRC;<{C4xV@J5*s`@zF#3oyqAW7+tcG~CG53x=L zVcL!huB@@qxxu$fTRB8+Mm3XELNd2`XpZd*G~3vF0J)4PPYVK4ABQcQIL^sh zoRBmFhzpljW=P9K>-7cWa5}FuU9S-KLgyH(R4>t?#!jJycNeoZ7ZOQv?`hk`Hw=-H zia&o4NrcP~(tdrHl-e#h{^USbJA?#CDj>qHJBiru&%ikvANLs_Rof!q&=D%OwO|1y z6U>Q0`P#6R^Qb%FJWU|+`NT{HRK1{Q7RP+eMtoe#$+Zu_ugy)TK~l+F`SBlDaGD6t znvK4NEi-PqWCpyGh_bJY-m7>nq(YI997ZKnu9XFc^wKL&q8K3NDYb+pI1+HvtxiV? zLI%K8^yo5U8iC(`$^Mx3Yz;;{VgVE&$A13jGa?UL>`dZ!la=bc3!FL5Eu}Cgcse`q z(uNd|J8_SYAw(WpzwE}x{Ug)H5{M%y*J7B+8lVag)R}&&ua3~v8p#bQz+#VbGeDRa$sFzE>2G6=P`zts$Y;P)5?#t|8)U=4By1z8Ap%#I zJQBKe9DZaD)*68!B@o`ZK@MnLS_qlVYgQqb)XFwO;jq(|my{*Qg-5fPM2u*3#wWpu zHqFS+M`)Wz*AMxTM`2i`{B;WP(Iok(7CKBsvY`kJOJ5cA7k+OhnS4`N+cw$3PGt&e zFPS5THt}m984t3;7;rnG*6hdX+706Gs!qeKBU>7TNDfj)91s}cMR`n|(vpmA9tm&? zO&&(U&nO2GDu!K~`A*9tAA3OpjUMe;Ls?o0`Cs&7;e;i zx4{s+A|40NsJT19&lbwwuvO z2OGpzfpcYxAsd#NgVbd>d8A@V@fJ@o2@%0#3*Y0Z5qzizR_)wyKcEAKkB$&8(GcLA zf(Y_rNa3Za#c-croMx$gwblbc`Rd;{2up8sC)T}+gnt8eXtDnLqtM0zYZU0ABCf|o zX~!$v%O4&O7p?-ymg;{T_4$3V0j;x|D3J;+PjRvT1|?AZ!gmf?jYKwiNL3X~Gw3C&AyK0Tqp z*Qr(aET0jPP&1&UVt}nOCg>0MkvYEHSIS%yUluMzJ6AG{q_V8eTo`a0K%@lme%L^| zU;>Q;^70^Bo}pcMLREfn94N$ALe+8t&^o!pam0co6rw9Hv7(+9(z&x~HIS}&_WwfM zuTTIyp#QL_h}c*E8=g$I-K837S|1)+0SlW(Hq4Db!X#Z!g48{AmT}%lk`cY-|HA@* zki#x$FGTY%jNfQ>fQ{mYnS9%qq?{1Q=m!zBU?@WqA9t35820V7+BGc*WKnPIz%Nvi z>2^}g+y?6It;uQHOHr#p2C%RtqS(L*gnd0@z&W11x)l1WS#rTiy}9D;0uf;US!2i+M%tDo|TLkZ^e4G}dZ%)k|8j{E* z{A54s^0h>+m*6lcp+UObF(HV>K{6j>;fc?AizY?y)5$gZ{-`QuynVIL1y(&qWIrFS+Ih&-6v!Y}lkv+~8;$vKyrxebW z&5@Ig%!sp<50a7D_x<_({(RB`%;=8TYk(~(oN1b zh;hy)I&!wBx`E?##D6piNbP&C)P)r_#=1ss+8 zZ*!m}aJbS9Lf1gMr-*yiVa4E`H-9mL!WX^Sz&;!scaK?JWm{e(Jagx`z0T}}$wjN! z`i8MW4javii~6r_{ye-NY?Hohg`P~w^eespI-gX_lD8 z$lZ11TSZC zkm1S@se>7}yVh09@_2UbU*So{JTp?Hb=3)@uO=G}(d=LYMFQYA8pPlgi~@s5c*SVO zYp^N1lox|QwlZkC{tBlP@?1qR&LuKrJ|$Cz?Z0T6rmY24$kz_M#f;;}>ft#QV2U*w z5^pe9a*PpBPB=u{in0MvwV$vt`SgzFAdG+~qRhHR-Y>;`iMPVtK75tv6fNnouguVS zyN^CIp@+x%0Mm2XjfSY7QhLK{^zl5SrrT(jWrUhGg%yMGI`tr$&5k#f#F1#_j8?TOdtH zo|mE`tAJKcawL{a&O*B$jffk+dh7Y|T-X=6Q%g#c=lb&Z$F|eQ(w+s8Tc@%C|- zi?yRg;ljk!asN?A>x0Dh+!6In=x$^Ra+!DKmco_xYq#kNe(h7`YCJoxLj#;Gx^+R9 z9+6^g5DmKldhwLIgx|ceH#O}SvOW;2^fz*}f1+>2B;lgI6sRJM{{`W??-V42c16;x z_Q?U23taD9*Z00D1gG+_tXZU2C*7;jRgTXU9HEoa8HLtequtpXRpwmW%`hO-sZnnF z2NMx7gwRn{`TtZ>91d$%7QEAP^fnPbJXn9h)lrz9oQ-y!->YH+pAK3t0 ziaDLPmCfQKdQ9A4VS4UdBN9;Bzno(-q zVN0)n8u{$CR}DNzE|DI~yj&+G=F1QpsPQ|ApO!^zO~8@mAgoTFi_|Y~be{_f+y7jYAW1Ni-RNSnGu2GZ}{navqNpqg0Nyq z%R}Jfi^wBE_u48{RrpOWwR^~l5b>}=K54(((*|>KFCn7a5vMo!R2B^IFMjQ#GZ}{$ zdK2*F_a*EhJn}1yM-?v%K_Ay%K%dH6O^^CJsDH!yylB!faMdLR!_NBZ9$#yz?+(ZP zl%ztbGn0oUm2!1yz``LNcN^ckKEc(%Lsz_7?dQ1?@r!8K{KPq>GxGF+ypPWdeHAVe zKwK@nvm7wz(G3M;1)&o|o)Z`xT~y8&Xw)TQv=oi~8b1H|;^IJ~D8o*zl!;K8xc4`-+ub?sSL0@J^}J4=yiJwK!|k7v2J-KT^vZCpA2(kp z$h$qmZ{3wheidQR1mq6^c@VlCny`JHO{C}(W`n&sCR^=51H0mo-<16u=8}NHaF%)S zyY!fHioJB(ypNApk(^b#7ImK%R7gBSWm|K8Qd}S}iOg9!N1vo!#MSSMf)0t>)FjX7 zj9z!I+3o&ZRXSEVi}x2_;$DV3G1uZBOFwguAcm9n8_%Q^t?%%=UYHEqwiBSaWzYG^ zwu=Fs3)OSG&UZ9q8gPs#y>7SVloxcS{Phi8L-%OHs5<*taQK*6PL>n@N8Hcb23h6^ zd+G6189;0|tmi=Np|)Z|R;oF3ovnRZO)GH8BscU?TBDX!ur^w9y+bA-gx@zjAyeK7 zuKH}~&_{UE8237@LC&)!Fl){SWlTJ4XCzdFYBd3+UJ!^3931EZmtlX*Ot4i-_r{9R znK8cUvDIgv>i*X$FU(e3xOf|8!&+5DOX>Y73D>!B-K;+$Js0anMEN?K0(od$#5`8z z&?>I2F1vPWg8p=As;}vZS&Ep$U_pzyKnFfZ4An`$mls*}62);m3iQ-q1CgYrC6SHY zT6(DmjF*tj^Kj0s<3n(6o6Q|Q>#n+=zEgZ1vIH5O8E}w()4+#xJ}a5EW{_6s=PM?3 zYPe{=RwwnW2XaVxaecZyZ=vgoIRRNN1d6w?Fr!lxzWK|6es zN$7>7pOb5_BCfCt_UJgj_M4ps0QqKQZcbjaAPE(H@RY0A=(uy20dAq@D$aSnH&1JS zY~$+$g!kF3|qchCVk#XNXLg*^_aL;||vWF16IjLOE! zeyo^?W&az#wsj4=V#}yw43{^XCS(zop=9V^B>RVb=9Ha|_6yIiTKGErzehi4JQ;0U zE$IM-Jo&Svk{NiE4%Pdk{Cl_21-#>kj&ioYuN3Ug8-s!>N{Zr0m353B!^@vC8E}vaeVkghT zhAX7<7y0PhA^&}`XhHPU+#8$Cjaob@YVcX7`>2+jB~GyPg%^k0hI z!$e78aLC*6UghdvXh{I6B~xPk-vu!?%rmPvM222LHE@$DVt-w#>G(BN@2bj!66Mo8c_cB~5{$Iby%PpkH-6dB_*`R$Dw zf1CY*`5+X4E3)zyALrA&P=?*Z9q-4)?;HV5u1`I276nO?StH%Aw@ETt1UHm~WLl!S z1=(h!M!f6&kzurVcZ`x2avZml&`S z&G`!1LrM1YA+L1E(lK0A`71E_Lp4qw=+@IzwoAcDz`dS3Zhpa!ZtBGY6?^mo zxxCn>N=KzL5s|03EjPGtw1S$6^~V|(vEz)qPd_!*4TPxCHF%4La}6eL;hxm?@FTnS z{`1O~_1P8bWwzIO&04=Vw1MbC&>%HAl^)u6iq0XB4nk!QC5-DVb%3JF6FqzldYK|9Qky{nr z7v|yM^6B#4pHb1-sM4_lGL_aXJWVgFz3Ew%F=7q3MkN^%t9tQ~%?M1JsdAzM>cxYM zZfWr_<8}6;yp4?T)Q0WvK)Yu8UlTnK0J7TSEHZzFk|S6FoNX(pT(VOlUNZZ`8}LjF zyBY)9na|Ng;WF~li|DPDG=*T;6*N3L2Rjh-+&hcVsJu3y8P*ahL33B@!(R!cuVEUb zIiQQE*)dfuslZeU&%uV*EHFfe|4WjPe7V~Ev`}_w>ss!Ta@~4~7bo~kot+|+u8&u6 zQ>ts@H+T^jkou2@>Y@cvC&f7~8FmcNJkx=7!3FTe<6uv94LUN9+|RFOv$+-~Xh68i zXrgvK*x-qILvm~z@Re7ONyNb-YP?r@U|O7Wr_i3=#n}E1r)O7GczNF>=#8074fe1m z*{dXIEZZUgpMhJX z^E9Qj0`1jc8Bs1rK=H270kSZ&6a2dFNRe~SZosFe>biF!d)nYsr%ndfRu}L1E%vMc z8C|!7%e13}Q=`_elfAL(^}?iJ17E!~$l=Q{QGcH_;mfNu7}Q|VxB`KB|jGxKP{$^|tb zJ+OHkyjKkc@$nv_<#q!6!J3}jlHbnX)4G&L)waOoDc7^~jqKOiBS@!zdf&23FcJ5$ zdiE|Ab}@qxoa9tqS*qo@5j!&ybXo${^Don0nPn(zHXL`#6RnzUmUiAVzxHzF%>xZs z1NUfM1wWZToS4rrXj7xLiaFULTb$B$G?j0yj-+&%n zEgivrU{%6}#QELd`r0ci-{x}4jt z@G}Hi)|k&f zH_%^pLY@15@24(f)canTb;Cq5yg4cnUJw; zBOd8M;~Y07p>Gsn;8bv-UP+j=t075!&K1z`+MN$nlWA$rlU@7KDRG!uP^Ena?FeMP zxcheZ<_XTrfcs4rV%=g|)fxbbzX?&TGs5ycP&X~;uO>4U%Bgrerw-gjFF4I()xNU%`iI7A%P#%hTE-9o%UG|?ADY`!=A11jwZ!w zRaz#$r~A{;6?Q+V9Ui|M@E{)TXmyiW=Vu2mf0>28#8W0&2NQQwRQNA}3(%d@W)Xtj zaI60PY359dGJP;Fh|-O`@f;0_pswiI+p!rhniIE|t>dB_Pul^A zDt8X3AyV4qJ^xt3qs?g7tP(Y5&%M=|ilu07u9_{=9)^a2Jz-OMM9jMgucN`vM?}`= zuPW?l0R`}%;-sz8x!kRrPoh9_m&y?TSnhhfI3Ak>&3>4T6cDO3MXbB#2a5HzAY!uJ zMCikZOO})wx5!6O;T~_@3pl3wwumWN3)z%$5S3=r3k1{Csb0b>mtH8hfm&Hg$A^F% zI)6Z_6m$%vSf7w*J`xf$4MXiwXnv24U-JD}i4+<)WK zG=b&k9@q=k&dqB-6n#=V+b%(CY?-L=gn@HdO^5Vx9wS8j=A6wQ-|V90fqj}+aX%LQ zf^41yy9DrW3RY?r$1RKD2$hM&r}V^z7miY=G)f-SEMB1zcm9@*=3P#h$QM0ChJ`x` zVoo}5WCGW4O!sce!quNdtOJ7=*8@mG0*aap3SyBsQJF)fPcUo~wG#Es%~*}%{%W&x zpG^x@mU@yG`hVkQaQnWF`lH`=OZuO9Ja_f2n1V0vtfJmy4EYMoT#WV z+Nw-cyb+ifF8NSvxiC}P*aQ?r158YPDX;axLHB^%jI!Aj+tQn>YfdgMQ8Dp}i9cNQ zV$y6(3Tn0vI5;M*9*oS)VwCu&r>8c40c2!kin{tTUo?eSTk0Dy8klTTb4 z9wldz=xDOEM5OpsiWumsyzKk?`>HCc98}~YA8Gjo1vM}*0;6k7%gX$eq%FjS8k{VB zadChC{3$0bqsBl|?Af8uO2$Qsqo=K_=32bIwlP1y=;-Jagp1qJ(dp&xVXc#ylauQ# zBkogiVJ6%S(iPzom6gwOZitUh2y1(diiiODfmWgeQc_Ywf^PE$c zyFhM+A)Q&3i}$-bg;Jm7ty2}vBFq#&*BR>qH9_p+`uh{({BpJ~nhJDWvhfrY=L_?p zM(G-+mYP1bnfyH885ta8eWDXj;ZXk(O{)fBJqnbmmQ5HdQ@wA`HW8PoDBLuV`4#sBKTu6(_&&I`{W(P{OERaTkR%IT!r9k1xhYQS|M zD&Rc00ql4GG{bWQU0HmY9DcONG(s~m*%bO4h_OHs;&3)Imr!GPmDb=(ncLL)daYA& z3NW6uE3MUlnkAT-M%~HE2huU)ZdcDWpIn!^nY<$ z>hYHlj(D=jFQ?SB<%zPx0XACCd?J;*2tky%?$ih|WTAZ0X+uE^i)7KD+?%MVpU3a| zR=t*^$2dOUXiO2i(-i(HHJd3Y1$S9@u*ql&5RO1ddp zwGb%b*ZYzhomSHk%#gO-s2j!@(H)ANWQmN@g7TPH`)djTz51rh9_%YK2Sxkx|gr&73@w+>W==d+;`>QpAG>2mw zp8K0W|4mvG6Y1Hx4^peh@rbZ(4sUxuC@=muWSt*SH@3TAHt|OziD1-kwA4MXK0Fv0 zULL$2hQI+Zj2TSM@c$fS$yw(#B_1wYfu!gKsOxKDG#j#Dx5X1+Q7@zTcdmPa4MB^ENV~bPsx;eb$!|Gi|it+E?WU7O%d`S9NSciUYS8G_UlVdp@KH=4@qbNA|T`H zk(?$9xMYkde{iN$Ye6(g@QHdb(q6CISnZsqIoFc1F zu2!}NE=pEr?4aQ-IDeTpE5zyx5RE@@_1?}wKYaFJjm@GNkNx~g&|yw6l$i3;{I<}# zc5|-P109aFUV#Ny858UJmwG3IAE!0ZRqCDw;4xYGO%6DK^^GWVPUji%M29MdbQwWH z(WkS1H-#S9V`B3>3vEySolJAQsfw&`XP>Z z_3nlHb3j5=xeb8Pyeo#ef)IyBTpUz-RHD-;XW{H|w(8udOJ!8;AYLqPM8yn7iPmNHFE@T=X?DEj}~HR;Q@s6&~FSaJeGs zNFZ=t4q34|lbZ6tG8zcQi5xSfPV|4!U$tlV*x`I`jJQ|$D$6GS8}y--N*w4xl~@P= zZAA5C{_nNAp@gWrp_7k_{IE?187(zD4IRmr+qf5h0VHx>Wi4|=K&5?#!Os2idIG`s zff*ol(zJZ8f!=xMV(+Ej_c!Ode)x;Kk2#hRlIRjJtm1zYMP59ORT7DJ$43OYY+kL zsbEH)AF>}0a(;L$sxKu4CL!*I=Y1^uB9=M2P;3?|`x^K9cP2z_^5s*@dxk&+q9cIe zFm_r6I@ZU0{VPO#b)pNo#4amFrlp1YFPIlI*ZD8(*ZFpCI_DY1)hr3NbUINYWq=H4 zo}T&bW%Q4&r{!$F%Gnc?kORHVy3DMHDKyjt~GkR0@l$1RgR; z78#4j+^QT@-^Rw;a`>nu`LpCsj>VE82d?2ssMiP{PALLHkjsOLEZ;nsDSJlZRcU8 zz~SC8n|*##mZJLkBOOJE9i=R|UfDy;4^6ho5>K`LvB1HI-&`b|Rfy^4B3$6Gs;-eM z5UDN$-t>F9Mt%78JGR!QgufTqMt;Y2fr}Ef`rof_Nt zTTkAN)d$Ea7Al{eD22}Q0y@;#(}`&XemJw{bmMdx#qjXTb1h?Y62GwR)72fi9%BHI z!eF@g7c+HPob(5u?B5&D|6b209*S5(}u$Hekki)56Q8skQdIDU`VtucdEQm*o07dEWPKZE{WP z>UXscO^i9EyT@ONbPB2U$L@gs&kqMXwI4r^ej$i&N@2&&I&nCZM+I=wKo4mvTi&LP zPdroy!va0d2yx}86|TlQB9?Db#W&e(I-W)bo(R8sVtIU+RO)=BOfnUr2q9l}a6}t9 zvfz2biF>^RtHQunzw^I-eQP=&8*`R$9?!2L+{+?3Uhl72zUt?`CW2CmF)ArjAs%##$I3WNv?r|g%&}`T)Po!-f}rnxR6;nms4$9PMNXFg*VR4 z=*5>`_5?ea%^7%-(@+v5LK;GZchy)F1f|T(7BXRSLk3j;5N6XQJ~1lKh@lr@bI1Ch z<}CB_w^=-Xuc^N-5{pN;`lIh(+p_erGa8yrW^ma~M!0@eJbtpeQ~;qhu$C0$xIk0Y zVlKt=fUk>7&O7(P__gI1_qzZO4I^mDA5PsRZx#VTk*USTrVoo^b>Jr!d^4l&HVWrL`*Gp zk$4`rp%~a@ww#Cl+lOVr6C~BxZFmSQ8P|fjGJrN>xArpHhSvgYZ_RKRJ2b;Qw5(nS z#%+2>ii1)Y!T3_NEVj$p$JvmIH7DjXJWlMT>Fr8O7uq55@q zDU@W!>2skh3>_gvJfA7OW!OeXBltJw4TB-#CvsP`;=8G1%yG+r<^9+lnPqQY-=17b zAyXl+!47viq{aXbbq$WxxT~}UqU#|$bNtmhKdXlnacDV=BTqQ`i0QcAroVW))hEn$ z&%e2-k;|UeXYe=rkr8N8v1`@?cYeQZ-(H^WLZRhv-~+Ib;UXOan2^^-_wyk4g8u`^ zNu6|lw`Vy_8~aGK$?dP|h-aAKgltr&!?B2&+TH{Xy2thGK>P`VyINh4`rk=;xtJXof#@uhVDVJgkn+TU)yS9q^F7QN zNtt*a1HWhim|jv{>U`vi<~z)p=VLC)*m#%u?GERvajtBSM{%cQQtK%rNWptf#}JXL zZ!0B+A5D%DbTcth+v$L&Icd)FXX8En6NKW2gnfLR1UuHwALjHR*{S0aACVYmQh7Dg zu+6YMAATU`&AeyRp-0NnBOG;98An6sVZC|fcA?Fi)%F~CY34fKzjZnPUQ%dZRYIcc zf2L3vZ8C>_AQn&ZmRPW?1%lUdaCjQTo~Wqt*HJhhg=gfD$rp(B;0I@R>*idSTw~UbmkTmLoq5< zM-#SsVfvm66BZ1HCxKo*%1wu(mQZ`Zs7*i-olSP0+{2->FxOT9hh$T7EU|lB^1Btd zEz7x%8?t|@Xul?%BTfa|OF6Dt48>8p(Jmci(IT$1{|{bV54a91&@q$usL`G-wS zZN-Ofo1c^fEDEL*w9E@|!EOZWoSr=WI}v+`ksd?Z&wmyUqLxGp9BUcKT4lVjplSP{ z(F5eX-LHnUho^XFo;-yAtSp?y*3mT_Y(XCRrwZ7Gj^q_KV)_qC2-ZK3 zw_9aIW--yxwjO`3<@tk4;cmlHz?ge{in6qqs-&;-J9R$%>LI8Ja(F9wX8lehA^rj% zw2^(tV+*?a6bS!uQZM@1z+Zq@e7elXJVY-+VFte&R$!kYY%nT)RMq=>xy@>_A`}M~ zh+CiUgFk%{pQz!w@I`XR*y+-+?8a$YLsv4ItV(GucjQ{Q>8fpT;f{kM!};<2?sg~q z4Hr54v*H5`c3WMrZR2MGd)dp;!*F;or)aP@^6FvF&CDd{A7dW%G!1UAc6$ccjXSyb zhM+@2|4&Uy9*v|MlIc?qVU3=n%R<@d#CrU~$k$(o?MIn15j6SDH=S09^21IQ45rwG7*hl^P_NfQ z4{zfQH6DYWkZ9r$N$on5FGKDNMhv3+Eu~|PCukl5Sc~=E6&?SuYNQL{eVz+n_||cA zf@lp}ag?1B;CrigQnE5t=BCaj7(-PQXs~4o)gwbP>`n^mk2b^IuU0{@Fd>dC<2w2? zzrWP780;*q}!zdolI)t@p&5T z4l^+;Rv(AX%yG3K)fQ#^Zteh&>m!3RP>Yr&b zBXU)g#fM-Hlm!Rrt^~HHs;VXg5Gv4y`Ir*Ojt%`W{1XpC&N|w{ZDgpb`g;#3D=-%m zdXTBrKQfj3cv3>;=(q&ujw)%BA9%$Yn`d&j{XO#}vKT>_XnS@Q2%Ze1=T;jN7OD6p z#5Stj%DdjBDN@GJ%=rSd-OD8j&{pmBIhyd<%)yCd@tVV|%ft?feA*fF&*PwZ?2|aM6iY_)GXNm2y{L*3%=1Yq59>A0Qb)segt;4JsHl^3YpDtLh1%=Ddv+t~PWNi!;^ zZjpI56WksU^jn@rr7nLN0`*HuYe#Bgay#?+G|6wY@4lD&&Manor$1rf10!Q+C_UFd zvngbw>*@UiuDfGEESIBqZX`Q5{cqFZ_$8Su2)=`9)>l5_R&I z_-n>5jt9$w4F?((t!l00wzFHPkasKG4ruk)`omX459vC!){G8Bw42!&v)y_@@3{}4 zHL<#=IJ7-sBu_;VW`_|nd*)+Qpfj?k(%RFf>4bWwHduMNW}I{=r3GzdVs9LG3ByG- zC%78Ds_NEcYRDsYVN>WBb)p!KJCZ!@5Pi2c@lehdW<#anz|lWV&u`xDtA=pSh$c*V zxq?5BG?6}#1VqS6YfGcV%EH%d6 z&M*#20`r~Z#bFzpC&G6Q4VSM4(&FTdID^m+hIwhRB)ojgp}w4Hz70)w$M2 z@chnRP`i~ODuk{8f`Pg8=@z?tW5?-FcV;ZS)^7CnZoRJ4m=T{naVt+`YvyTT$MA!< ze%)6Oyy>*Yg*qIF>t=i#ri1^o>C?P4&ft(okX|&)aTYs=BZF5$l6BYA+WyB;`xp^) z=)hG-SMS!ezvA#mm+0-9vyrzl$*fWUQCO?_Q(1WVE^EV!DbcOv3zM4-9MD;q@t4qP z0}T&PlFBSiE{WJA0A-4&42Jy z4gC;pwiB4+c9+>2ND4r4KrL&ib!=6fqMw8Zy<^yURH5cv5-w4lTEFBxO{9%XNau=**v+vbYLe>$K@En5oL)n>8RNR_-V;0 zHOD)wH6Q5V>EYoJ-0iW!EItUXSlfQQo?q~kV~C7HrmFfgN+FAwER=yWy|hElyHmU-mMAQrjiK2UO5z2Q3oHc3xkaE* z$HISiZLDb$OO|5|gXbXMg)`D#U)_)wXNU(!Lf(j#R5$XhCu0VxV@at(jji};0b`4c zVA=-592){~3Mjl!UGQdEq^y`um@7aOozf1(ZD!m1`~b+c_r9KT}0LdzLBkl zChr_Xh7sYoo}ITi`W&5DXn=ALA%+;goRWozv$zC4JUpnbT}@uyfl3aAQtlkSl-UB` zyHc@e&7;^sa6q&O3wDq{2I6uAn_Q47&y=FOS8)WbFd2qaP zM4sAJwrf7nIZ}!t5}S(xnX1P)ZdG6-Fy`l91eXB+ReH!``@aiuu@UB*uU5~mA$chy z&n*Q{f~ZO{>OQehM7L;FQ2@vDV}C+OWblJ%5cm!@Qo850uvrCMn@! zz!#2D!AZz@xhDv@e3T|Ox_-2}86z|FTJ1|_^JF+R8-01TJZ`O-Cg-orM}4}+VL~NnFb?s(p zjRx7{siFm+t2!ySmO=`?yyl#2-#wdnZqAWdJA-GwZmYA#_SRvH5H=I~!I z-QX%JhLRhcPC_Zf;7?ju@}iuYcY9vb_DKp!F%HGj$JhAkN-;2@lI6_|bsSapbzDW_ zj^>=8NJt3n&(e3-ceW!yyasZc7c`(^epkuib#fWB6SL&3B+Pjt1Wz+9yDOAb!T*XsWk^Rr3fjkg1H zf@+bjF|9O*XXDl0d)!UrK!mNWP@>BTrq=_xx`^3S5%C-M8#F(>kN^0k;h+7!B>FkOf!8XCN>CK>?3PH_dxzWOV2(7_L-w@7kJIfX*}pt+ZZ0MB z$+`2PJCGMQp3(|UQe1wIB6$8<*t%0izHKT%(a38>k1i3C- zJ8n~P(5CbmAtzY$s;_va;^sXb1l6A=cSf$`yraCxmmymlo~ zypB-&H5-=s6xw$$)mY7Qy~nQ&bts>Y?fM4oCF5fNga%X^5+N2EGN;83DFFaw8kH6f z>)Yt~;WM-W2;^(`chy>}+uMIj)4r7=vFKs-Z5j!{46y)TJ2X(CiT*J1?j**UfbP^3 zy5tYP2}%r;5!&Ha&tyLchx#aC$hc7JK(_*{aS?=1hlEg(MRL4u zxV1IXyV*>0R3P&0KDLyeN5m*Ls16Zv%tL;i#dG8|Fr^uJ#7gbT+f+$Mw3iUz%*#ar z?q8+8!pJKW;9a+2OTI1gN$F%@a2*5MErR!9?a+*}?QZaa96Q7H2$bg0sjtk61U#6+ z5r!}JP#4B_H`vjBL#jwNQ}69lYgMHrd-TyWFUafK$dFQYs^iP2oz;{<6Pf*Qc|RXR z!vX#YF>e4#l@Icp)Y`xd#taP^W^yAc*(ayD3XbzSOuDy_0~8e)_k{iOR@oH>>bdsC z(2?7+NaFJV`DS7D`4UrP3ZA2N&G>;-^ebYAi;&VVdFR(x}{W zlHxV~zbx_0w;bH!qY~Wih=R$^wEP(=g!&r+SGY$I5Jly4%Xi4{SVd;8+>CcbKKwBI z^1{`ng9;`6(ZK@>_u;AwJilXUeQ&m^yV@aWX{9do8&6fcOcgbRWt$;rj;|<5)SF|= zVM-`wi4G*Q6Y)X-EGLDNUh!^uN0W5ztE*1oUQ zc*F!<=ura%h<%miNEv6Mg9Ka=oqaccnUdsT4_~-Ey{k(T%7hlCDFU9lwnXhRVO;); zhUGZZXW2NuYl);i-CP@(bMh%z86jA}}7(K}R{Z$CD5=P{VU-rk1RO^kqc@Ulb&3!jtoDqlf1~|qaMU&vGhw%`uTK5SL z!=nwoYdK+muX6oo4+@68bIZ2S{M4T&pT$DtT_ zS2XOp)_teY2%6(WhkYDx4k0OTF)M&uJ6%;4gJ=>T+Y*m4G-7*ZH{DGu@6;S>q~kS#GT6 zn@h|}HrY~_8gc}2d=bRbhjbN zPpUV#K4I_EHo86tQS zoIg}Vmgmk)5ri)-JGYw-;4D)uIDCw&0|gz#r|l^3@!jm4n8v{-?*MSz2%8x z-mnOpfs=Iow?!7~59te%o@rwyhibMB&X1kukAKzY7(}t!67&3PQ*|Bj&e^*^P8G(- zbS-2LOd%TcaFIkFAcUc>RGS%etx@Pqd^YW59|gr z>TT0o!(suc!~iQw4-=80UnOuwV9UK8@W^M`Bp4P~n63(QU<+8!t5%%Ol4)U3v=}*M z>(@O_s!cMr-!QWX)iGq-PS}WpB<$z_iB6v(7|0Spa?tOS0TO z&0K>D*;A6sz8?q+vw2Vrgc#HEkwED{p?8Il(6wEz7WJg1b>kqiWfa!I(QX9Y!s3ck z>CG>BYTd!sVt8nLe|zv4bc?8*<8p_h6U&eN5xnM_o)7{5N=uoVVpYy+J2u}_IN_{s ze7ZI)Jki-uE=K}^iSJ$%0q4R7bVHo1R0U9*!CWcqxo?wjhOq`8SXg*iqB5WEZtwz0 z?lk6Aw)ZBV3J1p`lVeQ%eAsnE+Qlh3evXcQ)t% zU{KOyng(@yr$Vj2d8^t$ssulW{H?=Y%m`6e#5{g3l6Odu9h9oSGuK?ynqDPhAJaF; zNASQs&(C$@0<=UWg-WtJ{!RC8fc$To`36QjB6UmGg@sbZ(2ZZgDxc485>4 zP`UnYg98rpXlu9pfMCwZ`OYhLBi)|B2pp}=%3D485P$iUgl=<`cZYtT!HnpuuBp8f z;PjSNzsq@Z_p2zBv9VnQ?bcHCaw@H0Iu7)Y=kL6C9Cdmy^}ad0cVABKQkXvxx6r=4 zYbnKTt1Du7=k_?n#BlgeovvY&Dfm{&xf%9QAEw60+~oNkZ+4sFE!&hfq@TBHl*12O z*@XW!hU95{_+i94;~>fR)9i_5UGN>13uhpozZHgHRcC&FmOB%sP@8e3$PVU)Y~1;G zI?9=DwOhF7A0@gZ33|tQSLQ3I0N-`xF~;@bBxQ_9nuk8s*VrUGPO!dF$jZI-dtiA< zQ{%&etFmXK)f2swoxSjPih>AX%$g6UW3_CUMmo7LtiQDhQpiH3;3?u?hNorvpGHH> zFMJ>R{zCoO1+WSxCSto&GAB8CGrFtKirVNMMHD9oU^+ZezaP-RMf&);-(sB_K0aPZ z^0UtSe8N2X$>y{F-97hZarB$Yh=bhuyHY$KA|&;qy)n|P7JOyC#f*UVPz6Yk$lc^xgW@%{~^T_aDc4yADD#WkOQ*|{@_BH$2C@T+M6U%r8U_Wgsf zl25M{MGK|!#+h26m$S{~gSi+!;70s@3|Ti%z&Ek%>H{c|K;a0xu`Px4waF)l%PCDA z;KJ|C{z#ZFvxM@swV67&vyQkcdf>>Fb0As(eg3cY){oIN`ixZEa#L>1cc^sKSSVq* z1MvpdGSM_#_Yi4HP8!AAwTWTmgYb)facuj5%e=FV*0wc8|E|!`$7jl%VCJ7uo0C41 zK0O}psmBrvici{U8z}~6jr6!v7w&)ZPl7RRrDWH9bMwAeh=lyo^1-N=tJ>sX`u&lO zd#fmu-7g-b58f_VXN-8P-LmD9=VcM7Ku1Ni* zZELmN_J6m>PN;vJyjq}s!gDrnn@E*Q+|jZmj>8+U;>#vrtLCe}Asgt9F;^(r*pnBS zV-8ZSu$is@l53bK`a1Ev^8GT`xQ>V@jo3K(Kun8T(}_S7)A%f|d}=utD{A5BXTE>c ztU>y8_a80)<%#la;Gml$4ic?R2jP^}^R9xXs?1$u4vd866Dfgp*m15AhYOhfG8$Q2<2c~W*otVi4i|Vc) z%qPjKWguTM0KjcQ=qh4k1Apl5Mw5g2g0gyaipappz`)4J$iQjGWZBVpX-?%E3H~gb z@t$rRIjzrwE2H{{t6ixIAHjij#uQx)oC5ww;`A>nFif-e(+jwP0a#Sk$JrY_%3k>{ zep!kYDj$eTUNSd!o-z{3Ph&qdwiyd|EiIbCCQI{~8KNoeJHr!l%=SJ~86yEcumFvL zSQ2ze#3Rp$DCNAr*~=`q*i!n~N~5vn?%@LGWJ}u|-!DLRs_;2?)zGRyX7chD8Ww)) z>i_Dxi!O25+O)`n&Q0lkGhej(*wGHHl`qIyM!DRxTp}eFu?mKnSCyv&5v!f!#B+2^ zil{CuBvf$&aq{brin%CIqYmCVROsZH2h7T7ae&2-tGd3-`&RWfl$_5XfND=OOb>>( zerh;pHD!mBwsE+h{9&ezI_&ndk&|CQl~oVw7iv)a4srI9$VX^wR=(D1gZ(yo7Bi{_ zVcxiG4MhCvDZ{7SI+_yoTh`jx^sM~Zx|2M4B8!wqOl#h~36@03nxjqMSRoLSVJ|K@ zvLD~C>lg{fG!xZH-#HJpuYxX9WhcD7(=bkKra+xjjQc|=Ave<0vah@ml}65URgCRx z9E~!lqGt?ol^X5-X%}`g!0k?Oz5K3i;!*+?w1aR4m~AmuoM%qcxDcx>Xr2k~=G9_L#1F{Wls zFgB`JjO#=@@lesM^Qg!K?U00W^7m+qR#0#szbEuTKE9*%IShCmPmYK%$ai{txi@Wa zi~%$|{Al(}ayEEUyTv+yvdK~oc$zR$X9tmvsM8q+zc@NrIu;BjiY(G%Q;G@(w0|&J z1Zw&IgZ$+$shd1@UjPT3gbMPr0u7G^g|^*r)Up6IgZ%|7)Pk(vEez&JUx~%yB75`U zGmaLU`ahOF@+7fma7Yj1f2%KcGb+jo(eJ^%A zRDsVY7Ud?wK4l#nv@55s-%2*6ZoDyb(no%x*yL=H;PA73zv$f_>9v!npGCZeUlyb7 z{EH1RyBXG!1iAya0e#bpI@BiR`L=)NDuO;=p+)qvQjFCi^3q*@#EH7{#E7f#)1D@E zcg*MBeeLgBe}n^9`J;^%$$08}PtAJf2qEN;w8~h{5$6dOT6B(7lIxNJ`7I;nYzg3BGfw*Yl6daMRZhh{6U zQ+gD0ilzUubP9xclZIMT@V%30L+5rIG}=m0zkJ{5*24*l4*6lDY8kSyOY(}pD4sXs zWG@UCn3d?UBy$bV+<74iJQ)o4=e2K;vT*q_XL1j5v~#mFW-cA_1GC`9N@x*Jo1*gM z1D?~@wf_xIylmr2l?VLdPBTPo=93cIMOts(InohzH+alzfAYo1zfUWZ1AoipIx@_K0AB2Vd)X3>C5eP z0c-#|7dkzWmdsM^yCFH_&t3@^r7Ry@HvFafY41kf6s@)W#Ag;qe}*lGY5s8>YTvj# z5cptPbA7G_JT3qY3UO$tpmzolYsF#6OdJsM8kyWIc1Qc2Y3VHT;^)67L| zf;BW8+7Sy~gjegTvA|WwsM|ZusZy*uyMUu?^3?XV*&{g%;^p22C_HDM_Nf21S(_;G zcVAj78b6*9fKgU*lg|c*1Jpu_s$-ae?(O@Uzg9R)heXPc{Bx?~!gAM3dE8?K#5$dk zNT)I(N8M(d2NqKtV6y=B&jJT(3iLUv`5aT-#w0TgL%{cB{`+|J-{ai>>1dRL-+On&kTX z_@0S%S$I)R4qH2dWD9l7kETKPp!8 z6A1}F)o0ue$d#T$iX5V)Z9>pw-kqrPDaky zh9hMBx6ui1eSX2eu<$P7cXbTwL92LO<1jn`p7Zp(ok+VaL6W6t%5T!W239riqgwn! zgwR2C4v$k~h!v5G zWM?zH*Sm4pIt@IhRfok&sBI0T{jVoaR^E>tuwXxnfFpUpo4$ZWy}ZNh zpXhZ9L3<(_H<6yQ>gIqC=~ZCZd;yUP{v|4>n!!w8H`w#T|B)N>%ttSBfLnP8w(TtZ z*+VSgc$f>8NmO@ zdKfK@yij(Psa($Ii*ei)G&tNKJr*A>!(gw%$tIp|^024jv|sU1SX9(1CFKLgloBs! zn^yF6jGJQ`cH{K(Sy+C4?`$5?a$^gcvxq(P?$=e)u|EfQkuD-NiH4X%G4aFQT-$-> z>3sFUFon6wvX_^Sb}2NmV%bzC`uY$cYEF=ZOUA5t#~hI^7Q7GUMt#c!f^OSl+v1yR zG7DvMqU+H|3c8yM-&B?*bcf+~irK&Mxzw?qxv+k5p~=z?;0*i9rhWoDHx*YIHs12J&e3>6trnw_RSd;P|mgPs!QxMtrGY(U-o`sX6H_JSa9NrSQX3vT_d+`$mBD&lE~CY%x3o65ntWO}lPHFML`gF$0- zl)Wvuf6Z=fBdk)yglWyce!mAH#Sd@jeK;RSLY8v{+>BVO+VRQGBn{I(Hc6PC?=nBb zbe=<0e7Jv$&Bx~n%)bcFx2>epl#KMyOXQ5PWv3)r+6ceNcK={E{R3~3P($#;`D7U1 z%mJu#uS-!ninqdLsoMpiZ@xmLIwY}-!z>P+3uktn>IrV6dx@ceR7)vI!Pef*=>E%a zx#nK`c63JRVX5t7-A%u-02j$qTGECR|FDF|YNaB{1Wz1no@k+J))Jc9*huyjhg>Wz z)S1dORz>=CJ!~svluuE~!^)bbj>}(ZYz%8i zLpyq)7v_fR(*JyuCVB6g;fz))?CFXG2uuygW9!H_EKH1=Rw*Wv3Fa(_ki}~3udzaOp|8u_XZ(OR14^)JpwB#(Va2VUA)=%)nZfGCE)pQ;weB0^EU;b5M;>Un9 z$@<8QqboTxbG@v8ZSc0!0yZ>|{td_fek=M_JB@)ou_4+LWanL${b2N-(&l;Mm+6U! zvv(mS;_-=7`uDbj%tTmgYYIqpW-2(quvbq8EJP|OnCG_FvCIHv@vdowH_ z*B$EbL;ZhX;0CscD9&(|aZKkgI>(e@L?d!TSfcTV!R**%b5~zwd5lPCYsg2IgS+=r zbA4f&8p3~Ca^2*ddStu2h63p%9NZ42Or&NQx~jQjC>v)TuIcWA?m~Xav0Cl%gf6Ik zf@l2=>^>}o?ud&ZBuSD%BgD(zllS{yFr|QSWUrj5@C6sN&{0j4G50jR$$TZ)HH!&s0KMyLiOfwsriGPH= zlOD0DLaT!S?pVCKG&T#Nv2{k{mP*&`Cn3u2F2}3316N2ZS9VI%H%bic*$Eqs&o;F@ zzTP%Kp7_9_E~ELY@{48Xj3UXF-%VYZQ!v9&{S_GHsH^A5G2cMHX4=|OX*xUZfqEm~1-8u2xd?VOOICc^aKewU29cy{bY>s?2A#ELZN%5ZkovaqE zQCE7XWksis&YYF9?Ap5nIozK$sRnFLj#5)i#fE|2y>d|!3f3JO z()D^{jG%+iscSQlzP9&sZDLeKd2{}J>mihYj7J9JMTb}*y8$Q zp=sfD7yHjr&ZSHbWXry%4T0YKp3X>*fK~d;luUHGdV;X$t}KJ<=tXUiNFIQZ`NdQx zTRN^wM;mRE1<)G4#0FJp3FLO}8R~bNI$tR%TxIKoJ(bXDHG__lb}sXACdnp;Gknex z8Lma|er1-}=Xv8%TSs^bcau59f{mHYu@OEw{IPHB$`+(ee8gJBgTe$)m8wRd{oO|i6x%B#qMSNcBBWjmq@#r#YBIwEB=hz8mvF7>KOkFD0+)saP^JkJ zX8(*`6o}!98sxM=mK^Wta-9@x{*7;t4mE4Zz_pvXzl^z9C`pio>i&hF{p>LGy>MWN zDc;nJrsV_T484U}4Bcpvt#U=?3QC-juzsUDch-+~>BixVEUWB~!^8oVTs`++Rj-E1 zE3w7y_kge9Q&@X?t9P@+RWO%e5jA#D&Q-q0%heh7Vo1d#WGK>eiH3Qd(jc>{wE=gT z^P6agNUX|XeuSg&M!X%oL?^iK#n^;R54X zvLha~gtkSVJvh;;7kDvbW@4A5FVw3nN<;WYRKnJmCh%B9U>1;`OzOtAN( zJ>JsE(`&-P)K*}LTSsr``i+pmPxE;+*V8%i-_(c%*GDuhZH0(*7YpYT8~C1`z&_8> zI)`h1Bg^|9IUDch4~wS!*YI;hpJ?#wLv958J&_A`5(xb8_I6|)UhUynCD6;WB9*=) zvnfEF&L;T$Rusoon=rd=+~eo}0GmK$zb3`hOq&%5&`q~=OdnniGbtfp$$fpzu{BxP z%gK|AV<`auXhw5mbht-6BrF=d`9;S!7~3h$s7}u|VE$gBlH9SAR{n?sXMb=L2!-0y z=y}o9wVbF`B=46# z7d$05A|>tw=5!p+-okFIz1d%1^`NvUEALp6GwG-Q*zy{xZMKdyt8-Hl&t*EG>6??b ze35)|aw*mgRynyYlbMyCt`a?$>c6aRzdfo(t z@FqHEA8?D!v0Y*p(04O=XP89OSH?PQ!;4`cd8gw7=%95p_c49gkQyCzkF6x5sZhu- z0Eyae<5%Pf>FyLz3J3vc_og$|v76bTZazPRs_)|4Y%|X~<%a!tIu2(~xeP!k9QuKI zzN^VQ<1LKo?vCN=D3#t(%ylW8)UEE z3+heJjvsE=wS)S}nX}kc!w5c_;1IN5U} zPuw|s%rcu{lN0w6B=2%eH>`diVm5(bugQT$%-^jcckar2Pfzutn7ofJE)EZ>(|lX? z)DDGrmhUI0+@mWLpy>-m+W~`mR`sEy<4-+!NB!8y8~9E6N_WnFV1wNcX~o2SS7@x$ zx2a?LHN%#7bjqn7c-KzfX(-RrOty~UNs(dgU6LJ(JBU6tHs*GZO<@6k`(3i{K%x5i z_YN0!t*v3_^nK)57f^x#<(_l)m~+4??x!28c8iwTTD^*Cy zIf04$E>Yj;*~#>j8Hnn^7R?Rs0LdO(v6`!s_c8aVA?o)DRv|PtCH^2z(0VrI$^@#; z0Dw16_8n~~D18^l1a$bAUmreQwY%V2DXrxFttoGWLhe>NVz)bh01b^6us?2aIO(In zU`uVRqnYWM$?B=3l(5Urfze?E2pimnCcsa3dfoKX8xx>V6>e%^H7l`6(t$a%yXYY|J?oIW|Tj(WgrlaYmspuIdy04Jj zJ&Xf#`EIJZeavx6QDjzFOjb`04)#pmwk5OI)!9Eh6AlCe4qqUU^aG)QuFrp=)8@)D zsxAW}#M$-6sZ*!Uo_|)1+V4Fh>OIsaF)l8WedfKdW{!>gzV=}g1%>9Y#LIA;eZaER zLYHo#?{@NDYtk}(#cu?*;Jtv{{bhUd`;J`2x5-t5A0=n1TO-~@KTr&#k*LAFn6xUE zO__a>P$(D(1cTy-fB@k0JJ{1xJ4W1dbAVqjLqP#GH#J?jfZii-Txe=?TFnH2!u`J; zmU;J_vmdwxRGNLQ+I8y0v6)sa)BlKuSx7IS?oLS{w$;<2U49$vSrw1p>@*ED?Dt3f zsTHpwEkH&}$~2`Yxe$(oQYn8ROFMK_B_x5BqO-_c)Z;dvXFJ7_~G$pQdtym`*q z7o3CLY@w@X-rF=xpYBYjtWaR?PNDtfKPPYZ3@c@~iINX?j3)g8h@h&Dm<6%N<8geb z5#$IgZ;pwCM9J}zTOdO)V5D&OUzh7mfZW}$i#O*%g#1q^kLH~H!v_;`3%#l|py^s6 zJsE*Q>h3`0g^yA9qOC`fu2+wGLsI#TPzux$uv?U6ya2)2D*NV$Y>h_!em`dH3egFL zC6~Ul`FUpg+y}W9o5b9cP1nk}OV z-bwaA%V70b((fZ6BDKESeL=g$e*d6+JRr1FKpglF<2CVEFrXxuAQYZ=;WHEOvL9vQ zYVI{#H`kgVi?;NNe12l#3f~RK**9Ec2XrGQ?xmuo&Qq%u(!-E{W(KdTDvD`h&unmb zDkK0xnO8(e1Z%{MUHz4ocq|Y|Br?AP#1FCHcG2g$GYc#!0rF+O?B}D)H?A!#tS>E3 zIL)vF)O==n;oFbi)^RxdhU);R&=WZOS}N)q8=KXa(>v24Bj8X+AV+`J`vFLUkI zjc>1CzjE&CMIOmH`;3cLK!0B9Z7iYaXnJR>M&aEFdG4wrb}=Bw5>giKh}9$jB*%?{ zFA&2}j+Pfj9KV|#bNFCZbknpR>6S}!S9Bas<+08@AJBeKv9yCTrcOg4xqCb&eh{N_ zEaCGd;+A+jO70LH$4HK$yl^b`U;^<8f`dVT&S6AHSV@jQbjqnnq`NHi1kSjZl*SXS z>Qnkglw$6l=c+0RTI4L8dF>;PM2tCJxa17+$nK*cLm31dOCG(9Y4!y){R|&s<5V0U zvVi{d4^^e6zN%B>ls=Y#oUgDU7NPwXRHGfq(f-Uw?czOUno|TQ1B~HNTc87$U>=rC2zp43C8dwA4tU1s-yo2ra4obv`c4n zA?y#Wd-Mw4`gH>M{zguvvA`1du9g-pGs_dwL!f$YQH3So6GhI6CGMcq;Y&CGXu@t$ zI*vg;9&pG5@4lEw+#bVQEwPY)jg{iEw9PI9;hSJMm4!6p4*GHgbnPV+rtVFQu(3QE z+w-2kgGRaMhBgagc|D6bBa;vaNSmvCY#LrvKNe)HnL73NG5Zac<9HjKQ%S4=Dbc01 z{Lit;xYj9^r(laW-C}2BvRR{=P1L5oES|8XXIV9kS`E1CTT`0jO1WpP;w z=*`$#D+`V4Ub^dDDj(8|$5JBzB}%Bqoly$Lm?cw|6PV}0X^(yz&5r^QzTJ&eLA*UL z&%{-g3tU36UGx`#5)k6{;x)&#orz3yUL`XoYAl)O8-WJIkpB5vw|+aGPAd>t&~Z4G z!Yv@|GRu*21@yYQ7F%`&qdGG0UduHE;^@@m;=K0K^`wxKyPXGw5WP)oo!Aa1e;#}U-Vd9^c<*^ zwF5~_r6Xowii40!g;FU&T23SQq{De8pcC323@xpjJbE>*=kR+i={TIq;3gUZY#(Hq z=zsUMe({wiSMB}%wE-ZQyBCqXC&V!t2lLw34g{>5>GWpEX9W=an`x0So(dpQqufYg zk7GcOT=TeG(|QeD&!gzeIu55IkQ4V;dmF3DMejQ=9&fB_+*Xilen&cC$Ab1^j_5%G z#xtR`AN4$wPBYg-o9RvQ4?f9rOxhKm<0KxbZB|wa)WyLG-bm+E2FpM)`yk6iHO%iuM|fO+{{QE&lGccSSCey-(tOu&GC$fehY z7327wbWWvk6EgcCtIEcaSqi3J^@LpW!|Z1fVu1%}rbpA81WmW5(ullv5+dlif*1?v zPtNLh#8YbqLisysoJ!y_lreFy&(z{f0Qz3}LAKg^rhD}43LU|aUNmugI>k(vzV~{RWDDL&xD9aL!Tbfd0bi`Z9=KH!J(z|0KZk{qiTu z4RWs6DG=;!2eFr4JjqR`G$SY9VDYEz+jdg1b9`5~Y93D2?t|}i9L~Y!3#;V$o4qaN zNZjjRm_1&{M1K?DNm=y!+UX|OK&Hc1^B{=T_jv*tXefO*zU@{!Py*&!mp-59d^C=8 z;Q3%4hzJZEFUyR3W4-gq(^7Zs6@}<^O4FO41ELt3DVo3UrZ@dQL2x>)&WTidQ|qa9 zD^}cdU~;{JqOa*VoCD385!?&b()-VNXOj$fk>uV ze=Qmn{~lF8zzk%4R-Z?7tQf$Yj>9>~EC5B%otMgV3H|s9D;zpqC;b6lLeXW@@todf zl0y2N9MWSo4@kTw8okT*%GBJ|c$O7>nsE{L3mu1ZV38Z>;3?BY9Qthr z^CdBN?{5VP52NT=@X~54%a=WDy*$3RR5DmVcck>4`rNoap?oxsbFle{N}eD3p{iUQ zpS1$C^@?ruPk>;1ZQB+(Q!NYW>nx-LZgnmV?1T<}oR!Iqr_~CC!gU>ob3plYLTao% z_e1F(R8$w^oB&VuiruxBfWULTssZ?JEXj46!c24lN7+h(#RmjF?9OY4AA9E( z+DI7%;4&>|raM0DLxzS<2B%GCrlFup+2n zt<(!d1TC#MyscnC@q!poSy3O{2f^EmDC&#);)D3&oPQ?WxJ{br#ZC(U_p*HmYjRd) z;XpZ_JmD7NW>ZI2aIX}7I%{Qs#iATj6Dxb?|6_X8@tlX*$~AF5uC+YhM4=ozK5!jM zN|wMJDVVae&?ho6U|~KjGBpt_t8Ds-!!#WqYyy}zZO$LEGJ&Gs*F>QlH@rd|n@=6F z=bq?LRPc|%6vNap{m^52bUloo8z$!$Qs1->e?4>D?!K z0N}a2!TCovl5}K-at!ebasF4z9KPsRCjoa|NK759tCn5U+4bn5h&}_*yK38@GZ}v>*SEJpBF(?Bwt6To__R2RU-ff~#jt}nx z5OH#;06h0Z53?B7b?I(buqUR9+WC+-fro==uUCJ0hpz`DSMB{Gbk zn10o|XZlQc^nfFAt1~mp_i6^WH*79O7spYK6Zby=M42wUf*t_m8oCQC6&PPQrk?=! z*B&|%J&@;{EcC46R+&A5Z%WWLGn8XPxv@5a1@|BjEmQ^p(6Ni|FQ&iu2LOA}He0lN z2zZ!Td&1`SirLK4?e3K0!xP{o&Dmf)$8GLq(G!xy_~e(b-}@7QJy`KQdZHJ5_xG-S zb*bpGTz?FfY@g`3zllO=d|vieO{kW@1cM}H%A#MLV*DcfBL4b453B>f-{L!YuYrXp z*Pc5gU#f8^F4tWV2|O*wQH}@RqJlx1HXHV8l7M4>b`-iFZ<5oJYyHgsUmty6&8bpB!4lyT^MmmgI;y&_$ufJFhlh8a9 z?cVbNorRgLugo1vEA5c5<+>GkrHj77Mrn9n>~K9_C`dtiE~x+HSu#$_?Q7CLEB?0i zBmhrp@BUqnF1s&0ZE0q;GFzqSMkplLda;E*%|vN%9)G~~e5n+y=V|K{=HBiN)%}oF zUwvb32mtsKCpI^teiL_|$1j(=bi3*-OoixX+i1wB@qTiK?ueu`Hh0|Tdfru11N2-F z3%Nx3RmYUD&y*nh?i^seKS<}@DUHo@ zu3e`KfqE{LI2K4~h1Qg~{~_Ak7jL|AVs(c1yEPJ@U&86xX1!XVwx=sZ*Oy>ak!x?1 zq7OMx8kkpIz1oBITrEs`eQ>rldyo-ai+T8&XQJIbz(TJd)1#ZDDsWois$hpY0Ww~R z&M*@&qST(5p}9Myf$=s?%%`$JdY&zGfpJEn{pBVKrLlO$ zH375|6I?(SENj;D9BbNIPGSxPtN7bmkNfZ2Tz7Up5>{8&H@Y{LH)l3iyQ3t)cN5X? zGppC)P5}?FqmNUxRS7=`Mi8W_#T?Tj6dUyxd@om@H-Y|>lxz6pxZtDd65-{BJH)M2~+ZAPkzPCteB<}V+ z&oBihNYB*_c*12&6IBW2_m{b=skC5EE=)G-k|>Cxq)MVUJfm+t>F%TOBqu+yl|MVc ztWskx&b_=Q+X-OdYK7Y!eG=$pRZ8PfUf@2T4s=ciJ@?}IXx@yYD)HjpMHd*WAZqg+ zK*&Vq=H|Zpt|+P!hIX|WdVcN69$+s5?B=ptkz+lG&9%zt8B-=ba)@bMNGs#~RP9hd zO^0SEjl;w4m<)tUL3_@6bvQwfbNkHP)l@3i)d6MLHzSJ7PoC2PPbV`Fj z4(Py!$@^vjfps|7b95=24{>hhuI};0hg3>5=ELYK0NXKr+dXF^ElB_3Vt>Sm?1E&+ z4cp{0=yW*D#vX81z23XF_T2NDJUNo-1VXsl%Zjp@0nF-kOvxScDUu{0qNJ*7jtf;8 znxWUyDUHHS6@S3@vpHE_I#Oc6yGVBG$GmaeV?u-qRu~ zPGAsKutQq4IanUvZ=z6w1}kwqyfBpnkW)-B2-!5w!y%66OdCfC>Ha;p3dMMPCJaE5 zWk_5$J~kJ*yya5*`}=>=&}}`}%mY8K=<=B}XJpxP+13%ouDJ(}hgRn^82HT{Yi}ee zFNd^hr}P*dkD~<6D}b${sdqjDI31Aaf|_dIo|8$dp*V;5ABz*DLasdqWy|^7t{EPP zv{WZ@_KG&cFl5FNbQ&gGG7ulT9CEiN01G7pgP zZMse>YcZSSV!(rp0lkXqOit0_m%gFQ(?M8D;5-W$pjM{7Wr59GOc0bbfO0&S&~rj4 zr~19`)(Su@k4-;#ZDed1HQ&|rE3UZgnx8^uz8xT=`!ikE$wX^n0(c(J7gDW39j}t; zVahRJ=>`f)@VpBwihgb-g9EV4(IXU;ay-vug;3dZ%@9R@>3}#25C%xLUfVx6HcWE% z-A#Y<7Dx3*uDB(XAHkTe$GQ4w<^;y(Fpkf8C-hpXE200^-QAi*v=eEHVx zQ=bDVB_B0Hs@Umyo)B|RPR;ob=%fl~caWp`sqe;y$4M-&Z+gp{Z=OAS_S$PB%xQpx zq1V?uq!&qBz{g@*Q8Ft`moa&#JvK_{0{f0A4?7Em%kVK=xbelBOd3d*p zLJ5$EfrrmlR!***OaR1>w(efpK!;Ad;&dC=imHz%^pJ^)Cbd+X%MlT)7ov>&nPLN>L%IBHU< zI4g$~wf>Aup_l>U&~(c{%l=qwu{2yEVQ{s;aIQ*BO7kwbYX77ppij9aUA z3+MQMk{Sf}d?ETd-Ka$^e#tA!EZj+VP*8&7Spc{&<%oXn!#)7}2tzu0e!ARPn^)wD zC>r;XxED+}oZr?z7HQc(iA)rILF7GW?j*{{52-j9FF~X*k+QL{(KXK z5)_Ze0M4W6C*Q){{RkUuf?Db-dp@BU9OA#?UQ)=UTHh@L!z~A5aV|Xp9l9OT;yY^X zT%J+A`POOTYB*;xzECUM={hc(VSx_4Qv&2J!0wutyY~r4Rd>hp`F1?d=ys*&iYnI2 z+e`T{dVbsZSoM}#WO!gW;?wk>g-&SA=1n<{H_IL3aq^R)2<2ZSn~M?AcYG20Yo{wq zZf}6Dd8Y)%y8tnANMAXb1ZY00OX*~RJFv(lW$%zJ)$?2|>8|Is!ufdQn#-<jf*>&7 z{wa^t5)pNz;Qt>eRSwSB?(?efdJ}~b3^(2c@a5F)q#PFmSUQSRI(j~_?Ya3M&t*Za z>$yfepPrkmq3(}Y0Pq0GZ-4Y>y1;~?wcv>@5|~QF^gQuYPYZi6U9>Nnt~c}K-v9kg z6iP6>48VW;7KZe9&I5#Vhp;)$zvlp>|G7Y>aYEg9k_((0&ue-<_7e{*@T@ZlG`Hw$ zZl<6C*tG}PRS^TS+kM=p=^uRtEPbPi5+InnpMM8MKev)Nl7V+YP0yA+pZ)LkF)gS1 zx&*_+J;Sv;AMWo2NAe8t@bSuGy=mCXNj9^w? zY(o8?>v4iR>w@uZDKB%CXnD16GB82nIeK25fy;o0%*tC+p92e-zs7g-{MzY`#62zJ zE&V^2x*(xSH4Yj~pLayx^G*#ZuZ1{e>Ap`cT)05ef0j;Je>c?3+c4*PWhL;^ABmXj^p?+{XDBDVSx{g=5Sk^=8?_099!*{ zXWJBAhC8z~%M7iHEx43^m=G0I*eI$iETf{bqF)OZw0^N>%$k`5LPjeHj>4ko2VK7@ zdOqLh`{?7gXFKi8`{VnfpVxJHNAG>!pP%1d<8=U-3+v>196#>c$&hZCI8D;Iy}?#^ z-=V@#+PIH$z=6F^eH^X>pI2B+ifshEn#050>I*OKJEY4r7rMnPeWDwNeZ>ukbO8td z@%A2Pw*U%#WsY2%d0WF^><+h@0sL_i(qpk89*^5W^Dg)#;|>ZfG(FDEX}IPeC@pe*W4lg?yig0`Lrqnu5>Dn2ko|mZt$H3V9Bgx<}#Q7 zu*G!7?(u@O*@A?zhIIz^ly?Mt>d-}W&YfV>7SIqX8PNrw1Av1&aPC#LwFW$NCn8eG zVHr5MTkTV!D{2L}s>1^MSB5I1pVfQeiehz0A0`Xf16ObGm-~{TJC@4jGNg3>f`-A^ zC7#jKfp==&!LxIf_j#flfGL}{kOoJ|{nYyQATjRh1-9B>T)@*jgnnw>+oh7Fw_OMT zCm)^^{~+4?=*T(6@8Gt3^wOOB_5ymK8{2%zSS*<(Kg??y24lB)ZX=|};(h?Lp?znR zF8D}GnumQ@Z!e(6W-M8*KLL0iT1uRg={SR2ua4;mk;F3aaABKjiVkpLM+?9mDD=Zl zI{H>nb2rnP`*sr*FzaGum4IVUu`za)XRI3`J)F}6?DOr2c^5`7CgVjW?4K7<`q2iV zeZ~r$YJ^5=UvxwIQ`<;JPyRWzW=@jlXU$1QCHDn_KCBB@iM|H(9{$^c2;3$y%IYVjro*xl07}D}X1TSd>JL z1Gu-gw&;gKvlU<|nfL{#=EbDH`S89XYq~;!S`e*I*v`m+7Nl{cNW7c;Fx46cWB0iJ zc4@T*iG`N|`bKu(s+2HsDu8q#PMb&h_fv%l+*yN3)k+*{)lUODCAM}i0C%u(SQf2% zhV1PnQg-@L&@okb9#g=OyzPK4jMRI9hXpa9C(`6+e*V`Q24fd_OA*q;IUeAIV_uJ= zU2qQIwBkB%FbRed#$B+39xRnZ>Nf8q(#;ySd_+H`9$i$-eg6Oj{4= zMr@&zN}M`kKe>2EZBEDpfi=51^gjmT~U^9;~T^PKxN@`tA4cGz`YBf+3wxC#XJf zGkw@sFC5Fx8i|g;pWx6cILb#Gi~%zHdSMCU9zC1|j*jvwlJskU$AOrFbbf`GKG?!@ zfK_)Q^cH->Liys8v`!1%;um1p+OGw*{XFgkB8jwpd3Eglk2DO%?t)8fH_|Mf{O=D_ z$8-`F3sW4Ag*dfJT#33i8uv04clR$AIU!ai>30JzudCJErAv8}Zo0L~gMY-hak8pM zn##AEoZ4}NQP`T!r7^zcL`+H|QWb$uKVbo#vHQFQaOODG33*)=OvkSBE(B}l&cXg{80KNc-CA`;W2=ow561NWb|Ab-wZVGJxgS9gxGBZ}mwTTu?1>#0%iUh1FxXoCm$6Hx2RmRCUobmRnkLcVR9r zwGHyT`(%*~wrEO6hknCzq$*!1bb1B{U>|J;);NrYEmR~7UScp}IwWB{)BD!@Y*>bI zd~gfEJri-AVr=HLW0I!Rn9Pw5y3=%p$yp?zmsnb>cYz-4C5(GVvl%!!e&%`igSf%A z`OZwVE4%{IQ&iz4OwsFYPY@jQfftXxu?YaiobqUEH9k~Iz_x#R`JLCA^VF37s zX1R3cyxA8}bD z$)#g<=N9zi{mQ0)z&{bV~TNi z-9a9}rL4Pu{7X1TPi^3?iCsQ6HFS`Z+G~dSvq=LTUw>3xqE$yQ9Kks_ZzN9a#a|`> z@4&Ab2IF|)qq6|6{FH`t>AWHg2mW(GP7qs794E;;bb=nhf|5T<2^j^Mi{{X|ODTGWj>{lzC*#13q7diucvNTc)e%KfHSn3jOM@*B3n_I5!6U?f*^b!US%!K({1r2M&^;i&rYBWI!)@R;JF4 zI-a9Cmo7G;E6*Q}QwaV0WCl+{hw0JVlNCb83y=nS#~pitd94A1p?o+uBy(6A494T= z+lkJVQ9Iq3dxN;kF#0d*tAN0Y||q|sK^xzmz+={s@m ztAM8qwsdxv=fI_lDU$Tf!*R{E7{{fadpxICOw+jUz?~LhA_T>UbsJ5Bp=>x`ORiu& z!kQw+{jUZ92)_4|hQT;)c=rc@mtO|p2aaqgJ-qmzm5$~c3tLp$HVo;|k)(Iva2zJ-vUAsY={jq84(N_5(ss9fW<;nT>7!@uOa*7> zOIPCrQRZ>Xb~xbDMCVBd0B_d=JivPBjN^uHp8{y@JP$T1QBE*xK!be<$SALjsqm*daC{+NcrI4*d1;7rg@zc~m1PhvBj zl86O?|1U}(A;()?7|pod{+4DEuI821wbjVSc;Ps7nzZdgm{;>nyBGY1RmJQ7LFoC#q5<`DVd zU{9knjuXE40pL(mQ|GGy@WcFu(!&uKDt$z(M{lnb*Mn~QoQ;gvWa}qgbw~Ns7tH|Z zo7*Z&l;XfEXXLTOGH~RTC4DZgsK#B$(ZEfoWtOFz6S~Crq7tv#a0|_KGscN?h;i== z2&nUdYFzQmyh2oYB$13{dGs#c6zW`eWYr9y|8V*~08~F*ev^j5*md3=dl2B&&Z?%~ zLu70wwxM(#D%~|czpaM4vEBvJPWL(?lbIy#PWn8HQQZvK=}L+ULs31zqGGp}2d?rJ z0P5YT(3{O0n=8$=k%*U`kPI&X=%Zaqq5Hy$$0?PomEw1RpMWq`DZe+p>!M+1^$eB-&XIe z(7`q?uY_$omzwu7nXj)Ak1%hS+hhy%&_1W+FOwAApt4zeQ^kIbM;X zyU4hVT#z^Tr0dT8zLD`7Z9a{r8AB17ry^o^BDP=!><{n@;W+yCKzla;+&55NeW10q z^*%}Ix3G6w7`x2%dp{TDJ>6SXRnw{%{_A0-(t`lFwz}n-Ts!W27WAY&S}W+m>kO4#3NwoCSIq9!h3;-q zT#pK8$*63XREb|yOu-($d;OvG=H^tAbkP&^9T!Z|Wul)My(FNYJz-QhclCz<>grk~ zqDv&xK@!cum5GOS#J7t&2RPI^SWRiIzDNq{x3i$m*iF9v{Xu~HI;)U9Z@!F5A6F$+IdKJWm_(O!?%CwVOdRwPHM=jQmmg)J|J(;)udJ1tYiYoEPu^Ok z@|WovvXiL$*xxgP35)LP{WZA=N0M_Qb8m*qT(?#q*atkECx&qeYTqBZNNTh_biand z*d4z8y&6a2#;T~&_uh=FpEj($%Yj&(Ow}Oy>kZubI7U9$LT>^&i6Q+su!9J z?f4YwzQfI`&i!O%DQZ`)h-a=J5@$6`{V3khm8LwAS`pBpS050ihJ{sqq zNLkjmQR~_!sXM1-_l_2lq@#0>$Ggd!YiI%JWUNeAr4-O_()>N@X(;oU%<7s>s=*=l zOdM-)=-Mk*+kF_%&wPaHT*2VLte#EJFm{m-ejmFC;J&?8>x?xW!kqk+BVmQoBi*F7 ztUo7rB1ukyYOryTBK}V^UsCg-(_JAjb5|bBaVgk;qC@Ui#%s?nryPFEE0} zdle}r^T1y=0652?Er!Xq4}Ywn$7C}Wy_xPi0eCpu5LMARI&I*ooZ~4g@T7z;KgB@o zxpHKtudA-IIhVwJ^^83KI;nK-?rUg3*IYJ!g2&;}7J#il+B=UWQ;UF@v#DfUGVKPj z+crOn(?u|gIxl4ZK<}%PeZTw}4TJH2^XolWJ*sM|QZP0qDqZxTnQ%fU6HBJOlGMSv zyu5tQwQFlfWPE}4_7Nk+U>x!JDne&?0lc1&wkS?pKmJgDkJeN4X1ec0;KB4&wAA9- zvLc|<_)H&0g+*m2y$`?=?TSicarX83*B1At(jE%^agE68RDXAa%~Y(BE(n;NhZ9*n zhy*i{WL!4wf)Mca@W83*9ECpi=6+r}Yr!UB8UHuePvifdv!v#(RQkph_3Rar^JRtbbHo=*LeoD|nzCi@+TBo)+9*-YCGP)h6#?kuxuAR{s1n3{BYc9FC zmXNkt$X&UiTE#hvP2OF1A-OUm-g#cee~He&l4n$9>e`5Nx86@a`Aqob`<G(U_Ov3tj+|YKo4+luPT$ z1>niqW|`VrGe9uDUU!ebcqYI#U3IaPg)X#^N7t15uU%0KkWw7sHu5QEpRzen;FnyB zWaj4Pa>>}-k_$xiOPHHWI$v8|73wEOrBdZZ2U=BhzW+cKnLOOvOO(#T4J=V-{GWXE zBg*ZOe4*py%zh3yGQ=%PePd4~A!!9#?Jswjf?=`5o_io_Py@yT> z37dm@`?wy=#?PYai)-?<46dnguynXtS*Y9ev}*kOdjYHmrE787B%O?>ZFfb@9pHHl z;dS77Gkz$XYV*uVtgNhvKjn-S5Lb3X=DIb^&I9N2B+m zFSUemr}XZ{;ydZHu`xNu|Helr;s4~bg+eDj^HplY!JAEESXU5<#p8)EC7w!WmX;PN z*-S1@n${d%m{7-QI}w%cJz?Bg;}H}s^*{|k&q#BD#Jk$u?xD(8t|B$^WzmMmQYgrD z>f^j??_>Z@{#g1F@Z?m=4B(GNXf4jt+?8K*e_QdC1vGkwT~^D|%8K~Y$}TJ{`ps7V zoDP4!i4AkJhS_3wtH5CHY! ze$q}VN+g1sPsoVEkAzoH!!>w)O&ybMN>mAO!&-6hecV_t58|}jfS>s)T1P;E54E{P ziPyezam(a2W!nl^vWEP$z~VC3|;&!9jB&-5=pHJBlDv{0FK!9R&|}DaaUTUf%AZ8L7nk`^3jv3 zLPz#?KBA`;bO5`Uo#I-XIuV3E0D?w;(sR}To0Wj2wJ4^AwmHYfAV9ZSk5TjIHU0bJp%oVmwS=DZaB4*Vr} zNF#Ft-oRNAL8;R}r=57t*=L_|#<}NO z{5^NyAu=h_cdy;T!v>t5gJm=qROrix^Qv~Wzj*1aD-w%L0`RFN(q5drXf-kY&zD$~Hau>ZeuZxb;GBPjWe=M6;7doDiIb!f!UL)1@SGa|_uem-JofYv|=MnM{t*+1*~No(F^|NQT#2 z&3)J0(Q~^M@Vq4b@Gp2qQeEhBlAcbl12a)jGgDYCs61YDeR?60shhZcmR%~ z(4ocbRiLLrMQ}Y$d$c%h4rfiz6;o%NbM~pBe(0`gxx1yM<>ad_Jorkq607cQUA1-V zFDq^wi{r_VTfTQ+q(&Wyr6z&nImre@66fSyk*XWY7dj^C=1gWTO~t+<{hr2tf-b$# zf2OQ*IPcX#lAV_>#Hq1&?=1PHVwc|;I}Q%JV->pHyGNlQKSZCFNR}WbM%E=u7x;+l<_ArI~&|O^UZ5Jy7Iu_P&ytS=x8h*~ISYabiB-1W> zIJ%Nx{pk+Tg6s5S*nK~U)Ftaxv7(2$V_o&p}ORIgXvvcoQ zZ`JhlKx_3QkGzb0c)|${Jq=<>&E`;-d84)*o*o|fQ{9z?kejZVq-@C}Uf>ixaiw^( z>&jd%J)6Q%j9ejuan1^nRxugi>h3BlzPpB@}gQMq~(y*!=0c;980Oz`kIrl!Le(_E_k!>Mu z3%oK(*9CD2hDzRE*`?HZt$;UbxMwv5yaW&oh45=euD#at#-D?qSF2OH>R!5edB92w z0Iz8nj2+?K=`(@j@vWBsMpM&S!O;elFz&Q@dZ>Xsnh>+i=>op_Z<4sT*Y?1%x`R43vtn8ZbC9D#WRn zs4+olSgy zQM1HtuqFRK|M$7(kw2fKgDu%nvtD_>GZJujYzoqAg>@4_*HTn>xm@m5LdSC_msKmJ z;^fO?aD6imXDJ?H#6u1w{YJrKDl|<`uBghduIcS~n&t^5p_99>w}=?`|FAw|nbS^p z!1g41c85Nxg@mrMLN(z`mq z`!7SGH!9cGXeti3NSW!L=d{;W5t^pwvHvy6xyL8a82Fx0vhF+wzWoRG|Da9f$xEct z=j38#kZ3g8t79;7&-I-^y?fR|cN9ewg&u4GXc6dbBV6-p>KzpP!eFo7>70lZxsrw6 zgXfl43%&7f`So*5x#P(-wJVGcxpzmT9J<_bOGkcH&nU>(pS` zlWOUPH8MYPu~cWfU&mnNoS(>G%UGW$TcPu?!LJt4q0}8&K6zrXI;{v%eJ@SW$%TH# zs;%zLr_&3nbj-XGThfc0)vvSBQB{h&gT`g4+lbJw{H9#t4pYOUugLpa z>3ds_%6@m6le4dQq7QUgL)+=DX9W%<)fT%P<*-%z56QX z&fnIRl!|kP&j5~Bt7@Tn=V2^Xk^hiRcf>AFsk7d9My~mg^vslHm5%dxrho^ZJD@z7 zR!JZ5^Z@Zntj>wSfV;>gQWV64%MD+wYL>wrk2f#X)*M({!%=hGyBfSH6y@tp!mP%Si zSL7+8Ixvr}?^KEE+Ph}d_iJd%vN(<`kWi(#`Egm*U8!3J1G+xm>!Z~*6%I%v==|8M*y$eY z&sW!sd`f+(_k9mrJ;TT)A6`x-TcTd=La*p=Cuw(;mKhAe^@2^^yUTB{p|0H3awFcF zboTt!4&d+_vbxT3&Rn);MrojBpxJ66ciuP{Mxm!rIsyRg!?SHM4D9*pnxRDJ+sxA5 z-Q8>-G$V%`1&)Sv%|efj0S7HAgKGkMcYd9pdiRuA>gw@D|IL7WoFysc{s%Abic>GJ zk=b?G44b{UI4R|hS7A8d;E*l_M?kh0)6qUWB@U{_^3pXUUk5!V1$Ef{qK?7H5l_^T zSGpmZh0upF5w3DTHDI#?m*|dj1ugp23~k3s-4`YD?pGSn>ET56uDIlDi|@%?zz50K zk_Wn+7IY7ozJFVnio13KfNU$KxO$=uwVt06o3xK&vUEx6GcV~FjNEWIk$9iaLg?5U zXEz3niU?R8=g#-j=D3v9_2Nx77lw3d!*?a0LcSR1P|9g4F8vvG>bO>r(UJos!h0z&vAf*8^zq1$hM_2vYxl7J4^km#J=yWe~>o?Rg4RCiS;mDUnMHv_5X62DOy|5m`N znHbXDHj^b?I<5sX_!e12FZ)G2|Abuq$|JzhuDJBxee)}?z52@8pFjVe51@2;w@mrK zM8Z{AtqlOzy}PzCzXuQR>y`(0jO$~w6`lQgG4J#o)~Fd|_ptcgY_A+6JN5!((H`fS z?q6RE^xm3kNatabfP*dRLV73&BEokA)P+9+;H&?j9{Hek8x82`s6GpTf9JgqKB(lx zA7EEpvT;XDZw{7S-kHI!hr5pK;UOtG*M11o@cp?r?=-4U&$bhZOJ8q>J=Ymou_v4M zIFBLLKZar0Z%i4|?U4w5q^EzSUudO5FD|L%9b8#i8Ai3ox8WhC#&iK4bM;t-TVfaW z05s!H9|@)p#=rbtmk}?#yw9Gb_1f`6lWE0{#dJ+Xo1zs{V;qRkxL$GlTRH|qD^Jk{ z6q?iSTgtAWRi7@T3jk0mbV={+l7l71CB@Cf1Fer7Yz4TfdC7&R>VkzO zp>sF2ZYf^QxSQxV5T4i!-M{^w`Ld3e9(n-e^>r>Gc2s+RPR%>w5x41&v>h5VOBVju zruna#))`vanN53~cO*875!)6pst`1ml6;)t!bf^)th8xHYIqklPH5gz-PL@}S?P36 z2Vu71E81t@cK0I(w^Wy`GVZ22e4*DL(U8r?7yJHhSy-oHpPlTF5xFaO!fM7771wKb z*3!hBBUbTc?62Qne1YwkV`$)Y((&Flukn#yF$KKp{2C%$ighu2AcBwdG=yAOtSjH5 z=*g>Ta88?d-?i(;gXJY%)zw|{>C_UvHKFr(2LN2A{muK}J}x;A54@vxYYH`oZ@mm8u;01=^#_^S8EfMH2Z$%^ zY|{2fufS~F1A%~16=4%#C+xaGy+xk}OXw2d09qS!s`8SOfnqf7CVj|Kj}M8;tf#|h zft`wdrP|HyQc9ja)3e0eWSFXjC6bMVZ{{!)J7Z0+^u!^ysHOs2Cw9A+tqU4eu?an> zuFZZ+TA`cbbq%DYy*h_FZ$5pX99v~f&Nl@+IYpJTd6BzbCt@e8P&+5p-{>69hx1^hzHx0y(eNl_T5Uc+kF) z451JC8xlI_^Rd?9iM9-0Sh;1#3g+!CKI;8__e{&5X-5I(J_#CC)yYK>pJ8T`YZZMOMx%}QEzvK7cZ@>Nby_lt=NJD7c z_~dkxwy>@q-$gf%TWNS%a=^jXRWMTUgk9@aDO~x?;Uirzro1*!s0d${=3GWx4I=cH_4&*pSJ8PP}hTKxqpPcmvZfAl!kFx9> zL(ROGP4{UTY{3Dxoq{nnLH|8IxGZGRr^Qrf*$iedAIwte&5gI&0qX1O;%5M%MIQkk zQ*oz=CtiB$@cx8D#baNO2doJAI{x@#Api3o?c1OA{#7<#h-08VYBLqGpl+q2J=C8SUIVG5e-u=yqPtygTmvh%y4Qu>0jGW~4BdkX zId0>Y#%8TWwZ>~62NBzlNff%dW!*$5{H6`x7`ju>{lCxsb^|Jr2QUv;^ySpSdz<=3 z+Qg)s1LP3dgO4TW7z)EJ9GFLHGEWM%Vd;BD&ASVJqs!%v^opfyOW11CuK|-Y+<{7m z%8jQtZYj}{gd4btB;Pg-SxkD%U~hORu6Kqpp#Mif?yax?dW=g*9md+cInBX)u;M1> z;M=ASjV74dy(f`*+@oVKlDQK&axvYTdA~bW(#MsTyW_%%iQe7`i&ejNaK@~Kq|c!A z?rXX-4C}?!jRU*PUiJaUvs26rl`EpN^O<{hT<%`GKcf6L4_Xn6J`-@t>X8N@#?gOS7$V&1uo z&AZ1t3p@||l$+z+0h2|aIi~m!*2MTk%hw~tYs$-s>u9R0TPp#8jBghWIi;6^)jAm2 z%AxxA>Hb^ZJzytNCt)4yZFyq)*oTJ!I4EVQcg70#(9F9x;}TCP-ZE41?s#@h113wz zy4^=L3#DRSu8T~Wt5YoQrYOJWCh60mz8Bx;1dDSbaK3OMa0T&dz2oJ3A@MHZ#@8F9 zBzzu}{`Ec}jerb>l6h~N&)B=;hRF5*4sw=`T=AK|($SUdFYVjAjA~-=O0y}jD!HW->r5r?iEKdf0x@LsO`_Syz z3u6U46Fu*l4y;CFX5!ti&D|rNVs%;?m!(eN9X`8VRQw~Y2XUu__%0XM#csU26r`iW z(9=6aWG?AESmd@1_5fcmvoWKAc*oM4N^I;DC<7Nai8nG?;f!lthlV{c4qTeHK`pR_iw#O97OZ zv>{StG&JCth_HcT>Ked~_UOua3b;=8kSn+h)9-wb(QBhGIGnZ=+|0#TpNP=e}guP1}4jadUD&#J8b0 zG!%+klD+?g%WV`~BoW7B^z1Guq0@094xqM8y<2W>VOsoGUFXwNkyvj-QyGQ`33plHC!3m2i7lL}#d(_tMPF zyT?1p(-F4x1vc%0-5IY7q2R3+Q*Yp&3wt_RT3R|fdU|>`1Wcij(igGzx@^KaM?y+1 zE%-g&uPZQKmhPdq8)}qwURAYYN7ar`=G14>QRJL5Jit*MgRyG+vljF29cjlFkPSix z1vc%1w~CSv4~4?wsCk`8I2;N)RkHSev;b1`fX#UZ)twbOhR!K3*3Lr&XOM zQdOm<^yvCAxxrbbcz}m=42I$*Wr#Ip7ScxneX(M99J!62do0T+|8J|+X%&J!)Eb-5 z@4XawfC8M+ezBV>eJmPX9ncq1=cx1@(`qq2IudJ}#o4vt@m1rhMCmgH=VKWEIcVN9 z-t!*q$5J|M_bY~U%>_2?F5jv*;nbY5lIon>Dg?LU`{IbM0NG8O02GYW+zAvqQgvcZ zwd{eVHBwvijKn4njSeRem0t#lWpYQ@GH8aPc|SCtaVedHdc}}lB%D&ATb=seL4U+% zj07)rNViD03PxLCGZaFzyAu0oMy|hRm33bd`i>pP=F%^O#^LlOn&vxe>F->6lx?A4 ztj-SMk){kw>A-=xD5wLx4Of zg4j1xpp9Zr*b^SRze(A;BRfu;UdVi@oM#L`YB1XKRH0QD8UGlJ@!ENy0Po$^roEhu$&}O)W1$i=#Kojq2S(ux{ ze+-1a8a&1-^%Xtv26OO?mBG(gL{O4 zbgR7{3U@%8n0J7R8lqIgv18NXe?_4m+p#S4#kn=9eEO5c6DJmrEzBVc(Rsrm$I@R1 z@H0=b#2h1O2Sq04-QyV<1}Pnv{{ov@-Q49Dg4;XDEE@t)Zxf6N6?#F9wJ3%3(I!#c zhQ;Hjop$`>F)=DHOdnrTdezB=^fEVma^k!yWXH*4#}*eC#Se_8KMk|(upHJ)_w8l% zHipIpa$Z9l?rK{XR4lNa3h!EqZ8 zx1*|R5tV*&`H_Cyu#iUQhDH3fiJvY09;o-@Cl`<*2((~@!t#v~~@!ostH}g{DA{!`dg4|&EF99B)Q16o+29AXEdBgE4Ds1%X z-!ICtamN-?>wNmOhf(DcSCL4WD9|!!h)@KT@BbaeYc~HX`o2O|Mc-S;()3AL)BPM-3 z6t)OkFRSEbecpUxo()}l5&@$fI5og=broNna}Ye90Az0`v0B-B)rsmqM0{^9qRk-fJ~wCh`;#Bfz2JiLPE+KfE6#oT$?MFL z*qPG*W$#>L+AO0uUPd@C-IIN=rJ+FD&_YXrQqs`T(6W*i+DHndWTR0DgF*?0M2IER zWlU%Mpk166ckDU~!tv%umMKqAq6YH=pyoEu|N(8|6ix zU*cs|F-HEJ^PJ27{NL#jJt$7Cr5-nUcLxwP^=2$xi~Gd-qq)~r7t}8jIWTm7M}@&q zmn!pu(z*(R8>IZLEpDt5OOAF?5YJhQ(2-qvyH8CIoTkxRp;cy*dr@oAh0*?Ife@T= z(n+;A$;k?_H8%ZJ=Mrc52X|2hYZhJm+lAF0jHnJn78-0S<5<`)ikuJ-5gPsSKH5ib zD@~Jmr9q{!w)KHzXX6rsu;f^4PG*?Us|Fw3mBt{_S;MS4&1^lrxqsr|X=PE7B2JMu zp?a-Cp*%f$wwwsktyyrg#Pdrnx72iY4t7pG{OFDyJ9fq|es?}tv*To}rVF~Zx{ZIN zYbM>0puFDS-q8@LYcN>x-<>M+e8Z%X?y)zNHcGgY9&2j~M7U72gwW?_^9BcZzH;&6 zDayrHc8gH2xJPzU4zqxM0Ej>kRD1W(kz>fj#OS4fma2ULMeFU`a~2}NlQPc#n&ahc zxh1v5Mqlj@-+bXjlK>Qg_X0bq&Z|x}#m=e_`dhnU!yoA-#)8KB`o_lk7QcJE!VoU; zxW>GmFwVKBP$9~kIYl-EF?W}4S4phLkt3~3M)X}%Cm|C|*XrGad4szb9y25f!P0$X z^dRFBQ$sHhbj7S#g(fo*pgg}JRc-fu zRaK=5p%bJgS+rI03C)+T2<9(RN;uhV6|Eek;tS9y=D?<8ZdX4?r=mvvl|~HDPxo60pz3!YfOmeMF00KjK1b%FP7l&#Bl5WrHMQ2I2^VKkPeywWQtH(%+-aD~AS0)cmBk|h?>CsISYQrk>~wLUv~ zo``u%*4yEva+rii3m*YxcZ5Cjb`lMWq+@6M+m}!J2%I z9X;sy1D&(L@x5YU{exIU*M~jZ5`-qJtEbI`kfUV@p}#-~=nLCYJ8Y^=FUQeNdZl#_ zumo7L#0u}DiWH&ull5$y{e@i;v#4~%0R8jk=uAxL(J2{+lcIFX;SZ`hcbb7fsW)j9 z_2QlFmW0r&tINu^cj0tgWnJ1BtOP>3wZPy2BGp3a{GISH34IN9e79V%V8NKb=dQa(PGbkX=rDs(`hQ;Fli%+W4^4aZs2 zcU3pP!=^D*)aBPod}!uP00CdtMM(i2du!|I7hLO4C|z*`bN7*)XJl8SROm`BbWVm5 zx!n(b@D2#z_b%3}=cjl?uRe3=Y*&*yHW}-WSm_9=)XH(1NJYLO2!dq&-5D=I`f7_} zhzRR*&Db@BN*4~cDg&4n&=4H@336a~cRh#H&h3hc?*G5Xy9Q z6Ch0GsH8mxO00(x$gz=}k7c*! z>^G$9wZqvg-V!~>Z=S*N7;s-MNhsZO{!SOR*J!CdzBd82CvXf_Ur}OBnU34G$+EKT>Xsp=u={Sv{pw57Y9Ja#H3^~{uNP43a zcv-d{ZjBscO7FgKyS1ALv>f-VjKj(3L=4Zqz>4Y^(uG2=OS6!=cVoNiC~c~pXzCgo znmCx#TBKA=;CB`ff2E-<+24IrDG7xe>TFnBly-;h4Ry>tE|I)rEEd)~==1ByC|g|< zj$D|)4x611#Br7|n}OF4pTQpav>Nczk<~NiVF|qVOAP3Tc0N2c*hx2c0{2q$vSScP?dySE=_JwCsq=q?V-fpN&*>DC>OWa*1va`XFq5bmsD|s4MzE- z3}*==VrV>7&8A@vs4;?ruP;p3*Hode&jRkOf6!S&9V2I^a1eu`&>j<*)N6|qQm+Va zR!A?QKbXP=?nXcaf4Ou|r8D;JWg$H=2+Mllw2i*riN34$KsRCeyC6u~dV{l>;0Oma zm5EA!jjBaJxdaQx@bI(Tv7xQ{k41f;dH~U7_|_F0JXf{&ROc)j=&){{5D;7{tJQq8ldmb zfABgBJiK5{!D4!hBE`XOLIJ3Cv{8H3()^0H?9R-nRGu;FEJwZK7F1r|;%u-Q#(_xL z;hnYEVk7TGftb+obqyb`J4cwew<<@6x|_`al76*tHk0>J7{Yc@>D6yV`Wjiot>vFx zxVgF`u5S4oxOyGe^Tp{7q*2k!fr5V4I2uDJTzhN6Ce(088>)JVis3cJmnzeTMpFp zV{iPNgQ#?6;ND!=e~hxPV&|JIoK+?7bfkTHh{?qA=pcQX52CUAB4+WTcLHVW&lh#9 z%1u$%7uQXCS-pOPz=LcqV;G58`|1I}7xcIIT7rEMT8;~aW3zf}Xhzx-?+efL(bzV* zw)>u3*k_|T2%mf9teCtLI7-)6jy4g|G?MPKWxVru)t+>ud-&)1uEYs`C=cd_X&e6j zO1(rxgHhaCyr*1WUS6&SioVk8#qjQR;ZGOMB;A%}JoNQTAV}IK5})buxtWF8I8d*9 zayO3)owHh_NJ7p`H^pu>bX6r~?3t5y#&D5h)V%0aF9^Xp&)9vEx{BRL_cA;s;f8S^ zB&c<$#xy02xM^H0q!*t12!;NdOv;>xnE7*SAijDA-*KUHHWc<|BxbWHbLh%T*LmjT zo#pR=e!`?45A425kLx}p@Hhms&01h8E_S=!z5aSVAij2+!{M-XG^oZr$^Q3(%1v$bzVFQXld}j`pFAb4| z)=`ZObWklMMq&@1R9XufkBi}<_tABbgidYJ*c=HBxfbg=|L3fiC3oRy|rbS$wQ?lqflJxHz%}C0Q^=@xUGRg z4<{KtC{Axkv(gQw5IeS}iR5=U$DIy;IV?io7#wfdHs)RCRY1$`hRR+&%Za5u9G9f@ zep-50j1qjX+h^809EVDe&dW9m3ES{-*2bHFbUm^Q3+>A?L$mily3_*${T7mVtqZ=G zP6eIMFL(BJl!iktgazY8Y8Bt%9-~S%IT?<$70T-gEJA2(aXWJ>43j0^G5QZKjcVJN zrq3UfxzuZM38k~ryXX!{CPwVn)+xjr(ZKNV=d$}x&ogiA-~SwM&i{9Kt_k2k)!kir zD>6GXkG1y{v`p(lLh7mLTjaSFlv1k-l}(}Hd(7og8S=;7L0@B|PFJgjB-Fuzh$`g8 zzbj;1{sBPe`gy0y_OvUT!DGD8Y|k_IlaNe4C-LkJ8b%P)jG}y2g5+-_cP}*FaC77Z&E`7UoAZEV0L2 zebw77mm|LTVRv(v09)u>Fg7+(>CBd0xMaT~TQ9e6aQ`UID!H{C2)u(g(^nDHXJ+$m zT*sHO9{tiTdix|>Z z$IK0;^Gt8`B3xK!`s)}|-N(sy4aG>i*a;^Tz&37gF;`LqJUXE;pC+SHc!~m ziv)u~zu%|Rt0{t@R_lC0Q(+yQd<%JTPBv59T;mz@hI4~y4S6CkuqEeqI^;1-KG*{D zuZx(9DvB-)47@5~GkVT{inqTS*MT7VL8ekQn<=7CRyoVBRa%#cO9EB;! z>iIx{^nd@UyV%`GAQL2A@Q9#h5b+m`#ectAUtX)LZwb0>PMbW5b`w_U_RF>oH=@y~ z{c#zGlNEaUzA^<-M{po@43@63*zI$9v#Fm(=jP{@d!^&CA!cm++Glc`t+%CKSI!>i z=BB1DktQ>UB#p?Y{~#bNdhcoR2YV5>yI9_CGnq`bc6ll$KM;6NwsqJyJAZ}ioRcly zD0VxF^%-;b8BEdb^D}9_Qo}jRDqUIBO;EVexpp}drUU(As7ha4;I${8*!!%mTn!>* zsnlM-Cs=HAI;pf7=rhwU&xoT~4e*kT!{KD&y{~B6E1J4r{2+r>-0<+#nY3{kRQb}d zMQhC6Z@=>eORL)*4yMxf1#Bj#$>u0_2cI}_@@$hu$Xu%P1?46aDtl${KVpmJ?y{a= zK9_MgS>dBb8>YQX=uK6f8OrPS>&Zf|LIb%KPz<5a%_HBmw=btn2aWdQuRr?eC%yg_ zdX_;~TOOyjvEJY7aGD(QRb%plq;I6BGc#c4O6O#SH=*9tE_cW=cPALq({uNLJuRfC z3tgE~j=LbB(kE`ySNckP=6KO&Gf`}!s*8(@S;Ftchxi)62Z*#!wWKm1jpoTXoQCkelAa2%kUpCd($hv@m0E=|kkm^*CWiFiFn3>3>SBDy3_lKL0&4{8 z?$W-#mdd=HJGgSP!h1j?I*y9F1*Y^9oi*tpeK_ap?D8R9d(3hKZwDsOYMWU|{{cmu zC0OqMx@_yfh0e(ec(fb#pwMF>oxrJ@s^nMt9ES88DX;XIq*pp#`UcXi)Fy@W0T$Bl z*yLFQA0VLKLMv=s=$!2EHV|lGLbu7)VmBW$av@!*9U|;XXwqjG(&2rwpEyoM*om;I2+A*5I|q-kS9VqF0mc1O1-XV zzk;cIdX+9g>jYtkztcVga6Z)0H}14KR?xc5AH4VHyc5fDFUqzG*P_>D9L@%Vy)^-J z@ou%FT@2}Pv8F1;G-`NwDs8hRFKMqu%N)wh0qx??*j_r+KU7grP*9lLF>Y%wb}yxN zQxKr{o|Vp8>16Aa<8JYJ8P3M@DuBR>?nxmXou5-?<1l%T`$EoC;S+rpV}05VI+kcvmcciaA6}AyX>tfO z6gpW-dvI)VCL%*ivDAc$8lnXoDpClviwFN;78MT~VP*Y)a92SDt>U2~i2tDAB1MJu zU_oyxh={rfo;;fOX2xHpO=l+C8A#~+Tr5Kud-?L-@4fGPk4c?(0r$ZCuP)1)b(Q|n zXJ>;cI+^3Jt9I$imHoZF56|xJAD&6iUlw$9BzMFf2a`%!anUKVV;)}}EA--Sf|}@l zJ|Q@VH&RpS43jdHxeL*gFWYr*kZIqvMT%#NK{=v8ZW)FxXPCSBgc%zd(INtM`hZb%=0 z?)IQJhCDMko{GW!>Y4e~*8J7)rJ!Y=E^~LeJq}8>vJyn^q9Hn>)VfRn%v$mhf4vw> zoVznjFVBLilGB}#t{Hl!-`=wcvPB{N!%N*C5cfZ=e#<7r=5n?e21FVyXyMlg2_869bxRo^bNOP>?tXb1Tj@LJSM!Ir z$H92Btc0U$6@Xc#Opo|x+n{v5aERD-_i;Y#%`iQgyC7ejq-rmDN}s;>b~(Z37T$Xv z<+;@dR?qKbgMN3kyiU)E>D{dScI2z;w|z~};e^IGg9^xlxZeNd$ZvlUH`5c)chwI&ozv7G1z+XUC$8OG;h+#MzDG7{7D zm446JJAI*dMLxZe?G-vH{k7%bs45ctod3B3adP*D10p)^Yr5e?1a&g_jn+mfhDnc? z0L$Ty*(dom<~*gpaQj)`@Ls%3ZWx)mFHn&^mkUO8FIBP%y+J`(wX$2CpvAH>5pkmy2I%=-`Z`jUAelNKd%b0nU{U^3&m+V#*z&b z<6y#G0{px@pwRX55>Ux52D)y9DjolX5twZGavuE&ogXp`lLpfNIyq(?E0%QuZar@A zhJ*PQI$SY#&;M_1-@LYgil$FQeuHLGO$TUO+PR>?1uMCoij-1uMESa#2eBs(+9bRLcq=c(m;AHw}yQ)&mNb( zD5hI~+yg4L(xjqszP;_JK=!!ULYI!2dP9kc)+`i4Tj|4Zn)$&MI&?1o${fkGFr{qYe9m3**%ly~cU_KKUlX9p9y2?ACcN)k#popDg%{>*TL zLgz<1lPYhM&~3#DU6M{07`|`$+9uDNFKRJ!aNljcbvNv^)7)#-u7K>k#T9zl7J!bK zB$Q6A^r7GTe1j+SD;b7KiAQL3tyvDau3%Ls0Uzl<=48Oey1Tz+0-nG0I10MtmE(## z?$TFt%qWbLYi4;Mp|@3lxw4*!((O8^LvNb-%M<#3hGEj-MbdCZFSnhr$!;pEpU?ZP zbGp%x^V(|yrtf+aQ2eiCj*l2wlG>v-Kh_ixKK>-jC=iEH-IirQ*l@4dG3=TP79q&Sfd(kF>xNnlj;9 z;}TK2eK)8>Z<^Wb%%5p>4o2sM6fGVeu7{+_SE`0l?oJ84_y3BqV`j3ZDFdO|&arEsRTVzX3^(8X z`4Go*COuw76$qnD*>C9C6YPjz%ek4ktj6KbXsl~fIWthaF8C5TQl2ZC(U}jF|kn^iJs&&Of1fWt53j+13~ z5;|>N7SlV$uFz-5Fo!PoXtR5%IiS!nC2@{z4)T^r=2U~VIKL3C*9zecHXLTjWxGN@ zkJ6dGT=dg;C^;7PvAj!66uf<*n~sV*lE>S=Cuky+QR{P72-qelhFS@S<~anrflI zKPXzQP&n2GtMZme=Jev$;?`ZEV~Z`Um5zw%-D|s4jH9yq@;Q2qV}aec+uJA;jObNk z4seE*rrxM!uSE*IF6UGSp?{fyatc+z=NX1Mt)MSXfYAsO3Sm|!K)6cZRNWsgWX~*P z67Nm9+AIDeorF$RcW=EqrSv$*j^i`Ymbb>b6nX-s_o~UcJ9D~u3}h`%39rYQ=G_1! zaMCtynpmbgOWyFCNkuQ}wdZoZLSMoD+L;`!pi<+Q*c*-%dJ?5~^83Kk4`&$Wbn-E% ztdj>;q zgJqcXc=YfBW-ZL}ZaXEZbj;yrT%AMRCOzE^u20q%dfo73CWS7b5JTt%_xc)g($c&1 z`@qMUA?BO?E4+4sNeRl_F-s1Oh!VRn2_OUna(DrYcGXifTS;imoe2)SRk(%3o(UeYECUe($upD`x)8Fbt7+Zw>55Nah=+^rq7H z)ESMh7B_vN%aESWZem1_vpJ@*65I`W((#t6IS1-+pGx2Fba<^hlLnv2-dg;SE-8#v z`woO+CoLBcy0>NK+%**X!mlxeuGb=)YwY44{D!z9m}(iJywNGA$? zN8H5BPC)30;iw=MmM;huHh=jlj!vb{ljyP0V9h98TV$A|d2v<_t{sL{GB_l3a?D7f z%W-zGdk#x=afDvpk}vc`dTd6Wx6Cl7lMg_s)Yk5+lIs>ajkU;#?qOMzAU09x7k`cx z`c!irTLDQW@6zr5MTTKc8E?Ba_eNxYDn3=u8kdzq_n|9nYtyQD?YFPuw9!lLa&pN# zl?jL4?anYMKxfhW&XUPpGlOIJ*0>`=x2y$F=?KI@WPhz;0o`6ZAv(^n$y{UD-R=yN z2Jc~W4X3^%&1LbC);KA2ALA`S`==hbszeF>CcKYck==j<402Ut==*C7lLqh0=2~*e zJ6Yq<1b0;E-~RlX=(5m?6na@HfqNv1NW>slrCE8H80P*O!=%6?B=q{0A{o^3-v25J zRpas-!d)=sQ~mnQ{JFKYjh*G+qEh#*MUZX3lR*1&xWC4nX2=#Nz-)x~rv}Adau-Bq zFG``iRL6c?&KI-A?Wn5zmI*?R)FoAUr==JG?`0U~G(omFYOY1wNaI5n4bcR<>OQ4mQV^JtPr~zVVj~^6k? z5)SFc-9x?zmSGZy_B?}Xmj?}xQy3q^`TF%;I`SabJH{4zqb)#%@tXXzlIf*O$ILk2 zPG(LK&&b<~gS$#YH&Bq-^?@0jN-1lD3Vmxa(Mp`0&tYpE^B;S6&nh(#g#kD+a6%Zt z!hu;*xy#BXjVTNZCTRkTO-w40X*Br*qm>`9AR?j`HWq>)+K7sxtteUvf+BVzwt|SA zg_WIVqQ;NCam9&|}o&{I-#f4zx4}NH_Li8``&OX4388k3A)+m=*yIwB#e{M*V20SsnC^Yu#nCvL;T?b5-@;#)Jn3 zLWA*jh^meuhH*;V;@4HaU_S@_wF>&iweF0M!Gy8Ph-NH|zx9~8Zy+=j<%pK%xu(rY zx8gd`u}|2FFL&GL5<#L2DzVTsv#((}dZx4Q6&>uInge+_I+Q1z< zt!6k(@gf}!M%7&=7JnC>&zdGP#!L3=xqHKFbe2sanlYkR{aV#Yfd1E`lMyOu9^C-c zaW$8vG#|&Qpf}#41I+|!2lwqS7wMM`godG-uIOcq=q^iX-n%ykofTdxNlRE^SB)#- zu7S`nTm&$y`Ni!n=}We5(3LE6Nn1Dxtm=O4hJny9R0XhmXPmUUq}$H=E4soO2B!1B zf2|sf@gf}!N!4{C5rnk5q}xIBH~RWq7G{6{+XZvHNJm3bcb#Z)NmoJVT7oXg9Afd; zb+CbYzjhK|q@#g2T6dk$zNG69I@=RYHCz$!OwEge2@Y#P197AbdKsN|mvr0b8n*62 z>;nKxX!z}_*6!C0gofbofx5j+n@f5evcC@cY|k-6*6miX6KEq7E2?D{dE#Zv$< z{hgd>z)1Oi4TrU$fjIr8UWO6vICo;(QsRL867;KE%eE8i#@w~X@Y%SKL<=q!IIIN? z$8CUmc!Tz&hjwh2oL@i2AHPv;C)VLgR>qtHBr`!Y5iw8`jv5FJK~*oaTaY$zmW6)c zI|b*z{vCOB@XZ=QXF_DTr(*8;(j~gMOA|~uZXh%SXR3M`LE6C?FaIDbJbv|x|9*ol zd9WC%*6`*&CW$6>Q#!mzM}tt;%d~~_4SxKp;S-&I#$3Ui!~?aO(?uZ}(MjwEe36a@ z;>1Z6bYGBvjgy9;Gm;gBpD)Hx&3Q2wOX(85-G!_LodY zci34r0eq;6hN12Z*{=1!(V5H^-%>uAC$VMc$?mx~8I?a!M&n#VJ2~#o0Y@jJK~NKu zO^7Aw!0R`h{6esOqblXpo9|ANMKpr1=obL6Tf_EUCV=nP&>&QGapuw`9awd_E<;a! zmz&dQKA(?AU-Jz=nQLf$B`lzL?2d-u{79Y^!si+xHS z`x2GqF>ACbf)e;Wui0_PxyE-b*ftIgz=i*3=k9V3ObQnc-%SF`PMy&4 zgVb6fcC;nk4NU+zW+2pSUv}=nf3S0(m6zJIEMK{qSZbfX5!IAR4@Sm7u?QCR-M#;2 z=gwu_2BLUwHH!;IwBTYlU=b|py(|CC&V6TIcY(OQu$rmP(OSrTSOklD@5K0j*}3mb z0Zj1D8>MS;Y&BAI+_VrWP@L9+dhVtwi<@RM(lNQD-@h2$mZVlA+u<5d;|}aM5bCk2 zEN-vMNw;MAjEvTmE0-5mn*Ni$J0l)|dCfqm$EwSagiODg9-^=`YK z0GJI)w^MCFkMYTda{ z;@c!=|w0s)vggP&Ea3QFcW%@A}AacfRy;{b42>w}tw zrxAeTAdbKWrm$2jg>sA z;oNC!zVnUh&!BeQyrHp<0k)nZy^`NNZ=^w8d06#?4l}C$*+=*GF&FifQ!W=r(xxFy zF`_NVzM`pYX^sOTWpQ)EoOvN+*_-^DlaTJh-d0uDd1ziXwTs7Eb*#O}TyyfNkQL>J z;H7je-i;QYwyo3^}Vaf`(UV^JwsOIDiEem0V=hwhrHHv1x_*C}G3`tEvRrV!uQrVIntf|wrxh!3BR4@7~`y889ndp-}V zjj0(W9bCzSI_|@qaNt2trm|dn*ZYX`NU+El3c&yNeA+!Nkq;d{mXD3kX{Ld=4madloyarXM@z$0a< zi_3S$_O2;F9etOl!+P8WBLyQLTa86-+n8PU)IIR6Uw$)DYbKM1&=%EE-vUOJ^;wpQ z*(HC>9@=D=kTZTY(d8kQqobD#7=tNM--`GerJKbEN;-Vq2TYwaJv9rOf5{{m1xG+7 z;J3OmC^ZwgHF>ZZQM#A6vxF{GI)Qqn+W1vPY64xxEexVgo+Bo6iymdN+gEd9Ty&XX zn3^#{c2byK&A$GV4ypyJpMg2tk&b98ox(C3G4NRf>AuKnbtLU!`Ep z`S_RMF@yq{TS(?ja|YMtYMX49+WPK2#8&&_Rj>weoAUTAfhcx3AqG*gf{oL0|4iE8 z%FmjKLv=+z+mCp|BPWOp{Lk{C;gx>|+2NtE53U>K;-EJrP=Xmka5NcGKhw{%kCpkD zrnz^t1Glh=mJM0uueMQ1?O3oTX1pg(=|%N}^qVm@aRj!O>iFFS{v?q8ou=G z71iHcf=;37B!A5#+frr{kjx+vs^V+46#SIr#Z_&<^3FK{Iki8vaxk=(T0rwJf-^(y z%wdjQMbhbzfH1b)i%HjlQ}cZ2@ME&QzGlZUx|eiy+3hx&1hJ+=Blqca2;5{a)?7AD zGv$(fGmm|!)h

Ea)*Itc9BMZK*$B6tIKaH`D5mkm)m>IOewVk#!I7PY2S!QnS>Z z)6QR$!5C(n!>A%?_10Um<&Bk`v>`fKKnJ?~s`UQeAR+jtv$urwhzJ?Yt{5w1lftN} zjV3b(uRSB98&rHFm{GC;^XDTNyk0#2;R^lcUePB#%(wYGp`n`^D z=H1)eG(CWs5lb1_!!Sr>&{%i_*YmXg&~X8ohHUbnT=38Ge6pAAC81;|9Lf>B&VyNp z3oPs!>kT)lXf)E|HQy=K6&+=|?0FC9ZLNI^KS`z}#ew;geU@EwoB~sd{zdB zk%4~5K;VepdCi*j5mSGYdC~U5n-W>;@(=gIJ$W4omIrr_N)r@58l z7ko1>w3?0g>6m&Cz05}V$C#XUG8J&c2qs?I9@YIn9~1yvyT(6E8f(Pd;h}u~ zJ!*&s57V;^eEXJBSFow7GToC16v_etAvQK@e7^{jdY`bNX&44LCAV)`Xp*VKM>F&{JG!YddMmAY zq|4$DYbARnZ!%|&3wsCt&J#Nz%E(Uk=iEo6&_-?Fe%A_bSSG+FeqO1RnZbE{kPq0h zqNrVMn$&^CyAwGg=z4V9Y<52AxBo)g(ldnLq1Sr!4@q>wl>(q2Qor*}&dpkneeuyQ zJQ{W3Jm_SLr=8rF17Qr(x&-TqjKGB(d(!ufYq8&tKnIxV0710J*5@>+Tty-zkW2T* zOc^fVh!<*oF6X{B{3hB86Yn%UJI}*rP7nT@USdx-Y!f<+4uBljPC{hdWkozdY%)Ug zj__a+s#Q>}1i&r!IVE2D?BQ1qTc4>t{F*o#@}q&6Z2~ z^N_lPObkZMFF+}FV0ju>!{^PFr^&1eKF~sOrzf{fmFyfnr{5`mB=oGiR&H#i+|y}0ytgmp}=gP=j0xA z*;l+7Mr8VF?GL1XS4Ye?fH53C`#1E@l9N9RQ8|4a)`-xVh#uUoSE zyCjShAt@0b5mn@hOZwQOk`$PTS~0K~J*wgOBeyc{zOTQcIIxhSi4cY6v@@ll{!Fhs zrrz!J$~ey9Wy9s>A$Lev$9y}(?g8GryZzO9Qt%;KYrw zll`Oa@I?f%xJ^lZM%>Hb7ly&*hp{+?$fl322+OIx3OxsIk(Yq>m8Pf{nCc;p@wti^ z;g@b9^%J?EctI5EMW8>le-b35x`76L&H2$eC{lOw=?2%rK$QFjoVH#4l|pBxte^Y> z-1q&N?T1A{B8YFCP06|xJ2Dnvu7OgF+>qlA@nsgrLV$JQOL&i=)@MK$^D1c1Cu{nX ztz2Eqe|7a#WPiPyWm<=dKLhyvjaEO#rfjcZV-ypiA!DqhHQ;^AK^+Z34x296N&D&R zS2elSr#W2^@{jfGZ%m#3YrVKoXggRbSa#{Ek{eV1-NZ&#PkS4Rh$nGa&7({Yk;K!E zY$_0^yjnk!4XD1`BO96k2UYS8ZGR2DU9;#+p)z|=;1~~H97lMF8k|zjGG^7sw2us?>zW;P-@)Cy3#gpyXUXuYp22G&F~3I~c#=(z~#XFYg!?cIyC(Gttz-!}?5W z(sUcnakkSE#N|f7SM*(^Di-S}ON+-gNpd8ioe0FBn6gw*S6nht`T6(J#ghnu2YIeN z>oX@d$U{H`%T-1Cy+U*mp1GMY8TE}=>@c-Me>)zi$t0(=>n}%$*w5{1cfNL zh<3QN`@WPW2}!@S;80*~t=|ZL(GP`&=_*zK57{#WP)q92`@UtbQgAcDguras?FjZvMig}=lzbE0H5l+{JK!0WKr z&_NJl-sf#t8(HV-byF&0JGcBVP^^Fw{AJKpD1i~snCqwQ{jXG7v9-RA4orirdHo`$l zIAw8K&8_4kmA_I>@Q=PD@n*>rH^8yyJXJ}?wW#+8EC=HZ{x7n~llln$nSXFF!$B%v zCT!otq(Ql?qEOR%%wYegt-dhQxLpL8500gs zcaya_D{&l*x)CATYo9E=N%3b8@nvyvEC1~`PtVIQq`YjZa&&XgN@}-%-Mtm29LBs! zgJ~$ z1g_EC58B5Z(IrD}U?lxPllkH6*VioPAb6goP3cZS!)^w>klZ6KC0 zF@g$bUga74_)M2Xf$4e;yM2&{Z`QY`sf>9!7fV3(6k1w`h2d>rAk@w*Di}N{CP343 zhE7Ava$Hbnj}yXj8%HLI0%fe9oc+c)rl`K*_i_2|y?lj3|EOGNJhQ%Q7%utnsuI{Q zICvwdle=V+1z-rmDidtc2f3CP7l*tBzh<`(Ate3LRw3KG_bLR+;uN(Hum4cd)_#y^ z|M1aF@9Wi|5oF2VS4{&N=wGmMz^RZWXV3Q5qAPzqs|0(9(zHSc2e$CPr&wmIiWu0knU0PfO`r7-N+?0&>_VT~9)O5N(4G!AM zzh1Ypk7y%fe;9nH1$B_NgK1?aBdy_C=@^JOPPV5Bz4#0&HY74B526_OQvx@9E@g(9 zWfCRHjJ^*xc`XvVLc#_X&>|mJ9CB#60tkO{I5~KFW51*I3$Af<*ZaG9Lx*$|;eyBH zf-eico67I({y4wUW$0LE2#j@saG&5qMe*viXX2TiUOr`@(8&A&?wzl{UY(+d$0N$s z0j|*icl&@D0f9%oze^5H>BE_IhzPzeb~v3Z%vWk({9*T04-%ugU+9|PPjv{9e319! z|0(B+vOl>N8P_2cg-W(fssxanYGVCy$LZCm+0sOKs*`c9a%5|7U-OLu(We&R@2#ib zgBg?l^4)BlXz!C1#0@nRFXEp%IQ{aI6Ay5CX}%+*IPOC^T7ZY{&$MJ5Y8EW8d6)4 zBhh^Y+VwKbO--J&8)!O4-;8?KE^eCdCfmt6SYy9^COkTqMGJ;)u-Crjk=b7auRL- z)oBysP57`PI{f}#C)40<^sZ+mE%In0SWIykx*tY1K-Q(8Fk@|1Omdp>z*SbW&!mi$ zLF4qd2*?pN^3qdHd!)SJn|1c@wckVnA8Vyc)dBrVhYZ-;f z(}Eb0Gu6&f(4G}gsVZpms^ZilPDr^pWgM%+wc-x}%w2Z!5&R=he2_ryB-?8Lt5W7hF^l`1T$XP#P^h~m9v>L5Y%=VxXeYqP9#0b{BW4*b z$r75IqYek20tTLJuAEX8hI4F|Mw(6IMx38B3yAck;U_tqHJ^O<(v z;INzZe3kLCmCLfAznCRgY}5eKICkHu&?uV8mSjvh8C@2vi3|wXBmLPE_8>pF`JNme zR0g={k=2dYSL&}iHx1#qf)KOGC4(gbOq1CR>su8!f7e`Djm#C7H(bT)Phw#v}7 zh3R52-u6CwZ&17#K#OHfuv5QQp=}tOQ~BW( zuFC7QST-yme{e;8`y48{AEF$ytzuOj2^&EJ)t z)g2bNqk>$M%y#B9jgv8nNjB`X3ee-K>6{&#I>~1!-4!zaZW`7rxx97F~{^#J=v91AC zB!PF;2J;281d$2m0d~I-W&WZAzSTWWHmSmT5viuEtz_i019=6^ko)U*Gj!`5ItS?~ zUW*GuOa1b&y3@$>WO)#WCU=^SOjv`3galquPiii9%2j-vA=6Y7%S=51ngUya@Dea+ z6&0eeMeQ-P&Al;IL|_dDFJ+58g0n~5i}OY+VSAg;CMezq8v5+)x(0v1x&Nq|sZl(5 z|Ax_7RWN^--9UXH@?fjZui42WpNNe84<1wTGKI}xEpy)S;mbf&!7;N;&!C9M*fO10 z4$_vO)8=Fxrtd0TU+o#GZHr}Pr|-$+uMSvq7Z(?kn#IYcSZMTy?{EV*(YZ79^_sa3 zm6tXG)z(|X>3q7AS1&6>`pS|w#2rfVKRpc-Esiy=%JG!|9`EDyQ`cu9UWwPa6B^u$ zMViJaUs8%(591^jeP7-vV>=A*_u?+Px!KvBkHS+fDVXc~xBW*_p_P32&qn?w(o-Cq zn|gP=lMFm6>TNH=veagheYIC2lALhfpmQJjiTn14??du5Hi7Hgm{nkk3l+d_*X^ry z4o@18Q>i+KVSh_t@@^Y>O4xsEPGfykKvV82If!%LHTH;D;a1Kj#*nnDnK66!@`x1N z>HW}UHVn~5CfT=KDnp9)4IqytUXyihA8EfYzMWQM;e}vN^Lu@2b&F6j`jI3@QWqYu2 z)jc;J6#Rw2vuVu;0v?RQm)tWDWt%Ke=*r&8@m&ziHj$p5u5*kCM=LM za83VxdiWmsyCo<3GL^cws?7?giW_(XJ$sNdGIDw z+q{1<#aL-Ny4-d56Q{LgetTQJT;1p4)S35v;)$bji>^ZN&iski#`;5a*HVI*{JIf? z7{4Vxc5;cDlK~qN&J7)q>v6EqL@4(7!Q=09Ek}xRC@%;kb(kMsQ@vg2o4I_UY9-$$ z83O%Gm|FiH)NW&A)82kP)#7R{p#5H$22EV!$XfcEN+g{u{60BxGDhr9ztz!QK0P~^ zylX4u_LcKPuL7?&?Qezl{f~)XmnlotMy0RR_^hQV?WR>)c8kINAEIZP8O`f$6D_p{ zxOzwLjccAN696MQULeqDpM=p1@n6A6>ZQ*xy(TNXd&`ekG}AW=V(r3WC2sNZ5o4&Y zcd9Lme5P_PO0qhP=QR%mA95(@%3Bzn;>4R)_v;dR2t`f zu(LANU$@wYHBtL?r#OUA;sXjsC)0C!o0xvu#n{cB9O-PQ`(|B!W{vXzZx-%RRcl^Y zdPy*blG)2KN8ypEO`TS0*A#ATFL{sf2}82W2XV0aCEWBh^=fvL%pT;g*?EvgeZO-3 zp)f(I;Ku-7P9b#5U+}^|;mS8zdSn4* z73$tPc9J#P4H`FdIW*nMeU>>X|24Er%K;=PWsL35jzK5#m(bf?ba8yBU)7XQkl8pm z+*Ag_BMb$ki^=!frCN$^z7a8CIh z^v!bU^@C$Amtv3pn1obj)A1@S7(b$IqD`|6%?-3n&x>H5<6zE@t*uXwOChMf8gaG` z_A{M%b_mj#Vgr`STN1As)qztD6b4ujXFmFE@y`Ll$L;1JB>8D`fKGu-%3(iy6*42~ z={P_PpxWbsTILuyZ(F(AO<; zyKgy-8E4VfofQD(_Kiv?t2DWh_9C!b#V2VLZxPyHG?sL<@P;2r7+h{95QB2*f(3s~ zc(-V{y0nzmNhP)SPOowiL%8a&(Z;*DY8_^|E);v%DvPGK^X^+f$RROwC1!H1yyXkbNQNwhTQ8+#9f1_VC#eWd18oHTToTj+o@!AS<&ywjMTp z)yD#`wrG~IeD)S`(q|8aDe>C<>#0=e{iU3L0eto&_N6v_(opShHd}{S>JOLkW#ydj zo)GE-*8!gQzXrdf{9#qnMs#CUJ7kuU1YKB6CJQR54 zahui@`%E$ZT;ttWctcIkuMqL&-0#XgV;{KT__u!@mYOxS-Aim?@-4UoWmFi6GXM@t(Q*-F3}*~lWfhSPR*asn{~rPq1y z?uUby`^i}S`iH?@E9*f9XM5o) zS72nN``}$Aa^H_{1;^ZQEzFN7M%q1|nwkQ52YJv#d1XRunD~=NDPEcw-n?eJSuM5P zt=WxqCuUPQMrYeNwCeZbFPr14RSnK)iY_L&dQam2I%6z?rn;Fx`yL!ht=>#K@E(gJ zV?E3vf;ecJP^A>`k40qv!a+#y>B{-I1Jwk%fofj;4d#3c!^SgBRJ|0S_^H*cx{#J; z{-|DAUol5rFskseF!s~2Q91uc+p9?SkUlSkz>YqYK=MjLtH_Y64j)IXx?gZx68Y^O zmg-D?F$d#Oqm6;@BIVe0bm;j8ma>a5;&pvGNgm$aHCa8N4V|4|8j$zfTTB=hqu2M7 z)ZysQUcAs5{Fq;{3QS~hq-MUjEtf85!U0TaZQ#T{t=U#Vh#wHvOh_q3%N&C4WhPs+ z(_l#MVUJGNa!y=xbYgSWMZ-VU`=V<7{XDn0MbN_UP*CchaS1xRClpM=6D|wAiTjMC z@|?Vz%%3x6-1mn;6U28T%0H+P`N-f|zP9?3Nx28pVz)&UQj;R%vgA`uYmw$HXJjx)9f}UbOo;{PD zHgq?Vd%A?O`6Ienv9toRnsFi(G?yO=s zs`)gm9|LBpE?$Z5yl}((_E`pyPFy&%k=r@oMsmyZEss0hlxf|cb7*#eK9%O2n0Q|# z?x0}%h_GBn7Ld;0;I8CR+*QPxIk-hUhbxIZ&pM#5Awf&|tB>KDTn^bv$VAo1UD_Iq zJkay~YcM`F1Td9b`+WUE^LXlfJEFM0uA>9h16ij{gXxw$>@MtsWH&&>eYCiD=%iGy zZLsNW8-maOa*WGRWa8l*wJo$LAd03^C(`M=hzy~>jA*R7ZoG#1jlQwqHGXY7CQ{Ki zI{o!PR^}6nQx=iU6>gU0G4C6%TDec0D9Nlvs_?60lEXcrys~3beV#{F1l>)T7jJO+ z%X<>C_3QNHRnC;x;5VUg{h||YNSkxPs4VbLIciE|WW(`C&WU3*S(!{pYt4i)t7*#X z!hk=bWd+fqVD}9~xi1bMo%h#!F)Zi8Ck97!eT11eH<{ciDYY@7%MONllR*VoSU}Y; zt@(Bw64MAU!@Wsky*GUtHOp(i6Sm2qX(}3!1XH%z2|8kPI;~b1pd|k6S9q_AB`_d; z`Dj(bxKYgcJp^$0()JHAL`2NCXa5u19>MYN&6D$B_cdw75}rYU-SivaL>TQR+CEDZ_s zH`+JUJ$b~HjyU+FZyrHiqR-~#Yw5jLotS1Z@xI)G1Xvz6mt4DukUbRE7+1`~r*z0!FVy5{KWsOXEtiMmvMv4}PN-Ubp& z4{4=&xK@kO^?=RVxgAEpbRm5&e@}O#bcdSl-w0Z3#PO}d9(hxP7?r~=dK)CX3qjlK z(^rOQDC0p(PVV~p$?f553SdD4kH^J{X0fTCxIIYeWA!qz6fGnwHBG^;r$u43+mpJq zFo;2X&^P&FRSca^do3@~TFJHgA6~0<7b0{KQqXpaDo53&xf>tb;tKmG zp*tMKPQ8#gKvmrJt_aDX{jbPU*KY8H@`8W$JMUCU7)tKU9GnmuO$=9r3c9%sw`U1Nm+NZSMm_9Chu_RTa z$VaVqVslSsn76+>PL~?xzt^?9$b()5XRZ?^uV!VnZ7kpd^--SGL zI0{;uu5sf=M*kr-s%0FDUHpg|`*{mkF_e?eZ~0bd&_Vswt}@q3uQ`e+8MW7+s*GQm zRl2&m3Y57amXh1?xm3~GO@tYATbV?RnOqY)w-xpUJ>MM|cwB8SH(Ia=0Xm@}1_7$A z?0k5<4LIdpp@zmy+$@|1C@wGjvCN&m4ei3FR*96Y8wQx6CC<@@*}?Xq_px=Mgfla8 zrF*iqw6bD+w#f`;0WtgNODYP#HBBqD2l{7w81B2+%t+)IulE+)!o5-+kGPvg%ULf= z6J6Wz(LJjXy{}J)d!P8c(=O~MIPlgx)*hB&ov>rMhh`&{w3vFY3 zLa+DB>F5wuu!Rz!g6r=~JXk`!VixnQN4OlMzhxf+=i{-b56^zb&e=W8_yD^UcN3`U zBlk;<3#B@HUJ?!qrJ3S7>AK@ff1CMfTUg-{+2QCa<}!Q_zSFyiG5z zrTHzWZ>9(NJFRrAtnw5S{?(t_^N&kdzN#T~cD;WqEhH|$Urd+YT=5Ro>Mtld&Bz2s7Gs$sN`w%^8 z@dPy0N!j_p-4^}{b` z@sypLm?G$yilwd%g_K&V9BJP<5_?B=d)*e;lntG2^I)F z99kKPmni-utCjB}iWty%K}ik!v{hgsk;lgH=+!;@*YLA%uGa9t(0EaU&05P6)QW0w zyf=J&j&0a8^Dz8l?yCzSVpMy*bB=WO?~}k?WpXq2oRe(fk@(Wtw8Wjxd`lU}ev<`m z0pQ}HoM|#D%i1tqR+|eNm)SLNcA67P0YyJlk_Y`yFy!K|Sf;ZMKJWwdR?qP&rljki zv|ea5!4dtFgr>|BoAdr?_200P(IISEeL4J(d~^>=s)v+!de~3Y#!%%=HNZ5C5*Mba zX?)@kL#Sh}8RB1b2-YBsBGBYii9VdEZ?4g?&^849fYpO(h0TFiM5mTq3O>D*T?V}$ zNPL+X-6w2K>KR8`tv@uLG2p^-)C@ytonFT_RGd=(MPoDxqjkByyICv9oUZt%IdkeM z#{3O3-R;<)vSaq1ul`N=wnTD4;@ozmGJEZWE?OTEDsI6MtQoSZ{}%WLTp(5;zDe*Q z2*Pe6y~$BBs_`AqoAR2P_km3b0+ikF4>F?3#mzj6XnGQa*c(%<_>Vw?Q8q?_Qlf_4 z4sc}Y7uYjkf+a>|09bo$OX}Oh*+uKL4+i4{Q*C+!^r5+0p`ZXm|H>lRDeJ96>X%4S zlEe~nwtD3i^Vjhv<@Fm*D0{Z^WAbBMzGMjjBN&&Bt@z68U!xAV$?8a5KgEbUr+!<8 zy1wwV<3d9DF*!(@?ly{$&yyF?LaqtUGX{slr8Sf$FiZCp882n|oTCk+{I#DcaCQxS z-8uVVYaSeVCFh{(sVJO@u{RFrnC^~>%DJL&))Pi*Qi#e7=7R56_-EI~AELJYWx@uze^?$0NBb}}{8_Ifv)`pW zMw`Ee<)vq>50S^@QM%Lc`L1_o2wh-Ds^_X zktXAlp%Lk4zPZGm4;lj3^lG6MFU0$*CzE`y0NYO2BrUF>Dqf`(v(xu*y@J--KOfbM zSH=nKnv(@>(ru1$oYabC>-|&Ko)b&ohJJ%pk1)5Dvk&C`0-ksJQ1`JS4ek3z@S?Zx ztuuv>q^>X>Ejui)WWBH0E$HS|d_z5HDy^2pTVQW>ZB_+xS@w?EX(hGy6T|36Q%ce` zw_%QVgwEk{fU%HX6|=9at3h*|aJgQ&O3x^i&t-h% zfG~N3%?1^gmL{z^`orJD>w}eGXdsK3>nRil(n`w_Jl1VdvOr)0n)+tZwLsoZElpE( zyYLlHtjlG&8v8b7=(zY1;@dZJfqK_$+FnLfPE*%X8Qj2Z}352l);@iY{B$&8lfiSIY)F}2lJoWhUt zPbDj>gRgf}x$98Gjl&q({zk?koPNg${N zhHgE)9PID=xcIUB5c8zdjV)%>)ZB|GBpe@#(?DzvbwI)`6HZuJ5%y_v*=2YYzCWk^ zlS~l{{djH$mzCI_dTK`AG{h+=%MuxeBh2eDvP~8v}Om^wN~lW)-hID zb3~%yW;n&1{xSJA=V5$2&}!KGww8R4Q6xekWA)NX01Xm=TrOu5M>d%0HfE>pF+4@a7g-Cj zk_?03UA`{L6^{Kq_rCC{h|l#ZH01j{QvAg~rvWI3{PH$qccA7bKQ<}>j|l@L@snZd zax#`tr;rTCeBo8$8*Ot*8~7Vx>T0%w>MUTp@9u$@`e@^M5{OdXP(MtYW~h$CZT+lk zN9n%S@jc!eYGC*1%A40W21+Az69r*b1|$wq^-e9wlwfRx{h)UtO?+YrcI`PSJ{Es&M zN%gj@fs|cQxl$Z*+1=p(n}w`E*q~!_TmfLMBOvL4S?qL^DSJV zyzE1-Y^uS2_9CQjJmFpH0_D9ftEnF$-Az=G;8Qtit?(epjrK(E#i9G-4@1KNA8U=1+hvk8 z=aeM<&ExCV<@@`(VT9bjqw3{_ks~Mne`gK!ajZ1QA63gM&ZX0Jb1z(mvHPR$ZX8R1 zU(a3o0(+S9gke6;cr!eGZ|`|(7-EzLC~U%+OZmnn(-*Z zF9~I#iO!|J6CJOLpu}~1#S*evr$AAT0vD|O;UcRZdD)S??72{P~jF=hM#~uSh za!*oke-?rRQQspJ7-O>PrY5~}=7H%gD$F0S9kW-(3SP~cavTpk|Pz5__M{=eWcMzd(RFr_a$I!-#eTK1?r0!StGwjblZHi8@NGFxo*7RrRFSfgs- z%Pr5#EvrNqq~BNzvi(hw3r8Xar$ds0!V>xTgw`JNk6K;&^N&QMa2~msE|E1op19Tr zl}z;;%o-Mu~U4Zau)#4WW%8nhPRzeXXAj5;-wtY^ix2YE31BpLkudoJn5eqp%Mvta?BvpP=_ z$ArvOs(!n80+qy7tG^@3dvNK}Ojo_XBrwp`tW9E1+xvN^TwJ(1LyH>4HxZ0-EVzQ5v;?`8n>z1{A@e>B(T`vTs_TpyoW=+tfohR@d z{e{cN-bOgYG_>B@J4DU%H2~ZVxNyycf{_1G;Cay!>8)oODEY93xtO*4+~*x3QD7)s zglh6;-}3jlFE#;7`t=Rv1b2)ob3&?6b=Y-go$#niMlZQYQ}?gDXJEv=Y&9bKQm?fP zXB>$3_E&Z;+2SYJEiy%>pFbZl^Rxy~2@WS?%bc=F#l{~|wLiTrUvICOss`z9h9XS@ zfCce`t$a{5RqIjB0~w5YU-}>);dNCv;Kp7$ab^@3>t)MzML1rmbXm`%)-UZ0#X9|G(7s!n*vPq6 zX*ebU-u?QQMElVMist34LFZVzY|}tPJcu9A`5pqvayV&o{l{mRA- zxG0uO-?OfQ=3h#ojO;?TYY8x8BpLr{4VcAiMzNkRJi-5ig71Mwe7hc4zPFFw&%&@} zbjei3u__5WxlW}B_JAMwO$rOq(}(Zp;#kLDQ=CFSVPiO=himto&ScUe8KSuLbns%O zG#-)T4++--d8ra=0benVOeV%r$uLoVAg4^pJ#%X*q?Vjr$Ffc??%0MGLFDr=FDU~7 zA&^vyhC(eZQ)ip0Z8}+6%zq(0?9rFK263WQRUvo1-FX&#mPP2_*>u~906~&k8)Kj+ ztt-*y7p_<>by_iAs(yNE>u>-KGr{KRF}P`@5Rd1Fk4J@H*yHk#3cANmEnT;I0sH(= znNdbXC5tbmCP|u_kAkp$mEQu;aqCtnmicl2*GhQL4)q_#-(W)R*N#7qvJUW%B^mdw zbPy2xRvNm+O#M_!u`f*ulvHbUh8D2A6%4cKjTl={xv%U*gRs(cZi*e3eZW_m?}DuB zuL}~A`qA|1d|Rr@5Ba^s0qG$=zrlTn8Ls|33IjWTi6m3ZO4WJ4PY$?resO)~9V-q9Z(&__r zJ*W7QXGbgjg}r%Qs-zfu$o*upFG%y9kA#50*!EsGW(&6qk-lk`y)hfsT&>AyI8M>b zaJ#Cc{i{h^7`E@ltd@)etSF{EF;ADmJ3|IydR>os+TKoJklgE6(K5g(zWAb-8Rmpw zN)16lh?J2969*@)PfD&R`DawsmAh)2R5Ea!2qS2_&4zEIFMWn5uzBtmcfg#dv(70$&$Bhh#_DieF7vi53uh9o z-{^h=mdX$iD$;kI9PYRmGB%am%DN~S$M=(tgNit`5sJHH>gNV}-F~%1B9ux?R|||& zU8}-xSBs^XG$}0wpwJP0TYRc4edr!c2P($W0S?BK{semjP(dTA%hjgI`o4bDM057p z?fS<26yWXts+6Uj5iO9Xp^1&y>Y0lPj0XX+sNsWTL)VUr#DaBY;EjN5^mDWzXO*b<$qN3Ge7ygixWbc`NfY}pXh^MJ(0IZ zT09Zq6Xk^o2njwB1M&%o00qT`d7cP97ZBxtF3c|gYY( z!O7a*?#T~`Z_MnSourvbnEuZaY#sg%_AhDmPaVPF|L3l@wm%5)J6M#Hmc>8t{Y$_o z9d`!{ek}`>y)zPKLF&%(W3YpSJksKglRZ+$-rnXp+@W!2)URVqp$K+S@+) zed!X`{}~s7{|N7ovF8677s3BHmY;+S|Bns+rw#wJio``fvVUh^QsM6cU|~n%dL)Ux zFE;>pe`i{N`EMjKx^g)R_yD-_zfV8?BVGM_`eXP{SFVs+N&mk${BJXtzX2$2{-pnt z{?#iKfS)L?T&1{jSr0fS$@-P6*RNdphZ?y0(~aBLuK#@V))g{R^_6Q^|GDw{Pgk$~ ze1p_>`#!1Z%9U%^Z(h4``v&>-Tcm}O+OGdhA@JhH(_bG@-rUl3Ec_<;@K!`Ov)r3B zEfy+j8f2u9JS!SAxOh9gR$EDr_L14UA{Z)4nB6Ks`7PahOAfK2j5-B#Cs9!BGZKALGI*PS#j#kS| zK2ve~U8HueMb`YS^chsftgwPkw1}=Bhz42vpJ<_lu2KMG0bNu7 zSpI)=|E0ixDezwk{Feg%rNIBMDB#vTE4Fa{%T{XVSuDE%LyW5k+i$auWGQ{V#Wj89 zd(NWjk(O+|uQb(7R~k*6dDzM$%WDlRhvyTn2j=H5N+y;`mLVpr=Ua^%96dLp5uNb+ zYo4HKn%eA1gvMP?&de{K576Q&3{mNaj_$cjP9?4Vr?;u*MXnET6KSg-vmea{JdFOL zZ(i8+a~SRtuySj8_yWt+J9xlngPUGuTK8S4sf?%G7=3?{cnP4q1aNtoZeF*!1k@_+ z?Vkt7>ec1*UmRUvPg_FyHr;%eQ@2fb0_rcepp$1TTcekNu9`LDf+N%=K*daN}2Kg}~ouZJ%IKBS4(8X|v-kgcR7UIK3YPF(FX0pC>FAE2Eb#$l_17H9Oy$&wo2!9B;-C`O-2BVdrXHI&hhZ zp!~J$5)jD`Br`>aqO^&`=!eS?%_-g2+u)pS4ZlXmXhWpE8CnYjrpqlBkNmc2a>J_Q zN%>z%b!LSw`-}?+wqAkhqT#p6KGo!i{OGPTy-?x63h-doJIFZO-* z40I9=69x78spCWuwHTYduF8$K-5+o&#s{}!RD;8WzZ`muX%soFhy|(WsNK=#`RQ!T z#drGfMDL;lyzIpbJFhrbJ0t|BHa0SySe>(+e$+_x?;pM>nCu}Q*yx_|_@??|eGXt6 zv+n~g0WW{n`-b$nX*%a|zHQ?ICu%m$aYDHom+3W4A8>BZHTK z*GxSH2X-Vd>vfxxE2dR(sH43p(+kdvs7rue_(6&9(2YIZd14H|pO@+R`43E}O_}1P zWN(q6%l0?*9T%^YK>kL42{<5iOZD|L-96mrpJ+EsUH^H?)`z0$-Y(|kYlMu=sNN;u zlWY&>z`^^1%C~E>uf|h=%ePqm*Gs^WkL+>5NpVDtC~wWeJ*)HOOMun&+*C4?)PoJ# zbDB*Hic7%TSjxIB-xIxaL*>bYOMtbD&o@!uiP!_=o381oUtxz6vgb^jAh7I#-!^H5 zcVu@>_pJrJ21@h0hQ#(V&XZ{gN48TJBR^!%-M5&A>73;vnzX_P934jX#{n17vIN2d z-@9kBqfGs>?)-JLmw@0)fQm0^jrGC1S_u6DSLO&joI7cL!M`41RHCb^7n^+Zqd#lK zFOF`!Ml_dzeP1_0rlwl8AY<$Yz2mNPs7F+qP#In$!>Kc)Pr}(L%u3Qf16`HP^eKu{ zl>BhoHm7x_-Xh} z*QaMmF^_o35E{j$N%lf_t#kl3^`$iZvyM%=hq*s#_hM6+-XWYR@- zcfv{Yz~wv}m)tunFH>~LEoNwHFAI_3@fJ6`Psl;xaQ0#|H)Ry zU>8{}q>NA+iWJA1Avx{pJ=7pWXgx&+fhi{>+LZ$3rw<=95Ad!aCiGpQ#a+I5#jjI+mV1)S&*$b4bfjoo2t8l|C5V0{?ge!8gj^M5NEVF7w; zBWH5hs|8-URnvZ}5x5>v7omez>CF6^^=|y(1Vzv=Z5CA_1*f~YTw9M$;>q{&9Ts>L z-$o{HgzKXyjxShCc}UB#2DVJw_srs)KOe^h2d9U4HG6j-7`%ny(oN=cSQ(7# z&LG;j#TMt3W+y!jdthSFO1t24Z#tlYI6?Fj?X$Dq-a&`fdAf`=QZWMgUDJ5XX8Pf+ zd^+<1)^f>S64@#N%HfFL{;}VGk-IWg(AiagduDHuzf$ydei?dSA!Gqm9rnl~v;|WL z$%7T!vA1akLpzL1eaKwR&B~bWd`;LKE>h4Y)Z9(NkB*O{yxScyik?+>98Oi(xQdK= zLl{WPLIi?v9O9b=qDsrk7J@&XM0@)&_{OqkLDW1P--l?oWX@2_L_mxHEC~!%`El5!3ly^GiTjXxnL%*obDfnoY)>xpyNJ z#p#Ro4Q$xH+HC0IsX51JA8(v)DX9Vv7(%PqEqw8=$9Iq9T3dP*4JERKW}cuky~5E( zeU|Y{eF?%)|HJ9#n)k=0dgxcv-6AwxeP2{SlnpL@k@~C|oSffSBQfF)W-~1&5{tx) zZ~VpnO><*sVj100{v^lWzo)CU_Y%WpBRBL^kDPl4OTYOanK-r!7YKUiWqoB0S6)6f z>Fe+`QF~-&9I~a_B&a}Cg`DSfE}!x3$ii$Zm2IPund(eK=aoFjCZ<&cs_VR61 zHj-rdOH*z$Gk&gi8>@L>D$rBm?3XF!cDAsUgP8+bpwpPJ_3BhPvdP#JO_f@Heq%BwbAf)VtgH-tk^Si|NeTvjgu{a$y*zdj*6 zFx%?MEc(X9jhi4^RJbrwZN5*GrQCHkbm^JtS#wNNyAc!>d{9C?kjgM{Tg@C>nzi;Qi zl!XnX(6Z#A&6a|L+_QylxsV+L9={fY>#E`>&sE^_ZQ9K_&4~U2%9O)0O}c?xEHadi zNClJoV7#iXDiEYkWZzQZT_?U%Y}Lut!_f(w%^M;$gN%%9ry`9;Jt^L61U+^&mr_I> z#(PbaO*U!ktla8V*ZMNCVQd**U&JF5+1N&AnLvvl=-oq{X}E0EqX!HqM5{DZ%J^eB zk*VAUOTt^u&w5NU3{>+9lMOiD*#cXQ#n&~bjlxcM8h_P51ChOo{&$_M^F@ndRA5|@ z8rQZ^_5qB!;=B!k)Qk5LfzvdEinQd<)5( zih9b=*@)-VPSwr3n`n^(?Je^Zwm_v5!@uCo+eaowwPDkRk0(+#+>*k;m5hZNL7df( zY?TF9q{3mJFwLJS=yc_NMW^kJgzjLBbnTr&)!2Lr>MmJY_taK13YhCQDsF9=&IoS$%XnKuUsoI5 z?GZ~VH;s!sqAQX(2x`~Qi+?oxYoQwJpo8e=05+3|118~q`rB2HSPoWA7LX=<9`oFx zjBJM?GzeP`f`29DG|K1TqUe#M%uIrPnwIg-$@~qMP=yVTR%xNJI z%WW=D#uZaAyV;u{DZHs!M#iI4rd7}9r9D7^f~v(zbPEs>nl79Rc({n|N~@n+E7df| zBaqsSM;!0L(%9@T)^i;#BCMIE+3+^2@Bbn)0KnZ_?H6yBFSL<|`X~;ajOy4*37)&x~G|z9!aFxU@a=4pWiUo?al~WxGt(I2SWaru2t%8zVL^Fc- zF+2iZ_rrt|>&(q2W^N<^gEi*)pp^?I5Mxnl$S#f-3v?)eP&8yNYU#_7F%qI7yX2j3 z5FIZ%7*RO)fZV(@$mapzn!hLOLAlk7JH)kW{iPn8oeoy$>j0_ zj5ibu=R2qe<$7UtFl#yCX*93m>v^6B>L|BX`+J69Vo3@QO7A&bs=ok=dW`4el{=_h z>5`(1YLF8z?R)a&14}sWW+S(m*qWp#ZL9U7U;g>Y!6l$kfNw%f&_{?ap>`mZ$43U1Fi(lI{e3v%CKW(Vt zd-{3)VfXO`tg!l)`=e9W#pBxkK>frpP9;)#{7y?w(asBq za%riOj@OP*wuty>RkiIIORLDnTeSe4vV(`uJ#`jRsTAKgxHxDfcQ&(Uw z0pno@dBv+MCKw*lu{eKXrtkw+GurK$+QV6Xx4h+^XaOxJ6Kf@#N6}#$AC?rPj-*%q zjfwuPcq67pO!hu^E7P4)ps#<`)<{hX(dKRWdXP?7A02bFgYn>D+@K<9kBFcK8>x0^ zTSaAg6|N*eiy8{5l9Q?rZW;!wpKBp3RQN$Yyh>F!75ARuQ>r*8WhsZmTynX6US z3pgp4ClTG?2N^>Ln~EA5a_Jbk^gS*oPNSemM|58Yb1rylhwp+Cc-O4DVXXI@}u0UX=|E@r*{k{yQl@ zgQY6xz)->t6J?;cc?g&PaBQ3W$L!_Q!d+PeLY|myAj*E8%tmF&e zr87RK+}!kgoFCG=F%LDjCP3o>Tz&{f+O0KD0O79ZxpHdi|S3UCzb# z@4u|WC5o=~d2a}=y4ViiZn*>qF0>JGU(5~K{Acbp1+;w$E{L${4Nn96S<2~k9N7s% zkCl%S&(n9RH=l|?6fFm&va{O^H4iNGhTC>}8qj(LSE*I9&{j)%S^mAQ!(rk%BN>zw zp7(T?Z`3O>pSKk#CFVW#Pt0k%{gwAqnHu#0Ypngl1%jO;j>G@ikTCbeNK|p+LG;dc z)2?(1DE#%^uar~&#)yv@&&Iv}=IXF4d)LF`BqPs@uY7?E67Ty<=uSh%-hP(91tL-< zUR1TgJ-$S;T(HE2bIjDQQ)wo7P-arz+>uz)U~et458*~mXFXEf#M4A{cLh&ui9Z`T zL}7GBh4b^bJkeYe(O*1AVyqk0sOsbpLUq)hRo1JL2~IzkzO2wO8p_g5je`DsP9Z>U zNoXui-A(OOYZ34M0EKfefU@M8Lt`_sV*6>%bD(~9lW}Du<_#fsjW=5D{`jb!RBfcY zBVS(g@B$>UHxFy6sJB|fDd~#ISmiPhWSk3ot7)cqJAEWVrt9%? zZcQyv%=RpLRlwS?{G#}x!^f1uZub@B)7tWS0ox8=>gVYWWLfJXS6QbnDhXGjs|U}` z&EMDM%8PX4`6yxA0#rj-s!sCdgM3?TymeEZy*t8b69nvU+37O3yZi_*k=Yfq~C=B`JzDmUqO8bdRqlf|_zob_l-{lN-LO~9SxihtYAe=GjX zC@WNOpR6mK%CJ$&q@R#}49TDOkFv3knzoA47%My(j0+7EF0u5{)@`#b91f)4e#qTF zO8gS!x>#1NcP7*#x`ThrD0jFYRK*GAYXzEpwRRxV^e16@T%*eE49>(_qD|gT`?^)l zU{tl$2;mwy4Zp9|dGj(+U7*u(XfN6aTQ#_s;2&-ObahTOaj@-Iy%+Z!`(@hhKwc+Q zZkOtF1a5Uu_9D!KAizk_+{|EMYw*!+;-~)f%p~)|UZD7_cQ!(&jRUt zPt`*A*Hae`>-M2M4~&v+7#~YG|N3}IJ+?Yuyns%W>i~lhc0ni?c04#pm^-sY+MyVd zZwG(R(fjrY^N7c+S@J_lqsbXN{7wV3*G0*aRiW_b33Toy;L+oWScUzuN-_TFAG(O+ z{pgLTtqHloaI!kb>fc>VBkjTe>S7{iYy0#HFM{J+YoK(=??}d!dC=2S=t^pM>@h#m zndXXo6=qYLW6+LP^}=I$Ix8s0{aH=${;Z}&jT<9XlDcjMDn+j{=!E-NQs_-pel>N> z%uwxA-IsEHmMqu5FV8wCX6~Sahb@Lg%d2YEW zr?@${tSEkV(=361Cqjj3a|C}7qaAyvulzBqg-x(>^6hFrQRny@ref1ys~CP+6wTPW z1awqUbc70wpf_S#i#&%qPrn98|61JC+cm}0T-ez>-8N%|ei#As_{NebL`kIA6{)tL zPvmo$U(JVBf7AYo`C#GCm#ny|ol}bclAv)%??EF!%#x8FJ3Q7nlj7*^gkSBfjuP%5 z#|v)??AgT)mV-_OJ*@PmwnyIIa>qj?Y<$#!}^_f(pgWN5lTlTs42%@GX4`D<3Ft2BYGQVSm_Vr5V*$o2k zM|C>|kNZMOyPbx%Cru!J&v?hQt=T7*@*Ja!LbUD8m`ldtb+Jweyr)j={&&Ty&8 zJIr%EMsr)W0!9|>kt6LQ$A#^AmjH41C_FF`JEvz^lH##oR?o@35X@w#B+6jaGd6+ogrwG<3=6_LfV$#8zEBwDO?lPOrGn&2;({@`*o`&lAtQWX+M#FsR_8#Kg zjWzCkCiuML+c=rd+=uN8V*Y$nCac#<9QMvK{bWklP z-40fw$eByZa-z57@!c|p4WHdXRco@CWSQs&X=lqaS5*Pw{JZc?g5t{X=a?EyL6<25 z$;ZNKN;8qp1*#B_t@5!qj%}rp$l`p1)j1Ho1Z?$F)*6Vc&1C7_DBN<`RC-fQCz59kf%(pX?`HY{AA1al9k2c0u75e7s#7KIX9c7GcXZAgciK1;D8k$AuH;UxJX!{Vf zjp;0g1L@3vm=ghsp=DCgfv)euFj_?r=d-MLYOLiHnp-FT!gT*$U{u)dp1G1j?&lCU~!{HS1|k4*&kfBWsRwZP4y`6OWAT!m0_M<4j>lh2in^P;af4201Qtt4G5r zJA^$(w>2M``y=J|>*|i==2mg#V$y@nzFGV_*;>&RdRShS)s?I87fPIsN zsepD>@Y>7HHk-fU4$?i+oiOvD^Hht8KAoqyS24GyP72uN2ZMus=sQ|f9zC>2>y<<_ zHc4+H*ARw%x~LdEB=b{U)`^Bhb48OPo(o^mv#J>7)0bI4<-VZX;~vbScBizjo*PSb zuA)C!A6mEVziD>Sy|_n^i~Z+faDz)f^_bpuAeZ%2Uxh*5l+)l$S1Mz6tnK*u zhb_EwouhNWQI5*N!-;k#M*Z?ov#iIBi7V|}KxvE%S}C=k;3IDUt}6R%HLpSD>&?Yc ze5^SQuAw~sIPf()qnB+reUp8DFQIYAZ0;zlA%f!n)JI4ko1S*NgF`JwQUDZO*duGU z2DcvyY;b!TAs2${dIz-k{<#J_u3enHq9NUub!6$lnb&4#)g@G+;c-GYklhgicR*-6 za%&}VD!qHe`nI<~YleW+o#i-|Qmgm2x~EYbjE{&_%QX+)>7CPCtBE8ZJWfdN%v-#Q zU18g#H1FFp(O<9&&q-uM^TyNif}_?6UltoY*p-uWw5?K^?la6D1t&p+tx2{ce-OGo z%Vc`AjrAOoL2@0cCnZ52NLL;)ZlrF}IBPDftEb+3zRPjFtx4QKQEhB`05JkWl{YvL z>Gq~YLPY{Hl&&WC{ks$v-PwK z96t?(+t-esLwoFUKB{u!$bCNEwqKU8Ad5HcdY2+@mZN2BM$DI} z)W@$RvAWVsUjkyPH|AHyx=;*!1q-tp3<5fwqJ>6-j8Go!4($)bjD{NiMi)kgX`|Jj zNycQ)Vm~wD1T3#A_Gy2I4ZJ%48}4(!*Of>ja-Yin>59F~<`OhohmV<^n7P6vAY8kg zwAcPlrc>0JAO$P{)V|1ZNr5O{UdoXLD-Qn(4I@&da_ziGRJU_-&=7FW{Dy#u#j`}D!e@M zIzBk&!A*vc%6cUCxCM?_F_Lobl52~IN?S>EW3t^l9+Ba~4Y<3@q{jK-?mn_z5YGzgov$4gQjh#}j z9#Nq7`JRoEuYW(sT2_Oc43FOYQ$8Ud`q09}#3fVBnEj6l6`gNBmo#S1rqygJpaVh z;um@Sv|x&?ed?k2gbEz=f1 z@iLXE(#i*JY$bE0akjgJgyCw}T|Hxz_A8c*syv|q!TUWY_2g6@i3a8-@FvN1SLWmg&M^s1O)dqbY2+^S}P4zxj1dfyr__!^1LiM>?w z)LZ7b1SI@ASsBB)#yeK|415U?Icp>r39YBujqME1ON{M7c($lT&BRhGC{(ej)Zobq zm_@OI8!K|dG>-9tp10BFA~vbfCy7yQfzFnoE za@gaTpXIEzLBL88`TVBiDWz*P;Zwh1;)gYEGei{5TunZa{F@ACGA6Qhh1}MXDkAk( z#+OJ%858Qa&=!PRjOR?#3vQP@mwbhJ@J9^QVMgb}W2Pv(lH$P{@dL>6^r~J?f`3yG zoGd6Web*1j)9HESx=}>*l3re}OncU{)atYC%@#C8_}qu%(bfvi8{?f8DHTD;>A#Lg zJ9}*D6kJ#R(qM?!H!Co#q$qv%P$;*DCNYh+_5*VUZ37!^Blq=(=z7vET`B8JE#rUU)Bk&x4ACj` z*7`zqhhT~_)sd#W^?9#RThs7YcK^!ZN6Uk*OKZG99vN|86)U8Me=u$~hoj|;C90+fVlm+(U{)9uF5w-FtL%38UwsQm_`E{Yq3P~;KntI0s!%B6*+!iU` z?I}=5f&Ko`LnC|nU<8sZ|FS5YJge$i@4KZC=JZ0(2{OdQK}yu{@V?zy;M3`b)`-cZqtwB#lOR^BYz1nF)RLA!SraU{Ra1 zNl&V!@)&NsgKlkIiJ5&5N>)Xabqm|=2e+fVn5J@wih?p9&LCru`}A-Eam}U>s9pKa zBo!`}?!z`VxBN7>JNcG_#%ZRA?)%@W7!rD9^XXQpwA?D%?F1&XkvZ6sFr4CcIoGD* z63TYWNfRh`z%UPPe4OUEaS*1KKS0)c;TQZo>#jsF1G=~8!}tJP_Qg*AOT5_m^;$vV z=NR#QCWCu=qI&fTA$bm=+Dw-7?k>K!bPbmE=a2<65x0^>^?Rc|*mge=Z!lUeoY3?s zdz&%m?-a;ty0Ef!8O=-kA1k{hsGFiVSenUoKiSZ!B@9G8&15C;I1bkDvX@xu*@CJS zL-Xv4>jx~LvC>^t>Peb~)K>{9x@1dtjNbRA8S6Ls`P z3~#?TaX>S@GtrYvShYKJb#yJ5kh|Gl+Ph8TBUE=mMJY6{>yWQ?BKGRgPW}t(Vn?u4 zPK$J;z@B}1O6r@5hfY7u=2DKB7~KD1n0o#uMvTfyv8tM^3{%3)TAOW8+j7k8Wl#^p zoS9_XjrYc?qo5PY#;Fg#7BRCebAiv_nz&PxsKmNzQ8!nFv_uW*5T4@9&$1q9(3;*#daJ_aB4yRq+Uor|}krh^(^1{G*MOkdG)d%p#~TPV}L#3L8 zI|^Skttl&#DzT7q8s`*myHTVkR9D=xzLuV$_H$uKzi#D0@03uvQj7P9M(RG?Sb`L6 z`n5ClL9NajCy?8zP`|(}D!Iv-HhFD6ASo5$B;VoOXzN3qFRrharIgnLgIU7|v%p6O8du^>bz~X}O*mQzF zzpQjYyq9R=M@_oQ0&_sr>^N%^Lj=F&7EOe8d5P~}Dxu@Mp?!{7c2yJpva{?_I5y(L zX>jAC*ZtP^AaRwNCCRr%k|z2EZQC*F%)|lm|Ha|h8+@+Vr!dgf`7+gD-%{S#Lp{#z zmz;6>PcKt|fx~^?a}gr=QAY0NUfUfGHBI)>2~hB+H1uOKnv(-FS`kR(Cm0-^fl_k~ zw;;}12U^D`(i|EU_7UchO2AFevBRp?d{olBBI!>$y5oAXTO(E23hz6kWW>f#)VA6> z(FA;lAPKqnOjz6dlVwO(pFn_ zzZ4kB@!{6EZC6^1Bp-kdEDM6O3;dJ#;p-3y>tvo$?X>M`k!5g@<3uYtuy}Hh=4R`}JDu4+Z*ytmVN;3+f`yGD#-0eBM5{8M z2vTTvj1|J_5@4pXTyzi_uBtJ2u}tn5wKe82U}vA^tw0=jy0Xc&yH8^#XS`pnZ5rHS z{`{E1$CT1#K#Vh}LXR!9xjRLb_}2Vc7h{5}^{`)iLRD@lvrR-*ZWwGNC@9FUBIu#r zTlJ9{f#fRXudRYAjhd0Qn$~O9*}WPt1!tAkqzYwG40QrRcmV8vr@4~h=wrqVB7#mk zF1dVrC80Y%Vd1W5g_bC+r1bIa_15xd6wpta?RCOHx;!P>3cPJZS?hr`W&6g?F&~k6 z*S0bEL-L1Iggpl_=)>q#!)7#{)54a1D|yy?C7~sWJZEoF8Y4-Il@2Gc)q*E$CD>k4 z`7LYnpR9hR*lKqul=oc+-1ddf9q0}986>cMK)ttus&FU?tWq#%ua9KLy}@Z!%puoI zi~0rg^72dQTP3`s8P!JiVd_cL$fUUp+5-A071}`}y4*S0MDD;5Vfvg1x^=Z=@T;H%D}W_oWNd&_dyMB_g<&hAYxYKckQJ@Kb2=1uNi zvl;Mgak2GC$=%`S8b#`H4eyMXl8^S7WXA5rSgh)%jDJ-=WU_J%seYd3YE5;tGe*n zO;y|(A=n5#ifqn0*YzovW(?{P&+q7X;aX!u&4M>mwK;<4M^ugG5BUXQN9Dsk+ZRq4 zLR)E)>NFe1v@vxc{?)-0fh-0Aa27|Ca0*wF6dA+Nt`{WG|2~*Zr+7K$7ORO_X zco8Av!v;rv2HPWXzSgM7Y3CKK;MGS+m}B4bqZQf^U5TSJC|8WJi>RM+{B>2~XWtm% zPAheEEKf-mDi}uBr$Dkw1EPsER2v%{&M2Tx84jq9jB3=1PDDo8BWz1YC%U@FV`8!s zEtJ&1U~Y?2@1?0Hi?h+nB{65*1aX^%m_?hB%v9w8^vlnGa_e6{d(8QJ8eUaIw-^=3 zGlpUJ;5;sEzhz_N+)iy zRS^qmIJL0QytkUcG1e_00X6DTH&*n)M19DkN(id;@Z;uvsrH5W*rAs$nSDZaS=K{{ znJD`7t!~1-%$(|?4k>3m@w)0GURHRB_b__|1=Wg&WD7%?Mhp4%E*=+VQ)*I#KGg}(&yqd9k6ISr6!4(mDH>Nr!w;?ZOS*t-VD(u}bF>r`J?Pe^V% zy!lHA_s*Hc+mHDD_ud-?)~J;Tk#qL6Ec#}T;|JOMJ5##f<;R>=jLJNMh@bYwQnh_G zohd{Jy9qqm>I^1&8thHVbC7S;6NY%YOH9%&s* zVP4qi7J?dbAu~?Yx%%j;kI+P>hu^DUkzyRl1@N?#6iEo^J(N$#5sg@WVqdWrI~|+! zpXvrwHG*`TDs z6A)zY0p@YW>eH2l)}xORF`=oNN)u+;uE!h=97oo47o2xSZ@odrsv>%qp5{yB5!=Tm z-^5pv`bQf3n>OYjNdS!ukPBijD3P>*$j~6?g+k#0S7E4S7a&~U%#WGC#$g09= zx>yXf$#Z(@L%K&2^s0hB)#*KTQH7)|Gy6-#W~S(x2AFZ&a$Rmt4L(*i^otfRsS;7e zO9>_ONSCnnjG1Am-rG6#u>{bw9jh6f7U<}3OYv;bg%q|5o}!FV+a~$)ZxLxP7Iebit__}Bcm38(yB-$g zQJi19H#AE~y>k|E*d)-uNHzp}lbuhekB=gSZ;<6)hT?9E9ov@Zm|82Xzh=|A?^M$5C*?<)%h@^WZ;VQK*qxR zfv}{_>9ygs&xO=U18Pj3*C5;%gvF=c0VNDa7@Ssgo@ueu)fwLupW_9%aWYKG>0H23 z_uE=bzw+FctxRL0rqRO;;6QNmfyQ}i)psANIqtAMXAfhEh3X^TuNfb(%X^kR2wJSt z1P-ec+4u?zioq){czkho*kk>3H~;$iSpRIy>jei#<#XtFH_v4w{oRrAP%>5Vd6=zy z`f43{{u^`phY`vxEBXyX@9znE$BGEuJjmr%x7?77xwu%QUD2KWBen-$A}789SLrw1 z0!wu|9r?`j*Bft>Yt1kiy2MaHHORvVwnj}1E+TAPIMkYjJ2oI9UbXr?aFM^~LoQejSj3lSoK;JxF9AwL4@>eD z@(-Iam(rH5+i0#Y!QICy#wzu;Y~){)d^iGAVV;v}0`PBg;{4?Pp<*1Ln+=MXXWa+x zx-K*MmE6tCqHgAwjuFJeJXpRq+Tg7<#n|EuhLC&A(t%Y_3$56G;dSVwzt1*9O4I!E zZn8H?U&ViF>x5ICOu)*a4~4Bj_9mmjUBA|Gj~K$IaemHINAz zy`{Yixdtw8cz84Eov)4jbWezG*0I7283kisCnBajBRB%=_$N(v*sKnB@5mBDT{YyGi3Y`xye2;8M>OVHFAM-dJE#Kb} zvrWOmO=lDBy&8LJsSqPoL?`Cn zbj^4sA2Zz_+Z<%*DqiJjv_Pt-Wo{qnuDft3nYr}z7DKKlxUCv^)Alr!Hg2pBViFWI zN-@~+@g2XrO7rwGP)zLxXYUN2ZGW|E0LSA1&gZE6d4MbF4Nb&+fxFbGX>wWVrfJUn z#y*!rckoH{)0Lhu+Tz4;yl~3h%13N@Uk*f+cAxd_#ex5$g|nw+BM z#U@trgcSBl+*R|T7Mnar+mSty$6gDgP!f4IEX$^m#LQE1*=26E{w(rPDK^cfVDiF% zheg3+K1-)1eUf9F+^Tcjcg1TD=3VxgOS?-j>wE~a-k|7bjV1}PIEnmZDaQoC!*A09 zhKO4My>VR6VbA04nB3uGqSs9xxAEbpfpCeR=nkdKQNjP#C?YPB6|kG>Ep+6 z5ldEDvsBt_Fu;~pEql-CMEl0B?u(eL<&(#;w&}~lY4WOsG<83^SNd|vT(4eXZsNN? zFsGyELi-woe*0_X`bX`R0KE>H`rEss4NyELsB%?;KRS?ud#{4_I5O|>Ib_iU7H7`Q zvMOWjkBe;QAv|CD;Uel)Pw1SqSD?1Xu>;rA(+!C%_(5T~=U51gegu`26N(^R zEzJKorN|X0Myd%u#$=YnkG1WfB`I);>QvDA#EK?6gNfAWxkF9wzB8`uZ`O7>O^>`Y zx|Vn(jLB#QY=)zTvdvM<8&WcII%6sCvJ#)#i6z>>D70mRY62=J`i-_!t|dyC(8ow> zYCN9!fUfL73|}ngm}rn^vW>B5MW^w^e_u_o=T>{wk~MD9Gq26|SnwuHQ6ng&J})RS zZQVxKqIy5fEdQYF&QT}VU3+s#Z}-0pn2a_VL72(O!f6%zj`Zy3iOOE23yEu z?2$K!w;2iwhR+qL97!6HgQ~2cdAV&s*_MhOCin~OfS<;~^b@1M>@wSlQL%3n)qD=c zMTu2{AjURlriMyl)xq|9?j&3zuzlF?l~lZXX>{F72`!&W)Y7hX>jx6#_9B6FL4zDj zzg22#x~A`?f7%U6`=OEpafuu=+9dA+hXuo+$oR8`vfLCWouQhKx%{`x2+Z8n5&DH? zFq1XZP&GO?{X$sO{HQc9p3KPdnfpm__ftNPNltCA>Znx~?zuCu2gHC_%9#ndF=zEj zH0gvMW(`d zp!2-ac_NinKIK@ZI$o7~6D~6{Vnj{#IpuysaWuT4+@7X3DSE{2X4`xf((o=peFc1) zd9I2(4qfyg|Kg_dretd1z>>5)NpW%MG>sxy|#f!mSd%9ca$vY`HahN3|ro9|bOQr0rz7BRk#T5{ZuJ zdp5RHgVs^QBVu%(kO%K`iL?Wl0oQd)r=MqgR3{$$?NjlRCMf;p-Uph0qFL ze^U!B)|K?pBMa1y9V}tia3+W*2jUP9=;D6)E`?L zCswxfF0k>edzvD&*9M@n?FhP(L$eAxjZu-3Js;n=X+*^mJ4L#&rTQc(mNWpj%ykkw zkk!1PXiP=iAbla&YR)A|>>|AiYcPAiaj(+q{RlpSqssz1Mnw>&Id(SY+|nIcJ~mzV_$3 z_O*b5Dymabme(x>kFvhx=%CfI=@=8^bczK_7`apk$%m|YrSr02^^m^ENyIxUngVel z%Re~ITh6Q{bq1*wXGkI+1KKgaxnT?z@Fw3-GoH)v%400&Bh+u4ZN|Pe$NEoC6SS$o z#)$ILW_SpiIb+yyi9EOT`1uHQIBo9OiM=LWSN`$8tc2HY>DRjZ{3Ei_C=_M0$4+Wn zTdOLr#|6|`*HwchtB39V9i7D*pK=XhaT5pzm?|@=q01eXNbw`vK zPz09W=YWS(;Ba$)eoVDNc$>xW?#HT$^o=r;=8gt1sj~NmQWD|$_;`(aqn3#0n#wnx z9*-f*BZ0JK;2QvCJ(8TNI%*&gh@auUEI-ftw*5JrW^T!!ry2bV2u|Vumr7Yb=sOec zUp&Ndo+0H@DqxiD$WpNfH=KFol&+Yt^=G;`6k7WjT0r(riro8x3%l>H>6M{Qt8<}} z!nN+O%mcPYtBWzuH!kq#w6B0nN*LyS4Wtf;1yz+{#38%oMeh$3$L;{?x*f&e8_zA{ zx6h{(&5VMq`+GlU8tNd66b?mWhvM!5kqv#tE(_)I9J-{4y?R?6h>kLBS%*t?Xu}t} ziJ{KJfr=81h1*qUUs#G#MBOo^cYp`(AX-iz?+kvOr*oKZ`f1Vy zo1R7tt4IWNC0`n5@X{rp=V!+GW&Rqs9t1WdP*b^R^@ext_M5PnQ6HzQLQT?hC^D5} z{-Wj5P73eg9@C4md^fB0gOIDqd$)kRN}~;C{(_!$wMkX27U_Z7EnsoJFq~hU04FMlk1(=IVcc6k9^_nt4>$?l8X-$V)1)!27|K zDVCNZ9N*tb$@KbXTs^`_;1R}E8RY>_F9f0!!ku`}S}n|?N{au5?G6Z_?)8-?|7WFS zG>8i*?Din0q_Cim={>!@kgm+)lP)f3QR7c0JR66OI|{~T&wX5Y%oq|C`ejujzs{5` zD4Q+|JCrU=8g5{Z3Y zXyZ{Z^;FA|Z%hv*PBh7%OUY4^0Bz5uRr(ke_I*)H9FVqP%rCqAJdiLE^QU8!q|{F# z*{w3GMoi%tD(2UPF_1W;l3FTt`Hmw0@+zQ0fq5k4wf2k$@oVEzQ`%=K0|2tok+!hN z7pl!LeaA)HdNe4ijE(NqV*110Bu`TJ0g!pc~kBKclS$}Rk*KHf>rspdwl6i1+y}cf&iL~?) z=k-jcoC5!I)UHl9Sk)WqymP>Do~^b~%w?2+dop7lBBjk`bg>?MH#-*%xUe8N5k2_~ z#V#w*3+=KbBX>8O={idUd{eYYj0c!_X?!4LrlI8{Agpc9F*KjifChlIZ!?Qtd^Iy% zm%TK{UJprbJifPG5wW2Dfy~ySV})4*r;L1I4J}x{$-$#9CH^FHiCUI-scgxqBG8_U zZg6bIzfUb$MA_>ZaR!oJbZmh$1opr_-prSoP_6OdLPt|wq0_Pz&27UE4HB&e5!Ew{ zFQi!62u@<;AqOul@cV~aRG#X*wL~W0F53VLAD<2%tL3`l#lYNBg}eL{nctJ0VNS26 zL%O=HU(vUA#Qrw6sc&qTy^Wg zYabOuel2!;@7@Yn?A?$=xQ&I^_BZWp?fXIKIS12tL~2e~W96h_YIVoud�#Xu!>4 za?dbXifB|I#!IwF`#|#rDQme2@mSNShhzJTWsHv1_|CcKG68C8%*b4COb@W9Fj@R4 z-bn)Sl|UsmCSz)K{G zp2l*%q zJ4Wsk$}Uu1Ij`h)*#Y%kIDQg0)zWeB`>wi5Ipaw*oQscD^aw0bt*VWm}*xS{6N?KWYJ~Ub-7sU-3 zvw7t0AC~r?+%Bp1fLOU#f4CJJ&OU73yoggpCR|KL+kPc)znUI&18kje=UCQ=@WsO% z%(SCy2wdd#2TY(F)NoDp!la?H-MU;JZ)3(hUe1OmRb~0YbvMVgpa*aA7zdaH4Nj<) ztQh|UVkwu@yZM@EHZZXqrBOUR%f=qqqq3#8G^_;MJzZ&w!cCE-#b`Qys!CCf)tWnTmI<+Wm%3ln$eZZeLN3r_oyF0<3J({DQpi9D)O;Py7?u zqn!mMguno;IsejXqBi9q0iZQQLAfbDO)aW4zYROQ#2vtr`svmIACrHKrhtzhpx1k(Y%8STUx!!kA+4CCru>PU&#K zs%u6R+I}sP^i+j{2m1cH7J>3TBB)J#c5&E%SGo$nn}NCqMoX2_H)!eRG*ot$hYkO} zrhcYagE^~LuiyFr!JH1ArKh9h2&>)xLv|$0_@vTvn<&HC&7pU$638=Quj~6!|GFkK ztf$s?4NN94hSo0S;a~L7W1cPBkmPR2@YgzQ>d}KQB z!|roMEgY!{Z9Y>N@tb+=A!6ZlX|;wIs=#{H<#sz2E`Azc`4I$`i_PS5CuRFDn(oh~ zd@FfeqZO+%Tr5jVqp{yDJE1Y~))A>4+CQDZ-{3a;(FZColo#ngEqIWm+h4dZ#6F=m zFyCn7tn>&=IDh^FV68;swVC9%7;EQW+&@lSTZ)JuH)8$d|K4_HpI-1&L~{@>y$Xo+Wx>%I~JUI}9Gr zuhKLg87htGFJGyw&~(zv`DV(-Du0KV@vOn`FS_|s4sKvpA*`14Yp1chweCT0=LS|AbGr-o3}?l= zI8xj~X(lo`^OkNVw-Qh`2vb&6Zfi-c)4FdrJ-41t;n%0b?Hs}Kre$MsxQH>kE&lfF zLh7anqSO&%FGomKo}*N0quOAaV<%$?eX&zC_#wO+F`h`LAO9_d#}f|>Ggh@Xa4x&@ zy?x6&kMr^u}CanWcRAN*t}!N_%fSE$RSU>po8$(@ATc zG7`mp3#jlCv3xw3gF0T;zt=XyY-XnGpY8wI>)Fyju3gL9vV9d$LN0D)F+btim*A6CU)ZRU}1G2S48adpnq6X zGzK)@@RqV^_mQ?6#1)MZbYtyRaT2!SuHIU>*a`H=fPzyKx{GGz3 z7)eAsdSKob^C5Cwya%;^LfT7`oLn1q!|8krC~B5q?;X+g4)F;~%L`uo)ojGwGHI6=ul*>4Da(F0;b~9i$^)@`UB$ zipr7kAYdruyIJ8Vs+I7zL5Ydk;=*wRw`SOV38u}Ro0)o&P_jo$@0Xt?b@7Y)9phMU zuP2(c?#Xh2A%N^i%&knrEY|s_p11X-l@7d`_%bY0{pFK`ar$%PQ=$i^!(OndRdg%w zW3#eEdmny$^9`~mjxI$eqBWt)Z!cMb?=&y{j-fLv>tX^wCW&6NasVYKom7sFrvj^uy47-ZgGrJN+_Yo;9Lkn4C@Mp;#tYS6lSr~SgQlbXMs zl8_odKGyN6#PeUjEZC_7HUpG|@2RYCP<;`Yib7SDGCuR#c-=vWt=9etX<7|tbmCK5 z(l(I8;k(`Gi7v6)A7Y#YY~`M8A9b?t6-@5gbp@i!ESQDUQ60JEXe86VpYK&FqsjFe8VoubA!<*+dP?04{= zXAeO|Z?W=u?rmX}ya2cTQorp}q0!=TM<1=(I!ll`7qwW;hW254vDtl%8a6?Ef3(gS zbLx-}-|T3p4oJUnkZU>cx(imTuo7xa5z@gMSQHDT(oottDKK$^Ean!zDI0^V2kDsG z0}&s^R3)sK-Dgpnk9YyN!D59|ST@gn3nn6CHmPiGtCe~h5qrx_Q3mAy2q*J-gq`CF z$QArjzx#6qOBcEB6+7z`5O09k1Iwunk-`*r-#LBUnoD7U$oPNI_MzO-+lW(dTCz>- zK5sHmi`v31{;JMd_!je<0+(-t$1Pa`^>BbGGX9pfjgIWzH^{W{X{Ay;n3YG%*ekhV zavkfxgx@Tiehwd@Iofi`OtlRt4&?i)4x^GjE&#Z%PX)jimPF5(rKjgdPk&AH+DX{) z8}HDdV0+My;&r1$^CmOD&Lr0e9y>uVGf9K}!_Ofm*CpnW@g3l)#(Pk8_2`V$TtuC! z{Qb=j8H}>K=`vH`NVC#!(Jdmw@!DfU{$_!NP@!5;EOWRZZHd|BS@-pYi(I6l^4|Gz zI*rbhgJ9r|>MAkAnc)yyA${9vvgIE@!V3~Qw;;~B=~stPnP1T-CEvO7*WxxU9Q(0s z7|@`$Mw1@}LYQvl9Rh+ijYyIhsu}~-c)U_{Zr0ctzT@`9RW>)go)D<&%*kA5TQswH ztTi7?2jlg~Fx$IjfWTNfD%iYT$1CfvY%H=af$U7;?$}{@#|oxxA2#qr+3VsnO(*5c za}V<3qym%pnSc(HwK>Q9tzWM6hA>tuZMaL{S4%oS;m39YPZ%BuQORK*d0o{{#5zIU zLYJZjb23<@UOa0NGsX%cn@P1@NAav90|DEM$jGJqc)ubRGCE6Rz~1vvKIJDMk$Hxn_B0Pp6$V+tmfQR zbBSe?K0fluCpa|Sq7uUlkXWp8GY*oMEQ@zWCjc>5Z!YJ)c=QYTvcIl1IAzFS4fRbP zmsj}vU8rY^aAiS&%hLWm&t4U>RxgsvH*8_@`G`FZy1g$_fCWtQOWn$WgZpPcbGpjr zXLNsY{B}lHQ_31B&}?4s6|E}_%*dIZV|xk{el3pwwP@{Il!az3XKZEpMg@K_4qP%k zR5Y5cdL~-&bqafIzPO6mfi)E03ygZ(qla<@GY*vfNwoA@Rns3$V7QlKy=|virJa7A zt;Ozz*;%fLU~LoJ5?cV&l;0+mpxjrYkIH|_)Cfv|##D=8JIzwy{Su9B44gV81O2Z{ z^e;L{$}2B9-}@n7_+JA7a22km=+98BejzxcJC#m@fO`CE2+HH1(3#)e)q!-=*gQ=c z!}x#df&g9i-}0=Y^qc<;MdP~3!7zDLHK*OAC@xbW7=IbwyPSu~1?i4iBjr@yjCU!- z}946G!24&NMAtx{tJ(1B>WLxgrXe|rlR#c=-irtDI$KYmS;($erR ziod#j*Yovu`^LUlmFa=Wy7W)Om}w6*lG7a`{Ow^{0$2H~h%`GH=~kCyM==x4lJd+K zsb(z5lG{j%M$XF0p1>5jvpM+ZCyHuOZwK^Dw(Rr)f@9WXE0{k=msf3HW%A$2Hghkn z`74p9qB69y4bU*?IjPHo5Qc~Rh8|CffFa~x*L+|LK?Y613MUrr0cM52rOX&WuqpKr zYj~7eLTjs}jnUE@Gpayulcv?Ez?uieD}=Iu{Kei`6;ydjeg zkAw_igLp(j>huJ>qQ9ro5Gz}XHjS>1gO~5YDex1M>cqR(ZfOPhAKOJX9sMeCGp*SG zCv^~SEksF+ivkwmS%iAm3EXPr>n ztxf6Me3pYK|AB2U1X)$U`K{!`+gnlhs3mR3M>atDr!h9$JC8jzAAQy27FRpA4>f8Q z)GzMqd{kUz!i`YdR~OwtfIuM5?5ve0JEmqWA!$;CGjFw?h!O8q0A}U?);@6SDuf7_ zd`9m9RzLh})#+IRAA>|3=EvrubsYWGP(9e zWhTQe!#qwS^>kzq3czGbT9ixJ$08Y8iCw#3Q=sjPjEb?V(`Vhp`a(2UY6BZPJ;!-JK>SBoE~fT>6WTv!f$~j` z3azn|+~pn9;GqnE3#Lxjd+c}P5>ld{BQTx;eVe8qPh2;R&CDwRdxa?$9ut=f?Sh%| z^F(z;Qpd8PSgMV(==}a+Ei>QP#Bthq95!UK0ojWDKCbQ>_FdpnIFGjU3!c?**_uA%}K(KO`Z z?+g`S660Lc3jsuW&PWGzr)GSr6Ws3YB=)}czBh5~dx?y~#}!>rjYM7jGsqOV6urMA zqC2`sc7KC1dD3d*e7IqPX2#O{WE`wG#mZh**mRl-4U@5*p)LJUYhXdsh-NkEvb3e` zCO>@WU8!IroCuB6)b9L&% ze#k)ncpf9{Su5XjPyI*1>{ER5BM(#4V!meEB5pwx-vVO9f(I|628cKgHGUb|d+g-E zZf45NGbb?1MD;FKh)}Sj2&HXhY`8spTc|I>EatldFCrh^Hi^gVhK94ViGWEVk6ko7 zL;QyL-fIrx6+md7_j74^Ld()mbiVxS7ZbZ#z{I(dRJ;PCSPCC)Ac>SIUpTgSDfx6U zT&OXp|Mtcn4euzA&Dp8Gm3<^FsKRC*X)i_6Gb>vXUZ}EKpPZ#qs&)T55J%wq&@j|` zm$upVc%Yyf!i#DQkU(fJ6>VeJMxM>}m-*n6YuTyGrOlM-6KYh}1(6a;noHK4Ku@o` zE!e9mu%L1E9ub&S8d*E`q}x_#iomCUz>emKC!2TZyRBum5E4;W9uj~P9~@r>5tTSO z=~X4;Ok(K`{2A}U7v!xWaXH^JXH_g$~AN=83_1tbEk3#^2gRd zDr_$23)l_)f+b~hpMX%UdQLDk3KOvej$pmGRpL@oj}EAg^Vv`xZyroRIan;=OQ1Z? zkWJg!*6&1n2_tnLmhTkZf$yuW&9|fu(Hkec{m!A8>r#)chMit#-3lEXw9xDju`$31 zwax189O!}u%Oc!t19Q)bwv3TCn#M0ZO=4dT+C&0E!%va0?%>9scm30amNt`GW!Zk} z!5bke9@gpy@ZL+Nbt%TKXe<@?8O7+At8|P|+Q$=ph07%+Wmmj0l?p!Rs-3VfA_hgs zS5>t>?3vog6HXet0QMq0#pzV=#~}|YSKld=1-a3@TvT#fSI&$A<+hXk$S-3h{5A;9 zZT6~@2LTJ=t>5#U#U9qVHM*;|)tpLNja88Ga&-MGY0)q(endj0fSSca71eJoLOzj_ zQx`B35|?R}Oi_BTH>iUVc7h%q->V9KZ&CA*pFTLk@^0NGWg>?tcsxMR^qUv~NBdkN zWWC-U*u}m}1)2luir9nG|Ft-WA%gVN??c{*`%uegQW9>tC-$HgR6pS`LPvDO# zREG^*-J2sQx63d<(s3dL$ZuM89tSKpcxV3!$FZqz5<*S`34C`1ZJuhr>kx9&*U7KQ zR|6fu@oG!cy7a5VZ(jUsmlx?obc zyh-)CZ*_D?sj-(|Qk*eyz-D??;pW2K3lv0U?_O=ttI7ohc-40&cR7_aZQpvL61>`t zl|c+eoi=Wa{G7q^OfI#3vQ<6B^R8^+Gb5^Zkcd-~P1wUm#`pewtd=hxqU5x>_BeL# zoZa2tN@<-Xo(tD5;l{tG7*!>6)u@G3&m7d~{T7vRPmh=HmRJM*Co~N9#1DVyG7g_= zMu6w3eR51USxqI=Lz-Qnq6yg-(R{_2Ry}uVavVlCTf+572EX0QKZtP?X45@le*V>8 z-+6q{%)tD?Xl`|B8dC(q4fb+nO_s|e*37$tI2h>r;NXAl5p??{$QY0W!5J9UW^?J$ zUXd2Gw0E;peFWQ_L*wBKX6Ms(W4F#<+{Nnh?YoSppY=(4qjY1wW_rnvV33VAZwu5> z!9buQU*ziZXeedGHBF&eF{yQ*MF@Jh6q0)8p*EEfG%%hqpx|~}6L8%y*N)Ib*wgOy z_j(iL?F)5=+vD;V0hFysoc~Hy^0iyyayrmaayz{__pq1~@P@~6&WlgbBoKeS6z9PO zs5sq~d()JcPTM*2DMVpdYml}bPr6}w%0R{&u)Q!|;S1lixdd(K>JB=9gZQhKODf72 zSnix2ysNBkxKJ6-(lS;gaIXOpZqZ#aGj2cHZH_4iH~+vZVrK07TjY`W>-m%`P$@C?o$syg092eC?m%i2^ovl}P(qyDWlG5T=M4gv9a;|DHJ-JD~C5T=8 zb(&U1HuVp*6fx=NqW8@6I3xB0ATpcWB+;URtuMen@G9L)OVV_7*{m8ebx?Kmqv>#h zTV*z`2FgW+@3iu&%N2-86icUwwu{e)N=?+eO8518m_|@=1?jvJ2M0yTb};?Aq#I~5 z(-2l<;ai${o=_@MRjSnSr(jDo>CPlH;JIUS2RKXBdM24mv7Tl!?N6V;1)`9zM1DWx zyys1H>#SWBl_xGas@HBrf;}s-2GSidoI5BN)Ts70nHxW2_7-d9M(D88PMkNFMV4|8@?|_ict_+< zwM~wBwVU_Ci4*Qx=`!zz-uoaE>`HQFMH`1h<>)oO8M_Ezq;$=QB@amKvSp+oi>RS^=2qk zE_LvFQM|E-2`anNI6<*<7&*R#$e`Jvj11 za*N3XZ7mR~rs1*Pi9YkDaT8=equgjT%;>%Pi>rA6=dem(K)XeK=Qg^Pleg{_aa{?p z7r4iYOL<`kTGhAx#>59`5=FvcqZm1x?|$*WenlLmiO=s-7Bf_}zUbJF!Kh<<_FFlX z>1&|rsImp)oJ~rJW9BGsQ1|v0u#x1iYxKLR!-7_*io6zx&HD-cPyiN8Y0gC(+wXk% z2$f)Jvl!fiO|pI~o4{J-!z6B@UgJ@ZmgjWp?$~~fOUQU2P17aU#78-5g8pGH54=de z2UKkBvqx>(Z#|uQ1;;8HlUVPt?ir@;A9`_b7OIbJ?HsHj_Y_D+bOAUS$} zUHjs+kpU%c_kia{3&^4p-o$BGLmlEwn&FI6 zQ=WC(b^`?36PUjx?6_@yt_21Gr2iNMEc%ISIQagK_v{H9pl3MD8cMFU&uknXUnogUV(}7+trQg+?T-Mi%K=>#;E_6==qVeKKlfPh|%GmwBFd|q6 z6ZD)g*oUGThMLP;J=<*CVP{YeCcLQnN%>Td-3AyD)H}9?LH0z4#hZ_Gc~4Gtd8f4( z)DIV}%gmxcv>oZsr>B`c2OV44YDJAR&JZ-bj)Bv=uIcS5vKQ*$@@NUcM;4kCv}wP# z1DjJxy2)%Q%I)U`=ADXv{L44QFW5_|7r!ab<}@0K`KI0|z^{eQCB53cn zZ;$>{`-Z=;jc~=y<@SW)yMdU2EXgK|(B-MWt_gOg%9IRf#JTpylo2vIo?kf54FgPN zGqCi^T}GfPi^{;DIodc1HX=}&|5!buZNkl!#YI6SFD7!eU{!JR1I89q%+O^v$ zkj@>av8YZ12%6m2$S_rOB4vjdwS5HYeV1oC;{4(sCg53rI?$^#^AOV^|O!qCH$P57A7OVnb3JJRA7R>sdY@0 z9hR;M)&_rR&2t|2H#uOil#1yxn<3o!v=C6)M!0&V5dZi{Oa;XtPK`#PM-Psej(vbV zDxm34a_&)*~-*!e}&HYC@dw@^>%edFyYFA@>rM7+NUdnPPBBC>|ivE-O?96l5 zWB=Ngp@S`(XN2gI;Xt#(KUa@;rFb^l#+=N&?nt`$8?MJRB}oZ!B&_asmwl}p0{I== z6IP`=d|w!`>GlZFf6T@ay5WoT^%)D#rkF0-#z>L zD&I%ey_`K}UQV8GD*fAB4}PZ4*bI**#2ow zsqPJk=kSP|dl2i%qQ&UoLZDJ`p&1rZ4nM$3MQb_d4W!OTj88fU=Da#Xb6$^r^vKa^~%pOw*x z>oAA*1qmuBn~{O^S`vmvnAf`PW7YJlUhC7|T%jPm%w~Eoa#)rTc6fLwpu2c8=FXU9WsRAE)z(V6O_Vr&>t&o6GLsSke|It^Oh4|+J)9?< zD#V9ieuld}UymA-y(*L(dQ=|qyQwWdk!uOuds@puyL|OKNNuT@dnWaad9=gpETbY+ z;Yn5*Tc&>9p7Dfu9-R)rylZZ6&|F`wwA-nJ@yjVcn670oru`5LA9q-fULI0EjHvHSzb3ovO1WakRc!!@zrt%0&kWz z(ix_0fpRS?qhiII_qv-+`bgQdrI0IpRXdk`h6$*Jl9 zbLyb&j>0-Is>N#aruGe}a*GwO7muaVR?&9Jxli5_JWGs*C2w+_HZRo3>MRuu_-JCz zPqFzamk~ntejMA;ZJpYS{&jw}p^PaBQ_NI(5#>38eB3+DAktt$JnXxYw#^Ggoz)dN z8n$H@XEy;i8ew293vZoD)KPU^Hn~YCh#2;=%)vvj*+{KeZ-h^s`~HfdwW~=kxXt1E zS!Z93YZqSI+tj$e)a2qOkASyjzR1RK@Jq)ju0`~2$B`y?jK}oR-;@bpnwiGsp6f^X zK${|uX!T<5Be}H?vJPyOCT%rRlRA5hz606XX!WW#4!SPzmD$2BS$QOA+%zMKE2D;rj=Vabkelm zXas9Fnp#|V_;|w4?3Wv?Dv>NTRos89GKWtXbZs70)$e4=TRJ`GYtHXWs+phw*Duvv zZ?qhenhrq?=Et|K#Yj7I1Ue5DIo87eIFk)zeb8)OGRE%?b{%RCov&SHV*c~*>wC|) zJHvQ2$OAEBf~YYWIwr^v-XXt^oZSyOca z*yz)W!>W%bxSXedFX(*S)%*xuh#s9>0{I9-JW@tvYd0V&kWoK)=Qt%s{4KKjFlDE- zIv2zKr8e)5RcQpB{>QJQc?_RU$w;$Sy02Z4Rcj~hbTL_4!?rvDGof?Hs{{|_by|pb z;ySc>w7r$nHKow0zS?F1;1b_|0y~zpe27trMw}65``vQ^|6`oV18=$Z#Yx<>*sK>PL zJ+`P*$laUlu{+3OEqPWX#%sS>c7O#Ur_FdhkCIc84kGm@G`K1AJ6aoF!W|UbNV<`^ z!V3FgVz3pXP5g8;LDEcCKAJwp(hQdMa2R-{Lp&&cCdm&cY$cim*^Z@Xd5#AM z+9x=qUSQtGr_ZL{uLX@d3ii$^1Ptqg(d$NUAYtc-NJU}uM#i-}#; zFz**J`MdV%AF;+01wD=uLwU5 zVBw(+(I{TMxRJNVoXOdu`3Nbj9)S`1-{0&5x0;F?{yGx;P9Pv^B=T0vs}(YpwMvXl&HAIIJ+~X4=5IGLY`1{@;al=K{m-?j&HCWJ!P+s@ znRafv(a*PAL(>cm;x%pft)lY62)q;HJ-?<7eAiU>A=DCpSrEFgE#-vyMX1_+JMXb% zB(dhv+bbGnv$zgE0rBBvdgQ28R>`%zL!17wh^K+IqVA)qnKvKVUK`3b9;Xi4*(feZ zWp3f5jJEJ8JyF!6#em<-a0wgEYk|^avCPP=b(o&7t*SZjl%&KEes23%*%tf%en@5i zcwT%iQ_&O_8U548PCa-xP3H*l`N4*V`XdtDstnzsZ~e9W*V5|;MbJUhqG1Je%H~GZ zKJVA1qR}4ERwl5?_SP=_RP&v8Yu?UN1y(4Km%)6BV}81iwdpc2PdQsIGoF_fh;Ly710 zVw?o#!lbgmnuu=20$UqfCj|?sFV!TBhfP2Uq_$PQJ2X?>;gStFX^`&L#uk7Nob%Tv zBoEa}Ec-J|3_tqhka(Uxk4Gyr&pj@Zs1av#VCxFC<>@u*(MSut3oU&j0Hh1k{hcn% zVH|<4o%L%Gju7X&r9+o=q|sV&c{iTfyn1I>+_G+Ur#@|#9}p0pmHg`J9WOpwSGsx+ zhU*ykr$vY-pgk5sPY)#NA+L6Sh{<>cpwamE_PQK?kIF zwMr-kq{|(C9zmwZQ5=a5WX~WQmWp|Ey7hpinJ)ON6o*%)iA-`#_aiP*ts53Gwxy)0 zgT#FbIOKQM1&g-J4&mKY5F6PCGl&}5_w9hMAPDH!cZMqtSa02#zPPiREHPp zQ!5dL$chBhoc(;>S8P~0qpw{~Mik+Z?kGf#^;ku41KFSSBMKVykl`}S!GIJ4g()ug zE2?!zC{_`IM<2Ynh&7*RnM>4K|=Y|xfky(#P-G6 z8*IGz`oR5>s4HRCmLF}#tCgC7|0DFjP3zFVy+V?l#XaRThs&N}92dTq_RM|_r0kgPBYcm5hkzVo|5tqB}kt3&CXXVc)=&Y{S$ z3yHTIjt6ghgsix#>Tk%8T^w~A$uF!K?hKSAteDv(5J8P2aT6algceDfUPb&pA`v&0 z)RlX||2)k1R>BN7`)H;R#@waC%luxaBXg6@1u5!VLXX0*>ucsTno4xIleCDMYvT5l@z zLy*!Da4M>m8?}L3-GaM}`^ZJ~wUo{6^q_D4F`y&ifqL5#Ta&tS$o6&G`*6OnW5Cbv z?tE=Hp*Gw3!QgvsIx<%TuRzA)9_KzMAES&PtrQN6e2}o*z*b^wr=gX51>pz@8wd!S z_V-*AhSZo@vXN<9EBrQAOgKuNlkkWqib_#$l|#HLO8L!N#xsAO5ZcQ70bd13EHz-Q z2{GBg8!#nSmOKG89hPqO;oohQ%>Ta}VWa94v@Thb66%-;9&U1~2c%%d-OmoQ$Dayc z+GB+G=cZa#a6O^kf^U<}7!XWvm%^D79Tx&-T5(+MfSs zmwoNp&EA5tOBU!GaX&M?dA!~JWp2~LJCiO*i#J-#IEtiMVEfj@8YJ*Xg}!%jTSR1W zi%$AfPo}rlWe336tK~Y}DV&#Kl@^WVG6Ybl)!;|J9ArtY(Z z8y9SExpB((&9pg8AJz48F$|yW_W@q^+Aszr6}x-Dkeo9X+p$n*bVh?%lS3{Fg>u;NRG3^d9eN$FK@d zgSh!pRgn|kd_^-0G=w+Sq@2Yr=^IDtLqB)g)cHpRN-(~o4&e=A9 zQE;L6om}C9oB~CLMt9*%m&vgFk90@ksw>FvU=4nSI+@>@o7YidQe`X~K)w8*rSiZ2 zP)Rvj{YbD^z|o;5Z9J_FRKvuXZ;=5nB9$SGyavo#7kWzVAn(gab`?1m?t(YsWl?IX-kPbGNKim*#!C z{6+cA<4HAi2*@}N{EuQcMo1#1si#vxwrgt?fZZM}xSECW?~?K(-yeN4n8OXTID>}^ zc1-g48W|3^)dbur>R#s2+BHR6Wt-612y&jP?rb3keK*X}WQV&l!GTZrp-)}U1LF;K zv(&1(7%P&SWDTkmWF%2gbVc~%fq5sF>7Xhw?*!5^gjH>d?Nx?!$`garNGV~G8)@y= zsSR^}Nh&7G9cAMLd%*30%b|UMjO3=IS7%q|9YzOah~#!>ITa`a)6bEsh`&(z_Qj^I z)n~3!$F6|+!g&p3@_@7la=j!SFfypf_kbIH3r@cae$tK#r$e0hcAVbUIw>hQ63Gh; zadW5nUx9|CiAE0Yl4&lPqmD~$tEm@a&SVIfErD!QW%f8)R43k!ghVim8NSzi=Lh3J zOmKN`6GI+2>jEd|}h&j&{DOUD2CX1_eG71Fp$kqB#f^GrHIH1~P2kBj_M z_t9D}4YNaQycQa%%3_dJ==5YUdTOZoU`TrcAmFB);?frRA`_M-^MKv76K*Y@IFeHZ zJ;vQq7lPC5&{+aLbZePtPHjM${>R<-f_Q@WvC(zk)$zsWyRS+;lMymKv^ONOC6PK^L%nf3)bWaMqm99_-xvK=FtbymOx=Kn!L;oo zFz}A=FO4^;PTP%sr>v`q z6qMITVRyeTwA9qqs;* zJU6D4bI&nat*cCt%FeXwqvJpoiyc8X*+!>rAM8tZ?5qCyvVEerEOcCC*C%2qNTNZw zz6bFtRI3hDm{=&6Rc|ldXHfARmuWA_m+n)vpo ztw(<$aihjL{d)^v)uXq-e+_&vtLVq~lRd0^;!FCV8^!6{^=dM-%Y0h*|dG&Dm&@)lXF^T!m_M<%@aVa=}2U_ z+#$kt+6X$Q-!1u8nEl4|P894tkXNOh>n{F3MpGGtbL`1ar)S+!nKFC({!^kIJ`>bG zIfPr7J?XmN?8v0ocl5cA95a+Aw@|jPE@^sLs2@vR7NFzNJDEn*PH=Gu&B48J`f=DY zoT_X5W59x>@<+MEQ?)XaiOdg0lzLhZv}M4c<9zN)=Ur(c)EjL*_^w$(_**=%7D+!u z^LvVznCx}G_y2K!|L?!tN`gtwJRmG!LR^MFH%;3GI`(RAAeQOw@%%2NoX1-jzefW? zFO9EagZ>d)iDmDtxIYGDFiOH@{HrXD{rO2=f+*=mjD_9$Ojp!@Wz*ooI`nHa>a=s7Mrx+B*k3IdKB6@AE?nCV@ycdGcb?H<- zM6OK^RVq!5={Z6Li2+MnBxg#2#-wiH@(C`}JtEV&hs?_8LXIxKSB}lt%B_Msd?U}{ z4l=X{_F1{!`?~8xWip*@b=ZL&$$_iCZvOvQ29uu#guRfdzMIywqh9b-hFDEpR2Q}_ zX6>RFzSoi=_@@wAzvt35%9q=`H6q=8cg8`4PLLm~>&A;7+wVk6lUMVac{7%8eYf@Wdi3MXe_XYn zRANh@3jD_HT(KyW#)1=&)xARSXK&>sb$J+B18XTc4BVacd^CTd+2UYl%G>VjojjzW zRnw61AUq7T>GbW37cxC|K7^erzmoJO8JBw|>cAk6OEjhaB$(tGdai`!ko!EEe3uij z7Uu2pP9t}v1nh;~EeYnb0_t~c-kS&J+LYW(#+k`EQAA1;hxUEzT>ejc-yPNDmhSD$ z9FG+h5djgHgYpAIVi=zp#=%;P(uizhY+gLd+#Mk2|c0r z;(fVu+nl*;-EV#0{qLK#_=99^cHZ@5?}z<7`&aIur7jJ8z-sG{_N}N=8gVTm+SSiz z9-VNGIGuD2&)!ZzJO1jcU;)$bb}_VyOaba>gYNtqW(FKWgX~$GnBKCV@!b5}*!bU| zwZcm}`-z3&+M#)8OCxYBQLQvFhi0>P=&zNQczS>FF~RZ^<@2J=>+e@4gs`QuDaEjGoo*F>8nmF>4bc33nm z;_L)EW~Q?^LLysrR`;E!8AF;*>`NN4|`{X8h z6j56{VrqC@!_?n+dD%i|`=+sd9eilzzv+(Z&pGmKv~_QGR(-#cS*jXwH1Zswb?ViS zvT8SVHH=L;Ie@V%nZA!L{31Yzm%SZ)i>zI-{dp2CzUU#d{<3WVdmAk}Q{!Q8g4ZYb zVOAYV?foCMO5_7#-Qf{Li11i8Le)g}{wLAZubukw5Q$I5lJRcVT6|N1_n!n$&hIRx zrRDG%uN4mebR8=Q^@sxqkAxz91P^+Ya=q)YvG2*MU%+BW1hwKt(MFH_4fLoi{?OG` z*UVlIy?dbi)30CFz1N@wtg$AM=SZjokcU^qZwja4J(s~S&)d^=gPz|qSz>T*x+6Iy zh%K_XqjWk)&eEs@k)wa-YJ*Sk?6^na1FL=c;N0#}&cUT(g1KoW=L0QiWJBO?SA&y1516t*-hqo|hpy_2paP3Zus`hvrXPE8{Ajcc=#aLdj)HGPe z&R7xmryqEy+2K10xy?AJocT}-V$Sd_zVVqD5HM-8;#hL)sUXf;{~@u$)k@NUz}GFpNBh)J2Q1M2*GWzXD-s-v6u z^ifc55K~uVVw)s)<+B00t{6Wh?#=@8!#qIm0*IZlx8Ra_mmNuWTea!`S%QabcH4nlO&4scJ*b<^Ewc^rZKVO-@SiwR0vgOd2uxFLUNnD^Z^*ns>#)pe-St} zg^=$p$_xZSd&2|`ar}QPZ5XNq@(%7jLbb3fm?!z(pCjc$4dPcmnLNly=IiTcX)5OX z8O90b>Qa8;NS}wuUxV~Fo7ens%Pcu{FRkVz<7M^Lps3rEG5VII0F8sBveTOp{U6bm zQ{5((6WvLvExwU>Zax_z1oD(1Gih-?|h#`vsj%cj(U-B3xk&#$^}DgYKON z*{1}HPZ6(egR2%Se=*{To%tMXOb<+lKiLfy8Z&So5ZlUjPiKq@$u+Ki)3GfZ8k~Y- zEwt5K^GQE+T41KxRH|rZEPrWMVzekNQrF~nWM-BT5<;k}s{<9c5^EbvWcxz(RA2qS z%Ws-L2H4Q5ixx6ZTzV$XJKL#lM?xQZ+{AI7z2sbHC+2-Qz`EDlU{7R#={*mdkrY5=3j&t)s9Ad3HZB+?R(rCnpjoeEpEWGxvNgLG=L@B zx`^cMAZ-4bP?4_Ne})7b3TqUsr0;pG93J~8H2I^2+{Bl8LGUlOOGC0e69xiB8JxxN z@`vi5pwj~QeiZpn@+u3g!_OwE+(d;C`QX}sfxeDo6cc9eVl<|~05*8{hTlSTh{G{g zIF0+Bvs4uRB>0DjF9bILfeKu%V6o%D&p^GpotA{3DZPBmXJmWd0q*iM)jQ`49%HI- ziFo^xN?j~dywuFPuGt4uLcEgdv4zLAgXCWFadukv>?$WzveFpa{4ARA>(~V6F~CFdkav-6J5Vn-En)Nb7_x$79;G@+%M(C->c)sp=rR}>w*pvCRK?G<^tMPEJBkO> z_%_i}rg>wz(ao1D^7z1VHh*Y-z)KqY*aWZ8F`qArzc!vLPixs$&3PkRW)HcRaV`J1 z|J)n@?Qh;Dt)%elic&|;OAgXm<+tV0MI4jJr%%P-9-5C~;$4Mx$cYYUKFUW%dk0&B z>IkhGB{(9>{_&@sX>u`!AnlVvOgLIssu5@!#S!^K<188d-8=aOeI?qZHic_ZvWZkS zB^mD;i@ef(#G8}-(m36);mD2G{H2DtA9jDXM?1P`^XzudEu|382x2#egnqZIR#typ%mJK^eS?fCD`Q<0Kq($vK6*)V#Wmk5}hPrs-l?FQj zH4;FWYP!Yyz%FTXzf ze&v_1>v>A$Ya7C8Q;8*-@uhZT`FuRPkx0*NkqslOv?DrGI+AIpY`_g0U7jZ}^1;!pIb6a);rXx$ zSdZXzDM`i+V!D(hV`RJmBEBjY9qH=sQYi42Dk~3S=Eu7aJWs>&t4_xjjmIg(c#Isf zw^3l%Q=n(pW<<(;bj~$ZZC!1k-!aQMmQ%h*~8M6z@K&j#7NjnN3TdPm9 zM&;9tVh40@9(+DHzd6Re2aZ+;P?QGt}3f z6OA)+6Re3MJ|SE`F(JbnZi4t-`>Hz>w4N~SaHi^5&xewVR%^=vDe#ZCoP8vRHhG`! zOSFpTiHpbcFT9|3e5oK|h^;PZN&u($ZvF>y$FVl{uWmL>T8bNi4M^eH3yETiqO1K` z$S?L&g`!yvDZ7;(LM1x(rq0G6EFOwzKe+ew2RF3i68c%R!0Sk9&qcH*8F1NPHZrkh zEl(BvI-Ec3*dlXj(J%@eUA1LwI@2I!hB)=kLW~yA6rv*TQfDthl#uLq^q0kFoE*mt z*%c4^)i|-`e_RXpw-%#yIhZY5zjw)jVwg<}+ro+;u#Vfg_U_aPOyh`#J41C)?+j&6 z0)@mTi&a06=~yVEq&VHZMwCZ&7NS>&<2pE7d?jY~m1%+XWz>mQVWWh=K(dIEGX_xU zWiErn>1Ez<1EhGS6y)3oI{*52+v*=**f8u?Z{Myi#+XYrrQh6XxYfDF=ydLUTe7CQ zv>0Ucu;vzIS}cNn*0GLV!Ty7WlAZxr_;Ff(KP}^}Vp-u{OXR34cXlFXiaQF_dJx{G+F~Z?1CDb~8bzX2 zZ`)~3rUg8rbh~GrlkMO>G9kneBR>Tgh6APdQNEx6wt@+UEEYF%@0XmS_2Y?$e{hy7n&Ql&0;*)&BS*>5Fv z)$u3(wkE%9`h{-q`4DW4zV&u34Q`&g{hIz&q}-Q9x-ylZ#w=xuW5?$5gol?2E|CJy zW{$eji#AuZqjX3in{J^x0F(;qm{V#b1RgP^>0vCQBM+mx;Su1Xd3r)sAx^m!y*H;r zY%ZGslXYx}g1l9m$*p{UF9CJUQqj~8*?g3==u=D$TO|Bw-{aNu=2IP-RQ`T+JbWqX zYOuYjNCzwztHmo^go+Ycp!JTrc*Yud(+^X{!0Z?Tam^AsDfzAVDuAP}DA2sEk9dXs zfx?mVXG-&HCmHwpio}|A&?opaG+b?4=5zbea;LNWOP2s>}LU}xyTpgRsw$#l5U=9Ivfkj-<5>8n}QHB;bdX0}YmyDkSnC~qPOu>}sKH7+woq6dg}m^84@+$71pfM1qX^j?=+ z*R#NJw@E`HM<|zhI>vQbV{gT9mrF=L%o8$BoT%k9sRdKy+ius1_>2VJDR zy1K{a+imOOke%1Hw4Jwqez^Pb?@y{$wFZH#YoZHV#F1dJh-i3g9@%OE=62k-%=4=1 z%~PaAP#a)=A_9FHGD_aQQ{7{*x#!E5qG@EdX&!ZT#!hiaR^2AawzOjs=aDl3^3>Z< zZ<7Ht*>;eM;f$7>NANfp%2Aoa!gxNbq*wYrY+D4gpDi%ZWOGoY=l3-Yb!0_9+(!CI zjBRGNWUWMkC}0ScMDOoWG1f~AG8UAV_=INCfL=?({*UL=x5{sJnRGp3k{&H2pASq_b&r(}>8PA_^3dtZ#bAkLAJ>p)|}Ssm1LQ}?|%+xLY^Se};}?Nj~3 zY6B=PZPK9EI)bxN&SDC{H;H~GK0u4#mWXd+Q=(PwDp9Gu7Nu0w&9+1@)7P&7t%#UX;D% zB#~8O<&Yu^ktreOHdgj50lp?Ac2C)0<+9Ut#{J7HW;y;$NRnw7Vbm7jckAkzQ&eXh z<_1l^DpuhvJ%3vNU+Bs1u~1XyTIzX&EIkf&sQHx#AN$M2rTs%642)q2X$sl20Sx-l zOrW0j)y{wvL-V$U!lv@dHJ`k|;15 z_223`$t9F3KiSJusTn%^im6Xu`oSoB;-P}2e%@m9QhIAgnVh%r!?-qnYnf7#K(!X< zDk6`v79_hnMv=FIY7O(Fs2Fe2?OsD(aTpuI3oBwQT7NS_U0`UUEp-;_FQI)qJDijA1ZBjZa}&N$Z zP^;n*hnL5z1>dhg9KH=D+S2sDa@UX9`BYjGK5(~3l^Stud5^HBnjf}Dx?qg%+!U** z9_;EkzIfmAC`fSFzv1&5taya$&V+>As!D=FMHia2;S0#X2H(1P0q)oopN67NNeuE` zD53o%-21OyM`sx-@p3hjRs7eNBb))~i54}scy!u{?J!tyU98QW-Gt9+icEBkE72JmZ-pB>Rzz=+wSnHwc{Q&dqF8q6<^I!l*UFBr-+sQBP_mV5Eler*X?*5m8LYu{XI zWp&)SvpHUqXi7^lUtBRf6UfJ;wd87>_cBdAtW@gpvyU+Mp7Yd=R`%}q#iOh7`x($L z>-T-iJ`W>AB86x{(ay;DDVPvC%XI`M2|BwsT#PuU)aadp5pd0vB{|>Zz1f=L#oroC zaO;{aLtIj4C>D;()9LMJj=lgiz~8AA$KZ#FEP6hNdK5u4(nC3Mb9)sOU}~wKa{1As zaf4A>>JE*uNwV*uPq7~}?oMiJEjsZc?9#2*m4b?N`!oxri0j}ZoQ#gOQne?`RTqy# zS9(qyp6bNiNvnq)e(mi`Kb~JV$P^Rh1JFv<3Xc#c>((KouHHUHJb76s`TGr37n@_g zN|Z@QmV0xft}L}Pdk6c5?xB-orSHSIjJ8PEK%)+bUU9JB@0a-RUf;d0><8m!&jTYe zYh~voZ^wvsNA<6#`Tk&_PEpIOAb!7cQUlq$FVTlUJT1fr8S0nz7=~P>0lFLN8?tX7 zm(lkvqTf_SOCzjT_5GBHPMTwmdyVmP&fl+$>blR0zw4!^OP) z8ku@AQ2gt@@o3YG&EznQ0+03b4+v31)p!Kl>x(fZngHyPlVFFj(SL;t-hZpBnkZI! z%c2ly-S?+w5o^P$`_kUW0lw5x_=cJ_R?Mq>b3ytSVOWzMw`H$tuO{C_)_9kftAPhT_LJd?Z!=sr__+5T z_0*C7b?(=%bD_{WD4UUA;So1(2;k_>>AAF|32indKO}T-574Nn^o%#R z*c4?xkD)7y5f0848_SOs(-{1Qz7{|FIdM5g)LTVx-?)-mREFIONKtdhYqrgHwukIi z6FJPh`v5TbDA{7A}K z@4HdhDsQO}-GT|cM$m1VgrUM~L-R}zI-t%s89Th@YT8L>VFkM{_n%~Ro23t4_LBgt z3h-lOA_NGC7DEbfMA29+yLW`Kj`+O2y$s`LR*2Tj4Bx@@vJGG0WN1&QNm~{6&l0NC zz@^XT2it0lw2zS}aLr+p+wD=&#i_$mYrNs=I&|)-=N`hd@&q)~C)kz7IpE= zrauN5_<>%X;e9^oXi0XzPJpD{8C|%|#XREX2!rZPfNp4)aD4{Fe1*}n$d zu_Obwy|j)M)vEn)b25{Z@6ft(ed)i7_QeCmG|oHRe8wJ7PW@${nXoAO|K5!hkNJ=e zu@6$;okBlO{3`zj;e2kQ%^a}r(|G*$#HZZ0)2aKEyX0s-&Fdm5(__;IUkO_%0h(ou z-WP9|ghLFdDZSR@uZ^Rj2?lL93_}P4E|XPjkb7;u5BU;%AJOiZ_q!51kL0EXJ+u~n z$vZcHJCVep$+}SUShrvH#cC~I^biL5d^Hu}qMR}~{=ztQ=qS?V`I`0CXUNYs5~gdV z*k|6WdH{+6%HYIl0kfK3WAS#|4k0&@ybvoLZ$MxBMt9ed{ zkTdKxVr;A3&pANP2I#>mOc-?eN0O3Hij`2V8Y~oka5A%S!d@<$g~<3pkl_|_%9Je3 zxDl;=Ju<(vA2oZf>mFZ};h+~{*9A6JhV5ZfmtcaXpoUp>FecbwM0xJ`+SWDS z(NWUdZ)4&}GjdD7K-%-7o4OqM(!A^&nva>GgW83?tEtaD{~eF~4@>Re-T?H!Q>!w2 z@0hL^8QXdPm^XM7{c1HeFRt4`8j)%ws$;;AQg{M>v&|yq7jz+0cvw25Z8fN+Zz2h{ zEZk^E1={W*^z)($rq=cx2MOkrg-#mGhH0__iZ;#J0$RB|={L0>R?e5|+Adz$6?fDQ zz3%ZrACP=8-XjW;UPU(ghP?U-Rk-TdT>XT_Y!F*cfx7I2+)wUN+jGd8({D3IM*d0j zj(`sb(vob}0Kn1W0isC+r{DK01&%6NRpB%? zXDBYjRR8U1S~A*H0uB10)Y*Pm2nBeYSNx$Fdx`V#P8@!V}y~o^3840KKQ;4|DFjKk(H<{9XNm+E$LTz>U-*bc>a#_ z&i5;Wx)E-`*alqr+ELOnaD;v~h*Wn!)kBGY3faY`MTefSH%viNc5ZI@%}jS}i;flg zTb)C>kP#t)m+|Aej9*Je%dEdtZ=2dV!x$}0Yv=Y>K*sWu=HlI^#M$9*7kuDNaj!v@ z%UPpTqV8-vq@klu*o&v`;&vGRbL96c!*eFvpuW$q=@`wGA{8eI?6wYt;l;+D+koZ8 zsL91wu4}WaPnxm7tiae6IFsd3Wnf4b7X~$Gj6(I}-U3PYzaVcW3!QyBF~cEGAex zjZWr7lW|qR+mp3ZLf>21uvIvs_CBnVVG$*sS~Io;^Ba1d>y$tfG}kD|KV=<`ijRzg zK)s!8n42j#M5|=ulvw0GFZ}r*w%VUwjRe52682g%2PU(*?pWxo6^iNVF1yF$2ZfJP z>%jT&fGz6*mdH8Cfx1`LTw%!S7eNO@LWXzlfh$Z6nVv78~}jsGunO zB~A1T*!k6E8a2XKsY|lA?(oQ~p*<0M_^S3#e0>*UNA)XK4Hp-SZ5eJSSA^h?Io69e z{^JisI|tj?QEG0xD}aUyk1oB*@A@;t^CG{x)$dnkDKEZXdC5P!@UiaWc}7>mZ?)&O zZAtFaSVcOBYY-42`SbIPnaHgNDP+?8?(u0y#@cn{W2Ft7n3=Ph%gxy(NoP;sP3z4) zfpC?_VGnJCe&nW|6a1<#LOh&LLY0f7#ST~wkYX3_cMo+z?9aulR z*uegEai*u3MWwG-2Y8GycpF!s+`^&n--dG{?*zqyLaRrR+HR*3`bZ!6mp~IIPv@4l z-Q9TPu;Aelb<+XhyZ$Yw*l5pTV|mjkgcA$ogckexM8h9%&-7$GJgxLvuZIR8`z5)M z(XfMtExOfZAeR*DS^a-Bqd0TrR-Pv$H_T*h@y$$+Z#$0_9V?uxg>Cmx1}}R5Hnmw& zload(__DIR__.'/../.env'); +} + +$env = $_SERVER['APP_ENV'] ?? 'dev'; +$debug = $_SERVER['APP_DEBUG'] ?? ('prod' !== $env); + +if ($debug) { + umask(0000); + + Debug::enable(); +} + +if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) { + Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); +} + +if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) { + Request::setTrustedHosts(explode(',', $trustedHosts)); +} + +$kernel = new Kernel($env, $debug); +$request = Request::createFromGlobals(); +$response = $kernel->handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/src/Controller/AddressController.php b/src/Controller/AddressController.php new file mode 100644 index 0000000..1136ac4 --- /dev/null +++ b/src/Controller/AddressController.php @@ -0,0 +1,98 @@ +addressApi = $addressApi; + $this->transactionApi = $transactionApi; + } + + /** + * @Route("/address/{hash}") + * + * @param Request $request + * @param string $hash + * @param AddressTransactionTypeFilter $filter + * + * @return Response + */ + public function index(Request $request, String $hash, AddressTransactionTypeFilter $filter): Response + { + try { + $address = $this->addressApi->getAddress($hash); + } catch (AddressInvalidException $e) { + return $this->render('address/not_found.html.twig', [ + 'hash' => $hash, + ]); + } + + return $this->render('address/index.html.twig', [ + 'address' => $address, + 'hash' => $hash, + 'filter' => $filter, + 'filters' => $request->get('filters') ? explode(',', $request->get('filters')) : [], + ]); + } + + /** + * @Route("/address/{hash}/tx.json") + * + * @param Request $request + * @param string $hash + * @param SerializerInterface $serializer + * + * @return Response + */ + public function transactions(Request $request, String $hash, SerializerInterface $serializer): Response + { + $addressTransactions = $this->transactionApi->getTransactionsForAddress( + $hash, + $request->get('size', $this->pageSize), + $request->get('filters', []), + $request->get('from', null), + $request->get('to', null) + ); + + return new Response($serializer->serialize($addressTransactions, 'json')); + } +} diff --git a/src/Controller/Api/SoftForkController.php b/src/Controller/Api/SoftForkController.php new file mode 100644 index 0000000..72b3bac --- /dev/null +++ b/src/Controller/Api/SoftForkController.php @@ -0,0 +1,38 @@ +headers->get('network')) { + case 'testnet': + $softForkApi->useNetwork(Network::TEST_NET); + break; + default: + $softForkApi->useNetwork(Network::MAIN_NET); + } + + $response = new Response($serializer->serialize($softForkApi->getAll()->getElements(), 'json'), 200); + $response->headers->set('Content-Type', 'application/json'); + + return $response; + } +} diff --git a/src/Controller/Api/StakeReportController.php b/src/Controller/Api/StakeReportController.php new file mode 100644 index 0000000..50d0262 --- /dev/null +++ b/src/Controller/Api/StakeReportController.php @@ -0,0 +1,84 @@ +stakingApi = $stakingApi; + } + + /** + * @Route("/api/staking/report") + * @Template() + * + * @param Request $request + * + * @return Response + */ + public function getStakingReportAction(Request $request) + { + $dateFormat = 'Y-m-d H:i:s'; + if ($request->get('navaddress') == "") { + return new JsonResponse(['error' => 'navaddress request parameter must be provided required'], 400); + } + + if ($request->get('startdate') == "") { + return new JsonResponse(['error' => 'startdate request parameter must be provided required'], 400); + } + + if ($request->get('enddate') == "") { + return new JsonResponse(['error' => 'enddate request parameter must be provided required'], 400); + } + + $startDate = \DateTime::createFromFormat('Y-m-d H:i:s', $request->get('startdate')); + if ($startDate === false) { + return new JsonResponse(['error' => 'startdate is invalid. Accepted format is '.$dateFormat], 400); + } + $endDate = \DateTime::createFromFormat($dateFormat, $request->get('enddate')); + if ($endDate === false) { + return new JsonResponse(['error' => 'enddate is invalid. Accepted format is '.$dateFormat], 400); + } + + switch ($request->headers->get('network')) { + case 'testnet': + $stakingApi = $this->stakingApi->useNetwork(Network::TEST_NET); + break; + default: + $stakingApi = $this->stakingApi->useNetwork(Network::MAIN_NET); + + } + + $stakeReport = $stakingApi->getStakingReport( + $request->get('navaddress'), + \DateTime::createFromFormat('Y-m-d H:i:s', $request->get('startdate')), + \DateTime::createFromFormat('Y-m-d H:i:s', $request->get('enddate')) + ); + + return new JsonResponse(['stake' => $stakeReport['stake'] / 100000000]); + } +} diff --git a/src/Controller/BlockController.php b/src/Controller/BlockController.php new file mode 100644 index 0000000..70fa3b3 --- /dev/null +++ b/src/Controller/BlockController.php @@ -0,0 +1,117 @@ +blockApi = $blockApi; + $this->transactionApi = $transactionApi; + } + + /** + * @Route("/blocks") + * @Template() + * + * @return array + */ + public function index(): array + { + return []; + } + + /** + * @Route("/blocks.json") + * + * + * @param Request $request + * @param SerializerInterface $serializer + * + * @return Response + */ + public function blocks(Request $request, SerializerInterface $serializer): Response + { + $blocks = $this->blockApi->getBlocks( + $request->get('size', $this->pageSize), + $request->get('from', null), + $request->get('to', null) + ); + + return new Response($serializer->serialize($blocks, 'json')); + } + + /** + * @Route("/block/{height}") + * + * @param Request $request + * + * @return Response + */ + public function view(Request $request): Response + { + try { + $block = $this->blockApi->getBlock($request->get('height')); + } catch (BlockNotFoundException $e) { + return $this->render('block/not_found.html.twig', [ + 'height' => $request->get('height'), + ]); + } + + return $this->render('block/view.html.twig', [ + 'block' => $block, + ]); + } + + /** + * @Route("/block/{height}/tx.json") + * + * + * @param Request $request + * @param SerializerInterface $serializer + * + * @return Response + */ + public function transactions(Request $request, SerializerInterface $serializer): Response + { + $transactions = $this->transactionApi->getTransactionsForBlock($request->get('height')); + + return new Response($serializer->serialize($transactions, 'json')); + } +} diff --git a/src/Controller/BlockGroupController.php b/src/Controller/BlockGroupController.php new file mode 100644 index 0000000..44e0613 --- /dev/null +++ b/src/Controller/BlockGroupController.php @@ -0,0 +1,51 @@ +blockGroupApi = $blockGroupApi; + } + + + /** + * @Route("/block/group/{category}.json") + * + * @param Request $request + * @param SerializerInterface $serializer + * + * @return Response + */ + public function blocks(Request $request, SerializerInterface $serializer): Response + { + $blockGroups = $this->blockGroupApi->getGroupByCategory( + $request->get('category'), + $request->get('count', 10) + ); + + return new Response($serializer->serialize($blockGroups, 'json')); + } +} diff --git a/src/Controller/DistributionController.php b/src/Controller/DistributionController.php new file mode 100644 index 0000000..6ab56a0 --- /dev/null +++ b/src/Controller/DistributionController.php @@ -0,0 +1,49 @@ +distributionApi = $distributionApi; + } + + + /** + * @Route("/distribution/balance.json") + * + * @param SerializerInterface $serializer + * + * @return Response + */ + public function balance(SerializerInterface $serializer) + { + return new Response( + $serializer->serialize( + $this->distributionApi->getBalanceDistribution("10,100,1000"), + 'json' + ) + ); + } +} diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php new file mode 100644 index 0000000..001161b --- /dev/null +++ b/src/Controller/HomeController.php @@ -0,0 +1,78 @@ +blockGroupApi = $blockGroupApi; + } + + /** + * @Route("/") + * @Template() + * + * @param Request $request + * + * @return array + */ + public function index(Request $request): array + { + $period = $request->get('period', 'hourly'); + + return [ + 'blocks' => $this->blockGroupApi->getGroupByCategory($period, 10), + 'period' => $period, + ]; + } + + /** + * @Route("/network/{network}") + * @Template() + * + * @param Request $request + * @param Session $session + * + * @return RedirectResponse + */ + public function network(Request $request, Session $session): RedirectResponse + { + $network = $request->get('network'); + switch ($network) { + case 'testnet': + $network = Network::TEST_NET; + break; + default: + $network = Network::MAIN_NET; + } + + $session->set('network', $network); + + return $this->redirectToRoute('app_home_index'); + } +} diff --git a/src/Controller/RichListController.php b/src/Controller/RichListController.php new file mode 100644 index 0000000..abba4ab --- /dev/null +++ b/src/Controller/RichListController.php @@ -0,0 +1,44 @@ +addressApi = $addressApi; + } + + + /** + * @Route("/rich-list") + * @Template() + * + * @return array + */ + public function index() + { + return [ + 'richList' => $this->addressApi->getTop100Addresses() + ]; + } +} diff --git a/src/Controller/SearchController.php b/src/Controller/SearchController.php new file mode 100644 index 0000000..700a231 --- /dev/null +++ b/src/Controller/SearchController.php @@ -0,0 +1,80 @@ +searchApi = $searchApi; + } + + /** + * @Route("/search") + * @Template() + * + * @return array + */ + public function searchAction() + { + return [ + + ]; + } + + /** + * @Route("/search/results") + * @Template() + * + * @param Request $request + * + * @return array|RedirectResponse + */ + public function resultsAction(Request $request) + { + $hash = $request->get('hash', 'a'); + + try { + if ($hash !== '') { + $result = $this->searchApi->search($request->get('hash', '')); + switch ($result->getType()) { + case 'block': + return $this->redirectToRoute('app_block_view', ['height' => $result->getValue()]); + case 'transaction': + return $this->redirectToRoute('app_transaction_view', ['hash' => $result->getValue()]); + case 'address': + return $this->redirectToRoute('app_address_index', ['hash' => $result->getValue()]); + } + } + } catch (SearchResultMissException $e) { + // + } + + return [ + 'hash' => $hash, + ]; + } +} diff --git a/src/Controller/SoftForkController.php b/src/Controller/SoftForkController.php new file mode 100644 index 0000000..add79c1 --- /dev/null +++ b/src/Controller/SoftForkController.php @@ -0,0 +1,53 @@ +softForkApi = $softForkApi; + $this->blockApi = $blockApi; + } + + + /** + * @Route("/soft-forks") + * @Template() + * + * @return array + */ + public function index() + { + return [ + 'block' => $this->blockApi->getBestBlock(), + 'softForks' => $this->softForkApi->getAll(), + ]; + } +} diff --git a/src/Controller/TransactionController.php b/src/Controller/TransactionController.php new file mode 100644 index 0000000..8109c7b --- /dev/null +++ b/src/Controller/TransactionController.php @@ -0,0 +1,96 @@ +blockApi = $blockApi; + $this->transactionApi = $transactionApi; + } + + /** + * @Route("/tx") + * @Template() + * + * @return array + */ + public function index(): array + { + return []; + } + + + /** + * @Route("/tx.json") + * + * @param Request $request + * @param SerializerInterface $serializer + * + * @return Response + */ + public function transactions(Request $request, SerializerInterface $serializer): Response + { + $transactions = $this->transactionApi->getTransactions( + $request->get('size', $this->pageSize), + $request->get('from', null), + $request->get('to', null) + ); + + return new Response($serializer->serialize($transactions, 'json')); + } + + /** + * @Route("/tx/{hash}") + * @Template() + * + * @param Request $request + * + * @return array + */ + public function view(Request $request): array + { + $transaction = $this->transactionApi->getTransaction($request->get('hash')); + $block = $this->blockApi->getBlock($transaction->getHeight()); + + return [ + 'transaction' => $transaction, + 'block' => $block, + ]; + } +} diff --git a/src/Exception/AddressIndexIncompleteException.php b/src/Exception/AddressIndexIncompleteException.php new file mode 100644 index 0000000..01726d1 --- /dev/null +++ b/src/Exception/AddressIndexIncompleteException.php @@ -0,0 +1,13 @@ +getProjectDir().'/var/cache/'.$this->environment; + } + + public function getLogDir() + { + return $this->getProjectDir().'/var/log'; + } + + public function registerBundles() + { + $contents = require $this->getProjectDir().'/config/bundles.php'; + foreach ($contents as $class => $envs) { + if (isset($envs['all']) || isset($envs[$this->environment])) { + yield new $class(); + } + } + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader) + { + // Feel free to remove the "container.autowiring.strict_mode" parameter + // if you are using symfony/dependency-injection 4.0+ as it's the default behavior + $container->setParameter('container.autowiring.strict_mode', true); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = $this->getProjectDir().'/config'; + + $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{packages}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); + } + + protected function configureRoutes(RouteCollectionBuilder $routes) + { + $confDir = $this->getProjectDir().'/config'; + + $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); + } +} diff --git a/src/Navcoin/Address/Api/AddressApi.php b/src/Navcoin/Address/Api/AddressApi.php new file mode 100644 index 0000000..c4069b6 --- /dev/null +++ b/src/Navcoin/Address/Api/AddressApi.php @@ -0,0 +1,58 @@ +getClient()->get('/api/address/'.$hash); + } catch (ClientException $e) { + switch ($e->getResponse()->getStatusCode()) { + case Response::HTTP_NOT_FOUND: + throw new AddressInvalidException(sprintf("The `%s` address does not exist.", $hash), 0, $e); + default: + throw $e; + } + } + + return $this->getMapper()->mapEntity($data); + } + + /** + * Get top 100 addresses + * + * @return Address[] + */ + public function getTop100Addresses(): array + { + try { + $data = $this->getClient()->get('/api/address/top/100'); + } catch (ServerRequestException $e) { + throw new AddressIndexIncompleteException(sprintf("Could not return top 100 addresses"), 0, $e); + } + + return $this->getMapper()->mapIterator($data); + } +} diff --git a/src/Navcoin/Address/Api/StakingApi.php b/src/Navcoin/Address/Api/StakingApi.php new file mode 100644 index 0000000..475a403 --- /dev/null +++ b/src/Navcoin/Address/Api/StakingApi.php @@ -0,0 +1,27 @@ +getClient()->get(sprintf('/api/staking/report/%s?from=%s&to=%s', + $hash, $from->format('Y-m-d H:i:s'), $to->format('Y-m-d H:i:s') + )); + } catch (ServerRequestException $e) { + throw $e; + } + + return $data; + } +} diff --git a/src/Navcoin/Address/Api/TransactionApi.php b/src/Navcoin/Address/Api/TransactionApi.php new file mode 100644 index 0000000..94da6de --- /dev/null +++ b/src/Navcoin/Address/Api/TransactionApi.php @@ -0,0 +1,68 @@ +addressTransactionTypeFilter = $addressTransactionTypeFilter; + } + + /** + * Get transactions for address + * + * @param String $hash + * @param int $size + * @param array $filters + * @param String|null $from + * @param String|null $to + * + * @return IteratorEntityInterface + */ + public function getTransactionsForAddress( + String $hash, + int $size = 50, + array $filters = null, + String $from = null, + String $to = null + ): IteratorEntityInterface + { + $url = sprintf('/api/address/%s/tx?page=%d&size=%d', $hash,0, $size); + if (!empty($filters)) { + $filterQuery = $this->addressTransactionTypeFilter->createfilterQuery($filters); + $url .= ($filterQuery !== '') ? '&' . $filterQuery : ''; + } + $url .= ($from !== null) ? sprintf('&from=%s', $from) : ''; + $url .= ($to !== null) ? sprintf('&to=%s', $to) : ''; + + try { + $data = $this->getClient()->get($url); + } catch (ServerRequestException $e) { + return new Transactions(); + } + + return $this->getMapper()->mapIterator($data, Transactions::class); + } +} diff --git a/src/Navcoin/Address/Entity/Address.php b/src/Navcoin/Address/Entity/Address.php new file mode 100644 index 0000000..2dc5569 --- /dev/null +++ b/src/Navcoin/Address/Entity/Address.php @@ -0,0 +1,227 @@ +hash = $hash; + $this->received = $received; + $this->receivedCount = $receivedCount; + $this->sent = $sent; + $this->sentCount = $sentCount; + $this->staked = $staked; + $this->stakedCount = $stakedCount; + $this->stakedSent = $stakeSent; + $this->balance = $balance; + $this->blockIndex = $blockIndex; + $this->richListPosition = $richListPosition; + } + + /** + * Get Hash + * + * @return string + */ + public function getHash(): string + { + return $this->hash; + } + + /** + * Get Received + * + * @return float + */ + public function getReceived(): float + { + return $this->received; + } + + /** + * Get ReceivedCount + * + * @return int + */ + public function getReceivedCount(): int + { + return $this->receivedCount; + } + + /** + * Get Sent + * + * @return float + */ + public function getSent(): float + { + return $this->sent; + } + + /** + * Get SentCount + * + * @return int + */ + public function getSentCount(): int + { + return $this->sentCount; + } + + /** + * Get Staked + * + * @return float + */ + public function getStaked(): float + { + return $this->staked; + } + + /** + * Get StakedCount + * + * @return int + */ + public function getStakedCount(): int + { + return $this->stakedCount; + } + + /** + * Get StakedSent + * + * @return float + */ + public function getStakedSent(): float + { + return $this->stakedSent; + } + + /** + * Get Balance + * + * @return float + */ + public function getBalance(): float + { + return $this->balance; + } + + /** + * Get BlockIndex + * + * @return int + */ + public function getBlockIndex(): int + { + return $this->blockIndex; + } + + /** + * Get RichListPosition + * + * @return int + */ + public function getRichListPosition(): int + { + return $this->richListPosition; + } + + /** + * Get Transactions + * + * @return int + */ + public function getTransactions(): int + { + return $this->sentCount + $this->receivedCount + $this->stakedCount; + } +} diff --git a/src/Navcoin/Address/Entity/Transaction.php b/src/Navcoin/Address/Entity/Transaction.php new file mode 100644 index 0000000..4f7d731 --- /dev/null +++ b/src/Navcoin/Address/Entity/Transaction.php @@ -0,0 +1,194 @@ +id = $id; + $this->transaction = $transaction; + $date = new \DateTime(); + $this->time = $date->setTimestamp($time); + $this->height = $height; + $this->balance = $balance; + $this->sent = $sent; + $this->received = $received; + $this->amount = $amount; + $this->type = $type; + } + + /** + * Get Id + * + * @return string + */ + public function getId(): String + { + return $this->id; + } + + /** + * Get Transaction + * + * @return string + */ + public function getTransaction(): string + { + return $this->transaction; + } + + /** + * Get Time + * + * @return \DateTime + */ + public function getTime(): \DateTime + { + return $this->time; + } + + /** + * Get Height + * + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * Get Balance + * + * @return float + */ + public function getBalance(): float + { + return $this->balance; + } + + /** + * Get Amount + * + * @return float + */ + public function getAmount(): float + { + return $this->amount; + } + + /** + * Get Sent + * + * @return float + */ + public function getSent(): float + { + return $this->sent; + } + + /** + * Get Received + * + * @return float + */ + public function getReceived(): float + { + return $this->received; + } + + /** + * Get Staking + * + * @return bool + */ + public function isStaking(): bool + { + return $this->type == AddressTransactionType::STAKING; + } + + /** + * Get Type + * + * @return String + */ + public function getType(): String + { + return $this->getType(); + } +} diff --git a/src/Navcoin/Address/Entity/Transactions.php b/src/Navcoin/Address/Entity/Transactions.php new file mode 100644 index 0000000..2856de2 --- /dev/null +++ b/src/Navcoin/Address/Entity/Transactions.php @@ -0,0 +1,19 @@ +supportedTypes = [Transaction::class]; + } +} diff --git a/src/Navcoin/Address/Mapper/AddressMapper.php b/src/Navcoin/Address/Mapper/AddressMapper.php new file mode 100644 index 0000000..5a6f0a9 --- /dev/null +++ b/src/Navcoin/Address/Mapper/AddressMapper.php @@ -0,0 +1,56 @@ +mapEntity($address); + } + + return $addresses; + } + + /** + * Map Address + * + * @param array $data + * + * @return Address + */ + public function mapEntity(array $data): Address + { + return new Address( + $data['hash'], + $data['received'] / 100000000, + $data['receivedCount'], + $data['sent'] / 100000000, + $data['sentCount'], + $data['staked'] / 100000000, + $data['stakedCount'], + $data['stakedSent'] / 100000000, + $data['balance'] / 100000000, + $data['blockIndex'], + $data['richListPosition'] + ); + } +} diff --git a/src/Navcoin/Address/Mapper/TransactionMapper.php b/src/Navcoin/Address/Mapper/TransactionMapper.php new file mode 100644 index 0000000..421bd75 --- /dev/null +++ b/src/Navcoin/Address/Mapper/TransactionMapper.php @@ -0,0 +1,37 @@ +class = AddressTransactionType::class; + } +} diff --git a/src/Navcoin/Block/Api/BlockApi.php b/src/Navcoin/Block/Api/BlockApi.php new file mode 100644 index 0000000..eb130e1 --- /dev/null +++ b/src/Navcoin/Block/Api/BlockApi.php @@ -0,0 +1,83 @@ +getClient()->get('/api/block/'.$height); + } catch (ClientException $e) { + switch ($e->getResponse()->getStatusCode()) { + case Response::HTTP_NOT_FOUND: + throw new BlockNotFoundException(sprintf("The `%s` block does not exist.", $height), 0, $e); + default: + throw $e; + } + } + + return $this->getMapper()->mapEntity($data); + } + + /** + * Get best block + * + * @return Block + */ + public function getBestBlock(): Block + { + try { + $data = $this->getClient()->get('/api/block/best'); + } catch (ServerRequestException $e) { + throw new BlockNotFoundException("Could not find the best block"); + } + + return $this->getMapper()->mapEntity($data); + } + + /** + * Get all block transactions + * + * @param int $size + * @param String|null $from + * @param String|null $to + * + * @return IteratorEntityInterface + */ + public function getBlocks(int $size = 50, String $from = null, String $to = null): IteratorEntityInterface + { + $url = sprintf('/api/block/?page=%d&size=%d',0, $size); + $url .= ($from !== null) ? sprintf('&from=%s', $from) : ''; + $url .= ($to !== null) ? sprintf('&to=%s', $to) : ''; + + try { + $data = $this->getClient()->get($url); + } catch (ServerRequestException $e) { + return new Blocks(); + } + + return $this->getMapper()->mapIterator($data, Blocks::class); + } +} diff --git a/src/Navcoin/Block/Api/BlockGroupApi.php b/src/Navcoin/Block/Api/BlockGroupApi.php new file mode 100644 index 0000000..3724450 --- /dev/null +++ b/src/Navcoin/Block/Api/BlockGroupApi.php @@ -0,0 +1,35 @@ +getClient()->get(sprintf('/api/group/block/%s/%d', $category, $count)); + } catch (ServerRequestException $e) { + return new BlockGroups(); + } + + return $this->getMapper()->mapIterator($data, BlockGroups::class); + } +} diff --git a/src/Navcoin/Block/Api/TransactionApi.php b/src/Navcoin/Block/Api/TransactionApi.php new file mode 100644 index 0000000..7baa453 --- /dev/null +++ b/src/Navcoin/Block/Api/TransactionApi.php @@ -0,0 +1,81 @@ +getClient()->get('/api/tx/'.$hash); + } catch (ServerRequestException $e) { + throw new TransactionNotFoundException(sprintf("The transaction %s does not exist.", $hash), 0, $e); + } + + return $this->getMapper()->mapEntity($data); + } + + /** + * Get all block transactions + * + * @param int $size + * @param String|null $from + * @param String|null $to + * + * @return IteratorEntityInterface + */ + public function getTransactions(int $size = 50, String $from = null, String $to = null): IteratorEntityInterface + { + $url = sprintf('/api/tx/?page=%d&size=%d',0, $size); + $url .= ($from !== null) ? sprintf('&from=%s', $from) : ''; + $url .= ($to !== null) ? sprintf('&to=%s', $to) : ''; + + try { + $data = $this->getClient()->get($url); + } catch (ServerRequestException $e) { + return new Transactions(); + } + + return $this->getMapper()->mapIterator($data, Transactions::class); + } + + /** + * Get transactions for block + * + * @param String $height + * + * @return IteratorEntityInterface + */ + public function getTransactionsForBlock(String $height): IteratorEntityInterface + { + try { + $data = $this->getClient()->get('/api/block/'.$height.'/tx'); + } catch (ServerRequestException $e) { + throw new BlockNotFoundException(sprintf("The block at height %s does not exist.", $height), 0, $e); + } + + return $this->getMapper()->mapIterator($data, Transactions::class); + } +} diff --git a/src/Navcoin/Block/Entity/Block.php b/src/Navcoin/Block/Entity/Block.php new file mode 100644 index 0000000..6b1ae55 --- /dev/null +++ b/src/Navcoin/Block/Entity/Block.php @@ -0,0 +1,370 @@ +id = $id; + $this->hash = $hash; + $this->merkleRoot = $merkleRoot; + $this->bits = $bits; + $this->size = $size; + $this->version = $version; + $this->nonce = $nonce; + $this->height = $height; + $this->difficulty = $difficulty; + $this->confirmations = $confirmations; + $this->created = $created; + $this->stake = $stake; + $this->fees = $fees; + $this->spend = $spend; + $this->stakedBy = $stakedBy; + $this->transactions = $transactions; + $this->best = $best; + $this->signals = $signals; + $this->blockCycle = $blockCycle; + } + + /** + * Get Id + * + * @return string + */ + public function getId(): string + { + return $this->id; + } + + /** + * Get Hash + * + * @return string + */ + public function getHash(): string + { + return $this->hash; + } + + /** + * Get MerkleRoot + * + * @return string + */ + public function getMerkleRoot(): string + { + return $this->merkleRoot; + } + + /** + * Get Bits + * + * @return string + */ + public function getBits(): string + { + return $this->bits; + } + + /** + * Get Size + * + * @return int + */ + public function getSize(): int + { + return $this->size; + } + + /** + * Get Version + * + * @return int + */ + public function getVersion(): int + { + return $this->version; + } + + /** + * Get Nonce + * + * @return int + */ + public function getNonce(): int + { + return $this->nonce; + } + + /** + * Get Height + * + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * Get Difficulty + * + * @return float + */ + public function getDifficulty(): float + { + return $this->difficulty; + } + + /** + * Get Confirmations + * + * @return int + */ + public function getConfirmations(): int + { + return $this->confirmations; + } + + /** + * Get Created + * + * @return \DateTime + */ + public function getCreated(): \DateTime + { + return $this->created; + } + + /** + * Get Age + * + * @return string + */ + public function getAge(): string + { + return $this->created->diff(new \DateTime())->format("%d days, %h hours and %i minuts"); + } + + /** + * Get Stake + * + * @return float + */ + public function getStake(): float + { + return $this->stake; + } + + /** + * Get Fees + * + * @return float + */ + public function getFees() + { + return $this->fees; + } + + /** + * Get Spend + * + * @return float + */ + public function getSpend() + { + return $this->spend; + } + + /** + * Get StakedBy + * + * @return string + */ + public function getStakedBy(): string + { + return $this->stakedBy; + } + + /** + * Get Transactions + * + * @return int + */ + public function getTransactions(): int + { + return $this->transactions; + } + + /** + * Get Best + * + * @return bool + */ + public function isBest(): bool + { + return $this->best; + } + + /** + * Get Signals + * + * @return BlockSignals + */ + public function getSignals() + { + return $this->signals; + } + + /** + * Get BlockCycle + * + * @return int + */ + public function getBlockCycle() + { + return $this->blockCycle; + } +} diff --git a/src/Navcoin/Block/Entity/BlockGroup.php b/src/Navcoin/Block/Entity/BlockGroup.php new file mode 100644 index 0000000..302ad15 --- /dev/null +++ b/src/Navcoin/Block/Entity/BlockGroup.php @@ -0,0 +1,206 @@ +type = $type; + $this->start = $start; + $this->end = $end; + $this->secondsInPeriod = $secondsInPeriod; + $this->blocks = $blocks; + $this->transactions = $transactions; + $this->stake = $stake; + $this->fees = $fees; + $this->spend = $spend; + $this->height = $height; + } + + /** + * Get Type + * + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * Get Start + * + * @return \DateTime + */ + public function getStart(): \DateTime + { + return $this->start; + } + + /** + * Get End + * + * @return \DateTime + */ + public function getEnd(): \DateTime + { + return $this->end; + } + + /** + * Get SecondsInPeriod + * + * @return int + */ + public function getSecondsInPeriod(): int + { + return $this->secondsInPeriod; + } + + /** + * Get Blocks + * + * @return int + */ + public function getBlocks(): int + { + return $this->blocks; + } + + /** + * Get Transactions + * + * @return int + */ + public function getTransactions(): int + { + return $this->transactions; + } + + /** + * Get Stake + * + * @return float + */ + public function getStake(): float + { + return $this->stake; + } + + /** + * Get Fees + * + * @return float + */ + public function getFees(): float + { + return $this->fees; + } + + /** + * Get Spend + * + * @return float + */ + public function getSpend(): float + { + return $this->spend; + } + + /** + * Get Height + * + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * @return int + */ + public function getInterval(): int + { + return $this->getSecondsInPeriod() / $this->getTransactions(); + } +} diff --git a/src/Navcoin/Block/Entity/BlockGroups.php b/src/Navcoin/Block/Entity/BlockGroups.php new file mode 100644 index 0000000..5074c08 --- /dev/null +++ b/src/Navcoin/Block/Entity/BlockGroups.php @@ -0,0 +1,19 @@ +supportedTypes = [BlockGroup::class]; + } +} diff --git a/src/Navcoin/Block/Entity/BlockSignal.php b/src/Navcoin/Block/Entity/BlockSignal.php new file mode 100644 index 0000000..8e50164 --- /dev/null +++ b/src/Navcoin/Block/Entity/BlockSignal.php @@ -0,0 +1,68 @@ +name = $name; + $this->signalling = $signalling; + } + + /** + * Get Name + * + * @return String + */ + public function getName(): String + { + return $this->name; + } + + /** + * Get Description + * + * @return String + */ + public function getDescription(): String + { + return $this->description; + } + + /** + * Get Signalling + * + * @return bool + */ + public function isSignalling(): bool + { + return $this->signalling; + } +} diff --git a/src/Navcoin/Block/Entity/BlockSignals.php b/src/Navcoin/Block/Entity/BlockSignals.php new file mode 100644 index 0000000..5152b56 --- /dev/null +++ b/src/Navcoin/Block/Entity/BlockSignals.php @@ -0,0 +1,19 @@ +supportedTypes = [BlockSignal::class]; + } +} diff --git a/src/Navcoin/Block/Entity/Blocks.php b/src/Navcoin/Block/Entity/Blocks.php new file mode 100644 index 0000000..0a0c297 --- /dev/null +++ b/src/Navcoin/Block/Entity/Blocks.php @@ -0,0 +1,19 @@ +supportedTypes = [Block::class]; + } +} diff --git a/src/Navcoin/Block/Entity/Input.php b/src/Navcoin/Block/Entity/Input.php new file mode 100644 index 0000000..73c0c4a --- /dev/null +++ b/src/Navcoin/Block/Entity/Input.php @@ -0,0 +1,103 @@ +address = $address; + $this->amount = $amount; + $this->index = $index; + $this->previousOutput = $previousOutput; + $this->previousOutputBlock = $previousOutputBlock; + } + + /** + * Get Address + * + * @return string + */ + public function getAddress(): string + { + return $this->address ?: ''; + } + + /** + * Get Amount + * + * @return float + */ + public function getAmount(): float + { + return $this->amount; + } + + /** + * Get Index + * + * @return int + */ + public function getIndex(): ?int + { + return $this->index; + } + + /** + * Get PreviousOutput + * + * @return string + */ + public function getPreviousOutput(): ?string + { + return $this->previousOutput; + } + + /** + * Get PreviousOutputBlock + * + * @return int + */ + public function getPreviousOutputBlock() + { + return $this->previousOutputBlock; + } +} diff --git a/src/Navcoin/Block/Entity/Inputs.php b/src/Navcoin/Block/Entity/Inputs.php new file mode 100644 index 0000000..e3ac96e --- /dev/null +++ b/src/Navcoin/Block/Entity/Inputs.php @@ -0,0 +1,45 @@ +supportedTypes = [Input::class]; + } + + /** + * Get Value + * + * @return float + */ + public function getValue() { + return array_reduce($this->getElements(), function($value, $input) { + /** @var Input $input */ + return $value += $input->getAmount(); + }, 0); + } + + /** + * Get Balance For Address + * + * @param string $address + * + * @return float + */ + public function getBalanceForAddress($address) { + return array_reduce($this->getElements(), function($value, $input) use ($address) { + /** @var Input $input */ + return $value -= ($input->getAddress() === $address) ? $input->getAmount() : 0; + }, 0); + } +} diff --git a/src/Navcoin/Block/Entity/Output.php b/src/Navcoin/Block/Entity/Output.php new file mode 100644 index 0000000..820412b --- /dev/null +++ b/src/Navcoin/Block/Entity/Output.php @@ -0,0 +1,104 @@ +index = $index; + $this->amount = $amount; + $this->address = $address; + $this->redeemedInTransaction = $redeemedInTransaction; + $this->redeemedInBlock = $redeemedInBlock; + } + + /** + * Get Index + * + * @return int + */ + public function getIndex() + { + return $this->index; + } + + /** + * Get Amount + * + * @return float + */ + public function getAmount() + { + return $this->amount; + } + + /** + * Get Address + * + * @return string + */ + public function getAddress() + { + return $this->address; + } + + /** + * Get RedeemedInTransaction + * + * @return string + */ + public function getRedeemedInTransaction() + { + return $this->redeemedInTransaction; + } + + /** + * Get RedeemedInBlock + * + * @return int + */ + public function getRedeemedInBlock() + { + return $this->redeemedInBlock; + } +} diff --git a/src/Navcoin/Block/Entity/Outputs.php b/src/Navcoin/Block/Entity/Outputs.php new file mode 100644 index 0000000..845dfcf --- /dev/null +++ b/src/Navcoin/Block/Entity/Outputs.php @@ -0,0 +1,45 @@ +supportedTypes = [Output::class]; + } + + /** + * Get Value + * + * @return float + */ + public function getValue() { + return array_reduce($this->getElements(), function($value, $output) { + /** @var Output $output */ + return $value += $output->getAmount(); + }, 0); + } + + /** + * Get Balance For Address + * + * @param string $address + * + * @return float + */ + public function getBalanceForAddress($address) { + return array_reduce($this->getElements(), function($value, $output) use ($address) { + /** @var Output $output */ + return $value += ($output->getAddress() === $address) ? $output->getAmount() : 0; + }, 0); + } +} diff --git a/src/Navcoin/Block/Entity/Transaction.php b/src/Navcoin/Block/Entity/Transaction.php new file mode 100644 index 0000000..9510cb9 --- /dev/null +++ b/src/Navcoin/Block/Entity/Transaction.php @@ -0,0 +1,238 @@ +id = $id; + $this->hash = $hash; + $this->height = $height; + $this->time = $time; + $this->stake = $stake; + $this->fees = $fees; + $this->inputs = $inputs; + $this->outputs = $outputs; + } + + /** + * Get Id + * + * @return string + */ + public function getId(): string + { + return $this->id; + } + + /** + * Get Hash + * + * @return string + */ + public function getHash(): string + { + return $this->hash; + } + + /** + * Get Height + * + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * Get Time + * + * @return \DateTime + */ + public function getTime(): \DateTime + { + return $this->time; + } + + /** + * Get Stake + * + * @return float + */ + public function getStake(): float + { + return $this->stake; + } + + /** + * Is Staking? + * + * @return bool + */ + public function isStaking(): bool + { + return $this->stake ? true : false; + } + + /** + * Get Fees + * + * @return float + */ + public function getFees(): float + { + return $this->fees; + } + + /** + * Has Fees? + * + * @return bool + */ + public function hasFees(): bool + { + return $this->fees ? true : false; + } + + /** + * Get Inputs + * + * @return Inputs + */ + public function getInputs(): Inputs + { + return $this->inputs; + } + + /** + * Get Inputs + * + * @return Input[] + */ + public function getInputElements(): array + { + return $this->inputs->getElements(); + } + + /** + * Get Outputs + * + * @return Outputs + */ + public function getOutputs(): Outputs + { + return $this->outputs; + } + + /** + * Get Type + * + * @return string + */ + public function getType(): string + { + return $this->type; + } + + /** + * Get Outputs + * + * @return Output[] + */ + public function getOutputElements(): array + { + return $this->outputs->getElements(); + } + + /** + * Get Spend for address + * + * @param String $address + * + * @return float + */ + public function getSpendForAddress(String $address): float + { + return (float) $this->outputs->getBalanceForAddress($address) + $this->inputs->getBalanceForAddress($address); + } +} diff --git a/src/Navcoin/Block/Entity/Transactions.php b/src/Navcoin/Block/Entity/Transactions.php new file mode 100644 index 0000000..412df14 --- /dev/null +++ b/src/Navcoin/Block/Entity/Transactions.php @@ -0,0 +1,19 @@ +supportedTypes = [Transaction::class]; + } +} diff --git a/src/Navcoin/Block/Mapper/BlockGroupMapper.php b/src/Navcoin/Block/Mapper/BlockGroupMapper.php new file mode 100644 index 0000000..5febe13 --- /dev/null +++ b/src/Navcoin/Block/Mapper/BlockGroupMapper.php @@ -0,0 +1,35 @@ +setTimestamp($data['group']['start']/1000), + (new \DateTime())->setTimestamp($data['group']['end']/1000), + $data['group']['secondsInPeriod'], + $data['blocks'], + $data['transactions'], + $data['stake'] / 100000000, + $data['fees'] / 100000000, + $data['spend'] / 100000000, + $data['height'] + ); + } +} diff --git a/src/Navcoin/Block/Mapper/BlockMapper.php b/src/Navcoin/Block/Mapper/BlockMapper.php new file mode 100644 index 0000000..48b1d2a --- /dev/null +++ b/src/Navcoin/Block/Mapper/BlockMapper.php @@ -0,0 +1,71 @@ +setTimestamp($data['created']/1000), + $data['stake'] / 100000000, + $data['fees'] / 100000000, + $data['spend'] / 100000000, + $data['stakedBy'] ?: '', + $data['transactions'], + $data['best'], + $this->mapSignals(array_key_exists('signals', $data) ? $data['signals'] : []), + $data['blockCycle'] + ); + } + + /** + * Map Inputs + * + * @param array $data + * + * @return BlockSignals + */ + private function mapSignals(array $data): BlockSignals + { + $signals = new BlockSignals(); + + foreach ($data as $signalData) { + $signals->add( + new BlockSignal( + $signalData['name'], + $signalData['signalling'] + ) + ); + } + + return $signals; + } +} diff --git a/src/Navcoin/Block/Mapper/TransactionMapper.php b/src/Navcoin/Block/Mapper/TransactionMapper.php new file mode 100644 index 0000000..5368363 --- /dev/null +++ b/src/Navcoin/Block/Mapper/TransactionMapper.php @@ -0,0 +1,92 @@ +setTimestamp($data['time']/1000), + $data['stake'] / 100000000, + $data['fees'] / 100000000, + $this->mapInputs($data['inputs']), + $this->mapOutputs($data['outputs']), + $data['type'] + ); + } + + /** + * Map Inputs + * + * @param array $data + * + * @return Inputs + */ + private function mapInputs(array $data): Inputs + { + $inputs = new Inputs(); + + foreach ($data as $inputData) { + $inputs->add( + new Input( + $inputData['address'], + $inputData['amount'] / 100000000, + $inputData['index'], + $inputData['previousOutput'], + $inputData['previousOutputBlock'] + ) + ); + } + + return $inputs; + } + + /** + * Map Outputs + * + * @param array $data + * + * @return Outputs + */ + private function mapOutputs(array $data): Outputs + { + $outputs = new Outputs(); + + foreach ($data as $outputData) { + $outputs->add( + new Output( + $outputData['index'], + $outputData['amount'] / 100000000, + array_key_exists('address', $outputData) ? $outputData['address'] : '', + $outputData['redeemedIn']['hash'], + $outputData['redeemedIn']['height'] + ) + ); + } + + return $outputs; + } +} diff --git a/src/Navcoin/Block/Serializer/TransactionNormalizer.php b/src/Navcoin/Block/Serializer/TransactionNormalizer.php new file mode 100644 index 0000000..ca0c982 --- /dev/null +++ b/src/Navcoin/Block/Serializer/TransactionNormalizer.php @@ -0,0 +1,35 @@ +mainNet = $mainNet; + $this->testNet = $testNet; + $this->session = $session; + + $this->activeClient = $mainNet; + } + + /** + * Get client + * + * @return MainNetClient|NavcoinClient + */ + public function getClient() + { + switch ($this->session->get('network')) { + case Network::MAIN_NET: + return $this->mainNet; + case Network::TEST_NET; + return $this->testNet; + default: + return $this->activeClient; + } + } + + /** + * Use network + * + * @param String $network + * + * @return $this + */ + public function useNetwork(String $network) + { + $this->activeClient = ($network === Network::TEST_NET) ? $this->testNet : $this->mainNet; + + return $this; + } +} diff --git a/src/Navcoin/Client/MainNetClient.php b/src/Navcoin/Client/MainNetClient.php new file mode 100644 index 0000000..69a61ba --- /dev/null +++ b/src/Navcoin/Client/MainNetClient.php @@ -0,0 +1,13 @@ +client = $client ?: new Client([ + 'base_uri' => $baseUri, + ]); + } + + /** + * Get + * + * @param string $uri + * + * @return array + */ + public function get(string $uri): array + { + $response = $this->client->request('GET', $uri, [ + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + ] + ]); + + return \GuzzleHttp\json_decode($response->getBody()->getContents(), true); + } +} diff --git a/src/Navcoin/Client/TestNetClient.php b/src/Navcoin/Client/TestNetClient.php new file mode 100644 index 0000000..bd28c65 --- /dev/null +++ b/src/Navcoin/Client/TestNetClient.php @@ -0,0 +1,13 @@ +setClass(); + $this->getFilters(); + } + + /** + * Sets the class used for filtering + */ + public abstract function setClass(); + + /** + * Get Filters + * + * @return array + */ + public function getFilters(): array + { + if (is_null($this->filters)) { + $class = new \ReflectionClass($this->class); + $this->filters = array_values($class->getConstants()); + } + + return $this->filters; + } + + /** + * Create filter query + * + * @param array $filters + * + * @return string + */ + public function createFilterQuery(array $filters): string + { + if (empty($filters) || $filters === $this->getFilters()) { + return ''; + } + + return 'filters=' . implode(',', array_intersect($filters, $this->getFilters())); + } +} diff --git a/src/Navcoin/Common/Entity/IteratorEntity.php b/src/Navcoin/Common/Entity/IteratorEntity.php new file mode 100644 index 0000000..834b084 --- /dev/null +++ b/src/Navcoin/Common/Entity/IteratorEntity.php @@ -0,0 +1,63 @@ +setSupportedTypes(); + } + + abstract function setSupportedTypes(); + + /** + * Add + * + * @param mixed $element + * + * @return self + */ + public function add($element): self + { + if (!in_array(get_class($element), $this->supportedTypes)) { + throw new \InvalidArgumentException( + sprintf('Cannot add a %s to %s', get_class($element), __CLASS__) + ); + } + + array_push($this->elements, $element); + + return $this; + } + + public function getElements(): array + { + return $this->elements; + } + + public function setElements(array $elements): self + { + $this->elements = $elements; + + return $this; + } + + public function getIterator(): \ArrayIterator + { + return new \ArrayIterator($this->elements); + } +} diff --git a/src/Navcoin/Common/Entity/IteratorEntityInterface.php b/src/Navcoin/Common/Entity/IteratorEntityInterface.php new file mode 100644 index 0000000..c49edd9 --- /dev/null +++ b/src/Navcoin/Common/Entity/IteratorEntityInterface.php @@ -0,0 +1,13 @@ +elements->add($element); + + return $this; + } + + /** + * Get Iterator + * + * @return \ArrayIterator + */ + public function getIterator(): \ArrayIterator + { + return $this->elements->getIterator(); + } + + /** + * Get Last + * + * @return bool + */ + public function isLast(): bool + { + return $this->last; + } + + /** + * Set Last + * + * @param bool $last + * + * @return $this + */ + public function setLast(bool $last): self + { + $this->last = $last; + + return $this; + } + + /** + * Get TotalPages + * + * @return int + */ + public function getTotalPages(): int + { + return $this->totalPages; + } + + /** + * Set TotalPages + * + * @param int $totalPages + * + * @return $this + */ + public function setTotalPages(int $totalPages): self + { + $this->totalPages = $totalPages; + + return $this; + } + + /** + * Get TotalElements + * + * @return int + */ + public function getTotalElements(): int + { + return $this->totalElements; + } + + /** + * Set TotalElements + * + * @param int $totalElements + * + * @return $this + */ + public function setTotalElements(int $totalElements): self + { + $this->totalElements = $totalElements; + + return $this; + } + + /** + * Get First + * + * @return bool + */ + public function isFirst(): bool + { + return $this->first; + } + + /** + * Set First + * + * @param bool $first + * + * @return $this + */ + public function setFirst(bool $first): self + { + $this->first = $first; + + return $this; + } + + /** + * Get NumberOfElements + * + * @return int + */ + public function getNumberOfElements(): int + { + return $this->numberOfElements; + } + + /** + * Set NumberOfElements + * + * @param int $numberOfElements + * + * @return $this + */ + public function setNumberOfElements(int $numberOfElements): self + { + $this->numberOfElements = $numberOfElements; + + return $this; + } + + /** + * Get Size + * + * @return int + */ + public function getSize(): int + { + return $this->size; + } + + /** + * Set Size + * + * @param int $size + * + * @return $this + */ + public function setSize(int $size): self + { + $this->size = $size; + + return $this; + } + + /** + * Get Number + * + * @return int + */ + public function getNumber(): int + { + return $this->number; + } + + /** + * Set Number + * + * @param int $number + * + * @return $this + */ + public function setNumber(int $number): self + { + $this->number = $number; + + return $this; + } + + /** + * Get Elements + * + * @return IteratorEntity + */ + public function getElements() + { + return $this->elements->getElements(); + } + + /** + * Set Elements + * + * @param IteratorEntity $elements + * + * @return $this + */ + public function setElements(IteratorEntity $elements): self + { + $this->elements = $elements; + + return $this; + } +} diff --git a/src/Navcoin/Common/Mapper/BaseMapper.php b/src/Navcoin/Common/Mapper/BaseMapper.php new file mode 100644 index 0000000..c899eda --- /dev/null +++ b/src/Navcoin/Common/Mapper/BaseMapper.php @@ -0,0 +1,89 @@ +isPaginated($data) ? $this->createPaginator($data, $class) : new $class; + + foreach ($this->getElements($data) as $entity) { + $container->add($this->mapEntity($entity)); + } + + return $container; + } + + /** + * Create Paginator + * + * @param array $data + * @param string $class + * + * @return Paginator + */ + protected function createPaginator(array $data, string $class): Paginator + { + return (new Paginator()) + ->setLast($data['last']) + ->setTotalPages($data['totalPages']) + ->setTotalElements($data['totalElements']) + ->setFirst($data['first']) + ->setNumberOfElements($data['numberOfElements']) + ->setSize($data['size']) + ->setNumber($data['number']) + ->setElements(new $class); + } + + /** + * Get Elements + * + * @param array $data + * + * @return array + */ + protected function getElements(array $data): array + { + if ($this->isPaginated($data)) { + return $data['content']; + } + + return $data; + } + + /** + * Is Paginated + * + * @param array $data + * + * @return bool + */ + protected function isPaginated(array $data): bool + { + return array_key_exists('content', $data); + } +} diff --git a/src/Navcoin/Common/Mapper/MapperInterface.php b/src/Navcoin/Common/Mapper/MapperInterface.php new file mode 100644 index 0000000..53001ad --- /dev/null +++ b/src/Navcoin/Common/Mapper/MapperInterface.php @@ -0,0 +1,14 @@ +clientManager = $clientManager; + + if ($mapper !== null) { + $this->mapper = $mapper; + } + } + + /** + * Get Client + * + * @return NavcoinClient + */ + public function getClient() + { + return $this->clientManager->getClient(); + } + + /** + * Get Mapper + * + * @return MapperInterface + */ + public function getMapper() + { + return $this->mapper; + } + + + /** + * Set Network + * + * @param String $network + * + * @return $this + */ + public function useNetwork(String $network) + { + switch ($network) { + case Network::TEST_NET: + $this->client = $this->clientManager->useNetwork($network); + break; + default: + $this->client = $this->clientManager->useNetwork(Network::MAIN_NET); + } + + return $this; + } +} diff --git a/src/Navcoin/Common/Network.php b/src/Navcoin/Common/Network.php new file mode 100644 index 0000000..a8c84f4 --- /dev/null +++ b/src/Navcoin/Common/Network.php @@ -0,0 +1,14 @@ +getClient()->get('/api/distribution/balance?groups='.$groups); + } catch (ServerRequestException $e) { + throw new DistributionException(sprintf("The distribution cannot be created."), 500, $e); + } + + return $this->getMapper()->mapIterator($data); + } +} diff --git a/src/Navcoin/Distribution/Entity/Distribution.php b/src/Navcoin/Distribution/Entity/Distribution.php new file mode 100644 index 0000000..927986e --- /dev/null +++ b/src/Navcoin/Distribution/Entity/Distribution.php @@ -0,0 +1,40 @@ +segments, $segment); + + return $this; + } + + /** + * Get Iterator + * + * @return \ArrayIterator + */ + public function getIterator(): \ArrayIterator + { + return new \ArrayIterator($this->segments); + } +} diff --git a/src/Navcoin/Distribution/Entity/DistributionSegment.php b/src/Navcoin/Distribution/Entity/DistributionSegment.php new file mode 100644 index 0000000..be0db0c --- /dev/null +++ b/src/Navcoin/Distribution/Entity/DistributionSegment.php @@ -0,0 +1,87 @@ +position = $position; + $this->total = $total; + $this->value = $value; + $this->percentage = $percentage; + } + + /** + * Get Position + * + * @return int + */ + public function getPosition(): int + { + return $this->position; + } + + /** + * Get Total + * + * @return float + */ + public function getTotal(): float + { + return $this->total; + } + + /** + * Get Value + * + * @return float + */ + public function getValue(): float + { + return $this->value; + } + + /** + * Get Percentage + * + * @return int + */ + public function getPercentage(): int + { + return $this->percentage; + } +} diff --git a/src/Navcoin/Distribution/Mapper/DistributionMapper.php b/src/Navcoin/Distribution/Mapper/DistributionMapper.php new file mode 100644 index 0000000..2d04247 --- /dev/null +++ b/src/Navcoin/Distribution/Mapper/DistributionMapper.php @@ -0,0 +1,51 @@ +add($this->mapEntity($segment)); + } + + return $distribution; + } + + /** + * Map Segment + * + * @param array $data + * + * @return DistributionSegment + */ + public function mapEntity(array $data): DistributionSegment + { + return new DistributionSegment( + $data['position'], + $data['total'] / 100000000, + $data['value'] / 100000000, + round($data['percentage'], 2) + ); + } +} diff --git a/src/Navcoin/Search/Api/SearchApi.php b/src/Navcoin/Search/Api/SearchApi.php new file mode 100644 index 0000000..d298dbe --- /dev/null +++ b/src/Navcoin/Search/Api/SearchApi.php @@ -0,0 +1,32 @@ +getClient()->get('/api/search/'.$hash); + } catch (\Exception $e) { + throw new SearchResultMissException("No results for hash: ".$hash); + } + + return new SearchResult($data['type'], $data['value']); + } +} diff --git a/src/Navcoin/Search/Entity/SearchResult.php b/src/Navcoin/Search/Entity/SearchResult.php new file mode 100644 index 0000000..af19175 --- /dev/null +++ b/src/Navcoin/Search/Entity/SearchResult.php @@ -0,0 +1,53 @@ +type = $type; + $this->value = $value; + } + + /** + * Get Type + * + * @return String + */ + public function getType(): String + { + return $this->type; + } + + /** + * Get Value + * + * @return String + */ + public function getValue(): String + { + return $this->value; + } +} diff --git a/src/Navcoin/Search/Exception/SearchResultMissException.php b/src/Navcoin/Search/Exception/SearchResultMissException.php new file mode 100644 index 0000000..71c215c --- /dev/null +++ b/src/Navcoin/Search/Exception/SearchResultMissException.php @@ -0,0 +1,13 @@ +getClient()->get('/api/soft-fork'); + } catch (ServerRequestException $e) { + return new SoftForks(); + } + + return $this->getMapper()->mapIterator($data, SoftForks::class); + } +} \ No newline at end of file diff --git a/src/Navcoin/SoftFork/Entity/SoftFork.php b/src/Navcoin/SoftFork/Entity/SoftFork.php new file mode 100644 index 0000000..0886430 --- /dev/null +++ b/src/Navcoin/SoftFork/Entity/SoftFork.php @@ -0,0 +1,115 @@ +name = $name; + $this->state = $state; + $this->blocksInCycle = $blocksInCycle; + $this->blockRequired = $blockRequired; + $this->blocksSignalling = $blocksSignalling; + $this->blocksRemaining = $blocksRemaining; + $this->lockedInHeight = $lockedInHeight; + $this->activationHeight = $activationHeight; + } + + public function getName(): string + { + return $this->name; + } + + public function getState(): string + { + return $this->state; + } + + public function getBlocksInCycle(): int + { + return $this->blocksInCycle; + } + + public function getBlockRequired() + { + return $this->blockRequired; + } + + public function getBlocksSignalling(): int + { + return $this->blocksSignalling; + } + + public function getBlocksRemaining(): int + { + return $this->blocksRemaining; + } + + public function getLockedInHeight(): int + { + return $this->lockedInHeight; + } + + public function getActivationHeight(): int + { + return $this->activationHeight; + } + + public function getPercentComplete(): int + { + if ($this->blocksSignalling == 0) { + return 0; + } + + return ($this->blocksSignalling / $this->blocksInCycle) * 100; + } +} diff --git a/src/Navcoin/SoftFork/Entity/SoftForks.php b/src/Navcoin/SoftFork/Entity/SoftForks.php new file mode 100644 index 0000000..0c3407e --- /dev/null +++ b/src/Navcoin/SoftFork/Entity/SoftForks.php @@ -0,0 +1,20 @@ +supportedTypes = [SoftFork::class]; + } +} + diff --git a/src/Navcoin/SoftFork/Mapper/SoftForkMapper.php b/src/Navcoin/SoftFork/Mapper/SoftForkMapper.php new file mode 100644 index 0000000..8fcc6fe --- /dev/null +++ b/src/Navcoin/SoftFork/Mapper/SoftForkMapper.php @@ -0,0 +1,42 @@ +add($this->mapEntity($softFork)); + } + $elements = $softForks->getElements(); + usort($elements, [$this, 'sortBySignals']); + + return $softForks->setElements($elements); + } + + public function mapEntity(array $data): SoftFork + { + return new SoftFork( + $data['name'], + $data['state'], + $data['blocksInCycle'], + $data['blocksInCycle'] * 0.75, + $data['blocksSignalling'], + $data['blocksRemaining'], + $data['lockedInHeight'], + $data['activationHeight'] + ); + } + + function sortBySignals(SoftFork $a, SoftFork $b) + { + return $a->getBlocksSignalling() < $b->getBlocksSignalling(); + } +} diff --git a/src/Twig/DateExtension.php b/src/Twig/DateExtension.php new file mode 100644 index 0000000..2b12ac4 --- /dev/null +++ b/src/Twig/DateExtension.php @@ -0,0 +1,99 @@ + ['html']]), + ); + } + + public function getFunctions(): array + { + return [ + new TwigFunction('period', [$this, 'period'], ['is_safe' => ['html']]), + ]; + } + + /** + * Date Localised + * + * @param \DateTime $date + * @param string $format + * + * @return string + */ + public function dateLocalised(\DateTime $date, string $format): string + { + return sprintf( + '%s', + $date->getTimestamp() * 1000, + $date->format($format) + ); + } + + public function period(String $period, int $index, BlockGroup $block) { + switch ($period) { + case 'hourly': + return $this->hourly($index, $block); + case 'daily': + return $this->daily($index, $block); + case 'monthly': + return $this->monthly($index, $block); + } + } + + public function hourly(int $index, BlockGroup $block) + { + switch ($index) { + case 0: + return sprintf("%s - %s", $block->getStart()->format('g:i a'), $block->getEnd()->format('g:i a')); + default: + $start = clone $block->getEnd(); + $start->add(new \DateInterval('PT1H')); + + return sprintf("%s - %s", $start->format('g:i a'), $block->getEnd()->format('g:i a')); + } + } + + public function daily(int $index, BlockGroup $block) + { + switch ($index) { + case 0: + return 'Today'; + case 1: + return 'Yesterday'; + default: + return $block->getEnd()->format('D jS M'); + } + } + + public function monthly(int $index, BlockGroup $block) + { + switch ($index) { + case 0: + return 'This month'; + default: + return $block->getEnd()->format('F'); + } + } +} diff --git a/src/Twig/OrdinalExtension.php b/src/Twig/OrdinalExtension.php new file mode 100644 index 0000000..578daa3 --- /dev/null +++ b/src/Twig/OrdinalExtension.php @@ -0,0 +1,44 @@ + ['html']]), + ); + } + + /** + * Stake filter + * + * @param float $number + * + * @return string + */ + public function ordinal(float $number): string + { + $ends = ['th','st','nd','rd','th','th','th','th','th','th']; + + if ((($number % 100) >= 11) && (($number % 100) <= 13)) { + return number_format($number, 0).'th'; + } + + return number_format($number, 0).$ends[$number % 10]; + } +} diff --git a/src/Twig/StakeExtension.php b/src/Twig/StakeExtension.php new file mode 100644 index 0000000..7eb816f --- /dev/null +++ b/src/Twig/StakeExtension.php @@ -0,0 +1,49 @@ + ['html']]), + ]; + } + + /** + * Stake filter + * + * @param float $number + * @param bool $sign + * @param int $decimalPlaces + * + * @return string + */ + public function stakeFormat(float $number, bool $sign = false, int $decimalPlaces = 8): string + { + $stake = rtrim(rtrim(number_format($number, $decimalPlaces,'.', ','), '0'), '.'); + + if ($number < 0) { + $stake = preg_replace('/(\-)/', '- ', $stake); + } else if ($sign === true) { + $stake = '+ '.$stake; + } + + return preg_replace('/\.([0-9]*)$/', '.$1', $stake) . ' NAV'; + } + +} diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 0000000..8ab7007 --- /dev/null +++ b/symfony.lock @@ -0,0 +1,284 @@ +{ + "bacon/bacon-qr-code": { + "version": "1.0.3" + }, + "doctrine/annotations": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "cb4152ebcadbe620ea2261da1a1c5a9b8cea7672" + } + }, + "doctrine/cache": { + "version": "v1.7.1" + }, + "doctrine/collections": { + "version": "v1.5.0" + }, + "doctrine/common": { + "version": "v2.8.1" + }, + "doctrine/inflector": { + "version": "v1.3.0" + }, + "doctrine/instantiator": { + "version": "1.1.0" + }, + "doctrine/lexer": { + "version": "v1.0.1" + }, + "endroid/qr-code": { + "version": "3.2.8" + }, + "endroid/qr-code-bundle": { + "version": "3.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "3.0", + "ref": "b9fcbe18b537c63bf61d3c3be8116a00a85c8e2e" + } + }, + "guzzlehttp/guzzle": { + "version": "6.3.0" + }, + "guzzlehttp/promises": { + "version": "v1.3.1" + }, + "guzzlehttp/psr7": { + "version": "1.4.2" + }, + "jms/metadata": { + "version": "1.6.0" + }, + "jms/parser-lib": { + "version": "1.0.0" + }, + "jms/serializer": { + "version": "1.11.0" + }, + "jms/serializer-bundle": { + "version": "2.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "2.0", + "ref": "fe60ce509ef04a3f40da96e3979bc8d9b13b2372" + } + }, + "khanamiryan/qrcode-detector-decoder": { + "version": "1" + }, + "monolog/monolog": { + "version": "1.23.0" + }, + "myclabs/php-enum": { + "version": "1.5.2" + }, + "phpcollection/phpcollection": { + "version": "0.5.0" + }, + "phpoption/phpoption": { + "version": "1.5.0" + }, + "psr/cache": { + "version": "1.0.1" + }, + "psr/container": { + "version": "1.0.0" + }, + "psr/http-message": { + "version": "1.0.1" + }, + "psr/log": { + "version": "1.0.2" + }, + "psr/simple-cache": { + "version": "1.0.1" + }, + "sensio/framework-extra-bundle": { + "version": "4.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.0", + "ref": "aaddfdf43cdecd4cf91f992052d76c2cadc04543" + } + }, + "symfony/asset": { + "version": "v3.4.6" + }, + "symfony/cache": { + "version": "v3.4.6" + }, + "symfony/class-loader": { + "version": "v3.4.6" + }, + "symfony/config": { + "version": "v3.4.6" + }, + "symfony/console": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "c646e4b71af082e94b5014daca36ef6812bad076" + } + }, + "symfony/debug": { + "version": "v3.4.6" + }, + "symfony/dependency-injection": { + "version": "v3.4.6" + }, + "symfony/dotenv": { + "version": "v3.4.6" + }, + "symfony/event-dispatcher": { + "version": "v3.4.6" + }, + "symfony/expression-language": { + "version": "v3.4.6" + }, + "symfony/filesystem": { + "version": "v3.4.6" + }, + "symfony/finder": { + "version": "v3.4.6" + }, + "symfony/flex": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "cc1afd81841db36fbef982fe56b48ade6716fac4" + } + }, + "symfony/framework-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "b9f462a47f7fd28d56c61f59c027fd7ad8e1aac8" + } + }, + "symfony/http-foundation": { + "version": "v3.4.6" + }, + "symfony/http-kernel": { + "version": "v3.4.6" + }, + "symfony/inflector": { + "version": "v3.4.6" + }, + "symfony/lts": { + "version": "v3" + }, + "symfony/monolog-bridge": { + "version": "v3.4.11" + }, + "symfony/monolog-bundle": { + "version": "3.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.1", + "ref": "371d1a2b69984710646b09a1182ef1d4308c904f" + } + }, + "symfony/options-resolver": { + "version": "v3.4.7" + }, + "symfony/polyfill-apcu": { + "version": "v1.7.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.7.0" + }, + "symfony/process": { + "version": "v3.4.6" + }, + "symfony/profiler-pack": { + "version": "v1.0.3" + }, + "symfony/property-access": { + "version": "v3.4.6" + }, + "symfony/routing": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "a249484db698d1a847a30291c8f732414ac47e25" + } + }, + "symfony/serializer": { + "version": "v3.4.6" + }, + "symfony/stopwatch": { + "version": "v3.4.6" + }, + "symfony/twig-bridge": { + "version": "v3.4.6" + }, + "symfony/twig-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "f75ac166398e107796ca94cc57fa1edaa06ec47f" + } + }, + "symfony/var-dumper": { + "version": "v3.4.6" + }, + "symfony/web-profiler-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6" + } + }, + "symfony/web-server-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "c72d107d077f1654428edaed69415d0228c1aefe" + } + }, + "symfony/webpack-encore-pack": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "a2f276eff6e95ca94be135d2d3e5c1247c6f8807" + } + }, + "symfony/yaml": { + "version": "v3.4.6" + }, + "twig/extensions": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "4851df0afc426b8f07204379d21fca25b6df5d68" + } + }, + "twig/twig": { + "version": "v2.4.6" + } +} diff --git a/templates/address/components/summary.html.twig b/templates/address/components/summary.html.twig new file mode 100644 index 0000000..6c4f097 --- /dev/null +++ b/templates/address/components/summary.html.twig @@ -0,0 +1,57 @@ +

+
+ + + + + + + + + + + + + + + + + + + {% if address.staked %} + + + + + {% endif %} + + + + + + + + + +
Hash + {{ address.hash }} +
Balance + {{ address.balance|stake_format }} +
Sent + {{ address.sentCount }} txs + {{ address.sent|stake_format }} +
Received + {{ address.receivedCount }} txs + {{ address.received|stake_format }} +
Staking + {{ address.stakedCount }} txs + {{ (address.staked)|stake_format }} +
Transactions + {{ address.transactions|number_format }} +
Rich list{{ address.richListPosition|ordinal }}
+
+
+
+ +
+
diff --git a/templates/address/components/transactions.html.twig b/templates/address/components/transactions.html.twig new file mode 100644 index 0000000..5986acf --- /dev/null +++ b/templates/address/components/transactions.html.twig @@ -0,0 +1,31 @@ +
+

Transactions

+ +
+ Filter + {% for filter in filter.filters %} + + {% endfor %} +
+ + + + + + + + + + + + + + + +
+
+
BlockDate/TimeHashAmountBalance
Loading transactions...
+
\ No newline at end of file diff --git a/templates/address/index.html.twig b/templates/address/index.html.twig new file mode 100644 index 0000000..c33fbbf --- /dev/null +++ b/templates/address/index.html.twig @@ -0,0 +1,24 @@ +{% extends "base.html.twig" %} + +{% block title %}Address {{ address.hash }} - {{ address.balance }}{% endblock %} + +{% block page %}page-address-index{% endblock %} + +{% block body %} +
+
+
+
+
+

+ Address +

+
+
+
+ + {% include "address/components/summary.html.twig" %} + {% include "address/components/transactions.html.twig" %} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/address/not_found.html.twig b/templates/address/not_found.html.twig new file mode 100644 index 0000000..5a3b6b7 --- /dev/null +++ b/templates/address/not_found.html.twig @@ -0,0 +1,21 @@ +{% extends "not_found.html.twig" %} + +{% block title %}Address not found - {{ hash }}{% endblock %} + +{% block page %}page-address-not-found{% endblock %} + +{% block content %} +
+

Address Not Valid

+ +

`{{ hash|slice(0, 20) }}` is not a valid NavCoin address.

+ +

Things to do:

+
    +
  1. Confirm you entered it accurately. Addresses are case-sensitive.
  2. +
  3. Mainnet addresses are not valid for Testnet. Are you exploring the correct network?
  4. +
+ +

Speak to @prodpeak on discord if you need further assistance.

+
+{% endblock %} \ No newline at end of file diff --git a/templates/base.html.twig b/templates/base.html.twig new file mode 100644 index 0000000..13448ee --- /dev/null +++ b/templates/base.html.twig @@ -0,0 +1,46 @@ + + + + + Nav Explorer - {% block title %}{% endblock %} - NavCoin + + + + + {% block stylesheets %} + + + {% endblock %} + + + + + + + + {% block header %} + {% include "components/header.html.twig" %} + {% endblock %} + +
+ {% block body %}{% endblock %} +
+ + {% block footer %} + {% include "components/footer.html.twig" %} + {% endblock %} + + {% block javascripts %} + + + + + {% endblock %} + + diff --git a/templates/block/components/index_blocks.html.twig b/templates/block/components/index_blocks.html.twig new file mode 100644 index 0000000..f6144ed --- /dev/null +++ b/templates/block/components/index_blocks.html.twig @@ -0,0 +1,21 @@ +
+

Latest Blocks

+ + + + + + + + + + + + + + + +
+
+
HeightDate/TimeTransactionsStaked ByStake
Loading blocks...
+
\ No newline at end of file diff --git a/templates/block/components/view_softforks.html.twig b/templates/block/components/view_softforks.html.twig new file mode 100644 index 0000000..ed503b8 --- /dev/null +++ b/templates/block/components/view_softforks.html.twig @@ -0,0 +1,21 @@ +{% if block.signals|length %} +

Soft fork signalling

+ + + + + + + + + + + {% for signal in block.signals %} + + + + + {% endfor %} + +
NameSignallingActivated
{{ signal.name }}{{ signal.signalling ? "Yes" : "No" }}
+{% endif %} \ No newline at end of file diff --git a/templates/block/components/view_summary.html.twig b/templates/block/components/view_summary.html.twig new file mode 100644 index 0000000..9929ba9 --- /dev/null +++ b/templates/block/components/view_summary.html.twig @@ -0,0 +1,97 @@ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Hash{{ block.hash }}
Height{{ block.height }}
Confirmations{{ block.confirmations }}
Created At + {{ block.created|date_localised('M jS Y, g:i:s a') }} +
Staked By + {% if block.stakedBy %} + {{ block.stakedBy }} + {% else %} + N/A + {% endif %} +
Stake Reward{{ block.stake|stake_format }}
Fees{{ block.fees|stake_format }}
Spent{{ block.spend|stake_format }}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Difficulty{{ block.difficulty }}
Bits{{ block.bits }}
Size{{ block.size }}
Version{{ block.version }}
Nonce{{ block.nonce }}
Merkle Root + {{ block.merkleRoot|slice(0,10) }}... +
+
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/templates/block/components/view_transactions.html.twig b/templates/block/components/view_transactions.html.twig new file mode 100644 index 0000000..b62791f --- /dev/null +++ b/templates/block/components/view_transactions.html.twig @@ -0,0 +1,3 @@ +

Transactions ({{ block.transactions|number_format }})

+ +
\ No newline at end of file diff --git a/templates/block/index.html.twig b/templates/block/index.html.twig new file mode 100644 index 0000000..fab4fc2 --- /dev/null +++ b/templates/block/index.html.twig @@ -0,0 +1,17 @@ +{% extends "base.html.twig" %} + +{% block title %}Blocks{% endblock %} + +{% block page %}page-block-index{% endblock %} + +{% block body %} +
+
+
+
+ {% include 'block/components/index_blocks.html.twig' %} +
+
+
+
+{% endblock %} diff --git a/templates/block/not_found.html.twig b/templates/block/not_found.html.twig new file mode 100644 index 0000000..9f9c3a0 --- /dev/null +++ b/templates/block/not_found.html.twig @@ -0,0 +1,22 @@ +{% extends "not_found.html.twig" %} + +{% block title %}Block not found - {{ height }}{% endblock %} + +{% block page %}page-block-not-found{% endblock %} + +{% block content %} +
+

Block Not Found

+ +

We cannot find a block associated with `{{ height|slice(0, 20) }}`.

+ +

Things to do:

+
    +
  1. Confirm you entered the hash or height correctly. Hashes are case-sensitive.
  2. +
  3. Are you exploring the correct network? Blocks on Mainnet will not exist on Testnet.
  4. +
  5. Has the Nav blockchain reached the height you expected?
  6. +
+ +

Speak to @prodpeak on discord if you need further assistance.

+
+{% endblock %} \ No newline at end of file diff --git a/templates/block/view.html.twig b/templates/block/view.html.twig new file mode 100644 index 0000000..b027f39 --- /dev/null +++ b/templates/block/view.html.twig @@ -0,0 +1,33 @@ +{% extends "base.html.twig" %} + +{% block title %}Block {{ block.height }} - {{ block.hash }}{% endblock %} + +{% block page %}page-block-view{% endblock %} + +{% block body %} +
+
+
+
+
+

Block {{ block.height }}

+
+
+
+ + {% include "block/components/view_summary.html.twig" %} + +
+
+ {% include "block/components/view_transactions.html.twig" %} +
+
+ + {#
#} + {#
#} + {#{% include "block/components/view_softforks.html.twig" %}#} + {#
#} + {#
#} +
+
+{% endblock %} diff --git a/templates/bundles/TwigBundle/Exception/error.html.twig b/templates/bundles/TwigBundle/Exception/error.html.twig new file mode 100644 index 0000000..c91b0e9 --- /dev/null +++ b/templates/bundles/TwigBundle/Exception/error.html.twig @@ -0,0 +1,18 @@ +{% extends "not_found.html.twig" %} + +{% block title %}Page not found{% endblock %} + +{% block page %}page-page-not-found{% endblock %} + +{% block content %} +
+

Server Error

+ +

+ We are unable to complete your request.
+ Please try again in a few moments. +

+ +

Speak to @prodpeak on discord if you need further assistance.

+
+{% endblock %} \ No newline at end of file diff --git a/templates/bundles/TwigBundle/Exception/error404.html.twig b/templates/bundles/TwigBundle/Exception/error404.html.twig new file mode 100644 index 0000000..5b6e4e1 --- /dev/null +++ b/templates/bundles/TwigBundle/Exception/error404.html.twig @@ -0,0 +1,18 @@ +{% extends "not_found.html.twig" %} + +{% block title %}Page not found{% endblock %} + +{% block page %}page-page-not-found{% endblock %} + +{% block content %} +
+

Page not found

+ +

+ The requested page couldn't be located.
+ Checkout for any URL misspelling or return to the homepage. +

+ +

Speak to @prodpeak on discord if you need further assistance.

+
+{% endblock %} \ No newline at end of file diff --git a/templates/components/alpha-warning.html.twig b/templates/components/alpha-warning.html.twig new file mode 100644 index 0000000..fa51240 --- /dev/null +++ b/templates/components/alpha-warning.html.twig @@ -0,0 +1 @@ +
This is an alpha release and therefore contains known issues. Data should not yet be trusted
diff --git a/templates/components/footer.html.twig b/templates/components/footer.html.twig new file mode 100644 index 0000000..35761d0 --- /dev/null +++ b/templates/components/footer.html.twig @@ -0,0 +1,16 @@ +
+
+
+
+
+ {% set network = app.session.get('network', 'MAIN_NET') %} + +
+
* All times displayed in UTC
+
+
+
+
\ No newline at end of file diff --git a/templates/components/header.html.twig b/templates/components/header.html.twig new file mode 100644 index 0000000..50bf6e6 --- /dev/null +++ b/templates/components/header.html.twig @@ -0,0 +1,9 @@ +{% include "components/testnet-warning.html.twig" %} + +
+ + + {% include "components/nav.html.twig" %} +
diff --git a/templates/components/nav.html.twig b/templates/components/nav.html.twig new file mode 100644 index 0000000..6a67b8b --- /dev/null +++ b/templates/components/nav.html.twig @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/templates/components/testnet-warning.html.twig b/templates/components/testnet-warning.html.twig new file mode 100644 index 0000000..728694f --- /dev/null +++ b/templates/components/testnet-warning.html.twig @@ -0,0 +1,5 @@ +{% set network = app.session.get('network', 'mainnet') %} + +{% if network == 'TEST_NET' %} +
You are currently exploring blocks on the test net
+{% endif %} \ No newline at end of file diff --git a/templates/error/address_unavailable.html.twig b/templates/error/address_unavailable.html.twig new file mode 100644 index 0000000..99a2ca5 --- /dev/null +++ b/templates/error/address_unavailable.html.twig @@ -0,0 +1,20 @@ +{% extends "base.html.twig" %} + +{% block title %}Error - Backend Unavailable{% endblock %} + +{% block page %}page-error-backend-unavailable{% endblock %} + +{% block body %} +
+
+
+
+

Address Invalid

+

You have tried to view an address that is not a valid NavCoin address.

+

Addresses for testnet are not valid for mainnet, and vise versa.

+

If you think this is the case, switch to the other network and try again.

+
+
+
+
+{% endblock %} diff --git a/templates/error/backend_unavailable.html.twig b/templates/error/backend_unavailable.html.twig new file mode 100644 index 0000000..1c1291c --- /dev/null +++ b/templates/error/backend_unavailable.html.twig @@ -0,0 +1,23 @@ +{% extends "base.html.twig" %} + +{% block title %}Error - Backend Unavailable{% endblock %} + +{% block page %}page-error-backend-unavailable{% endblock %} + +{% block body %} +
+
+
+
+

Nav Explorer is temporarily unavailable.

+

+ Sorry, we are unable to complete your request at this time.
+ We have been alerted to this problem and are working to resolve the issue.
+ Please try again later. +

+

+
+
+
+
+{% endblock %} diff --git a/templates/home/components/overview.html.twig b/templates/home/components/overview.html.twig new file mode 100644 index 0000000..a6a7ae9 --- /dev/null +++ b/templates/home/components/overview.html.twig @@ -0,0 +1,38 @@ +

Overview

+ +
+ Group by: + + +
+ + + + + + + + + + + + + + + {% for index, block in blocks %} + + + + + + + + + + {% endfor %} + +
{{ period|capitalize }} PeriodHeightBlocksTransactionsStake RewardsNav SpentFees
{{ period(period, index, block) }}{{ block.height }}{{ block.blocks }}{{ block.transactions }}{{ block.stake|stake_format }}{{ block.spend|stake_format }}{{ block.fees|stake_format }}
\ No newline at end of file diff --git a/templates/home/hud.html.twig b/templates/home/hud.html.twig new file mode 100644 index 0000000..96abf13 --- /dev/null +++ b/templates/home/hud.html.twig @@ -0,0 +1,43 @@ +
+ {#
#} + {#
#} + {#
BTC  Price 
#} + {#
{{ ticker.priceBtc*1000 }} mBTC
#} + {#
#} + {#
#} + + {#
#} + {#
#} + {#
USD Price
#} + {#
$ {{ ticker.priceUsd }}
#} + {#
#} + {#
#} + + {#
#} + {#
#} + {#
Market Cap
#} + {#
$ {{ ticker.marketCapUsd|number_format }}
#} + {#
#} + {#
#} + + {#
#} + {#
#} + {#
Known Peers
#} + {#
XXX
#} + {#
#} + {#
#} + + {#
#} + {#
#} + {#
24hr Volume
#} + {#
$ {{ ticker.volume|number_format }}
#} + {#
#} + {#
#} + + {#
#} + {#
#} + {#
Total Supply
#} + {#
{{ ticker.totalSupply|stake_format }}
#} + {#
#} + {#
#} +
diff --git a/templates/home/index.html.twig b/templates/home/index.html.twig new file mode 100644 index 0000000..761c3f9 --- /dev/null +++ b/templates/home/index.html.twig @@ -0,0 +1,21 @@ +{% extends "base.html.twig" %} + +{% block title %}Homepage{% endblock %} + +{% block page %}page-home-index{% endblock %} + +{% block body %} +
+
+
+
+ {% include 'search/components/form.html.twig' %} +
+ +
+ {% include 'home/components/overview.html.twig' %} +
+
+
+
+{% endblock %} diff --git a/templates/network/components/index_marketcap.html.twig b/templates/network/components/index_marketcap.html.twig new file mode 100644 index 0000000..e69de29 diff --git a/templates/network/components/index_summary.html.twig b/templates/network/components/index_summary.html.twig new file mode 100644 index 0000000..685980b --- /dev/null +++ b/templates/network/components/index_summary.html.twig @@ -0,0 +1,7 @@ +
+

Difficulty

+
+

{{ difficulty|number_format(2) }}

+ Difficulty chart +
+
\ No newline at end of file diff --git a/templates/network/index.html.twig b/templates/network/index.html.twig new file mode 100644 index 0000000..5161c25 --- /dev/null +++ b/templates/network/index.html.twig @@ -0,0 +1,22 @@ +{% extends "base.html.twig" %} + +{% block title %}Network{% endblock %} + +{% block page %}page-network{% endblock %} + +{% block body %} +
+
+
+
+

Network Statistics

+
+
+ {#
#} + {#
#} + {#{% include 'network/components/index_summary.html.twig' %}#} + {#
#} + {#
#} +
+
+{% endblock %} diff --git a/templates/not_found.html.twig b/templates/not_found.html.twig new file mode 100644 index 0000000..d9fbfde --- /dev/null +++ b/templates/not_found.html.twig @@ -0,0 +1,15 @@ +{% extends "base.html.twig" %} + +{% block body %} +
+
+
+ {% block content %} {% endblock %} +
+ +
+ +
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/rich_list/components/top_addresses.html.twig b/templates/rich_list/components/top_addresses.html.twig new file mode 100644 index 0000000..43efb37 --- /dev/null +++ b/templates/rich_list/components/top_addresses.html.twig @@ -0,0 +1,38 @@ +

Top 100 Addresses

+ +
+ + + + + + + + + + + + {% for rank, address in richList %} + + + + + + + + {% endfor %} + +
#AddressStake RewardsLast BlockBalance
{{ rank+1 }} + + {{ address.hash }} + + {{ address.staked|stake_format(false, 2) }}{{ address.blockIndex }} + {{ address.balance|stake_format(false, 2) }}
+ {% set balance = ((address.balance/62903579)*100)|round(2, 'floor') %} + {% if balance == 0 %} + < 0.01% + {% else %} + {{ balance|number_format(2) }}% + {% endif %} +
+
diff --git a/templates/rich_list/components/wealth_distribution.html.twig b/templates/rich_list/components/wealth_distribution.html.twig new file mode 100644 index 0000000..25d5cd6 --- /dev/null +++ b/templates/rich_list/components/wealth_distribution.html.twig @@ -0,0 +1,20 @@ +
+

Wealth Distribution

+
+ +
+ + + + + + + + + + + + + +
TopBalance% holding
+
\ No newline at end of file diff --git a/templates/rich_list/index.html.twig b/templates/rich_list/index.html.twig new file mode 100644 index 0000000..4ee5670 --- /dev/null +++ b/templates/rich_list/index.html.twig @@ -0,0 +1,24 @@ +{% extends "base.html.twig" %} + +{% block title %}Rich List{% endblock %} + +{% block page %}page-richList-index{% endblock %} + +{% block body %} +
+
+
+

Rich List

+
+
+
+
+ {% include 'rich_list/components/top_addresses.html.twig' %} +
+
+ {% include 'rich_list/components/wealth_distribution.html.twig' %} +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/templates/search/components/form.html.twig b/templates/search/components/form.html.twig new file mode 100644 index 0000000..444fbc3 --- /dev/null +++ b/templates/search/components/form.html.twig @@ -0,0 +1,13 @@ +
+
+
+
Search the blockchain
+
+
+ + +
+
+
+
+
\ No newline at end of file diff --git a/templates/search/results.html.twig b/templates/search/results.html.twig new file mode 100644 index 0000000..6640ae7 --- /dev/null +++ b/templates/search/results.html.twig @@ -0,0 +1,23 @@ +{% extends "base.html.twig" %} + +{% block title %}Search {{ hash }}{% endblock %} + +{% block page %}page-search-results{% endblock %} + +{% block body %} +
+
+
+
+
+

Bad news!

+ There are no blocks, transactions or addresses that match `{{ hash }}`.
+ We'll soon be matching against partial addresses, but for now you'll have to search again. +
+ + {% include 'search/components/form.html.twig' %} +
+
+
+
+{% endblock %} diff --git a/templates/search/search.html.twig b/templates/search/search.html.twig new file mode 100644 index 0000000..414c294 --- /dev/null +++ b/templates/search/search.html.twig @@ -0,0 +1,17 @@ +{% extends "base.html.twig" %} + +{% block title %}Search{% endblock %} + +{% block page %}page-search{% endblock %} + +{% block body %} +
+
+
+
+ {% include 'search/components/form.html.twig' %} +
+
+
+
+{% endblock %} diff --git a/templates/soft_fork/index.html.twig b/templates/soft_fork/index.html.twig new file mode 100644 index 0000000..215d381 --- /dev/null +++ b/templates/soft_fork/index.html.twig @@ -0,0 +1,111 @@ +{% extends "base.html.twig" %} + +{% block title %}Soft Forks{% endblock %} + +{% block page %}page-soft-forks-index{% endblock %} + +{% set blocksInCycle = (softForks|first).blocksInCycle %} +{% set firstBlock = (blocksInCycle * block.blockCycle) - blocksInCycle %} +{% set currentBlock = (block.height - firstBlock) %} +{% set remainingBlocks = blocksInCycle - currentBlock %} + +{% block body %} +
+
+
+

Soft Forks

+
+
+ +
+
+
+ Signaling for block {{ currentBlock|number_format }} of {{ (softForks|first).blocksInCycle|number_format }} in the {{ block.blockCycle|ordinal }} block cycle.
+ There are {{ remainingBlocks|number_format }} blocks remaining. +
+ +


Signalling Soft Forks

+ + + + + + + + + + + + + {% for fork in softForks if fork.state not in ['ACTIVE', 'LOCKED_IN'] and fork.blocksSignalling != 0 %} + + + + + + + + + {% endfor %} + +
NameBlocks SignallingBlocks RequiredBlocks RemainingVote %Status
{{ fork.name }}{{ fork.blocksSignalling|number_format }}{{ (fork.blocksInCycle*0.75)|number_format }}{{ fork.blocksRemaining|number_format }}{{ ((fork.blocksSignalling / currentBlock) * 100)|round }}% + {% if (fork.blocksInCycle*0.75) - fork.blocksSignalling > fork.blocksRemaining %} + Missed + {% elseif (fork.blocksSignalling >= (fork.blocksInCycle*0.75)) %} + Complete + {% else %} + {{ fork.state|capitalize }} + {% endif %} +
+ +


Active/LockedIn Soft Forks

+ + + + + + + + + + + + {% for fork in softForks if fork.state in ['ACTIVE', 'LOCKED_IN'] %} + + + + + + + + {% endfor %} + +
NameLocked In HeightActivation HeightVote %Status
{{ fork.name }}{{ fork.lockedInHeight }} + {% if fork.state == 'ACTIVE' %} + {{ fork.activationHeight }} + {% else %} + {{ fork.activationHeight }} + {% endif %} + {{ ((fork.blocksSignalling / (fork.blocksInCycle*0.75)) * 100)|round }}% + {% if fork.state == 'ACTIVE' %} + {{ fork.state|capitalize }} + {% else %} + {{ fork.state|capitalize }} + {% endif %} +


+
+ +
+
+
+

What are soft forks?

+

Soft forks are changes to the protocols that govern the NavCoin blockchain.

+

At the end of each {{ ((softForks|first).blocksInCycle)|number_format }} block cycle the number of blocks that signalled support for a soft fork are counted.

+

If the number of signalling blocks is greater than 75% the soft fork is locked in and will be activated at the end of the next block cycle.

+

If the block cycle fails to reach the required 75% a new attempt to lock in the soft fork is started in the next block cycle.

+
+
+
+
+
+{% endblock %} diff --git a/templates/transaction/components/index_transactions.html.twig b/templates/transaction/components/index_transactions.html.twig new file mode 100644 index 0000000..5c986b6 --- /dev/null +++ b/templates/transaction/components/index_transactions.html.twig @@ -0,0 +1,20 @@ +
+

Latest Transactions

+ + + + + + + + + + + + + + +
+
+
HashHeightDate/TimeAmount
Loading transactions...
+
\ No newline at end of file diff --git a/templates/transaction/components/view_inputs.html.twig b/templates/transaction/components/view_inputs.html.twig new file mode 100644 index 0000000..816d2ce --- /dev/null +++ b/templates/transaction/components/view_inputs.html.twig @@ -0,0 +1,38 @@ +

Inputs

+ + + + + + + + + + + {% for key, input in transaction.inputs %} + + + + + + + {% endfor %} + +
IndexPrevious OutputAddressAmount
{{ key }} + {% if input.previousOutput %} + {{ input.previousOutput|slice(0, 20) }}...:{{ input.index }} + {% if input.previousOutputBlock %} + in {{ input.previousOutputBlock }} + {% endif %} + {% else %} + N/A + {% endif %} + + {% if input.address %} + {{ input.address }} + {% else %} + N/A + {% endif %} + + {{ input.amount|stake_format }} +
\ No newline at end of file diff --git a/templates/transaction/components/view_outputs.html.twig b/templates/transaction/components/view_outputs.html.twig new file mode 100644 index 0000000..10ea122 --- /dev/null +++ b/templates/transaction/components/view_outputs.html.twig @@ -0,0 +1,40 @@ +

Outputs

+ + + + + + + + + + + {% for key, output in transaction.outputs %} + + + + + + + {% endfor %} + +
IndexRedeemed InAddressAmount
{{ output.index }} + {% if output.redeemedInTransaction %} + {{ output.redeemedInTransaction|slice(0, 20) }}... + in {{ output.redeemedInBlock }} + {% else %} + {% if output.address == '' %} + N/A + {% else %} + Unspent + {% endif %} + {% endif %} + + {% if output.address %} + {{ output.address }} + {% else %} + N/A + {% endif %} + + {{ output.amount|stake_format }} +
\ No newline at end of file diff --git a/templates/transaction/components/view_summary.html.twig b/templates/transaction/components/view_summary.html.twig new file mode 100644 index 0000000..cf48002 --- /dev/null +++ b/templates/transaction/components/view_summary.html.twig @@ -0,0 +1,59 @@ +
+
+ + + + + + + + + + + + + + + {% if transaction.staking %} + + + + + {% endif %} + +
Hash + {{ transaction.hash }} +
Total Output + {{ transaction.outputs.value|stake_format }} +
Fees + {{ transaction.fees|stake_format }} +
Stake Reward + {{ transaction.stake|stake_format }} +
+
+ +
+ + + + + + + + + + + + + + + +
Height + + {{ transaction.height }} + +
Confirmations{{ block.confirmations }}
Time + {{ transaction.time|date_localised('M jS Y, g:i:s a') }} +
+
+
diff --git a/templates/transaction/index.html.twig b/templates/transaction/index.html.twig new file mode 100644 index 0000000..7aff23d --- /dev/null +++ b/templates/transaction/index.html.twig @@ -0,0 +1,17 @@ +{% extends "base.html.twig" %} + +{% block title %}Transactions{% endblock %} + +{% block page %}page-transaction-index{% endblock %} + +{% block body %} +
+
+
+
+ {% include 'transaction/components/index_transactions.html.twig' %} +
+
+
+
+{% endblock %} diff --git a/templates/transaction/view.html.twig b/templates/transaction/view.html.twig new file mode 100644 index 0000000..fab5869 --- /dev/null +++ b/templates/transaction/view.html.twig @@ -0,0 +1,23 @@ +{% extends "base.html.twig" %} + +{% block title %}Transaction {{ transaction.hash }} - {{ transaction.height }}{% endblock %} + +{% block page %}page-transaction-view{% endblock %} + +{% block body %} +
+
+
+
+
+

Transaction

+
+
+
+ + {% include "transaction/components/view_summary.html.twig" %} + {% include "transaction/components/view_inputs.html.twig" %} + {% include "transaction/components/view_outputs.html.twig" %} +
+
+{% endblock %} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..df52f20 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,24 @@ +var Encore = require('@symfony/webpack-encore'); + +Encore + // the project directory where compiled assets will be stored + .setOutputPath('public/build/') + // the public path used by the web server to access the previous directory + .setPublicPath('/build') + .cleanupOutputBeforeBuild() + .enableSourceMaps(!Encore.isProduction()) + // uncomment to create hashed filenames (e.g. app.abc123.css) + // .enableVersioning(Encore.isProduction()) + + // uncomment to define the assets of the project + .addEntry('js/app', './assets/js/app.js') + .addStyleEntry('css/app', './assets/css/app.scss') + + // uncomment if you use Sass/SCSS files + .enableSassLoader() + + // uncomment for legacy applications that require $/jQuery as a global variable + .autoProvidejQuery() +; + +module.exports = Encore.getWebpackConfig(); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..0c689d7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5740 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@symfony/webpack-encore@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.19.0.tgz#f0725dbbede5ff9d9fdbd7a07f84accafc83ca14" + dependencies: + babel-core "^6.24.0" + babel-loader "^7.1.0" + babel-preset-env "^1.2.2" + chalk "^1.1.3" + clean-webpack-plugin "^0.1.16" + css-loader "^0.26.2" + extract-text-webpack-plugin "^3.0.0" + fast-levenshtein "^2.0.6" + file-loader "^0.10.1" + friendly-errors-webpack-plugin "^1.6.1" + fs-extra "^2.0.0" + loader-utils "^1.1.0" + lodash ">=3.5 <5" + pkg-up "^1.0.0" + pretty-error "^2.1.1" + resolve-url-loader "^2.0.2" + style-loader "^0.13.2" + webpack ">=2.2.0 <4" + webpack-chunk-hash "^0.5.0" + webpack-dev-server "^2.4.5" + yargs "^8.0.1" + +"@types/node@*": + version "9.4.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275" + +"@types/tapable@^0": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz#2443fc12da514c81346b1a665675559cee21fa75" + +"@types/uglify-js@*": + version "2.6.30" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-2.6.30.tgz#257d2b6dd86673d60da476680fba90f2e30c6eef" + dependencies: + source-map "^0.6.1" + +"@types/webpack@^3.0.5": + version "3.8.10" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.10.tgz#2086c1d3969afea84ffc4159e646d3919248ee7b" + dependencies: + "@types/node" "*" + "@types/tapable" "^0" + "@types/uglify-js" "*" + source-map "^0.6.0" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@~1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.0.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + +adjust-sourcemap-loader@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz#e33fde95e50db9f2a802e3647e311d2fc5000c69" + dependencies: + assert "^1.3.0" + camelcase "^1.2.1" + loader-utils "^1.1.0" + lodash.assign "^4.0.1" + lodash.defaults "^3.1.2" + object-path "^0.9.2" + regex-parser "^2.2.9" + +ajv-keywords@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.0.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671" + dependencies: + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1, assert@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.2, async@^2.4.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + +atob@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" + +babel-code-frame@^6.11.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.24.0, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + 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.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + 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-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + 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@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + 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@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^7.1.0: + version "7.1.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + 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-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + 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@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + 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@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + 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@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + 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@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + 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@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + 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@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + 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-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.2.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^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.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + 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@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + 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@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + 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@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + 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" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + kind-of "^6.0.2" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^2.1.2: + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" + dependencies: + caniuse-lite "^1.0.30000792" + electron-to-chromium "^1.3.30" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + 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" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2, camelcase@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000813" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000813.tgz#e0a1c603f8880ad787b2a35652b2733f32a5e29a" + +caniuse-lite@^1.0.30000792: + version "1.0.30000813" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz#7b25e27fdfb8d133f3c932b01f77452140fcc6c9" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + 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" + +chalk@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.0.0, chokidar@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-webpack-plugin@^0.1.16: + version "0.1.19" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d" + dependencies: + rimraf "^2.6.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-deep@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" + dependencies: + for-own "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.0" + shallow-clone "^1.0.0" + +clone@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2, commander@^2.9.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.0.tgz#ad2a23a1c3b036e392469b8012cec6b33b4c1322" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +compressible@~2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" + dependencies: + mime-db ">= 1.33.0 < 2" + +compression@^1.5.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + dependencies: + accepts "~1.3.4" + bytes "3.0.0" + compressible "~2.0.13" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + +convert-source-map@^1.5.0, convert-source-map@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.26.2: + version "0.26.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz#b61e9e30db94303e6ffc892f10ecd09ad025a1fd" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.7.0" + cssnano ">=2.6.1 <4" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.7" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +css@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.3.0" + urix "^0.1.0" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" + +d3-axis@1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa" + +d3-brush@1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4" + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3-chord@1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c" + dependencies: + d3-array "1" + d3-path "1" + +d3-collection@1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" + +d3-color@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.1.0.tgz#73957299b63ca935bf19c6c9d835e90066028329" + +d3-contour@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.2.0.tgz#de3ea7991bbb652155ee2a803aeafd084be03b63" + dependencies: + d3-array "^1.1.1" + +d3-dispatch@1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" + +d3-drag@1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" + dependencies: + d3-dispatch "1" + d3-selection "1" + +d3-dsv@1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.8.tgz#907e240d57b386618dc56468bacfe76bf19764ae" + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-ease@1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" + +d3-fetch@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.1.0.tgz#31cbcd506b21d6519ac6a120a079de8d0a57c00f" + dependencies: + d3-dsv "1" + +d3-force@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" + dependencies: + d3-collection "1" + d3-dispatch "1" + d3-quadtree "1" + d3-timer "1" + +d3-format@1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" + +d3-geo@1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.10.0.tgz#2972d18014f1e38fc1f8bb6d545377bdfb00c9ab" + dependencies: + d3-array "1" + +d3-hierarchy@1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.6.tgz#842c1372090f870b7ea013ebae5c0c8d9f56229c" + +d3-interpolate@1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" + +d3-polygon@1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62" + +d3-quadtree@1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438" + +d3-random@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3" + +d3-scale-chromatic@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.2.0.tgz#25820d059c0eccc33e85f77561f37382a817ab58" + dependencies: + d3-color "1" + d3-interpolate "1" + +d3-scale@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.0.0.tgz#fd8ac78381bc2ed741d8c71770437a5e0549a5a5" + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-selection@1, d3-selection@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d" + +d3-shape@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" + dependencies: + d3-path "1" + +d3-time-format@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" + dependencies: + d3-time "1" + +d3-time@1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" + +d3-timer@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" + +d3-transition@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039" + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + +d3-voronoi@1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + +d3-zoom@1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.1.0.tgz#2506c4f070fe8a5a1e9a16308caacf96ae51f522" + dependencies: + d3-array "1" + d3-axis "1" + d3-brush "1" + d3-chord "1" + d3-collection "1" + d3-color "1" + d3-contour "1" + d3-dispatch "1" + d3-drag "1" + d3-dsv "1" + d3-ease "1" + d3-fetch "1" + d3-force "1" + d3-format "1" + d3-geo "1" + d3-hierarchy "1" + d3-interpolate "1" + d3-path "1" + d3-polygon "1" + d3-quadtree "1" + d3-random "1" + d3-scale "2" + d3-scale-chromatic "1" + d3-selection "1" + d3-shape "1" + d3-time "1" + d3-time-format "2" + d3-timer "1" + d3-transition "1" + d3-voronoi "1" + d3-zoom "1" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: + version "1.3.37" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.37.tgz#4a92734e0044c8cf0b1553be57eae21a4c6e5fab" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.3: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.1.tgz#a3202b8fb03114aa9b40a0e3669e48b2b65a010a" + dependencies: + stackframe "^1.0.3" + +es-abstract@^1.7.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.40" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.40.tgz#ab3d2179b943008c5e9ef241beb25ef41424c774" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + 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@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + 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" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express@^4.16.2: + version "4.16.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + dependencies: + accepts "~1.3.4" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.0" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.2" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.1" + serve-static "1.13.1" + setprototypeof "1.1.0" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + 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" + +extract-text-webpack-plugin@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" + dependencies: + async "^2.4.1" + loader-utils "^1.1.0" + schema-utils "^0.3.0" + webpack-sources "^1.0.1" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +file-loader@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" + dependencies: + loader-utils "^1.0.2" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +follow-redirects@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" + dependencies: + debug "^3.1.0" + +for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +friendly-errors-webpack-plugin@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz#e32781c4722f546a06a9b5d7a7cfa28520375d70" + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-length "^1.0.1" + +fs-extra@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + 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" + +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + 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" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + dependencies: + glob "~7.1.1" + lodash "~4.17.4" + minimatch "~3.0.2" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-parser-js@>=0.4.0: + version "0.4.11" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +iconv-lite@0.4, iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +internal-ip@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + +interpret@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + +invariant@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + +is-my-json-valid@^2.12.4: + version "2.17.2" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + dependencies: + 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@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jquery@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" + +js-base64@^2.1.8, js-base64@^2.1.9: + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.assign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.assign@^4.0.1, lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.defaults@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" + dependencies: + lodash.assign "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.defaults@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.tail@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@~4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +loglevel@^1.4.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +make-dir@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + dependencies: + pify "^3.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + 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" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + 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" + +micromatch@^3.1.4: + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + dependencies: + 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.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +mime@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +moment@^2.22.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.0.tgz#7921ade01017dd45186e7fee5f424f0b8663a730" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.3.0, nan@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + 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-odd "^2.0.0" + 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" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +neo-async@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + +node-forge@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" + +node-gyp@^3.3.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-sass@^4.8.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.8.1.tgz#8ad4de07456cc4ba2fa0c808729bec09fa1b5065" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.9.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "~2.79.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object-path@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +opn@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + dependencies: + is-wsl "^1.1.0" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.0" + +portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.19" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" + dependencies: + chalk "^2.3.1" + source-map "^0.6.1" + supports-color "^5.2.0" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +private@^0.1.6, private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +proxy-addr@~2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +rc@^1.1.7: + version "1.2.5" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.9, readable-stream@^2.3.3: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + 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.0.3" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.9.tgz#a372f45a248b62976a568037c1b6e60a60599192" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@2, request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-url-loader@^2.0.2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz#e1b37034d48f22f8cfb9f04c026faaa070fdaf26" + dependencies: + adjust-sourcemap-loader "^1.1.0" + camelcase "^4.1.0" + convert-source-map "^1.5.1" + loader-utils "^1.1.0" + lodash.defaults "^4.0.0" + rework "^1.0.1" + rework-visit "^1.0.0" + source-map "^0.5.7" + urix "^0.1.0" + +resolve-url@^0.2.1, resolve-url@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rework-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + +rework@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + +rw@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sass-loader@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" + dependencies: + clone-deep "^2.0.1" + loader-utils "^1.0.1" + lodash.tail "^4.1.1" + neo-async "^2.5.0" + pify "^3.0.0" + +sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.9.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + dependencies: + node-forge "0.7.1" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" + dependencies: + debug "2.6.9" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + 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" + +serve-static@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.10" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" + dependencies: + is-extendable "^0.1.1" + kind-of "^5.0.0" + mixin-object "^2.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + 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" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map-resolve@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" + dependencies: + atob "~1.1.0" + resolve-url "~0.2.1" + source-map-url "~0.3.0" + urix "~0.1.0" + +source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map-url@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" + +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +spdy-transport@^2.0.18: + version "2.0.20" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stackframe@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stdout-stream@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.3" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" + dependencies: + loader-utils "^1.0.2" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" + dependencies: + has-flag "^3.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.0.0, tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +thunky@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" + +time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + +timers-browserify@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@~2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +"true-case-path@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" + dependencies: + glob "^6.0.4" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-is@~1.6.15: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + +urix@^0.1.0, urix@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" + dependencies: + querystringify "~1.0.0" + requires-port "~1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" + dependencies: + kind-of "^6.0.2" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.0.0, uuid@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +watchpack@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + dependencies: + minimalistic-assert "^1.0.0" + +webpack-chunk-hash@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-chunk-hash/-/webpack-chunk-hash-0.5.0.tgz#1dba38203d73c1e6ab069b6810a5a37402399dec" + dependencies: + "@types/webpack" "^3.0.5" + +webpack-dev-middleware@1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + dependencies: + 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@^2.4.5: + version "2.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" + dependencies: + ansi-html "0.0.7" + array-includes "^3.0.3" + bonjour "^3.5.0" + chokidar "^2.0.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + import-local "^1.0.0" + internal-ip "1.2.0" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.19" + sockjs-client "1.1.4" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "1.12.2" + yargs "6.6.0" + +webpack-sources@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +"webpack@>=2.2.0 <4": + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@1, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@^8.0.1, yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"