From ff55141a1e6d02ecd2dd381683aefcec2294f039 Mon Sep 17 00:00:00 2001
From: xuanchen <122383162@qq.com>
Date: Wed, 11 Jan 2023 11:00:43 +0800
Subject: [PATCH] fisrt
---
.editorconfig | 15 +
.env.example | 37 +
.gitattributes | 5 +
.gitignore | 15 +
.styleci.yml | 13 +
README.md | 122 +
app/Admin/Actions/LinkCreateAddress.php | 20 +
app/Admin/Actions/LinkStockOrderDeliver.php | 20 +
app/Admin/Actions/LinkVipOrderRefund.php | 20 +
app/Admin/Controllers/AuthController.php | 10 +
app/Admin/Controllers/HomeController.php | 259 +
app/Admin/Controllers/LeadyController.php | 17 +
.../Controllers/Material/IndexController.php | 54 +
app/Admin/Controllers/ModuleController.php | 100 +
.../Platform/DashboardController.php | 291 +
.../Platform/ExperienceController.php | 140 +
.../Controllers/Platform/VipController.php | 257 +
.../Platform/VipOrderController.php | 85 +
app/Admin/Controllers/TestController.php | 123 +
app/Admin/Extensions/CleanCache.php | 29 +
app/Admin/Routes/material.php | 10 +
app/Admin/Routes/modules.php | 12 +
app/Admin/Routes/platform.php | 15 +
app/Admin/Routes/test.php | 12 +
app/Admin/Traits/WithUploads.php | 103 +
app/Admin/bootstrap.php | 62 +
app/Admin/routes.php | 24 +
app/Api/Controllers/Controller.php | 12 +
app/Api/Controllers/Data/IndexController.php | 159 +
app/Api/Controllers/IndexController.php | 12 +
.../Controllers/Wechat/IndexController.php | 63 +
app/Api/Resources/BaseCollection.php | 21 +
.../Resources/Order/OrderDataCollection.php | 32 +
app/Api/Resources/User/UserBaseResource.php | 20 +
app/Api/Resources/User/UserDataCollection.php | 20 +
app/Api/Resources/User/UserDataResource.php | 22 +
app/Api/Routes/data.php | 14 +
app/Api/Routes/wechat.php | 12 +
.../WechatHandlers/EventMessageHandler.php | 142 +
app/Api/WechatHandlers/FileMessageHandler.php | 27 +
.../WechatHandlers/ImageMessageHandler.php | 24 +
app/Api/WechatHandlers/LinkMessageHandler.php | 25 +
.../WechatHandlers/LocationMessageHandler.php | 25 +
.../ShortVideoMessageHandler.php | 24 +
app/Api/WechatHandlers/TextMessageHandler.php | 16 +
.../WechatHandlers/TransferMessageHandler.php | 15 +
.../WechatHandlers/VideoMessageHandler.php | 24 +
.../WechatHandlers/VoiceMessageHandler.php | 25 +
app/Api/bootstrap.php | 1 +
app/Api/routes.php | 25 +
app/Bonus/IdentityBonus.php | 305 +
app/Channels/WechatMiniChannel.php | 15 +
app/Console/Commands/MonthPerfCommand.php | 36 +
app/Console/Commands/StartBounsCommand.php | 57 +
app/Console/Kernel.php | 66 +
app/Exceptions/Handler.php | 43 +
app/Http/Controllers/Controller.php | 29 +
app/Http/Controllers/ImageController.php | 18 +
app/Http/Kernel.php | 66 +
app/Http/Middleware/Authenticate.php | 21 +
app/Http/Middleware/EncryptCookies.php | 17 +
.../PreventRequestsDuringMaintenance.php | 17 +
.../Middleware/RedirectIfAuthenticated.php | 32 +
app/Http/Middleware/TrimStrings.php | 19 +
app/Http/Middleware/TrustHosts.php | 20 +
app/Http/Middleware/TrustProxies.php | 23 +
app/Http/Middleware/VerifyCsrfToken.php | 17 +
app/Jobs/Bonus/BuyIdentityJob.php | 43 +
app/Jobs/Bonus/MonthPerfJob.php | 57 +
app/Jobs/Bonus/SendBounsJob.php | 55 +
app/Listeners/PaymentPaidListener.php | 15 +
app/Listeners/UserOrderPaidListener.php | 41 +
app/Models/Bouns.php | 128 +
app/Models/BounsOrder.php | 12 +
app/Models/BounsUserPerf.php | 26 +
app/Models/Job.php | 8 +
app/Models/Material.php | 11 +
app/Models/Model.php | 27 +
app/Models/Module.php | 51 +
app/Notifications/SystemOpenVip.php | 100 +
app/Notifications/SystemOrderDelivered.php | 90 +
app/Notifications/SystemRemindUserSign.php | 81 +
app/Notifications/SystemUpdateCase.php | 81 +
app/Providers/AppServiceProvider.php | 28 +
app/Providers/AuthServiceProvider.php | 30 +
app/Providers/BroadcastServiceProvider.php | 21 +
app/Providers/EventServiceProvider.php | 32 +
app/Providers/RouteServiceProvider.php | 63 +
app/Traits/HasClicks.php | 84 +
app/Traits/HasCovers.php | 83 +
app/Traits/HasStatus.php | 87 +
app/Traits/Macroable.php | 50 +
app/Traits/OrderByIdDesc.php | 22 +
app/Traits/OrderByOrderAsc.php | 22 +
app/Traits/WithPosition.php | 65 +
artisan | 53 +
bootstrap/app.php | 55 +
bootstrap/cache/.gitignore | 2 +
composer.json | 96 +
composer.lock | 13154 +++++++
config/admin.php | 439 +
config/agent.php | 40 +
config/api.php | 48 +
config/app.php | 236 +
config/auth.php | 117 +
config/broadcasting.php | 64 +
config/cache.php | 106 +
config/cors.php | 34 +
config/database.php | 147 +
config/favorite.php | 23 +
config/filesystems.php | 72 +
config/hashing.php | 52 +
config/image.php | 20 +
config/jwt.php | 304 +
config/laravel-model-caching.php | 11 +
config/logging.php | 119 +
config/mail.php | 110 +
config/modules.php | 272 +
config/queue.php | 93 +
config/services.php | 33 +
config/session.php | 201 +
config/subscribe.php | 23 +
config/tencent_map.php | 6 +
config/ueditor.php | 118 +
config/versionable.php | 30 +
config/view.php | 36 +
config/wechat.php | 146 +
config/withdraw.php | 13 +
database/.gitignore | 2 +
database/factories/UserFactory.php | 47 +
.../2016_01_04_173148_create_admin_tables.php | 119 +
...18_12_14_000000_create_favorites_table.php | 29 +
..._08_19_000000_create_failed_jobs_table.php | 36 +
...4_09_000000_create_subscriptions_table.php | 29 +
...21_08_06_104216_create_materials_table.php | 32 +
.../2022_08_30_150338_create_bouns_table.php | 36 +
...08_30_150355_create_bouns_orders_table.php | 36 +
..._153401_create_bouns_user_perves_table.php | 40 +
database/seeders/AdminPanelSeeder.php | 106 +
database/seeders/DatabaseSeeder.php | 18 +
docs/READMD.md | 2 +
docs/Trait doc.md | 117 +
modules.json | 13 +
modules/.gitignore | 15 +
modules/Cms/.gitignore | 4 +
modules/Cms/README.md | 49 +
modules/Configuration/.gitignore | 4 +
modules/Configuration/README.md | 6 +
modules/Coupon/.gitignore | 4 +
modules/Coupon/README.md | 10 +
modules/Linker/.gitignore | 4 +
modules/Linker/README.md | 22 +
modules/Mall/.gitignore | 4 +
modules/Mall/README.md | 37 +
modules/Notification/README.md | 154 +
modules/Payment/.gitignore | 4 +
modules/Payment/README.md | 46 +
modules/README.md | 27 +
modules/Storage/.gitignore | 4 +
modules/Storage/README.md | 70 +
modules/User/.gitignore | 4 +
modules/User/README.md | 12 +
package.json | 18 +
public/.htaccess | 21 +
public/favicon.ico | 0
public/index.php | 55 +
public/robots.txt | 2 +
public/vendor/js/setStock.js | 21 +
.../AdminLTE/bootstrap/css/bootstrap.min.css | 5 +
.../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes
.../fonts/glyphicons-halflings-regular.svg | 288 +
.../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes
.../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes
.../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes
.../AdminLTE/bootstrap/js/bootstrap.min.js | 7 +
.../AdminLTE/dist/css/AdminLTE.min.css | 7 +
.../dist/css/skins/_all-skins.min.css | 1 +
.../dist/css/skins/skin-black-light.min.css | 1 +
.../dist/css/skins/skin-black.min.css | 1 +
.../dist/css/skins/skin-blue-light.min.css | 1 +
.../AdminLTE/dist/css/skins/skin-blue.min.css | 1 +
.../dist/css/skins/skin-green-light.min.css | 1 +
.../dist/css/skins/skin-green.min.css | 1 +
.../dist/css/skins/skin-purple-light.min.css | 1 +
.../dist/css/skins/skin-purple.min.css | 1 +
.../dist/css/skins/skin-red-light.min.css | 1 +
.../AdminLTE/dist/css/skins/skin-red.min.css | 1 +
.../dist/css/skins/skin-yellow-light.min.css | 1 +
.../dist/css/skins/skin-yellow.min.css | 1 +
.../AdminLTE/dist/img/boxed-bg.jpg | Bin 0 -> 123770 bytes
.../AdminLTE/dist/img/boxed-bg.png | Bin 0 -> 43694 bytes
.../AdminLTE/dist/img/default-50x50.gif | Bin 0 -> 184 bytes
.../laravel-admin/AdminLTE/dist/img/icons.png | Bin 0 -> 1154 bytes
.../AdminLTE/dist/img/user2-160x160.jpg | Bin 0 -> 7070 bytes
.../laravel-admin/AdminLTE/dist/js/app.min.js | 13 +
.../bootstrap-slider/bootstrap-slider.js | 1167 +
.../plugins/bootstrap-slider/slider.css | 169 +
.../colorpicker/bootstrap-colorpicker.min.css | 9 +
.../colorpicker/bootstrap-colorpicker.min.js | 1 +
.../colorpicker/img/alpha-horizontal.png | Bin 0 -> 3635 bytes
.../plugins/colorpicker/img/alpha.png | Bin 0 -> 3271 bytes
.../colorpicker/img/hue-horizontal.png | Bin 0 -> 2837 bytes
.../AdminLTE/plugins/colorpicker/img/hue.png | Bin 0 -> 2972 bytes
.../plugins/colorpicker/img/saturation.png | Bin 0 -> 8817 bytes
.../AdminLTE/plugins/iCheck/all.css | 61 +
.../AdminLTE/plugins/iCheck/flat/_all.css | 560 +
.../AdminLTE/plugins/iCheck/flat/aero.css | 56 +
.../AdminLTE/plugins/iCheck/flat/aero.png | Bin 0 -> 1520 bytes
.../AdminLTE/plugins/iCheck/flat/aero@2x.png | Bin 0 -> 3218 bytes
.../AdminLTE/plugins/iCheck/flat/blue.css | 56 +
.../AdminLTE/plugins/iCheck/flat/blue.png | Bin 0 -> 1518 bytes
.../AdminLTE/plugins/iCheck/flat/blue@2x.png | Bin 0 -> 3217 bytes
.../AdminLTE/plugins/iCheck/flat/flat.css | 56 +
.../AdminLTE/plugins/iCheck/flat/flat.png | Bin 0 -> 1515 bytes
.../AdminLTE/plugins/iCheck/flat/flat@2x.png | Bin 0 -> 3217 bytes
.../AdminLTE/plugins/iCheck/flat/green.css | 56 +
.../AdminLTE/plugins/iCheck/flat/green.png | Bin 0 -> 1444 bytes
.../AdminLTE/plugins/iCheck/flat/green@2x.png | Bin 0 -> 3117 bytes
.../AdminLTE/plugins/iCheck/flat/grey.css | 56 +
.../AdminLTE/plugins/iCheck/flat/grey.png | Bin 0 -> 1516 bytes
.../AdminLTE/plugins/iCheck/flat/grey@2x.png | Bin 0 -> 3217 bytes
.../AdminLTE/plugins/iCheck/flat/orange.css | 56 +
.../AdminLTE/plugins/iCheck/flat/orange.png | Bin 0 -> 1518 bytes
.../plugins/iCheck/flat/orange@2x.png | Bin 0 -> 3275 bytes
.../AdminLTE/plugins/iCheck/flat/pink.css | 56 +
.../AdminLTE/plugins/iCheck/flat/pink.png | Bin 0 -> 1522 bytes
.../AdminLTE/plugins/iCheck/flat/pink@2x.png | Bin 0 -> 3218 bytes
.../AdminLTE/plugins/iCheck/flat/purple.css | 56 +
.../AdminLTE/plugins/iCheck/flat/purple.png | Bin 0 -> 1519 bytes
.../plugins/iCheck/flat/purple@2x.png | Bin 0 -> 3218 bytes
.../AdminLTE/plugins/iCheck/flat/red.css | 56 +
.../AdminLTE/plugins/iCheck/flat/red.png | Bin 0 -> 1516 bytes
.../AdminLTE/plugins/iCheck/flat/red@2x.png | Bin 0 -> 3276 bytes
.../AdminLTE/plugins/iCheck/flat/yellow.css | 56 +
.../AdminLTE/plugins/iCheck/flat/yellow.png | Bin 0 -> 1516 bytes
.../plugins/iCheck/flat/yellow@2x.png | Bin 0 -> 3216 bytes
.../plugins/iCheck/futurico/futurico.css | 56 +
.../plugins/iCheck/futurico/futurico.png | Bin 0 -> 1734 bytes
.../plugins/iCheck/futurico/futurico@2x.png | Bin 0 -> 3446 bytes
.../AdminLTE/plugins/iCheck/icheck.min.js | 10 +
.../AdminLTE/plugins/iCheck/line/_all.css | 740 +
.../AdminLTE/plugins/iCheck/line/aero.css | 74 +
.../AdminLTE/plugins/iCheck/line/blue.css | 74 +
.../AdminLTE/plugins/iCheck/line/green.css | 74 +
.../AdminLTE/plugins/iCheck/line/grey.css | 74 +
.../AdminLTE/plugins/iCheck/line/line.css | 74 +
.../AdminLTE/plugins/iCheck/line/line.png | Bin 0 -> 588 bytes
.../AdminLTE/plugins/iCheck/line/line@2x.png | Bin 0 -> 1073 bytes
.../AdminLTE/plugins/iCheck/line/orange.css | 74 +
.../AdminLTE/plugins/iCheck/line/pink.css | 74 +
.../AdminLTE/plugins/iCheck/line/purple.css | 74 +
.../AdminLTE/plugins/iCheck/line/red.css | 74 +
.../AdminLTE/plugins/iCheck/line/yellow.css | 74 +
.../AdminLTE/plugins/iCheck/minimal/_all.css | 557 +
.../AdminLTE/plugins/iCheck/minimal/aero.css | 62 +
.../AdminLTE/plugins/iCheck/minimal/aero.png | Bin 0 -> 1151 bytes
.../plugins/iCheck/minimal/aero@2x.png | Bin 0 -> 1409 bytes
.../AdminLTE/plugins/iCheck/minimal/blue.css | 62 +
.../AdminLTE/plugins/iCheck/minimal/blue.png | Bin 0 -> 1132 bytes
.../plugins/iCheck/minimal/blue@2x.png | Bin 0 -> 1410 bytes
.../AdminLTE/plugins/iCheck/minimal/green.css | 62 +
.../AdminLTE/plugins/iCheck/minimal/green.png | Bin 0 -> 1143 bytes
.../plugins/iCheck/minimal/green@2x.png | Bin 0 -> 1408 bytes
.../AdminLTE/plugins/iCheck/minimal/grey.css | 62 +
.../AdminLTE/plugins/iCheck/minimal/grey.png | Bin 0 -> 1142 bytes
.../plugins/iCheck/minimal/grey@2x.png | Bin 0 -> 1407 bytes
.../plugins/iCheck/minimal/minimal.css | 62 +
.../plugins/iCheck/minimal/minimal.png | Bin 0 -> 1114 bytes
.../plugins/iCheck/minimal/minimal@2x.png | Bin 0 -> 1410 bytes
.../plugins/iCheck/minimal/orange.css | 62 +
.../plugins/iCheck/minimal/orange.png | Bin 0 -> 1139 bytes
.../plugins/iCheck/minimal/orange@2x.png | Bin 0 -> 1407 bytes
.../AdminLTE/plugins/iCheck/minimal/pink.css | 62 +
.../AdminLTE/plugins/iCheck/minimal/pink.png | Bin 0 -> 1150 bytes
.../plugins/iCheck/minimal/pink@2x.png | Bin 0 -> 1409 bytes
.../plugins/iCheck/minimal/purple.css | 62 +
.../plugins/iCheck/minimal/purple.png | Bin 0 -> 1132 bytes
.../plugins/iCheck/minimal/purple@2x.png | Bin 0 -> 1409 bytes
.../AdminLTE/plugins/iCheck/minimal/red.css | 62 +
.../AdminLTE/plugins/iCheck/minimal/red.png | Bin 0 -> 1130 bytes
.../plugins/iCheck/minimal/red@2x.png | Bin 0 -> 1410 bytes
.../plugins/iCheck/minimal/yellow.css | 62 +
.../plugins/iCheck/minimal/yellow.png | Bin 0 -> 1135 bytes
.../plugins/iCheck/minimal/yellow@2x.png | Bin 0 -> 1406 bytes
.../plugins/iCheck/polaris/polaris.css | 62 +
.../plugins/iCheck/polaris/polaris.png | Bin 0 -> 6401 bytes
.../plugins/iCheck/polaris/polaris@2x.png | Bin 0 -> 16760 bytes
.../AdminLTE/plugins/iCheck/square/_all.css | 620 +
.../AdminLTE/plugins/iCheck/square/aero.css | 62 +
.../AdminLTE/plugins/iCheck/square/aero.png | Bin 0 -> 2167 bytes
.../plugins/iCheck/square/aero@2x.png | Bin 0 -> 4455 bytes
.../AdminLTE/plugins/iCheck/square/blue.css | 62 +
.../AdminLTE/plugins/iCheck/square/blue.png | Bin 0 -> 2185 bytes
.../plugins/iCheck/square/blue@2x.png | Bin 0 -> 4485 bytes
.../AdminLTE/plugins/iCheck/square/green.css | 62 +
.../AdminLTE/plugins/iCheck/square/green.png | Bin 0 -> 2193 bytes
.../plugins/iCheck/square/green@2x.png | Bin 0 -> 4498 bytes
.../AdminLTE/plugins/iCheck/square/grey.css | 62 +
.../AdminLTE/plugins/iCheck/square/grey.png | Bin 0 -> 2186 bytes
.../plugins/iCheck/square/grey@2x.png | Bin 0 -> 4483 bytes
.../AdminLTE/plugins/iCheck/square/orange.css | 62 +
.../AdminLTE/plugins/iCheck/square/orange.png | Bin 0 -> 2181 bytes
.../plugins/iCheck/square/orange@2x.png | Bin 0 -> 4474 bytes
.../AdminLTE/plugins/iCheck/square/pink.css | 62 +
.../AdminLTE/plugins/iCheck/square/pink.png | Bin 0 -> 2189 bytes
.../plugins/iCheck/square/pink@2x.png | Bin 0 -> 4479 bytes
.../AdminLTE/plugins/iCheck/square/purple.css | 62 +
.../AdminLTE/plugins/iCheck/square/purple.png | Bin 0 -> 2188 bytes
.../plugins/iCheck/square/purple@2x.png | Bin 0 -> 4501 bytes
.../AdminLTE/plugins/iCheck/square/red.css | 62 +
.../AdminLTE/plugins/iCheck/square/red.png | Bin 0 -> 2190 bytes
.../AdminLTE/plugins/iCheck/square/red@2x.png | Bin 0 -> 4490 bytes
.../AdminLTE/plugins/iCheck/square/square.css | 62 +
.../AdminLTE/plugins/iCheck/square/square.png | Bin 0 -> 2175 bytes
.../plugins/iCheck/square/square@2x.png | Bin 0 -> 4478 bytes
.../AdminLTE/plugins/iCheck/square/yellow.css | 62 +
.../AdminLTE/plugins/iCheck/square/yellow.png | Bin 0 -> 2131 bytes
.../plugins/iCheck/square/yellow@2x.png | Bin 0 -> 4385 bytes
.../input-mask/jquery.inputmask.bundle.min.js | 10 +
.../input-mask/phone-codes/phone-be.json | 45 +
.../input-mask/phone-codes/phone-codes.json | 294 +
.../plugins/input-mask/phone-codes/readme.txt | 1 +
.../ionslider/img/sprite-skin-flat.png | Bin 0 -> 352 bytes
.../ionslider/img/sprite-skin-nice.png | Bin 0 -> 1022 bytes
.../plugins/ionslider/ion.rangeSlider.css | 126 +
.../plugins/ionslider/ion.rangeSlider.min.js | 22 +
.../ionslider/ion.rangeSlider.skinFlat.css | 89 +
.../ionslider/ion.rangeSlider.skinNice.css | 85 +
.../plugins/jQuery/jQuery-2.1.4.min.js | 4 +
.../AdminLTE/plugins/select2/i18n/ar.js | 3 +
.../AdminLTE/plugins/select2/i18n/az.js | 3 +
.../AdminLTE/plugins/select2/i18n/bg.js | 3 +
.../AdminLTE/plugins/select2/i18n/ca.js | 3 +
.../AdminLTE/plugins/select2/i18n/cs.js | 3 +
.../AdminLTE/plugins/select2/i18n/da.js | 3 +
.../AdminLTE/plugins/select2/i18n/de.js | 3 +
.../AdminLTE/plugins/select2/i18n/el.js | 3 +
.../AdminLTE/plugins/select2/i18n/en.js | 3 +
.../AdminLTE/plugins/select2/i18n/es.js | 3 +
.../AdminLTE/plugins/select2/i18n/et.js | 3 +
.../AdminLTE/plugins/select2/i18n/eu.js | 3 +
.../AdminLTE/plugins/select2/i18n/fa.js | 3 +
.../AdminLTE/plugins/select2/i18n/fi.js | 3 +
.../AdminLTE/plugins/select2/i18n/fr.js | 3 +
.../AdminLTE/plugins/select2/i18n/gl.js | 3 +
.../AdminLTE/plugins/select2/i18n/he.js | 3 +
.../AdminLTE/plugins/select2/i18n/hi.js | 3 +
.../AdminLTE/plugins/select2/i18n/hr.js | 3 +
.../AdminLTE/plugins/select2/i18n/hu.js | 3 +
.../AdminLTE/plugins/select2/i18n/id.js | 3 +
.../AdminLTE/plugins/select2/i18n/is.js | 3 +
.../AdminLTE/plugins/select2/i18n/it.js | 3 +
.../AdminLTE/plugins/select2/i18n/ja.js | 3 +
.../AdminLTE/plugins/select2/i18n/km.js | 3 +
.../AdminLTE/plugins/select2/i18n/ko.js | 3 +
.../AdminLTE/plugins/select2/i18n/lt.js | 3 +
.../AdminLTE/plugins/select2/i18n/lv.js | 3 +
.../AdminLTE/plugins/select2/i18n/mk.js | 3 +
.../AdminLTE/plugins/select2/i18n/ms.js | 3 +
.../AdminLTE/plugins/select2/i18n/nb.js | 3 +
.../AdminLTE/plugins/select2/i18n/nl.js | 3 +
.../AdminLTE/plugins/select2/i18n/pl.js | 3 +
.../AdminLTE/plugins/select2/i18n/pt-BR.js | 3 +
.../AdminLTE/plugins/select2/i18n/pt.js | 3 +
.../AdminLTE/plugins/select2/i18n/ro.js | 3 +
.../AdminLTE/plugins/select2/i18n/ru.js | 3 +
.../AdminLTE/plugins/select2/i18n/sk.js | 3 +
.../AdminLTE/plugins/select2/i18n/sr-Cyrl.js | 3 +
.../AdminLTE/plugins/select2/i18n/sr.js | 3 +
.../AdminLTE/plugins/select2/i18n/sv.js | 3 +
.../AdminLTE/plugins/select2/i18n/th.js | 3 +
.../AdminLTE/plugins/select2/i18n/tr.js | 3 +
.../AdminLTE/plugins/select2/i18n/uk.js | 3 +
.../AdminLTE/plugins/select2/i18n/vi.js | 3 +
.../AdminLTE/plugins/select2/i18n/zh-CN.js | 3 +
.../AdminLTE/plugins/select2/i18n/zh-TW.js | 3 +
.../plugins/select2/select2.full.min.js | 3 +
.../AdminLTE/plugins/select2/select2.min.css | 1 +
.../slimScroll/jquery.slimscroll.min.js | 16 +
.../dist/bootstrap-duallistbox.min.css | 10 +
.../dist/jquery.bootstrap-duallistbox.min.js | 9 +
.../bootstrap-fileinput/css/fileinput.min.css | 12 +
.../bootstrap-fileinput/img/loading-sm.gif | Bin 0 -> 2670 bytes
.../bootstrap-fileinput/img/loading.gif | Bin 0 -> 847 bytes
.../bootstrap-fileinput/js/fileinput.min.js | 13 +
.../js/plugins/canvas-to-blob.js | 95 +
.../js/plugins/canvas-to-blob.min.js | 1 +
.../bootstrap-fileinput/js/plugins/piexif.js | 2471 ++
.../js/plugins/piexif.min.js | 1 +
.../bootstrap-fileinput/js/plugins/purify.js | 1009 +
.../js/plugins/purify.min.js | 1 +
.../js/plugins/sortable.js | 1590 +
.../js/plugins/sortable.min.js | 1 +
.../css/bootstrap3/bootstrap-switch.min.css | 22 +
.../dist/js/bootstrap-switch.min.js | 22 +
.../css/bootstrap-editable.css | 663 +
.../bootstrap3-editable/img/clear.png | Bin 0 -> 509 bytes
.../bootstrap3-editable/img/loading.gif | Bin 0 -> 1849 bytes
.../js/bootstrap-editable.min.js | 7 +
.../css/bootstrap-datetimepicker.min.css | 5 +
.../build/js/bootstrap-datetimepicker.min.js | 9 +
.../font-awesome/css/font-awesome.min.css | 4 +
.../font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes
.../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes
.../fonts/fontawesome-webfont.svg | 2671 ++
.../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes
.../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes
.../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes
.../dist/css/fontawesome-iconpicker.min.css | 9 +
.../dist/js/fontawesome-iconpicker.min.js | 1 +
.../laravel-admin/google-fonts/fonts.css | 50 +
.../fonts/Source-Sans-Pro-Bold.ttf | Bin 0 -> 34908 bytes
.../fonts/Source-Sans-Pro-Bold.woff | Bin 0 -> 17264 bytes
.../fonts/Source-Sans-Pro-Bold.woff2 | Bin 0 -> 13892 bytes
.../fonts/Source-Sans-Pro-Italic.ttf | Bin 0 -> 33864 bytes
.../fonts/Source-Sans-Pro-Italic.woff | Bin 0 -> 17288 bytes
.../fonts/Source-Sans-Pro-Italic.woff2 | Bin 0 -> 13980 bytes
.../fonts/Source-Sans-Pro-Light-Italic.ttf | Bin 0 -> 33996 bytes
.../fonts/Source-Sans-Pro-Light-Italic.woff | Bin 0 -> 17304 bytes
.../fonts/Source-Sans-Pro-Light-Italic.woff2 | Bin 0 -> 13772 bytes
.../fonts/Source-Sans-Pro-Light.ttf | Bin 0 -> 35368 bytes
.../fonts/Source-Sans-Pro-Light.woff | Bin 0 -> 17540 bytes
.../fonts/Source-Sans-Pro-Light.woff2 | Bin 0 -> 14308 bytes
.../fonts/Source-Sans-Pro-Semibold-Italic.ttf | Bin 0 -> 33592 bytes
.../Source-Sans-Pro-Semibold-Italic.woff | Bin 0 -> 17168 bytes
.../Source-Sans-Pro-Semibold-Italic.woff2 | Bin 0 -> 13716 bytes
.../fonts/Source-Sans-Pro-Semibold.ttf | Bin 0 -> 34808 bytes
.../fonts/Source-Sans-Pro-Semibold.woff | Bin 0 -> 17380 bytes
.../fonts/Source-Sans-Pro-Semibold.woff2 | Bin 0 -> 13992 bytes
.../google-fonts/fonts/Source-Sans-Pro.eot | Bin 0 -> 16229 bytes
.../google-fonts/fonts/Source-Sans-Pro.svg | 345 +
.../google-fonts/fonts/Source-Sans-Pro.ttf | Bin 0 -> 35064 bytes
.../google-fonts/fonts/Source-Sans-Pro.woff | Bin 0 -> 17500 bytes
.../google-fonts/fonts/Source-Sans-Pro.woff2 | Bin 0 -> 14308 bytes
.../laravel-admin/jquery-pjax/jquery.pjax.js | 950 +
.../laravel-admin/laravel-admin.css | 85 +
.../laravel-admin/laravel-admin.js | 198 +
.../moment/min/moment-with-locales.min.js | 80 +
.../laravel-admin/nestable/jquery.nestable.js | 484 +
.../laravel-admin/nestable/nestable.css | 34 +
.../laravel-admin/nprogress/nprogress.css | 74 +
.../laravel-admin/nprogress/nprogress.js | 476 +
.../number-input/bootstrap-number-input.js | 88 +
.../sweetalert2/dist/sweetalert2.css | 1145 +
.../sweetalert2/dist/sweetalert2.min.js | 1 +
.../laravel-admin/toastr/build/toastr.min.css | 1 +
.../laravel-admin/toastr/build/toastr.min.js | 2 +
.../vendor/ueditor/dialogs/anchor/anchor.html | 40 +
.../ueditor/dialogs/attachment/attachment.css | 681 +
.../dialogs/attachment/attachment.html | 60 +
.../ueditor/dialogs/attachment/attachment.js | 754 +
.../attachment/fileTypeImages/icon_chm.gif | Bin 0 -> 923 bytes
.../fileTypeImages/icon_default.png | Bin 0 -> 841 bytes
.../attachment/fileTypeImages/icon_doc.gif | Bin 0 -> 1012 bytes
.../attachment/fileTypeImages/icon_exe.gif | Bin 0 -> 949 bytes
.../attachment/fileTypeImages/icon_jpg.gif | Bin 0 -> 950 bytes
.../attachment/fileTypeImages/icon_mp3.gif | Bin 0 -> 986 bytes
.../attachment/fileTypeImages/icon_mv.gif | Bin 0 -> 1001 bytes
.../attachment/fileTypeImages/icon_pdf.gif | Bin 0 -> 996 bytes
.../attachment/fileTypeImages/icon_ppt.gif | Bin 0 -> 1001 bytes
.../attachment/fileTypeImages/icon_psd.gif | Bin 0 -> 1009 bytes
.../attachment/fileTypeImages/icon_rar.gif | Bin 0 -> 1007 bytes
.../attachment/fileTypeImages/icon_txt.gif | Bin 0 -> 970 bytes
.../attachment/fileTypeImages/icon_xls.gif | Bin 0 -> 1005 bytes
.../dialogs/attachment/images/alignicon.gif | Bin 0 -> 1051 bytes
.../dialogs/attachment/images/alignicon.png | Bin 0 -> 3714 bytes
.../ueditor/dialogs/attachment/images/bg.png | Bin 0 -> 2810 bytes
.../dialogs/attachment/images/file-icons.gif | Bin 0 -> 20097 bytes
.../dialogs/attachment/images/file-icons.png | Bin 0 -> 44070 bytes
.../dialogs/attachment/images/icons.gif | Bin 0 -> 453 bytes
.../dialogs/attachment/images/icons.png | Bin 0 -> 2678 bytes
.../dialogs/attachment/images/image.png | Bin 0 -> 1672 bytes
.../dialogs/attachment/images/progress.png | Bin 0 -> 1269 bytes
.../dialogs/attachment/images/success.gif | Bin 0 -> 445 bytes
.../dialogs/attachment/images/success.png | Bin 0 -> 1621 bytes
.../ueditor/dialogs/background/background.css | 94 +
.../dialogs/background/background.html | 56 +
.../ueditor/dialogs/background/background.js | 376 +
.../ueditor/dialogs/background/images/bg.png | Bin 0 -> 2810 bytes
.../dialogs/background/images/success.png | Bin 0 -> 1621 bytes
.../ueditor/dialogs/charts/chart.config.js | 65 +
.../vendor/ueditor/dialogs/charts/charts.css | 165 +
.../vendor/ueditor/dialogs/charts/charts.html | 89 +
.../vendor/ueditor/dialogs/charts/charts.js | 519 +
.../ueditor/dialogs/charts/images/charts0.png | Bin 0 -> 25306 bytes
.../ueditor/dialogs/charts/images/charts1.png | Bin 0 -> 19263 bytes
.../ueditor/dialogs/charts/images/charts2.png | Bin 0 -> 23016 bytes
.../ueditor/dialogs/charts/images/charts3.png | Bin 0 -> 7823 bytes
.../ueditor/dialogs/charts/images/charts4.png | Bin 0 -> 8344 bytes
.../ueditor/dialogs/charts/images/charts5.png | Bin 0 -> 47084 bytes
.../ueditor/dialogs/emotion/emotion.css | 43 +
.../ueditor/dialogs/emotion/emotion.html | 54 +
.../vendor/ueditor/dialogs/emotion/emotion.js | 186 +
.../ueditor/dialogs/emotion/images/0.gif | Bin 0 -> 43 bytes
.../ueditor/dialogs/emotion/images/bface.gif | Bin 0 -> 27167 bytes
.../ueditor/dialogs/emotion/images/cface.gif | Bin 0 -> 8603 bytes
.../ueditor/dialogs/emotion/images/fface.gif | Bin 0 -> 18479 bytes
.../dialogs/emotion/images/jxface2.gif | Bin 0 -> 40706 bytes
.../emotion/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes
.../ueditor/dialogs/emotion/images/tface.gif | Bin 0 -> 19805 bytes
.../ueditor/dialogs/emotion/images/wface.gif | Bin 0 -> 49850 bytes
.../ueditor/dialogs/emotion/images/yface.gif | Bin 0 -> 28409 bytes
public/vendor/ueditor/dialogs/gmap/gmap.html | 89 +
public/vendor/ueditor/dialogs/help/help.css | 7 +
public/vendor/ueditor/dialogs/help/help.html | 82 +
public/vendor/ueditor/dialogs/help/help.js | 56 +
public/vendor/ueditor/dialogs/image/image.css | 894 +
.../vendor/ueditor/dialogs/image/image.html | 120 +
public/vendor/ueditor/dialogs/image/image.js | 1139 +
.../dialogs/image/images/alignicon.jpg | Bin 0 -> 16101 bytes
.../ueditor/dialogs/image/images/bg.png | Bin 0 -> 2810 bytes
.../ueditor/dialogs/image/images/icons.gif | Bin 0 -> 453 bytes
.../ueditor/dialogs/image/images/icons.png | Bin 0 -> 2678 bytes
.../ueditor/dialogs/image/images/image.png | Bin 0 -> 1672 bytes
.../ueditor/dialogs/image/images/progress.png | Bin 0 -> 1269 bytes
.../ueditor/dialogs/image/images/success.gif | Bin 0 -> 445 bytes
.../ueditor/dialogs/image/images/success.png | Bin 0 -> 1621 bytes
.../dialogs/insertframe/insertframe.html | 98 +
public/vendor/ueditor/dialogs/internal.js | 81 +
public/vendor/ueditor/dialogs/link/link.html | 126 +
public/vendor/ueditor/dialogs/map/map.html | 135 +
public/vendor/ueditor/dialogs/map/show.html | 118 +
public/vendor/ueditor/dialogs/music/music.css | 30 +
.../vendor/ueditor/dialogs/music/music.html | 32 +
public/vendor/ueditor/dialogs/music/music.js | 192 +
.../ueditor/dialogs/preview/preview.html | 40 +
.../ueditor/dialogs/scrawl/images/addimg.png | Bin 0 -> 628 bytes
.../ueditor/dialogs/scrawl/images/brush.png | Bin 0 -> 608 bytes
.../ueditor/dialogs/scrawl/images/delimg.png | Bin 0 -> 516 bytes
.../ueditor/dialogs/scrawl/images/delimgH.png | Bin 0 -> 578 bytes
.../ueditor/dialogs/scrawl/images/empty.png | Bin 0 -> 519 bytes
.../ueditor/dialogs/scrawl/images/emptyH.png | Bin 0 -> 657 bytes
.../ueditor/dialogs/scrawl/images/eraser.png | Bin 0 -> 43271 bytes
.../ueditor/dialogs/scrawl/images/redo.png | Bin 0 -> 454 bytes
.../ueditor/dialogs/scrawl/images/redoH.png | Bin 0 -> 536 bytes
.../ueditor/dialogs/scrawl/images/scale.png | Bin 0 -> 435 bytes
.../ueditor/dialogs/scrawl/images/scaleH.png | Bin 0 -> 330 bytes
.../ueditor/dialogs/scrawl/images/size.png | Bin 0 -> 775 bytes
.../ueditor/dialogs/scrawl/images/undo.png | Bin 0 -> 444 bytes
.../ueditor/dialogs/scrawl/images/undoH.png | Bin 0 -> 511 bytes
.../vendor/ueditor/dialogs/scrawl/scrawl.css | 72 +
.../vendor/ueditor/dialogs/scrawl/scrawl.html | 95 +
.../vendor/ueditor/dialogs/scrawl/scrawl.js | 671 +
.../dialogs/searchreplace/searchreplace.html | 102 +
.../dialogs/searchreplace/searchreplace.js | 164 +
.../dialogs/snapscreen/snapscreen.html | 58 +
.../ueditor/dialogs/spechars/spechars.html | 21 +
.../ueditor/dialogs/spechars/spechars.js | 57 +
.../vendor/ueditor/dialogs/table/dragicon.png | Bin 0 -> 304 bytes
.../ueditor/dialogs/table/edittable.css | 84 +
.../ueditor/dialogs/table/edittable.html | 64 +
.../vendor/ueditor/dialogs/table/edittable.js | 237 +
.../vendor/ueditor/dialogs/table/edittd.html | 61 +
.../vendor/ueditor/dialogs/table/edittip.html | 33 +
.../vendor/ueditor/dialogs/template/config.js | 42 +
.../ueditor/dialogs/template/images/bg.gif | Bin 0 -> 84 bytes
.../ueditor/dialogs/template/images/pre0.png | Bin 0 -> 250 bytes
.../ueditor/dialogs/template/images/pre1.png | Bin 0 -> 291 bytes
.../ueditor/dialogs/template/images/pre2.png | Bin 0 -> 394 bytes
.../ueditor/dialogs/template/images/pre3.png | Bin 0 -> 485 bytes
.../ueditor/dialogs/template/images/pre4.png | Bin 0 -> 393 bytes
.../ueditor/dialogs/template/template.css | 18 +
.../ueditor/dialogs/template/template.html | 26 +
.../ueditor/dialogs/template/template.js | 53 +
.../ueditor/dialogs/video/images/bg.png | Bin 0 -> 2810 bytes
.../dialogs/video/images/center_focus.jpg | Bin 0 -> 11795 bytes
.../dialogs/video/images/file-icons.gif | Bin 0 -> 20097 bytes
.../dialogs/video/images/file-icons.png | Bin 0 -> 44070 bytes
.../ueditor/dialogs/video/images/icons.gif | Bin 0 -> 453 bytes
.../ueditor/dialogs/video/images/icons.png | Bin 0 -> 2678 bytes
.../ueditor/dialogs/video/images/image.png | Bin 0 -> 1672 bytes
.../dialogs/video/images/left_focus.jpg | Bin 0 -> 11423 bytes
.../dialogs/video/images/none_focus.jpg | Bin 0 -> 11546 bytes
.../ueditor/dialogs/video/images/progress.png | Bin 0 -> 1269 bytes
.../dialogs/video/images/right_focus.jpg | Bin 0 -> 11334 bytes
.../ueditor/dialogs/video/images/success.gif | Bin 0 -> 445 bytes
.../ueditor/dialogs/video/images/success.png | Bin 0 -> 1621 bytes
public/vendor/ueditor/dialogs/video/video.css | 635 +
.../vendor/ueditor/dialogs/video/video.html | 86 +
public/vendor/ueditor/dialogs/video/video.js | 789 +
.../vendor/ueditor/dialogs/webapp/webapp.html | 53 +
.../dialogs/wordimage/fClipboard_ueditor.swf | Bin 0 -> 1908 bytes
.../dialogs/wordimage/imageUploader.swf | Bin 0 -> 62857 bytes
.../ueditor/dialogs/wordimage/tangram.js | 1495 +
.../ueditor/dialogs/wordimage/wordimage.html | 111 +
.../ueditor/dialogs/wordimage/wordimage.js | 157 +
public/vendor/ueditor/index.html | 175 +
public/vendor/ueditor/lang/en/en.js | 684 +
.../ueditor/lang/en/images/addimage.png | Bin 0 -> 3373 bytes
.../lang/en/images/alldeletebtnhoverskin.png | Bin 0 -> 743 bytes
.../lang/en/images/alldeletebtnupskin.png | Bin 0 -> 743 bytes
.../ueditor/lang/en/images/background.png | Bin 0 -> 3854 bytes
.../vendor/ueditor/lang/en/images/button.png | Bin 0 -> 4929 bytes
public/vendor/ueditor/lang/en/images/copy.png | Bin 0 -> 1222 bytes
.../ueditor/lang/en/images/deletedisable.png | Bin 0 -> 649 bytes
.../ueditor/lang/en/images/deleteenable.png | Bin 0 -> 664 bytes
.../ueditor/lang/en/images/listbackground.png | Bin 0 -> 3750 bytes
.../ueditor/lang/en/images/localimage.png | Bin 0 -> 3083 bytes
.../vendor/ueditor/lang/en/images/music.png | Bin 0 -> 91561 bytes
.../lang/en/images/rotateleftdisable.png | Bin 0 -> 719 bytes
.../lang/en/images/rotateleftenable.png | Bin 0 -> 952 bytes
.../lang/en/images/rotaterightdisable.png | Bin 0 -> 754 bytes
.../lang/en/images/rotaterightenable.png | Bin 0 -> 1007 bytes
.../vendor/ueditor/lang/en/images/upload.png | Bin 0 -> 3941 bytes
.../vendor/ueditor/lang/zh-cn/images/copy.png | Bin 0 -> 4319 bytes
.../ueditor/lang/zh-cn/images/localimage.png | Bin 0 -> 6979 bytes
.../ueditor/lang/zh-cn/images/music.png | Bin 0 -> 23106 bytes
.../ueditor/lang/zh-cn/images/upload.png | Bin 0 -> 6608 bytes
public/vendor/ueditor/lang/zh-cn/zh-cn.js | 669 +
.../ueditor/themes/default/css/ueditor.css | 1903 +
.../themes/default/css/ueditor.min.css | 8 +
.../ueditor/themes/default/dialogbase.css | 100 +
.../ueditor/themes/default/images/anchor.gif | Bin 0 -> 184 bytes
.../ueditor/themes/default/images/arrow.png | Bin 0 -> 1173 bytes
.../themes/default/images/arrow_down.png | Bin 0 -> 1610 bytes
.../themes/default/images/arrow_up.png | Bin 0 -> 1649 bytes
.../themes/default/images/button-bg.gif | Bin 0 -> 1114 bytes
.../themes/default/images/cancelbutton.gif | Bin 0 -> 1227 bytes
.../ueditor/themes/default/images/charts.png | Bin 0 -> 518 bytes
.../themes/default/images/cursor_h.gif | Bin 0 -> 253 bytes
.../themes/default/images/cursor_h.png | Bin 0 -> 175 bytes
.../themes/default/images/cursor_v.gif | Bin 0 -> 370 bytes
.../themes/default/images/cursor_v.png | Bin 0 -> 177 bytes
.../themes/default/images/dialog-title-bg.png | Bin 0 -> 938 bytes
.../themes/default/images/filescan.png | Bin 0 -> 4282 bytes
.../themes/default/images/highlighted.gif | Bin 0 -> 111 bytes
.../themes/default/images/icons-all.gif | Bin 0 -> 3750 bytes
.../ueditor/themes/default/images/icons.gif | Bin 0 -> 20947 bytes
.../ueditor/themes/default/images/icons.png | Bin 0 -> 19694 bytes
.../themes/default/images/loaderror.png | Bin 0 -> 3209 bytes
.../ueditor/themes/default/images/loading.gif | Bin 0 -> 734 bytes
.../ueditor/themes/default/images/lock.gif | Bin 0 -> 1062 bytes
.../default/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes
.../themes/default/images/pagebreak.gif | Bin 0 -> 54 bytes
.../ueditor/themes/default/images/scale.png | Bin 0 -> 167 bytes
.../themes/default/images/sortable.png | Bin 0 -> 2851 bytes
.../ueditor/themes/default/images/spacer.gif | Bin 0 -> 43 bytes
.../themes/default/images/sparator_v.png | Bin 0 -> 122 bytes
.../default/images/table-cell-align.png | Bin 0 -> 1847 bytes
.../default/images/tangram-colorpicker.png | Bin 0 -> 17355 bytes
.../themes/default/images/toolbar_bg.png | Bin 0 -> 170 bytes
.../themes/default/images/unhighlighted.gif | Bin 0 -> 111 bytes
.../ueditor/themes/default/images/upload.png | Bin 0 -> 6608 bytes
.../themes/default/images/videologo.gif | Bin 0 -> 1604 bytes
.../ueditor/themes/default/images/word.gif | Bin 0 -> 1019 bytes
.../themes/default/images/wordpaste.png | Bin 0 -> 6467 bytes
public/vendor/ueditor/themes/iframe.css | 1 +
.../third-party/SyntaxHighlighter/shCore.js | 3655 ++
.../SyntaxHighlighter/shCoreDefault.css | 1 +
.../third-party/codemirror/codemirror.css | 104 +
.../third-party/codemirror/codemirror.js | 3581 ++
.../highcharts/adapters/mootools-adapter.js | 13 +
.../adapters/mootools-adapter.src.js | 313 +
.../highcharts/adapters/prototype-adapter.js | 15 +
.../adapters/prototype-adapter.src.js | 316 +
.../adapters/standalone-framework.js | 17 +
.../adapters/standalone-framework.src.js | 583 +
.../third-party/highcharts/highcharts-more.js | 50 +
.../highcharts/highcharts-more.src.js | 2430 ++
.../third-party/highcharts/highcharts.js | 283 +
.../third-party/highcharts/highcharts.src.js | 16974 +++++++++
.../highcharts/modules/annotations.js | 7 +
.../highcharts/modules/annotations.src.js | 401 +
.../highcharts/modules/canvas-tools.js | 133 +
.../highcharts/modules/canvas-tools.src.js | 3113 ++
.../third-party/highcharts/modules/data.js | 17 +
.../highcharts/modules/data.src.js | 582 +
.../highcharts/modules/drilldown.js | 11 +
.../highcharts/modules/drilldown.src.js | 447 +
.../highcharts/modules/exporting.js | 22 +
.../highcharts/modules/exporting.src.js | 709 +
.../third-party/highcharts/modules/funnel.js | 12 +
.../highcharts/modules/funnel.src.js | 289 +
.../third-party/highcharts/modules/heatmap.js | 1 +
.../highcharts/modules/heatmap.src.js | 53 +
.../third-party/highcharts/modules/map.js | 27 +
.../third-party/highcharts/modules/map.src.js | 1002 +
.../highcharts/modules/no-data-to-display.js | 12 +
.../modules/no-data-to-display.src.js | 128 +
.../highcharts/themes/dark-blue.js | 254 +
.../highcharts/themes/dark-green.js | 255 +
.../third-party/highcharts/themes/gray.js | 257 +
.../third-party/highcharts/themes/grid.js | 103 +
.../third-party/highcharts/themes/skies.js | 89 +
.../ueditor/third-party/jquery-1.10.2.js | 9789 +++++
.../ueditor/third-party/jquery-1.10.2.min.js | 6 +
.../ueditor/third-party/jquery-1.10.2.min.map | 1 +
.../snapscreen/UEditorSnapscreen.exe | Bin 0 -> 519936 bytes
.../ueditor/third-party/video-js/font/vjs.eot | Bin 0 -> 3536 bytes
.../ueditor/third-party/video-js/font/vjs.svg | 65 +
.../ueditor/third-party/video-js/font/vjs.ttf | Bin 0 -> 3372 bytes
.../third-party/video-js/font/vjs.woff | Bin 0 -> 4228 bytes
.../ueditor/third-party/video-js/video-js.css | 766 +
.../third-party/video-js/video-js.min.css | 5 +
.../ueditor/third-party/video-js/video-js.swf | Bin 0 -> 16236 bytes
.../ueditor/third-party/video-js/video.dev.js | 7108 ++++
.../ueditor/third-party/video-js/video.js | 129 +
.../third-party/webuploader/Uploader.swf | Bin 0 -> 49382 bytes
.../third-party/webuploader/webuploader.css | 28 +
.../webuploader/webuploader.custom.js | 5670 +++
.../webuploader/webuploader.custom.min.js | 2 +
.../webuploader/webuploader.flashonly.js | 4176 +++
.../webuploader/webuploader.flashonly.min.js | 2 +
.../webuploader/webuploader.html5only.js | 5559 +++
.../webuploader/webuploader.html5only.min.js | 2 +
.../third-party/webuploader/webuploader.js | 6733 ++++
.../webuploader/webuploader.min.js | 2 +
.../webuploader/webuploader.withoutimage.js | 4593 +++
.../webuploader.withoutimage.min.js | 2 +
.../zeroclipboard/ZeroClipboard.js | 1256 +
.../zeroclipboard/ZeroClipboard.min.js | 9 +
.../zeroclipboard/ZeroClipboard.swf | Bin 0 -> 3933 bytes
public/vendor/ueditor/ueditor.all.js | 29431 ++++++++++++++++
public/vendor/ueditor/ueditor.all.min.js | 709 +
public/vendor/ueditor/ueditor.config.js | 413 +
public/vendor/ueditor/ueditor.parse.js | 1022 +
public/vendor/ueditor/ueditor.parse.min.js | 28 +
public/web.config | 28 +
resources/css/app.css | 0
resources/js/app.js | 1 +
resources/js/bootstrap.js | 28 +
resources/js/setStock.js | 21 +
resources/lang/ar/admin.php | 105 +
resources/lang/az/admin.php | 102 +
resources/lang/en/admin.php | 114 +
resources/lang/en/auth.php | 20 +
resources/lang/en/pagination.php | 19 +
resources/lang/en/passwords.php | 22 +
resources/lang/en/validation.php | 152 +
resources/lang/es/admin.php | 90 +
resources/lang/fa/admin.php | 102 +
resources/lang/fr/admin.php | 102 +
resources/lang/he/admin.php | 79 +
resources/lang/id/admin.php | 106 +
resources/lang/ja/admin.php | 102 +
resources/lang/ko/admin.php | 104 +
resources/lang/ms/admin.php | 102 +
resources/lang/nl/admin.php | 107 +
resources/lang/pl/admin.php | 78 +
resources/lang/pt-BR/admin.php | 102 +
resources/lang/pt/admin.php | 102 +
resources/lang/ru.json | 618 +
resources/lang/ru/admin.php | 107 +
resources/lang/ru/auth.php | 18 +
resources/lang/ru/pagination.php | 17 +
resources/lang/ru/passwords.php | 20 +
resources/lang/ru/validation-inline.php | 131 +
resources/lang/ru/validation.php | 162 +
resources/lang/tr/admin.php | 107 +
resources/lang/uk/admin.php | 106 +
resources/lang/ur/admin.php | 107 +
resources/lang/vendor/ueditor/en/upload.php | 34 +
.../lang/vendor/ueditor/zh_CN/upload.php | 31 +
.../lang/vendor/ueditor/zh_TW/upload.php | 33 +
resources/lang/zh_CN.json | 618 +
resources/lang/zh_CN/admin.php | 124 +
resources/lang/zh_CN/auth.php | 18 +
resources/lang/zh_CN/pagination.php | 17 +
resources/lang/zh_CN/passwords.php | 20 +
resources/lang/zh_CN/validation-inline.php | 131 +
resources/lang/zh_CN/validation.php | 161 +
resources/lang/zh_TW.json | 618 +
resources/lang/zh_TW/admin.php | 112 +
resources/lang/zh_TW/auth.php | 18 +
resources/lang/zh_TW/pagination.php | 17 +
resources/lang/zh_TW/passwords.php | 20 +
resources/lang/zh_TW/validation-inline.php | 131 +
resources/lang/zh_TW/validation.php | 161 +
resources/views/image.blade.php | 10 +
.../views/vendor/ueditor/assets.blade.php | 7 +
resources/views/welcome.blade.php | 132 +
routes/api.php | 1 +
routes/channels.php | 1 +
routes/console.php | 1 +
routes/laravel_admin_wechat.php | 26 +
routes/web.php | 21 +
server.php | 21 +
storage/app/.gitignore | 3 +
storage/app/public/.gitignore | 2 +
storage/framework/.gitignore | 9 +
storage/framework/cache/.gitignore | 3 +
storage/framework/cache/data/.gitignore | 2 +
storage/framework/sessions/.gitignore | 2 +
storage/framework/testing/.gitignore | 2 +
storage/framework/views/.gitignore | 2 +
storage/logs/.gitignore | 2 +
tests/CreatesApplication.php | 22 +
tests/Feature/ExampleTest.php | 21 +
tests/TestCase.php | 10 +
tests/Unit/ExampleTest.php | 18 +
webpack.mix.js | 17 +
791 files changed, 177427 insertions(+)
create mode 100644 .editorconfig
create mode 100644 .env.example
create mode 100644 .gitattributes
create mode 100644 .gitignore
create mode 100644 .styleci.yml
create mode 100644 README.md
create mode 100644 app/Admin/Actions/LinkCreateAddress.php
create mode 100644 app/Admin/Actions/LinkStockOrderDeliver.php
create mode 100644 app/Admin/Actions/LinkVipOrderRefund.php
create mode 100644 app/Admin/Controllers/AuthController.php
create mode 100644 app/Admin/Controllers/HomeController.php
create mode 100644 app/Admin/Controllers/LeadyController.php
create mode 100644 app/Admin/Controllers/Material/IndexController.php
create mode 100644 app/Admin/Controllers/ModuleController.php
create mode 100644 app/Admin/Controllers/Platform/DashboardController.php
create mode 100644 app/Admin/Controllers/Platform/ExperienceController.php
create mode 100644 app/Admin/Controllers/Platform/VipController.php
create mode 100644 app/Admin/Controllers/Platform/VipOrderController.php
create mode 100644 app/Admin/Controllers/TestController.php
create mode 100644 app/Admin/Extensions/CleanCache.php
create mode 100644 app/Admin/Routes/material.php
create mode 100644 app/Admin/Routes/modules.php
create mode 100644 app/Admin/Routes/platform.php
create mode 100644 app/Admin/Routes/test.php
create mode 100644 app/Admin/Traits/WithUploads.php
create mode 100644 app/Admin/bootstrap.php
create mode 100644 app/Admin/routes.php
create mode 100644 app/Api/Controllers/Controller.php
create mode 100644 app/Api/Controllers/Data/IndexController.php
create mode 100644 app/Api/Controllers/IndexController.php
create mode 100644 app/Api/Controllers/Wechat/IndexController.php
create mode 100644 app/Api/Resources/BaseCollection.php
create mode 100644 app/Api/Resources/Order/OrderDataCollection.php
create mode 100644 app/Api/Resources/User/UserBaseResource.php
create mode 100644 app/Api/Resources/User/UserDataCollection.php
create mode 100644 app/Api/Resources/User/UserDataResource.php
create mode 100644 app/Api/Routes/data.php
create mode 100644 app/Api/Routes/wechat.php
create mode 100644 app/Api/WechatHandlers/EventMessageHandler.php
create mode 100644 app/Api/WechatHandlers/FileMessageHandler.php
create mode 100644 app/Api/WechatHandlers/ImageMessageHandler.php
create mode 100644 app/Api/WechatHandlers/LinkMessageHandler.php
create mode 100644 app/Api/WechatHandlers/LocationMessageHandler.php
create mode 100644 app/Api/WechatHandlers/ShortVideoMessageHandler.php
create mode 100644 app/Api/WechatHandlers/TextMessageHandler.php
create mode 100644 app/Api/WechatHandlers/TransferMessageHandler.php
create mode 100644 app/Api/WechatHandlers/VideoMessageHandler.php
create mode 100644 app/Api/WechatHandlers/VoiceMessageHandler.php
create mode 100644 app/Api/bootstrap.php
create mode 100644 app/Api/routes.php
create mode 100644 app/Bonus/IdentityBonus.php
create mode 100644 app/Channels/WechatMiniChannel.php
create mode 100644 app/Console/Commands/MonthPerfCommand.php
create mode 100644 app/Console/Commands/StartBounsCommand.php
create mode 100644 app/Console/Kernel.php
create mode 100644 app/Exceptions/Handler.php
create mode 100644 app/Http/Controllers/Controller.php
create mode 100644 app/Http/Controllers/ImageController.php
create mode 100644 app/Http/Kernel.php
create mode 100644 app/Http/Middleware/Authenticate.php
create mode 100644 app/Http/Middleware/EncryptCookies.php
create mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php
create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php
create mode 100644 app/Http/Middleware/TrimStrings.php
create mode 100644 app/Http/Middleware/TrustHosts.php
create mode 100644 app/Http/Middleware/TrustProxies.php
create mode 100644 app/Http/Middleware/VerifyCsrfToken.php
create mode 100644 app/Jobs/Bonus/BuyIdentityJob.php
create mode 100644 app/Jobs/Bonus/MonthPerfJob.php
create mode 100644 app/Jobs/Bonus/SendBounsJob.php
create mode 100644 app/Listeners/PaymentPaidListener.php
create mode 100644 app/Listeners/UserOrderPaidListener.php
create mode 100644 app/Models/Bouns.php
create mode 100644 app/Models/BounsOrder.php
create mode 100644 app/Models/BounsUserPerf.php
create mode 100644 app/Models/Job.php
create mode 100644 app/Models/Material.php
create mode 100644 app/Models/Model.php
create mode 100644 app/Models/Module.php
create mode 100644 app/Notifications/SystemOpenVip.php
create mode 100644 app/Notifications/SystemOrderDelivered.php
create mode 100644 app/Notifications/SystemRemindUserSign.php
create mode 100644 app/Notifications/SystemUpdateCase.php
create mode 100644 app/Providers/AppServiceProvider.php
create mode 100644 app/Providers/AuthServiceProvider.php
create mode 100644 app/Providers/BroadcastServiceProvider.php
create mode 100644 app/Providers/EventServiceProvider.php
create mode 100644 app/Providers/RouteServiceProvider.php
create mode 100644 app/Traits/HasClicks.php
create mode 100644 app/Traits/HasCovers.php
create mode 100644 app/Traits/HasStatus.php
create mode 100644 app/Traits/Macroable.php
create mode 100644 app/Traits/OrderByIdDesc.php
create mode 100644 app/Traits/OrderByOrderAsc.php
create mode 100644 app/Traits/WithPosition.php
create mode 100644 artisan
create mode 100644 bootstrap/app.php
create mode 100644 bootstrap/cache/.gitignore
create mode 100644 composer.json
create mode 100644 composer.lock
create mode 100644 config/admin.php
create mode 100644 config/agent.php
create mode 100644 config/api.php
create mode 100644 config/app.php
create mode 100644 config/auth.php
create mode 100644 config/broadcasting.php
create mode 100644 config/cache.php
create mode 100644 config/cors.php
create mode 100644 config/database.php
create mode 100644 config/favorite.php
create mode 100644 config/filesystems.php
create mode 100644 config/hashing.php
create mode 100644 config/image.php
create mode 100644 config/jwt.php
create mode 100644 config/laravel-model-caching.php
create mode 100644 config/logging.php
create mode 100644 config/mail.php
create mode 100644 config/modules.php
create mode 100644 config/queue.php
create mode 100644 config/services.php
create mode 100644 config/session.php
create mode 100644 config/subscribe.php
create mode 100644 config/tencent_map.php
create mode 100644 config/ueditor.php
create mode 100644 config/versionable.php
create mode 100644 config/view.php
create mode 100644 config/wechat.php
create mode 100644 config/withdraw.php
create mode 100644 database/.gitignore
create mode 100644 database/factories/UserFactory.php
create mode 100644 database/migrations/2016_01_04_173148_create_admin_tables.php
create mode 100644 database/migrations/2018_12_14_000000_create_favorites_table.php
create mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php
create mode 100644 database/migrations/2020_04_09_000000_create_subscriptions_table.php
create mode 100644 database/migrations/2021_08_06_104216_create_materials_table.php
create mode 100644 database/migrations/2022_08_30_150338_create_bouns_table.php
create mode 100644 database/migrations/2022_08_30_150355_create_bouns_orders_table.php
create mode 100644 database/migrations/2022_09_26_153401_create_bouns_user_perves_table.php
create mode 100644 database/seeders/AdminPanelSeeder.php
create mode 100644 database/seeders/DatabaseSeeder.php
create mode 100644 docs/READMD.md
create mode 100644 docs/Trait doc.md
create mode 100644 modules.json
create mode 100644 modules/.gitignore
create mode 100644 modules/Cms/.gitignore
create mode 100644 modules/Cms/README.md
create mode 100644 modules/Configuration/.gitignore
create mode 100644 modules/Configuration/README.md
create mode 100644 modules/Coupon/.gitignore
create mode 100644 modules/Coupon/README.md
create mode 100644 modules/Linker/.gitignore
create mode 100644 modules/Linker/README.md
create mode 100644 modules/Mall/.gitignore
create mode 100644 modules/Mall/README.md
create mode 100644 modules/Notification/README.md
create mode 100644 modules/Payment/.gitignore
create mode 100644 modules/Payment/README.md
create mode 100644 modules/README.md
create mode 100644 modules/Storage/.gitignore
create mode 100644 modules/Storage/README.md
create mode 100644 modules/User/.gitignore
create mode 100644 modules/User/README.md
create mode 100644 package.json
create mode 100644 public/.htaccess
create mode 100644 public/favicon.ico
create mode 100644 public/index.php
create mode 100644 public/robots.txt
create mode 100644 public/vendor/js/setStock.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.eot
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.svg
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.ttf
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff2
create mode 100644 public/vendor/laravel-admin/AdminLTE/bootstrap/js/bootstrap.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/AdminLTE.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/_all-skins.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black-light.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue-light.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green-light.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple-light.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red-light.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow-light.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.jpg
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/img/default-50x50.gif
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/img/icons.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg
create mode 100644 public/vendor/laravel-admin/AdminLTE/dist/js/app.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/slider.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/img/alpha-horizontal.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/img/alpha.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/img/hue-horizontal.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/img/hue.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/img/saturation.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/all.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/_all.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/aero.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/aero.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/aero@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/blue.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/blue.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/blue@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/flat.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/flat.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/flat@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/green.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/green.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/green@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/grey.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/grey.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/grey@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/orange.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/orange.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/orange@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/pink.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/pink.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/pink@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/purple.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/purple.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/purple@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/red.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/red.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/red@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/yellow.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/yellow.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/flat/yellow@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/futurico/futurico.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/futurico/futurico.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/futurico/futurico@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/icheck.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/_all.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/aero.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/blue.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/green.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/grey.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/line.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/line.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/line@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/orange.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/pink.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/purple.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/red.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/line/yellow.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/_all.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/aero.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/aero.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/aero@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/blue.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/blue.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/blue@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/green.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/green.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/green@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/grey.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/grey.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/grey@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/minimal.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/minimal.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/minimal@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/orange.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/orange.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/orange@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/pink.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/pink.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/pink@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/purple.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/purple.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/purple@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/red.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/red.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/red@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/yellow.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/yellow.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/minimal/yellow@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/polaris/polaris.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/polaris/polaris.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/polaris/polaris@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/_all.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/aero.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/aero.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/aero@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/blue.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/blue.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/blue@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/green.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/green.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/green@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/grey.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/grey.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/grey@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/orange.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/orange.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/orange@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/pink.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/pink.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/pink@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/purple.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/purple.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/purple@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/red.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/red.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/red@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/square.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/square.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/square@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/yellow.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/yellow.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/iCheck/square/yellow@2x.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/input-mask/jquery.inputmask.bundle.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/input-mask/phone-codes/phone-be.json
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/input-mask/phone-codes/phone-codes.json
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/input-mask/phone-codes/readme.txt
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/ionslider/img/sprite-skin-flat.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/ionslider/img/sprite-skin-nice.png
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/ionslider/ion.rangeSlider.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/ionslider/ion.rangeSlider.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/ionslider/ion.rangeSlider.skinFlat.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/ionslider/ion.rangeSlider.skinNice.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/jQuery/jQuery-2.1.4.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ar.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/az.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/bg.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ca.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/cs.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/da.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/de.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/el.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/en.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/es.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/et.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/eu.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/fa.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/fi.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/fr.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/gl.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/he.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/hi.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/hr.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/hu.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/id.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/is.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/it.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ja.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/km.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ko.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/lt.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/lv.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/mk.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ms.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/nb.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/nl.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/pl.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/pt-BR.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/pt.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ro.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/ru.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/sk.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/sr-Cyrl.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/sr.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/sv.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/th.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/tr.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/uk.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/vi.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/zh-CN.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/i18n/zh-TW.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/select2.full.min.js
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/select2/select2.min.css
create mode 100644 public/vendor/laravel-admin/AdminLTE/plugins/slimScroll/jquery.slimscroll.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-duallistbox/dist/bootstrap-duallistbox.min.css
create mode 100644 public/vendor/laravel-admin/bootstrap-duallistbox/dist/jquery.bootstrap-duallistbox.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/css/fileinput.min.css
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/img/loading-sm.gif
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/img/loading.gif
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/fileinput.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/canvas-to-blob.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/canvas-to-blob.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/piexif.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/piexif.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/purify.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/purify.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/sortable.js
create mode 100644 public/vendor/laravel-admin/bootstrap-fileinput/js/plugins/sortable.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.min.css
create mode 100644 public/vendor/laravel-admin/bootstrap-switch/dist/js/bootstrap-switch.min.js
create mode 100644 public/vendor/laravel-admin/bootstrap3-editable/css/bootstrap-editable.css
create mode 100644 public/vendor/laravel-admin/bootstrap3-editable/img/clear.png
create mode 100644 public/vendor/laravel-admin/bootstrap3-editable/img/loading.gif
create mode 100644 public/vendor/laravel-admin/bootstrap3-editable/js/bootstrap-editable.min.js
create mode 100644 public/vendor/laravel-admin/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css
create mode 100644 public/vendor/laravel-admin/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js
create mode 100644 public/vendor/laravel-admin/font-awesome/css/font-awesome.min.css
create mode 100644 public/vendor/laravel-admin/font-awesome/fonts/FontAwesome.otf
create mode 100644 public/vendor/laravel-admin/font-awesome/fonts/fontawesome-webfont.eot
create mode 100644 public/vendor/laravel-admin/font-awesome/fonts/fontawesome-webfont.svg
create mode 100644 public/vendor/laravel-admin/font-awesome/fonts/fontawesome-webfont.ttf
create mode 100644 public/vendor/laravel-admin/font-awesome/fonts/fontawesome-webfont.woff
create mode 100644 public/vendor/laravel-admin/font-awesome/fonts/fontawesome-webfont.woff2
create mode 100644 public/vendor/laravel-admin/fontawesome-iconpicker/dist/css/fontawesome-iconpicker.min.css
create mode 100644 public/vendor/laravel-admin/fontawesome-iconpicker/dist/js/fontawesome-iconpicker.min.js
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts.css
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Bold.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Bold.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Bold.woff2
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Italic.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Italic.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Italic.woff2
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Light-Italic.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Light-Italic.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Light-Italic.woff2
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Light.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Light.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Light.woff2
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Semibold-Italic.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Semibold-Italic.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Semibold-Italic.woff2
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Semibold.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Semibold.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro-Semibold.woff2
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.eot
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.svg
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.ttf
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.woff
create mode 100644 public/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.woff2
create mode 100644 public/vendor/laravel-admin/jquery-pjax/jquery.pjax.js
create mode 100644 public/vendor/laravel-admin/laravel-admin/laravel-admin.css
create mode 100644 public/vendor/laravel-admin/laravel-admin/laravel-admin.js
create mode 100644 public/vendor/laravel-admin/moment/min/moment-with-locales.min.js
create mode 100644 public/vendor/laravel-admin/nestable/jquery.nestable.js
create mode 100644 public/vendor/laravel-admin/nestable/nestable.css
create mode 100644 public/vendor/laravel-admin/nprogress/nprogress.css
create mode 100644 public/vendor/laravel-admin/nprogress/nprogress.js
create mode 100644 public/vendor/laravel-admin/number-input/bootstrap-number-input.js
create mode 100644 public/vendor/laravel-admin/sweetalert2/dist/sweetalert2.css
create mode 100644 public/vendor/laravel-admin/sweetalert2/dist/sweetalert2.min.js
create mode 100644 public/vendor/laravel-admin/toastr/build/toastr.min.css
create mode 100644 public/vendor/laravel-admin/toastr/build/toastr.min.js
create mode 100644 public/vendor/ueditor/dialogs/anchor/anchor.html
create mode 100644 public/vendor/ueditor/dialogs/attachment/attachment.css
create mode 100644 public/vendor/ueditor/dialogs/attachment/attachment.html
create mode 100644 public/vendor/ueditor/dialogs/attachment/attachment.js
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_default.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/alignicon.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/alignicon.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/bg.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/file-icons.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/file-icons.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/icons.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/icons.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/image.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/progress.png
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/success.gif
create mode 100644 public/vendor/ueditor/dialogs/attachment/images/success.png
create mode 100644 public/vendor/ueditor/dialogs/background/background.css
create mode 100644 public/vendor/ueditor/dialogs/background/background.html
create mode 100644 public/vendor/ueditor/dialogs/background/background.js
create mode 100644 public/vendor/ueditor/dialogs/background/images/bg.png
create mode 100644 public/vendor/ueditor/dialogs/background/images/success.png
create mode 100644 public/vendor/ueditor/dialogs/charts/chart.config.js
create mode 100644 public/vendor/ueditor/dialogs/charts/charts.css
create mode 100644 public/vendor/ueditor/dialogs/charts/charts.html
create mode 100644 public/vendor/ueditor/dialogs/charts/charts.js
create mode 100644 public/vendor/ueditor/dialogs/charts/images/charts0.png
create mode 100644 public/vendor/ueditor/dialogs/charts/images/charts1.png
create mode 100644 public/vendor/ueditor/dialogs/charts/images/charts2.png
create mode 100644 public/vendor/ueditor/dialogs/charts/images/charts3.png
create mode 100644 public/vendor/ueditor/dialogs/charts/images/charts4.png
create mode 100644 public/vendor/ueditor/dialogs/charts/images/charts5.png
create mode 100644 public/vendor/ueditor/dialogs/emotion/emotion.css
create mode 100644 public/vendor/ueditor/dialogs/emotion/emotion.html
create mode 100644 public/vendor/ueditor/dialogs/emotion/emotion.js
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/0.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/bface.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/cface.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/fface.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/jxface2.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/neweditor-tab-bg.png
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/tface.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/wface.gif
create mode 100644 public/vendor/ueditor/dialogs/emotion/images/yface.gif
create mode 100644 public/vendor/ueditor/dialogs/gmap/gmap.html
create mode 100644 public/vendor/ueditor/dialogs/help/help.css
create mode 100644 public/vendor/ueditor/dialogs/help/help.html
create mode 100644 public/vendor/ueditor/dialogs/help/help.js
create mode 100644 public/vendor/ueditor/dialogs/image/image.css
create mode 100644 public/vendor/ueditor/dialogs/image/image.html
create mode 100644 public/vendor/ueditor/dialogs/image/image.js
create mode 100644 public/vendor/ueditor/dialogs/image/images/alignicon.jpg
create mode 100644 public/vendor/ueditor/dialogs/image/images/bg.png
create mode 100644 public/vendor/ueditor/dialogs/image/images/icons.gif
create mode 100644 public/vendor/ueditor/dialogs/image/images/icons.png
create mode 100644 public/vendor/ueditor/dialogs/image/images/image.png
create mode 100644 public/vendor/ueditor/dialogs/image/images/progress.png
create mode 100644 public/vendor/ueditor/dialogs/image/images/success.gif
create mode 100644 public/vendor/ueditor/dialogs/image/images/success.png
create mode 100644 public/vendor/ueditor/dialogs/insertframe/insertframe.html
create mode 100644 public/vendor/ueditor/dialogs/internal.js
create mode 100644 public/vendor/ueditor/dialogs/link/link.html
create mode 100644 public/vendor/ueditor/dialogs/map/map.html
create mode 100644 public/vendor/ueditor/dialogs/map/show.html
create mode 100644 public/vendor/ueditor/dialogs/music/music.css
create mode 100644 public/vendor/ueditor/dialogs/music/music.html
create mode 100644 public/vendor/ueditor/dialogs/music/music.js
create mode 100644 public/vendor/ueditor/dialogs/preview/preview.html
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/addimg.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/brush.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/delimg.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/delimgH.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/empty.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/emptyH.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/eraser.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/redo.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/redoH.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/scale.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/scaleH.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/size.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/undo.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/images/undoH.png
create mode 100644 public/vendor/ueditor/dialogs/scrawl/scrawl.css
create mode 100644 public/vendor/ueditor/dialogs/scrawl/scrawl.html
create mode 100644 public/vendor/ueditor/dialogs/scrawl/scrawl.js
create mode 100644 public/vendor/ueditor/dialogs/searchreplace/searchreplace.html
create mode 100644 public/vendor/ueditor/dialogs/searchreplace/searchreplace.js
create mode 100644 public/vendor/ueditor/dialogs/snapscreen/snapscreen.html
create mode 100644 public/vendor/ueditor/dialogs/spechars/spechars.html
create mode 100644 public/vendor/ueditor/dialogs/spechars/spechars.js
create mode 100644 public/vendor/ueditor/dialogs/table/dragicon.png
create mode 100644 public/vendor/ueditor/dialogs/table/edittable.css
create mode 100644 public/vendor/ueditor/dialogs/table/edittable.html
create mode 100644 public/vendor/ueditor/dialogs/table/edittable.js
create mode 100644 public/vendor/ueditor/dialogs/table/edittd.html
create mode 100644 public/vendor/ueditor/dialogs/table/edittip.html
create mode 100644 public/vendor/ueditor/dialogs/template/config.js
create mode 100644 public/vendor/ueditor/dialogs/template/images/bg.gif
create mode 100644 public/vendor/ueditor/dialogs/template/images/pre0.png
create mode 100644 public/vendor/ueditor/dialogs/template/images/pre1.png
create mode 100644 public/vendor/ueditor/dialogs/template/images/pre2.png
create mode 100644 public/vendor/ueditor/dialogs/template/images/pre3.png
create mode 100644 public/vendor/ueditor/dialogs/template/images/pre4.png
create mode 100644 public/vendor/ueditor/dialogs/template/template.css
create mode 100644 public/vendor/ueditor/dialogs/template/template.html
create mode 100644 public/vendor/ueditor/dialogs/template/template.js
create mode 100644 public/vendor/ueditor/dialogs/video/images/bg.png
create mode 100644 public/vendor/ueditor/dialogs/video/images/center_focus.jpg
create mode 100644 public/vendor/ueditor/dialogs/video/images/file-icons.gif
create mode 100644 public/vendor/ueditor/dialogs/video/images/file-icons.png
create mode 100644 public/vendor/ueditor/dialogs/video/images/icons.gif
create mode 100644 public/vendor/ueditor/dialogs/video/images/icons.png
create mode 100644 public/vendor/ueditor/dialogs/video/images/image.png
create mode 100644 public/vendor/ueditor/dialogs/video/images/left_focus.jpg
create mode 100644 public/vendor/ueditor/dialogs/video/images/none_focus.jpg
create mode 100644 public/vendor/ueditor/dialogs/video/images/progress.png
create mode 100644 public/vendor/ueditor/dialogs/video/images/right_focus.jpg
create mode 100644 public/vendor/ueditor/dialogs/video/images/success.gif
create mode 100644 public/vendor/ueditor/dialogs/video/images/success.png
create mode 100644 public/vendor/ueditor/dialogs/video/video.css
create mode 100644 public/vendor/ueditor/dialogs/video/video.html
create mode 100644 public/vendor/ueditor/dialogs/video/video.js
create mode 100644 public/vendor/ueditor/dialogs/webapp/webapp.html
create mode 100644 public/vendor/ueditor/dialogs/wordimage/fClipboard_ueditor.swf
create mode 100644 public/vendor/ueditor/dialogs/wordimage/imageUploader.swf
create mode 100644 public/vendor/ueditor/dialogs/wordimage/tangram.js
create mode 100644 public/vendor/ueditor/dialogs/wordimage/wordimage.html
create mode 100644 public/vendor/ueditor/dialogs/wordimage/wordimage.js
create mode 100644 public/vendor/ueditor/index.html
create mode 100644 public/vendor/ueditor/lang/en/en.js
create mode 100644 public/vendor/ueditor/lang/en/images/addimage.png
create mode 100644 public/vendor/ueditor/lang/en/images/alldeletebtnhoverskin.png
create mode 100644 public/vendor/ueditor/lang/en/images/alldeletebtnupskin.png
create mode 100644 public/vendor/ueditor/lang/en/images/background.png
create mode 100644 public/vendor/ueditor/lang/en/images/button.png
create mode 100644 public/vendor/ueditor/lang/en/images/copy.png
create mode 100644 public/vendor/ueditor/lang/en/images/deletedisable.png
create mode 100644 public/vendor/ueditor/lang/en/images/deleteenable.png
create mode 100644 public/vendor/ueditor/lang/en/images/listbackground.png
create mode 100644 public/vendor/ueditor/lang/en/images/localimage.png
create mode 100644 public/vendor/ueditor/lang/en/images/music.png
create mode 100644 public/vendor/ueditor/lang/en/images/rotateleftdisable.png
create mode 100644 public/vendor/ueditor/lang/en/images/rotateleftenable.png
create mode 100644 public/vendor/ueditor/lang/en/images/rotaterightdisable.png
create mode 100644 public/vendor/ueditor/lang/en/images/rotaterightenable.png
create mode 100644 public/vendor/ueditor/lang/en/images/upload.png
create mode 100644 public/vendor/ueditor/lang/zh-cn/images/copy.png
create mode 100644 public/vendor/ueditor/lang/zh-cn/images/localimage.png
create mode 100644 public/vendor/ueditor/lang/zh-cn/images/music.png
create mode 100644 public/vendor/ueditor/lang/zh-cn/images/upload.png
create mode 100644 public/vendor/ueditor/lang/zh-cn/zh-cn.js
create mode 100644 public/vendor/ueditor/themes/default/css/ueditor.css
create mode 100644 public/vendor/ueditor/themes/default/css/ueditor.min.css
create mode 100644 public/vendor/ueditor/themes/default/dialogbase.css
create mode 100644 public/vendor/ueditor/themes/default/images/anchor.gif
create mode 100644 public/vendor/ueditor/themes/default/images/arrow.png
create mode 100644 public/vendor/ueditor/themes/default/images/arrow_down.png
create mode 100644 public/vendor/ueditor/themes/default/images/arrow_up.png
create mode 100644 public/vendor/ueditor/themes/default/images/button-bg.gif
create mode 100644 public/vendor/ueditor/themes/default/images/cancelbutton.gif
create mode 100644 public/vendor/ueditor/themes/default/images/charts.png
create mode 100644 public/vendor/ueditor/themes/default/images/cursor_h.gif
create mode 100644 public/vendor/ueditor/themes/default/images/cursor_h.png
create mode 100644 public/vendor/ueditor/themes/default/images/cursor_v.gif
create mode 100644 public/vendor/ueditor/themes/default/images/cursor_v.png
create mode 100644 public/vendor/ueditor/themes/default/images/dialog-title-bg.png
create mode 100644 public/vendor/ueditor/themes/default/images/filescan.png
create mode 100644 public/vendor/ueditor/themes/default/images/highlighted.gif
create mode 100644 public/vendor/ueditor/themes/default/images/icons-all.gif
create mode 100644 public/vendor/ueditor/themes/default/images/icons.gif
create mode 100644 public/vendor/ueditor/themes/default/images/icons.png
create mode 100644 public/vendor/ueditor/themes/default/images/loaderror.png
create mode 100644 public/vendor/ueditor/themes/default/images/loading.gif
create mode 100644 public/vendor/ueditor/themes/default/images/lock.gif
create mode 100644 public/vendor/ueditor/themes/default/images/neweditor-tab-bg.png
create mode 100644 public/vendor/ueditor/themes/default/images/pagebreak.gif
create mode 100644 public/vendor/ueditor/themes/default/images/scale.png
create mode 100644 public/vendor/ueditor/themes/default/images/sortable.png
create mode 100644 public/vendor/ueditor/themes/default/images/spacer.gif
create mode 100644 public/vendor/ueditor/themes/default/images/sparator_v.png
create mode 100644 public/vendor/ueditor/themes/default/images/table-cell-align.png
create mode 100644 public/vendor/ueditor/themes/default/images/tangram-colorpicker.png
create mode 100644 public/vendor/ueditor/themes/default/images/toolbar_bg.png
create mode 100644 public/vendor/ueditor/themes/default/images/unhighlighted.gif
create mode 100644 public/vendor/ueditor/themes/default/images/upload.png
create mode 100644 public/vendor/ueditor/themes/default/images/videologo.gif
create mode 100644 public/vendor/ueditor/themes/default/images/word.gif
create mode 100644 public/vendor/ueditor/themes/default/images/wordpaste.png
create mode 100644 public/vendor/ueditor/themes/iframe.css
create mode 100644 public/vendor/ueditor/third-party/SyntaxHighlighter/shCore.js
create mode 100644 public/vendor/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css
create mode 100644 public/vendor/ueditor/third-party/codemirror/codemirror.css
create mode 100644 public/vendor/ueditor/third-party/codemirror/codemirror.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/adapters/mootools-adapter.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/adapters/mootools-adapter.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/adapters/prototype-adapter.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/adapters/prototype-adapter.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/adapters/standalone-framework.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/adapters/standalone-framework.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/highcharts-more.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/highcharts-more.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/highcharts.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/highcharts.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/annotations.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/annotations.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/canvas-tools.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/canvas-tools.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/data.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/data.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/drilldown.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/drilldown.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/exporting.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/exporting.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/funnel.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/funnel.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/heatmap.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/heatmap.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/map.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/map.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/no-data-to-display.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/modules/no-data-to-display.src.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/themes/dark-blue.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/themes/dark-green.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/themes/gray.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/themes/grid.js
create mode 100644 public/vendor/ueditor/third-party/highcharts/themes/skies.js
create mode 100644 public/vendor/ueditor/third-party/jquery-1.10.2.js
create mode 100644 public/vendor/ueditor/third-party/jquery-1.10.2.min.js
create mode 100644 public/vendor/ueditor/third-party/jquery-1.10.2.min.map
create mode 100644 public/vendor/ueditor/third-party/snapscreen/UEditorSnapscreen.exe
create mode 100644 public/vendor/ueditor/third-party/video-js/font/vjs.eot
create mode 100644 public/vendor/ueditor/third-party/video-js/font/vjs.svg
create mode 100644 public/vendor/ueditor/third-party/video-js/font/vjs.ttf
create mode 100644 public/vendor/ueditor/third-party/video-js/font/vjs.woff
create mode 100644 public/vendor/ueditor/third-party/video-js/video-js.css
create mode 100644 public/vendor/ueditor/third-party/video-js/video-js.min.css
create mode 100644 public/vendor/ueditor/third-party/video-js/video-js.swf
create mode 100644 public/vendor/ueditor/third-party/video-js/video.dev.js
create mode 100644 public/vendor/ueditor/third-party/video-js/video.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/Uploader.swf
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.css
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.custom.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.custom.min.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.flashonly.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.flashonly.min.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.html5only.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.html5only.min.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.min.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.withoutimage.js
create mode 100644 public/vendor/ueditor/third-party/webuploader/webuploader.withoutimage.min.js
create mode 100644 public/vendor/ueditor/third-party/zeroclipboard/ZeroClipboard.js
create mode 100644 public/vendor/ueditor/third-party/zeroclipboard/ZeroClipboard.min.js
create mode 100644 public/vendor/ueditor/third-party/zeroclipboard/ZeroClipboard.swf
create mode 100644 public/vendor/ueditor/ueditor.all.js
create mode 100644 public/vendor/ueditor/ueditor.all.min.js
create mode 100644 public/vendor/ueditor/ueditor.config.js
create mode 100644 public/vendor/ueditor/ueditor.parse.js
create mode 100644 public/vendor/ueditor/ueditor.parse.min.js
create mode 100644 public/web.config
create mode 100644 resources/css/app.css
create mode 100644 resources/js/app.js
create mode 100644 resources/js/bootstrap.js
create mode 100644 resources/js/setStock.js
create mode 100644 resources/lang/ar/admin.php
create mode 100644 resources/lang/az/admin.php
create mode 100644 resources/lang/en/admin.php
create mode 100644 resources/lang/en/auth.php
create mode 100644 resources/lang/en/pagination.php
create mode 100644 resources/lang/en/passwords.php
create mode 100644 resources/lang/en/validation.php
create mode 100644 resources/lang/es/admin.php
create mode 100644 resources/lang/fa/admin.php
create mode 100644 resources/lang/fr/admin.php
create mode 100644 resources/lang/he/admin.php
create mode 100644 resources/lang/id/admin.php
create mode 100644 resources/lang/ja/admin.php
create mode 100644 resources/lang/ko/admin.php
create mode 100644 resources/lang/ms/admin.php
create mode 100644 resources/lang/nl/admin.php
create mode 100644 resources/lang/pl/admin.php
create mode 100644 resources/lang/pt-BR/admin.php
create mode 100644 resources/lang/pt/admin.php
create mode 100644 resources/lang/ru.json
create mode 100644 resources/lang/ru/admin.php
create mode 100644 resources/lang/ru/auth.php
create mode 100644 resources/lang/ru/pagination.php
create mode 100644 resources/lang/ru/passwords.php
create mode 100644 resources/lang/ru/validation-inline.php
create mode 100644 resources/lang/ru/validation.php
create mode 100644 resources/lang/tr/admin.php
create mode 100644 resources/lang/uk/admin.php
create mode 100644 resources/lang/ur/admin.php
create mode 100644 resources/lang/vendor/ueditor/en/upload.php
create mode 100644 resources/lang/vendor/ueditor/zh_CN/upload.php
create mode 100644 resources/lang/vendor/ueditor/zh_TW/upload.php
create mode 100644 resources/lang/zh_CN.json
create mode 100644 resources/lang/zh_CN/admin.php
create mode 100644 resources/lang/zh_CN/auth.php
create mode 100644 resources/lang/zh_CN/pagination.php
create mode 100644 resources/lang/zh_CN/passwords.php
create mode 100644 resources/lang/zh_CN/validation-inline.php
create mode 100644 resources/lang/zh_CN/validation.php
create mode 100644 resources/lang/zh_TW.json
create mode 100644 resources/lang/zh_TW/admin.php
create mode 100644 resources/lang/zh_TW/auth.php
create mode 100644 resources/lang/zh_TW/pagination.php
create mode 100644 resources/lang/zh_TW/passwords.php
create mode 100644 resources/lang/zh_TW/validation-inline.php
create mode 100644 resources/lang/zh_TW/validation.php
create mode 100644 resources/views/image.blade.php
create mode 100644 resources/views/vendor/ueditor/assets.blade.php
create mode 100644 resources/views/welcome.blade.php
create mode 100644 routes/api.php
create mode 100644 routes/channels.php
create mode 100644 routes/console.php
create mode 100644 routes/laravel_admin_wechat.php
create mode 100644 routes/web.php
create mode 100644 server.php
create mode 100644 storage/app/.gitignore
create mode 100644 storage/app/public/.gitignore
create mode 100644 storage/framework/.gitignore
create mode 100644 storage/framework/cache/.gitignore
create mode 100644 storage/framework/cache/data/.gitignore
create mode 100644 storage/framework/sessions/.gitignore
create mode 100644 storage/framework/testing/.gitignore
create mode 100644 storage/framework/views/.gitignore
create mode 100644 storage/logs/.gitignore
create mode 100644 tests/CreatesApplication.php
create mode 100644 tests/Feature/ExampleTest.php
create mode 100644 tests/TestCase.php
create mode 100644 tests/Unit/ExampleTest.php
create mode 100644 webpack.mix.js
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..6537ca4
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,15 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yml,yaml}]
+indent_size = 2
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..0a3f574
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,37 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=
+APP_DEBUG=true
+APP_URL=http://localhost
+
+LOG_CHANNEL=stack
+LOG_LEVEL=debug
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=laravel
+DB_USERNAME=root
+DB_PASSWORD=
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+MEMCACHED_HOST=127.0.0.1
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+REDIS_DB=1
+REDIS_CACHE_DB=1
+
+FILESYSTEM_DRIVER=public
+OSS_ACCESS_KEY=
+OSS_SECRET_KEY=
+OSS_ENDPOINT=
+OSS_BUCKET=
+OSS_IS_CNAME=false
+OSS_CDN_HOST=
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..967315d
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+* text=auto
+*.css linguist-vendored
+*.scss linguist-vendored
+*.js linguist-vendored
+CHANGELOG.md export-ignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4f1aa71
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+/node_modules
+/public/hot
+/public/storage
+/storage/*.key
+/vendor
+.env
+.env.backup
+.phpunit.result.cache
+docker-compose.override.yml
+Homestead.json
+Homestead.yaml
+npm-debug.log
+yarn-error.log
+.idea
+.DS_Store
\ No newline at end of file
diff --git a/.styleci.yml b/.styleci.yml
new file mode 100644
index 0000000..9231873
--- /dev/null
+++ b/.styleci.yml
@@ -0,0 +1,13 @@
+php:
+ preset: laravel
+ disabled:
+ - no_unused_imports
+ finder:
+ not-name:
+ - index.php
+ - server.php
+js:
+ finder:
+ not-name:
+ - webpack.mix.js
+css: true
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7fdc34a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,122 @@
+

+
+# UzTech.Laravel
+
+> Jason.Chen , 为了构建一个健壮的底层。
+
+[TOC]
+
+## 1.安装
+
+```shell
+git pull http://git.yuzhankeji.cn/UzTech/laravel.git
+```
+
+```shell
+# 生成 laravel 密钥
+php artisan key:generate --ansi
+
+# 数据库迁移
+php artisan migrate
+
+# 数据填充
+php artisan db:seed --class=AdminPanelSeeder
+
+# api 密钥
+php artisan jwt:secret
+```
+
+手动导入 initial.sql 后台数据基础文件
+
+## 包含的基础组件
+
+> OSS文件管理包
+>
+> "jasonc/flysystem-oss": "^2.0"
+>
+> 模块化工具
+>
+> "nwidart/laravel-modules": "^8.2"
+>
+> 模块安装工具
+>
+> "joshbrw/laravel-module-installer": "^2.0"
+>
+> API 管理工具
+>
+> "jasonc/api": "^3.3"
+>
+> 后台模板
+>
+> "encore/laravel-admin": "^1.8"
+
+## 模块安装
+
+> 模块安装完毕之后,要执行 composer dump-autoload
+
+### 1.
+
+## 模块开发
+
+### 1. 创建新模块
+
+```shell
+
+php artisan make:module ModuleName
+
+```
+
+### 2. 模块目录的一些规范
+
+```
+modules/
+ ├── Blog/
+ ├── Config/ 配置目录,使用 Config::get('module_name.') 调用
+ ├── Console/ 控制台命令
+ ├── Kernel.php 执行定时任务
+ ├── Database/ 数据库
+ ├── Migrations/ 数据表单迁移
+ ├── Seeders/ 数据填充文件
+ ├── Events/ 事件目录
+ ├── Http/
+ ├── Controllers/ 控制器
+ ├── Admin/
+ ├── Api/
+ ├── Middleware/ 中间件目录
+ ├── Requests/ 请求验证
+ ├── Resources API接口资源
+ ├── Jobs/ 队列
+ ├── Listeners/ 监听器
+ ├── Models/ 模型
+ ├── Traits/ 模块内部模型使用的traits
+ ├── Providers/
+ ├── BlogServiceProvider.php
+ ├── RouteServiceProvider.php
+ ├── Resources/ 静态资源目录
+ ├── assets/
+ ├── js/
+ ├── app.js
+ ├── sass/
+ ├── app.scss
+ ├── lang/
+ ├── views/
+ ├── Routes/ 路由
+ ├── admin.php
+ ├── api.php
+ ├── Service/ 内部服务
+ ├── Traits/ 对外的traits
+ ├── composer.json
+ ├── module.json
+ ├── README.md
+```
+### 3. 定时任务相关说明
+
+```
+定时任务命令在ServiceProvider中加载
+if ($this->app->runningInConsole()) {
+ $this->commands([]);
+}
+定时任务的执行
+在模型文件夹 Console 建立 Kernel 类,类中 runCommand 执行定时任务
+$schedule->command(**)->everyMinute();
+```
\ No newline at end of file
diff --git a/app/Admin/Actions/LinkCreateAddress.php b/app/Admin/Actions/LinkCreateAddress.php
new file mode 100644
index 0000000..3ee916a
--- /dev/null
+++ b/app/Admin/Actions/LinkCreateAddress.php
@@ -0,0 +1,20 @@
+row->id);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Actions/LinkStockOrderDeliver.php b/app/Admin/Actions/LinkStockOrderDeliver.php
new file mode 100644
index 0000000..bd5f1ec
--- /dev/null
+++ b/app/Admin/Actions/LinkStockOrderDeliver.php
@@ -0,0 +1,20 @@
+row->user->id);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Actions/LinkVipOrderRefund.php b/app/Admin/Actions/LinkVipOrderRefund.php
new file mode 100644
index 0000000..eecadb1
--- /dev/null
+++ b/app/Admin/Actions/LinkVipOrderRefund.php
@@ -0,0 +1,20 @@
+row->user->username);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Controllers/AuthController.php b/app/Admin/Controllers/AuthController.php
new file mode 100644
index 0000000..3488577
--- /dev/null
+++ b/app/Admin/Controllers/AuthController.php
@@ -0,0 +1,10 @@
+
+ * @param Content $content
+ * @return Content
+ */
+ public function index(Content $content)
+ {
+ $this->content = $content->title('数据看板')->description('Description...');
+ $admin = Admin::user();
+ if ($admin->id == 1) {
+ $this->getUserData();
+ $this->getUserStockData();
+ $this->getUserStockOrderData();
+ } else {
+ $this->content->row($this->setDivider('您没有权限查看数据'));
+ }
+
+ return $this->content;
+ }
+
+ /**
+ * Notes: 获取用户数据
+ *
+ * @Author: 玄尘
+ * @Date : 2021/11/17 11:24
+ */
+ public function getUserData()
+ {
+ $this->content->row($this->setDivider('用户统计'));
+
+ $users = [
+ 'all' => [
+ 'name' => '用户总数',
+ 'color' => 'blue',
+ 'count' => User::count()
+ ],
+ 'ty' => [
+ 'name' => '月卡',
+ 'color' => 'green',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 2);
+ })->count()
+ ],
+ 'jk' => [
+ 'name' => '季卡用户数',
+ 'color' => 'red',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 3);
+ })->count()
+ ],
+ 'nk' => [
+ 'name' => '年卡用户数',
+ 'color' => 'yellow',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 4);
+ })->count(),
+ ],
+ ];
+
+ $this->content->row(function (Row $row) use ($users) {
+ foreach ($users as $user) {
+ $row->column(2, function (Column $column) use ($user) {
+ $column->append(new InfoBox(
+ $user['name'],
+ 'users',
+ $user['color'],
+ '/admin/users',
+ $user['count'],
+ ));
+
+ });
+ }
+ });
+
+ return $this->content;
+ }
+
+ /**
+ * Notes: 用户水数量
+ *
+ * @Author: 玄尘
+ * @Date: 2022/9/1 13:35
+ * @return mixed
+ */
+ public function getUserStockData()
+ {
+ $this->content->row($this->setDivider('会员水库存数'));
+
+ $all = UserStock::query()->sum('stock');
+ $holds = UserStock::query()->sum('hold');
+ $sy = bcsub($all, $holds);
+
+ $users = [
+ 'all' => [
+ 'name' => '总数',
+ 'color' => 'blue',
+ 'count' => UserStock::query()->sum('stock')
+ ],
+ 'stock' => [
+ 'name' => '已提货数',
+ 'color' => 'green',
+ 'count' => UserStock::query()->sum('hold')
+ ],
+ 'sy' => [
+ 'name' => '待提货数',
+ 'color' => 'green',
+ 'count' => $sy
+ ],
+ ];
+
+ $this->content->row(function (Row $row) use ($users) {
+ foreach ($users as $user) {
+ $row->column(2, function (Column $column) use ($user) {
+ $column->append(new InfoBox(
+ $user['name'],
+ 'goods',
+ $user['color'],
+ '/admin/stocks',
+ $user['count'],
+ ));
+
+ });
+ }
+ });
+
+ return $this->content;
+ }
+
+ /**
+ * Notes: 提货订单数量
+ *
+ * @Author: 玄尘
+ * @Date: 2022/9/1 13:51
+ */
+ public function getUserStockOrderData()
+ {
+ $this->content->row($this->setDivider('会员提货订单'));
+
+
+ $deliver = OrderItem::query()
+ ->whereHas('order', function ($q) {
+ $q->paid();
+ })->sum('qty');
+
+ $deliverd = OrderItem::query()
+ ->whereHas('order', function ($q) {
+ $q->whereIn('state', [
+ Order::STATUS_SIGNED,
+ Order::STATUS_DELIVERED,
+ ]);
+ })->sum('qty');
+
+ $users = [
+ 'all' => [
+ 'name' => '订单总数',
+ 'color' => 'blue',
+ 'count' => Order::query()->where('type', Order::TYPE_SAMPLE)->count()
+ ],
+ 'deliver' => [
+ 'name' => '待发货',
+ 'color' => 'green',
+ 'count' => Order::query()
+ ->where('type', Order::TYPE_SAMPLE)
+ ->paid()
+ ->count()
+ ],
+ 'deliverd' => [
+ 'name' => '已发货',
+ 'color' => 'green',
+ 'count' => Order::query()
+ ->where('type', Order::TYPE_SAMPLE)
+ ->whereIn('state', [
+ Order::STATUS_DELIVERED,
+ ])
+ ->count(),
+ ],
+ 'signed' => [
+ 'name' => '已签收',
+ 'color' => 'green',
+ 'count' => Order::query()
+ ->where('type', Order::TYPE_SAMPLE)
+ ->whereIn('state', [
+ Order::STATUS_SIGNED,
+ ])
+ ->count()
+ ],
+ ];
+
+ $this->content->row(function (Row $row) use ($users) {
+ foreach ($users as $user) {
+ $row->column(2, function (Column $column) use ($user) {
+ $column->append(new InfoBox(
+ $user['name'],
+ 'goods',
+ $user['color'],
+ '/admin/stocks',
+ $user['count'],
+ ));
+
+ });
+ }
+ });
+
+ return $this->content;
+ }
+
+ /**
+ * Notes : 清理模型缓存
+ *
+ * @Date : 2021/6/8 10:51 上午
+ * @Author : < Jason.C >
+ * @return string
+ */
+ public function cleanCache(): string
+ {
+ Artisan::call('modelCache:clear');
+
+ return '缓存清理成功';
+ }
+
+ public function setDivider($title)
+ {
+ return <<
+
+ {$title}
+
+
+HTML;
+ }
+
+}
diff --git a/app/Admin/Controllers/LeadyController.php b/app/Admin/Controllers/LeadyController.php
new file mode 100644
index 0000000..a790c76
--- /dev/null
+++ b/app/Admin/Controllers/LeadyController.php
@@ -0,0 +1,17 @@
+price);
+ dd(111);
+ }
+}
diff --git a/app/Admin/Controllers/Material/IndexController.php b/app/Admin/Controllers/Material/IndexController.php
new file mode 100644
index 0000000..411f5d5
--- /dev/null
+++ b/app/Admin/Controllers/Material/IndexController.php
@@ -0,0 +1,54 @@
+column('id', '编号');
+ $grid->column('title', '名称');
+ $grid->column('地址')->display(function () {
+ return $this->cover_url;
+ });
+ $grid->column('created_at', '创建时间');
+
+ return $grid;
+ }
+
+ /**
+ * Make a form builder.
+ *
+ * @return Form
+ */
+ protected function form(): Form
+ {
+ $form = new Form(new Material());
+ $form->text('title', '名称');
+
+ $form->image('cover', '图片1')->move('materials/'.date('Y/m/d'));
+
+ return $form;
+ }
+
+}
diff --git a/app/Admin/Controllers/ModuleController.php b/app/Admin/Controllers/ModuleController.php
new file mode 100644
index 0000000..deef07b
--- /dev/null
+++ b/app/Admin/Controllers/ModuleController.php
@@ -0,0 +1,100 @@
+disableBatchActions();
+ $grid->disableFilter();
+ $grid->disableCreateButton();
+ $grid->disablePagination();
+ $grid->disableActions();
+
+ $grid->column('name', '模块名称');
+ $grid->column('alias', '别名');
+ $grid->column('version', '版本');
+ $grid->column('author', '作者');
+ $grid->column('description', '模块简介');
+ $grid->column('enabled', '状态')->bool();
+ $grid->column('id', '操作')->display(function () {
+ if ($this->enabled) {
+ return sprintf('%s', route('admin.module.disable', $this->name), '禁用');
+ } else {
+ return sprintf('%s', route('admin.module.enable', $this->name), '启用');
+ }
+ });
+
+ return $grid;
+ }
+
+ /**
+ * Notes : 禁用模块
+ * @Date : 2021/3/11 1:13 下午
+ * @Author : < Jason.C >
+ * @param $name
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function disable($name): RedirectResponse
+ {
+ try {
+ $module = ModuleManager::find($name);
+
+ $module->disable();
+
+ $class = sprintf('\\%s\\%s\\%s', config('modules.namespace'), $module->getName(), $module->getName());
+
+ if (class_exists($class)) {
+ call_user_func([$class, 'uninstall']);
+ }
+
+ admin_success('Success', $name . '模块禁用成功');
+ } catch (\Exception $exception) {
+ admin_error('Error', $exception->getMessage());
+ }
+
+ return back();
+ }
+
+ /**
+ * Notes : 启用模块
+ * @Date : 2021/3/11 1:13 下午
+ * @Author : < Jason.C >
+ * @param $name
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function enable($name): RedirectResponse
+ {
+ try {
+ $module = ModuleManager::find($name);
+
+ $module->enable();
+
+ $class = sprintf('\\%s\\%s\\%s', config('modules.namespace'), $module->getName(), $module->getName());
+
+ if (class_exists($class)) {
+ call_user_func([$class, 'install']);
+ }
+
+ admin_success('Success', $name . '模块启用成功');
+ } catch (\Exception $exception) {
+ admin_error('Error', $exception->getMessage());
+ }
+
+ return back();
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Controllers/Platform/DashboardController.php b/app/Admin/Controllers/Platform/DashboardController.php
new file mode 100644
index 0000000..b17b3c6
--- /dev/null
+++ b/app/Admin/Controllers/Platform/DashboardController.php
@@ -0,0 +1,291 @@
+content = $content->title('数据看板')->description('Description...');
+ $this->getVipUserData();
+ $this->getUserStockData();
+// $this->getChannelData();
+ return $this->content;
+
+ }
+
+ /**
+ * Notes: 获取用户数据
+ *
+ * @Author: 玄尘
+ * @Date : 2021/11/17 11:24
+ */
+ public function getVipUserData(): Content
+ {
+ $this->content->row($this->setDivider('会员统计'));
+ $users = [
+ 'all' => [
+ 'name' => '总会员量',
+ 'color' => 'blue',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', '>', 1);
+ })->count()
+ ],
+ 'mo' => [
+ 'name' => '月卡会员量',
+ 'color' => 'red',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 2);
+ })->count()
+ ],
+ 'jk' => [
+ 'name' => '季卡会员量',
+ 'color' => 'red',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 3);
+ })->count()
+ ],
+ 'nk' => [
+ 'name' => '年卡会员量',
+ 'color' => 'yellow',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 4);
+ })->count(),
+ ],
+ 'onlone' => [
+ 'name' => '在线会员数',
+ 'color' => 'red',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', '>', 1);
+ })
+ ->where('status', User::STATUS_INIT)
+ ->count(),
+ ],
+ 'refund' => [
+ 'name' => '退费会员数',
+ 'color' => 'maroon',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', '>', 1);
+ })
+ ->where('status', User::STATUS_REFUND)
+ ->count(),
+ ],
+ ];
+
+ $this->content->row(function (Row $row) use ($users) {
+ foreach ($users as $user) {
+ $row->column(2, function (Column $column) use ($user) {
+ $column->append(new InfoBox(
+ $user['name'],
+ 'users',
+ $user['color'],
+ '/admin/platform/vips',
+ $user['count'],
+ ));
+
+ });
+ }
+ });
+
+ return $this->content;
+ }
+
+ /**
+ * Notes: 获取渠道数据
+ *
+ * @Author: 玄尘
+ * @Date: 2022/10/14 13:55
+ */
+ public function getChannelData()
+ {
+ $this->content->row($this->setDivider('渠道数据'));
+ $channels = UserChannel::query()->get();
+
+ $users = [
+ 'all' => [
+ 'name' => '总会员量',
+ 'color' => 'blue',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', '>', 2);
+ })
+ ],
+ 'jk' => [
+ 'name' => '季卡会员量',
+ 'color' => 'red',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 3);
+ })
+ ],
+ 'nk' => [
+ 'name' => '年卡会员量',
+ 'color' => 'yellow',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 4);
+ }),
+ ],
+ 'cs' => [
+ 'name' => '创始会员量',
+ 'color' => 'aqua',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 5);
+ }),
+ ],
+ 'hh' => [
+ 'name' => '合伙人量',
+ 'color' => 'navy',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 6);
+ }),
+ ],
+ // 'onlone' => [
+ // 'name' => '在线会员数',
+ // 'color' => 'red',
+ // 'count' => User::query()
+ // ->whereHas('identities', function ($q) {
+ // $q->where('id', '>', 2);
+ // })
+ // ->where('status', User::STATUS_INIT),
+ // ],
+ 'refund' => [
+ 'name' => '退费会员数',
+ 'color' => 'maroon',
+ 'count' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', '>', 2);
+ })
+ ->where('status', User::STATUS_REFUND),
+ ],
+ ];
+ foreach ($channels as $channel) {
+ $this->channel_id = $channel->id;
+ $this->content->row(function (Row $row) use ($channel, $users) {
+ foreach ($users as $user) {
+ $row->column(2, function (Column $column) use ($channel, $user) {
+ $column->append(new InfoBox(
+ $channel->name.'-'.$user['name'],
+ 'users',
+ $user['color'],
+ '/admin/platform/vips?channel_id='.$channel->id,
+ (clone $user['count'])->where('channel_id', $channel->id)->count(),
+ ));
+ });
+ }
+ });
+ }
+
+ return $this->content;
+ }
+
+ /**
+ * Notes: 用户水数量
+ *
+ * @Author: 玄尘
+ * @Date: 2022/9/1 13:35
+ * @return mixed
+ */
+ public function getUserStockData()
+ {
+ $this->content->row($this->setDivider('会员库存数'));
+
+ $all = UserStock::query()->sum('stock');
+ $holds = UserStock::query()->sum('hold');
+ $sy = bcsub($all, $holds);
+
+ $users = [
+ 'all' => [
+ 'name' => '累计总箱数',
+ 'color' => 'blue',
+ 'count' => $all
+ ],
+ 'stock' => [
+ 'name' => '累计提货数',
+ 'color' => 'green',
+ 'count' => $holds
+ ],
+ 'sy' => [
+ 'name' => '累计剩余',
+ 'color' => 'green',
+ 'count' => $sy
+ ],
+ 'online' => [
+ 'name' => '线上发货',
+ 'color' => 'green',
+ 'count' => OrderItem::query()
+ ->whereHas('order', function ($q) {
+ $q->where('type', Order::TYPE_SAMPLE)
+ ->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ ])->where('channel', Order::CHANNEL_USER);
+ })
+ ->sum('qty')
+ ],
+ 'offline' => [
+ 'name' => '线下发货',
+ 'color' => 'green',
+ 'count' => OrderItem::query()
+ ->whereHas('order', function ($q) {
+ $q->where('type', Order::TYPE_SAMPLE)
+ ->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ ])->where('channel', Order::CHANNEL_SYSTEM);
+ })
+ ->sum('qty')
+ ],
+ ];
+
+ $this->content->row(function (Row $row) use ($users) {
+ foreach ($users as $user) {
+ $row->column(2, function (Column $column) use ($user) {
+ $column->append(new InfoBox(
+ $user['name'],
+ 'goods',
+ $user['color'],
+ '/admin/users/stocks',
+ $user['count'],
+ ));
+
+ });
+ }
+ });
+
+ return $this->content;
+ }
+
+ public function setDivider($title)
+ {
+ return <<
+
+ {$title}
+
+
+HTML;
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Controllers/Platform/ExperienceController.php b/app/Admin/Controllers/Platform/ExperienceController.php
new file mode 100644
index 0000000..fb1bbb6
--- /dev/null
+++ b/app/Admin/Controllers/Platform/ExperienceController.php
@@ -0,0 +1,140 @@
+disableCreateButton();
+ $grid->model()->with(['symptoms', 'user', 'user.sign', 'user.userStock'])
+ ->withCount(['logs', 'surveys'])
+ ->where('type', GoutCase::TYPE_TY);
+
+ $grid->actions(function (Grid\Displayers\Actions $actions) {
+ $actions->disableEdit();
+ $actions->disableDelete();
+ $actions->disableView();
+
+ if ($actions->row->canAudit()) {
+ $actions->add(new Audit());
+ }
+
+ if ($actions->row->manage_status == GoutCase::MANAGE_STATUS_DELIVER) {
+ $actions->add(new LinkStockOrderDeliver());
+ }
+ if ($actions->row->manage_status == GoutCase::MANAGE_STATUS_REFUND) {
+ $actions->add(new LinkVipOrderRefund());
+ }
+ });
+
+ $grid->filter(function (Grid\Filter $filter) {
+ $filter->column(1 / 2, function (Grid\Filter $filter) {
+ $filter->like('name', '姓名');
+ $filter->equal('mobile', '手机号');
+ });
+ $filter->column(1 / 2, function (Grid\Filter $filter) {
+ $filter->equal('status', '状态')->select((new GoutCase())->status_map);
+ });
+ });
+
+ $grid->column('id', '#ID#');
+ $grid->column('name', '姓名');
+ $grid->column('mobile', '手机号');
+ $grid->column('建档信息')
+ ->display(function ($title, $column) {
+ return '查看';
+ })->modal('建档信息', CaseData::class);
+
+ $grid->column('报告数据')
+ ->display(function ($title, $column) {
+ return '查看';
+ })->modal('亚健康数据', CaseSymptoms::class);
+
+ $grid->column('symptoms', '症状')
+ ->display(function () {
+ return $this->symptoms->pluck('title');
+ })->label();
+ $grid->column('是否关注')
+ ->display(function () {
+ return $this->user->isOfficialSubscribe();
+ })
+ ->bool();
+//
+ $grid->column('缴纳保证金')
+ ->display(function () {
+ return $this->user->isExperiencePrice() ? '已缴' : '待缴';
+ })
+ ->label([
+ '已缴' => 'primary',
+ '待缴' => 'success',
+ ]);
+
+ $grid->column('是否收货')
+ ->display(function () {
+ return $this->user->userStock->stock_order_status_text;
+ })
+ ->label(UserStock::STOCK_ORDER_STATUS_MAP);
+
+ $grid->column('is_coupon', '是否发券')
+ ->using(GoutCase::COUPONS)
+ ->label(GoutCase::COUPONS_MAP);
+
+ $grid->column('喝水打卡')
+ ->display(function () {
+ return $this->user->sign->counts;
+ });
+//
+ $grid->column('完结报告')
+ ->display(function () {
+ return $this->logs_count > 1 ? '已上传' : '待上传';
+ })
+ ->label([
+ '已上传' => 'primary',
+ '待上传' => 'success',
+ ]);
+//
+ $grid->column('是否退保')
+ ->display(function () {
+ return $this->user->isExperiencePriceRefund() ? '是' : '否';
+ })
+ ->label([
+ '是' => 'primary',
+ '否' => 'success',
+ ]);
+ $grid->column('好转反馈')
+ ->display(function () {
+ return $this->surveys_count;
+ });
+
+ $grid->column('manage_status', '状态')
+ ->using((new GoutCase())->manage_status_map)
+ ->label([
+ GoutCase::MANAGE_STATUS_INIT => 'primary',
+ GoutCase::MANAGE_STATUS_DELIVER => 'success',
+ GoutCase::MANAGE_STATUS_REFUND => 'danger',
+ GoutCase::MANAGE_STATUS_PASS => 'info',
+ GoutCase::MANAGE_STATUS_FINISH => 'warning',
+ ]);
+
+ $grid->column('created_at', '创建时间');
+
+ return $grid;
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Controllers/Platform/VipController.php b/app/Admin/Controllers/Platform/VipController.php
new file mode 100644
index 0000000..90f7f02
--- /dev/null
+++ b/app/Admin/Controllers/Platform/VipController.php
@@ -0,0 +1,257 @@
+
+ * @return Grid
+ */
+ public function grid(): Grid
+ {
+ $grid = new Grid(new User());
+
+ $grid->actions(function (Grid\Displayers\Actions $actions) {
+ $actions->disableEdit();
+ $actions->disableDelete();
+ $actions->disableView();
+ if ($actions->row->status == User::STATUS_INIT) {
+ $actions->add(new UserStatusRefund());
+ }
+ if ($actions->row->status == User::STATUS_REFUND) {
+ $actions->add(new UserStatusInit());
+ }
+
+ $actions->add(new JoinIdentity());
+ $actions->add(new AddUserRemark());
+ $actions->add(new LinkCreateAddress());
+
+ });
+
+ $grid->quickSearch('username')->placeholder('快速搜索用户名');
+
+ $grid->filter(function (Grid\Filter $filter) {
+ $filter->column(1 / 3, function (Grid\Filter $filter) {
+ $filter->like('username', '用户名');
+ $filter->equal('channel_id', '渠道')->select(UserChannel::pluck('name', 'id'));
+ });
+
+ $filter->column(1 / 3, function (Grid\Filter $filter) {
+ $filter->like('info.nickname', '用户昵称');
+ });
+ $filter->column(1 / 3, function (Grid\Filter $filter) {
+ $filter->equal('identities.id', '身份')
+ ->select(Identity::query()->where('id', '>', 1)->pluck('name', 'id'));
+ });
+ });
+
+ $grid->model()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', '>', 1);
+ })
+ ->withCount(['addresses', 'logs'])
+ ->with(['info', 'parent', 'identities', 'addresses', 'vipOrders', 'userStock', 'logs']);
+
+ //序号 姓名 手机号 会员类型 会员编号 缴费金额 加入时间 状态(正常,退费) 用箱数 提货箱数 剩余箱数
+ $grid->column('id', '序号');
+ $grid->column('username', '手机号');
+ $grid->column('identities', '会员类型')
+ ->display(function () {
+ $data = [];
+ foreach ($this->identities as $identity) {
+ $data[] = $identity->name;
+ }
+ return $data;
+ })
+ ->label();
+ $grid->column('serial', '会员编号')
+ ->display(function () {
+ $data = [];
+ foreach ($this->identities as $identity) {
+ $data[] = $identity->serial_prefix.$identity->getOriginal('pivot_serial');
+ }
+ return $data;
+ })
+ ->label();
+
+ $grid->column('price', '缴费金额')
+ ->display(function () {
+ return $this->getOpenVipPrices();
+ })
+ ->label();
+
+ $grid->column('created_at', '加入时间');
+ $grid->column('status', '状态')
+ ->using(User::STATUS)
+ ->label();
+ $grid->column('userStock.stock', '总箱数');
+ $grid->column('userStock.hold', '提货箱数');
+ $grid->column('userStock.residue', '剩余箱数');
+ $grid->column('addresses_count', '收货地址')
+ ->link(function () {
+ return route('admin.mall.addresses.index', ['user_id' => $this->id]);
+ }, '_self');
+ $grid->column('logs_count', '备注')
+ ->modal('备注信息', UserLog::class);
+
+ $grid->disableExport(false);
+ $grid->export(function ($export) {
+ $export->column('identities', function ($value, $original) {
+ return strip_tags($value);
+ });
+ $export->column('serial', function ($value, $original) {
+ return strip_tags($value);
+ });
+ $export->column('price', function ($value, $original) {
+ return strip_tags($value);
+ });
+ $export->column('status', function ($value, $original) {
+ return strip_tags($value);
+ });
+
+// $export->column('use_way', function ($value, $original) {
+// return strip_tags($value);
+// });
+// $export->column('所属用户', function ($value, $original) {
+// return iconv('gb2312//ignore', 'utf-8',
+// iconv('utf-8', 'gb2312//ignore', strip_tags(str_replace(" ", " ", $value))));
+// });
+//
+// $export->column('couponGrant.code', function ($value, $original) {
+// return $value."\n";
+// });
+
+ $export->except(['addresses_count', 'logs_count']);
+
+ $export->filename($this->title.date("YmdHis"));
+ });
+
+ return $grid;
+ }
+
+ /**
+ * Notes : 编辑表单
+ *
+ * @Date : 2021/7/15 5:09 下午
+ * @Author :
+ * @return Form
+ * @throws Exception
+ */
+ public function form(): Form
+ {
+// if (! config('user.create_user_by_admin')) {
+// throw new Exception('不运允许操作用户');
+// }
+
+ Admin::script(" $(document.body).append(`
+HTML;
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/Routes/material.php b/app/Admin/Routes/material.php
new file mode 100644
index 0000000..6524265
--- /dev/null
+++ b/app/Admin/Routes/material.php
@@ -0,0 +1,10 @@
+ 'Material',
+], function (Router $router) {
+ $router->resource('materials', 'IndexController');
+
+});
diff --git a/app/Admin/Routes/modules.php b/app/Admin/Routes/modules.php
new file mode 100644
index 0000000..92206a0
--- /dev/null
+++ b/app/Admin/Routes/modules.php
@@ -0,0 +1,12 @@
+ 'modules',
+], function (Router $router) {
+ $router->get('', 'ModuleController@index');
+ $router->get('{name}/disable', 'ModuleController@disable')->name('module.disable');
+ $router->get('{name}/enable', 'ModuleController@enable')->name('module.enable');
+});
diff --git a/app/Admin/Routes/platform.php b/app/Admin/Routes/platform.php
new file mode 100644
index 0000000..ae2d445
--- /dev/null
+++ b/app/Admin/Routes/platform.php
@@ -0,0 +1,15 @@
+ 'Platform',
+ 'prefix' => 'platform',
+], function (Router $router) {
+ $router->resource('experiences', 'ExperienceController');//体验官审核
+ $router->resource('vip_orders', 'VipOrderController');//体验官审核
+ $router->resource('vips', 'VipController');//会员管理
+ $router->get('identity_stock', 'VipController@stock')->name('platform.identity_stock');;//会员管理
+ $router->get('dashboard', 'DashboardController@index');
+
+});
diff --git a/app/Admin/Routes/test.php b/app/Admin/Routes/test.php
new file mode 100644
index 0000000..0437915
--- /dev/null
+++ b/app/Admin/Routes/test.php
@@ -0,0 +1,12 @@
+ 'test',
+], function (Router $router) {
+ $router->get('', 'TestController@index');
+ $router->get('truncate', 'TestController@truncate');
+ $router->get('leady', 'LeadyController@index');
+});
diff --git a/app/Admin/Traits/WithUploads.php b/app/Admin/Traits/WithUploads.php
new file mode 100644
index 0000000..8db1613
--- /dev/null
+++ b/app/Admin/Traits/WithUploads.php
@@ -0,0 +1,103 @@
+
+ * @param \Encore\Admin\Form $form
+ * @param string $filed
+ * @param string $label
+ */
+ public function cover(Renderable $form, string $filed = 'cover', string $label = '封面图片')
+ {
+ $cover = $form->image($filed, $label)
+ ->move('images/'.date('Y/m/d'))
+ ->uniqueName()
+ ->removable()
+ ->retainable();
+
+ $waterConfig = config('admin.image_water');
+
+ if (! empty($waterConfig)) {
+ $cover->insert(...$waterConfig);
+ }
+
+ $coverThumb = config('admin.cover_thumb');
+
+ if (! empty($coverThumb)) {
+ $cover->thumbnail($coverThumb);
+ }
+ }
+
+ /**
+ * Notes: 上传视频
+ *
+ * @Author: 玄尘
+ * @Date: 2022/9/30 9:44
+ * @param Renderable $form
+ * @param string $filed
+ * @param string $label
+ */
+ public function video(Renderable $form, string $filed = 'path', string $label = '视频')
+ {
+ $form->file($filed, $label)
+ ->move('videos/'.date('Y/m/d'))
+ ->uniqueName()
+ ->removable()
+ ->downloadable()
+ ->retainable();
+ }
+
+ /**
+ * Notes : 统一的多图上传
+ *
+ * @Date : 2021/4/25 2:06 下午
+ * @Author : < Jason.C >
+ * @param \Encore\Admin\Form $form
+ * @param string $filed
+ * @param string $label
+ */
+ public function pictures(Renderable $form, string $filed = 'pictures', string $label = '多图轮播')
+ {
+ $pictures = $form->multipleImage($filed, $label)
+ ->move('images/'.date('Y/m/d'))
+ ->uniqueName()
+ ->removable()
+ ->retainable();
+
+ // 多图如果开启排序的话,会报错,暂时没由解决办法 ->sortable()
+ $waterConfig = config('admin.image_water');
+
+ if (! empty($waterConfig)) {
+ $pictures->insert(...$waterConfig);
+ }
+ }
+
+ /**
+ * Notes : 统一的附件上传
+ *
+ * @Date : 2021/4/25 3:03 下午
+ * @Author : < Jason.C >
+ * @param \Illuminate\Contracts\Support\Renderable $form
+ * @param string $filed
+ * @param string $label
+ */
+ public function attachments(Renderable $form, string $filed = 'attachments', string $label = '内容附件')
+ {
+ $form->multipleFile($filed, $label)
+ ->move('attachments/'.date('Y/m/d'))
+ ->uniqueName()
+ ->removable()
+ ->retainable()
+ ->sortable();
+ }
+
+}
\ No newline at end of file
diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php
new file mode 100644
index 0000000..8731e84
--- /dev/null
+++ b/app/Admin/bootstrap.php
@@ -0,0 +1,62 @@
+
+ * Bootstraper for Admin.
+ * Here you can remove builtin form field:
+ * Encore\Admin\Form::forget(['map', 'editor']);
+ * Or extend custom form field:
+ * Encore\Admin\Form::extend('php', PHPEditor::class);
+ * Or require js and css assets:
+ * Admin::css('/packages/prettydocs/css/styles.css');
+ * Admin::js('/packages/prettydocs/js/main.js');
+ */
+
+use App\Admin\Extensions\CleanCache;
+use Encore\Admin\Facades\Admin;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+use Encore\Admin\Widgets\Navbar;
+
+Form::forget(['map', 'editor']);
+
+Admin::navbar(function (Navbar $navbar) {
+ $navbar->right(new CleanCache());
+ $navbar->right(new Navbar\Fullscreen());
+});
+
+Form::init(function (Form $form) {
+ $form->disableEditingCheck();
+ $form->disableCreatingCheck();
+ $form->disableViewCheck();
+
+ $form->tools(function (Form\Tools $tools) {
+ $tools->disableView();
+ // $tools->disableDelete();
+ // $tools->disableList();
+ });
+});
+
+Show::init(function (Show $show) {
+ $show->panel()
+ ->tools(function ($tools) {
+ // $tools->disableEdit();
+ // $tools->disableList();
+ $tools->disableDelete();
+ });;
+});
+
+Grid::init(function (Grid $grid) {
+ $grid->disableExport();
+ $grid->actions(function (Grid\Displayers\Actions $actions) {
+ $actions->disableView();
+ });
+ $grid->disableBatchActions();
+ $grid->filter(function ($filter) {
+ $filter->disableIdFilter();
+ });
+ // $grid->expandFilter();
+});
+
diff --git a/app/Admin/routes.php b/app/Admin/routes.php
new file mode 100644
index 0000000..29c3e68
--- /dev/null
+++ b/app/Admin/routes.php
@@ -0,0 +1,24 @@
+ config('admin.route.prefix'),
+ 'namespace' => config('admin.route.namespace'),
+ 'middleware' => config('admin.route.middleware'),
+ 'as' => config('admin.route.as'),
+], function (Router $router) {
+
+ $router->get('/', 'HomeController@index')->name('home');
+
+ $router->get('clean_cache', 'HomeController@cleanCache')->name('cleanCache');
+
+ foreach (glob(admin_path('Routes') . '/*.php') as $routeFile) {
+ require $routeFile;
+ }
+
+});
diff --git a/app/Api/Controllers/Controller.php b/app/Api/Controllers/Controller.php
new file mode 100644
index 0000000..c2b8958
--- /dev/null
+++ b/app/Api/Controllers/Controller.php
@@ -0,0 +1,12 @@
+whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ])
+ ->count();
+ $donate = (new User())->getALlJzCount();
+
+ $orderQuery = Order::query()->where('type', Order::TYPE_NORMAL);
+
+ /**
+ *
+ */
+ $amount = (clone $orderQuery)->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ])->sum('amount');
+
+ $data = [
+ 'activities' => [
+ 'all' => $all,
+ 'donate' => $donate,
+ 'residue' => bcsub($all, $donate),
+ ],
+ 'orders' => [
+ 'users' => User::query()->whereHas('orders', function ($q) {
+ $q->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ])->where('type', Order::TYPE_NORMAL);
+ })->count(),
+
+ 'all' => (clone $orderQuery)
+ ->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ])->count(),
+ 'paid' => (clone $orderQuery)->where('state', Order::STATUS_PAID)->count(),
+ 'delivered' => (clone $orderQuery)->where('state', Order::STATUS_DELIVERED)->count(),
+ 'signed' => (clone $orderQuery)->where('state', Order::STATUS_SIGNED)->count(),
+ 'completed' => (clone $orderQuery)->where('state', Order::STATUS_COMPLETED)->count(),
+ 'amount' => floatval($amount),
+ ],
+ 'users' => [
+ 'all' => User::count(),
+ 'yk' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 2);
+ })->count(),
+ 'jk' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 3);
+ })->count(),
+ 'nk' => User::query()
+ ->whereHas('identities', function ($q) {
+ $q->where('id', 4);
+ })->count(),
+ ]
+ ];
+
+ return $this->success($data);
+ }
+
+ /**
+ * Notes: description
+ *
+ * @Author: 玄尘
+ * @Date: 2023/1/5 13:50
+ */
+ public function orders(Request $request)
+ {
+ $status = $request->status ?? 'all';
+
+ $orders = Order::query()
+ ->where('type', Order::TYPE_NORMAL)
+ ->when($status !== 'all', function ($q) use ($status) {
+ $q->where('state', $status);
+ }, function ($q) {
+ $q->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ]);
+ })
+ ->paginate();
+
+ return $this->success(new OrderDataCollection($orders));
+ }
+
+ /**
+ * Notes: description
+ *
+ * @Author: 玄尘
+ * @Date: 2023/1/5 14:13
+ */
+ public function users()
+ {
+ $users = User::query()
+ ->withCount([
+ 'orders' => function ($q) {
+ $q->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ]);
+ }
+ ])
+ ->withSum([
+ 'orders' => function ($q) {
+ $q->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ]);
+ }
+ ], 'amount')
+ ->whereHas('orders', function ($q) {
+ $q->whereIn('state', [
+ Order::STATUS_PAID,
+ Order::STATUS_DELIVERED,
+ Order::STATUS_SIGNED,
+ Order::STATUS_COMPLETED,
+ ])->where('type', Order::TYPE_NORMAL);
+ })
+ ->paginate();
+ return $this->success(new UserDataCollection($users));
+
+ }
+}
diff --git a/app/Api/Controllers/IndexController.php b/app/Api/Controllers/IndexController.php
new file mode 100644
index 0000000..8e3c1e2
--- /dev/null
+++ b/app/Api/Controllers/IndexController.php
@@ -0,0 +1,12 @@
+success('Json Api is ready');
+ }
+}
diff --git a/app/Api/Controllers/Wechat/IndexController.php b/app/Api/Controllers/Wechat/IndexController.php
new file mode 100644
index 0000000..cfd7cdb
--- /dev/null
+++ b/app/Api/Controllers/Wechat/IndexController.php
@@ -0,0 +1,63 @@
+server->push(function ($message) {
+ switch ($message['MsgType']) {
+ case 'event':
+ return '收到事件消息';
+ break;
+ case 'text':
+ return '收到文字消息';
+ break;
+ case 'image':
+ return '收到图片消息';
+ break;
+ case 'voice':
+ return '收到语音消息';
+ break;
+ case 'video':
+ return '收到视频消息';
+ break;
+ case 'location':
+ return '收到坐标消息';
+ break;
+ case 'link':
+ return '收到链接消息';
+ break;
+ case 'file':
+ return '收到文件消息';
+ // ... 其它消息
+ default:
+ return '收到其它消息';
+ break;
+ }
+
+ // ...
+ });
+
+ $app->server->push(EventMessageHandler::class, Message::EVENT);
+
+ return $app->server->serve();
+ }
+}
diff --git a/app/Api/Resources/BaseCollection.php b/app/Api/Resources/BaseCollection.php
new file mode 100644
index 0000000..b9b721b
--- /dev/null
+++ b/app/Api/Resources/BaseCollection.php
@@ -0,0 +1,21 @@
+ $this->currentPage(),
+ 'total_page' => $this->lastPage(),
+ 'per_page' => $this->perPage(),
+ 'has_more' => $this->hasMorePages(),
+ 'total' => $this->total(),
+ ];
+ }
+
+}
diff --git a/app/Api/Resources/Order/OrderDataCollection.php b/app/Api/Resources/Order/OrderDataCollection.php
new file mode 100644
index 0000000..8d22182
--- /dev/null
+++ b/app/Api/Resources/Order/OrderDataCollection.php
@@ -0,0 +1,32 @@
+ $this->collection->map(function ($order) {
+ return [
+ 'order_no' => $order->order_no,
+ 'user' => new UserBaseResource($order->user),
+ 'express' => new OrderExpressResource($order->express),
+ 'qty' => $order->items()->sum('qty'),
+ 'amount' => $order->amount,
+ 'freight' => $order->freight,
+ 'total' => $order->total,
+ 'type' => $order->type_text,
+ 'state' => $order->state_text,
+ ];
+ }),
+ 'page' => $this->page(),
+ ];
+ }
+
+}
\ No newline at end of file
diff --git a/app/Api/Resources/User/UserBaseResource.php b/app/Api/Resources/User/UserBaseResource.php
new file mode 100644
index 0000000..f3d63b4
--- /dev/null
+++ b/app/Api/Resources/User/UserBaseResource.php
@@ -0,0 +1,20 @@
+ $this->id,
+ 'username' => $this->username,
+ 'nickname' => $this->info->nickname,
+ 'avatar' => $this->info->avatar ?? '',
+ ];
+ }
+
+}
diff --git a/app/Api/Resources/User/UserDataCollection.php b/app/Api/Resources/User/UserDataCollection.php
new file mode 100644
index 0000000..2299ddd
--- /dev/null
+++ b/app/Api/Resources/User/UserDataCollection.php
@@ -0,0 +1,20 @@
+ $this->collection->map(function ($info) {
+ return new UserDataResource($info);
+ }),
+ 'page' => $this->page(),
+ ];
+ }
+
+}
\ No newline at end of file
diff --git a/app/Api/Resources/User/UserDataResource.php b/app/Api/Resources/User/UserDataResource.php
new file mode 100644
index 0000000..57e3a70
--- /dev/null
+++ b/app/Api/Resources/User/UserDataResource.php
@@ -0,0 +1,22 @@
+ $this->id,
+ 'username' => $this->username,
+ 'nickname' => $this->info->nickname,
+ 'orders_count' => $this->orders_count,
+ 'orders_sum_amount' => $this->orders_sum_amount,
+ 'avatar' => $this->info->avatar ?? '',
+ ];
+ }
+
+}
diff --git a/app/Api/Routes/data.php b/app/Api/Routes/data.php
new file mode 100644
index 0000000..349e870
--- /dev/null
+++ b/app/Api/Routes/data.php
@@ -0,0 +1,14 @@
+ 'Data',
+ 'middleware' => config('api.route.middleware'),
+], function (Router $router) {
+ $router->get('data', 'IndexController@index');
+ $router->get('data/orders', 'IndexController@orders');
+ $router->get('data/users', 'IndexController@users');
+});
+
diff --git a/app/Api/Routes/wechat.php b/app/Api/Routes/wechat.php
new file mode 100644
index 0000000..4c2bcad
--- /dev/null
+++ b/app/Api/Routes/wechat.php
@@ -0,0 +1,12 @@
+ 'Wechat',
+ 'middleware' => config('api.route.middleware'),
+], function (Router $router) {
+ $router->any('wechat', 'IndexController@serve')->name('wechat');
+});
+
diff --git a/app/Api/WechatHandlers/EventMessageHandler.php b/app/Api/WechatHandlers/EventMessageHandler.php
new file mode 100644
index 0000000..4c38c34
--- /dev/null
+++ b/app/Api/WechatHandlers/EventMessageHandler.php
@@ -0,0 +1,142 @@
+Event)) {
+ $this->payload = $payload;
+ return call_user_func_array([$this, $payload->Event], []);
+ } else {
+ // return '暂不支持的消息类型';
+ }
+ }
+
+
+ /**
+ * Notes: 关注事件
+ *
+ * @Author: 玄尘
+ * @Date: 2022/7/27 9:41
+ */
+ private function subscribe()
+ {
+ $app = app('wechat.official_account');
+ $user = $app->user->get($this->payload->FromUserName);
+
+ if ($user->unionid) {
+ $wechatUsers = UserWechat::query()
+ ->where('unionid', $user->unionid)
+ ->get();
+ if ($wechatUsers->isNotEmpty()) {
+ foreach ($wechatUsers as $wechatUser) {
+ if ($wechatUser->official) {
+ if ($wechatUser->official->subscribe != 1) {
+ $wechatUser->official->update([
+ 'subscribe' => 1,
+ 'subscribed_at' => Carbon::parse($user->subscribe_time)->toDateTimeString(),
+ ]);
+ }
+ } else {
+ $wechatUser->official()->create([
+ 'openid' => $this->payload->FromUserName,
+ 'subscribe' => 1,
+ 'subscribed_at' => Carbon::parse($user->subscribe_time)->toDateTimeString(),
+ ]);
+ }
+
+ }
+ }
+
+ //插入关注数据
+ $this->setUserSubscribe($user->unionid, $this->payload->FromUserName, 1);
+
+ } else {
+ // 先查找用户是否存在,不存在再注册
+ $officialUsers = UserWechatOfficial::query()
+ ->where('openid', $this->payload->FromUserName)
+ ->get();
+
+ //设置总表uniond
+ if ($officialUsers->isNotEmpty()) {
+ foreach ($officialUsers as $officialUser) {
+ if (! $officialUser->userWechat->unionid && $user->unionid) {
+ $officialUser->userWechat->update([
+ 'unionid' => $user->unionid
+ ]);
+ }
+
+ if ($officialUser->subscribe != 1) {
+ $officialUser->update([
+ 'subscribe' => 1,
+ 'subscribed_at' => Carbon::parse($user->subscribe_time)->toDateTimeString(),
+ ]);
+ }
+ }
+ }
+ }
+
+ return $this->firstSubscribeMessage();
+ }
+
+ /**
+ * Notes: 取消关注事件
+ *
+ * @Author: 玄尘
+ * @Date: 2022/7/27 9:41
+ */
+ private function unsubscribe()
+ {
+ $officialUsers = UserWechatOfficial::where('openid', $this->payload->FromUserName)->get();
+ if ($officialUsers->isNotEmpty()) {
+ foreach ($officialUsers as $officialUser) {
+ $officialUser->update([
+ 'subscribe' => 0,
+ 'subscribed_at' => null,
+ ]);
+
+ //设置取消关注
+ if ($officialUser->userWechat) {
+ $this->setUserSubscribe($officialUser->userWechat->unionid, $officialUser->openid, 0);
+ }
+ }
+ }
+ }
+
+ /**
+ * Notes: 关注返回的消息
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/2 11:37
+ * @return Text
+ */
+ private function firstSubscribeMessage()
+ {
+ $officialUser = UserWechatOfficial::where('openid', $this->payload->FromUserName)->first();
+ $text = new Text('扎西德勒!感谢关注锶源昆仑。锶源昆仑天然饮用水,水源地位于海拔4300米的昆仑山,水中富含镁离子、锶元素、钙元素等微量元素且氘含量低,稀世罕见,仅供30000人饮用。
+参与打卡“锶享体验官”活动,请点击公众号菜单上的按钮“锶享体验官”进入活动,来申请喝水体验官吧!');
+ if ($officialUser && $officialUser->userWechat) {
+ $nickname = $officialUser->userWechat->nickname;
+ $text = new Text('扎西德勒!'.$nickname.',感谢关注锶源昆仑。锶源昆仑天然饮用水,水源地位于海拔4300米的昆仑山,水中富含镁离子、锶元素、钙元素等微量元素且氘含量低,稀世罕见,仅供30000人饮用。
+参与打卡“锶享体验官”活动,请点击公众号菜单上的按钮“锶享体验官”进入活动,来申请喝水体验官吧!');
+ }
+
+
+ return $text;
+ }
+
+}
diff --git a/app/Api/WechatHandlers/FileMessageHandler.php b/app/Api/WechatHandlers/FileMessageHandler.php
new file mode 100644
index 0000000..33a4a21
--- /dev/null
+++ b/app/Api/WechatHandlers/FileMessageHandler.php
@@ -0,0 +1,27 @@
+ToUserName;
+ $payload->FromUserName;
+ $payload->CreateTime;
+ $payload->MsgId;
+
+ $payload->Title;
+ $payload->Description;
+ $payload->FileKey;
+ $payload->FileMd5;
+ $payload->FileTotalLen;
+
+ return '文件消息';
+ }
+
+}
diff --git a/app/Api/WechatHandlers/ImageMessageHandler.php b/app/Api/WechatHandlers/ImageMessageHandler.php
new file mode 100644
index 0000000..c8b95d8
--- /dev/null
+++ b/app/Api/WechatHandlers/ImageMessageHandler.php
@@ -0,0 +1,24 @@
+ToUserName;
+// $payload->FromUserName;
+// $payload->CreateTime;
+// $payload->MsgId;
+//
+// $payload->MediaId;
+// $payload->PicUrl;
+
+ return '图片消息';
+ }
+
+}
diff --git a/app/Api/WechatHandlers/LinkMessageHandler.php b/app/Api/WechatHandlers/LinkMessageHandler.php
new file mode 100644
index 0000000..d272b66
--- /dev/null
+++ b/app/Api/WechatHandlers/LinkMessageHandler.php
@@ -0,0 +1,25 @@
+ToUserName;
+ $payload->FromUserName;
+ $payload->CreateTime;
+ $payload->MsgId;
+
+ $payload->Title;
+ $payload->Description;
+ $payload->Url;
+
+ return '链接消息';
+ }
+
+}
diff --git a/app/Api/WechatHandlers/LocationMessageHandler.php b/app/Api/WechatHandlers/LocationMessageHandler.php
new file mode 100644
index 0000000..637b0d8
--- /dev/null
+++ b/app/Api/WechatHandlers/LocationMessageHandler.php
@@ -0,0 +1,25 @@
+ToUserName;
+ $payload->FromUserName;
+ $payload->CreateTime;
+ $payload->MsgId;
+
+ $payload->Latitude;
+ $payload->Longitude;
+ $payload->Precision;
+
+ return '上报位置消息';
+ }
+
+}
diff --git a/app/Api/WechatHandlers/ShortVideoMessageHandler.php b/app/Api/WechatHandlers/ShortVideoMessageHandler.php
new file mode 100644
index 0000000..a502f26
--- /dev/null
+++ b/app/Api/WechatHandlers/ShortVideoMessageHandler.php
@@ -0,0 +1,24 @@
+ToUserName;
+ $payload->FromUserName;
+ $payload->CreateTime;
+ $payload->MsgId;
+
+ $payload->MediaId;
+ $payload->ThumbMediaId;
+
+ return '短视频消息';
+ }
+
+}
diff --git a/app/Api/WechatHandlers/TextMessageHandler.php b/app/Api/WechatHandlers/TextMessageHandler.php
new file mode 100644
index 0000000..ea1525e
--- /dev/null
+++ b/app/Api/WechatHandlers/TextMessageHandler.php
@@ -0,0 +1,16 @@
+ToUserName;
+ $payload->FromUserName;
+ $payload->CreateTime;
+ $payload->MsgId;
+
+ $payload->MediaId;
+ $payload->ThumbMediaId;
+
+ return '视频消息';
+ }
+
+}
diff --git a/app/Api/WechatHandlers/VoiceMessageHandler.php b/app/Api/WechatHandlers/VoiceMessageHandler.php
new file mode 100644
index 0000000..ae21e09
--- /dev/null
+++ b/app/Api/WechatHandlers/VoiceMessageHandler.php
@@ -0,0 +1,25 @@
+ToUserName;
+ $payload->FromUserName;
+ $payload->CreateTime;
+ $payload->MsgId;
+
+ $payload->MediaId;
+ $payload->Format;
+ $payload->Recognition;
+
+ return '语音消息';
+ }
+
+}
diff --git a/app/Api/bootstrap.php b/app/Api/bootstrap.php
new file mode 100644
index 0000000..b3d9bbc
--- /dev/null
+++ b/app/Api/bootstrap.php
@@ -0,0 +1 @@
+name('home');
+
+/**
+ * 分组的路由示例
+ */
+Route::group([
+// 'as' => '',
+// 'domain' => '',
+// 'middleware' => '',
+// 'namespace' => '',
+// 'prefix' => '',
+], function (Router $router) {
+ $router->get('/', 'IndexController@index')->name('home');
+});
+/**
+ * 文件夹引入的示例
+ */
+foreach (glob(app_path('Api/Routes').'/*.php') as $routeFile) {
+ require $routeFile;
+}
\ No newline at end of file
diff --git a/app/Bonus/IdentityBonus.php b/app/Bonus/IdentityBonus.php
new file mode 100644
index 0000000..32bedfc
--- /dev/null
+++ b/app/Bonus/IdentityBonus.php
@@ -0,0 +1,305 @@
+identity;
+ $parent = $user->parent;
+ $parentIdentity = $parent ? $user->parent->identityFirst() : '';
+
+ //开通赠送水滴
+ $crystal = $order->identity->getRule('give_crystal', '0');
+ if ($crystal > 0) {
+ $user->account->rule('open_identity_score', $crystal, true, array_merge($source, [
+ 'user_order_id' => $order->id
+ ]));
+ }
+ //发券
+ self::grantCoupon($user, $order, $parent, $parentIdentity);
+
+ //是否有上级
+ if ($parent && $parentIdentity && $order->price > 0) {
+ //增加业绩
+ $parent->addPerf($order->price, $order);
+ //开通的是季卡
+ if ($identity->job == Identity::JOB_JK) {
+
+
+ //直推季卡获得水滴
+ $hasRecommend_jk_score = $parentIdentity->getRule('recommend_jk_score', '');
+ if ($hasRecommend_jk_score) {
+ $user->parent->account->rule(
+ 'recommend_jk_score',
+ $hasRecommend_jk_score,
+ false,
+ array_merge($source, [
+ 'user_order_id' => $order->id
+ ])
+ );
+ }
+
+ //合伙人推荐奖励
+ self::setHhRecommendJk($hasRecommend_jk_score, $user, $order, $source);
+ }
+
+ //开通的是年卡
+ if ($identity->job == Identity::JOB_NK) {
+ //直推年卡获得水滴
+ $hasRecommend_nk_score = $parentIdentity->getRule('recommend_nk_score', '');
+ if ($hasRecommend_nk_score) {
+ $user->parent->account->rule(
+ 'recommend_nk_score',
+ $hasRecommend_nk_score,
+ false,
+ array_merge($source, [
+ 'user_order_id' => $order->id
+ ])
+ );
+ }
+
+ //合伙人推荐奖励
+ self::setHhRecommendNk($hasRecommend_nk_score, $user, $order, $source);
+ }
+ }
+
+ return true;
+ } catch (\Exception $exception) {
+ return $exception->getMessage();
+ }
+
+ }
+
+ /**
+ * Notes: 发券
+ * 推荐会员得优惠券 季卡 年卡 创始
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/31 13:53
+ */
+ public static function grantCoupon($user, $order, $parent, $parentIdentity)
+ {
+ if ($parent && $parentIdentity->job !== Identity::JOB_HH) {
+ $jkIdentity = Identity::query()->Jk()->first();
+ $openJkCount = $parent->getOpenJkCount();//开通季卡次数
+ $recommendUserCoupunCount = $parent->getRecommendUserCouponCount();//推荐季卡得优惠券数
+ $recommend_coupon = $parentIdentity->getRule('recommend_coupon', null);//是否有推荐奖励
+
+ //推荐季卡得优惠券
+ if ($recommend_coupon && $order->type == Order::TYPE_OPEN && $openJkCount > $recommendUserCoupunCount) {
+ $coupon = Coupon::query()
+ ->whereHas('items', function ($q) use ($jkIdentity) {
+ $q->withGoods($jkIdentity);
+ })
+ ->first();
+
+ $ended_at = Carbon::parse($parentIdentity->pivot->ended_at);
+ if ($coupon && $ended_at->gt(now())) {
+ $days = $ended_at->addMonth()->diffInDays(now());
+ #TODO 推季卡会员得优惠券
+ // $user->parent->getCoupon($coupon->id, CouponGrant::CHANNEL_EXPAND, $days);
+ $user->parent->getCoupon($coupon->id, CouponGrant::CHANNEL_EXPAND);
+ }
+ }
+ }
+ }
+
+ /**
+ * Notes: 合伙人推荐季卡
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/19 15:11
+ */
+ public static function setHhRecommendJk($score, $user, $order, $source)
+ {
+ $hhUsers = $user->getParentHh();//获取所有合伙人
+ $hhIdentity = Identity::query()->where('job', Identity::JOB_HH)->first();
+ $rule_name = 'recommend_indirect_jk_balance';
+ if ($hhIdentity && ! empty($hhUsers)) {
+ //有人获得了推荐水滴就是间推
+
+ $i = 1;
+ foreach ($hhUsers as $hhUser) {
+ $jkChildren = $hhUser->getJkChildrenCount();
+ $amount = 0;
+
+ if ($i > 1) {
+ break;
+ }
+
+ //间接
+ if ($score) {
+ if ($jkChildren > 10) {
+ $rateName = 'recommend_rate_indirect_jk_balance_gt';
+ } else {
+ $rateName = 'recommend_rate_indirect_jk_balance_lte';
+ }
+ } else {//直接
+ if ($jkChildren > 10) {
+ $rateName = 'recommend_rate_jk_balance_gt';
+ } else {
+ $rateName = 'recommend_rate_jk_balance_lte';
+ }
+
+ $rule_name = 'recommend_jk_balance';
+ }
+
+ $hasRate = $hhIdentity->getRule($rateName, 0);//获取比例
+ $rateData = self::getNonZeroRate($hasRate);
+ $amount = bcmul($order->price, $rateData, 2);
+
+ if ($amount) {
+ //执行分润
+ $hhUser->account->rule(
+ $rule_name,
+ $amount,
+ false,
+ array_merge($source, [
+ 'user_order_id' => $order->id,
+ 'rate' => $rateData
+ ])
+ );
+ //培育津贴
+ self::allowance($hhUser, $amount, $source);
+ }
+
+ $i++;
+ }
+ } else {
+ info('没有找到合伙人');
+ }
+ }
+
+ /**
+ * Notes: 合伙人间推季卡
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/19 15:13
+ */
+ public static function setHhRecommendNk($score, $user, $order, $source)
+ {
+ $hhUsers = $user->getParentHh();//获取所有合伙人
+ $hhIdentity = Identity::query()->where('job', Identity::JOB_HH)->first();
+ $rule_name = 'recommend_indirect_nk_balance';
+ if ($hhIdentity && ! empty($hhUsers)) {
+ //有人获得了推荐水滴就是间推
+ $i = 1;
+ foreach ($hhUsers as $hhUser) {
+ $nkChildren = $hhUser->getNkChildrenCount();
+ $amount = 0;
+ if ($i > 1) {
+ break;
+ }
+
+ //间接
+ if ($score) {
+ if ($nkChildren > 10) {
+ $rateName = 'recommend_rate_indirect_nk_balance_gt';
+ } else {
+ $rateName = 'recommend_rate_indirect_nk_balance_lte';
+ }
+ } else {//直接
+ if ($nkChildren > 10) {
+ $rateName = 'recommend_rate_nk_balance_gt';
+ } else {
+ $rateName = 'recommend_rate_nk_balance_lte';
+ }
+
+ $rule_name = 'recommend_nk_balance';
+ }
+ $hasRate = $hhIdentity->getRule($rateName, 0);//获取比例
+ $rateData = self::getNonZeroRate($hasRate);
+ $amount = bcmul($order->price, $rateData, 2);
+
+
+ if ($amount > 0) {
+ //执行分润
+ $hhUser->account->rule(
+ $rule_name,
+ $amount,
+ false,
+ array_merge($source, [
+ 'user_order_id' => $order->id,
+ 'rate' => $rateData
+ ])
+ );
+
+ //培育津贴
+ self::allowance($hhUser, $amount, $source);
+ }
+ $i++;
+ }
+ }
+ }
+
+
+ /**
+ * Notes: 获取百分比数据
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/19 14:56
+ * @param $rate
+ * @param $decimals
+ * @return int|string|null
+ */
+ public static function getNonZeroRate($rate, $decimals = 2)
+ {
+ return $rate > 0 ? bcdiv($rate, 100, $decimals) : 0;
+ }
+
+ /**
+ * Notes: 培育津贴
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/30 14:32
+ */
+ public static function allowance(User $user, $amount, $source)
+ {
+ $UserIdentity = $user->identityFirst();
+ $hasRate = $UserIdentity->getRule('recommend_rate_allowance', 0);//获取培育津贴比例
+ if ($UserIdentity->job == Identity::JOB_HH && $hasRate) {
+ $hhUsers = $user->getParentHh();//获取所有合伙人
+ $rateData = self::getNonZeroRate($hasRate);
+ $amount = bcmul($amount, $rateData, 2);
+
+ $i = 1;
+ if (! empty($hhUsers)) {
+ foreach ($hhUsers as $hhUser) {
+ if ($i > 1) {
+ break;
+ }
+ $hhUser->account->rule(
+ 'allowance_balance',
+ $amount,
+ false,
+ $source
+ );
+ $i++;
+ }
+ }
+ }
+
+ }
+
+
+}
diff --git a/app/Channels/WechatMiniChannel.php b/app/Channels/WechatMiniChannel.php
new file mode 100644
index 0000000..532c002
--- /dev/null
+++ b/app/Channels/WechatMiniChannel.php
@@ -0,0 +1,15 @@
+toWeChat($notifiable);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Console/Commands/MonthPerfCommand.php b/app/Console/Commands/MonthPerfCommand.php
new file mode 100644
index 0000000..e136684
--- /dev/null
+++ b/app/Console/Commands/MonthPerfCommand.php
@@ -0,0 +1,36 @@
+argument('last') ?: 0;
+
+ User::whereHas('identities', function ($query) {
+ $query->where('id', 6);
+ })
+ ->whereHas('identityMiddle', function ($query) {
+ $query->where('star', '>', 0);
+ })
+ ->chunkById(100, function ($users) use ($last) {
+ foreach ($users as $user) {
+ MonthPerfJob::dispatch($user, $last);
+ }
+ });
+ }
+}
diff --git a/app/Console/Commands/StartBounsCommand.php b/app/Console/Commands/StartBounsCommand.php
new file mode 100644
index 0000000..90a8b59
--- /dev/null
+++ b/app/Console/Commands/StartBounsCommand.php
@@ -0,0 +1,57 @@
+argument('star') ?: 0;
+ if (!in_array($star, Bouns::TYPEARRAY)) {
+ throw new Exception('星级参数不正确');
+ }
+ $last = $this->argument('last') ?: 0;
+
+ $time = now()->startOfMonth()->toDateTimeString();
+ if ($last) {
+ $time = now()->subMonth()->startOfMonth()->toDateTimeString();
+ }
+ $bouns = Bouns::where('date', $time)
+ ->where('type', $star)
+ ->where('status', Bouns::STATUS_INIT)
+ ->first();
+ if (!$bouns) {
+ throw new Exception('分红内容不存在或状态不正确');
+ }
+ $bounsUserPerf = BounsUserPerf::where('date', $bouns->date)
+ ->where('star', '>=', $bouns->type)
+ ->get();
+ if ($bounsUserPerf->count() > 0) {
+ $allOld = bcmul($bounsUserPerf->sum('old_perf'), 0.3, 4);//累计业绩
+ $allNew = bcmul($bounsUserPerf->sum('new_perf'), 0.7, 4);//新增业绩
+ $allPerf = bcadd($allOld, $allNew, 4);//总业绩
+ $price = bcdiv($bouns->total, $allPerf, 6);//单价
+ $bouns->doIng();
+ foreach ($bounsUserPerf as $bounsPerf) {
+ SendBounsJob::dispatch($bounsPerf, $price, $bouns);
+ }
+ } else {
+ $bouns->doEnd();
+ }
+ }
+}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
new file mode 100644
index 0000000..4f58b2b
--- /dev/null
+++ b/app/Console/Kernel.php
@@ -0,0 +1,66 @@
+command('inspire')->hourly();
+ $schedule->command('Bonus:MonthPerf 1')->monthlyOn(1, '00:01');
+ $schedule->command('Bonus:StartMonth 1 1')->monthlyOn(1, '00:10');
+ $schedule->command('Bonus:StartMonth 2 1')->monthlyOn(1, '00:15');
+ $schedule->command('Bonus:StartMonth 3 1')->monthlyOn(1, '00:20');
+ $schedule->command('Bonus:StartMonth 4 1')->monthlyOn(1, '00:25');
+ $schedule->command('Bonus:StartMonth 5 1')->monthlyOn(1, '00:30');
+ $this->modules($schedule);
+ }
+
+ /**
+ * 要执行任务的位置增加Console\Kernel类
+ * 类中 runCommand(Schedule $schedule)
+ * 模型中的command在模型的ServiceProvider自行注册
+ * @param \Illuminate\Console\Scheduling\Schedule $schedule
+ */
+ protected function modules(Schedule $schedule)
+ {
+ $data = ModuleManager::toCollection();
+ foreach ($data as $name => $module) {
+ $nameSpace = "\\Modules\\$name\\Console\\Kernel";
+ if (class_exists($nameSpace)) {
+ $runKernel = resolve($nameSpace);
+ $runKernel->runCommand($schedule);
+ }
+ }
+ }
+
+ /**
+ * Register the commands for the application.
+ * @return void
+ */
+ protected function commands()
+ {
+ $this->load(__DIR__.'/Commands');
+
+ // require base_path('routes/console.php');
+ }
+
+}
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
new file mode 100644
index 0000000..68b212b
--- /dev/null
+++ b/app/Exceptions/Handler.php
@@ -0,0 +1,43 @@
+reportable(function (Throwable $e) {
+ //
+ });
+ }
+
+}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
new file mode 100644
index 0000000..1af52c2
--- /dev/null
+++ b/app/Http/Controllers/Controller.php
@@ -0,0 +1,29 @@
+
+ * @param string $token
+ * @return array
+ */
+ protected function respondWithToken(string $token): array
+ {
+ return [
+ 'access_token' => $token,
+ 'token_type' => 'Bearer',
+ 'expires_in' => auth('api')->factory()->getTTL() * 60,
+ ];
+ }
+
+}
diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php
new file mode 100644
index 0000000..df5a1dd
--- /dev/null
+++ b/app/Http/Controllers/ImageController.php
@@ -0,0 +1,18 @@
+name;
+ $img = Material::query()->where('title', $name)->first();
+
+ return view('image', compact('img'));
+ }
+}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
new file mode 100644
index 0000000..28f3dd2
--- /dev/null
+++ b/app/Http/Kernel.php
@@ -0,0 +1,66 @@
+ [
+ \App\Http\Middleware\EncryptCookies::class,
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+ \Illuminate\Session\Middleware\StartSession::class,
+ // \Illuminate\Session\Middleware\AuthenticateSession::class,
+ \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+ \App\Http\Middleware\VerifyCsrfToken::class,
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+
+ 'api' => [
+// 'throttle:api',
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+ ];
+
+ /**
+ * The application's route middleware.
+ *
+ * These middleware may be assigned to groups or used individually.
+ *
+ * @var array
+ */
+ protected $routeMiddleware = [
+ 'auth' => \App\Http\Middleware\Authenticate::class,
+ 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+ 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
+ 'can' => \Illuminate\Auth\Middleware\Authorize::class,
+ 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
+ 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
+ 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
+ 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+ 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
+ ];
+}
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
new file mode 100644
index 0000000..704089a
--- /dev/null
+++ b/app/Http/Middleware/Authenticate.php
@@ -0,0 +1,21 @@
+expectsJson()) {
+ return route('login');
+ }
+ }
+}
diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php
new file mode 100644
index 0000000..033136a
--- /dev/null
+++ b/app/Http/Middleware/EncryptCookies.php
@@ -0,0 +1,17 @@
+check()) {
+ return redirect(RouteServiceProvider::HOME);
+ }
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php
new file mode 100644
index 0000000..a8a252d
--- /dev/null
+++ b/app/Http/Middleware/TrimStrings.php
@@ -0,0 +1,19 @@
+allSubdomainsOfApplicationUrl(),
+ ];
+ }
+}
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
new file mode 100644
index 0000000..a3b6aef
--- /dev/null
+++ b/app/Http/Middleware/TrustProxies.php
@@ -0,0 +1,23 @@
+user = $user->fresh();
+ $this->order = $order->fresh();
+ $this->source = $source;
+ }
+
+ public function handle()
+ {
+ IdentityBonus::BuyIdentity($this->user, $this->order, $this->source);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Jobs/Bonus/MonthPerfJob.php b/app/Jobs/Bonus/MonthPerfJob.php
new file mode 100644
index 0000000..e6367d5
--- /dev/null
+++ b/app/Jobs/Bonus/MonthPerfJob.php
@@ -0,0 +1,57 @@
+user = $user->fresh();
+ $this->last = $last;
+ }
+
+ public function handle()
+ {
+ $time = [now()->startOfMonth()->toDateTimeString(), now()->endOfMonth()->toDateTimeString()];
+ if ($this->last) {
+ $time = [
+ now()->subMonth()->startOfMonth()->toDateTimeString(),
+ now()->subMonth()->endOfMonth()->toDateTimeString()
+ ];
+ }
+ $old = $this->user->allPerf();
+ $new = $this->user->allPerf($time);
+ BounsUserPerf::updateOrCreate([
+ 'user_id' => $this->user->id,
+ 'date' => $time[0],
+ ], [
+ 'star' => $this->user->identityFirst()->pivot->star,
+ 'old_perf' => $old,
+ 'new_perf' => $new,
+ ]);
+ }
+}
diff --git a/app/Jobs/Bonus/SendBounsJob.php b/app/Jobs/Bonus/SendBounsJob.php
new file mode 100644
index 0000000..c6f16bb
--- /dev/null
+++ b/app/Jobs/Bonus/SendBounsJob.php
@@ -0,0 +1,55 @@
+bounsPerf = $bounsPerf->fresh();
+ $this->price = $price;
+ $this->bouns = $bouns;
+ }
+
+ public function handle()
+ {
+ try {
+ $perf = bcadd(bcmul($this->bounsPerf->old_perf, 0.3, 4),
+ bcmul($this->bounsPerf->new_perf, 0.7, 4), 4);
+
+ $this->bounsPerf->price = $this->price;
+ $this->bounsPerf->amount = $this->price * $perf;
+ $this->bounsPerf->user->account->rule('star_balance', $this->bounsPerf->amount, false, [
+ 'remark' => Bouns::TYPES[$this->bouns->type],
+ 'star' => $this->bouns->type,
+ ]);
+ } catch (\Exception $e) {
+ $this->bounsPerf->status = BounsUserPerf::STATUS_ERROR;
+ }
+ $this->bounsPerf->save();
+ if (Job::where('queue', 'BONUS')->where('payload', 'like', '%SendBounsJob%')->count() <= 1) {
+ $this->bouns->doEnd();
+ }
+ }
+}
diff --git a/app/Listeners/PaymentPaidListener.php b/app/Listeners/PaymentPaidListener.php
new file mode 100644
index 0000000..992e0b4
--- /dev/null
+++ b/app/Listeners/PaymentPaidListener.php
@@ -0,0 +1,15 @@
+payment;
+
+ }
+}
diff --git a/app/Listeners/UserOrderPaidListener.php b/app/Listeners/UserOrderPaidListener.php
new file mode 100644
index 0000000..3d30d3a
--- /dev/null
+++ b/app/Listeners/UserOrderPaidListener.php
@@ -0,0 +1,41 @@
+order;
+ $user = $event->order->user;
+ $identity = $event->order->identity;
+ $source = [
+ 'identity_id' => $identity->id,
+ 'order_id' => $event->order->id,
+ 'type' => $event->order->type,
+ ];
+
+// BuyIdentityJob::dispatch($user, $order, $source);//个人赠送水滴
+// Bouns::addBouns($order, $order->price);
+
+ #TODO 开通会员赠送水滴
+// TaskFacade::do('open_vip', $user->id, [
+// 'identity_id' => $event->order->identity_id
+// ]);
+
+ #TODO 邀请一名健康体验馆 赠送水滴
+// if ($user->parent) {
+// TaskFacade::do('recommend_ty', $user->parent->id, [
+// 'user_id' => $user->id
+// ]);
+// }
+ }
+
+}
diff --git a/app/Models/Bouns.php b/app/Models/Bouns.php
new file mode 100644
index 0000000..8931f29
--- /dev/null
+++ b/app/Models/Bouns.php
@@ -0,0 +1,128 @@
+ 'array',
+ ];
+ const ONE_STAR = 1;
+ const TWO_STAR = 2;
+ const THREE_STAR = 3;
+ const FOUR_STAR = 4;
+ const FIVE_STAR = 5;
+ const TYPES = [
+ self::ONE_STAR => '一星分红',
+ self::TWO_STAR => '二星分红',
+ self::THREE_STAR => '三星分红',
+ self::FOUR_STAR => '四星分红',
+ self::FIVE_STAR => '五星分红',
+ ];
+
+ const TYPEARRAY = [self::ONE_STAR, self::TWO_STAR, self::THREE_STAR, self::FOUR_STAR, self::FIVE_STAR];
+
+ const STATUS_INIT = 0;
+ const STATUS_SENDING = 1;
+ const STATUS_SENDED = 2;
+ const STATUS_REJECT = 8;
+ const STATUS_ERROR = 9;
+ const STATUS = [
+ self::STATUS_INIT => '待发放',
+ self::STATUS_SENDING => '发放中',
+ self::STATUS_SENDED => '发放完毕',
+ self::STATUS_REJECT => '停发',
+ self::STATUS_ERROR => '错误',
+ ];
+
+ protected function orders()
+ {
+ return $this->hasMany(BounsOrder::class);
+ }
+
+ /**
+ * 增加累计额度,增加对应订单记录
+ * @param BaseModel $order
+ * @param float $total
+ * @param float $rate
+ * @return void
+ */
+ protected function addAmount(BaseModel $order, float $total, float $rate)
+ {
+ $amount = bcmul($total, bcdiv($rate, 100, 4), 2);
+ if ($this->orders()->create([
+ 'order_type' => $order->getMorphClass(),
+ 'order_id' => $order->id,
+ 'type' => $this->type,
+ 'total' => $total,
+ 'amount' => $amount,
+ ])) {
+ $this->increment('total', $amount);
+ }
+ }
+
+ /**
+ * 获取分红模型
+ * @param int $type 类别
+ * @param bool $last 是否上一期
+ * @return mixed
+ */
+ public static function getBouns(int $type, bool $last = false)
+ {
+ $time = now()->startOfMonth();
+ if ($last) {
+ $time = now()->subMonth()->startOfMonth();
+ }
+ return Bouns::firstOrCreate([
+ 'type' => $type,
+ 'date' => $time->toDateTimeString(),
+ ], [
+ 'total' => 0,
+ 'status' => self::STATUS_INIT,
+ ]);
+ }
+
+ /**
+ * 增加分红
+ * @param BaseModel $order 订单
+ * @param float $total 订单金额(未计算前)
+ * @return void
+ */
+ public static function addBouns(BaseModel $order, float $total)
+ {
+ $rateArray = [
+ self::ONE_STAR => app('Conf_user')['one_star_balance_rate'] ?? 0,
+ self::TWO_STAR => app('Conf_user')['two_star_balance_rate'] ?? 0,
+ self::THREE_STAR => app('Conf_user')['three_star_balance_rate'] ?? 0,
+ self::FOUR_STAR => app('Conf_user')['four_star_balance_rate'] ?? 0,
+ self::FIVE_STAR => app('Conf_user')['five_star_balance_rate'] ?? 0,
+ ];
+ foreach ($rateArray as $key => $rate) {
+ if ($rate > 0) {
+ $model = Bouns::getBouns($key);
+ $model->addAmount($order, $total, $rate);
+ }
+ }
+ }
+
+ public function doIng()
+ {
+ $this->status = self::STATUS_SENDING;
+ $this->save();
+ }
+
+ public function doEnd()
+ {
+ $this->status = self::STATUS_SENDED;
+ $this->save();
+ }
+
+ public function doError()
+ {
+ $this->status = self::STATUS_ERROR;
+ $this->save();
+ }
+}
diff --git a/app/Models/BounsOrder.php b/app/Models/BounsOrder.php
new file mode 100644
index 0000000..fa3700b
--- /dev/null
+++ b/app/Models/BounsOrder.php
@@ -0,0 +1,12 @@
+belongsTo(Bouns::class);
+ }
+}
diff --git a/app/Models/BounsUserPerf.php b/app/Models/BounsUserPerf.php
new file mode 100644
index 0000000..706e7fe
--- /dev/null
+++ b/app/Models/BounsUserPerf.php
@@ -0,0 +1,26 @@
+ '待发放',
+ self::STATUS_SUCCESS => '完成',
+ self::STATUS_ERROR => '失败',
+ ];
+
+ public function bouns()
+ {
+ return $this->belongsTo(Bouns::class);
+ }
+}
diff --git a/app/Models/Job.php b/app/Models/Job.php
new file mode 100644
index 0000000..a7eb155
--- /dev/null
+++ b/app/Models/Job.php
@@ -0,0 +1,8 @@
+
+ * @return \Illuminate\Pagination\LengthAwarePaginator
+ */
+ public function paginate(): LengthAwarePaginator
+ {
+ $perPage = Request::get('per_page', 20);
+ // $page = Request::get('page', 1);
+ // $start = ($page - 1) * $perPage;
+
+ $data = ModuleManager::toCollection();
+
+ $movies = $data->map(function ($module) {
+ return [
+ 'id' => $module->getName(),
+ 'name' => $module->getName(),
+ 'alias' => $module->getAlias(),
+ 'description' => $module->getDescription(),
+ 'priority' => $module->getPriority(),
+ 'keywords' => $module->get('keywords'),
+ 'requires' => $module->getRequires(),
+ 'enabled' => $module->isEnabled(),
+ 'version' => $module->get('version'),
+ 'author' => $module->get('author'),
+ ];
+ });
+
+ $movies = static::hydrate($movies->toArray());
+
+ $paginator = new LengthAwarePaginator($movies, ModuleManager::count(), $perPage);
+
+ $paginator->setPath(url()->current());
+
+ return $paginator;
+ }
+
+}
diff --git a/app/Notifications/SystemOpenVip.php b/app/Notifications/SystemOpenVip.php
new file mode 100644
index 0000000..d6fea2c
--- /dev/null
+++ b/app/Notifications/SystemOpenVip.php
@@ -0,0 +1,100 @@
+identity;
+ $remark = '赠送'.$identity->stock.'箱水';
+// if ($identity->job == Identity::JOB_HH) {
+// $remark = '开启奖金模式';
+// }
+
+ $this->title = "恭喜您!开通{$identityMiddle->identity->name}成功!";
+ $this->identityMiddle = $identityMiddle;
+ $this->identity = $identity;
+ $this->remark = $remark;
+ $this->url = config('user.web.base');
+ }
+
+ public function via(): array
+ {
+ return [DatabaseChannel::class, WechatMiniChannel::class];
+ }
+
+ /**
+ * Notes: 开通会员
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/9 10:44
+ * @param User $notifiable
+ * @return bool
+ */
+ public function toWeChat(User $notifiable): bool
+ {
+ if ($notifiable->isOfficialSubscribe()) {
+ $app = app('wechat.official_account');
+
+ $start_at = $this->identityMiddle->started_at ?? '';
+ $end_at = $this->identityMiddle->ended_at ?? '';
+ $time = $start_at.' ~ '.$end_at;
+ if (empty($start_at) || empty($end_at)) {
+ $time = '永久';
+ }
+
+ $app->template_message->send([
+ 'touser' => $notifiable->wechat->official_openid,
+ 'template_id' => 'gtS1LS9Irw7h2RtQLT5Cxx4p28-k8PrPyH53HBU2oWk',
+ 'url' => $this->url,
+ 'data' => [
+ 'first' => $this->title,
+ 'keyword1' => $time,
+ 'keyword2' => $this->remark,
+ 'remark' => '',
+ ],
+ ]);
+
+ }
+
+ return true;
+ }
+
+ /**
+ * 发送到数据库
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toDatabase(User $notifiable): array
+ {
+ return [
+ 'title' => $this->title,
+ 'content' => $this->remark,
+ 'url' => $this->url,
+ ];
+ }
+}
diff --git a/app/Notifications/SystemOrderDelivered.php b/app/Notifications/SystemOrderDelivered.php
new file mode 100644
index 0000000..c3ba1df
--- /dev/null
+++ b/app/Notifications/SystemOrderDelivered.php
@@ -0,0 +1,90 @@
+title = $title;
+ $this->order = $order;
+ $this->url = $url;
+ }
+
+ public function via(): array
+ {
+ return [DatabaseChannel::class, WechatMiniChannel::class];
+ }
+
+ /**
+ * Notes: 订单发货
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/4 16:22
+ * @param User $notifiable
+ * @return bool
+ */
+ public function toWeChat(User $notifiable): bool
+ {
+ if ($notifiable->isOfficialSubscribe()) {
+ $app = app('wechat.official_account');
+ $remark = '您的宝贝已经发货,请耐心等待';
+ if ($this->order->express->type == OrderExpress::TYPE_LOGISTICS) {
+ $remark .= ',经办人:'.$this->order->express->person;
+ }
+
+ $res = $app->template_message->send([
+ 'touser' => $notifiable->wechat->official_openid,
+ 'template_id' => 'UvUA6wvPSegvT7i8IVrLipktbtCmyjtdnuKD8EvyOO8',
+ 'url' => $this->url,
+ 'data' => [
+ 'first' => $this->title,
+ 'keyword1' => $this->order->order_no,
+ 'keyword2' => $this->order->express->deliver_at,
+ 'keyword3' => $this->order->express->express_id > 0 ? $this->order->express->express->name : '',
+ 'keyword4' => $this->order->express->express_no ?? '',
+ 'keyword5' => $this->order->express->getFullAddress(),
+ 'remark' => $remark,
+ ],
+ ]);
+ }
+ return true;
+ }
+
+ /**
+ * Notes: 数据库
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/4 16:38
+ * @param User $notifiable
+ * @return array
+ */
+ public function toDatabase(User $notifiable): array
+ {
+ return [
+ 'title' => $this->title,
+ 'content' => '订单编号:'.$this->order->order_no.' 已发货',
+ 'url' => $this->url,
+ ];
+ }
+}
diff --git a/app/Notifications/SystemRemindUserSign.php b/app/Notifications/SystemRemindUserSign.php
new file mode 100644
index 0000000..c97b459
--- /dev/null
+++ b/app/Notifications/SystemRemindUserSign.php
@@ -0,0 +1,81 @@
+title = '喝水打卡提醒';
+ $this->content = '您今天还没有喝水打卡,请前去打卡';
+ $this->url = config('user.web.base');
+ }
+
+ public function via(): array
+ {
+ return [DatabaseChannel::class, WechatMiniChannel::class];
+ }
+
+ /**
+ * Notes: 喝水打卡提醒
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/8 8:48
+ * @param User $notifiable
+ * @return bool
+ */
+ public function toWeChat(User $notifiable): bool
+ {
+ if ($notifiable->isOfficialSubscribe()) {
+ $app = app('wechat.official_account');
+
+ $app->template_message->send([
+ 'touser' => $notifiable->wechat->official_openid,
+ 'template_id' => 'N7-vo1bSYXahw22pplkHtI7WGg96dPf1KdMxbKdx6ao',
+ 'url' => $this->url,
+ 'data' => [
+ 'first' => $this->title,
+ 'keyword1' => now(),
+ 'keyword2' => $this->content,
+ 'remark' => '',
+ ],
+ ]);
+
+ }
+
+ return true;
+ }
+
+ /**
+ * 发送到数据库
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toDatabase(User $notifiable): array
+ {
+ return [
+ 'title' => $this->title,
+ 'content' => $this->content,
+ 'url' => $this->url,
+ ];
+ }
+}
diff --git a/app/Notifications/SystemUpdateCase.php b/app/Notifications/SystemUpdateCase.php
new file mode 100644
index 0000000..2456b30
--- /dev/null
+++ b/app/Notifications/SystemUpdateCase.php
@@ -0,0 +1,81 @@
+title = '上传报告提醒';
+ $this->url = config('user.web.base');
+ }
+
+ public function via(): array
+ {
+ return [DatabaseChannel::class, WechatMiniChannel::class];
+ }
+
+ /**
+ * Notes: 喝水打卡提醒
+ *
+ * @Author: 玄尘
+ * @Date: 2022/8/8 8:48
+ * @param User $notifiable
+ * @return bool
+ */
+ public function toWeChat(User $notifiable): bool
+ {
+ if ($notifiable->isOfficialSubscribe()) {
+ $app = app('wechat.official_account');
+
+ $app->template_message->send([
+ 'touser' => $notifiable->wechat->official_openid,
+ 'template_id' => '3sksrHdMTu3k1yderqyP5hOYXWltNf-CvESRG4r3Fnc',
+ 'url' => $this->url,
+ 'data' => [
+ 'first' => $this->title,
+ 'keyword1' => now(),
+ 'keyword2' => '您已经连续打卡30天,请上传报告',
+ 'remark' => '',
+ ],
+ ]);
+
+ }
+
+ return true;
+ }
+
+ /**
+ * 发送到数据库
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toDatabase(User $notifiable): array
+ {
+ return [
+ 'title' => $this->title,
+ 'content' => '您已经连续打卡30天,请上传报告',
+ 'url' => $this->url,
+ ];
+ }
+}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
new file mode 100644
index 0000000..ee8ca5b
--- /dev/null
+++ b/app/Providers/AppServiceProvider.php
@@ -0,0 +1,28 @@
+ 'App\Policies\ModelPolicy',
+ ];
+
+ /**
+ * Register any authentication / authorization services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ $this->registerPolicies();
+
+ //
+ }
+}
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
new file mode 100644
index 0000000..395c518
--- /dev/null
+++ b/app/Providers/BroadcastServiceProvider.php
@@ -0,0 +1,21 @@
+ [
+ UserOrderPaidListener::class,
+ ],
+ ];
+
+ /**
+ * Register any events for your application.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ //
+ }
+}
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
new file mode 100644
index 0000000..3bd3c81
--- /dev/null
+++ b/app/Providers/RouteServiceProvider.php
@@ -0,0 +1,63 @@
+configureRateLimiting();
+
+ $this->routes(function () {
+ Route::prefix('api')
+ ->middleware('api')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/api.php'));
+
+ Route::middleware('web')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/web.php'));
+ });
+ }
+
+ /**
+ * Configure the rate limiters for the application.
+ *
+ * @return void
+ */
+ protected function configureRateLimiting()
+ {
+ RateLimiter::for('api', function (Request $request) {
+ return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
+ });
+ }
+}
diff --git a/app/Traits/HasClicks.php b/app/Traits/HasClicks.php
new file mode 100644
index 0000000..aa241f7
--- /dev/null
+++ b/app/Traits/HasClicks.php
@@ -0,0 +1,84 @@
+
+ * @return string
+ */
+ private function getClicksField(): string
+ {
+ return $this->clicks_filed ?? 'clicks';
+ }
+
+ /**
+ * Notes : 获取缓存前缀
+ * @Date : 2021/3/16 5:52 下午
+ * @Author : < Jason.C >
+ * @return string
+ */
+ private function getClickCachePrefix(): string
+ {
+ return $this->cachePrefix ?? class_basename(__CLASS__);
+ }
+
+ /**
+ * Notes : 生成一个缓存KEY
+ * @Date : 2021/3/16 5:52 下午
+ * @Author : < Jason.C >
+ * @param string|null $appends
+ * @return string
+ */
+ private function getCacheKey(string $appends = null): string
+ {
+ return $this->getClickCachePrefix() . ':' . $this->getKey() . ':' . $appends;
+ }
+
+ /**
+ * Notes : 增加点击量
+ * @Date : 2021/3/17 9:20 上午
+ * @Author : < Jason.C >
+ * @param int $step
+ */
+ public function incrementClicks(int $step = 1): void
+ {
+ Cache::increment($this->getCacheKey('clicks'), $step);
+
+ if (rand(1, $this->saveRate) === 1) {
+ $this->update([$this->getClicksField() => $this->clicks]);
+ }
+ }
+
+ /**
+ * Notes : 获取缓存的浏览次数
+ * @Date : 2021/3/16 5:52 下午
+ * @Author : < Jason.C >
+ * @return int
+ */
+ public function getClicksAttribute(): int
+ {
+ $clicks = Cache::get($this->getCacheKey('clicks'));
+
+ if (is_null($clicks)) {
+ return Cache::rememberForever($this->getCacheKey('clicks'), function () {
+ return $this->getAttributes()[$this->getClicksField()];
+ });
+ } else {
+ return $clicks;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/Traits/HasCovers.php b/app/Traits/HasCovers.php
new file mode 100644
index 0000000..b8f7562
--- /dev/null
+++ b/app/Traits/HasCovers.php
@@ -0,0 +1,83 @@
+
+ * @return string
+ */
+ public function getCoverField(): string
+ {
+ return $this->cover_field ?? 'cover';
+ }
+
+ /**
+ * Notes : 获取图片字段(多图)
+ * @Date : 2021/3/16 4:35 下午
+ * @Author : < Jason.C >
+ * @return string
+ */
+ public function getPicturesField(): string
+ {
+ return $this->pictures_field ?? 'pictures';
+ }
+
+ /**
+ * Notes : 解析单图地址
+ * @Date : 2021/3/16 4:54 下午
+ * @Author : < Jason.C >
+ * @return string
+ */
+ public function getCoverUrlAttribute(): string
+ {
+ $cover = $this->getAttribute($this->getCoverField());
+
+ return $this->parseImageUrl($cover);
+ }
+
+ /**
+ * Notes : 解析多图地址
+ * @Date : 2021/3/16 4:54 下午
+ * @Author : < Jason.C >
+ * @return array
+ */
+ public function getPicturesUrlAttribute(): array
+ {
+ $pictures = $this->getAttribute($this->getPicturesField());
+
+ if (empty($pictures)) {
+ return [];
+ }
+
+ return collect($pictures)->map(function ($picture) {
+ return $this->parseImageUrl($picture);
+ })->toArray();
+ }
+
+ /**
+ * Notes : 解析图片文件的实际展示地址
+ * @Date : 2021/3/16 4:53 下午
+ * @Author : < Jason.C >
+ * @param string|null $image
+ * @return string
+ */
+ public function parseImageUrl(?string $image): string
+ {
+ if (empty($image)) {
+ return '';
+ } elseif (Str::startsWith($image, 'http')) {
+ return $image;
+ } else {
+ return Storage::url($image);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/Traits/HasStatus.php b/app/Traits/HasStatus.php
new file mode 100644
index 0000000..763e116
--- /dev/null
+++ b/app/Traits/HasStatus.php
@@ -0,0 +1,87 @@
+
+ * @return string
+ */
+ protected function getStatusField(): string
+ {
+ return $this->status_field ?? 'status';
+ }
+
+ /**
+ * Notes : 获取各状态的名称
+ * @Date : 2021/5/27 11:50 上午
+ * @Author : < Jason.C >
+ * @return string[]
+ */
+ protected function getStatusMap(): array
+ {
+ return isset($this->status_map) && !empty($this->status_map) ? $this->status_map : [
+ 0 => '待审核',
+ 1 => '正常',
+ 2 => '驳回',
+ 3 => '关闭',
+ ];
+ }
+
+ /**
+ * 正常显示的数据
+ * @Author:
+ * @Date :2021-04-09
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeShown(Builder $query): Builder
+ {
+ return $query->where($this->getStatusField(), 1);
+ }
+
+ /**
+ * 不显示的数据
+ * @Author :
+ * @Date :2021-04-09
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeHidden(Builder $query): Builder
+ {
+ return $query->where($this->getStatusField(), 0);
+ }
+
+ /**
+ * Notes : 状态查询
+ * @Date : 2021/6/28 10:25 上午
+ * @Author : < Jason.C >
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param int $status
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeOfStatus(Builder $query, int $status): Builder
+ {
+ return $query->where($this->getStatusField(), $status);
+ }
+
+ /**
+ * Notes : 获取状态的文本信息
+ * @Date : 2021/4/25 2:10 下午
+ * @Author : < Jason.C >
+ * @return string
+ */
+ public function getStatusTextAttribute(): string
+ {
+ $map = $this->getStatusMap();
+
+ return $map[$this->{$this->getStatusField()}] ?? '未知';
+ }
+
+}
diff --git a/app/Traits/Macroable.php b/app/Traits/Macroable.php
new file mode 100644
index 0000000..eabc13e
--- /dev/null
+++ b/app/Traits/Macroable.php
@@ -0,0 +1,50 @@
+getRelationshipFromMethod($key);
+ }
+
+ return $relation;
+ }
+
+ /**
+ * @param string $method
+ * @param array $parameters
+ * @return mixed
+ */
+ public function __call($method, $parameters)
+ {
+ if (static::hasMacro($method)) {
+ return $this->macroCall($method, $parameters);
+ }
+
+ return parent::__call($method, $parameters);
+ }
+
+ /**
+ * @param string $method
+ * @param array $parameters
+ * @return mixed
+ */
+ public static function __callStatic($method, $parameters)
+ {
+ return parent::__callStatic($method, $parameters);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Traits/OrderByIdDesc.php b/app/Traits/OrderByIdDesc.php
new file mode 100644
index 0000000..da59e5b
--- /dev/null
+++ b/app/Traits/OrderByIdDesc.php
@@ -0,0 +1,22 @@
+
+ * @Date : 2020/1/19 1:42 下午
+ */
+ public static function bootOrderByIdDesc(): void
+ {
+ static::addGlobalScope(function (Builder $builder) {
+ $builder->orderByDesc('id');
+ });
+ }
+
+}
diff --git a/app/Traits/OrderByOrderAsc.php b/app/Traits/OrderByOrderAsc.php
new file mode 100644
index 0000000..f3c9220
--- /dev/null
+++ b/app/Traits/OrderByOrderAsc.php
@@ -0,0 +1,22 @@
+
+ * @Date : 2020/1/19 1:42 下午
+ */
+ public static function bootOrderByOrderAsc(): void
+ {
+ static::addGlobalScope(function (Builder $builder) {
+ $builder->orderBy('order')->orderByDesc('id');
+ });
+ }
+
+}
diff --git a/app/Traits/WithPosition.php b/app/Traits/WithPosition.php
new file mode 100644
index 0000000..5818d8c
--- /dev/null
+++ b/app/Traits/WithPosition.php
@@ -0,0 +1,65 @@
+
+ */
+ protected function getPositionMap(): array
+ {
+ return $this->position_map ?? [];
+ }
+
+ /**
+ * Notes: 定位查询作用域
+ * @Author: Mr.wang
+ * @Date : 2021/5/11 10:48
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param int $pos
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeOfPosition(Builder $query, int $pos): Builder
+ {
+ return $query->whereRaw('position & ' . $pos);
+ }
+
+ /**
+ * Notes: 设置定位
+ * @Author: Mr.wang
+ * @Date : 2020/5/11 10:48
+ * @param int $value
+ */
+ protected function setPositionAttribute($value): void
+ {
+ if (is_array($value) && !blank($value)) {
+ $this->attributes['position'] = array_sum($value);
+ }
+ }
+
+ /**
+ * Notes: 获取定位数据
+ * @Author: Mr.wang
+ * @Date : 2020/5/11 10:48
+ * @param int $value
+ * @return array
+ */
+ protected function getPositionAttribute(int $value): array
+ {
+ $position = [];
+ foreach ($this->getPositionMap() as $k => $v) {
+ if ($k & $value) {
+ array_push($position, $k);
+ }
+ }
+
+ return $position;
+ }
+
+}
diff --git a/artisan b/artisan
new file mode 100644
index 0000000..5c23e2e
--- /dev/null
+++ b/artisan
@@ -0,0 +1,53 @@
+#!/usr/bin/env php
+make(Illuminate\Contracts\Console\Kernel::class);
+
+$status = $kernel->handle(
+ $input = new Symfony\Component\Console\Input\ArgvInput,
+ new Symfony\Component\Console\Output\ConsoleOutput
+);
+
+/*
+|--------------------------------------------------------------------------
+| Shutdown The Application
+|--------------------------------------------------------------------------
+|
+| Once Artisan has finished running, we will fire off the shutdown events
+| so that any final work may be done by the application before we shut
+| down the process. This is the last thing to happen to the request.
+|
+*/
+
+$kernel->terminate($input, $status);
+
+exit($status);
diff --git a/bootstrap/app.php b/bootstrap/app.php
new file mode 100644
index 0000000..037e17d
--- /dev/null
+++ b/bootstrap/app.php
@@ -0,0 +1,55 @@
+singleton(
+ Illuminate\Contracts\Http\Kernel::class,
+ App\Http\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Console\Kernel::class,
+ App\Console\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Debug\ExceptionHandler::class,
+ App\Exceptions\Handler::class
+);
+
+/*
+|--------------------------------------------------------------------------
+| Return The Application
+|--------------------------------------------------------------------------
+|
+| This script returns the application instance. The instance is given to
+| the calling script so we can separate the building of the instances
+| from the actual running of the application and sending responses.
+|
+*/
+
+return $app;
diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/bootstrap/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..ba3b4e5
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,96 @@
+{
+ "name": "uztech/laravel",
+ "type": "project",
+ "description": "The Laravel Framework.",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "license": "MIT",
+ "require": {
+ "php": "^7.4|^8.0",
+ "alibabacloud/sts": "^1.8",
+ "encore/laravel-admin": "^1.8",
+ "fideloper/proxy": "^4.4",
+ "fruitcake/laravel-cors": "^2.0",
+ "genealabs/laravel-model-caching": "^0.11.3",
+ "guzzlehttp/guzzle": "^7.0.1",
+ "iidestiny/laravel-filesystem-oss": "^2.1",
+ "intervention/image": "^2.5",
+ "jasonc/api": "^5.0.0",
+ "joshbrw/laravel-module-installer": "^2.0",
+ "laravel-admin-ext/grid-lightbox": "^1.0",
+ "laravel/framework": "^8.5",
+ "liuhelong/laravel-admin-wechat": "^1.3",
+ "maatwebsite/excel": "^3.1",
+ "nosun/ueditor": "^3.0",
+ "nwidart/laravel-modules": "^8.2",
+ "overtrue/chinese-calendar": "^1.0",
+ "overtrue/easy-sms": "^1.3",
+ "overtrue/laravel-favorite": "^4.0",
+ "overtrue/laravel-lang": "~5.0",
+ "overtrue/laravel-query-logger": "^2.1",
+ "overtrue/laravel-subscribe": "3.1.0",
+ "overtrue/laravel-versionable": "^2.6",
+ "overtrue/laravel-wechat": "^6.0",
+ "overtrue/socialite": "^3.2",
+ "overtrue/wechat": "^5.0",
+ "propaganistas/laravel-phone": "^4.3",
+ "simplesoftwareio/simple-qrcode": "^4.2",
+ "symfony/workflow": "^5.2",
+ "vinkla/hashids": "^9.1",
+ "wang-tech-commits/kuaidi100-api": "^1.0",
+ "xuanchen/tencent-map-api": "^1.0",
+ "yangjisen/laravel-cache-provider": "^3.0",
+ "yansongda/pay": "^3.1"
+ },
+ "require-dev": {
+ "facade/ignition": "^2.5",
+ "fakerphp/faker": "^1.9.1",
+ "laravel/sail": "^1.0.1",
+ "mockery/mockery": "^1.4.2",
+ "nunomaduro/collision": "^5.0",
+ "phpunit/phpunit": "^9.3.3"
+ },
+ "config": {
+ "optimize-autoloader": true,
+ "preferred-install": "dist",
+ "sort-packages": true,
+ "allow-plugins": {
+ "easywechat-composer/easywechat-composer": true,
+ "joshbrw/laravel-module-installer": true
+ }
+ },
+ "extra": {
+ "laravel": {
+ "dont-discover": []
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Modules\\": "modules/",
+ "Database\\Factories\\": "database/factories/",
+ "Database\\Seeders\\": "database/seeders/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "scripts": {
+ "post-autoload-dump": [
+ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+ "@php artisan package:discover --ansi"
+ ],
+ "post-root-package-install": [
+ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+ ],
+ "post-create-project-cmd": [
+ "@php artisan key:generate --ansi"
+ ]
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..6d44106
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,13154 @@
+{
+ "_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#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "8ced0e5b40c53cb2324d6151114eb695",
+ "packages": [
+ {
+ "name": "adbario/php-dot-notation",
+ "version": "2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/adbario/php-dot-notation.git",
+ "reference": "39ece8d385ce2f5e03718c693932d83ab0cb5972"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/39ece8d385ce2f5e03718c693932d83ab0cb5972",
+ "reference": "39ece8d385ce2f5e03718c693932d83ab0cb5972",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^5.5 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8|^5.7|^6.6|^7.5|^8.5|^9.5",
+ "squizlabs/php_codesniffer": "^3.6"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Adbar\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Riku Särkinen",
+ "email": "riku@adbar.io"
+ }
+ ],
+ "description": "PHP dot notation access to arrays",
+ "homepage": "https://github.com/adbario/php-dot-notation",
+ "keywords": [
+ "ArrayAccess",
+ "dotnotation"
+ ],
+ "support": {
+ "issues": "https://github.com/adbario/php-dot-notation/issues",
+ "source": "https://github.com/adbario/php-dot-notation/tree/2.3.0"
+ },
+ "time": "2022-07-12T02:52:50+00:00"
+ },
+ {
+ "name": "alibabacloud/client",
+ "version": "1.5.31",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/aliyun/openapi-sdk-php-client.git",
+ "reference": "19224d92fe27ab8ef501d77d4891e7660bc023c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/aliyun/openapi-sdk-php-client/zipball/19224d92fe27ab8ef501d77d4891e7660bc023c1",
+ "reference": "19224d92fe27ab8ef501d77d4891e7660bc023c1",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "adbario/php-dot-notation": "^2.2",
+ "clagiordano/weblibs-configmanager": "^1.0",
+ "danielstjules/stringy": "^3.1",
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "ext-simplexml": "*",
+ "ext-xmlwriter": "*",
+ "guzzlehttp/guzzle": "^6.3|^7.0",
+ "mtdowling/jmespath.php": "^2.5",
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "composer/composer": "^1.8",
+ "drupal/coder": "^8.3",
+ "ext-dom": "*",
+ "ext-pcre": "*",
+ "ext-sockets": "*",
+ "ext-spl": "*",
+ "league/climate": "^3.2.4",
+ "mikey179/vfsstream": "^1.6",
+ "monolog/monolog": "^1.24",
+ "phpunit/phpunit": "^5.7.27|^6.1",
+ "psr/cache": "^1.0",
+ "symfony/dotenv": "^3.4",
+ "symfony/var-dumper": "^3.4"
+ },
+ "suggest": {
+ "ext-sockets": "To use client-side monitoring"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Functions.php"
+ ],
+ "psr-4": {
+ "AlibabaCloud\\Client\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Alibaba Cloud SDK",
+ "email": "sdk-team@alibabacloud.com",
+ "homepage": "http://www.alibabacloud.com"
+ }
+ ],
+ "description": "Alibaba Cloud Client for PHP - Use Alibaba Cloud in your PHP project",
+ "homepage": "https://www.alibabacloud.com/",
+ "keywords": [
+ "alibaba",
+ "alibabacloud",
+ "aliyun",
+ "client",
+ "cloud",
+ "library",
+ "sdk",
+ "tool"
+ ],
+ "support": {
+ "issues": "https://github.com/aliyun/openapi-sdk-php-client/issues",
+ "source": "https://github.com/aliyun/openapi-sdk-php-client"
+ },
+ "time": "2021-05-13T06:26:38+00:00"
+ },
+ {
+ "name": "alibabacloud/sts",
+ "version": "1.8.884",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/alibabacloud-sdk-php/sts.git",
+ "reference": "c9807a06c7047381b8a2ab4952eb11e8d686a488"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/alibabacloud-sdk-php/sts/zipball/c9807a06c7047381b8a2ab4952eb11e8d686a488",
+ "reference": "c9807a06c7047381b8a2ab4952eb11e8d686a488",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "alibabacloud/client": "^1.5",
+ "php": ">=5.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "AlibabaCloud\\Sts\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Alibaba Cloud SDK",
+ "email": "sdk-team@alibabacloud.com",
+ "homepage": "http://www.alibabacloud.com"
+ }
+ ],
+ "description": "Alibaba Cloud Sts SDK for PHP",
+ "homepage": "https://www.alibabacloud.com/",
+ "keywords": [
+ "alibaba",
+ "alibabacloud",
+ "aliyun",
+ "cloud",
+ "library",
+ "sdk",
+ "sts"
+ ],
+ "support": {
+ "issues": "https://github.com/alibabacloud-sdk-php/sts/issues",
+ "source": "https://github.com/alibabacloud-sdk-php/sts"
+ },
+ "time": "2019-05-30T05:03:57+00:00"
+ },
+ {
+ "name": "aliyuncs/oss-sdk-php",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
+ "reference": "f0413667d765855eb0aaa728b596801464ffdb06"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/f0413667d765855eb0aaa728b596801464ffdb06",
+ "reference": "f0413667d765855eb0aaa728b596801464ffdb06",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*",
+ "satooshi/php-coveralls": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "OSS\\": "src/OSS"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Aliyuncs",
+ "homepage": "http://www.aliyun.com"
+ }
+ ],
+ "description": "Aliyun OSS SDK for PHP",
+ "homepage": "http://www.aliyun.com/product/oss/",
+ "support": {
+ "issues": "https://github.com/aliyun/aliyun-oss-php-sdk/issues",
+ "source": "https://github.com/aliyun/aliyun-oss-php-sdk/tree/v2.5.0"
+ },
+ "time": "2022-05-13T07:41:28+00:00"
+ },
+ {
+ "name": "asm89/stack-cors",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/asm89/stack-cors.git",
+ "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+ "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "symfony/http-foundation": "^4|^5|^6",
+ "symfony/http-kernel": "^4|^5|^6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7|^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Asm89\\Stack\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alexander",
+ "email": "iam.asm89@gmail.com"
+ }
+ ],
+ "description": "Cross-origin resource sharing library and stack middleware",
+ "homepage": "https://github.com/asm89/stack-cors",
+ "keywords": [
+ "cors",
+ "stack"
+ ],
+ "support": {
+ "issues": "https://github.com/asm89/stack-cors/issues",
+ "source": "https://github.com/asm89/stack-cors/tree/v2.1.1"
+ },
+ "time": "2022-01-18T09:12:03+00:00"
+ },
+ {
+ "name": "bacon/bacon-qr-code",
+ "version": "2.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Bacon/BaconQrCode.git",
+ "reference": "0069435e2a01a57193b25790f105a5d3168653c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/0069435e2a01a57193b25790f105a5d3168653c1",
+ "reference": "0069435e2a01a57193b25790f105a5d3168653c1",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "dasprid/enum": "^1.0.3",
+ "ext-iconv": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phly/keep-a-changelog": "^2.1",
+ "phpunit/phpunit": "^7 | ^8 | ^9",
+ "spatie/phpunit-snapshot-assertions": "^4.2.9",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "suggest": {
+ "ext-imagick": "to generate QR code images"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "BaconQrCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/",
+ "role": "Developer"
+ }
+ ],
+ "description": "BaconQrCode is a QR code generator for PHP.",
+ "homepage": "https://github.com/Bacon/BaconQrCode",
+ "support": {
+ "issues": "https://github.com/Bacon/BaconQrCode/issues",
+ "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.6"
+ },
+ "time": "2022-02-04T20:16:05+00:00"
+ },
+ {
+ "name": "brick/math",
+ "version": "0.9.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
+ "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
+ "vimeo/psalm": "4.9.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "brick",
+ "math"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/0.9.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/brick/math",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-15T20:50:18+00:00"
+ },
+ {
+ "name": "clagiordano/weblibs-configmanager",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/clagiordano/weblibs-configmanager.git",
+ "reference": "5c8ebcc62782313b1278afe802b120d18c07a059"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/clagiordano/weblibs-configmanager/zipball/5c8ebcc62782313b1278afe802b120d18c07a059",
+ "reference": "5c8ebcc62782313b1278afe802b120d18c07a059",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "clagiordano/phpunit-result-printer": "^1",
+ "phpunit/phpunit": "^4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "clagiordano\\weblibs\\configmanager\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Claudio Giordano",
+ "email": "claudio.giordano@autistici.org",
+ "role": "Developer"
+ }
+ ],
+ "description": "weblibs-configmanager is a tool library for easily read and access to php config array file and direct read/write configuration file / object",
+ "keywords": [
+ "clagiordano",
+ "configuration",
+ "manager",
+ "tool",
+ "weblibs"
+ ],
+ "support": {
+ "issues": "https://github.com/clagiordano/weblibs-configmanager/issues",
+ "source": "https://github.com/clagiordano/weblibs-configmanager/tree/v1.2.0"
+ },
+ "time": "2021-05-18T17:55:57+00:00"
+ },
+ {
+ "name": "danielstjules/stringy",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/danielstjules/Stringy.git",
+ "reference": "df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/danielstjules/Stringy/zipball/df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e",
+ "reference": "df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.4.0",
+ "symfony/polyfill-mbstring": "~1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Create.php"
+ ],
+ "psr-4": {
+ "Stringy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel St. Jules",
+ "email": "danielst.jules@gmail.com",
+ "homepage": "http://www.danielstjules.com"
+ }
+ ],
+ "description": "A string manipulation library with multibyte support",
+ "homepage": "https://github.com/danielstjules/Stringy",
+ "keywords": [
+ "UTF",
+ "helpers",
+ "manipulation",
+ "methods",
+ "multibyte",
+ "string",
+ "utf-8",
+ "utility",
+ "utils"
+ ],
+ "support": {
+ "issues": "https://github.com/danielstjules/Stringy/issues",
+ "source": "https://github.com/danielstjules/Stringy"
+ },
+ "time": "2017-06-12T01:10:27+00:00"
+ },
+ {
+ "name": "dasprid/enum",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/DASPRiD/Enum.git",
+ "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2",
+ "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7 | ^8 | ^9",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DASPRiD\\Enum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP 7.1 enum implementation",
+ "keywords": [
+ "enum",
+ "map"
+ ],
+ "support": {
+ "issues": "https://github.com/DASPRiD/Enum/issues",
+ "source": "https://github.com/DASPRiD/Enum/tree/1.0.3"
+ },
+ "time": "2020-10-02T16:03:48+00:00"
+ },
+ {
+ "name": "dflydev/dot-access-data",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+ "reference": "0992cc19268b259a39e86f296da5f0677841f42c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
+ "reference": "0992cc19268b259a39e86f296da5f0677841f42c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+ "scrutinizer/ocular": "1.6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^3.14"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dflydev\\DotAccessData\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dragonfly Development Inc.",
+ "email": "info@dflydev.com",
+ "homepage": "http://dflydev.com"
+ },
+ {
+ "name": "Beau Simensen",
+ "email": "beau@dflydev.com",
+ "homepage": "http://beausimensen.com"
+ },
+ {
+ "name": "Carlos Frutos",
+ "email": "carlos@kiwing.it",
+ "homepage": "https://github.com/cfrutos"
+ },
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com"
+ }
+ ],
+ "description": "Given a deep data structure, access data by dot notation.",
+ "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+ "keywords": [
+ "access",
+ "data",
+ "dot",
+ "notation"
+ ],
+ "support": {
+ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
+ },
+ "time": "2021-08-13T13:06:58+00:00"
+ },
+ {
+ "name": "doctrine/cache",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/cache.git",
+ "reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
+ "reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "~7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/common": ">2.2,<2.4"
+ },
+ "require-dev": {
+ "cache/integration-tests": "dev-master",
+ "doctrine/coding-standard": "^9",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psr/cache": "^1.0 || ^2.0 || ^3.0",
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "symfony/var-exporter": "^4.4 || ^5.4 || ^6"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
+ "homepage": "https://www.doctrine-project.org/projects/cache.html",
+ "keywords": [
+ "abstraction",
+ "apcu",
+ "cache",
+ "caching",
+ "couchdb",
+ "memcached",
+ "php",
+ "redis",
+ "xcache"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/cache/issues",
+ "source": "https://github.com/doctrine/cache/tree/2.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-20T20:07:39+00:00"
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "3.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal.git",
+ "reference": "9f79d4650430b582f4598fe0954ef4d52fbc0a8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f79d4650430b582f4598fe0954ef4d52fbc0a8a",
+ "reference": "9f79d4650430b582f4598fe0954ef4d52fbc0a8a",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "composer-runtime-api": "^2",
+ "doctrine/cache": "^1.11|^2.0",
+ "doctrine/deprecations": "^0.5.3|^1",
+ "doctrine/event-manager": "^1.0",
+ "php": "^7.3 || ^8.0",
+ "psr/cache": "^1|^2|^3",
+ "psr/log": "^1|^2|^3"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "9.0.0",
+ "jetbrains/phpstorm-stubs": "2022.1",
+ "phpstan/phpstan": "1.7.13",
+ "phpstan/phpstan-strict-rules": "^1.2",
+ "phpunit/phpunit": "9.5.20",
+ "psalm/plugin-phpunit": "0.16.1",
+ "squizlabs/php_codesniffer": "3.7.0",
+ "symfony/cache": "^5.2|^6.0",
+ "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
+ "vimeo/psalm": "4.23.0"
+ },
+ "suggest": {
+ "symfony/console": "For helpful console commands such as SQL execution and import of files."
+ },
+ "bin": [
+ "bin/doctrine-dbal"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\DBAL\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
+ "homepage": "https://www.doctrine-project.org/projects/dbal.html",
+ "keywords": [
+ "abstraction",
+ "database",
+ "db2",
+ "dbal",
+ "mariadb",
+ "mssql",
+ "mysql",
+ "oci8",
+ "oracle",
+ "pdo",
+ "pgsql",
+ "postgresql",
+ "queryobject",
+ "sasql",
+ "sql",
+ "sqlite",
+ "sqlserver",
+ "sqlsrv"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/dbal/issues",
+ "source": "https://github.com/doctrine/dbal/tree/3.3.7"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-13T21:43:03+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpunit/phpunit": "^7.5|^8.5|^9.5",
+ "psr/log": "^1|^2|^3"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
+ },
+ "time": "2022-05-02T15:47:09+00:00"
+ },
+ {
+ "name": "doctrine/event-manager",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/event-manager.git",
+ "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
+ "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/common": "<2.9@dev"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^6.0",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\": "lib/Doctrine/Common"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ }
+ ],
+ "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
+ "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
+ "keywords": [
+ "event",
+ "event dispatcher",
+ "event manager",
+ "event system",
+ "events"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/event-manager/issues",
+ "source": "https://github.com/doctrine/event-manager/tree/1.1.x"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-29T18:28:51+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+ "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^8.2",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+ "vimeo/psalm": "^4.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+ "keywords": [
+ "inflection",
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-22T20:16:43+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-28T11:07:21+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+ "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "webmozart/assert": "^1.0"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-webmozart-assert": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2022-01-18T15:43:28+00:00"
+ },
+ {
+ "name": "easywechat-composer/easywechat-composer",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mingyoung/easywechat-composer.git",
+ "reference": "3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mingyoung/easywechat-composer/zipball/3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd",
+ "reference": "3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "composer/composer": "^1.0 || ^2.0",
+ "phpunit/phpunit": "^6.5 || ^7.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "EasyWeChatComposer\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "EasyWeChatComposer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "张铭阳",
+ "email": "mingyoungcheung@gmail.com"
+ }
+ ],
+ "description": "The composer plugin for EasyWeChat",
+ "support": {
+ "issues": "https://github.com/mingyoung/easywechat-composer/issues",
+ "source": "https://github.com/mingyoung/easywechat-composer/tree/1.4.1"
+ },
+ "time": "2021-07-05T04:03:22+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "2.1.25",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "doctrine/lexer": "^1.0.1",
+ "php": ">=5.5",
+ "symfony/polyfill-intl-idn": "^1.10"
+ },
+ "require-dev": {
+ "dominicsayers/isemail": "^3.0.7",
+ "phpunit/phpunit": "^4.8.36|^7.5.15",
+ "satooshi/php-coveralls": "^1.0.1"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2020-12-29T14:50:06+00:00"
+ },
+ {
+ "name": "encore/laravel-admin",
+ "version": "v1.8.19",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/z-song/laravel-admin.git",
+ "reference": "6c292ebb5efa886fa4776d86e975180608505946"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/z-song/laravel-admin/zipball/6c292ebb5efa886fa4776d86e975180608505946",
+ "reference": "6c292ebb5efa886fa4776d86e975180608505946",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "doctrine/dbal": "2.*|3.*",
+ "laravel/framework": ">=5.5",
+ "php": ">=7.0.0",
+ "symfony/dom-crawler": "~3.1|~4.0|~5.0"
+ },
+ "require-dev": {
+ "fzaninotto/faker": "~1.4",
+ "intervention/image": "~2.3",
+ "laravel/browser-kit-testing": "^6.0",
+ "laravel/laravel": ">=5.5",
+ "spatie/phpunit-watcher": "^1.22.0"
+ },
+ "suggest": {
+ "intervention/image": "Required to handling and manipulation upload images (~2.3).",
+ "spatie/eloquent-sortable": "Required to built orderable gird."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Encore\\Admin\\AdminServiceProvider"
+ ],
+ "aliases": {
+ "Admin": "Encore\\Admin\\Facades\\Admin"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Encore\\Admin\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "zsong",
+ "email": "zosong@126.com"
+ }
+ ],
+ "description": "laravel admin",
+ "homepage": "https://github.com/z-song/laravel-admin",
+ "keywords": [
+ "admin",
+ "form",
+ "grid",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/z-song/laravel-admin/issues",
+ "source": "https://github.com/z-song/laravel-admin/tree/v1.8.19"
+ },
+ "time": "2022-05-24T03:49:38+00:00"
+ },
+ {
+ "name": "ezyang/htmlpurifier",
+ "version": "v4.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ezyang/htmlpurifier.git",
+ "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
+ "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "library/HTMLPurifier.composer.php"
+ ],
+ "psr-0": {
+ "HTMLPurifier": "library/"
+ },
+ "exclude-from-classmap": [
+ "/library/HTMLPurifier/Language/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Edward Z. Yang",
+ "email": "admin@htmlpurifier.org",
+ "homepage": "http://ezyang.com"
+ }
+ ],
+ "description": "Standards compliant HTML filter written in PHP",
+ "homepage": "http://htmlpurifier.org/",
+ "keywords": [
+ "html"
+ ],
+ "support": {
+ "issues": "https://github.com/ezyang/htmlpurifier/issues",
+ "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0"
+ },
+ "time": "2021-12-25T01:21:49+00:00"
+ },
+ {
+ "name": "fideloper/proxy",
+ "version": "4.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fideloper/TrustedProxy.git",
+ "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0",
+ "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Fideloper\\Proxy\\TrustedProxyServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fideloper\\Proxy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Fidao",
+ "email": "fideloper@gmail.com"
+ }
+ ],
+ "description": "Set trusted proxies for Laravel",
+ "keywords": [
+ "load balancing",
+ "proxy",
+ "trusted proxy"
+ ],
+ "support": {
+ "issues": "https://github.com/fideloper/TrustedProxy/issues",
+ "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1"
+ },
+ "time": "2020-10-22T13:48:01+00:00"
+ },
+ {
+ "name": "fruitcake/laravel-cors",
+ "version": "v2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fruitcake/laravel-cors.git",
+ "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534",
+ "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "asm89/stack-cors": "^2.0.1",
+ "illuminate/contracts": "^6|^7|^8|^9",
+ "illuminate/support": "^6|^7|^8|^9",
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "laravel/framework": "^6|^7.24|^8",
+ "orchestra/testbench-dusk": "^4|^5|^6|^7",
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Fruitcake\\Cors\\CorsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fruitcake\\Cors\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fruitcake",
+ "homepage": "https://fruitcake.nl"
+ },
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application",
+ "keywords": [
+ "api",
+ "cors",
+ "crossdomain",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/fruitcake/laravel-cors/issues",
+ "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/barryvdh",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-23T14:25:13+00:00"
+ },
+ {
+ "name": "genealabs/laravel-model-caching",
+ "version": "0.11.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GeneaLabs/laravel-model-caching.git",
+ "reference": "ff303d782cb63a9c44bcd76a28bde73a67040c7e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GeneaLabs/laravel-model-caching/zipball/ff303d782cb63a9c44bcd76a28bde73a67040c7e",
+ "reference": "ff303d782cb63a9c44bcd76a28bde73a67040c7e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "genealabs/laravel-pivot-events": "^8.0",
+ "illuminate/cache": "^8.0",
+ "illuminate/config": "^8.0",
+ "illuminate/console": "^8.0",
+ "illuminate/container": "^8.0",
+ "illuminate/database": "^8.0",
+ "illuminate/http": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^2.10",
+ "fakerphp/faker": "^1.11",
+ "laravel/legacy-factories": "^1.0",
+ "laravel/nova": "^3.9",
+ "orchestra/testbench": "^6.0",
+ "orchestra/testbench-browser-kit": "^6.0",
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpmd/phpmd": "^2.7",
+ "phpunit/phpunit": "^9.0",
+ "slevomat/coding-standard": "^6.4",
+ "squizlabs/php_codesniffer": "^3.4",
+ "symfony/thanks": "^1.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "GeneaLabs\\LaravelModelCaching\\Providers\\Service"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GeneaLabs\\LaravelModelCaching\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike Bronner",
+ "email": "hello@genealabs.com"
+ }
+ ],
+ "description": "Automatic caching for Eloquent models.",
+ "support": {
+ "issues": "https://github.com/GeneaLabs/laravel-model-caching/issues",
+ "source": "https://github.com/GeneaLabs/laravel-model-caching/tree/0.11.7"
+ },
+ "time": "2022-02-03T13:21:28+00:00"
+ },
+ {
+ "name": "genealabs/laravel-pivot-events",
+ "version": "8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GeneaLabs/laravel-pivot-events.git",
+ "reference": "aafc9d7f6a0b31e0d58bd2b31e38253fbd27c2a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GeneaLabs/laravel-pivot-events/zipball/aafc9d7f6a0b31e0d58bd2b31e38253fbd27c2a9",
+ "reference": "aafc9d7f6a0b31e0d58bd2b31e38253fbd27c2a9",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "illuminate/database": "^8.0",
+ "illuminate/support": "^8.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^6.0",
+ "symfony/thanks": "^1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GeneaLabs\\LaravelPivotEvents\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike Bronner",
+ "email": "hello@genealabs.com",
+ "homepage": "https://genealabs.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "This package introduces new eloquent events for sync(), attach(), detach() or updateExistingPivot() methods on BelongsToMany relation.",
+ "homepage": "https://github.com/fico7489/laravel-pivot",
+ "keywords": [
+ "eloquent events",
+ "eloquent extra events",
+ "laravel BelongsToMany events",
+ "laravel pivot events",
+ "laravel sync events"
+ ],
+ "support": {
+ "issues": "https://github.com/fico7489/laravel-pivot/issues",
+ "source": "https://github.com/fico7489/laravel-pivot"
+ },
+ "time": "2020-09-08T14:39:12+00:00"
+ },
+ {
+ "name": "giggsey/libphonenumber-for-php",
+ "version": "8.12.50",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/giggsey/libphonenumber-for-php.git",
+ "reference": "526c4b7f6d5e173770d8645e76340d7eb25dc348"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/526c4b7f6d5e173770d8645e76340d7eb25dc348",
+ "reference": "526c4b7f6d5e173770d8645e76340d7eb25dc348",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "giggsey/locale": "^1.7|^2.0",
+ "php": ">=5.3.2",
+ "symfony/polyfill-mbstring": "^1.17"
+ },
+ "require-dev": {
+ "pear/pear-core-minimal": "^1.9",
+ "pear/pear_exception": "^1.0",
+ "pear/versioncontrol_git": "^0.5",
+ "phing/phing": "^2.7",
+ "php-coveralls/php-coveralls": "^1.0|^2.0",
+ "symfony/console": "^2.8|^3.0|^v4.4|^v5.2",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "libphonenumber\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "/src/data/",
+ "/src/carrier/data/",
+ "/src/geocoding/data/",
+ "/src/timezone/data/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Joshua Gigg",
+ "email": "giggsey@gmail.com",
+ "homepage": "https://giggsey.com/"
+ }
+ ],
+ "description": "PHP Port of Google's libphonenumber",
+ "homepage": "https://github.com/giggsey/libphonenumber-for-php",
+ "keywords": [
+ "geocoding",
+ "geolocation",
+ "libphonenumber",
+ "mobile",
+ "phonenumber",
+ "validation"
+ ],
+ "support": {
+ "irc": "irc://irc.appliedirc.com/lobby",
+ "issues": "https://github.com/giggsey/libphonenumber-for-php/issues",
+ "source": "https://github.com/giggsey/libphonenumber-for-php"
+ },
+ "time": "2022-06-09T14:55:00+00:00"
+ },
+ {
+ "name": "giggsey/locale",
+ "version": "2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/giggsey/Locale.git",
+ "reference": "9c1dca769253f6a3e81f9a5c167f53b6a54ab635"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/giggsey/Locale/zipball/9c1dca769253f6a3e81f9a5c167f53b6a54ab635",
+ "reference": "9c1dca769253f6a3e81f9a5c167f53b6a54ab635",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "ext-json": "*",
+ "pear/pear-core-minimal": "^1.9",
+ "pear/pear_exception": "^1.0",
+ "pear/versioncontrol_git": "^0.5",
+ "phing/phing": "^2.7",
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpunit/phpunit": "^8.5|^9.5",
+ "symfony/console": "^5.0",
+ "symfony/filesystem": "^5.0",
+ "symfony/finder": "^5.0",
+ "symfony/process": "^5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Giggsey\\Locale\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Joshua Gigg",
+ "email": "giggsey@gmail.com",
+ "homepage": "https://giggsey.com/"
+ }
+ ],
+ "description": "Locale functions required by libphonenumber-for-php",
+ "support": {
+ "issues": "https://github.com/giggsey/Locale/issues",
+ "source": "https://github.com/giggsey/Locale/tree/2.2"
+ },
+ "time": "2022-04-06T07:33:59+00:00"
+ },
+ {
+ "name": "graham-campbell/manager",
+ "version": "v4.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Laravel-Manager.git",
+ "reference": "b4cafa6491b9c92ecf7ce17521580050a27b8308"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/b4cafa6491b9c92ecf7ce17521580050a27b8308",
+ "reference": "b4cafa6491b9c92ecf7ce17521580050a27b8308",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "php": "^7.1.3 || ^8.0"
+ },
+ "require-dev": {
+ "graham-campbell/analyzer": "^2.4 || ^3.0",
+ "graham-campbell/testbench-core": "^3.4",
+ "mockery/mockery": "^1.3.1",
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\Manager\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Manager Provides Some Manager Functionality For Laravel",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Laravel Manager",
+ "Laravel-Manager",
+ "connector",
+ "framework",
+ "interface",
+ "laravel",
+ "manager"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Manager/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Manager/tree/v4.7.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/manager",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-24T01:59:19+00:00"
+ },
+ {
+ "name": "graham-campbell/result-type",
+ "version": "v1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "0690bde05318336c7221785f2a932467f98b64ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca",
+ "reference": "0690bde05318336c7221785f2a932467f98b64ca",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "phpoption/phpoption": "^1.8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-21T21:41:47+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.4.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
+ "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5",
+ "guzzlehttp/psr7": "^1.9 || ^2.4",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "ext-curl": "*",
+ "php-http/client-integration-tests": "^3.0",
+ "phpunit/phpunit": "^8.5.5 || ^9.3.5",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.4.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-20T22:16:13+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "1.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/1.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-22T20:56:57+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "13388f00956b1503577598873fffb5ae994b5737"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
+ "reference": "13388f00956b1503577598873fffb5ae994b5737",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.8 || ^9.3.10"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-20T21:43:11+00:00"
+ },
+ {
+ "name": "hashids/hashids",
+ "version": "4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vinkla/hashids.git",
+ "reference": "8cab111f78e0bd9c76953b082919fc9e251761be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vinkla/hashids/zipball/8cab111f78e0bd9c76953b082919fc9e251761be",
+ "reference": "8cab111f78e0bd9c76953b082919fc9e251761be",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.0 || ^9.4",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "suggest": {
+ "ext-bcmath": "Required to use BC Math arbitrary precision mathematics (*).",
+ "ext-gmp": "Required to use GNU multiple precision mathematics (*)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Hashids\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ivan Akimov",
+ "email": "ivan@barreleye.com"
+ },
+ {
+ "name": "Vincent Klaiber",
+ "email": "hello@doubledip.se"
+ }
+ ],
+ "description": "Generate short, unique, non-sequential ids (like YouTube and Bitly) from numbers",
+ "homepage": "https://hashids.org/php",
+ "keywords": [
+ "bitly",
+ "decode",
+ "encode",
+ "hash",
+ "hashid",
+ "hashids",
+ "ids",
+ "obfuscate",
+ "youtube"
+ ],
+ "support": {
+ "issues": "https://github.com/vinkla/hashids/issues",
+ "source": "https://github.com/vinkla/hashids/tree/4.1.0"
+ },
+ "time": "2020-11-26T19:24:33+00:00"
+ },
+ {
+ "name": "iidestiny/flysystem-oss",
+ "version": "2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/iiDestiny/flysystem-oss.git",
+ "reference": "c943ce550e973129955275bb17e8182fe8a74020"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/iiDestiny/flysystem-oss/zipball/c943ce550e973129955275bb17e8182fe8a74020",
+ "reference": "c943ce550e973129955275bb17e8182fe8a74020",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "aliyuncs/oss-sdk-php": "^2.4",
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-openssl": "*",
+ "league/flysystem": "^1.0",
+ "nesbot/carbon": "^1.24.1 || ^2.0",
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.2",
+ "phpunit/phpunit": "^6.5",
+ "symfony/var-dumper": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Iidestiny\\Flysystem\\Oss\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "iidestiny",
+ "email": "iidestiny@vip.qq.com"
+ }
+ ],
+ "description": "Flysystem adapter for the Oss storage.",
+ "keywords": [
+ "alioss",
+ "laravel",
+ "oss",
+ "阿里oss"
+ ],
+ "support": {
+ "issues": "https://github.com/iiDestiny/flysystem-oss/issues",
+ "source": "https://github.com/iiDestiny/flysystem-oss/tree/2.7"
+ },
+ "time": "2021-06-14T10:18:58+00:00"
+ },
+ {
+ "name": "iidestiny/laravel-filesystem-oss",
+ "version": "2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/iiDestiny/laravel-filesystem-oss.git",
+ "reference": "ae3cd6fd3cd727eedda0e2bcd0403a6d79fe4223"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/iiDestiny/laravel-filesystem-oss/zipball/ae3cd6fd3cd727eedda0e2bcd0403a6d79fe4223",
+ "reference": "ae3cd6fd3cd727eedda0e2bcd0403a6d79fe4223",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "iidestiny/flysystem-oss": "~2.0",
+ "php": "^7.0|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Iidestiny\\LaravelFilesystemOss\\OssStorageServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Iidestiny\\LaravelFilesystemOss\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "iidestiny",
+ "email": "iidestiny@vip.qq.com"
+ }
+ ],
+ "description": "Oss storage filesystem for Laravel.",
+ "support": {
+ "issues": "https://github.com/iiDestiny/laravel-filesystem-oss/issues",
+ "source": "https://github.com/iiDestiny/laravel-filesystem-oss/tree/2.1"
+ },
+ "time": "2020-11-30T06:17:22+00:00"
+ },
+ {
+ "name": "intervention/image",
+ "version": "2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Intervention/image.git",
+ "reference": "04be355f8d6734c826045d02a1079ad658322dad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad",
+ "reference": "04be355f8d6734c826045d02a1079ad658322dad",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "guzzlehttp/psr7": "~1.1 || ^2.0",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9.2",
+ "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15"
+ },
+ "suggest": {
+ "ext-gd": "to use GD library based image processing.",
+ "ext-imagick": "to use Imagick based image processing.",
+ "intervention/imagecache": "Caching extension for the Intervention Image library"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Intervention\\Image\\ImageServiceProvider"
+ ],
+ "aliases": {
+ "Image": "Intervention\\Image\\Facades\\Image"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Intervention\\Image\\": "src/Intervention/Image"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Oliver Vogel",
+ "email": "oliver@intervention.io",
+ "homepage": "https://intervention.io/"
+ }
+ ],
+ "description": "Image handling and manipulation library with support for Laravel integration",
+ "homepage": "http://image.intervention.io/",
+ "keywords": [
+ "gd",
+ "image",
+ "imagick",
+ "laravel",
+ "thumbnail",
+ "watermark"
+ ],
+ "support": {
+ "issues": "https://github.com/Intervention/image/issues",
+ "source": "https://github.com/Intervention/image/tree/2.7.2"
+ },
+ "funding": [
+ {
+ "url": "https://paypal.me/interventionio",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/Intervention",
+ "type": "github"
+ }
+ ],
+ "time": "2022-05-21T17:30:32+00:00"
+ },
+ {
+ "name": "jasonc/api",
+ "version": "5.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cjango/laravel-api.git",
+ "reference": "5aa10d6bd60267dc91c45ab3d1e8489d88282d6f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cjango/laravel-api/zipball/5aa10d6bd60267dc91c45ab3d1e8489d88282d6f",
+ "reference": "5aa10d6bd60267dc91c45ab3d1e8489d88282d6f",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "laravel/framework": "^8.56",
+ "laravel/sanctum": "^2.11",
+ "php": ">=7.4.0",
+ "yangjisen/laravel-cache-provider": "^3.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Jason\\Api\\ApiServiceProvider"
+ ],
+ "aliases": {
+ "Api": "Jason\\Api"
+ }
+ }
+ },
+ "autoload": {
+ "files": [],
+ "psr-4": {
+ "Jason\\Api\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "C.Jason",
+ "email": "chenjxlg@163.com"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/cjango/laravel-api/issues",
+ "source": "https://github.com/cjango/laravel-api/tree/5.0.5"
+ },
+ "time": "2022-01-25T02:15:36+00:00"
+ },
+ {
+ "name": "joshbrw/laravel-module-installer",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/joshbrw/laravel-module-installer.git",
+ "reference": "667820efd0652df8ed61420cd0dec8df1b3ecdd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/joshbrw/laravel-module-installer/zipball/667820efd0652df8ed61420cd0dec8df1b3ecdd2",
+ "reference": "667820efd0652df8ed61420cd0dec8df1b3ecdd2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "composer-plugin-api": "^2.0",
+ "php": "7.* || 8.*"
+ },
+ "require-dev": {
+ "composer/composer": "^2.0",
+ "mockery/mockery": "~1.0",
+ "phpunit/phpunit": "~8.0 || ~9.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Joshbrw\\LaravelModuleInstaller\\LaravelModuleInstallerPlugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "Joshbrw\\LaravelModuleInstaller\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "support": {
+ "issues": "https://github.com/joshbrw/laravel-module-installer/issues",
+ "source": "https://github.com/joshbrw/laravel-module-installer/tree/v2.0.1"
+ },
+ "time": "2021-01-17T21:51:00+00:00"
+ },
+ {
+ "name": "laravel-admin-ext/grid-lightbox",
+ "version": "v1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel-admin-extensions/grid-lightbox.git",
+ "reference": "f8a247f0d017eb05830cc720fb621401b1bfbc2c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel-admin-extensions/grid-lightbox/zipball/f8a247f0d017eb05830cc720fb621401b1bfbc2c",
+ "reference": "f8a247f0d017eb05830cc720fb621401b1bfbc2c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "encore/laravel-admin": "~1.6",
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Encore\\Grid\\Lightbox\\LightboxServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Encore\\Grid\\Lightbox\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "song",
+ "email": "zosong@126.com"
+ }
+ ],
+ "description": "Turn your grid into a lightbox & gallery",
+ "homepage": "https://github.com/laravel-admin-ext/grid-lightbox",
+ "keywords": [
+ "extension",
+ "gallery",
+ "grid",
+ "laravel-admin",
+ "lightbox"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel-admin-extensions/grid-lightbox/issues",
+ "source": "https://github.com/laravel-admin-extensions/grid-lightbox/tree/v1.0.3"
+ },
+ "time": "2019-10-11T06:38:51+00:00"
+ },
+ {
+ "name": "laravel-lang/lang",
+ "version": "10.9.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Laravel-Lang/lang.git",
+ "reference": "e341421d40f2cd28feca24ab2cb84fa5cb5ddaf6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/e341421d40f2cd28feca24ab2cb84fa5cb5ddaf6",
+ "reference": "e341421d40f2cd28feca24ab2cb84fa5cb5ddaf6",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*"
+ },
+ "conflict": {
+ "laravel-lang/publisher": "<12.0 >=14.0"
+ },
+ "require-dev": {
+ "dragon-code/pretty-array": "^4.0",
+ "dragon-code/simple-dto": "^2.3",
+ "dragon-code/support": "^6.1",
+ "ext-zip": "*",
+ "guzzlehttp/guzzle": "^7.3",
+ "laravel-lang/publisher": "^13.0",
+ "laravel/breeze": "^1.2",
+ "laravel/fortify": "^1.7",
+ "laravel/jetstream": "^2.3",
+ "laravel/ui": "^3.4",
+ "orchestra/testbench": "^7.0",
+ "php": "^8.1",
+ "phpunit/phpunit": "^9.5",
+ "symfony/finder": "^6.0",
+ "symfony/var-dumper": "^6.0",
+ "vlucas/phpdotenv": "^5.4.1"
+ },
+ "suggest": {
+ "arcanedev/laravel-lang": "Translations manager and checker for Laravel 5",
+ "laravel-lang/publisher": "Easy installation and update of translation files for your project",
+ "overtrue/laravel-lang": "Command to add languages in your project"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "LaravelLang\\Lang\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laravel-Lang Team",
+ "homepage": "https://github.com/Laravel-Lang"
+ }
+ ],
+ "description": "Languages for Laravel",
+ "keywords": [
+ "lang",
+ "languages",
+ "laravel",
+ "lpm"
+ ],
+ "support": {
+ "issues": "https://github.com/Laravel-Lang/lang/issues",
+ "source": "https://github.com/Laravel-Lang/lang"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/laravel-lang",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2022-06-27T01:57:27+00:00"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v8.83.19",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "4264f2ee12330bdb1be050998f58ba7271236395"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/4264f2ee12330bdb1be050998f58ba7271236395",
+ "reference": "4264f2ee12330bdb1be050998f58ba7271236395",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "doctrine/inflector": "^1.4|^2.0",
+ "dragonmantank/cron-expression": "^3.0.2",
+ "egulias/email-validator": "^2.1.10",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "laravel/serializable-closure": "^1.0",
+ "league/commonmark": "^1.3|^2.0.2",
+ "league/flysystem": "^1.1",
+ "monolog/monolog": "^2.0",
+ "nesbot/carbon": "^2.53.1",
+ "opis/closure": "^3.6",
+ "php": "^7.3|^8.0",
+ "psr/container": "^1.0",
+ "psr/log": "^1.0|^2.0",
+ "psr/simple-cache": "^1.0",
+ "ramsey/uuid": "^4.2.2",
+ "swiftmailer/swiftmailer": "^6.3",
+ "symfony/console": "^5.4",
+ "symfony/error-handler": "^5.4",
+ "symfony/finder": "^5.4",
+ "symfony/http-foundation": "^5.4",
+ "symfony/http-kernel": "^5.4",
+ "symfony/mime": "^5.4",
+ "symfony/process": "^5.4",
+ "symfony/routing": "^5.4",
+ "symfony/var-dumper": "^5.4",
+ "tijsverkoyen/css-to-inline-styles": "^2.2.2",
+ "vlucas/phpdotenv": "^5.4.1",
+ "voku/portable-ascii": "^1.6.1"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
+ },
+ "provide": {
+ "psr/container-implementation": "1.0",
+ "psr/simple-cache-implementation": "1.0"
+ },
+ "replace": {
+ "illuminate/auth": "self.version",
+ "illuminate/broadcasting": "self.version",
+ "illuminate/bus": "self.version",
+ "illuminate/cache": "self.version",
+ "illuminate/collections": "self.version",
+ "illuminate/config": "self.version",
+ "illuminate/console": "self.version",
+ "illuminate/container": "self.version",
+ "illuminate/contracts": "self.version",
+ "illuminate/cookie": "self.version",
+ "illuminate/database": "self.version",
+ "illuminate/encryption": "self.version",
+ "illuminate/events": "self.version",
+ "illuminate/filesystem": "self.version",
+ "illuminate/hashing": "self.version",
+ "illuminate/http": "self.version",
+ "illuminate/log": "self.version",
+ "illuminate/macroable": "self.version",
+ "illuminate/mail": "self.version",
+ "illuminate/notifications": "self.version",
+ "illuminate/pagination": "self.version",
+ "illuminate/pipeline": "self.version",
+ "illuminate/queue": "self.version",
+ "illuminate/redis": "self.version",
+ "illuminate/routing": "self.version",
+ "illuminate/session": "self.version",
+ "illuminate/support": "self.version",
+ "illuminate/testing": "self.version",
+ "illuminate/translation": "self.version",
+ "illuminate/validation": "self.version",
+ "illuminate/view": "self.version"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^3.198.1",
+ "doctrine/dbal": "^2.13.3|^3.1.4",
+ "filp/whoops": "^2.14.3",
+ "guzzlehttp/guzzle": "^6.5.5|^7.0.1",
+ "league/flysystem-cached-adapter": "^1.0",
+ "mockery/mockery": "^1.4.4",
+ "orchestra/testbench-core": "^6.27",
+ "pda/pheanstalk": "^4.0",
+ "phpunit/phpunit": "^8.5.19|^9.5.8",
+ "predis/predis": "^1.1.9",
+ "symfony/cache": "^5.4"
+ },
+ "suggest": {
+ "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+ "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).",
+ "brianium/paratest": "Required to run tests in parallel (^6.0).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+ "ext-bcmath": "Required to use the multiple_of validation rule.",
+ "ext-ftp": "Required to use the Flysystem FTP driver.",
+ "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
+ "ext-memcached": "Required to use the memcache cache driver.",
+ "ext-pcntl": "Required to use all features of the queue worker.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
+ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
+ "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+ "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).",
+ "laravel/tinker": "Required to use the tinker console command (^2.0).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
+ "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
+ "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
+ "mockery/mockery": "Required to use mocking (^1.4.4).",
+ "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).",
+ "predis/predis": "Required to use the predis connector (^1.1.9).",
+ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^5.4).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
+ "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Illuminate/Collections/helpers.php",
+ "src/Illuminate/Events/functions.php",
+ "src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\": "src/Illuminate/",
+ "Illuminate\\Support\\": [
+ "src/Illuminate/Macroable/",
+ "src/Illuminate/Collections/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Laravel Framework.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-07-13T13:23:09+00:00"
+ },
+ {
+ "name": "laravel/sanctum",
+ "version": "v2.15.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/sanctum.git",
+ "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473",
+ "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/console": "^6.9|^7.0|^8.0|^9.0",
+ "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0",
+ "illuminate/database": "^6.9|^7.0|^8.0|^9.0",
+ "illuminate/support": "^6.9|^7.0|^8.0|^9.0",
+ "php": "^7.2|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
+ "phpunit/phpunit": "^8.0|^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Sanctum\\SanctumServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Sanctum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.",
+ "keywords": [
+ "auth",
+ "laravel",
+ "sanctum"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/sanctum/issues",
+ "source": "https://github.com/laravel/sanctum"
+ },
+ "time": "2022-04-08T13:39:49+00:00"
+ },
+ {
+ "name": "laravel/serializable-closure",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "09f0e9fb61829f628205b7c94906c28740ff9540"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540",
+ "reference": "09f0e9fb61829f628205b7c94906c28740ff9540",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "pestphp/pest": "^1.18",
+ "phpstan/phpstan": "^0.12.98",
+ "symfony/var-dumper": "^5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2022-05-16T17:09:47+00:00"
+ },
+ {
+ "name": "league/commonmark",
+ "version": "2.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/commonmark.git",
+ "reference": "0da1dca5781dd3cfddbe328224d9a7a62571addc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/0da1dca5781dd3cfddbe328224d9a7a62571addc",
+ "reference": "0da1dca5781dd3cfddbe328224d9a7a62571addc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "league/config": "^1.1.1",
+ "php": "^7.4 || ^8.0",
+ "psr/event-dispatcher": "^1.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "cebe/markdown": "^1.0",
+ "commonmark/cmark": "0.30.0",
+ "commonmark/commonmark.js": "0.30.0",
+ "composer/package-versions-deprecated": "^1.8",
+ "embed/embed": "^4.4",
+ "erusev/parsedown": "^1.0",
+ "ext-json": "*",
+ "github/gfm": "0.29.0",
+ "michelf/php-markdown": "^1.4",
+ "nyholm/psr7": "^1.5",
+ "phpstan/phpstan": "^0.12.88 || ^1.0.0",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "symfony/finder": "^5.3",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "suggest": {
+ "symfony/yaml": "v2.3+ required if using the Front Matter extension"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\CommonMark\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
+ "homepage": "https://commonmark.thephpleague.com",
+ "keywords": [
+ "commonmark",
+ "flavored",
+ "gfm",
+ "github",
+ "github-flavored",
+ "markdown",
+ "md",
+ "parser"
+ ],
+ "support": {
+ "docs": "https://commonmark.thephpleague.com/",
+ "forum": "https://github.com/thephpleague/commonmark/discussions",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-07T21:28:26+00:00"
+ },
+ {
+ "name": "league/config",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/config.git",
+ "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+ "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "dflydev/dot-access-data": "^3.0.1",
+ "nette/schema": "^1.2",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.90",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Config\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Define configuration arrays with strict schemas and access values with dot notation",
+ "homepage": "https://config.thephpleague.com",
+ "keywords": [
+ "array",
+ "config",
+ "configuration",
+ "dot",
+ "dot-access",
+ "nested",
+ "schema"
+ ],
+ "support": {
+ "docs": "https://config.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/config/issues",
+ "rss": "https://github.com/thephpleague/config/releases.atom",
+ "source": "https://github.com/thephpleague/config"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ }
+ ],
+ "time": "2021-08-14T12:15:32+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.1.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "094defdb4a7001845300334e7c1ee2335925ef99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99",
+ "reference": "094defdb4a7001845300334e7c1ee2335925ef99",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "league/mime-type-detection": "^1.3",
+ "php": "^7.2.5 || ^8.0"
+ },
+ "conflict": {
+ "league/flysystem-sftp": "<1.0.6"
+ },
+ "require-dev": {
+ "phpspec/prophecy": "^1.11.1",
+ "phpunit/phpunit": "^8.5.8"
+ },
+ "suggest": {
+ "ext-ftp": "Allows you to use FTP server storage",
+ "ext-openssl": "Allows you to use FTPS server storage",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/1.1.9"
+ },
+ "funding": [
+ {
+ "url": "https://offset.earth/frankdejonge",
+ "type": "other"
+ }
+ ],
+ "time": "2021-12-09T09:40:50+00:00"
+ },
+ {
+ "name": "league/iso3166",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/iso3166.git",
+ "reference": "1a3ec7e6f1e4f16fce68dc239bafae217fbdcfef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/iso3166/zipball/1a3ec7e6f1e4f16fce68dc239bafae217fbdcfef",
+ "reference": "1a3ec7e6f1e4f16fce68dc239bafae217fbdcfef",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\ISO3166\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com"
+ }
+ ],
+ "description": "ISO 3166-1 PHP Library",
+ "homepage": "https://github.com/thephpleague/iso3166",
+ "keywords": [
+ "3166",
+ "3166-1",
+ "ISO 3166",
+ "countries",
+ "iso",
+ "library"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/iso3166/issues",
+ "source": "https://github.com/thephpleague/iso3166"
+ },
+ "time": "2021-10-22T12:47:55+00:00"
+ },
+ {
+ "name": "league/mime-type-detection",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/mime-type-detection.git",
+ "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
+ "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "phpstan/phpstan": "^0.12.68",
+ "phpunit/phpunit": "^8.5.8 || ^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\MimeTypeDetection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Mime-type detection for Flysystem",
+ "support": {
+ "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/frankdejonge",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-04-17T13:12:02+00:00"
+ },
+ {
+ "name": "liuhelong/laravel-admin-wechat",
+ "version": "1.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://gitee.com/liuhelong/laravel-admin-wechat",
+ "reference": "7bd082dcfdb982ca98a540fffdd1adaa304dab0f"
+ },
+ "require": {
+ "encore/laravel-admin": "~1.8",
+ "overtrue/laravel-wechat": ">=5",
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Liuhelong\\LaravelAdmin\\Wechat\\LaravelAdminWechatServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Liuhelong\\LaravelAdmin\\Wechat\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "liuhelong",
+ "email": "854583481@qq.com"
+ }
+ ],
+ "description": "description...",
+ "homepage": "https://github.com/Liuhelong/LaravelAdminWechat",
+ "keywords": [
+ "extension",
+ "laravel-admin"
+ ],
+ "time": "2022-03-25T08:39:18+00:00"
+ },
+ {
+ "name": "maatwebsite/excel",
+ "version": "3.1.40",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SpartnerNL/Laravel-Excel.git",
+ "reference": "8a54972e3d616c74687c3cbff15765555761885c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/8a54972e3d616c74687c3cbff15765555761885c",
+ "reference": "8a54972e3d616c74687c3cbff15765555761885c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/support": "5.8.*|^6.0|^7.0|^8.0|^9.0",
+ "php": "^7.0|^8.0",
+ "phpoffice/phpspreadsheet": "^1.18"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^6.0|^7.0",
+ "predis/predis": "^1.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Maatwebsite\\Excel\\ExcelServiceProvider"
+ ],
+ "aliases": {
+ "Excel": "Maatwebsite\\Excel\\Facades\\Excel"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Maatwebsite\\Excel\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Patrick Brouwers",
+ "email": "patrick@spartner.nl"
+ }
+ ],
+ "description": "Supercharged Excel exports and imports in Laravel",
+ "keywords": [
+ "PHPExcel",
+ "batch",
+ "csv",
+ "excel",
+ "export",
+ "import",
+ "laravel",
+ "php",
+ "phpspreadsheet"
+ ],
+ "support": {
+ "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues",
+ "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.40"
+ },
+ "funding": [
+ {
+ "url": "https://laravel-excel.com/commercial-support",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/patrickbrouwers",
+ "type": "github"
+ }
+ ],
+ "time": "2022-05-02T13:50:01+00:00"
+ },
+ {
+ "name": "maennchen/zipstream-php",
+ "version": "2.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maennchen/ZipStream-PHP.git",
+ "reference": "211e9ba1530ea5260b45d90c9ea252f56ec52729"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/211e9ba1530ea5260b45d90c9ea252f56ec52729",
+ "reference": "211e9ba1530ea5260b45d90c9ea252f56ec52729",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "myclabs/php-enum": "^1.5",
+ "php": "^7.4 || ^8.0",
+ "psr/http-message": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "require-dev": {
+ "ext-zip": "*",
+ "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.4",
+ "phpunit/phpunit": "^8.5.8 || ^9.4.2",
+ "vimeo/psalm": "^4.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ZipStream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paul Duncan",
+ "email": "pabs@pablotron.org"
+ },
+ {
+ "name": "Jonatan Männchen",
+ "email": "jonatan@maennchen.ch"
+ },
+ {
+ "name": "Jesse Donat",
+ "email": "donatj@gmail.com"
+ },
+ {
+ "name": "András Kolesár",
+ "email": "kolesar@kolesar.hu"
+ }
+ ],
+ "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+ "keywords": [
+ "stream",
+ "zip"
+ ],
+ "support": {
+ "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+ "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/zipstream",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2022-05-18T15:52:06+00:00"
+ },
+ {
+ "name": "markbaker/complex",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPComplex.git",
+ "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/ab8bc271e404909db09ff2d5ffa1e538085c0f22",
+ "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Complex\\": "classes/src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@lange.demon.co.uk"
+ }
+ ],
+ "description": "PHP Class for working with complex numbers",
+ "homepage": "https://github.com/MarkBaker/PHPComplex",
+ "keywords": [
+ "complex",
+ "mathematics"
+ ],
+ "support": {
+ "issues": "https://github.com/MarkBaker/PHPComplex/issues",
+ "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.1"
+ },
+ "time": "2021-06-29T15:32:53+00:00"
+ },
+ {
+ "name": "markbaker/matrix",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPMatrix.git",
+ "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/c66aefcafb4f6c269510e9ac46b82619a904c576",
+ "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpdocumentor/phpdocumentor": "2.*",
+ "phploc/phploc": "^4.0",
+ "phpmd/phpmd": "2.*",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+ "sebastian/phpcpd": "^4.0",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Matrix\\": "classes/src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@demon-angel.eu"
+ }
+ ],
+ "description": "PHP Class for working with matrices",
+ "homepage": "https://github.com/MarkBaker/PHPMatrix",
+ "keywords": [
+ "mathematics",
+ "matrix",
+ "vector"
+ ],
+ "support": {
+ "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
+ "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.0"
+ },
+ "time": "2021-07-01T19:01:15+00:00"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "2.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5579edf28aee1190a798bfa5be8bc16c563bd524",
+ "reference": "5579edf28aee1190a798bfa5be8bc16c563bd524",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "elasticsearch/elasticsearch": "^7 || ^8",
+ "ext-json": "*",
+ "graylog2/gelf-php": "^1.4.2",
+ "guzzlehttp/guzzle": "^7.4",
+ "guzzlehttp/psr7": "^2.2",
+ "mongodb/mongodb": "^1.8",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
+ "php-console/php-console": "^3.1.3",
+ "phpspec/prophecy": "^1.15",
+ "phpstan/phpstan": "^0.12.91",
+ "phpunit/phpunit": "^8.5.14",
+ "predis/predis": "^1.1",
+ "rollbar/rollbar": "^1.3 || ^2 || ^3",
+ "ruflin/elastica": "^7",
+ "swiftmailer/swiftmailer": "^5.3|^6.0",
+ "symfony/mailer": "^5.4 || ^6",
+ "symfony/mime": "^5.4 || ^6"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+ "ext-mbstring": "Allow to work properly with unicode symbols",
+ "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.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": "https://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "https://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/2.7.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-09T08:59:12+00:00"
+ },
+ {
+ "name": "mtdowling/jmespath.php",
+ "version": "2.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jmespath/jmespath.php.git",
+ "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb",
+ "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^5.4 || ^7.0 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.17"
+ },
+ "require-dev": {
+ "composer/xdebug-handler": "^1.4 || ^2.0",
+ "phpunit/phpunit": "^4.8.36 || ^7.5.15"
+ },
+ "bin": [
+ "bin/jp.php"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/JmesPath.php"
+ ],
+ "psr-4": {
+ "JmesPath\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Declaratively specify how to extract elements from a JSON document",
+ "keywords": [
+ "json",
+ "jsonpath"
+ ],
+ "support": {
+ "issues": "https://github.com/jmespath/jmespath.php/issues",
+ "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1"
+ },
+ "time": "2021-06-14T00:11:39+00:00"
+ },
+ {
+ "name": "myclabs/php-enum",
+ "version": "1.8.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/php-enum.git",
+ "reference": "b942d263c641ddb5190929ff840c68f78713e937"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937",
+ "reference": "b942d263c641ddb5190929ff840c68f78713e937",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.3 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5",
+ "squizlabs/php_codesniffer": "1.*",
+ "vimeo/psalm": "^4.6.2"
+ },
+ "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"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/php-enum/issues",
+ "source": "https://github.com/myclabs/php-enum/tree/1.8.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/mnapoli",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-05T08:18:36+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "2.59.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "a9000603ea337c8df16cc41f8b6be95a65f4d0f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a9000603ea337c8df16cc41f8b6be95a65f4d0f5",
+ "reference": "a9000603ea337c8df16cc41f8b6be95a65f4d0f5",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1.8 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^2.0 || ^3.0",
+ "doctrine/orm": "^2.7",
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "kylekatarnls/multi-tester": "^2.0",
+ "ondrejmirtes/better-reflection": "*",
+ "phpmd/phpmd": "^2.9",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12.99 || ^1.7.14",
+ "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "bin": [
+ "bin/carbon"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-3.x": "3.x-dev",
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Carbon\\": "src/Carbon/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "https://markido.com"
+ },
+ {
+ "name": "kylekatarnls",
+ "homepage": "https://github.com/kylekatarnls"
+ }
+ ],
+ "description": "An API extension for DateTime that supports 281 different languages.",
+ "homepage": "https://carbon.nesbot.com",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "docs": "https://carbon.nesbot.com/docs",
+ "issues": "https://github.com/briannesbitt/Carbon/issues",
+ "source": "https://github.com/briannesbitt/Carbon"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon#sponsor",
+ "type": "opencollective"
+ },
+ {
+ "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-29T21:43:55+00:00"
+ },
+ {
+ "name": "nette/schema",
+ "version": "v1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/schema.git",
+ "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df",
+ "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
+ "php": ">=7.1 <8.2"
+ },
+ "require-dev": {
+ "nette/tester": "^2.3 || ^2.4",
+ "phpstan/phpstan-nette": "^0.12",
+ "tracy/tracy": "^2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "📐 Nette Schema: validating data structures against a given Schema.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "config",
+ "nette"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/schema/issues",
+ "source": "https://github.com/nette/schema/tree/v1.2.2"
+ },
+ "time": "2021-10-15T11:40:02+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v3.2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99",
+ "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2 <8.2"
+ },
+ "conflict": {
+ "nette/di": "<3.0.6"
+ },
+ "require-dev": {
+ "nette/tester": "~2.0",
+ "phpstan/phpstan": "^1.0",
+ "tracy/tracy": "^2.3"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
+ "ext-xml": "to use Strings::length() etc. when mbstring is not available"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v3.2.7"
+ },
+ "time": "2022-01-24T11:29:14+00:00"
+ },
+ {
+ "name": "nosun/laravel-ueditor",
+ "version": "v2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nosun/laravel-ueditor.git",
+ "reference": "3f6c9b9f187863f7bdf48bae94b799883d5b64a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nosun/laravel-ueditor/zipball/3f6c9b9f187863f7bdf48bae94b799883d5b64a2",
+ "reference": "3f6c9b9f187863f7bdf48bae94b799883d5b64a2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "laravel/framework": "~5.5|~6.0|~7.0|~8.0"
+ },
+ "require-dev": {
+ "fabpot/php-cs-fixer": "^1.10"
+ },
+ "suggest": {
+ "overtrue/laravel-filesystem-qiniu": "如果你想要使用七牛云存储,也许你需要安装它哦~"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Nosun\\LaravelUEditor\\UEditorServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nosun\\LaravelUEditor\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "nosun",
+ "email": "nosun2008@126.com"
+ }
+ ],
+ "description": "UEditor integration for Laravel.",
+ "support": {
+ "source": "https://github.com/nosun/laravel-ueditor/tree/v2.0.3"
+ },
+ "time": "2020-11-06T09:17:38+00:00"
+ },
+ {
+ "name": "nosun/ueditor",
+ "version": "v3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nosun/UEditor.git",
+ "reference": "02c51e93598e171d52b592391e17ca87e59dda73"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nosun/UEditor/zipball/02c51e93598e171d52b592391e17ca87e59dda73",
+ "reference": "02c51e93598e171d52b592391e17ca87e59dda73",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "encore/laravel-admin": "~1.7",
+ "nosun/laravel-ueditor": "~2.0",
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Nosun\\Ueditor\\UeditorServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nosun\\Ueditor\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "nosun",
+ "email": "nosun2008@126.com"
+ }
+ ],
+ "description": "UEditor extension for laravel-admin",
+ "homepage": "https://github.com/nosun/UEditor",
+ "keywords": [
+ "extension",
+ "laravel-admin",
+ "ueditor"
+ ],
+ "support": {
+ "source": "https://github.com/nosun/UEditor/tree/v3.0.2"
+ },
+ "time": "2020-11-06T09:18:48+00:00"
+ },
+ {
+ "name": "nwidart/laravel-modules",
+ "version": "v8.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nWidart/laravel-modules.git",
+ "reference": "ee06dc0ac019cc392bd66a1c3e6cec0412fcc52d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/ee06dc0ac019cc392bd66a1c3e6cec0412fcc52d",
+ "reference": "ee06dc0ac019cc392bd66a1c3e6cec0412fcc52d",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "laravel/framework": "^8.0",
+ "mockery/mockery": "~1.0",
+ "orchestra/testbench": "^6.2",
+ "phpstan/phpstan": "^0.12.14",
+ "phpunit/phpunit": "^8.5",
+ "spatie/phpunit-snapshot-assertions": "^2.1.0|^4.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Nwidart\\Modules\\LaravelModulesServiceProvider"
+ ],
+ "aliases": {
+ "Module": "Nwidart\\Modules\\Facades\\Module"
+ }
+ },
+ "branch-alias": {
+ "dev-master": "8.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Nwidart\\Modules\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Widart",
+ "email": "n.widart@gmail.com",
+ "homepage": "https://nicolaswidart.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Laravel Module management",
+ "keywords": [
+ "laravel",
+ "module",
+ "modules",
+ "nwidart",
+ "rad"
+ ],
+ "support": {
+ "issues": "https://github.com/nWidart/laravel-modules/issues",
+ "source": "https://github.com/nWidart/laravel-modules/tree/v8.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/nwidart",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-10T20:30:19+00:00"
+ },
+ {
+ "name": "opis/closure",
+ "version": "3.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/opis/closure.git",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^5.4 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "jeremeamia/superclosure": "^2.0",
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.6.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "functions.php"
+ ],
+ "psr-4": {
+ "Opis\\Closure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marius Sarca",
+ "email": "marius.sarca@gmail.com"
+ },
+ {
+ "name": "Sorin Sarca",
+ "email": "sarca_sorin@hotmail.com"
+ }
+ ],
+ "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+ "homepage": "https://opis.io/closure",
+ "keywords": [
+ "anonymous functions",
+ "closure",
+ "function",
+ "serializable",
+ "serialization",
+ "serialize"
+ ],
+ "support": {
+ "issues": "https://github.com/opis/closure/issues",
+ "source": "https://github.com/opis/closure/tree/3.6.3"
+ },
+ "time": "2022-01-27T09:35:39+00:00"
+ },
+ {
+ "name": "overtrue/chinese-calendar",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/chinese-calendar.git",
+ "reference": "d78e86d66a4b225defac6828bf1de42c4a9d4bdf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/chinese-calendar/zipball/d78e86d66a4b225defac6828bf1de42c4a9d4bdf",
+ "reference": "d78e86d66a4b225defac6828bf1de42c4a9d4bdf",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.5.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\ChineseCalendar\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "中国农历转换与查询工具",
+ "keywords": [
+ "Chinese",
+ "calendar",
+ "lunar",
+ "lunar2solar",
+ "solar",
+ "solar2lunar"
+ ],
+ "support": {
+ "issues": "https://github.com/overtrue/chinese-calendar/issues",
+ "source": "https://github.com/overtrue/chinese-calendar/tree/master"
+ },
+ "time": "2020-03-09T07:21:26+00:00"
+ },
+ {
+ "name": "overtrue/easy-sms",
+ "version": "1.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/easy-sms.git",
+ "reference": "daa0b4308ec0e3c112888c288d14d473be6aabee"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/easy-sms/zipball/daa0b4308ec0e3c112888c288d14d473be6aabee",
+ "reference": "daa0b4308ec0e3c112888c288d14d473be6aabee",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/guzzle": "^6.2 || ^7.0",
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "mockery/mockery": "1.3.1",
+ "phpunit/phpunit": "^5.7 || ^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\EasySms\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "i@overtrue.me"
+ }
+ ],
+ "description": "The easiest way to send short message.",
+ "support": {
+ "issues": "https://github.com/overtrue/easy-sms/issues",
+ "source": "https://github.com/overtrue/easy-sms/tree/1.3.2"
+ },
+ "time": "2021-01-22T06:52:59+00:00"
+ },
+ {
+ "name": "overtrue/laravel-favorite",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/laravel-favorite.git",
+ "reference": "f86cf5136985b3b7c585c279104891bf434c609d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/laravel-favorite/zipball/f86cf5136985b3b7c585c279104891bf434c609d",
+ "reference": "f86cf5136985b3b7c585c279104891bf434c609d",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "laravel/framework": "^8.0",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "brainmaestro/composer-git-hooks": "^2.7",
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "mockery/mockery": "^1.2",
+ "orchestra/testbench": "^6.0",
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Overtrue\\LaravelFavorite\\FavoriteServiceProvider"
+ ]
+ },
+ "hooks": {
+ "pre-commit": [
+ "composer fix-style"
+ ],
+ "pre-push": [
+ "composer test"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\LaravelFavorite\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "User favorite features for Laravel Application.",
+ "support": {
+ "issues": "https://github.com/overtrue/laravel-favorite/issues",
+ "source": "https://github.com/overtrue/laravel-favorite/tree/4.0.1"
+ },
+ "time": "2021-06-09T06:20:20+00:00"
+ },
+ {
+ "name": "overtrue/laravel-lang",
+ "version": "5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/laravel-lang.git",
+ "reference": "cb82a2f1e5fd1c7313a5aa1531f02cd5838969e4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/laravel-lang/zipball/cb82a2f1e5fd1c7313a5aa1531f02cd5838969e4",
+ "reference": "cb82a2f1e5fd1c7313a5aa1531f02cd5838969e4",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "laravel-lang/lang": "^10.1",
+ "symfony/process": "^5.0.0"
+ },
+ "require-dev": {
+ "laravel/framework": "~8.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Overtrue\\LaravelLang\\TranslationServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\LaravelLang\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "List of 75 languages for Laravel 4, 5, 6 and 7",
+ "keywords": [
+ "i18n",
+ "languages",
+ "laravel",
+ "locale",
+ "overtrue"
+ ],
+ "support": {
+ "issues": "https://github.com/overtrue/laravel-lang/issues",
+ "source": "https://github.com/overtrue/laravel-lang/tree/5.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/overtrue",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-08-20T12:06:44+00:00"
+ },
+ {
+ "name": "overtrue/laravel-query-logger",
+ "version": "2.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/laravel-query-logger.git",
+ "reference": "46b546aa2c4f6319ce798c8f8128b08718b32bae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/laravel-query-logger/zipball/46b546aa2c4f6319ce798c8f8128b08718b32bae",
+ "reference": "46b546aa2c4f6319ce798c8f8128b08718b32bae",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "laravel/framework": "~5.5||~6.0||~7.0||~8.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Overtrue\\LaravelQueryLogger\\ServiceProvider"
+ ]
+ },
+ "hooks": {
+ "pre-commit": [
+ "composer test",
+ "composer fix-style"
+ ],
+ "pre-push": [
+ "composer test",
+ "composer check-style"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\LaravelQueryLogger\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "A dev tool to log all queries for laravel application.",
+ "support": {
+ "issues": "https://github.com/overtrue/laravel-query-logger/issues",
+ "source": "https://github.com/overtrue/laravel-query-logger/tree/2.1.4"
+ },
+ "time": "2021-08-12T08:49:45+00:00"
+ },
+ {
+ "name": "overtrue/laravel-subscribe",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/laravel-subscribe.git",
+ "reference": "d70d70871a09e2ae36beea94ee5dd918c7a5afb5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/laravel-subscribe/zipball/d70d70871a09e2ae36beea94ee5dd918c7a5afb5",
+ "reference": "d70d70871a09e2ae36beea94ee5dd918c7a5afb5",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "laravel/framework": "^8.0",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "brainmaestro/composer-git-hooks": "^2.7",
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "laravel/framework": "^8.12",
+ "mockery/mockery": "^1.2",
+ "orchestra/testbench": "^6.0",
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Overtrue\\LaravelSubscribe\\SubscribeServiceProvider"
+ ]
+ },
+ "hooks": {
+ "pre-commit": [
+ "composer test",
+ "composer fix-style"
+ ],
+ "post-merge": "composer install"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\LaravelSubscribe\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "User Subscribe/Unsubscribe features for Laravel Application.",
+ "support": {
+ "issues": "https://github.com/overtrue/laravel-subscribe/issues",
+ "source": "https://github.com/overtrue/laravel-subscribe/tree/3.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/overtrue",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-04T03:10:57+00:00"
+ },
+ {
+ "name": "overtrue/laravel-versionable",
+ "version": "2.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/laravel-versionable.git",
+ "reference": "93b79c5e9964be0b1a6a93a6cb0e8792eb1dcf97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/laravel-versionable/zipball/93b79c5e9964be0b1a6a93a6cb0e8792eb1dcf97",
+ "reference": "93b79c5e9964be0b1a6a93a6cb0e8792eb1dcf97",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "doctrine/dbal": "^2.12|^3.0",
+ "laravel/framework": "^5.8|^6.20.26|^7.0|^8.0",
+ "php": "^7.4|^8.0",
+ "sebastian/diff": "^3.0|^4.0"
+ },
+ "require-dev": {
+ "brainmaestro/composer-git-hooks": "^2.8",
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "mockery/mockery": "^1.4",
+ "orchestra/testbench": "^5.3|^6.0",
+ "phpunit/phpunit": "^8.1|^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Overtrue\\LaravelVersionable\\ServiceProvider"
+ ]
+ },
+ "hooks": {
+ "pre-commit": [
+ "composer check-style",
+ "composer test"
+ ],
+ "pre-push": [
+ "composer test"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\LaravelVersionable\\": "./src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Make Laravel model versionable.",
+ "support": {
+ "issues": "https://github.com/overtrue/laravel-versionable/issues",
+ "source": "https://github.com/overtrue/laravel-versionable/tree/2.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/overtrue",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-07-26T03:17:28+00:00"
+ },
+ {
+ "name": "overtrue/laravel-wechat",
+ "version": "6.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/laravel-wechat.git",
+ "reference": "f8300dac610baae3736fcdeb1ea4ee17e2f1fac9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/laravel-wechat/zipball/f8300dac610baae3736fcdeb1ea4ee17e2f1fac9",
+ "reference": "f8300dac610baae3736fcdeb1ea4ee17e2f1fac9",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "illuminate/container": "^5.1 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "overtrue/wechat": "^5.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.1",
+ "laravel/framework": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Overtrue\\LaravelWeChat\\ServiceProvider"
+ ],
+ "aliases": {
+ "EasyWeChat": "Overtrue\\LaravelWeChat\\Facade"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\LaravelWeChat\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "微信 SDK for Laravel",
+ "keywords": [
+ "laravel",
+ "sdk",
+ "wechat",
+ "weixin"
+ ],
+ "support": {
+ "issues": "https://github.com/overtrue/laravel-wechat/issues",
+ "source": "https://github.com/overtrue/laravel-wechat/tree/6.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/overtrue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-14T09:04:30+00:00"
+ },
+ {
+ "name": "overtrue/socialite",
+ "version": "3.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/overtrue/socialite.git",
+ "reference": "92cfd9989c37160f50720eeb7ca4a9914ba2c135"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/overtrue/socialite/zipball/92cfd9989c37160f50720eeb7ca4a9914ba2c135",
+ "reference": "92cfd9989c37160f50720eeb7ca4a9914ba2c135",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-openssl": "*",
+ "guzzlehttp/guzzle": "~6.0|~7.0",
+ "php": ">=7.4",
+ "symfony/http-foundation": "^5.0",
+ "symfony/psr-http-message-bridge": "^2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "mockery/mockery": "~1.2",
+ "phpunit/phpunit": "~9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Overtrue\\Socialite\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "A collection of OAuth 2 packages.",
+ "keywords": [
+ "Feishu",
+ "login",
+ "oauth",
+ "qcloud",
+ "qq",
+ "social",
+ "wechat",
+ "weibo"
+ ],
+ "support": {
+ "issues": "https://github.com/overtrue/socialite/issues",
+ "source": "https://github.com/overtrue/socialite/tree/3.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/overtrue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-03-04T02:33:27+00:00"
+ },
+ {
+ "name": "overtrue/wechat",
+ "version": "5.18.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/w7corp/easywechat.git",
+ "reference": "fcabc4f0a7547713de9623f086ba486b87f4a433"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/w7corp/easywechat/zipball/fcabc4f0a7547713de9623f086ba486b87f4a433",
+ "reference": "fcabc4f0a7547713de9623f086ba486b87f4a433",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "easywechat-composer/easywechat-composer": "^1.1",
+ "ext-fileinfo": "*",
+ "ext-libxml": "*",
+ "ext-openssl": "*",
+ "ext-simplexml": "*",
+ "guzzlehttp/guzzle": "^6.2 || ^7.0",
+ "monolog/monolog": "^1.22 || ^2.0",
+ "overtrue/socialite": "^3.2 || ^4.0",
+ "php": ">=7.4",
+ "pimple/pimple": "^3.0",
+ "psr/simple-cache": "^1.0||^2.0||^3.0",
+ "symfony/cache": "^3.3 || ^4.3 || ^5.0 || ^6.0",
+ "symfony/event-dispatcher": "^4.3 || ^5.0 || ^6.0",
+ "symfony/http-foundation": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
+ "symfony/psr-http-message-bridge": "^0.3 || ^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "brainmaestro/composer-git-hooks": "^2.7",
+ "dms/phpunit-arraysubset-asserts": "^0.2.0",
+ "friendsofphp/php-cs-fixer": "^3.5.0",
+ "mikey179/vfsstream": "^1.6",
+ "mockery/mockery": "^1.2.3",
+ "phpstan/phpstan": "^0.12.0",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "hooks": {
+ "pre-commit": [
+ "composer test",
+ "composer fix-style"
+ ],
+ "pre-push": [
+ "composer test",
+ "composer fix-style"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Kernel/Support/Helpers.php",
+ "src/Kernel/Helpers.php"
+ ],
+ "psr-4": {
+ "EasyWeChat\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "overtrue",
+ "email": "anzhengchao@gmail.com"
+ }
+ ],
+ "description": "微信SDK",
+ "keywords": [
+ "easywechat",
+ "sdk",
+ "wechat",
+ "weixin",
+ "weixin-sdk"
+ ],
+ "support": {
+ "issues": "https://github.com/w7corp/easywechat/issues",
+ "source": "https://github.com/w7corp/easywechat/tree/5.18.0"
+ },
+ "time": "2022-03-02T09:54:10+00:00"
+ },
+ {
+ "name": "phpoffice/phpspreadsheet",
+ "version": "1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+ "reference": "21e4cf62699eebf007db28775f7d1554e612ed9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/21e4cf62699eebf007db28775f7d1554e612ed9e",
+ "reference": "21e4cf62699eebf007db28775f7d1554e612ed9e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-dom": "*",
+ "ext-fileinfo": "*",
+ "ext-gd": "*",
+ "ext-iconv": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*",
+ "ext-xmlwriter": "*",
+ "ext-zip": "*",
+ "ext-zlib": "*",
+ "ezyang/htmlpurifier": "^4.13",
+ "maennchen/zipstream-php": "^2.1",
+ "markbaker/complex": "^3.0",
+ "markbaker/matrix": "^3.0",
+ "php": "^7.3 || ^8.0",
+ "psr/http-client": "^1.0",
+ "psr/http-factory": "^1.0",
+ "psr/simple-cache": "^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
+ "dompdf/dompdf": "^1.0",
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "jpgraph/jpgraph": "^4.0",
+ "mpdf/mpdf": "8.0.17",
+ "phpcompatibility/php-compatibility": "^9.3",
+ "phpstan/phpstan": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^8.5 || ^9.0",
+ "squizlabs/php_codesniffer": "^3.6",
+ "tecnickcom/tcpdf": "^6.4"
+ },
+ "suggest": {
+ "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
+ "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+ "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+ "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Maarten Balliauw",
+ "homepage": "https://blog.maartenballiauw.be"
+ },
+ {
+ "name": "Mark Baker",
+ "homepage": "https://markbakeruk.net"
+ },
+ {
+ "name": "Franck Lefevre",
+ "homepage": "https://rootslabs.net"
+ },
+ {
+ "name": "Erik Tilt"
+ },
+ {
+ "name": "Adrien Crivelli"
+ }
+ ],
+ "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+ "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+ "keywords": [
+ "OpenXML",
+ "excel",
+ "gnumeric",
+ "ods",
+ "php",
+ "spreadsheet",
+ "xls",
+ "xlsx"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
+ "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.23.0"
+ },
+ "time": "2022-04-24T13:53:10+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
+ "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.8.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-04T23:24:31+00:00"
+ },
+ {
+ "name": "pimple/pimple",
+ "version": "v3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silexphp/Pimple.git",
+ "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed",
+ "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1 || ^2.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^5.4@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Pimple": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Pimple, a simple Dependency Injection Container",
+ "homepage": "https://pimple.symfony.com",
+ "keywords": [
+ "container",
+ "dependency injection"
+ ],
+ "support": {
+ "source": "https://github.com/silexphp/Pimple/tree/v3.5.0"
+ },
+ "time": "2021-10-28T11:13:42+00:00"
+ },
+ {
+ "name": "propaganistas/laravel-phone",
+ "version": "4.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Propaganistas/Laravel-Phone.git",
+ "reference": "fb3b5faddf9150ac21c1c59a7633ee964d4f2a00"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/fb3b5faddf9150ac21c1c59a7633ee964d4f2a00",
+ "reference": "fb3b5faddf9150ac21c1c59a7633ee964d4f2a00",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "giggsey/libphonenumber-for-php": "^7.0|^8.0",
+ "illuminate/contracts": "^8.9|^9.0",
+ "illuminate/support": "^8.0|^9.0",
+ "illuminate/validation": "^8.0|^9.0",
+ "league/iso3166": "^2.0|^3.0|^4.0",
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "nunomaduro/larastan": "^1.0",
+ "orchestra/testbench": "*",
+ "phpunit/phpunit": "^9.5.10"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Propaganistas\\LaravelPhone\\PhoneServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Propaganistas\\LaravelPhone\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Propaganistas",
+ "email": "Propaganistas@users.noreply.github.com"
+ }
+ ],
+ "description": "Adds phone number functionality to Laravel based on Google's libphonenumber API.",
+ "keywords": [
+ "laravel",
+ "libphonenumber",
+ "phone",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/Propaganistas/Laravel-Phone/issues",
+ "source": "https://github.com/Propaganistas/Laravel-Phone/tree/4.3.7"
+ },
+ "time": "2022-06-08T15:44:51+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": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "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"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/master"
+ },
+ "time": "2016-08-06T20:24:11+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://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"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
+ },
+ "time": "2021-11-05T16:50:12+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client/tree/master"
+ },
+ "time": "2020-06-29T06:28:15+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.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 interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+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": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "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"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
+ "time": "2016-08-06T14:39:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.4"
+ },
+ "time": "2021-05-03T11:20:27+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": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "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"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
+ },
+ "time": "2017-10-23T01:57:42+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+ "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.3 || ^8",
+ "symfony/polyfill-php81": "^1.23"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "ergebnis/composer-normalize": "^2.6",
+ "fakerphp/faker": "^1.5",
+ "hamcrest/hamcrest-php": "^2",
+ "jangregor/phpstan-prophecy": "^0.8",
+ "mockery/mockery": "^1.3",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/extension-installer": "^1",
+ "phpstan/phpstan": "^0.12.32",
+ "phpstan/phpstan-mockery": "^0.12.5",
+ "phpstan/phpstan-phpunit": "^0.12.11",
+ "phpunit/phpunit": "^8.5 || ^9",
+ "psy/psysh": "^0.10.4",
+ "slevomat/coding-standard": "^6.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/1.2.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-10T03:01:02+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+ "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "brick/math": "^0.8 || ^0.9",
+ "ext-json": "*",
+ "php": "^7.2 || ^8.0",
+ "ramsey/collection": "^1.0",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-php80": "^1.14"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.10",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "doctrine/annotations": "^1.8",
+ "ergebnis/composer-normalize": "^2.15",
+ "mockery/mockery": "^1.3",
+ "moontoast/math": "^1.1",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.2",
+ "php-mock/php-mock-mockery": "^1.3",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpbench/phpbench": "^1.0",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-mockery": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpunit/phpunit": "^8.5 || ^9",
+ "slevomat/coding-standard": "^7.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.9"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-ctype": "Enables faster processing of character classification using ctype functions.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.x-dev"
+ },
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-25T23:10:38+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:10:38+00:00"
+ },
+ {
+ "name": "simplesoftwareio/simple-qrcode",
+ "version": "4.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git",
+ "reference": "916db7948ca6772d54bb617259c768c9cdc8d537"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/916db7948ca6772d54bb617259c768c9cdc8d537",
+ "reference": "916db7948ca6772d54bb617259c768c9cdc8d537",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "bacon/bacon-qr-code": "^2.0",
+ "ext-gd": "*",
+ "php": ">=7.2|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1",
+ "phpunit/phpunit": "~9"
+ },
+ "suggest": {
+ "ext-imagick": "Allows the generation of PNG QrCodes.",
+ "illuminate/support": "Allows for use within Laravel."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider"
+ ],
+ "aliases": {
+ "QrCode": "SimpleSoftwareIO\\QrCode\\Facades\\QrCode"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SimpleSoftwareIO\\QrCode\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Simple Software LLC",
+ "email": "support@simplesoftware.io"
+ }
+ ],
+ "description": "Simple QrCode is a QR code generator made for Laravel.",
+ "homepage": "https://www.simplesoftware.io/#/docs/simple-qrcode",
+ "keywords": [
+ "Simple",
+ "generator",
+ "laravel",
+ "qrcode",
+ "wrapper"
+ ],
+ "support": {
+ "issues": "https://github.com/SimpleSoftwareIO/simple-qrcode/issues",
+ "source": "https://github.com/SimpleSoftwareIO/simple-qrcode/tree/4.2.0"
+ },
+ "time": "2021-02-08T20:43:55+00:00"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v6.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
+ "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "egulias/email-validator": "^2.0|^3.1",
+ "php": ">=7.0.0",
+ "symfony/polyfill-iconv": "^1.0",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "symfony/phpunit-bridge": "^4.4|^5.4"
+ },
+ "suggest": {
+ "ext-intl": "Needed to support internationalized email addresses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.2-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Corbyn"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "https://swiftmailer.symfony.com",
+ "keywords": [
+ "email",
+ "mail",
+ "mailer"
+ ],
+ "support": {
+ "issues": "https://github.com/swiftmailer/swiftmailer/issues",
+ "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer",
+ "type": "tidelift"
+ }
+ ],
+ "abandoned": "symfony/mailer",
+ "time": "2021-10-18T15:26:12+00:00"
+ },
+ {
+ "name": "symfony/cache",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/cache.git",
+ "reference": "c4e387b739022fd4b20abd8edb2143c44c5daa14"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/c4e387b739022fd4b20abd8edb2143c44c5daa14",
+ "reference": "c4e387b739022fd4b20abd8edb2143c44c5daa14",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/cache": "^1.0|^2.0",
+ "psr/log": "^1.1|^2|^3",
+ "symfony/cache-contracts": "^1.1.7|^2",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/var-exporter": "^4.4|^5.0|^6.0"
+ },
+ "conflict": {
+ "doctrine/dbal": "<2.13.1",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/http-kernel": "<4.4",
+ "symfony/var-dumper": "<4.4"
+ },
+ "provide": {
+ "psr/cache-implementation": "1.0|2.0",
+ "psr/simple-cache-implementation": "1.0|2.0",
+ "symfony/cache-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "cache/integration-tests": "dev-master",
+ "doctrine/cache": "^1.6|^2.0",
+ "doctrine/dbal": "^2.13.1|^3.0",
+ "predis/predis": "^1.1",
+ "psr/simple-cache": "^1.0|^2.0",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/filesystem": "^4.4|^5.0|^6.0",
+ "symfony/http-kernel": "^4.4|^5.0|^6.0",
+ "symfony/messenger": "^4.4|^5.0|^6.0",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "type": "library",
+ "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": "Provides an extended PSR-6, PSR-16 (and tags) implementation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "caching",
+ "psr6"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/cache/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-19T12:03:50+00:00"
+ },
+ {
+ "name": "symfony/cache-contracts",
+ "version": "v2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/cache-contracts.git",
+ "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
+ "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/cache": "^1.0|^2.0|^3.0"
+ },
+ "suggest": {
+ "symfony/cache-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Cache\\": ""
+ }
+ },
+ "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": "Generic abstractions related to caching",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "4d671ab4ddac94ee439ea73649c69d9d200b5000"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/4d671ab4ddac94ee439ea73649c69d9d200b5000",
+ "reference": "4d671ab4ddac94ee439ea73649c69d9d200b5000",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/string": "^5.1|^6.0"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/lock": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "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": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-26T13:00:04+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "b0a190285cd95cb019237851205b8140ef6e368e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e",
+ "reference": "b0a190285cd95cb019237851205b8140ef6e368e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+ "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.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": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/dom-crawler",
+ "version": "v5.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/dom-crawler.git",
+ "reference": "a213cbc80382320b0efdccdcdce232f191fafe3a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/a213cbc80382320b0efdccdcdce232f191fafe3a",
+ "reference": "a213cbc80382320b0efdccdcdce232f191fafe3a",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "masterminds/html5": "<2.6"
+ },
+ "require-dev": {
+ "masterminds/html5": "^2.6",
+ "symfony/css-selector": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/css-selector": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\DomCrawler\\": ""
+ },
+ "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": "Eases DOM navigation for HTML and XML documents",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/dom-crawler/tree/v5.4.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-04T14:46:32+00:00"
+ },
+ {
+ "name": "symfony/error-handler",
+ "version": "v5.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "c116cda1f51c678782768dce89a45f13c949455d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/c116cda1f51c678782768dce89a45f13c949455d",
+ "reference": "c116cda1f51c678782768dce89a45f13c949455d",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2|^3",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "require-dev": {
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/http-kernel": "^4.4|^5.0|^6.0",
+ "symfony/serializer": "^4.4|^5.0|^6.0"
+ },
+ "bin": [
+ "Resources/bin/patch-type-declarations"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ErrorHandler\\": ""
+ },
+ "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": "Provides tools to manage errors and ease debugging PHP code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v5.4.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-21T13:57:48+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v5.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
+ "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/event-dispatcher-contracts": "^2|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-05T16:45:39+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1",
+ "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/event-dispatcher": "^1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "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": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9",
+ "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "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": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.4.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-04-15T08:07:45+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "e7793b7906f72a8cc51054fbca9dcff7a8af1c1e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e7793b7906f72a8cc51054fbca9dcff7a8af1c1e",
+ "reference": "e7793b7906f72a8cc51054fbca9dcff7a8af1c1e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.1",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/cache": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/mime": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/mime": "To use the file extension guesser"
+ },
+ "type": "library",
+ "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": "Defines an object-oriented layer for the HTTP specification",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-19T13:13:40+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "255ae3b0a488d78fbb34da23d3e0c059874b5948"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/255ae3b0a488d78fbb34da23d3e0c059874b5948",
+ "reference": "255ae3b0a488d78fbb34da23d3e0c059874b5948",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^5.0|^6.0",
+ "symfony/http-foundation": "^5.3.7|^6.0",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/browser-kit": "<5.4",
+ "symfony/cache": "<5.0",
+ "symfony/config": "<5.0",
+ "symfony/console": "<4.4",
+ "symfony/dependency-injection": "<5.3",
+ "symfony/doctrine-bridge": "<5.0",
+ "symfony/form": "<5.0",
+ "symfony/http-client": "<5.0",
+ "symfony/mailer": "<5.0",
+ "symfony/messenger": "<5.0",
+ "symfony/translation": "<5.0",
+ "symfony/twig-bridge": "<5.0",
+ "symfony/validator": "<5.0",
+ "twig/twig": "<2.13"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0|^2.0|^3.0",
+ "symfony/browser-kit": "^5.4|^6.0",
+ "symfony/config": "^5.0|^6.0",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/css-selector": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^5.3|^6.0",
+ "symfony/dom-crawler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/http-client-contracts": "^1.1|^2|^3",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/routing": "^4.4|^5.0|^6.0",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0",
+ "symfony/translation": "^4.4|^5.0|^6.0",
+ "symfony/translation-contracts": "^1.1|^2|^3",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": ""
+ },
+ "type": "library",
+ "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": "Provides a structured process for converting a Request into a Response",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-26T16:57:59+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "02265e1e5111c3cd7480387af25e82378b7ab9cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/02265e1e5111c3cd7480387af25e82378b7ab9cc",
+ "reference": "02265e1e5111c3cd7480387af25e82378b7ab9cc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<3.2.2",
+ "phpdocumentor/type-resolver": "<1.4.0",
+ "symfony/mailer": "<4.4"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1",
+ "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/property-access": "^4.4|^5.1|^6.0",
+ "symfony/property-info": "^4.4|^5.1|^6.0",
+ "symfony/serializer": "^5.2|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "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": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-09T12:22:40+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
+ "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-iconv",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-iconv.git",
+ "reference": "143f1881e655bebca1312722af8068de235ae5dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc",
+ "reference": "143f1881e655bebca1312722af8068de235ae5dc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-iconv": "*"
+ },
+ "suggest": {
+ "ext-iconv": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Iconv\\": ""
+ }
+ },
+ "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 Iconv extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "iconv",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "433d05519ce6990bf3530fba6957499d327395c2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
+ "reference": "433d05519ce6990bf3530fba6957499d327395c2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "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 intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
+ "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1",
+ "symfony/polyfill-intl-normalizer": "^1.10",
+ "symfony/polyfill-php72": "^1.10"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "219aa369ceff116e673852dce47c3a41794c14bd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
+ "reference": "219aa369ceff116e673852dce47c3a41794c14bd",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "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 intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
+ "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "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"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2",
+ "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "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 some PHP 7.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85",
+ "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "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 some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
+ "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-10T07:21:04+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php81",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1",
+ "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.26-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "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 some PHP 8.1+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-24T11:49:31+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3",
+ "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "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": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v5.4.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-04-08T05:07:18+00:00"
+ },
+ {
+ "name": "symfony/psr-http-message-bridge",
+ "version": "v2.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/psr-http-message-bridge.git",
+ "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
+ "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0",
+ "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "nyholm/psr7": "^1.1",
+ "psr/log": "^1.1 || ^2 || ^3",
+ "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",
+ "symfony/config": "^4.4 || ^5.0 || ^6.0",
+ "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",
+ "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",
+ "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",
+ "symfony/phpunit-bridge": "^5.4@dev || ^6.0"
+ },
+ "suggest": {
+ "nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
+ },
+ "type": "symfony-bridge",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Bridge\\PsrHttpMessage\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "PSR HTTP message bridge",
+ "homepage": "http://symfony.com",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/symfony/psr-http-message-bridge/issues",
+ "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-05T13:13:39+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v5.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7",
+ "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "doctrine/annotations": "<1.12",
+ "symfony/config": "<5.3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/yaml": "<4.4"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.12",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.3|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/yaml": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/config": "For using the all-in-one router or any loader",
+ "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",
+ "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": "Maps an HTTP request to a set of configuration variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v5.4.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-04-18T21:45:37+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
+ "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1",
+ "symfony/deprecation-contracts": "^2.1|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "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": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-30T19:17:29+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "4432bc7df82a554b3e413a8570ce2fea90e94097"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/4432bc7df82a554b3e413a8570ce2fea90e94097",
+ "reference": "4432bc7df82a554b3e413a8570ce2fea90e94097",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "conflict": {
+ "symfony/translation-contracts": ">=3.0"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/http-client": "^4.4|^5.0|^6.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-26T15:57:47+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v5.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/1639abc1177d26bcd4320e535e664cef067ab0ca",
+ "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/translation-contracts": "^2.3"
+ },
+ "conflict": {
+ "symfony/config": "<4.4",
+ "symfony/console": "<5.3",
+ "symfony/dependency-injection": "<5.0",
+ "symfony/http-kernel": "<5.0",
+ "symfony/twig-bundle": "<5.0",
+ "symfony/yaml": "<4.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "2.3"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/console": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.0|^6.0",
+ "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
+ "symfony/http-kernel": "^5.0|^6.0",
+ "symfony/intl": "^4.4|^5.0|^6.0",
+ "symfony/polyfill-intl-icu": "^1.21",
+ "symfony/service-contracts": "^1.1.2|^2|^3",
+ "symfony/yaml": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log-implementation": "To use logging capability in translator",
+ "symfony/config": "",
+ "symfony/yaml": ""
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "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": "Provides tools to internationalize your application",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v5.4.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-06T12:33:37+00:00"
+ },
+ {
+ "name": "symfony/translation-contracts",
+ "version": "v2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
+ "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5"
+ },
+ "suggest": {
+ "symfony/translation-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Translation\\": ""
+ }
+ },
+ "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": "Generic abstractions related to translation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-27T16:58:25+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v5.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "af52239a330fafd192c773795520dc2dd62b5657"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657",
+ "reference": "af52239a330fafd192c773795520dc2dd62b5657",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<5.4.3",
+ "symfony/console": "<4.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/uid": "^5.1|^6.0",
+ "twig/twig": "^2.13|^3.0.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",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "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": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v5.4.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-21T10:24:18+00:00"
+ },
+ {
+ "name": "symfony/var-exporter",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-exporter.git",
+ "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
+ "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\VarExporter\\": ""
+ },
+ "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": "Allows exporting any serializable PHP data structure to plain PHP code",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "clone",
+ "construct",
+ "export",
+ "hydrate",
+ "instantiate",
+ "serialize"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-exporter/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-27T12:56:18+00:00"
+ },
+ {
+ "name": "symfony/workflow",
+ "version": "v5.4.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/workflow.git",
+ "reference": "8910b89520aca671feb3c625dd30b8c2ca5ed7fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/workflow/zipball/8910b89520aca671feb3c625dd30b8c2ca5ed7fa",
+ "reference": "8910b89520aca671feb3c625dd30b8c2ca5ed7fa",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.15"
+ },
+ "conflict": {
+ "symfony/event-dispatcher": "<4.4"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/security-core": "^4.4|^5.0|^6.0",
+ "symfony/validator": "^4.4|^5.0|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Workflow\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Grégoire Pineau",
+ "email": "lyrixx@lyrixx.info"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools for managing a workflow or finite state machine",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "petrinet",
+ "place",
+ "state",
+ "statemachine",
+ "transition",
+ "workflow"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/workflow/tree/v5.4.10"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-31T16:48:23+00:00"
+ },
+ {
+ "name": "tijsverkoyen/css-to-inline-styles",
+ "version": "2.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
+ "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c",
+ "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": "^5.5 || ^7.0 || ^8.0",
+ "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TijsVerkoyen\\CssToInlineStyles\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "css_to_inline_styles@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4"
+ },
+ "time": "2021-12-08T09:12:39+00:00"
+ },
+ {
+ "name": "vinkla/hashids",
+ "version": "9.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vinkla/laravel-hashids.git",
+ "reference": "cb0086db96cdb49816465adc97e3a024c8ee9767"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vinkla/laravel-hashids/zipball/cb0086db96cdb49816465adc97e3a024c8ee9767",
+ "reference": "cb0086db96cdb49816465adc97e3a024c8ee9767",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "graham-campbell/manager": "^4.4",
+ "hashids/hashids": "^4.1",
+ "illuminate/contracts": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3 || ^8.0"
+ },
+ "require-dev": {
+ "graham-campbell/analyzer": "^3.0",
+ "graham-campbell/testbench": "^5.4",
+ "mockery/mockery": "^1.3",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.1-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Vinkla\\Hashids\\HashidsServiceProvider"
+ ],
+ "aliases": {
+ "Hashids": "Vinkla\\Hashids\\Facades\\Hashids"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Vinkla\\Hashids\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vincent Klaiber",
+ "email": "hello@doubledip.se"
+ }
+ ],
+ "description": "A Hashids bridge for Laravel",
+ "keywords": [
+ "hashids",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/vinkla/laravel-hashids/issues",
+ "source": "https://github.com/vinkla/laravel-hashids/tree/9.1.0"
+ },
+ "time": "2020-11-26T19:38:22+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
+ "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.0.2",
+ "php": "^7.1.3 || ^8.0",
+ "phpoption/phpoption": "^1.8",
+ "symfony/polyfill-ctype": "^1.23",
+ "symfony/polyfill-mbstring": "^1.23.1",
+ "symfony/polyfill-php80": "^1.23.1"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-12T23:22:04+00:00"
+ },
+ {
+ "name": "voku/portable-ascii",
+ "version": "1.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/voku/portable-ascii.git",
+ "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
+ "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+ },
+ "suggest": {
+ "ext-intl": "Use Intl for transliterator_transliterate() support"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "voku\\": "src/voku/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Moelleken",
+ "homepage": "http://www.moelleken.org/"
+ }
+ ],
+ "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+ "homepage": "https://github.com/voku/portable-ascii",
+ "keywords": [
+ "ascii",
+ "clean",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/voku/portable-ascii/issues",
+ "source": "https://github.com/voku/portable-ascii/tree/1.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/moelleken",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/voku",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/portable-ascii",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://www.patreon.com/voku",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-24T18:55:24+00:00"
+ },
+ {
+ "name": "wang-tech-commits/kuaidi100-api",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wang-tech-commits/kuaidi100-api.git",
+ "reference": "fe07fe6162fa08c7a2883e00a5d9072c9d008f1b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wang-tech-commits/kuaidi100-api/zipball/fe07fe6162fa08c7a2883e00a5d9072c9d008f1b",
+ "reference": "fe07fe6162fa08c7a2883e00a5d9072c9d008f1b",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/guzzle": "^7.0.1",
+ "laravel/framework": "*",
+ "php": ">=7.1.3"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "MrwangTc\\Kuaidi100\\ServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "MrwangTc\\Kuaidi100\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mr.wang",
+ "email": "15124532157@163.com"
+ }
+ ],
+ "description": "快递100物流快递查询",
+ "homepage": "https://github.com/wang-tech-commits/kuaidi100-api",
+ "support": {
+ "issues": "https://github.com/wang-tech-commits/kuaidi100-api/issues",
+ "source": "https://github.com/wang-tech-commits/kuaidi100-api/tree/1.0.1"
+ },
+ "time": "2021-05-18T05:18:16+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ },
+ "time": "2022-06-03T18:03:27+00:00"
+ },
+ {
+ "name": "xuanchen/tencent-map-api",
+ "version": "1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/xuanchen120/tencent-map-api.git",
+ "reference": "24e2718aef2ba42a7011a1fad9c43fdf0041c534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/xuanchen120/tencent-map-api/zipball/24e2718aef2ba42a7011a1fad9c43fdf0041c534",
+ "reference": "24e2718aef2ba42a7011a1fad9c43fdf0041c534",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/guzzle": "^7.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "DeathSatan\\TencentMapApi\\ServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "DeathSatan\\TencentMapApi\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "ShuSRun",
+ "email": "2771717608@qq.com"
+ }
+ ],
+ "description": "腾讯地图api sdk封装 tencent map services api,based on GuzzleHttp",
+ "support": {
+ "source": "https://github.com/xuanchen120/tencent-map-api/tree/1.2"
+ },
+ "time": "2022-08-15T05:28:51+00:00"
+ },
+ {
+ "name": "yangjisen/laravel-cache-provider",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yangjisen/LaravelCacheProvider.git",
+ "reference": "2c94bce77f642f200e073cd1bf1b6b5554f48471"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yangjisen/LaravelCacheProvider/zipball/2c94bce77f642f200e073cd1bf1b6b5554f48471",
+ "reference": "2c94bce77f642f200e073cd1bf1b6b5554f48471",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "laravel/framework": "^5.1||^6.0||^7.0||^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "YangJiSen\\CacheUserProvider\\ServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "YangJiSen\\CacheUserProvider\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Yang Ji Sen",
+ "email": "381722452@qq.com"
+ }
+ ],
+ "keywords": [
+ "auth",
+ "cache",
+ "guard",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/yangjisen/LaravelCacheProvider/issues",
+ "source": "https://github.com/yangjisen/LaravelCacheProvider/tree/v3.0.1"
+ },
+ "time": "2020-12-15T13:43:38+00:00"
+ },
+ {
+ "name": "yansongda/pay",
+ "version": "v3.1.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yansongda/pay.git",
+ "reference": "e02069503b608f2cb8fcb75011cdd0810bbfe88a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yansongda/pay/zipball/e02069503b608f2cb8fcb75011cdd0810bbfe88a",
+ "reference": "e02069503b608f2cb8fcb75011cdd0810bbfe88a",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-bcmath": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-openssl": "*",
+ "ext-simplexml": "*",
+ "php": ">=7.4",
+ "psr/container": "^1.1 | ^2.0",
+ "psr/event-dispatcher": "^1.0",
+ "psr/http-client": "^1.0",
+ "psr/http-message": "^1.0",
+ "psr/log": "^1.1 | ^2.0 | ^3.0",
+ "yansongda/supports": "~3.2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "guzzlehttp/guzzle": "^7.0",
+ "mockery/mockery": "^1.4",
+ "monolog/monolog": "^2.2",
+ "phpstan/phpstan": "^1.0.0",
+ "phpunit/phpunit": "^9.0",
+ "symfony/event-dispatcher": "^5.2.0",
+ "symfony/http-foundation": "^5.2.0",
+ "symfony/psr-http-message-bridge": "^2.1",
+ "symfony/var-dumper": "^5.1"
+ },
+ "suggest": {
+ "hyperf/utils": "Hyperf 框架下使用 SDK,请安装",
+ "illuminate/container": "Laravel 框架下使用 SDK,请安装",
+ "php-di/php-di": "其它/无框架下使用 SDK,请安装"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Functions.php"
+ ],
+ "psr-4": {
+ "Yansongda\\Pay\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "yansongda",
+ "email": "me@yansongda.cn"
+ }
+ ],
+ "description": "可能是我用过的最优雅的 Alipay 和 WeChat 的支付 SDK 扩展包了",
+ "keywords": [
+ "alipay",
+ "pay",
+ "wechat"
+ ],
+ "support": {
+ "homepage": "https://pay.yansongda.cn",
+ "issues": "https://github.com/yansongda/pay/issues",
+ "source": "https://github.com/yansongda/pay"
+ },
+ "time": "2022-08-09T13:49:29+00:00"
+ },
+ {
+ "name": "yansongda/supports",
+ "version": "v3.2.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yansongda/supports.git",
+ "reference": "c3f736efe169696cef94730976e604a61c345b5c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yansongda/supports/zipball/c3f736efe169696cef94730976e604a61c345b5c",
+ "reference": "c3f736efe169696cef94730976e604a61c345b5c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "mockery/mockery": "^1.4",
+ "monolog/monolog": "^2.0",
+ "phpstan/phpstan": "^1.1.0",
+ "phpunit/phpunit": "^9.0",
+ "symfony/console": "^5.1"
+ },
+ "suggest": {
+ "monolog/monolog": "Use logger",
+ "symfony/console": "Use stdout logger"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Functions.php"
+ ],
+ "psr-4": {
+ "Yansongda\\Supports\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "yansongda",
+ "email": "me@yansongda.cn"
+ }
+ ],
+ "description": "common components",
+ "keywords": [
+ "array",
+ "collection",
+ "config",
+ "support"
+ ],
+ "support": {
+ "issues": "https://github.com/yansongda/supports/issues",
+ "source": "https://github.com/yansongda/supports"
+ },
+ "time": "2022-03-28T10:25:04+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.22"
+ },
+ "type": "library",
+ "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": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-03T08:28:38+00:00"
+ },
+ {
+ "name": "facade/flare-client-php",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/facade/flare-client-php.git",
+ "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed",
+ "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "facade/ignition-contracts": "~1.0",
+ "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0",
+ "php": "^7.1|^8.0",
+ "symfony/http-foundation": "^3.3|^4.1|^5.0",
+ "symfony/mime": "^3.4|^4.0|^5.1",
+ "symfony/var-dumper": "^3.4|^4.0|^5.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.14",
+ "phpunit/phpunit": "^7.5.16",
+ "spatie/phpunit-snapshot-assertions": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Facade\\FlareClient\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Send PHP errors to Flare",
+ "homepage": "https://github.com/facade/flare-client-php",
+ "keywords": [
+ "exception",
+ "facade",
+ "flare",
+ "reporting"
+ ],
+ "support": {
+ "issues": "https://github.com/facade/flare-client-php/issues",
+ "source": "https://github.com/facade/flare-client-php/tree/1.9.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2021-09-13T12:16:46+00:00"
+ },
+ {
+ "name": "facade/ignition",
+ "version": "2.17.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/facade/ignition.git",
+ "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/facade/ignition/zipball/6acd82e986a2ecee89e2e68adfc30a1936d1ab7c",
+ "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "facade/flare-client-php": "^1.9.1",
+ "facade/ignition-contracts": "^1.0.2",
+ "illuminate/support": "^7.0|^8.0",
+ "monolog/monolog": "^2.0",
+ "php": "^7.2.5|^8.0",
+ "symfony/console": "^5.0",
+ "symfony/var-dumper": "^5.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.14",
+ "livewire/livewire": "^2.4",
+ "mockery/mockery": "^1.3",
+ "orchestra/testbench": "^5.0|^6.0",
+ "psalm/plugin-laravel": "^1.2"
+ },
+ "suggest": {
+ "laravel/telescope": "^3.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Facade\\Ignition\\IgnitionServiceProvider"
+ ],
+ "aliases": {
+ "Flare": "Facade\\Ignition\\Facades\\Flare"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Facade\\Ignition\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A beautiful error page for Laravel applications.",
+ "homepage": "https://github.com/facade/ignition",
+ "keywords": [
+ "error",
+ "flare",
+ "laravel",
+ "page"
+ ],
+ "support": {
+ "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
+ "forum": "https://twitter.com/flareappio",
+ "issues": "https://github.com/facade/ignition/issues",
+ "source": "https://github.com/facade/ignition"
+ },
+ "time": "2022-06-30T18:26:59+00:00"
+ },
+ {
+ "name": "facade/ignition-contracts",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/facade/ignition-contracts.git",
+ "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+ "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^v2.15.8",
+ "phpunit/phpunit": "^9.3.11",
+ "vimeo/psalm": "^3.17.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Facade\\IgnitionContracts\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://flareapp.io",
+ "role": "Developer"
+ }
+ ],
+ "description": "Solution contracts for Ignition",
+ "homepage": "https://github.com/facade/ignition-contracts",
+ "keywords": [
+ "contracts",
+ "flare",
+ "ignition"
+ ],
+ "support": {
+ "issues": "https://github.com/facade/ignition-contracts/issues",
+ "source": "https://github.com/facade/ignition-contracts/tree/1.0.2"
+ },
+ "time": "2020-10-16T08:27:54+00:00"
+ },
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.19.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75",
+ "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "symfony/phpunit-bridge": "^4.4 || ^5.2"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "v1.19-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0"
+ },
+ "time": "2022-02-02T17:38:57+00:00"
+ },
+ {
+ "name": "filp/whoops",
+ "version": "2.14.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^5.5.9 || ^7.0 || ^8.0",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9 || ^1.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
+ "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Whoops\\": "src/Whoops/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
+ }
+ ],
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
+ "keywords": [
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
+ ],
+ "support": {
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.14.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/denis-sokolov",
+ "type": "github"
+ }
+ ],
+ "time": "2022-01-07T12:00:00+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^5.3|^7.0|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "^1.4 || ^2.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ },
+ "time": "2020-07-09T08:09:16+00:00"
+ },
+ {
+ "name": "laravel/sail",
+ "version": "v1.14.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/sail.git",
+ "reference": "6edf45a247b3688e0d07e149570a62fd9bc11c73"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/6edf45a247b3688e0d07e149570a62fd9bc11c73",
+ "reference": "6edf45a247b3688e0d07e149570a62fd9bc11c73",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "illuminate/console": "^8.0|^9.0",
+ "illuminate/contracts": "^8.0|^9.0",
+ "illuminate/support": "^8.0|^9.0",
+ "php": "^7.3|^8.0"
+ },
+ "bin": [
+ "bin/sail"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Sail\\SailServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Sail\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Docker files for running a basic Laravel application.",
+ "keywords": [
+ "docker",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/sail/issues",
+ "source": "https://github.com/laravel/sail"
+ },
+ "time": "2022-06-13T18:32:48+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+ "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": "^7.3 || ^8.0"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5 || ^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Mockery": "library/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "http://blog.astrumfutura.com"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "http://davedevelopment.co.uk"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "support": {
+ "issues": "https://github.com/mockery/mockery/issues",
+ "source": "https://github.com/mockery/mockery/tree/1.5.0"
+ },
+ "time": "2022-01-20T13:18:17+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-03T13:19:32+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
+ "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
+ },
+ "time": "2022-05-31T20:59:12+00:00"
+ },
+ {
+ "name": "nunomaduro/collision",
+ "version": "v5.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/collision.git",
+ "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461",
+ "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "facade/ignition-contracts": "^1.0",
+ "filp/whoops": "^2.14.3",
+ "php": "^7.3 || ^8.0",
+ "symfony/console": "^5.0"
+ },
+ "require-dev": {
+ "brianium/paratest": "^6.1",
+ "fideloper/proxy": "^4.4.1",
+ "fruitcake/laravel-cors": "^2.0.3",
+ "laravel/framework": "8.x-dev",
+ "nunomaduro/larastan": "^0.6.2",
+ "nunomaduro/mock-final-classes": "^1.0",
+ "orchestra/testbench": "^6.0",
+ "phpstan/phpstan": "^0.12.64",
+ "phpunit/phpunit": "^9.5.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "NunoMaduro\\Collision\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Cli error handling for console/command-line PHP applications.",
+ "keywords": [
+ "artisan",
+ "cli",
+ "command-line",
+ "console",
+ "error",
+ "handling",
+ "laravel",
+ "laravel-zero",
+ "php",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/nunomaduro/collision/issues",
+ "source": "https://github.com/nunomaduro/collision"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/nunomaduro",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-01-10T16:22:52+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ },
+ "time": "2021-07-20T11:28:43+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ },
+ "time": "2020-06-27T09:03:43+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.3",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.2",
+ "psalm/phar": "^4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "account@ijaap.nl"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ },
+ "time": "2021-10-19T17:43:47+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "77a32518733312af16a44300404e945338981de3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
+ "reference": "77a32518733312af16a44300404e945338981de3",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "psalm/phar": "^4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
+ },
+ "time": "2022-03-15T21:29:03+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "doctrine/instantiator": "^1.2",
+ "php": "^7.2 || ~8.0, <8.2",
+ "phpdocumentor/reflection-docblock": "^5.2",
+ "sebastian/comparator": "^3.0 || ^4.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
+ },
+ "time": "2021-12-08T12:19:24+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.13.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "*",
+ "ext-xdebug": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-03-07T09:28:20+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.5.21",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
+ "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.13",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^3.0",
+ "sebastian/version": "^3.0.2"
+ },
+ "require-dev": {
+ "phpspec/prophecy-phpunit": "^2.0.1"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-06-19T12:14:25+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:08:49+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:49:45+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "nikic/php-parser": "^4.7",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:52:27+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+ "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-04-03T09:37:03+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-11T14:18:36+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-14T08:28:10+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "nikic/php-parser": "^4.6",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-28T06:42:11+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:17:30+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:45:17+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+ "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-03-15T09:54:48+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2021-07-28T10:34:58+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.4|^8.0"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.1.0"
+}
diff --git a/config/admin.php b/config/admin.php
new file mode 100644
index 0000000..ffa817f
--- /dev/null
+++ b/config/admin.php
@@ -0,0 +1,439 @@
+ [
+ // storage_path('app/water.png'),
+ // 'bottom-right',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | 上传图片是否开启缩略图
+ | 'small' => [100, 100],
+ | ...
+ |--------------------------------------------------------------------------
+ */
+ 'cover_thumb' => [],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin name
+ |--------------------------------------------------------------------------
+ |
+ | This value is the name of laravel-admin, This setting is displayed on the
+ | login page.
+ |
+ */
+ 'name' => '修缮庙宇',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin html title
+ |--------------------------------------------------------------------------
+ |
+ | Html title for all pages.
+ |
+ */
+ 'title' => '修缮庙宇',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin logo
+ |--------------------------------------------------------------------------
+ |
+ | The logo of all admin pages. You can also set it as an image by using a
+ | `img` tag, eg '
'.
+ |
+ */
+ 'logo' => '修缮庙宇 功德无量',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin mini logo
+ |--------------------------------------------------------------------------
+ |
+ | The logo of all admin pages when the sidebar menu is collapsed. You can
+ | also set it as an image by using a `img` tag, eg
+ | '
'.
+ |
+ */
+ 'logo-mini' => 'SY',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin bootstrap setting
+ |--------------------------------------------------------------------------
+ |
+ | This value is the path of laravel-admin bootstrap file.
+ |
+ */
+ 'bootstrap' => app_path('Admin/bootstrap.php'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin route settings
+ |--------------------------------------------------------------------------
+ |
+ | The routing configuration of the admin page, including the path prefix,
+ | the controller namespace, and the default middleware. If you want to
+ | access through the root path, just set the prefix to empty string.
+ |
+ */
+ 'route' => [
+
+ 'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
+
+ 'namespace' => 'App\\Admin\\Controllers',
+
+ 'middleware' => ['web', 'admin'],
+
+ 'as' => 'admin.',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin install directory
+ |--------------------------------------------------------------------------
+ |
+ | The installation directory of the controller and routing configuration
+ | files of the administration page. The default is `app/Admin`, which must
+ | be set before running `artisan admin::install` to take effect.
+ |
+ */
+ 'directory' => app_path('Admin'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Access via `https`
+ |--------------------------------------------------------------------------
+ |
+ | If your page is going to be accessed via https, set it to `true`.
+ |
+ */
+ 'https' => env('ADMIN_HTTPS', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin auth setting
+ |--------------------------------------------------------------------------
+ |
+ | Authentication settings for all admin pages. Include an authentication
+ | guard and a user provider setting of authentication driver.
+ |
+ | You can specify a controller for `login` `logout` and other auth routes.
+ |
+ */
+ 'auth' => [
+
+ 'controller' => App\Admin\Controllers\AuthController::class,
+
+ 'guard' => 'admin',
+
+ 'guards' => [
+ 'admin' => [
+ 'driver' => 'session',
+ 'provider' => 'admin',
+ ],
+ ],
+
+ 'providers' => [
+ 'admin' => [
+ 'driver' => 'eloquent',
+ 'model' => Encore\Admin\Auth\Database\Administrator::class,
+ ],
+ ],
+
+ // Add "remember me" to login form
+ 'remember' => true,
+
+ // Redirect to the specified URI when user is not authorized.
+ 'redirect_to' => 'auth/login',
+
+ // The URIs that should be excluded from authorization.
+ 'excepts' => [
+ 'auth/login',
+ 'auth/logout',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin upload setting
+ |--------------------------------------------------------------------------
+ |
+ | File system configuration for form upload files and images, including
+ | disk and upload path.
+ |
+ */
+ 'upload' => [
+
+ // Disk in `config/filesystem.php`.
+ 'disk' => env('FILESYSTEM_DRIVER', 'local'),
+
+ // Image and file upload path under the disk above.
+ 'directory' => [
+ 'image' => 'images',
+ 'file' => 'files',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Laravel-admin database settings
+ |--------------------------------------------------------------------------
+ |
+ | Here are database settings for laravel-admin builtin model & tables.
+ |
+ */
+ 'database' => [
+
+ // Database connection for following tables.
+ 'connection' => '',
+
+ // User tables and model.
+ 'users_table' => 'admin_users',
+ 'users_model' => Encore\Admin\Auth\Database\Administrator::class,
+
+ // Role table and model.
+ 'roles_table' => 'admin_roles',
+ 'roles_model' => Encore\Admin\Auth\Database\Role::class,
+
+ // Permission table and model.
+ 'permissions_table' => 'admin_permissions',
+ 'permissions_model' => Encore\Admin\Auth\Database\Permission::class,
+
+ // Menu table and model.
+ 'menu_table' => 'admin_menu',
+ 'menu_model' => Encore\Admin\Auth\Database\Menu::class,
+
+ // Pivot table for table above.
+ 'operation_log_table' => 'admin_operation_log',
+ 'user_permissions_table' => 'admin_user_permissions',
+ 'role_users_table' => 'admin_role_users',
+ 'role_permissions_table' => 'admin_role_permissions',
+ 'role_menu_table' => 'admin_role_menu',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | User operation log setting
+ |--------------------------------------------------------------------------
+ |
+ | By setting this option to open or close operation log in laravel-admin.
+ |
+ */
+ 'operation_log' => [
+
+ 'enable' => true,
+
+ /*
+ * Only logging allowed methods in the list
+ */
+ 'allowed_methods' => ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'],
+
+ /*
+ * Routes that will not log to database.
+ *
+ * All method to path like: admin/auth/logs
+ * or specific method to path like: get:admin/auth/logs.
+ */
+ 'except' => [
+ 'admin/auth/logs*',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Indicates whether to check route permission.
+ |--------------------------------------------------------------------------
+ */
+ 'check_route_permission' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Indicates whether to check menu roles.
+ |--------------------------------------------------------------------------
+ */
+ 'check_menu_roles' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | User default avatar
+ |--------------------------------------------------------------------------
+ |
+ | Set a default avatar for newly created users.
+ |
+ */
+ 'default_avatar' => '/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Admin map field provider
+ |--------------------------------------------------------------------------
+ |
+ | Supported: "tencent", "google", "yandex".
+ |
+ */
+ 'map_provider' => 'google',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Skin
+ |--------------------------------------------------------------------------
+ |
+ | This value is the skin of admin pages.
+ | @see https://adminlte.io/docs/2.4/layout
+ |
+ | Supported:
+ | "skin-blue", "skin-blue-light", "skin-yellow", "skin-yellow-light",
+ | "skin-green", "skin-green-light", "skin-purple", "skin-purple-light",
+ | "skin-red", "skin-red-light", "skin-black", "skin-black-light".
+ |
+ */
+ 'skin' => 'skin-blue',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application layout
+ |--------------------------------------------------------------------------
+ |
+ | This value is the layout of admin pages.
+ | @see https://adminlte.io/docs/2.4/layout
+ |
+ | Supported: "fixed", "layout-boxed", "layout-top-nav", "sidebar-collapse",
+ | "sidebar-mini".
+ |
+ */
+ 'layout' => ['fixed', 'sidebar-mini'],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Login page background image
+ |--------------------------------------------------------------------------
+ |
+ | This value is used to set the background image of login page.
+ |
+ */
+ 'login_background_image' => '',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Show version at footer
+ |--------------------------------------------------------------------------
+ |
+ | Whether to display the version number of laravel-admin at the footer of
+ | each page
+ |
+ */
+ 'show_version' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Show environment at footer
+ |--------------------------------------------------------------------------
+ |
+ | Whether to display the environment at the footer of each page
+ |
+ */
+ 'show_environment' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Menu bind to permission
+ |--------------------------------------------------------------------------
+ |
+ | whether enable menu bind to a permission
+ */
+ 'menu_bind_permission' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Enable default breadcrumb
+ |--------------------------------------------------------------------------
+ |
+ | Whether enable default breadcrumb for every page content.
+ */
+ 'enable_default_breadcrumb' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Enable/Disable assets minify
+ |--------------------------------------------------------------------------
+ */
+ 'minify_assets' => [
+
+ // Assets will not be minified.
+ 'excepts' => [
+
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Enable/Disable sidebar menu search
+ |--------------------------------------------------------------------------
+ */
+ 'enable_menu_search' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Alert message that will displayed on top of the page.
+ |--------------------------------------------------------------------------
+ */
+ 'top_alert' => '',
+
+ /*
+ |--------------------------------------------------------------------------
+ | The global Grid action display class.
+ |--------------------------------------------------------------------------
+ */
+ 'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Extension Directory
+ |--------------------------------------------------------------------------
+ |
+ | When you use command `php artisan admin:extend` to generate extensions,
+ | the extension files will be generated in this directory.
+ */
+ 'extension_dir' => app_path('Admin/Extensions'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Settings for extensions.
+ |--------------------------------------------------------------------------
+ |
+ | You can find all available extensions here
+ | https://github.com/laravel-admin-extensions.
+ |
+ */
+ 'extensions' => [
+ 'ueditor' => [
+ // 如果要关掉这个扩展,设置为false
+ 'enable' => true,
+ // 编辑器的前端配置 参考:http://fex.baidu.com/ueditor/#start-config
+ 'config' => [
+ 'initialFrameHeight' => 400, // 例如初始化高度
+ ],
+ 'field_type' => 'ueditor',
+ ],
+ 'grid-lightbox' => [
+
+ // Set to `false` if you want to disable this extension
+ 'enable' => true,
+ ]
+ ],
+];
diff --git a/config/agent.php b/config/agent.php
new file mode 100644
index 0000000..6c8951f
--- /dev/null
+++ b/config/agent.php
@@ -0,0 +1,40 @@
+ [
+ /**
+ * 可配置 API 独立域名
+ */
+ 'domain' => env('AGENT_ROUTE_DOMAIN', ''),
+ /**
+ * 不实用独立域名,API 地址前缀
+ */
+ 'prefix' => env('AGENT_ROUTE_PREFIX', 'agent'),
+ /**
+ * API 控制器命名空间
+ */
+ 'namespace' => 'App\\Agent\\Controllers',
+ /**
+ * API 路由命名前缀
+ */
+ 'as' => 'agent.',
+ /**
+ * API 默认中间件
+ */
+ 'middleware' => ['api', 'api.accept'],
+ /**
+ * 身份认证的中间件
+ */
+ 'middleware_auth' => ['api', 'api.accept', 'token.auth'],
+ /**
+ * 获取token,获取不到也不报错的中间件
+ */
+ 'middleware_guess' => ['api', 'api.accept', 'token.guess'],
+ ],
+
+ /**
+ * API 目录
+ */
+ 'directory' => app_path('Agent'),
+];
diff --git a/config/api.php b/config/api.php
new file mode 100644
index 0000000..b7cc95d
--- /dev/null
+++ b/config/api.php
@@ -0,0 +1,48 @@
+ env('TOKEN_AUTO_REVOKE', true),
+ /**
+ * token的名称
+ */
+ 'passport_token_name' => env('PASSPORT_TOKEN_NAME', ''),
+
+ 'route' => [
+ /**
+ * API 路由命名前缀
+ */
+ 'as' => 'api.',
+ /**
+ * 可配置 API 独立域名
+ */
+ 'domain' => env('API_ROUTE_DOMAIN', ''),
+ /**
+ * 不使用用独立域名,API 地址前缀
+ */
+ 'prefix' => env('API_ROUTE_PREFIX', 'api'),
+ /**
+ * API 控制器命名空间
+ */
+ 'namespace' => 'App\\Api\\Controllers',
+ /**
+ * 中间件
+ */
+ 'middleware' => ['api', 'api.accept'],
+ /**
+ * 身份认证的中间件
+ */
+ 'middleware_auth' => ['api', 'api.accept', 'token.auth'],
+ /**
+ * 获取token,获取不到也不报错的中间件
+ */
+ 'middleware_guess' => ['api', 'api.accept', 'token.guess'],
+ ],
+
+ /**
+ * 接口目录
+ */
+ 'directory' => app_path('Api'),
+];
diff --git a/config/app.php b/config/app.php
new file mode 100644
index 0000000..dd1be1c
--- /dev/null
+++ b/config/app.php
@@ -0,0 +1,236 @@
+ env('APP_NAME', 'Laravel'),
+
+ /**
+ * 是否是测试
+ */
+ 'is_test' => env('APP_IS_TEST', false),
+ /*
+ |--------------------------------------------------------------------------
+ | Application Environment
+ |--------------------------------------------------------------------------
+ |
+ | This value determines the "environment" your application is currently
+ | running in. This may determine how you prefer to configure various
+ | services the application utilizes. Set this in your ".env" file.
+ |
+ */
+
+ 'env' => env('APP_ENV', 'production'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Debug Mode
+ |--------------------------------------------------------------------------
+ |
+ | When your application is in debug mode, detailed error messages with
+ | stack traces will be shown on every error that occurs within your
+ | application. If disabled, a simple generic error page is shown.
+ |
+ */
+
+ 'debug' => (bool) env('APP_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application URL
+ |--------------------------------------------------------------------------
+ |
+ | This URL is used by the console to properly generate URLs when using
+ | the Artisan command line tool. You should set this to the root of
+ | your application so that it is used when running Artisan tasks.
+ |
+ */
+
+ 'url' => env('APP_URL', 'http://localhost'),
+
+ 'asset_url' => env('ASSET_URL', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Timezone
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the default timezone for your application, which
+ | will be used by the PHP date and date-time functions. We have gone
+ | ahead and set this to a sensible default for you out of the box.
+ |
+ */
+
+ 'timezone' => 'Asia/Shanghai',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Locale Configuration
+ |--------------------------------------------------------------------------
+ |
+ | The application locale determines the default locale that will be used
+ | by the translation service provider. You are free to set this value
+ | to any of the locales which will be supported by the application.
+ |
+ */
+
+ 'locale' => 'zh_CN',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Fallback Locale
+ |--------------------------------------------------------------------------
+ |
+ | The fallback locale determines the locale to use when the current one
+ | is not available. You may change the value to correspond to any of
+ | the language folders that are provided through your application.
+ |
+ */
+
+ 'fallback_locale' => 'zh_CN',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Faker Locale
+ |--------------------------------------------------------------------------
+ |
+ | This locale will be used by the Faker PHP library when generating fake
+ | data for your database seeds. For example, this will be used to get
+ | localized telephone numbers, street address information and more.
+ |
+ */
+
+ 'faker_locale' => 'en_US',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Encryption Key
+ |--------------------------------------------------------------------------
+ |
+ | This key is used by the Illuminate encrypter service and should be set
+ | to a random, 32 character string, otherwise these encrypted strings
+ | will not be safe. Please do this before deploying an application!
+ |
+ */
+
+ 'key' => env('APP_KEY'),
+
+ 'cipher' => 'AES-256-CBC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Autoloaded Service Providers
+ |--------------------------------------------------------------------------
+ |
+ | The service providers listed here will be automatically loaded on the
+ | request to your application. Feel free to add your own services to
+ | this array to grant expanded functionality to your applications.
+ |
+ */
+
+ 'providers' => [
+
+ /*
+ * Laravel Framework Service Providers...
+ */
+ Illuminate\Auth\AuthServiceProvider::class,
+ Illuminate\Broadcasting\BroadcastServiceProvider::class,
+ Illuminate\Bus\BusServiceProvider::class,
+ Illuminate\Cache\CacheServiceProvider::class,
+ Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
+ Illuminate\Cookie\CookieServiceProvider::class,
+ Illuminate\Database\DatabaseServiceProvider::class,
+ Illuminate\Encryption\EncryptionServiceProvider::class,
+ Illuminate\Filesystem\FilesystemServiceProvider::class,
+ Illuminate\Foundation\Providers\FoundationServiceProvider::class,
+ Illuminate\Hashing\HashServiceProvider::class,
+ Illuminate\Mail\MailServiceProvider::class,
+ Illuminate\Notifications\NotificationServiceProvider::class,
+ Illuminate\Pagination\PaginationServiceProvider::class,
+ Illuminate\Pipeline\PipelineServiceProvider::class,
+ Illuminate\Queue\QueueServiceProvider::class,
+ Illuminate\Redis\RedisServiceProvider::class,
+ Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
+ Illuminate\Session\SessionServiceProvider::class,
+ Illuminate\Translation\TranslationServiceProvider::class,
+ Illuminate\Validation\ValidationServiceProvider::class,
+ Illuminate\View\ViewServiceProvider::class,
+
+ /*
+ * Package Service Providers...
+ */
+
+ /*
+ * Application Service Providers...
+ */
+ App\Providers\AppServiceProvider::class,
+ App\Providers\AuthServiceProvider::class,
+ // App\Providers\BroadcastServiceProvider::class,
+ App\Providers\EventServiceProvider::class,
+ App\Providers\RouteServiceProvider::class,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Class Aliases
+ |--------------------------------------------------------------------------
+ |
+ | This array of class aliases will be registered when this application
+ | is started. However, feel free to register as many as you wish as
+ | the aliases are "lazy" loaded so they don't hinder performance.
+ |
+ */
+
+ 'aliases' => [
+
+ 'App' => Illuminate\Support\Facades\App::class,
+ 'Arr' => Illuminate\Support\Arr::class,
+ 'Artisan' => Illuminate\Support\Facades\Artisan::class,
+ 'Auth' => Illuminate\Support\Facades\Auth::class,
+ 'Blade' => Illuminate\Support\Facades\Blade::class,
+ 'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
+ 'Bus' => Illuminate\Support\Facades\Bus::class,
+ 'Cache' => Illuminate\Support\Facades\Cache::class,
+ 'Config' => Illuminate\Support\Facades\Config::class,
+ 'Cookie' => Illuminate\Support\Facades\Cookie::class,
+ 'Crypt' => Illuminate\Support\Facades\Crypt::class,
+ 'DB' => Illuminate\Support\Facades\DB::class,
+ 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
+ 'Event' => Illuminate\Support\Facades\Event::class,
+ 'File' => Illuminate\Support\Facades\File::class,
+ 'Gate' => Illuminate\Support\Facades\Gate::class,
+ 'Hash' => Illuminate\Support\Facades\Hash::class,
+ 'Http' => Illuminate\Support\Facades\Http::class,
+ 'Lang' => Illuminate\Support\Facades\Lang::class,
+ 'Log' => Illuminate\Support\Facades\Log::class,
+ 'Mail' => Illuminate\Support\Facades\Mail::class,
+ 'Notification' => Illuminate\Support\Facades\Notification::class,
+ 'Password' => Illuminate\Support\Facades\Password::class,
+ 'Queue' => Illuminate\Support\Facades\Queue::class,
+ 'Redirect' => Illuminate\Support\Facades\Redirect::class,
+ // 'Redis' => Illuminate\Support\Facades\Redis::class,
+ 'Request' => Illuminate\Support\Facades\Request::class,
+ 'Response' => Illuminate\Support\Facades\Response::class,
+ 'Route' => Illuminate\Support\Facades\Route::class,
+ 'Schema' => Illuminate\Support\Facades\Schema::class,
+ 'Session' => Illuminate\Support\Facades\Session::class,
+ 'Storage' => Illuminate\Support\Facades\Storage::class,
+ 'Str' => Illuminate\Support\Str::class,
+ 'URL' => Illuminate\Support\Facades\URL::class,
+ 'Validator' => Illuminate\Support\Facades\Validator::class,
+ 'View' => Illuminate\Support\Facades\View::class,
+
+ ],
+
+];
diff --git a/config/auth.php b/config/auth.php
new file mode 100644
index 0000000..495483d
--- /dev/null
+++ b/config/auth.php
@@ -0,0 +1,117 @@
+ [
+ 'guard' => 'web',
+ 'passwords' => 'users',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Guards
+ |--------------------------------------------------------------------------
+ |
+ | Next, you may define every authentication guard for your application.
+ | Of course, a great default configuration has been defined for you
+ | here which uses session storage and the Eloquent user provider.
+ |
+ | All authentication drivers have a user provider. This defines how the
+ | users are actually retrieved out of your database or other storage
+ | mechanisms used by this application to persist your user's data.
+ |
+ | Supported: "session", "token"
+ |
+ */
+
+ 'guards' => [
+ 'web' => [
+ 'driver' => 'session',
+ 'provider' => 'users',
+ ],
+
+ 'api' => [
+ 'driver' => 'token',
+ 'provider' => 'users',
+ 'hash' => false,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | User Providers
+ |--------------------------------------------------------------------------
+ |
+ | All authentication drivers have a user provider. This defines how the
+ | users are actually retrieved out of your database or other storage
+ | mechanisms used by this application to persist your user's data.
+ |
+ | If you have multiple user tables or models you may configure multiple
+ | sources which represent each model / table. These sources may then
+ | be assigned to any extra authentication guards you have defined.
+ |
+ | Supported: "database", "eloquent"
+ |
+ */
+
+ 'providers' => [
+ 'users' => [
+ 'driver' => 'eloquent',
+ 'model' => App\Models\User::class,
+ ],
+
+ // 'users' => [
+ // 'driver' => 'database',
+ // 'table' => 'users',
+ // ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Resetting Passwords
+ |--------------------------------------------------------------------------
+ |
+ | You may specify multiple password reset configurations if you have more
+ | than one user table or model in the application and you want to have
+ | separate password reset settings based on the specific user types.
+ |
+ | The expire time is the number of minutes that the reset token should be
+ | considered valid. This security feature keeps tokens short-lived so
+ | they have less time to be guessed. You may change this as needed.
+ |
+ */
+
+ 'passwords' => [
+ 'users' => [
+ 'provider' => 'users',
+ 'table' => 'password_resets',
+ 'expire' => 60,
+ 'throttle' => 60,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Password Confirmation Timeout
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define the amount of seconds before a password confirmation
+ | times out and the user is prompted to re-enter their password via the
+ | confirmation screen. By default, the timeout lasts for three hours.
+ |
+ */
+
+ 'password_timeout' => 10800,
+
+];
diff --git a/config/broadcasting.php b/config/broadcasting.php
new file mode 100644
index 0000000..59bccd5
--- /dev/null
+++ b/config/broadcasting.php
@@ -0,0 +1,64 @@
+ env('BROADCAST_DRIVER', 'null'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Broadcast Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the broadcast connections that will be used
+ | to broadcast events to other systems or over websockets. Samples of
+ | each available type of connection are provided inside this array.
+ |
+ */
+
+ 'connections' => [
+
+ 'pusher' => [
+ 'driver' => 'pusher',
+ 'key' => env('PUSHER_APP_KEY'),
+ 'secret' => env('PUSHER_APP_SECRET'),
+ 'app_id' => env('PUSHER_APP_ID'),
+ 'options' => [
+ 'cluster' => env('PUSHER_APP_CLUSTER'),
+ 'useTLS' => true,
+ ],
+ ],
+
+ 'ably' => [
+ 'driver' => 'ably',
+ 'key' => env('ABLY_KEY'),
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ ],
+
+ 'log' => [
+ 'driver' => 'log',
+ ],
+
+ 'null' => [
+ 'driver' => 'null',
+ ],
+
+ ],
+
+];
diff --git a/config/cache.php b/config/cache.php
new file mode 100644
index 0000000..70a2674
--- /dev/null
+++ b/config/cache.php
@@ -0,0 +1,106 @@
+ env('CACHE_DRIVER', 'file'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Stores
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the cache "stores" for your application as
+ | well as their drivers. You may even define multiple stores for the
+ | same cache driver to group types of items stored in your caches.
+ |
+ | Supported drivers: "apc", "array", "database", "file",
+ | "memcached", "redis", "dynamodb", "null"
+ |
+ */
+
+ 'stores' => [
+
+ 'apc' => [
+ 'driver' => 'apc',
+ ],
+
+ 'array' => [
+ 'driver' => 'array',
+ 'serialize' => false,
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'table' => 'cache',
+ 'connection' => null,
+ 'lock_connection' => null,
+ ],
+
+ 'file' => [
+ 'driver' => 'file',
+ 'path' => storage_path('framework/cache/data'),
+ ],
+
+ 'memcached' => [
+ 'driver' => 'memcached',
+ 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
+ 'sasl' => [
+ env('MEMCACHED_USERNAME'),
+ env('MEMCACHED_PASSWORD'),
+ ],
+ 'options' => [
+ // Memcached::OPT_CONNECT_TIMEOUT => 2000,
+ ],
+ 'servers' => [
+ [
+ 'host' => env('MEMCACHED_HOST', '127.0.0.1'),
+ 'port' => env('MEMCACHED_PORT', 11211),
+ 'weight' => 100,
+ ],
+ ],
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'cache',
+ 'lock_connection' => 'default',
+ ],
+
+ 'dynamodb' => [
+ 'driver' => 'dynamodb',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
+ 'endpoint' => env('DYNAMODB_ENDPOINT'),
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Key Prefix
+ |--------------------------------------------------------------------------
+ |
+ | When utilizing a RAM based store such as APC or Memcached, there might
+ | be other applications utilizing the same cache. So, we'll specify a
+ | value to get prefixed to all our keys so we can avoid collisions.
+ |
+ */
+
+ 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'),
+
+];
diff --git a/config/cors.php b/config/cors.php
new file mode 100644
index 0000000..7655fd3
--- /dev/null
+++ b/config/cors.php
@@ -0,0 +1,34 @@
+ ['api/*'],
+
+ 'allowed_methods' => ['*'],
+
+ 'allowed_origins' => ['*'],
+
+ 'allowed_origins_patterns' => [],
+
+ 'allowed_headers' => ['*'],
+
+ 'exposed_headers' => ['Authorization', '*'],
+
+ 'max_age' => 0,
+
+ 'supports_credentials' => false,
+
+];
diff --git a/config/database.php b/config/database.php
new file mode 100644
index 0000000..aeabec6
--- /dev/null
+++ b/config/database.php
@@ -0,0 +1,147 @@
+ env('DB_CONNECTION', 'mysql'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Database Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here are each of the database connections setup for your application.
+ | Of course, examples of configuring each database platform that is
+ | supported by Laravel is shown below to make development simple.
+ |
+ |
+ | All database work in Laravel is done through the PHP PDO facilities
+ | so make sure you have the driver for your particular database of
+ | choice installed on your machine before you begin development.
+ |
+ */
+
+ 'connections' => [
+
+ 'sqlite' => [
+ 'driver' => 'sqlite',
+ 'url' => env('DATABASE_URL'),
+ 'database' => env('DB_DATABASE', database_path('database.sqlite')),
+ 'prefix' => '',
+ 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
+ ],
+
+ 'mysql' => [
+ 'driver' => 'mysql',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => 'utf8mb4',
+ 'collation' => 'utf8mb4_unicode_ci',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => false,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
+
+ 'pgsql' => [
+ 'driver' => 'pgsql',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '5432'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'schema' => 'public',
+ 'sslmode' => 'prefer',
+ ],
+
+ 'sqlsrv' => [
+ 'driver' => 'sqlsrv',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', 'localhost'),
+ 'port' => env('DB_PORT', '1433'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Migration Repository Table
+ |--------------------------------------------------------------------------
+ |
+ | This table keeps track of all the migrations that have already run for
+ | your application. Using this information, we can determine which of
+ | the migrations on disk haven't actually been run in the database.
+ |
+ */
+
+ 'migrations' => 'migrations',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Redis Databases
+ |--------------------------------------------------------------------------
+ |
+ | Redis is an open source, fast, and advanced key-value store that also
+ | provides a richer body of commands than a typical key-value system
+ | such as APC or Memcached. Laravel makes it easy to dig right in.
+ |
+ */
+
+ 'redis' => [
+
+ 'client' => env('REDIS_CLIENT', 'phpredis'),
+
+ 'options' => [
+ 'cluster' => env('REDIS_CLUSTER', 'redis'),
+ 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
+ ],
+
+ 'default' => [
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_DB', '0'),
+ ],
+
+ 'cache' => [
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_CACHE_DB', '1'),
+ ],
+
+ ],
+
+];
diff --git a/config/favorite.php b/config/favorite.php
new file mode 100644
index 0000000..0bc6e39
--- /dev/null
+++ b/config/favorite.php
@@ -0,0 +1,23 @@
+ false,
+
+ /*
+ * User tables foreign key name.
+ */
+ 'user_foreign_key' => 'user_id',
+
+ /*
+ * Table name for favorites records.
+ */
+ 'favorites_table' => 'favorites',
+
+ /*
+ * Model name for favorite record.
+ */
+ 'favorite_model' => 'Overtrue\LaravelFavorite\Favorite',
+];
diff --git a/config/filesystems.php b/config/filesystems.php
new file mode 100644
index 0000000..a9a2a86
--- /dev/null
+++ b/config/filesystems.php
@@ -0,0 +1,72 @@
+ env('FILESYSTEM_DRIVER', 'local'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Filesystem Disks
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure as many filesystem "disks" as you wish, and you
+ | may even configure multiple disks of the same driver. Defaults have
+ | been setup for each driver as an example of the required options.
+ |
+ | Supported Drivers: "local", "ftp", "sftp", "s3"
+ |
+ */
+
+ 'disks' => [
+
+ 'local' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app'),
+ ],
+
+ 'public' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app/public'),
+ 'url' => env('APP_URL') . '/storage',
+ 'visibility' => 'public',
+ ],
+
+ 's3' => [
+ 'driver' => 's3',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION'),
+ 'bucket' => env('AWS_BUCKET'),
+ 'url' => env('AWS_URL'),
+ 'endpoint' => env('AWS_ENDPOINT'),
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Symbolic Links
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the symbolic links that will be created when the
+ | `storage:link` Artisan command is executed. The array keys should be
+ | the locations of the links and the values should be their targets.
+ |
+ */
+
+ 'links' => [
+ public_path('storage') => storage_path('app/public'),
+ ],
+
+];
diff --git a/config/hashing.php b/config/hashing.php
new file mode 100644
index 0000000..5b10c09
--- /dev/null
+++ b/config/hashing.php
@@ -0,0 +1,52 @@
+ 'bcrypt',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Bcrypt Options
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the configuration options that should be used when
+ | passwords are hashed using the Bcrypt algorithm. This will allow you
+ | to control the amount of time it takes to hash the given password.
+ |
+ */
+
+ 'bcrypt' => [
+ 'rounds' => env('BCRYPT_ROUNDS', 10),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Argon Options
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the configuration options that should be used when
+ | passwords are hashed using the Argon algorithm. These will allow you
+ | to control the amount of time it takes to hash the given password.
+ |
+ */
+
+ 'argon' => [
+ 'memory' => 1024,
+ 'threads' => 2,
+ 'time' => 2,
+ ],
+
+];
diff --git a/config/image.php b/config/image.php
new file mode 100644
index 0000000..2b1d2c3
--- /dev/null
+++ b/config/image.php
@@ -0,0 +1,20 @@
+ 'gd'
+
+];
diff --git a/config/jwt.php b/config/jwt.php
new file mode 100644
index 0000000..8b7843b
--- /dev/null
+++ b/config/jwt.php
@@ -0,0 +1,304 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | JWT Authentication Secret
+ |--------------------------------------------------------------------------
+ |
+ | Don't forget to set this in your .env file, as it will be used to sign
+ | your tokens. A helper command is provided for this:
+ | `php artisan jwt:secret`
+ |
+ | Note: This will be used for Symmetric algorithms only (HMAC),
+ | since RSA and ECDSA use a private/public key combo (See below).
+ |
+ */
+
+ 'secret' => env('JWT_SECRET'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | JWT Authentication Keys
+ |--------------------------------------------------------------------------
+ |
+ | The algorithm you are using, will determine whether your tokens are
+ | signed with a random string (defined in `JWT_SECRET`) or using the
+ | following public & private keys.
+ |
+ | Symmetric Algorithms:
+ | HS256, HS384 & HS512 will use `JWT_SECRET`.
+ |
+ | Asymmetric Algorithms:
+ | RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below.
+ |
+ */
+
+ 'keys' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Public Key
+ |--------------------------------------------------------------------------
+ |
+ | A path or resource to your public key.
+ |
+ | E.g. 'file://path/to/public/key'
+ |
+ */
+
+ 'public' => env('JWT_PUBLIC_KEY'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Private Key
+ |--------------------------------------------------------------------------
+ |
+ | A path or resource to your private key.
+ |
+ | E.g. 'file://path/to/private/key'
+ |
+ */
+
+ 'private' => env('JWT_PRIVATE_KEY'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Passphrase
+ |--------------------------------------------------------------------------
+ |
+ | The passphrase for your private key. Can be null if none set.
+ |
+ */
+
+ 'passphrase' => env('JWT_PASSPHRASE'),
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | JWT time to live
+ |--------------------------------------------------------------------------
+ |
+ | Specify the length of time (in minutes) that the token will be valid for.
+ | Defaults to 1 hour.
+ |
+ | You can also set this to null, to yield a never expiring token.
+ | Some people may want this behaviour for e.g. a mobile app.
+ | This is not particularly recommended, so make sure you have appropriate
+ | systems in place to revoke the token if necessary.
+ | Notice: If you set this to null you should remove 'exp' element from 'required_claims' list.
+ |
+ */
+
+ 'ttl' => env('JWT_TTL', 60),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Refresh time to live
+ |--------------------------------------------------------------------------
+ |
+ | Specify the length of time (in minutes) that the token can be refreshed
+ | within. I.E. The user can refresh their token within a 2 week window of
+ | the original token being created until they must re-authenticate.
+ | Defaults to 2 weeks.
+ |
+ | You can also set this to null, to yield an infinite refresh time.
+ | Some may want this instead of never expiring tokens for e.g. a mobile app.
+ | This is not particularly recommended, so make sure you have appropriate
+ | systems in place to revoke the token if necessary.
+ |
+ */
+
+ 'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
+
+ /*
+ |--------------------------------------------------------------------------
+ | JWT hashing algorithm
+ |--------------------------------------------------------------------------
+ |
+ | Specify the hashing algorithm that will be used to sign the token.
+ |
+ | See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL
+ | for possible values.
+ |
+ */
+
+ 'algo' => env('JWT_ALGO', 'HS256'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Required Claims
+ |--------------------------------------------------------------------------
+ |
+ | Specify the required claims that must exist in any token.
+ | A TokenInvalidException will be thrown if any of these claims are not
+ | present in the payload.
+ |
+ */
+
+ 'required_claims' => [
+ 'iss',
+ 'iat',
+ 'exp',
+ 'nbf',
+ 'sub',
+ 'jti',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Persistent Claims
+ |--------------------------------------------------------------------------
+ |
+ | Specify the claim keys to be persisted when refreshing a token.
+ | `sub` and `iat` will automatically be persisted, in
+ | addition to the these claims.
+ |
+ | Note: If a claim does not exist then it will be ignored.
+ |
+ */
+
+ 'persistent_claims' => [
+ // 'foo',
+ // 'bar',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Lock Subject
+ |--------------------------------------------------------------------------
+ |
+ | This will determine whether a `prv` claim is automatically added to
+ | the token. The purpose of this is to ensure that if you have multiple
+ | authentication models e.g. `App\User` & `App\OtherPerson`, then we
+ | should prevent one authentication request from impersonating another,
+ | if 2 tokens happen to have the same id across the 2 different models.
+ |
+ | Under specific circumstances, you may want to disable this behaviour
+ | e.g. if you only have one authentication model, then you would save
+ | a little on token size.
+ |
+ */
+
+ 'lock_subject' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Leeway
+ |--------------------------------------------------------------------------
+ |
+ | This property gives the jwt timestamp claims some "leeway".
+ | Meaning that if you have any unavoidable slight clock skew on
+ | any of your servers then this will afford you some level of cushioning.
+ |
+ | This applies to the claims `iat`, `nbf` and `exp`.
+ |
+ | Specify in seconds - only if you know you need it.
+ |
+ */
+
+ 'leeway' => env('JWT_LEEWAY', 0),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Blacklist Enabled
+ |--------------------------------------------------------------------------
+ |
+ | In order to invalidate tokens, you must have the blacklist enabled.
+ | If you do not want or need this functionality, then set this to false.
+ |
+ */
+
+ 'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
+
+ /*
+ | -------------------------------------------------------------------------
+ | Blacklist Grace Period
+ | -------------------------------------------------------------------------
+ |
+ | When multiple concurrent requests are made with the same JWT,
+ | it is possible that some of them fail, due to token regeneration
+ | on every request.
+ |
+ | Set grace period in seconds to prevent parallel request failure.
+ |
+ */
+
+ 'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cookies encryption
+ |--------------------------------------------------------------------------
+ |
+ | By default Laravel encrypt cookies for security reason.
+ | If you decide to not decrypt cookies, you will have to configure Laravel
+ | to not encrypt your cookie token by adding its name into the $except
+ | array available in the middleware "EncryptCookies" provided by Laravel.
+ | see https://laravel.com/docs/master/responses#cookies-and-encryption
+ | for details.
+ |
+ | Set it to true if you want to decrypt cookies.
+ |
+ */
+
+ 'decrypt_cookies' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Providers
+ |--------------------------------------------------------------------------
+ |
+ | Specify the various providers used throughout the package.
+ |
+ */
+
+ 'providers' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | JWT Provider
+ |--------------------------------------------------------------------------
+ |
+ | Specify the provider that is used to create and decode the tokens.
+ |
+ */
+
+ 'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Provider
+ |--------------------------------------------------------------------------
+ |
+ | Specify the provider that is used to authenticate users.
+ |
+ */
+
+ 'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Storage Provider
+ |--------------------------------------------------------------------------
+ |
+ | Specify the provider that is used to store tokens in the blacklist.
+ |
+ */
+
+ 'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
+
+ ],
+
+];
diff --git a/config/laravel-model-caching.php b/config/laravel-model-caching.php
new file mode 100644
index 0000000..cda02fb
--- /dev/null
+++ b/config/laravel-model-caching.php
@@ -0,0 +1,11 @@
+ '',
+
+ 'enabled' => env('MODEL_CACHE_ENABLED', true),
+
+ 'use-database-keying' => env('MODEL_CACHE_USE_DATABASE_KEYING', true),
+
+ 'store' => env('MODEL_CACHE_STORE'),
+];
diff --git a/config/logging.php b/config/logging.php
new file mode 100644
index 0000000..fad5759
--- /dev/null
+++ b/config/logging.php
@@ -0,0 +1,119 @@
+ env('LOG_CHANNEL', 'stack'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Log Channels
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the log channels for your application. Out of
+ | the box, Laravel uses the Monolog PHP logging library. This gives
+ | you a variety of powerful log handlers / formatters to utilize.
+ |
+ | Available Drivers: "single", "daily", "slack", "syslog",
+ | "errorlog", "monolog",
+ | "custom", "stack"
+ |
+ */
+
+ 'channels' => [
+ 'stack' => [
+ 'driver' => 'stack',
+ 'channels' => ['daily'],
+ 'ignore_exceptions' => false,
+ ],
+
+ 'single' => [
+ 'driver' => 'single',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => env('LOG_LEVEL', 'debug'),
+ ],
+
+ 'daily' => [
+ 'driver' => 'daily',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'days' => 14,
+ ],
+
+ 'slack' => [
+ 'driver' => 'slack',
+ 'url' => env('LOG_SLACK_WEBHOOK_URL'),
+ 'username' => 'Laravel Log',
+ 'emoji' => ':boom:',
+ 'level' => env('LOG_LEVEL', 'critical'),
+ ],
+
+ 'papertrail' => [
+ 'driver' => 'monolog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'handler' => SyslogUdpHandler::class,
+ 'handler_with' => [
+ 'host' => env('PAPERTRAIL_URL'),
+ 'port' => env('PAPERTRAIL_PORT'),
+ ],
+ ],
+
+ 'stderr' => [
+ 'driver' => 'monolog',
+ 'handler' => StreamHandler::class,
+ 'formatter' => env('LOG_STDERR_FORMATTER'),
+ 'with' => [
+ 'stream' => 'php://stderr',
+ ],
+ ],
+
+ 'syslog' => [
+ 'driver' => 'syslog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ ],
+
+ 'errorlog' => [
+ 'driver' => 'errorlog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ ],
+
+ 'null' => [
+ 'driver' => 'monolog',
+ 'handler' => NullHandler::class,
+ ],
+
+ 'emergency' => [
+ 'path' => storage_path('logs/laravel.log'),
+ ],
+ ],
+
+ 'query' => [
+ 'enabled' => env('LOG_QUERY', env('APP_ENV') === 'local'),
+
+ // Only record queries that are slower than the following time
+ // Unit: milliseconds
+ 'slower_than' => 0,
+
+ // Only record queries when the QUERY_LOG_TRIGGER is set in the environment,
+ // or when the trigger HEADER, GET, POST, or COOKIE variable is set.
+ 'trigger' => env('QUERY_LOG_TRIGGER'),
+
+ // Log Channel
+ 'channel' => 'stack',
+ ],
+
+];
diff --git a/config/mail.php b/config/mail.php
new file mode 100644
index 0000000..93c656a
--- /dev/null
+++ b/config/mail.php
@@ -0,0 +1,110 @@
+ env('MAIL_MAILER', 'smtp'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Mailer Configurations
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure all of the mailers used by your application plus
+ | their respective settings. Several examples have been configured for
+ | you and you are free to add your own as your application requires.
+ |
+ | Laravel supports a variety of mail "transport" drivers to be used while
+ | sending an e-mail. You will specify which one you are using for your
+ | mailers below. You are free to add additional mailers as required.
+ |
+ | Supported: "smtp", "sendmail", "mailgun", "ses",
+ | "postmark", "log", "array"
+ |
+ */
+
+ 'mailers' => [
+ 'smtp' => [
+ 'transport' => 'smtp',
+ 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+ 'port' => env('MAIL_PORT', 587),
+ 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
+ 'username' => env('MAIL_USERNAME'),
+ 'password' => env('MAIL_PASSWORD'),
+ 'timeout' => null,
+ 'auth_mode' => null,
+ ],
+
+ 'ses' => [
+ 'transport' => 'ses',
+ ],
+
+ 'mailgun' => [
+ 'transport' => 'mailgun',
+ ],
+
+ 'postmark' => [
+ 'transport' => 'postmark',
+ ],
+
+ 'sendmail' => [
+ 'transport' => 'sendmail',
+ 'path' => '/usr/sbin/sendmail -bs',
+ ],
+
+ 'log' => [
+ 'transport' => 'log',
+ 'channel' => env('MAIL_LOG_CHANNEL'),
+ ],
+
+ 'array' => [
+ 'transport' => 'array',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Global "From" Address
+ |--------------------------------------------------------------------------
+ |
+ | You may wish for all e-mails sent by your application to be sent from
+ | the same address. Here, you may specify a name and address that is
+ | used globally for all e-mails that are sent by your application.
+ |
+ */
+
+ 'from' => [
+ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
+ 'name' => env('MAIL_FROM_NAME', 'Example'),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Markdown Mail Settings
+ |--------------------------------------------------------------------------
+ |
+ | If you are using Markdown based email rendering, you may configure your
+ | theme and component paths here, allowing you to customize the design
+ | of the emails. Or, you may simply stick with the Laravel defaults!
+ |
+ */
+
+ 'markdown' => [
+ 'theme' => 'default',
+
+ 'paths' => [
+ resource_path('views/vendor/mail'),
+ ],
+ ],
+
+];
diff --git a/config/modules.php b/config/modules.php
new file mode 100644
index 0000000..b81ed11
--- /dev/null
+++ b/config/modules.php
@@ -0,0 +1,272 @@
+ 'Modules',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Module Stubs
+ |--------------------------------------------------------------------------
+ |
+ | Default module stubs.
+ |
+ */
+
+ 'stubs' => [
+ 'enabled' => false,
+ 'path' => base_path() . '/vendor/nwidart/laravel-modules/src/Commands/stubs',
+ 'files' => [
+ 'routes/web' => 'Routes/web.php',
+ 'routes/api' => 'Routes/api.php',
+ 'views/index' => 'Resources/views/index.blade.php',
+ 'views/master' => 'Resources/views/layouts/master.blade.php',
+ 'scaffold/config' => 'Config/config.php',
+ 'composer' => 'composer.json',
+ 'assets/js/app' => 'Resources/assets/js/app.js',
+ 'assets/sass/app' => 'Resources/assets/sass/app.scss',
+ 'webpack' => 'webpack.mix.js',
+ 'package' => 'package.json',
+ ],
+ 'replacements' => [
+ 'routes/web' => ['LOWER_NAME', 'STUDLY_NAME'],
+ 'routes/api' => ['LOWER_NAME'],
+ 'webpack' => ['LOWER_NAME'],
+ 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE', 'PROVIDER_NAMESPACE'],
+ 'views/index' => ['LOWER_NAME'],
+ 'views/master' => ['LOWER_NAME', 'STUDLY_NAME'],
+ 'scaffold/config' => ['STUDLY_NAME'],
+ 'composer' => [
+ 'LOWER_NAME',
+ 'STUDLY_NAME',
+ 'VENDOR',
+ 'AUTHOR_NAME',
+ 'AUTHOR_EMAIL',
+ 'MODULE_NAMESPACE',
+ 'PROVIDER_NAMESPACE',
+ ],
+ ],
+ 'gitkeep' => false,
+ ],
+ 'paths' => [
+ /*
+ |--------------------------------------------------------------------------
+ | Modules path
+ |--------------------------------------------------------------------------
+ |
+ | This path used for save the generated module. This path also will be added
+ | automatically to list of scanned folders.
+ |
+ */
+
+ 'modules' => base_path('modules'),
+ /*
+ |--------------------------------------------------------------------------
+ | Modules assets path
+ |--------------------------------------------------------------------------
+ |
+ | Here you may update the modules assets path.
+ |
+ */
+
+ 'assets' => public_path('modules'),
+ /*
+ |--------------------------------------------------------------------------
+ | The migrations path
+ |--------------------------------------------------------------------------
+ |
+ | Where you run 'module:publish-migration' command, where do you publish the
+ | the migration files?
+ |
+ */
+
+ 'migration' => base_path('database/migrations'),
+ /*
+ |--------------------------------------------------------------------------
+ | Generator path
+ |--------------------------------------------------------------------------
+ | Customise the paths where the folders will be generated.
+ | Set the generate key to false to not generate that folder
+ */
+ 'generator' => [
+ 'config' => ['path' => 'Config', 'generate' => true],
+ 'command' => ['path' => 'Console', 'generate' => true],
+ 'migration' => ['path' => 'Database/Migrations', 'generate' => true],
+ 'seeder' => ['path' => 'Database/Seeders', 'generate' => true],
+ 'factory' => ['path' => 'Database/factories', 'generate' => true],
+ 'model' => ['path' => 'Models', 'generate' => true],
+ 'routes' => ['path' => 'Routes', 'generate' => true],
+ 'controller' => ['path' => 'Http/Controllers', 'generate' => true],
+ 'filter' => ['path' => 'Http/Middleware', 'generate' => true],
+ 'request' => ['path' => 'Http/Requests', 'generate' => true],
+ 'provider' => ['path' => 'Providers', 'generate' => true],
+ 'assets' => ['path' => 'Resources/assets', 'generate' => false],
+ 'lang' => ['path' => 'Resources/lang', 'generate' => true],
+ 'views' => ['path' => 'Resources/views', 'generate' => false],
+ 'test' => ['path' => 'Tests/Unit', 'generate' => false],
+ 'test-feature' => ['path' => 'Tests/Feature', 'generate' => false],
+ 'repository' => ['path' => 'Http/Resources', 'generate' => true],
+ 'event' => ['path' => 'Events', 'generate' => true],
+ 'listener' => ['path' => 'Listeners', 'generate' => true],
+ 'policies' => ['path' => 'Policies', 'generate' => false],
+ 'rules' => ['path' => 'Rules', 'generate' => false],
+ 'jobs' => ['path' => 'Jobs', 'generate' => true],
+ 'emails' => ['path' => 'Emails', 'generate' => false],
+ 'notifications' => ['path' => 'Notifications', 'generate' => false],
+ 'resource' => ['path' => 'Transformers', 'generate' => false],
+ 'component-view' => ['path' => 'Resources/views/components', 'generate' => false],
+ 'component-class' => ['path' => 'View/Component', 'generate' => false],
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Package commands
+ |--------------------------------------------------------------------------
+ |
+ | Here you can define which commands will be visible and used in your
+ | application. If for example you don't use some of the commands provided
+ | you can simply comment them out.
+ |
+ */
+ 'commands' => [
+ Commands\CommandMakeCommand::class,
+ Commands\ControllerMakeCommand::class,
+ Commands\DisableCommand::class,
+ Commands\DumpCommand::class,
+ Commands\EnableCommand::class,
+ Commands\EventMakeCommand::class,
+ Commands\JobMakeCommand::class,
+ Commands\ListenerMakeCommand::class,
+ Commands\MailMakeCommand::class,
+ Commands\MiddlewareMakeCommand::class,
+ Commands\NotificationMakeCommand::class,
+ Commands\ProviderMakeCommand::class,
+ Commands\RouteProviderMakeCommand::class,
+ Commands\InstallCommand::class,
+ Commands\ListCommand::class,
+ Commands\ModuleDeleteCommand::class,
+ Commands\ModuleMakeCommand::class,
+ Commands\FactoryMakeCommand::class,
+ Commands\PolicyMakeCommand::class,
+ Commands\RequestMakeCommand::class,
+ Commands\RuleMakeCommand::class,
+ Commands\MigrateCommand::class,
+ Commands\MigrateRefreshCommand::class,
+ Commands\MigrateResetCommand::class,
+ Commands\MigrateRollbackCommand::class,
+ Commands\MigrateStatusCommand::class,
+ Commands\MigrationMakeCommand::class,
+ Commands\ModelMakeCommand::class,
+ Commands\PublishCommand::class,
+ Commands\PublishConfigurationCommand::class,
+ Commands\PublishMigrationCommand::class,
+ Commands\PublishTranslationCommand::class,
+ Commands\SeedCommand::class,
+ Commands\SeedMakeCommand::class,
+ Commands\SetupCommand::class,
+ Commands\UnUseCommand::class,
+ Commands\UpdateCommand::class,
+ Commands\UseCommand::class,
+ Commands\ResourceMakeCommand::class,
+ Commands\TestMakeCommand::class,
+ Commands\LaravelModulesV6Migrator::class,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Scan Path
+ |--------------------------------------------------------------------------
+ |
+ | Here you define which folder will be scanned. By default will scan vendor
+ | directory. This is useful if you host the package in packagist website.
+ |
+ */
+
+ 'scan' => [
+ 'enabled' => false,
+ 'paths' => [
+ base_path('vendor/*/*'),
+ ],
+ ],
+ /*
+ |--------------------------------------------------------------------------
+ | Composer File Template
+ |--------------------------------------------------------------------------
+ |
+ | Here is the config for composer.json file, generated by this package
+ |
+ */
+
+ 'composer' => [
+ 'vendor' => 'jasonc',
+ 'author' => [
+ 'name' => 'Jason.Chen',
+ 'email' => 'chenjxlg@163.com',
+ ],
+ ],
+
+ 'composer-output' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Caching
+ |--------------------------------------------------------------------------
+ |
+ | Here is the config for setting up caching feature.
+ |
+ */
+ 'cache' => [
+ 'enabled' => false,
+ 'key' => 'laravel-modules',
+ 'lifetime' => 60,
+ ],
+ /*
+ |--------------------------------------------------------------------------
+ | Choose what laravel-modules will register as custom namespaces.
+ | Setting one to false will require you to register that part
+ | in your own Service Provider class.
+ |--------------------------------------------------------------------------
+ */
+ 'register' => [
+ 'translations' => true,
+ /**
+ * load files on boot or register method
+ * Note: boot not compatible with asgardcms
+ * @example boot|register
+ */
+ 'files' => 'register',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Activators
+ |--------------------------------------------------------------------------
+ |
+ | You can define new types of activators here, file, database etc. The only
+ | required parameter is 'class'.
+ | The file activator will store the activation status in storage/installed_modules
+ */
+ 'activators' => [
+ 'file' => [
+ 'class' => FileActivator::class,
+ 'statuses-file' => base_path('modules.json'),
+ 'cache-key' => 'activator.installed',
+ 'cache-lifetime' => 604800,
+ ],
+ ],
+
+ 'activator' => 'file',
+];
diff --git a/config/queue.php b/config/queue.php
new file mode 100644
index 0000000..84f7438
--- /dev/null
+++ b/config/queue.php
@@ -0,0 +1,93 @@
+ env('QUEUE_CONNECTION', 'sync'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Queue Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the connection information for each server that
+ | is used by your application. A default configuration has been added
+ | for each back-end shipped with Laravel. You are free to add more.
+ |
+ | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
+ |
+ */
+
+ 'connections' => [
+
+ 'sync' => [
+ 'driver' => 'sync',
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'table' => 'jobs',
+ 'queue' => 'default',
+ 'retry_after' => 90,
+ 'after_commit' => false,
+ ],
+
+ 'beanstalkd' => [
+ 'driver' => 'beanstalkd',
+ 'host' => 'localhost',
+ 'queue' => 'default',
+ 'retry_after' => 90,
+ 'block_for' => 0,
+ 'after_commit' => false,
+ ],
+
+ 'sqs' => [
+ 'driver' => 'sqs',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
+ 'queue' => env('SQS_QUEUE', 'default'),
+ 'suffix' => env('SQS_SUFFIX'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'after_commit' => false,
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ 'queue' => env('REDIS_QUEUE', 'default'),
+ 'retry_after' => 90,
+ 'block_for' => null,
+ 'after_commit' => false,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Failed Queue Jobs
+ |--------------------------------------------------------------------------
+ |
+ | These options configure the behavior of failed queue job logging so you
+ | can control which database and table are used to store the jobs that
+ | have failed. You may change them to any database / table you wish.
+ |
+ */
+
+ 'failed' => [
+ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
+ 'database' => env('DB_CONNECTION', 'mysql'),
+ 'table' => 'failed_jobs',
+ ],
+
+];
diff --git a/config/services.php b/config/services.php
new file mode 100644
index 0000000..3215b42
--- /dev/null
+++ b/config/services.php
@@ -0,0 +1,33 @@
+ [
+ 'domain' => env('MAILGUN_DOMAIN'),
+ 'secret' => env('MAILGUN_SECRET'),
+ 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
+ ],
+
+ 'postmark' => [
+ 'token' => env('POSTMARK_TOKEN'),
+ ],
+
+ 'ses' => [
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ ],
+
+];
diff --git a/config/session.php b/config/session.php
new file mode 100644
index 0000000..c0e798b
--- /dev/null
+++ b/config/session.php
@@ -0,0 +1,201 @@
+ env('SESSION_DRIVER', 'file'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Lifetime
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the number of minutes that you wish the session
+ | to be allowed to remain idle before it expires. If you want them
+ | to immediately expire on the browser closing, set that option.
+ |
+ */
+
+ 'lifetime' => env('SESSION_LIFETIME', 120),
+
+ 'expire_on_close' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Encryption
+ |--------------------------------------------------------------------------
+ |
+ | This option allows you to easily specify that all of your session data
+ | should be encrypted before it is stored. All encryption will be run
+ | automatically by Laravel and you can use the Session like normal.
+ |
+ */
+
+ 'encrypt' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session File Location
+ |--------------------------------------------------------------------------
+ |
+ | When using the native session driver, we need a location where session
+ | files may be stored. A default has been set for you but a different
+ | location may be specified. This is only needed for file sessions.
+ |
+ */
+
+ 'files' => storage_path('framework/sessions'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Connection
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" or "redis" session drivers, you may specify a
+ | connection that should be used to manage these sessions. This should
+ | correspond to a connection in your database configuration options.
+ |
+ */
+
+ 'connection' => env('SESSION_CONNECTION', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Table
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" session driver, you may specify the table we
+ | should use to manage the sessions. Of course, a sensible default is
+ | provided for you; however, you are free to change this as needed.
+ |
+ */
+
+ 'table' => 'sessions',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cache Store
+ |--------------------------------------------------------------------------
+ |
+ | While using one of the framework's cache driven session backends you may
+ | list a cache store that should be used for these sessions. This value
+ | must match with one of the application's configured cache "stores".
+ |
+ | Affects: "apc", "dynamodb", "memcached", "redis"
+ |
+ */
+
+ 'store' => env('SESSION_STORE', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Sweeping Lottery
+ |--------------------------------------------------------------------------
+ |
+ | Some session drivers must manually sweep their storage location to get
+ | rid of old sessions from storage. Here are the chances that it will
+ | happen on a given request. By default, the odds are 2 out of 100.
+ |
+ */
+
+ 'lottery' => [2, 100],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Name
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the name of the cookie used to identify a session
+ | instance by ID. The name specified here will get used every time a
+ | new session cookie is created by the framework for every driver.
+ |
+ */
+
+ 'cookie' => env(
+ 'SESSION_COOKIE',
+ Str::slug(env('APP_NAME', 'laravel'), '_') . '_session'
+ ),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Path
+ |--------------------------------------------------------------------------
+ |
+ | The session cookie path determines the path for which the cookie will
+ | be regarded as available. Typically, this will be the root path of
+ | your application but you are free to change this when necessary.
+ |
+ */
+
+ 'path' => '/',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Domain
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the domain of the cookie used to identify a session
+ | in your application. This will determine which domains the cookie is
+ | available to in your application. A sensible default has been set.
+ |
+ */
+
+ 'domain' => env('SESSION_DOMAIN', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTPS Only Cookies
+ |--------------------------------------------------------------------------
+ |
+ | By setting this option to true, session cookies will only be sent back
+ | to the server if the browser has a HTTPS connection. This will keep
+ | the cookie from being sent to you if it can not be done securely.
+ |
+ */
+
+ 'secure' => env('SESSION_SECURE_COOKIE'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTP Access Only
+ |--------------------------------------------------------------------------
+ |
+ | Setting this value to true will prevent JavaScript from accessing the
+ | value of the cookie and the cookie will only be accessible through
+ | the HTTP protocol. You are free to modify this option if needed.
+ |
+ */
+
+ 'http_only' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Same-Site Cookies
+ |--------------------------------------------------------------------------
+ |
+ | This option determines how your cookies behave when cross-site requests
+ | take place, and can be used to mitigate CSRF attacks. By default, we
+ | will set this value to "lax" since this is a secure default value.
+ |
+ | Supported: "lax", "strict", "none", null
+ |
+ */
+
+ 'same_site' => 'lax',
+
+];
diff --git a/config/subscribe.php b/config/subscribe.php
new file mode 100644
index 0000000..72e173c
--- /dev/null
+++ b/config/subscribe.php
@@ -0,0 +1,23 @@
+ false,
+
+ /*
+ * User tables foreign key name.
+ */
+ 'user_foreign_key' => 'user_id',
+
+ /*
+ * Table name for subscriptions records.
+ */
+ 'subscriptions_table' => 'subscriptions',
+
+ /*
+ * Model name for Subscribe record.
+ */
+ 'subscription_model' => \Overtrue\LaravelSubscribe\Subscription::class,
+];
diff --git a/config/tencent_map.php b/config/tencent_map.php
new file mode 100644
index 0000000..50366e4
--- /dev/null
+++ b/config/tencent_map.php
@@ -0,0 +1,6 @@
+ '地图服务',
+ 'key' => env('TENCENT_KEY', ''),
+];
diff --git a/config/ueditor.php b/config/ueditor.php
new file mode 100644
index 0000000..acbc0d4
--- /dev/null
+++ b/config/ueditor.php
@@ -0,0 +1,118 @@
+
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+return [
+ 'hash_filename' => true,
+ // 存储引擎: config/filesystem.php 中 disks, public 或 qiniu
+ 'disk' => env('FILESYSTEM_DRIVER', 'local'),
+ 'route' => [
+ 'name' => '/ueditor/server',
+ 'options' => [
+ // middleware => 'auth',
+ ],
+ ],
+
+ // 上传 配置
+ 'upload' => [
+ /* 前后端通信相关的配置,注释只允许使用多行方式 */
+ /* 上传图片配置项 */
+ 'imageActionName' => 'upload-image', /* 执行上传图片的action名称 */
+ 'imageFieldName' => 'upfile', /* 提交的图片表单名称 */
+ 'imageMaxSize' => 2 * 1024 * 1024, /* 上传大小限制,单位B */
+ 'imageAllowFiles' => ['.png', '.jpg', '.jpeg', '.gif', '.bmp'], /* 上传图片格式显示 */
+ 'imageCompressEnable' => true, /* 是否压缩图片,默认是true */
+ 'imageCompressBorder' => 1600, /* 图片压缩最长边限制 */
+ 'imageInsertAlign' => 'none', /* 插入的图片浮动方式 */
+ 'imageUrlPrefix' => '', /* 图片访问路径前缀 */
+ 'imagePathFormat' => '/uploads/images/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
+ /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
+ /* {time} 会替换成时间戳 */
+ /* {yyyy} 会替换成四位年份 */
+ /* {yy} 会替换成两位年份 */
+ /* {mm} 会替换成两位月份 */
+ /* {dd} 会替换成两位日期 */
+ /* {hh} 会替换成两位小时 */
+ /* {ii} 会替换成两位分钟 */
+ /* {ss} 会替换成两位秒 */
+ /* 非法字符 \ => * ? " < > | */
+ /* 具请体看线上文档 => fex.baidu.com/assets/#use-format_upload_filename */
+
+ /* 涂鸦图片上传配置项 */
+ 'scrawlActionName' => 'upload-scrawl', /* 执行上传涂鸦的action名称 */
+ 'scrawlFieldName' => 'upfile', /* 提交的图片表单名称 */
+ 'scrawlPathFormat' => '/uploads/images/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ 'scrawlMaxSize' => 2048000, /* 上传大小限制,单位B */
+ 'scrawlUrlPrefix' => '', /* 图片访问路径前缀 */
+ 'scrawlInsertAlign' => 'none',
+
+ /* 截图工具上传 */
+ 'snapscreenActionName' => 'upload-image', /* 执行上传截图的action名称 */
+ 'snapscreenPathFormat' => '/uploads/images/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ 'snapscreenUrlPrefix' => '', /* 图片访问路径前缀 */
+ 'snapscreenInsertAlign' => 'none', /* 插入的图片浮动方式 */
+
+ /* 抓取远程图片配置 */
+ 'catcherLocalDomain' => ['127.0.0.1', 'localhost', 'img.baidu.com'],
+ 'catcherActionName' => 'catch-image', /* 执行抓取远程图片的action名称 */
+ 'catcherFieldName' => 'source', /* 提交的图片列表表单名称 */
+ 'catcherPathFormat' => '/uploads/images/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ 'catcherUrlPrefix' => '', /* 图片访问路径前缀 */
+ 'catcherMaxSize' => 2048000, /* 上传大小限制,单位B */
+ 'catcherAllowFiles' => ['.png', '.jpg', '.jpeg', '.gif', '.bmp'], /* 抓取图片格式显示 */
+
+ /* 上传视频配置 */
+ 'videoActionName' => 'upload-video', /* 执行上传视频的action名称 */
+ 'videoFieldName' => 'upfile', /* 提交的视频表单名称 */
+ 'videoPathFormat' => '/uploads/videos/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ 'videoUrlPrefix' => '', /* 视频访问路径前缀 */
+ 'videoMaxSize' => 102400000, /* 上传大小限制,单位B,默认100MB */
+ 'videoAllowFiles' => [
+ '.flv', '.swf', '.mkv', '.avi', '.rm', '.rmvb', '.mpeg', '.mpg',
+ '.ogg', '.ogv', '.mov', '.wmv', '.mp4', '.webm', '.mp3', '.wav', '.mid',
+ ], /* 上传视频格式显示 */
+
+ /* 上传文件配置 */
+ 'fileActionName' => 'upload-file', /* controller里,执行上传视频的action名称 */
+ 'fileFieldName' => 'upfile', /* 提交的文件表单名称 */
+ 'filePathFormat' => '/uploads/files/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ 'fileUrlPrefix' => '', /* 文件访问路径前缀 */
+ 'fileMaxSize' => 51200000, /* 上传大小限制,单位B,默认50MB */
+ 'fileAllowFiles' => [
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp',
+ '.flv', '.swf', '.mkv', '.avi', '.rm', '.rmvb', '.mpeg', '.mpg',
+ '.ogg', '.ogv', '.mov', '.wmv', '.mp4', '.webm', '.mp3', '.wav', '.mid',
+ '.rar', '.zip', '.tar', '.gz', '.7z', '.bz2', '.cab', '.iso',
+ '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.txt', '.md', '.xml',
+ ], /* 上传文件格式显示 */
+
+ /* 列出指定目录下的图片 */
+ 'imageManagerActionName' => 'list-image', /* 执行图片管理的action名称 */
+ 'imageManagerListPath' => '/uploads/images/', /* 指定要列出图片的目录 */
+ 'imageManagerListSize' => 20, /* 每次列出文件数量 */
+ 'imageManagerUrlPrefix' => '', /* 图片访问路径前缀 */
+ 'imageManagerInsertAlign' => 'none', /* 插入的图片浮动方式 */
+ 'imageManagerAllowFiles' => ['.png', '.jpg', '.jpeg', '.gif', '.bmp'], /* 列出的文件类型 */
+
+ /* 列出指定目录下的文件 */
+ 'fileManagerActionName' => 'list-file', /* 执行文件管理的action名称 */
+ 'fileManagerListPath' => '/uploads/files/', /* 指定要列出文件的目录 */
+ 'fileManagerUrlPrefix' => '', /* 文件访问路径前缀 */
+ 'fileManagerListSize' => 20, /* 每次列出文件数量 */
+ 'fileManagerAllowFiles' => [
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp',
+ '.flv', '.swf', '.mkv', '.avi', '.rm', '.rmvb', '.mpeg', '.mpg',
+ '.ogg', '.ogv', '.mov', '.wmv', '.mp4', '.webm', '.mp3', '.wav', '.mid',
+ '.rar', '.zip', '.tar', '.gz', '.7z', '.bz2', '.cab', '.iso',
+ '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.txt', '.md', '.xml',
+ ], /* 列出的文件类型 */
+ ],
+];
diff --git a/config/versionable.php b/config/versionable.php
new file mode 100644
index 0000000..9d1c477
--- /dev/null
+++ b/config/versionable.php
@@ -0,0 +1,30 @@
+ true,
+
+ /*
+ * Keep versions, you can redefine in target model.
+ * Default: 0 - Keep all versions.
+ */
+ 'keep_versions' => 0,
+
+ /*
+ * User foreign key name of versions table.
+ */
+ 'user_foreign_key' => 'user_id',
+
+ /*
+ * The model class for store versions.
+ */
+ 'version_model' => \Overtrue\LaravelVersionable\Version::class,
+
+ /**
+ * The model class for user.
+ */
+ 'user_model' => Modules\User\Models\User::class,
+];
diff --git a/config/view.php b/config/view.php
new file mode 100644
index 0000000..22b8a18
--- /dev/null
+++ b/config/view.php
@@ -0,0 +1,36 @@
+ [
+ resource_path('views'),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Compiled View Path
+ |--------------------------------------------------------------------------
+ |
+ | This option determines where all the compiled Blade templates will be
+ | stored for your application. Typically, this is within the storage
+ | directory. However, as usual, you are free to change this value.
+ |
+ */
+
+ 'compiled' => env(
+ 'VIEW_COMPILED_PATH',
+ realpath(storage_path('framework/views'))
+ ),
+
+];
diff --git a/config/wechat.php b/config/wechat.php
new file mode 100644
index 0000000..d2a59dd
--- /dev/null
+++ b/config/wechat.php
@@ -0,0 +1,146 @@
+
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+return [
+ /*
+ * 默认配置,将会合并到各模块中
+ */
+ 'defaults' => [
+ /*
+ * 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+ */
+ 'response_type' => 'collection',
+
+ /*
+ * 使用 Laravel 的缓存系统
+ */
+ 'use_laravel_cache' => true,
+
+ /**
+ * 日志配置
+ *
+ * level: 日志级别, 可选为:
+ * debug/info/notice/warning/error/critical/alert/emergency
+ * path:日志文件位置(绝对路径!!!),要求可写权限
+ */
+ 'log' => [
+ 'default' => env('APP_DEBUG', false) ? 'dev' : 'prod', // 默认使用的 channel,生产环境可以改为下面的 prod
+ 'channels' => [
+ // 测试环境
+ 'dev' => [
+ 'driver' => 'single',
+ 'path' => env('WECHAT_LOG_FILE', storage_path('logs/wechat/wechat-'.date('Y-m-d').'.log')),
+ 'level' => 'debug',
+ ],
+ // 生产环境
+ 'prod' => [
+ 'driver' => 'daily',
+ 'path' => env('WECHAT_LOG_FILE', storage_path('logs/wechat/wechat-'.date('Y-m-d').'.log')),
+ 'level' => 'info',
+ ],
+ ],
+ ],
+ ],
+
+ /*
+ * 路由配置
+ */
+ 'route' => [
+ /*
+ * 开放平台第三方平台路由配置
+ */
+ // 'open_platform' => [
+ // 'uri' => 'serve',
+ // 'action' => Overtrue\LaravelWeChat\Controllers\OpenPlatformController::class,
+ // 'attributes' => [
+ // 'prefix' => 'open-platform',
+ // 'middleware' => null,
+ // ],
+ // ],
+ ],
+
+ /*
+ * 公众号
+ */
+ 'official_account' => [
+ 'default' => [
+ 'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'), // AppID
+ 'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'), // AppSecret
+ 'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'), // Token
+ 'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''), // EncodingAESKey
+
+ /*
+ * OAuth 配置
+ *
+ * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
+ * callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)
+ * enforce_https:是否强制使用 HTTPS 跳转
+ */
+ // 'oauth' => [
+ // 'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),
+ // 'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
+ // 'enforce_https' => true,
+ // ],
+ ],
+ ],
+
+ /*
+ * 开放平台第三方平台
+ */
+ // 'open_platform' => [
+ // 'default' => [
+ // 'app_id' => env('WECHAT_OPEN_PLATFORM_APPID', ''),
+ // 'secret' => env('WECHAT_OPEN_PLATFORM_SECRET', ''),
+ // 'token' => env('WECHAT_OPEN_PLATFORM_TOKEN', ''),
+ // 'aes_key' => env('WECHAT_OPEN_PLATFORM_AES_KEY', ''),
+ // ],
+ // ],
+
+ /*
+ * 小程序
+ */
+ 'mini_program' => [
+ 'default' => [
+ 'app_id' => env('WECHAT_MINI_PROGRAM_APPID', ''),
+ 'secret' => env('WECHAT_MINI_PROGRAM_SECRET', ''),
+ 'token' => env('WECHAT_MINI_PROGRAM_TOKEN', ''),
+ 'aes_key' => env('WECHAT_MINI_PROGRAM_AES_KEY', ''),
+ ],
+ ],
+
+ /*
+ * 微信支付
+ */
+ // 'payment' => [
+ // 'default' => [
+ // 'sandbox' => env('WECHAT_PAYMENT_SANDBOX', false),
+ // 'app_id' => env('WECHAT_PAYMENT_APPID', ''),
+ // 'mch_id' => env('WECHAT_PAYMENT_MCH_ID', 'your-mch-id'),
+ // 'key' => env('WECHAT_PAYMENT_KEY', 'key-for-signature'),
+ // 'cert_path' => env('WECHAT_PAYMENT_CERT_PATH', 'path/to/cert/apiclient_cert.pem'), // XXX: 绝对路径!!!!
+ // 'key_path' => env('WECHAT_PAYMENT_KEY_PATH', 'path/to/cert/apiclient_key.pem'), // XXX: 绝对路径!!!!
+ // 'notify_url' => 'http://example.com/payments/wechat-notify', // 默认支付结果通知地址
+ // ],
+ // // ...
+ // ],
+
+ /*
+ * 企业微信
+ */
+ // 'work' => [
+ // 'default' => [
+ // 'corp_id' => 'xxxxxxxxxxxxxxxxx',
+ // 'agent_id' => 100020,
+ // 'secret' => env('WECHAT_WORK_AGENT_CONTACTS_SECRET', ''),
+ // //...
+ // ],
+ // ],
+];
diff --git a/config/withdraw.php b/config/withdraw.php
new file mode 100644
index 0000000..7983fb1
--- /dev/null
+++ b/config/withdraw.php
@@ -0,0 +1,13 @@
+ '提现模块',
+ 'is_chain' => false,//提现账户是否是区块链,true 是 false 否
+ 'account' => 'balance',//提现账户
+ 'withdraw_no_counter_length' => 8,
+ 'model' => [
+ 'account_rules' => Modules\User\Models\AccountRule::class,//规则表
+ 'chain_money' => App\Models\DayDataChain::class,//记录金额表
+ ],
+
+];
diff --git a/database/.gitignore b/database/.gitignore
new file mode 100644
index 0000000..97fc976
--- /dev/null
+++ b/database/.gitignore
@@ -0,0 +1,2 @@
+*.sqlite
+*.sqlite-journal
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
new file mode 100644
index 0000000..3510ed6
--- /dev/null
+++ b/database/factories/UserFactory.php
@@ -0,0 +1,47 @@
+ $this->faker->name,
+ 'email' => $this->faker->unique()->safeEmail,
+ 'email_verified_at' => now(),
+ 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
+ 'remember_token' => Str::random(10),
+ ];
+ }
+
+ /**
+ * Indicate that the model's email address should be unverified.
+ *
+ * @return \Illuminate\Database\Eloquent\Factories\Factory
+ */
+ public function unverified()
+ {
+ return $this->state(function (array $attributes) {
+ return [
+ 'email_verified_at' => null,
+ ];
+ });
+ }
+}
diff --git a/database/migrations/2016_01_04_173148_create_admin_tables.php b/database/migrations/2016_01_04_173148_create_admin_tables.php
new file mode 100644
index 0000000..450847e
--- /dev/null
+++ b/database/migrations/2016_01_04_173148_create_admin_tables.php
@@ -0,0 +1,119 @@
+increments('id');
+ $table->string('username', 190)->unique();
+ $table->string('password', 60);
+ $table->string('name');
+ $table->string('avatar')->nullable();
+ $table->string('remember_token', 100)->nullable();
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.roles_table'), function (Blueprint $table) {
+ $table->increments('id');
+ $table->string('name', 50)->unique();
+ $table->string('slug', 50)->unique();
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.permissions_table'), function (Blueprint $table) {
+ $table->increments('id');
+ $table->string('name', 50)->unique();
+ $table->string('slug', 50)->unique();
+ $table->string('http_method')->nullable();
+ $table->text('http_path')->nullable();
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.menu_table'), function (Blueprint $table) {
+ $table->increments('id');
+ $table->integer('parent_id')->default(0);
+ $table->integer('order')->default(0);
+ $table->string('title', 50);
+ $table->string('icon', 50);
+ $table->string('uri')->nullable();
+ $table->string('permission')->nullable();
+
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.role_users_table'), function (Blueprint $table) {
+ $table->integer('role_id');
+ $table->integer('user_id');
+ $table->index(['role_id', 'user_id']);
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.role_permissions_table'), function (Blueprint $table) {
+ $table->integer('role_id');
+ $table->integer('permission_id');
+ $table->index(['role_id', 'permission_id']);
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.user_permissions_table'), function (Blueprint $table) {
+ $table->integer('user_id');
+ $table->integer('permission_id');
+ $table->index(['user_id', 'permission_id']);
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.role_menu_table'), function (Blueprint $table) {
+ $table->integer('role_id');
+ $table->integer('menu_id');
+ $table->index(['role_id', 'menu_id']);
+ $table->timestamps();
+ });
+
+ Schema::create(config('admin.database.operation_log_table'), function (Blueprint $table) {
+ $table->increments('id');
+ $table->integer('user_id');
+ $table->string('path');
+ $table->string('method', 10);
+ $table->string('ip');
+ $table->text('input');
+ $table->index('user_id');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists(config('admin.database.users_table'));
+ Schema::dropIfExists(config('admin.database.roles_table'));
+ Schema::dropIfExists(config('admin.database.permissions_table'));
+ Schema::dropIfExists(config('admin.database.menu_table'));
+ Schema::dropIfExists(config('admin.database.user_permissions_table'));
+ Schema::dropIfExists(config('admin.database.role_users_table'));
+ Schema::dropIfExists(config('admin.database.role_permissions_table'));
+ Schema::dropIfExists(config('admin.database.role_menu_table'));
+ Schema::dropIfExists(config('admin.database.operation_log_table'));
+ }
+}
diff --git a/database/migrations/2018_12_14_000000_create_favorites_table.php b/database/migrations/2018_12_14_000000_create_favorites_table.php
new file mode 100644
index 0000000..fb8cb3b
--- /dev/null
+++ b/database/migrations/2018_12_14_000000_create_favorites_table.php
@@ -0,0 +1,29 @@
+bigIncrements('id');
+ $table->unsignedBigInteger(config('favorite.user_foreign_key'))->index()->comment('user_id');
+ $table->morphs('favoriteable');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down()
+ {
+ Schema::dropIfExists(config('favorite.favorites_table'));
+ }
+}
diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
new file mode 100644
index 0000000..6aa6d74
--- /dev/null
+++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
@@ -0,0 +1,36 @@
+id();
+ $table->string('uuid')->unique();
+ $table->text('connection');
+ $table->text('queue');
+ $table->longText('payload');
+ $table->longText('exception');
+ $table->timestamp('failed_at')->useCurrent();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('failed_jobs');
+ }
+}
diff --git a/database/migrations/2020_04_09_000000_create_subscriptions_table.php b/database/migrations/2020_04_09_000000_create_subscriptions_table.php
new file mode 100644
index 0000000..555888c
--- /dev/null
+++ b/database/migrations/2020_04_09_000000_create_subscriptions_table.php
@@ -0,0 +1,29 @@
+bigIncrements('id');
+ $table->unsignedBigInteger(config('subscribe.user_foreign_key'))->index()->comment('user_id');
+ $table->morphs('subscribable');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down()
+ {
+ Schema::dropIfExists(config('subscribe.subscriptions_table'));
+ }
+}
diff --git a/database/migrations/2021_08_06_104216_create_materials_table.php b/database/migrations/2021_08_06_104216_create_materials_table.php
new file mode 100644
index 0000000..5a9867f
--- /dev/null
+++ b/database/migrations/2021_08_06_104216_create_materials_table.php
@@ -0,0 +1,32 @@
+bigIncrements('id');
+ $table->string('cover');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('materials');
+ }
+
+}
diff --git a/database/migrations/2022_08_30_150338_create_bouns_table.php b/database/migrations/2022_08_30_150338_create_bouns_table.php
new file mode 100644
index 0000000..13105f1
--- /dev/null
+++ b/database/migrations/2022_08_30_150338_create_bouns_table.php
@@ -0,0 +1,36 @@
+id();
+ $table->timestamp('date')->nullable()->comment('分红时间');
+ $table->string('type', 20)->comment('分红类别');
+ $table->unsignedDecimal('total', 12, 2)->default(0)->comment('分红累计金额');
+ $table->boolean('status')->default(0)->comment('分红状态');
+ $table->text('source')->nullable()->comment('数组源信息');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('bouns');
+ }
+}
diff --git a/database/migrations/2022_08_30_150355_create_bouns_orders_table.php b/database/migrations/2022_08_30_150355_create_bouns_orders_table.php
new file mode 100644
index 0000000..53b32a3
--- /dev/null
+++ b/database/migrations/2022_08_30_150355_create_bouns_orders_table.php
@@ -0,0 +1,36 @@
+id();
+ $table->unsignedInteger('bouns_id');
+ $table->morphs('order');
+ $table->string('type', 20)->comment('类别');
+ $table->unsignedDecimal('total', 12, 2)->default(0)->comment('订单金额');
+ $table->unsignedDecimal('amount', 12, 2)->default(0)->comment('产生分红');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('bouns_orders');
+ }
+}
diff --git a/database/migrations/2022_09_26_153401_create_bouns_user_perves_table.php b/database/migrations/2022_09_26_153401_create_bouns_user_perves_table.php
new file mode 100644
index 0000000..a7bbe68
--- /dev/null
+++ b/database/migrations/2022_09_26_153401_create_bouns_user_perves_table.php
@@ -0,0 +1,40 @@
+id();
+ $table->unsignedInteger('user_id')->comment('用户ID');
+ $table->timestamp('date')->nullable()->comment('分红时间');
+ $table->unsignedInteger('star')->nullable()->comment('当时星级');
+ $table->unsignedDecimal('old_perf', 12, 2)->default(0)->comment('累计业绩');
+ $table->unsignedDecimal('new_perf', 12, 2)->default(0)->comment('新增业绩');
+ $table->unsignedDecimal('price', 12, 6)->nullable()->comment('单价');
+ $table->unsignedDecimal('amount', 12, 2)->nullable()->comment('应得');
+ $table->boolean('status')->default(0)->comment('状态');
+
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('bouns_user_perves');
+ }
+}
diff --git a/database/seeders/AdminPanelSeeder.php b/database/seeders/AdminPanelSeeder.php
new file mode 100644
index 0000000..e97cd97
--- /dev/null
+++ b/database/seeders/AdminPanelSeeder.php
@@ -0,0 +1,106 @@
+ 'admin',
+ 'password' => bcrypt('admin'),
+ 'name' => 'Administrator',
+ ]);
+
+ Role::create([
+ 'name' => 'Administrator',
+ 'slug' => 'administrator',
+ ]);
+
+ Permission::create([
+ 'name' => 'All permission',
+ 'slug' => '*',
+ 'http_method' => '',
+ 'http_path' => '*',
+ ]);
+
+ Menu::create([
+ 'id' => 1,
+ 'parent_id' => 0,
+ 'order' => 0,
+ 'title' => 'Dashboard',
+ 'icon' => 'fa-bar-chart',
+ 'uri' => '/',
+ ]);
+
+ $menu = Menu::create([
+ 'id' => 2,
+ 'parent_id' => 0,
+ 'order' => 99,
+ 'title' => 'Admin',
+ 'icon' => 'fa-tasks',
+ ]);
+
+ $menu->children()->createMany([
+ [
+ 'parent_id' => 2,
+ 'order' => 1,
+ 'title' => '模块管理',
+ 'icon' => 'fa-windows',
+ 'uri' => 'modules',
+ ],
+ [
+ 'parent_id' => 2,
+ 'order' => 2,
+ 'title' => 'Users',
+ 'icon' => 'fa-users',
+ 'uri' => 'auth/users',
+ ],
+ [
+ 'parent_id' => 2,
+ 'order' => 3,
+ 'title' => 'Roles',
+ 'icon' => 'fa-user',
+ 'uri' => 'auth/roles',
+ ],
+ [
+ 'parent_id' => 2,
+ 'order' => 4,
+ 'title' => 'Permission',
+ 'icon' => 'fa-ban',
+ 'uri' => 'auth/permissions',
+ ],
+ [
+ 'parent_id' => 2,
+ 'order' => 1,
+ 'title' => 'Menu',
+ 'icon' => 'fa-bars',
+ 'uri' => 'auth/menu',
+ ],
+ [
+ 'parent_id' => 2,
+ 'order' => 1,
+ 'title' => 'Operation log',
+ 'icon' => 'fa-history',
+ 'uri' => 'auth/logs',
+ ],
+ ]);
+
+ DB::insert("INSERT INTO `admin_role_menu` VALUES (1, 2, NULL, NULL);");
+ DB::insert("INSERT INTO `admin_role_permissions` VALUES (1, 1, NULL, NULL);");
+ DB::insert("INSERT INTO `admin_role_users` VALUES (1, 1, NULL, NULL);");
+ }
+
+}
\ No newline at end of file
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
new file mode 100644
index 0000000..57b73b5
--- /dev/null
+++ b/database/seeders/DatabaseSeeder.php
@@ -0,0 +1,18 @@
+create();
+ }
+}
diff --git a/docs/READMD.md b/docs/READMD.md
new file mode 100644
index 0000000..c20ed6f
--- /dev/null
+++ b/docs/READMD.md
@@ -0,0 +1,2 @@
+# Laravel 开发文档
+
\ No newline at end of file
diff --git a/docs/Trait doc.md b/docs/Trait doc.md
new file mode 100644
index 0000000..173c310
--- /dev/null
+++ b/docs/Trait doc.md
@@ -0,0 +1,117 @@
+# Trait
+
+## 1. HasClicks
+
+> 缓存的浏览计数器
+
+```php
+use App\Traits\HasClicks;
+
+class Test extends Model
+{
+ use HasClicks;
+ protected string $clicks_filed = 'clicks';
+}
+
+$test = Test::first();
+
+// 增加点击数量
+$test->incrementClicks(1);
+// 获取点击量
+$test->clicks;
+```
+
+## 2. HasCovers
+
+> 封面图与轮播图的展示扩展,完整url
+
+```php
+use App\Traits\HasCovers;
+
+class Test extends Model {
+ use HasCovers;
+ protected string $cover_field = 'cover';
+ protected string $pictures_field = 'pictures';
+}
+
+$test = Test::first();
+
+$test->cover_url;
+$test->pictures_url;
+```
+
+## 3. HasStatus
+
+> 基础状态的显示与作用域查询
+
+```php
+use App\Traits\HasStatus;
+
+class Test extends Model {
+ use HasStatus;
+ protected string $status_field = 'status';
+ protected array $status_map = [
+ 1 => '正常',
+ 0 => '禁用'
+ ];
+}
+
+// 状态为 1 的
+$test = Test::shown()->first();
+// 状态为 0 的
+$test = Test::hidden()->first();
+// 查询特定状态
+$test = Test::ofStatus(3)->first();
+// 状态的文本显示
+$test->status_text;
+```
+
+## 4. Macroable
+
+> 这个主要用于,对模型的一些外部扩展使用、
+>
+> 因为模型无法动态的注入trait,有些时候在模块外部,需要写入关联模型等时候,可以使用。
+
+```php
+use App\Tratis\Macroable;
+
+class Test extends Model {
+ use Macroable;
+}
+// 对模型注入一个 address 的一对多关联
+Test::macro('address', function () {
+ return $this->hasMany(Address::class);
+});
+```
+
+## 5. OrderByIdDesc
+
+> 直接引入模型后,查询到的数据会默认以ID 倒序排列,
+>
+> 暂时没有找到怎么获取主键的方法,待升级
+
+## 6. OrderByOrderAsc
+
+> 已特定的 order 字段,按照升序排序
+
+## 7. WithPosition
+
+> 位运算来解决的多点定位,模型中需要有 position 字段
+
+```php
+
+use App\Traits\WithPosition;
+
+class Test extends Model
+{
+ use WithPosition;
+ protected array $position_map = [
+ 1 => 'A',
+ 2 => 'B',
+ 4 => 'C',
+ 8 => 'D',
+ ];
+}
+
+$test = Test::ofPosition(3)->first();
+```
\ No newline at end of file
diff --git a/modules.json b/modules.json
new file mode 100644
index 0000000..6fc7ecc
--- /dev/null
+++ b/modules.json
@@ -0,0 +1,13 @@
+{
+ "Storage": true,
+ "User": true,
+ "Mall": true,
+ "Cms": true,
+ "Payment": true,
+ "Gout": true,
+ "Linker": false,
+ "Notification": true,
+ "Coupon": true,
+ "Configuration": true,
+ "Withdraw": true
+}
\ No newline at end of file
diff --git a/modules/.gitignore b/modules/.gitignore
new file mode 100644
index 0000000..ea41b8c
--- /dev/null
+++ b/modules/.gitignore
@@ -0,0 +1,15 @@
+*
+!.gitignore
+!pull-all.sh
+!README.md
+!/Cms/
+!/Gout/
+!/Linker/
+!/Mall/
+!/Notification/
+!/Payment/
+!/Storage/
+!/User/
+!/Coupon/
+!/Configuration/
+!/Settlement/
diff --git a/modules/Cms/.gitignore b/modules/Cms/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Cms/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Cms/README.md b/modules/Cms/README.md
new file mode 100644
index 0000000..1ce5ed5
--- /dev/null
+++ b/modules/Cms/README.md
@@ -0,0 +1,49 @@
+# CMS
+
+## 安装
+
+```shell
+composer require overtrue/laravel-versionable
+```
+
+## 接口文档
+
+### 1. 文章
+
+#### 1. 文章列表
+
+> GET: /api/cms/articles
+
+#### 2. 文章详情
+
+> GET: /api/cms/articles/{article_id}
+
+### 2. 单页
+
+#### 1. 单页列表
+
+> GET: /api/cms/pages
+
+#### 2. 单页详情
+
+> GET: /api/cms/pages/{page_id}
+
+### 3. 分类
+
+#### 1. 分类列表
+
+> GET: /api/cms/categories
+
+#### 2. 分类详情
+
+> GET: /api/cms/categories/{category_id}
+
+### 4. 标签
+
+#### 1. 标签列表
+
+> GET: /api/cms/tags
+
+#### 2. 标签详情
+
+> GET: /api/cms/tags/{tag_id}
diff --git a/modules/Configuration/.gitignore b/modules/Configuration/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Configuration/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Configuration/README.md b/modules/Configuration/README.md
new file mode 100644
index 0000000..4654ce5
--- /dev/null
+++ b/modules/Configuration/README.md
@@ -0,0 +1,6 @@
+# laravel-configuration-module
+
+# 参数配置模块
+
+## 需要config的模块配置
+
diff --git a/modules/Coupon/.gitignore b/modules/Coupon/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Coupon/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Coupon/README.md b/modules/Coupon/README.md
new file mode 100644
index 0000000..65678db
--- /dev/null
+++ b/modules/Coupon/README.md
@@ -0,0 +1,10 @@
+# 优惠券模块
+
+> 1、发布config并配置相关模型
+
+> 2、关联traits
+
+```php
+Shop Model
+use HasStores,HasCoupons;
+```
diff --git a/modules/Linker/.gitignore b/modules/Linker/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Linker/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Linker/README.md b/modules/Linker/README.md
new file mode 100644
index 0000000..9b75460
--- /dev/null
+++ b/modules/Linker/README.md
@@ -0,0 +1,22 @@
+# 链接模块
+
+## 1. 使用
+
+### 1. 模型 Trait
+
+```php
+use Modules\Linker\Traits\HasLinker;
+```
+
+### 2. laravel-admin
+
+自动增加三个字段,
+1. 选择链接地址
+2. 替换链接地址里的参数
+3. 参数替换模式
+
+```php
+use Modules\Linker\Traits\WithLinker;
+
+$this->withUrl($form,'字段名称');
+```
diff --git a/modules/Mall/.gitignore b/modules/Mall/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Mall/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Mall/README.md b/modules/Mall/README.md
new file mode 100644
index 0000000..b1c03f1
--- /dev/null
+++ b/modules/Mall/README.md
@@ -0,0 +1,37 @@
+# UzTech Mall Module 多用户商城模块
+
+## 1. 使用
+
+> php artisan module:publish-config Mall
+
+## 2. traits 说明
+
+### 1. UserHasAddress 用户地址列表
+
+## 3. 功能说明
+
+### 1. 物流管理,主后台添加一个主表,各商户,通过多对多的关系来确定使用哪些物流
+
+### 2.
+
+## 4. 工作流说明
+
+> 参考文档
+>
+> https://github.com/brexis/laravel-workflow
+>
+> https://symfony.com/doc/current/components/workflow.html
+
+```php
+ $order = Order::find(2);
+ // 方法1
+ $app = app('workflow');
+ $workflow = $app->get($order);
+ if ($workflow->can($order, 'pay')) {
+ $workflow->apply($order, 'pay')
+ }
+ // 方法2,引入 WithWorkflow
+ $order->can('pay');
+ // 方法3
+ $workflow = Modules\Mall\Facades\Workflow::get($order)->can('pay');
+```
\ No newline at end of file
diff --git a/modules/Notification/README.md b/modules/Notification/README.md
new file mode 100644
index 0000000..aa32b2c
--- /dev/null
+++ b/modules/Notification/README.md
@@ -0,0 +1,154 @@
+# Notification
+
+通知模块
+
+## 1. 安装
+
+```shell
+composer require getuilaboratory/getui-pushapi-php-client-v2
+```
+
+## 2. 接口文档
+
+### 1. 获取未读消息数量(不登陆返回0)
+
+> GET: /api/notifications/counts
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": 16
+}
+```
+
+### 2. 消息主页
+
+> GET: /api/notifications
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": [
+ {
+ "type": "SystemNotification",
+ "icon": "",
+ "name": "系统通知",
+ "count": 16,
+ "title": "登录成功"
+ },
+ {
+ "type": "OrderNotification",
+ "icon": "",
+ "name": "订单通知",
+ "count": 0,
+ "title": ""
+ },
+ {
+ "type": "ActivityNotification",
+ "icon": "",
+ "name": "活动通知",
+ "count": 0,
+ "title": ""
+ }
+ ]
+}
+```
+
+### 3. 分类消息的列表
+
+> GET: /api/notifications/{type}/list
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": {
+ "data": [
+ {
+ "notification_id": "91e31d1e-95e1-40ff-88d8-8049df974860",
+ "type": "SystemNotification",
+ "title": "登录成功",
+ "content": "您于北京时间:2021-07-02 15:31:03,通过【账号密码】渠道,在IP:1.190.203.218成功登录系统。请注意保管好您的账号密码。",
+ "read_at": "",
+ "created_at": "2021-07-02 15:31:03"
+ }
+ ],
+ "page": {
+ "current": 1,
+ "total_page": 2,
+ "per_page": 15,
+ "has_more": true,
+ "total": 16
+ }
+ }
+}
+```
+
+### 4. 消息详情
+
+> GET: /api/notifications/{notification_id}
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": {
+ "notification_id": "91e31d1e-95e1-40ff-88d8-8049df974860",
+ "type": "SystemNotification",
+ "title": "登录成功",
+ "content": "您于北京时间:2021-07-02 15:31:03,通过【账号密码】渠道,在IP:1.190.203.218成功登录系统。请注意保管好您的账号密码。",
+ "read_at": "2021-07-02 16:27:07",
+ "created_at": "2021-07-02 15:31:03"
+ }
+}
+```
+
+### 5. 全部标记已读
+
+> PUT: /api/notifications
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": ""
+}
+```
+
+### 6. 全部标记已读(分类)
+
+> PUT: /api/notifications/{type}
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": ""
+}
+```
+
+### 7. 清空全部消息
+
+> DELETE: /api/notifications
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": ""
+}
+```
+
+### 8. 清空分类消息
+
+> DELETE: /api/notifications/{type}
+
+```json
+{
+ "status": "SUCCESS",
+ "status_code": 200,
+ "data": ""
+}
+```
\ No newline at end of file
diff --git a/modules/Payment/.gitignore b/modules/Payment/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Payment/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Payment/README.md b/modules/Payment/README.md
new file mode 100644
index 0000000..a56f4fd
--- /dev/null
+++ b/modules/Payment/README.md
@@ -0,0 +1,46 @@
+# 支付模块
+
+## 1. 安装
+
+```shell
+composer require yansongda/pay
+```
+
+## 2. 文档参考
+
+> https://github.com/yansongda/pay
+
+## 3. 生成支付订单
+```php
+use Modules\Payment\Traits\WithPayments;
+
+$order = Order::first();
+
+$payment = $order->createWechatPayment(User::first(), -1, 'mp');
+
+$payment->getPaymentParams();
+```
+
+
+## 4. 支付渠道 GATEWAY 参考值
+// 支付宝
+//web 电脑支付 array $order Response
+//wap 手机网站支付 array $order Response
+//app APP 支付 array $order Response
+//mini 小程序支付 array $order Collection
+//scan 扫码支付 array $order Collection
+// 不支持的
+//pos 刷卡支付 array $order Collection
+//transfer 账户转账 array $order Collection
+
+// 微信支付
+//mp 公众号支付 array $order Collection
+//wap 手机网站支付 array $order Response
+//app APP 支付 array $order JsonResponse
+//miniapp 小程序支付 array $order Collection
+//scan 扫码支付 array $order Collection
+// 不支持的
+//pos 刷卡支付 array $order Collection
+//transfer 账户转账 array $order Collection
+//redpack 普通红包 array $order Collection
+//groupRedpack 裂变红包 array $order Collection
\ No newline at end of file
diff --git a/modules/README.md b/modules/README.md
new file mode 100644
index 0000000..fbfa6e6
--- /dev/null
+++ b/modules/README.md
@@ -0,0 +1,27 @@
+# 模块存放目录
+
+## 1. 模块列表
+
+### 1. User 【用户模块】
+
+> 模块地址:http://git.yuzhankeji.cn/UzTech/laravel-user-module.git
+>
+> 后台菜单排序:10
+
+### 2. Cms 【内容管理】
+
+> 模块地址:https://git.yuzhankeji.cn/UzTech/laravel-cms-module
+>
+> 后台菜单排序:15
+
+### 3. Mall 【商城模块】
+
+> 模块地址:https://git.yuzhankeji.cn/UzTech/laravel-mall-module
+>
+> 后台菜单排序:20
+
+### 4. Payment 【支付中心】
+
+> 模块地址:https://git.yuzhankeji.cn/UzTech/laravel-payment-module
+>
+> 后台菜单排序:25
\ No newline at end of file
diff --git a/modules/Storage/.gitignore b/modules/Storage/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/Storage/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/Storage/README.md b/modules/Storage/README.md
new file mode 100644
index 0000000..0d2f29c
--- /dev/null
+++ b/modules/Storage/README.md
@@ -0,0 +1,70 @@
+# 文件存储模块
+
+## 1. 前端上传接口
+
+## 2. 配置STS直传
+
+### 步骤一:创建RAM用户
+
+- 登录RAM控制台。
+- 在左侧导航栏的人员管理菜单下,单击用户。
+- 单击新建用户。
+- 输入登录名称和显示名称。
+- 在访问方式区域下,选择编程访问,然后单击确定。
+- 单击复制,保存访问密钥(AccessKey ID 和 AccessKey Secret)。
+
+### 步骤二:为RAM用户授予请求AssumeRole的权限
+
+- 单击已创建RAM用户右侧对应的添加权限。
+- 在添加权限页面,选择AliyunSTSAssumeRoleAccess权限。
+- 单击确定。
+
+### 步骤三:创建用于获取临时访问凭证的角色
+
+- 在左侧导航栏,单击RAM角色管理。
+- 单击新建RAM角色,选择可信实体类型为阿里云账号,单击下一步。
+- 在新建RAM角色页面,RAM角色名称填写为RamOssTest,选择云账号为当前云账号。
+- 单击完成。
+- 单击复制,保存角色的ARN。
+
+### 步骤四:为角色授予上传文件的权限
+
+- 在左侧导航栏的权限管理菜单下,单击权限策略管理。
+- 单击创建权限策略。
+- 在新建自定义权限策略页面,填写策略名称,配置模式选择脚本配置,并在策略内容中赋予角色向目标存储空间examplebucket下的目录exampledir上传文件的权限。
+```json
+{
+ "Version": "1",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": [
+ "oss:PutObject"
+ ],
+ "Resource": [
+ "acs:oss:*:*:examplebucket/exampledir",
+ "acs:oss:*:*:examplebucket/exampledir/*"
+ ]
+ }
+ ]
+}
+```
+- 单击确定。
+
+### 步骤五:获取临时访问凭证
+
+- 您可以通过调用STS服务接口AssumeRole 或者使用各语言STS SDK来获取临时访问凭证。
+> 说明 临时访问凭证有效时间单位为秒,最小值为900,最大值以当前角色设定的最大会话时间为准。详情请参见设置角色最大会话时间。
+
+### 步骤六:使用临时访问凭证上传文件至OSS
+
+### 常见问题
+
+- 报错The security token you provided is invalid.如何处理?
+> 请确保完整填写步骤五获取到的SecurityToken。
+
+- 报错The OSS Access Key Id you provided does not exist in our records.如何处理?
+> 临时访问凭证已过期,过期后自动失效。请使用临时访问密钥(AccessKeyId和AccessKeySecret)向App服务器申请新的临时访问凭证。具体操作,请参见步骤五。
+
+- 获取STS时报错NoSuchBucket如何处理?
+> 出现这种报错通常是STS的endpoint填写错误。请根据您的地域,填写正确的STS接入地址。各地域的STS接入地址请参见接入地址。
\ No newline at end of file
diff --git a/modules/User/.gitignore b/modules/User/.gitignore
new file mode 100644
index 0000000..4b6cb11
--- /dev/null
+++ b/modules/User/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+.DS_Store
+composer.lock
\ No newline at end of file
diff --git a/modules/User/README.md b/modules/User/README.md
new file mode 100644
index 0000000..38cf711
--- /dev/null
+++ b/modules/User/README.md
@@ -0,0 +1,12 @@
+# 用户模块
+
+## 1. 安装
+
+```shell
+composer require overtrue/wechat
+composer require overtrue/easy-sms
+composer require overtrue/socialite
+composer require propaganistas/laravel-phone
+composer require vinkla/hashids
+composer require yangjisen/laravel-cache-provider
+```
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..00c6506
--- /dev/null
+++ b/package.json
@@ -0,0 +1,18 @@
+{
+ "private": true,
+ "scripts": {
+ "dev": "npm run development",
+ "development": "mix",
+ "watch": "mix watch",
+ "watch-poll": "mix watch -- --watch-options-poll=1000",
+ "hot": "mix watch --hot",
+ "prod": "npm run production",
+ "production": "mix --production"
+ },
+ "devDependencies": {
+ "axios": "^0.21",
+ "laravel-mix": "^6.0.6",
+ "lodash": "^4.17.19",
+ "postcss": "^8.1.14"
+ }
+}
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 0000000..3aec5e2
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,21 @@
+
+
+ Options -MultiViews -Indexes
+
+
+ RewriteEngine On
+
+ # Handle Authorization Header
+ RewriteCond %{HTTP:Authorization} .
+ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+
+ # Redirect Trailing Slashes If Not A Folder...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_URI} (.+)/$
+ RewriteRule ^ %1 [L,R=301]
+
+ # Send Requests To Front Controller...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^ index.php [L]
+
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..e69de29
diff --git a/public/index.php b/public/index.php
new file mode 100644
index 0000000..a8137b1
--- /dev/null
+++ b/public/index.php
@@ -0,0 +1,55 @@
+make(Kernel::class);
+
+$response = tap($kernel->handle(
+ $request = Request::capture()
+))->send();
+
+$kernel->terminate($request, $response);
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..eb05362
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/public/vendor/js/setStock.js b/public/vendor/js/setStock.js
new file mode 100644
index 0000000..eda5c37
--- /dev/null
+++ b/public/vendor/js/setStock.js
@@ -0,0 +1,21 @@
+$('.join_identity_id').change(function (e) {
+ const val = $(this).val();
+ var commonThis = $(this);
+ if (val !== null) {
+ $.ajax({
+ type: "get",
+ data: {
+ 'q': val,
+ },
+ url: "/admin/platform/identity_stock",
+ async: true,
+ success: (result => {
+ if (result.status_code == 200) {
+ $('.stock').val(result.value);
+ } else {
+ alert('获取库存失败');
+ }
+ })
+ });
+ }
+});
\ No newline at end of file
diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css b/public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css
new file mode 100644
index 0000000..a58698c
--- /dev/null
+++ b/public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')} .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .glyphicon-asterisk:before{content:"\2a"} .glyphicon-plus:before{content:"\2b"} .glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"} .glyphicon-minus:before{content:"\2212"} .glyphicon-cloud:before{content:"\2601"} .glyphicon-envelope:before{content:"\2709"} .glyphicon-pencil:before{content:"\270f"} .glyphicon-glass:before{content:"\e001"} .glyphicon-music:before{content:"\e002"} .glyphicon-search:before{content:"\e003"} .glyphicon-heart:before{content:"\e005"} .glyphicon-star:before{content:"\e006"} .glyphicon-star-empty:before{content:"\e007"} .glyphicon-user:before{content:"\e008"} .glyphicon-film:before{content:"\e009"} .glyphicon-th-large:before{content:"\e010"} .glyphicon-th:before{content:"\e011"} .glyphicon-th-list:before{content:"\e012"} .glyphicon-ok:before{content:"\e013"} .glyphicon-remove:before{content:"\e014"} .glyphicon-zoom-in:before{content:"\e015"} .glyphicon-zoom-out:before{content:"\e016"} .glyphicon-off:before{content:"\e017"} .glyphicon-signal:before{content:"\e018"} .glyphicon-cog:before{content:"\e019"} .glyphicon-trash:before{content:"\e020"} .glyphicon-home:before{content:"\e021"} .glyphicon-file:before{content:"\e022"} .glyphicon-time:before{content:"\e023"} .glyphicon-road:before{content:"\e024"} .glyphicon-download-alt:before{content:"\e025"} .glyphicon-download:before{content:"\e026"} .glyphicon-upload:before{content:"\e027"} .glyphicon-inbox:before{content:"\e028"} .glyphicon-play-circle:before{content:"\e029"} .glyphicon-repeat:before{content:"\e030"} .glyphicon-refresh:before{content:"\e031"} .glyphicon-list-alt:before{content:"\e032"} .glyphicon-lock:before{content:"\e033"} .glyphicon-flag:before{content:"\e034"} .glyphicon-headphones:before{content:"\e035"} .glyphicon-volume-off:before{content:"\e036"} .glyphicon-volume-down:before{content:"\e037"} .glyphicon-volume-up:before{content:"\e038"} .glyphicon-qrcode:before{content:"\e039"} .glyphicon-barcode:before{content:"\e040"} .glyphicon-tag:before{content:"\e041"} .glyphicon-tags:before{content:"\e042"} .glyphicon-book:before{content:"\e043"} .glyphicon-bookmark:before{content:"\e044"} .glyphicon-print:before{content:"\e045"} .glyphicon-camera:before{content:"\e046"} .glyphicon-font:before{content:"\e047"} .glyphicon-bold:before{content:"\e048"} .glyphicon-italic:before{content:"\e049"} .glyphicon-text-height:before{content:"\e050"} .glyphicon-text-width:before{content:"\e051"} .glyphicon-align-left:before{content:"\e052"} .glyphicon-align-center:before{content:"\e053"} .glyphicon-align-right:before{content:"\e054"} .glyphicon-align-justify:before{content:"\e055"} .glyphicon-list:before{content:"\e056"} .glyphicon-indent-left:before{content:"\e057"} .glyphicon-indent-right:before{content:"\e058"} .glyphicon-facetime-video:before{content:"\e059"} .glyphicon-picture:before{content:"\e060"} .glyphicon-map-marker:before{content:"\e062"} .glyphicon-adjust:before{content:"\e063"} .glyphicon-tint:before{content:"\e064"} .glyphicon-edit:before{content:"\e065"} .glyphicon-share:before{content:"\e066"} .glyphicon-check:before{content:"\e067"} .glyphicon-move:before{content:"\e068"} .glyphicon-step-backward:before{content:"\e069"} .glyphicon-fast-backward:before{content:"\e070"} .glyphicon-backward:before{content:"\e071"} .glyphicon-play:before{content:"\e072"} .glyphicon-pause:before{content:"\e073"} .glyphicon-stop:before{content:"\e074"} .glyphicon-forward:before{content:"\e075"} .glyphicon-fast-forward:before{content:"\e076"} .glyphicon-step-forward:before{content:"\e077"} .glyphicon-eject:before{content:"\e078"} .glyphicon-chevron-left:before{content:"\e079"} .glyphicon-chevron-right:before{content:"\e080"} .glyphicon-plus-sign:before{content:"\e081"} .glyphicon-minus-sign:before{content:"\e082"} .glyphicon-remove-sign:before{content:"\e083"} .glyphicon-ok-sign:before{content:"\e084"} .glyphicon-question-sign:before{content:"\e085"} .glyphicon-info-sign:before{content:"\e086"} .glyphicon-screenshot:before{content:"\e087"} .glyphicon-remove-circle:before{content:"\e088"} .glyphicon-ok-circle:before{content:"\e089"} .glyphicon-ban-circle:before{content:"\e090"} .glyphicon-arrow-left:before{content:"\e091"} .glyphicon-arrow-right:before{content:"\e092"} .glyphicon-arrow-up:before{content:"\e093"} .glyphicon-arrow-down:before{content:"\e094"} .glyphicon-share-alt:before{content:"\e095"} .glyphicon-resize-full:before{content:"\e096"} .glyphicon-resize-small:before{content:"\e097"} .glyphicon-exclamation-sign:before{content:"\e101"} .glyphicon-gift:before{content:"\e102"} .glyphicon-leaf:before{content:"\e103"} .glyphicon-fire:before{content:"\e104"} .glyphicon-eye-open:before{content:"\e105"} .glyphicon-eye-close:before{content:"\e106"} .glyphicon-warning-sign:before{content:"\e107"} .glyphicon-plane:before{content:"\e108"} .glyphicon-calendar:before{content:"\e109"} .glyphicon-random:before{content:"\e110"} .glyphicon-comment:before{content:"\e111"} .glyphicon-magnet:before{content:"\e112"} .glyphicon-chevron-up:before{content:"\e113"} .glyphicon-chevron-down:before{content:"\e114"} .glyphicon-retweet:before{content:"\e115"} .glyphicon-shopping-cart:before{content:"\e116"} .glyphicon-folder-close:before{content:"\e117"} .glyphicon-folder-open:before{content:"\e118"} .glyphicon-resize-vertical:before{content:"\e119"} .glyphicon-resize-horizontal:before{content:"\e120"} .glyphicon-hdd:before{content:"\e121"} .glyphicon-bullhorn:before{content:"\e122"} .glyphicon-bell:before{content:"\e123"} .glyphicon-certificate:before{content:"\e124"} .glyphicon-thumbs-up:before{content:"\e125"} .glyphicon-thumbs-down:before{content:"\e126"} .glyphicon-hand-right:before{content:"\e127"} .glyphicon-hand-left:before{content:"\e128"} .glyphicon-hand-up:before{content:"\e129"} .glyphicon-hand-down:before{content:"\e130"} .glyphicon-circle-arrow-right:before{content:"\e131"} .glyphicon-circle-arrow-left:before{content:"\e132"} .glyphicon-circle-arrow-up:before{content:"\e133"} .glyphicon-circle-arrow-down:before{content:"\e134"} .glyphicon-globe:before{content:"\e135"} .glyphicon-wrench:before{content:"\e136"} .glyphicon-tasks:before{content:"\e137"} .glyphicon-filter:before{content:"\e138"} .glyphicon-briefcase:before{content:"\e139"} .glyphicon-fullscreen:before{content:"\e140"} .glyphicon-dashboard:before{content:"\e141"} .glyphicon-paperclip:before{content:"\e142"} .glyphicon-heart-empty:before{content:"\e143"} .glyphicon-link:before{content:"\e144"} .glyphicon-phone:before{content:"\e145"} .glyphicon-pushpin:before{content:"\e146"} .glyphicon-usd:before{content:"\e148"} .glyphicon-gbp:before{content:"\e149"} .glyphicon-sort:before{content:"\e150"} .glyphicon-sort-by-alphabet:before{content:"\e151"} .glyphicon-sort-by-alphabet-alt:before{content:"\e152"} .glyphicon-sort-by-order:before{content:"\e153"} .glyphicon-sort-by-order-alt:before{content:"\e154"} .glyphicon-sort-by-attributes:before{content:"\e155"} .glyphicon-sort-by-attributes-alt:before{content:"\e156"} .glyphicon-unchecked:before{content:"\e157"} .glyphicon-expand:before{content:"\e158"} .glyphicon-collapse-down:before{content:"\e159"} .glyphicon-collapse-up:before{content:"\e160"} .glyphicon-log-in:before{content:"\e161"} .glyphicon-flash:before{content:"\e162"} .glyphicon-log-out:before{content:"\e163"} .glyphicon-new-window:before{content:"\e164"} .glyphicon-record:before{content:"\e165"} .glyphicon-save:before{content:"\e166"} .glyphicon-open:before{content:"\e167"} .glyphicon-saved:before{content:"\e168"} .glyphicon-import:before{content:"\e169"} .glyphicon-export:before{content:"\e170"} .glyphicon-send:before{content:"\e171"} .glyphicon-floppy-disk:before{content:"\e172"} .glyphicon-floppy-saved:before{content:"\e173"} .glyphicon-floppy-remove:before{content:"\e174"} .glyphicon-floppy-save:before{content:"\e175"} .glyphicon-floppy-open:before{content:"\e176"} .glyphicon-credit-card:before{content:"\e177"} .glyphicon-transfer:before{content:"\e178"} .glyphicon-cutlery:before{content:"\e179"} .glyphicon-header:before{content:"\e180"} .glyphicon-compressed:before{content:"\e181"} .glyphicon-earphone:before{content:"\e182"} .glyphicon-phone-alt:before{content:"\e183"} .glyphicon-tower:before{content:"\e184"} .glyphicon-stats:before{content:"\e185"} .glyphicon-sd-video:before{content:"\e186"} .glyphicon-hd-video:before{content:"\e187"} .glyphicon-subtitles:before{content:"\e188"} .glyphicon-sound-stereo:before{content:"\e189"} .glyphicon-sound-dolby:before{content:"\e190"} .glyphicon-sound-5-1:before{content:"\e191"} .glyphicon-sound-6-1:before{content:"\e192"} .glyphicon-sound-7-1:before{content:"\e193"} .glyphicon-copyright-mark:before{content:"\e194"} .glyphicon-registration-mark:before{content:"\e195"} .glyphicon-cloud-download:before{content:"\e197"} .glyphicon-cloud-upload:before{content:"\e198"} .glyphicon-tree-conifer:before{content:"\e199"} .glyphicon-tree-deciduous:before{content:"\e200"} .glyphicon-cd:before{content:"\e201"} .glyphicon-save-file:before{content:"\e202"} .glyphicon-open-file:before{content:"\e203"} .glyphicon-level-up:before{content:"\e204"} .glyphicon-copy:before{content:"\e205"} .glyphicon-paste:before{content:"\e206"} .glyphicon-alert:before{content:"\e209"} .glyphicon-equalizer:before{content:"\e210"} .glyphicon-king:before{content:"\e211"} .glyphicon-queen:before{content:"\e212"} .glyphicon-pawn:before{content:"\e213"} .glyphicon-bishop:before{content:"\e214"} .glyphicon-knight:before{content:"\e215"} .glyphicon-baby-formula:before{content:"\e216"} .glyphicon-tent:before{content:"\26fa"} .glyphicon-blackboard:before{content:"\e218"} .glyphicon-bed:before{content:"\e219"} .glyphicon-apple:before{content:"\f8ff"} .glyphicon-erase:before{content:"\e221"} .glyphicon-hourglass:before{content:"\231b"} .glyphicon-lamp:before{content:"\e223"} .glyphicon-duplicate:before{content:"\e224"} .glyphicon-piggy-bank:before{content:"\e225"} .glyphicon-scissors:before{content:"\e226"} .glyphicon-bitcoin:before{content:"\e227"} .glyphicon-btc:before{content:"\e227"} .glyphicon-xbt:before{content:"\e227"} .glyphicon-yen:before{content:"\00a5"} .glyphicon-jpy:before{content:"\00a5"} .glyphicon-ruble:before{content:"\20bd"} .glyphicon-rub:before{content:"\20bd"} .glyphicon-scale:before{content:"\e230"} .glyphicon-ice-lolly:before{content:"\e231"} .glyphicon-ice-lolly-tasted:before{content:"\e232"} .glyphicon-education:before{content:"\e233"} .glyphicon-option-horizontal:before{content:"\e234"} .glyphicon-option-vertical:before{content:"\e235"} .glyphicon-menu-hamburger:before{content:"\e236"} .glyphicon-modal-window:before{content:"\e237"} .glyphicon-oil:before{content:"\e238"} .glyphicon-grain:before{content:"\e239"} .glyphicon-sunglasses:before{content:"\e240"} .glyphicon-text-size:before{content:"\e241"} .glyphicon-text-color:before{content:"\e242"} .glyphicon-text-background:before{content:"\e243"} .glyphicon-object-align-top:before{content:"\e244"} .glyphicon-object-align-bottom:before{content:"\e245"} .glyphicon-object-align-horizontal:before{content:"\e246"} .glyphicon-object-align-left:before{content:"\e247"} .glyphicon-object-align-vertical:before{content:"\e248"} .glyphicon-object-align-right:before{content:"\e249"} .glyphicon-triangle-right:before{content:"\e250"} .glyphicon-triangle-left:before{content:"\e251"} .glyphicon-triangle-bottom:before{content:"\e252"} .glyphicon-triangle-top:before{content:"\e253"} .glyphicon-console:before{content:"\e254"} .glyphicon-superscript:before{content:"\e255"} .glyphicon-subscript:before{content:"\e256"} .glyphicon-menu-left:before{content:"\e257"} .glyphicon-menu-right:before{content:"\e258"} .glyphicon-menu-down:before{content:"\e259"} .glyphicon-menu-up:before{content:"\e260"} *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} :after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)} body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff} button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit} a{color:#337ab7;text-decoration:none} a:focus,a:hover{color:#23527c;text-decoration:underline} a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} figure{margin:0} img{vertical-align:middle} .carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto} .img-rounded{border-radius:6px} .img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out} .img-circle{border-radius:50%} hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee} .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0} .sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} [role=button]{cursor:pointer} .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit} .h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777} .h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px} .h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%} .h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px} .h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%} .h1,h1{font-size:36px} .h2,h2{font-size:30px} .h3,h3{font-size:24px} .h4,h4{font-size:18px} .h5,h5{font-size:14px} .h6,h6{font-size:12px} p{margin:0 0 10px} .lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}} .small,small{font-size:85%} .mark,mark{padding:.2em;background-color:#fcf8e3} .text-left{text-align:left} .text-right{text-align:right} .text-center{text-align:center} .text-justify{text-align:justify} .text-nowrap{white-space:nowrap} .text-lowercase{text-transform:lowercase} .text-uppercase{text-transform:uppercase} .text-capitalize{text-transform:capitalize} .text-muted{color:#777} .text-primary{color:#337ab7} a.text-primary:focus,a.text-primary:hover{color:#286090} .text-success{color:#3c763d} a.text-success:focus,a.text-success:hover{color:#2b542c} .text-info{color:#31708f} a.text-info:focus,a.text-info:hover{color:#245269} .text-warning{color:#8a6d3b} a.text-warning:focus,a.text-warning:hover{color:#66512c} .text-danger{color:#a94442} a.text-danger:focus,a.text-danger:hover{color:#843534} .bg-primary{color:#fff;background-color:#337ab7} a.bg-primary:focus,a.bg-primary:hover{background-color:#286090} .bg-success{background-color:#dff0d8} a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3} .bg-info{background-color:#d9edf7} a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee} .bg-warning{background-color:#fcf8e3} a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5} .bg-danger{background-color:#f2dede} a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9} .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee} ol,ul{margin-top:0;margin-bottom:10px} ol ol,ol ul,ul ol,ul ul{margin-bottom:0} .list-unstyled{padding-left:0;list-style:none} .list-inline{padding-left:0;margin-left:-5px;list-style:none} .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px} dl{margin-top:0;margin-bottom:20px} dd,dt{line-height:1.42857143} dt{font-weight:700} dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}} abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777} .initialism{font-size:90%;text-transform:uppercase} blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee} blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0} blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777} blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'} .blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0} .blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''} .blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'} address{margin-bottom:20px;font-style:normal;line-height:1.42857143} code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace} code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px} kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)} kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none} pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px} pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0} .pre-scrollable{max-height:340px;overflow-y:scroll} .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}} .container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto} .row{margin-right:-15px;margin-left:-15px} .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px} .col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left} .col-xs-12{width:100%} .col-xs-11{width:91.66666667%} .col-xs-10{width:83.33333333%} .col-xs-9{width:75%} .col-xs-8{width:66.66666667%} .col-xs-7{width:58.33333333%} .col-xs-6{width:50%} .col-xs-5{width:41.66666667%} .col-xs-4{width:33.33333333%} .col-xs-3{width:25%} .col-xs-2{width:16.66666667%} .col-xs-1{width:8.33333333%} .col-xs-pull-12{right:100%} .col-xs-pull-11{right:91.66666667%} .col-xs-pull-10{right:83.33333333%} .col-xs-pull-9{right:75%} .col-xs-pull-8{right:66.66666667%} .col-xs-pull-7{right:58.33333333%} .col-xs-pull-6{right:50%} .col-xs-pull-5{right:41.66666667%} .col-xs-pull-4{right:33.33333333%} .col-xs-pull-3{right:25%} .col-xs-pull-2{right:16.66666667%} .col-xs-pull-1{right:8.33333333%} .col-xs-pull-0{right:auto} .col-xs-push-12{left:100%} .col-xs-push-11{left:91.66666667%} .col-xs-push-10{left:83.33333333%} .col-xs-push-9{left:75%} .col-xs-push-8{left:66.66666667%} .col-xs-push-7{left:58.33333333%} .col-xs-push-6{left:50%} .col-xs-push-5{left:41.66666667%} .col-xs-push-4{left:33.33333333%} .col-xs-push-3{left:25%} .col-xs-push-2{left:16.66666667%} .col-xs-push-1{left:8.33333333%} .col-xs-push-0{left:auto} .col-xs-offset-12{margin-left:100%} .col-xs-offset-11{margin-left:91.66666667%} .col-xs-offset-10{margin-left:83.33333333%} .col-xs-offset-9{margin-left:75%} .col-xs-offset-8{margin-left:66.66666667%} .col-xs-offset-7{margin-left:58.33333333%} .col-xs-offset-6{margin-left:50%} .col-xs-offset-5{margin-left:41.66666667%} .col-xs-offset-4{margin-left:33.33333333%} .col-xs-offset-3{margin-left:25%} .col-xs-offset-2{margin-left:16.66666667%} .col-xs-offset-1{margin-left:8.33333333%} .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}} table{background-color:transparent} caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left} th{text-align:left} .table{width:100%;max-width:100%;margin-bottom:20px} .table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd} .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd} .table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0} .table>tbody+tbody{border-top:2px solid #ddd} .table .table{background-color:#fff} .table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px} .table-bordered{border:1px solid #ddd} .table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd} .table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px} .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9} .table-hover>tbody>tr:hover{background-color:#f5f5f5} table col[class*=col-]{position:static;display:table-column;float:none} table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none} .table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5} .table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8} .table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8} .table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6} .table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7} .table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3} .table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3} .table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc} .table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede} .table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc} .table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}} fieldset{min-width:0;padding:0;margin:0;border:0} legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5} label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700} input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal} input[type=file]{display:block} input[type=range]{display:block;width:100%} select[multiple],select[size]{height:auto} input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555} .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s} .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)} .form-control::-moz-placeholder{color:#999;opacity:1} .form-control:-ms-input-placeholder{color:#999} .form-control::-webkit-input-placeholder{color:#999} .form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1} .form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed} textarea.form-control{height:auto} input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}} .form-group{margin-bottom:15px} .checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px} .checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer} .checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px} .checkbox+.checkbox,.radio+.radio{margin-top:-5px} .checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer} .checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px} fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed} .checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed} .checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed} .form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0} .form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0} .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} select.input-sm{height:30px;line-height:30px} select[multiple].input-sm,textarea.input-sm{height:auto} .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} .form-group-sm select.form-control{height:30px;line-height:30px} .form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto} .form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5} .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} select.input-lg{height:46px;line-height:46px} select[multiple].input-lg,textarea.input-lg{height:auto} .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} .form-group-lg select.form-control{height:46px;line-height:46px} .form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto} .form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333} .has-feedback{position:relative} .has-feedback .form-control{padding-right:42.5px} .form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none} .form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px} .form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px} .has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d} .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168} .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d} .has-success .form-control-feedback{color:#3c763d} .has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b} .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b} .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b} .has-warning .form-control-feedback{color:#8a6d3b} .has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442} .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483} .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442} .has-error .form-control-feedback{color:#a94442} .has-feedback label~.form-control-feedback{top:25px} .has-feedback label.sr-only~.form-control-feedback{top:0} .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}} .form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0} .form-horizontal .checkbox,.form-horizontal .radio{min-height:27px} .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}} .form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}} .btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px} .btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} .btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none} .btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)} .btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65} a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none} .btn-default{color:#333;background-color:#fff;border-color:#ccc} .btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c} .btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad} .btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad} .btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c} .btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none} .btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc} .btn-default .badge{color:#fff;background-color:#333} .btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4} .btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40} .btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74} .btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74} .btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40} .btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none} .btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4} .btn-primary .badge{color:#337ab7;background-color:#fff} .btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c} .btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625} .btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439} .btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439} .btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625} .btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none} .btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c} .btn-success .badge{color:#5cb85c;background-color:#fff} .btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da} .btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85} .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc} .btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc} .btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85} .btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none} .btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da} .btn-info .badge{color:#5bc0de;background-color:#fff} .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236} .btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d} .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512} .btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512} .btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d} .btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none} .btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236} .btn-warning .badge{color:#f0ad4e;background-color:#fff} .btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a} .btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19} .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925} .btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925} .btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19} .btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none} .btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a} .btn-danger .badge{color:#d9534f;background-color:#fff} .btn-link{font-weight:400;color:#337ab7;border-radius:0} .btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none} .btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent} .btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent} .btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none} .btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} .btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} .btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px} .btn-block{display:block;width:100%} .btn-block+.btn-block{margin-top:5px} input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear} .fade.in{opacity:1} .collapse{display:none} .collapse.in{display:block} tr.collapse.in{display:table-row} tbody.collapse.in{display:table-row-group} .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility} .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent} .dropdown,.dropup{position:relative} .dropdown-toggle:focus{outline:0} .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)} .dropdown-menu.pull-right{right:0;left:auto} .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5} .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap} .dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5} .dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0} .dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777} .dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} .open>.dropdown-menu{display:block} .open>a{outline:0} .dropdown-menu-right{right:0;left:auto} .dropdown-menu-left{right:auto;left:0} .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap} .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990} .pull-right>.dropdown-menu{right:0;left:auto} .dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9} .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}} .btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle} .btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left} .btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2} .btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px} .btn-toolbar{margin-left:-5px} .btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left} .btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px} .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0} .btn-group>.btn:first-child{margin-left:0} .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} .btn-group>.btn-group{float:left} .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0} .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0} .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0} .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px} .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px} .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)} .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none} .btn .caret{margin-left:0} .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0} .dropup .btn-lg .caret{border-width:0 5px 5px} .btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%} .btn-group-vertical>.btn-group>.btn{float:none} .btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0} .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0} .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px} .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0} .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0} .btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate} .btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%} .btn-group-justified>.btn-group .btn{width:100%} .btn-group-justified>.btn-group .dropdown-menu{left:auto} [data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none} .input-group{position:relative;display:table;border-collapse:separate} .input-group[class*=col-]{float:none;padding-right:0;padding-left:0} .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0} .input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px} select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto} .input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px} select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto} .input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell} .input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0} .input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle} .input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px} .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px} .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px} .input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0} .input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} .input-group-addon:first-child{border-right:0} .input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0} .input-group-addon:last-child{border-left:0} .input-group-btn{position:relative;font-size:0;white-space:nowrap} .input-group-btn>.btn{position:relative} .input-group-btn>.btn+.btn{margin-left:-1px} .input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2} .input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px} .input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px} .nav{padding-left:0;margin-bottom:0;list-style:none} .nav>li{position:relative;display:block} .nav>li>a{position:relative;display:block;padding:10px 15px} .nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee} .nav>li.disabled>a{color:#777} .nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent} .nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7} .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5} .nav>li>a>img{max-width:none} .nav-tabs{border-bottom:1px solid #ddd} .nav-tabs>li{float:left;margin-bottom:-1px} .nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0} .nav-tabs>li>a:hover{border-color:#eee #eee #ddd} .nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent} .nav-tabs.nav-justified{width:100%;border-bottom:0} .nav-tabs.nav-justified>li{float:none} .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center} .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}} .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px} .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}} .nav-pills>li{float:left} .nav-pills>li>a{border-radius:4px} .nav-pills>li+li{margin-left:2px} .nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7} .nav-stacked>li{float:none} .nav-stacked>li+li{margin-top:2px;margin-left:0} .nav-justified{width:100%} .nav-justified>li{float:none} .nav-justified>li>a{margin-bottom:5px;text-align:center} .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}} .nav-tabs-justified{border-bottom:0} .nav-tabs-justified>li>a{margin-right:0;border-radius:4px} .nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}} .tab-content>.tab-pane{display:none} .tab-content>.active{display:block} .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}} .navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)} .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}} .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}} .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}} .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}} .navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}} .navbar-fixed-top{top:0;border-width:0 0 1px} .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0} .navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px} .navbar-brand:focus,.navbar-brand:hover{text-decoration:none} .navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}} .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px} .navbar-toggle:focus{outline:0} .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px} .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}} .navbar-nav{margin:7.5px -15px} .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}} .navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}} .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0} .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0} .navbar-btn{margin-top:8px;margin-bottom:8px} .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px} .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px} .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}} .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7} .navbar-default .navbar-brand{color:#777} .navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent} .navbar-default .navbar-text{color:#777} .navbar-default .navbar-nav>li>a{color:#777} .navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent} .navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7} .navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent} .navbar-default .navbar-toggle{border-color:#ddd} .navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd} .navbar-default .navbar-toggle .icon-bar{background-color:#888} .navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7} .navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}} .navbar-default .navbar-link{color:#777} .navbar-default .navbar-link:hover{color:#333} .navbar-default .btn-link{color:#777} .navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333} .navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc} .navbar-inverse{background-color:#222;border-color:#080808} .navbar-inverse .navbar-brand{color:#9d9d9d} .navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent} .navbar-inverse .navbar-text{color:#9d9d9d} .navbar-inverse .navbar-nav>li>a{color:#9d9d9d} .navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent} .navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808} .navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent} .navbar-inverse .navbar-toggle{border-color:#333} .navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333} .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff} .navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010} .navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}} .navbar-inverse .navbar-link{color:#9d9d9d} .navbar-inverse .navbar-link:hover{color:#fff} .navbar-inverse .btn-link{color:#9d9d9d} .navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff} .navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444} .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px} .breadcrumb>li{display:inline-block} .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"} .breadcrumb>.active{color:#777} .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px} .pagination>li{display:inline} .pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd} .pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px} .pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px} .pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd} .pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7} .pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd} .pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333} .pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px} .pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px} .pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5} .pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px} .pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px} .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none} .pager li{display:inline} .pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px} .pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee} .pager .next>a,.pager .next>span{float:right} .pager .previous>a,.pager .previous>span{float:left} .pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff} .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em} a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer} .label:empty{display:none} .btn .label{position:relative;top:-1px} .label-default{background-color:#777} .label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e} .label-primary{background-color:#337ab7} .label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090} .label-success{background-color:#5cb85c} .label-success[href]:focus,.label-success[href]:hover{background-color:#449d44} .label-info{background-color:#5bc0de} .label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5} .label-warning{background-color:#f0ad4e} .label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f} .label-danger{background-color:#d9534f} .label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c} .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px} .badge:empty{display:none} .btn .badge{position:relative;top:-1px} .btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px} a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer} .list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff} .list-group-item>.badge{float:right} .list-group-item>.badge+.badge{margin-right:5px} .nav-pills>li>a>.badge{margin-left:3px} .jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee} .jumbotron .h1,.jumbotron h1{color:inherit} .jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200} .jumbotron>hr{border-top-color:#d5d5d5} .container .jumbotron,.container-fluid .jumbotron{border-radius:6px} .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}} .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out} .thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto} a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7} .thumbnail .caption{padding:9px;color:#333} .alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px} .alert h4{margin-top:0;color:inherit} .alert .alert-link{font-weight:700} .alert>p,.alert>ul{margin-bottom:0} .alert>p+p{margin-top:5px} .alert-dismissable,.alert-dismissible{padding-right:35px} .alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit} .alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6} .alert-success hr{border-top-color:#c9e2b3} .alert-success .alert-link{color:#2b542c} .alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1} .alert-info hr{border-top-color:#a6e1ec} .alert-info .alert-link{color:#245269} .alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc} .alert-warning hr{border-top-color:#f7e1b5} .alert-warning .alert-link{color:#66512c} .alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1} .alert-danger hr{border-top-color:#e4b9c0} .alert-danger .alert-link{color:#843534} @-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}} @-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}} @keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}} .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)} .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease} .progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px} .progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} .progress-bar-success{background-color:#5cb85c} .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-info{background-color:#5bc0de} .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-warning{background-color:#f0ad4e} .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-danger{background-color:#d9534f} .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .media{margin-top:15px} .media:first-child{margin-top:0} .media,.media-body{overflow:hidden;zoom:1} .media-body{width:10000px} .media-object{display:block} .media-object.img-thumbnail{max-width:none} .media-right,.media>.pull-right{padding-left:10px} .media-left,.media>.pull-left{padding-right:10px} .media-body,.media-left,.media-right{display:table-cell;vertical-align:top} .media-middle{vertical-align:middle} .media-bottom{vertical-align:bottom} .media-heading{margin-top:0;margin-bottom:5px} .media-list{padding-left:0;list-style:none} .list-group{padding-left:0;margin-bottom:20px} .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd} .list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px} .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px} a.list-group-item,button.list-group-item{color:#555} a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333} a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5} button.list-group-item{width:100%;text-align:left} .list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee} .list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit} .list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777} .list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7} .list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit} .list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef} .list-group-item-success{color:#3c763d;background-color:#dff0d8} a.list-group-item-success,button.list-group-item-success{color:#3c763d} a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit} a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6} a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d} .list-group-item-info{color:#31708f;background-color:#d9edf7} a.list-group-item-info,button.list-group-item-info{color:#31708f} a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit} a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3} a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f} .list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3} a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b} a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit} a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc} a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b} .list-group-item-danger{color:#a94442;background-color:#f2dede} a.list-group-item-danger,button.list-group-item-danger{color:#a94442} a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit} a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc} a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442} .list-group-item-heading{margin-top:0;margin-bottom:5px} .list-group-item-text{margin-bottom:0;line-height:1.3} .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)} .panel-body{padding:15px} .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px} .panel-heading>.dropdown .dropdown-toggle{color:inherit} .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit} .panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit} .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0} .panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0} .panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px} .panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0} .panel-heading+.list-group .list-group-item:first-child{border-top-width:0} .list-group+.panel-footer{border-top-width:0} .panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0} .panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px} .panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px} .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px} .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px} .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px} .panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px} .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px} .panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd} .panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0} .panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0} .panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0} .panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0} .panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0} .panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0} .panel>.table-responsive{margin-bottom:0;border:0} .panel-group{margin-bottom:20px} .panel-group .panel{margin-bottom:0;border-radius:4px} .panel-group .panel+.panel{margin-top:5px} .panel-group .panel-heading{border-bottom:0} .panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd} .panel-group .panel-footer{border-top:0} .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd} .panel-default{border-color:#ddd} .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd} .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd} .panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333} .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd} .panel-primary{border-color:#337ab7} .panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7} .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7} .panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff} .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7} .panel-success{border-color:#d6e9c6} .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6} .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6} .panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d} .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6} .panel-info{border-color:#bce8f1} .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1} .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1} .panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f} .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1} .panel-warning{border-color:#faebcc} .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc} .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc} .panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b} .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc} .panel-danger{border-color:#ebccd1} .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1} .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1} .panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442} .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1} .embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden} .embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0} .embed-responsive-16by9{padding-bottom:56.25%} .embed-responsive-4by3{padding-bottom:75%} .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)} .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)} .well-lg{padding:24px;border-radius:6px} .well-sm{padding:9px;border-radius:3px} .close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2} .close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5} button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0} .modal-open{overflow:hidden} .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0} .modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)} .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)} .modal-open .modal{overflow-x:hidden;overflow-y:auto} .modal-dialog{position:relative;width:auto;margin:10px} .modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)} .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000} .modal-backdrop.fade{filter:alpha(opacity=0);opacity:0} .modal-backdrop.in{filter:alpha(opacity=50);opacity:.5} .modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5} .modal-header .close{margin-top:-2px} .modal-title{margin:0;line-height:1.42857143} .modal-body{position:relative;padding:15px} .modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5} .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px} .modal-footer .btn-group .btn+.btn{margin-left:-1px} .modal-footer .btn-block+.btn-block{margin-left:0} .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}} .tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto} .tooltip.in{filter:alpha(opacity=90);opacity:.9} .tooltip.top{padding:5px 0;margin-top:-3px} .tooltip.right{padding:0 5px;margin-left:3px} .tooltip.bottom{padding:5px 0;margin-top:3px} .tooltip.left{padding:0 5px;margin-left:-3px} .tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px} .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid} .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000} .tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000} .tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000} .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000} .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000} .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000} .tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000} .tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000} .popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto} .popover.top{margin-top:-10px} .popover.right{margin-left:10px} .popover.bottom{margin-top:10px} .popover.left{margin-left:-10px} .popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0} .popover-content{padding:9px 14px} .popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid} .popover>.arrow{border-width:11px} .popover>.arrow:after{content:"";border-width:10px} .popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0} .popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0} .popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0} .popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0} .popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)} .popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff} .popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)} .popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff} .carousel{position:relative} .carousel-inner{position:relative;width:100%;overflow:hidden} .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left} .carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}} .carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block} .carousel-inner>.active{left:0} .carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%} .carousel-inner>.next{left:100%} .carousel-inner>.prev{left:-100%} .carousel-inner>.next.left,.carousel-inner>.prev.right{left:0} .carousel-inner>.active.left{left:-100%} .carousel-inner>.active.right{left:100%} .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5} .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x} .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x} .carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9} .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px} .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px} .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px} .carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1} .carousel-control .icon-prev:before{content:'\2039'} .carousel-control .icon-next:before{content:'\203a'} .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none} .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px} .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff} .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)} .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}} .btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "} .btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both} .center-block{display:block;margin-right:auto;margin-left:auto} .pull-right{float:right!important} .pull-left{float:left!important} .hide{display:none!important} .show{display:block!important} .invisible{visibility:hidden} .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0} .hidden{display:none!important} .affix{position:fixed}@-ms-viewport{width:device-width} .visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important} .visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}} .visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}} .visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}} .visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}} .visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.eot b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64
GIT binary patch
literal 20127
zcma%hV{j!vx9y2-`@~L8?1^pLwlPU2wr$&<*tR|KBoo`2;LUg6eW-eW-tKDb)vH%`
z^`A!Vd<6hNSRMcX|Cb;E|1qflDggj6Kmr)xA10^t-vIc3*Z+F{r%|K(GyE^?|I{=9
zNq`(c8=wS`0!RZy0g3{M(8^tv41d}oRU?8#IBFtJy*9zAN5dcxqGlMZGL>GG%R#)4J
zDJ2;)4*E1pyHia%>lMv3X7Q`UoFyoB@|xvh^)kOE3)IL&0(G&i;g08s>c%~pHkN&6
z($7!kyv|A2DsV2mq-5Ku)D#$Kn$CzqD-wm5Q*OtEOEZe^&T$xIb0NUL}$)W)Ck`6oter6KcQG9Zcy>lXip)%e&!lQgtQ*N`#abOlytt!&i3fo)cKV
zP0BWmLxS1gQv(r_r|?9>rR0ZeEJPx;Vi|h1!Eo*dohr&^lJgqJZns>&vexP@fs
zkPv93Nyw$-kM5Mw^{@wPU47Y1dSkiHyl3dtHLwV&6Tm1iv{ve;sYA}Z&kmH802s9Z
zyJEn+cfl7yFu#1^#DbtP7k&aR06|n{LnYFYEphKd@dJEq@)s#S)UA&8VJY@S2+{~>
z(4?M();zvayyd^j`@4>xCqH|Au>Sfzb$mEOcD7e4z8pPVRTiMUWiw;|gXHw7LS#U<
zsT(}Z5SJ)CRMXloh$qPnK77w_)ctHmgh}QAe<2S{DU^`!uwptCoq!Owz$u6bF)vnb
zL`bM$%>baN7l#)vtS3y6h*2?xCk
z>w+s)@`O4(4_I{L-!+b%)NZcQ&ND=2lyP+xI#9OzsiY8$c)ys-MI?TG6
zEP6f=vuLo!G>J7F4v|s#lJ+7A`^nEQScH3e?B_jC&{sj>m
zYD?!1z4nDG_Afi$!J(<{>z{~Q)$SaXWjj~%ZvF152Hd^VoG14rFykR=_TO)mCn&K$
z-TfZ!vMBvnToyBoKRkD{3=&=qD|L!vb#jf1f}2338z)e)g>7#NPe!FoaY*jY{f)Bf>ohk-K
z4{>fVS}ZCicCqgLuYR_fYx2;*-4k>kffuywghn?15s1dIOOYfl+XLf5w?wtU2Og*f
z%X5x`H55F6g1>m~%F`655-W1wFJtY>>qNSdVT`M`1Mlh!5Q6#3j={n5#za;!X&^OJ
zgq;d4UJV-F>gg?c3Y?d=kvn3eV)Jb^
zO5vg0G0yN0%}xy#(6oTDSVw8l=_*2k;zTP?+N=*18H5wp`s90K-C67q{W3d8vQGmr
zhpW^>1HEQV2TG#8_P_0q91h8QgHT~8=-Ij5snJ3cj?Jn5_66uV=*pq(j}yHnf$Ft;5VVC?bz%9X31asJeQF2jEa47H#j`
zk&uxf3t?g!tltVP|B#G_UfDD}`<#B#iY^i>oDd-LGF}A@Fno~dR72c&hs6bR
z2F}9(i8+PR%R|~FV$;Ke^Q_E_Bc;$)xN4Ti>Lgg4vaip!%M
z06oxAF_*)LH57w|gCW3SwoEHwjO{}}U=pKhjKSZ{u!K?1zm1q?
zXyA6y@)}_sONiJopF}_}(~}d4FDyp|(@w}Vb;Fl5bZL%{1`}gdw#i{KMjp2@Fb9pg
ziO|u7qP{$kxH$qh8%L+)AvwZNgUT6^zsZq-MRyZid{D?t`f|KzSAD~C?WT3d0rO`0
z=qQ6{)&UXXuHY{9g|P7l_nd-%eh}4%VVaK#Nik*tOu9lBM$<%FS@`NwGEbP0&;Xbo
zObCq=y%a`jSJmx_uTLa{@2@}^&F4c%z6oe-TN&idjv+8E|$FHOvBqg5hT
zMB=7SHq`_-E?5g=()*!V>rIa&LcX(RU}aLm*38U_V$C_g4)7GrW5$GnvTwJZdBmy6
z*X)wi3=R8L=esOhY0a&eH`^fSpUHV8h$J1|o^3fKO|9QzaiKu>yZ9wmRkW?HTkc<*v7i*ylJ#u#j
zD1-n&{B`04oG>0Jn{5PKP*4Qsz{~`VVA3578gA+JUkiPc$Iq!^K|}*p_z3(-c&5z@
zKxmdNpp2&wg&%xL3xZNzG-5Xt7jnI@{?c
z25=M>-VF|;an2Os$Nn%HgQz7m(ujC}Ii0Oesa(y#8>D+P*_m^X##E|h$M6tJr%#=P
zWP*)Px>7z`E~U^2LNCNiy%Z7!!6RI%6fF@#ZY3z`CK91}^J$F!EB0YF1je9hJKU7!S5MnXV{+#K;y
zF~s*H%p@vj&-ru7#(F2L+_;IH46X(z{~HTfcThqD%b{>~u@lSc<+f5#xgt9L7$gSK
ziDJ6D*R%4&YeUB@yu@4+&70MBNTnjRyqMRd+@&lU#rV%0t3OmouhC`mkN}pL>tXin
zY*p)mt=}$EGT2E<4Q>E2`6)gZ`QJhGDNpI}bZL9}m+R>q?l`OzFjW?)Y)P`fUH(_4
zCb?sm1=DD0+Q5v}BW#0n5;Nm(@RTEa3(Y17H2H67La+>ptQHJ@WMy2xRQT$|7l`8c
zYHCxYw2o-rI?(fR2-%}pbs$I%w_&LPYE{4bo}vRoAW>3!SY_zH3`ofx3F1PsQ?&iq
z*BRG>?<6%z=x#`NhlEq{K~&rU7Kc7Y-90aRnoj~rVoKae)L$3^z*Utppk?I`)CX&&
zZ^@Go9fm&fN`b`XY
zt0xE5aw4t@qTg_k=!-5LXU+_~DlW?53!afv6W(k@FPPX-`nA!FBMp7b!ODbL1zh58
z*69I}P_-?qSLKj}JW7gP!la}K@M}L>v?rDD!DY-tu+onu9kLoJz20M4urX_xf2dfZ
zORd9Zp&28_ff=wdMpXi%IiTTNegC}~RLkdYjA39kWqlA?jO~o1`*B&85Hd%VPkYZT
z48MPe62;TOq#c%H(`wX5(Bu>nlh4Fbd*Npasdhh?oRy8a;NB2(eb}6DgwXtx=n}fE
zx67rYw=(s0r?EsPjaya}^Qc-_UT5|*@|$Q}*|>V3O~USkIe6a0_>vd~6kHuP8=m}_
zo2IGKbv;yA+TBtlCpnw)8hDn&eq?26gN$Bh;SdxaS04Fsaih_Cfb98s39xbv)=mS0
z6M<@pM2#pe32w*lYSWG>DYqB95XhgAA)*9dOxHr{t)er0Xugoy)!Vz#2C3FaUMzYl
zCxy{igFB901*R2*F4>grPF}+G`;Yh
zGi@nRjWyG3mR(BVOeBPOF=_&}2IWT%)pqdNAcL{eP`L*^FDv#Rzql5U&Suq_X%JfR_lC!S|y|xd5mQ0{0!G#9hV46S~A`
z0B!{yI-4FZEtol5)mNWXcX(`x&Pc*&gh4k{w%0S#EI>rqqlH2xv7mR=9XNCI$V#NG
z4wb-@u{PfQP;tTbzK>(DF(~bKp3;L1-A*HS!VB)Ae>Acnvde15Anb`h;I&0)aZBS6
z55ZS7mL5Wp!LCt45^{2_70YiI_Py=X{I3>$Px5Ez0ahLQ+
z9EWUWSyzA|+g-Axp*Lx-M{!ReQO07EG7r4^)K(xbj@%ZU=0tBC5shl)1a!ifM5OkF
z0w2xQ-<+r-h1fi7B6waX15|*GGqfva)S)dVcgea`lQ~SQ$KXPR+(3Tn2I2R<0
z9tK`L*pa^+*n%>tZPiqt{_`%v?Bb7CR-!GhMON_Fbs0$#|H}G?rW|{q5fQhvw!FxI
zs-5ZK>hAbnCS#ZQVi5K0X3PjL1JRdQO+&)*!oRCqB{wen60P6!7bGiWn@vD|+E@Xq
zb!!_WiU^I|@1M}Hz6fN-m04x=>Exm{b@>UCW|c8vC`aNbtA@KCHujh^2RWZC}iYhL^<*Z93chIBJYU&w>$CGZDRcHuIgF&oyesDZ#&mA;?wxx4Cm#c0V$xYG?9OL(Smh}#fFuX(K;otJmvRP{h
ze^f-qv;)HKC7geB92_@3a9@MGijS(hNNVd%-rZ;%@F_f7?Fjinbe1(
zn#jQ*jKZTqE+AUTEd3y6t>*=;AO##cmdwU4gc2&rT8l`rtKW2JF<`_M#p>cj+)yCG
zgKF)y8jrfxTjGO&ccm8RU>qn|HxQ7Z#sUo$q)P5H%8iBF$({0Ya51-rA@!It#NHN8MxqK
zrYyl_&=}WVfQ?+ykV4*@F6)=u_~3BebR2G2>>mKaEBPmSW3(qYGGXj??m3L
zHec{@jWCsSD8`xUy0pqT?Sw0oD?AUK*WxZn#D>-$`eI+IT)6ki>ic}W)t$V32^ITD
zR497@LO}S|re%A+#vdv-?fXsQGVnP?QB_d0cGE+U84Q=aM=XrOwGFN3`Lpl@P0fL$
zKN1PqOwojH*($uaQFh8_)H#>Acl&UBSZ>!2W1Dinei`R4dJGX$;~60X=|SG6#jci}
z&t4*dVDR*;+6Y(G{KGj1B2!qjvDYOyPC}%hnPbJ@g(4yBJrViG1#$$X75y+Ul1{%x
zBAuD}Q@w?MFNqF-m39FGpq7RGI?%Bvyyig&oGv)lR>d<`Bqh=p>urib5DE;u$c|$J
zwim~nPb19t?LJZsm{<(Iyyt@~H!a4yywmHKW&=1r5+oj*Fx6c89heW@(2R`i!Uiy*
zp)=`Vr8sR!)KChE-6SEIyi(dvG3<1KoVt>kGV=zZiG7LGonH1+~yOK-`g0)r#+O|Q>)a`I2FVW%wr3lhO(P{ksNQuR!G_d
zeTx(M!%brW_vS9?IF>bzZ2A3mWX-MEaOk^V|4d38{1D|KOlZSjBKrj7Fgf^>JyL0k
zLoI$adZJ0T+8i_Idsuj}C;6jgx9LY#Ukh;!8eJ^B1N}q=Gn4onF*a2vY7~`x$r@rJ
z`*hi&Z2lazgu{&nz>gjd>#eq*IFlXed(%$s5!HRXKNm
zDZld+DwDI`O6hyn2uJ)F^{^;ESf9sjJ)wMSKD~R=DqPBHyP!?cGAvL<1|7K-(=?VO
zGcKcF1spUa+ki<`6K#@QxOTsd847N8WSWztG~?~
z!gUJn>z0O=_)VCE|56hkT~n5xXTp}Ucx$Ii%bQ{5;-a4~I2e|{l9ur#*ghd*hSqO=
z)GD@ev^w&5%k}YYB~!A%3*XbPPU-N6&3Lp1LxyP@|C<{qcn&?l54+zyMk&I3YDT|E
z{lXH-e?C{huu<@~li+73lMOk&k)3s7Asn$t6!PtXJV!RkA`qdo4|OC_a?vR!kE_}k
zK5R9KB%V@R7gt@9=TGL{=#r2gl!@3G;k-6sXp&E4u20DgvbY$iE**Xqj3TyxK>3AU
z!b9}NXuINqt>Htt6fXIy5mj7oZ{A&$XJ&thR5ySE{mkxq_YooME#VCHm2+3D!f`{)
zvR^WSjy_h4v^|!RJV-RaIT2Ctv=)UMMn@fAgjQV$2G+4?&dGA8vK35c-8r)z9Qqa=%k(FU)?iec14<^olkOU3p
zF-6`zHiDKPafKK^USUU+D01>C&Wh{{q?>5m
zGQp|z*+#>IIo=|ae8CtrN@@t~uLFOeT{}vX(IY*;>wAU=u1Qo4c+a&R);$^VCr>;!
zv4L{`lHgc9$BeM)pQ#XA_(Q#=_iSZL4>L~8Hx}NmOC$&*Q*bq|9Aq}rWgFnMDl~d*;7c44GipcpH9PWaBy-G$*MI^F0
z?Tdxir1D<2ui+Q#^c4?uKvq=p>)lq56=Eb|N^qz~w7rsZu)@E4$;~snz+wIxi+980O6M#RmtgLYh@|2}9BiHSpTs
zacjGKvwkUwR3lwTSsCHlwb&*(onU;)$yvdhikonn|B44JMgs*&Lo!jn`6AE>XvBiO
z*LKNX3FVz9yLcsnmL!cRVO_qv=yIM#X|u&}#f%_?Tj0>8)8P_0r0!AjWNw;S44tst
zv+NXY1{zRLf9OYMr6H-z?4CF$Y%MdbpFIN@a-LEnmkcOF>h16cH_;A|e)pJTuCJ4O
zY7!4FxT4>4aFT8a92}84>q0&?46h>&0Vv0p>u~k&qd5$C1A6Q$I4V(5X~6{15;PD@
ze6!s9xh#^QI`J+%8*=^(-!P!@9%~buBmN2VSAp@TOo6}C?az+ALP8~&a0FWZk*F5N
z^8P8IREnN`N0i@>O0?{i-FoFShYbUB`D7O4HB`Im2{yzXmyrg$k>cY6A@>bf7i3n0
z5y&cf2#`zctT>dz+hNF&+d3g;2)U!#vsb-%LC+pqKRTiiSn#FH#e!bVwR1nAf*TG^
z!RKcCy$P>?Sfq6n<%M{T0I8?p@HlgwC!HoWO>~mT+X<{Ylm+$Vtj9};H3$EB}P2wR$3y!TO#$iY8eO-!}+F&jMu4%E6S>m
zB(N4w9O@2=<`WNJay5PwP8javDp~o~xkSbd4t4t8)9jqu@bHmJHq=MV~Pt|(TghCA}fhMS?s-{klV>~=VrT$nsp7mf{?cze~KKOD4
z_1Y!F)*7^W+BBTt1R2h4f1X4Oy2%?=IMhZU8c{qk3xI1=!na*Sg<=A$?K=Y=GUR9@
zQ(ylIm4Lgm>pt#%p`zHxok%vx_=8Fap1|?OM02|N%X-g5_#S~sT@A!x&8k#wVI2lo
z1Uyj{tDQRpb*>c}mjU^gYA9{7mNhFAlM=wZkXcA#MHXWMEs^3>p9X)Oa?dx7b%N*y
zLz@K^%1JaArjgri;8ptNHwz1<0y8tcURSbHsm=26^@CYJ3hwMaEvC7
z3Wi-@AaXIQ)%F6#i@%M>?Mw7$6(kW@?et@wbk-APcvMCC{>iew#vkZej8%9h0JSc?
zCb~K|!9cBU+))^q*co(E^9jRl7gR4Jihyqa(Z(P&ID#TPyysVNL7(^;?Gan!OU>au
zN}miBc&XX-M$mSv%3xs)bh>Jq9#aD_l|zO?I+p4_5qI0Ms*OZyyxA`sXcyiy>-{YN
zA70%HmibZYcHW&YOHk6S&PQ+$rJ3(utuUra3V0~@=_~QZy&nc~)AS>v&<6$gErZC3
zcbC=eVkV4Vu0#}E*r=&{X)Kgq|8MGCh(wsH4geLj@#8EGYa})K2;n
z{1~=ghoz=9TSCxgzr5x3@sQZZ0FZ+t{?klSI_IZa16pSx6*;=O%n!uXVZ@1IL;JEV
zfOS&yyfE9dtS*^jmgt6>jQDOIJM5Gx#Y2eAcC3l^lmoJ{o0T>IHpECTbfYgPI4#LZq0PKqnPCD}_
zyKxz;(`fE0z~nA1s?d{X2!#ZP8wUHzFSOoTWQrk%;wCnBV_3D%3@EC|u$Ao)tO|AO
z$4&aa!wbf}rbNcP{6=ajgg(`p5kTeu$ji20`zw)X1SH*x
zN?T36{d9TY*S896Ijc^!35LLUByY4QO=ARCQ#MMCjudFc7s!z%P$6DESz%zZ#>H|i
zw3Mc@v4~{Eke;FWs`5i@ifeYPh-Sb#vCa#qJPL|&quSKF%sp8*n#t?vIE7kFWjNFh
zJC@u^bRQ^?ra|%39Ux^Dn4I}QICyDKF0mpe+Bk}!lFlqS^WpYm&xwIYxUoS-rJ)N9
z1Tz*6Rl9;x`4lwS1cgW^H_M*)Dt*DX*W?ArBf?-t|1~ge&S}xM0K;U9Ibf{okZHf~
z#4v4qc6s6Zgm8iKch5VMbQc~_V-ZviirnKCi*ouN^c_2lo&-M;YSA>W>>^5tlXObg
zacX$k0=9Tf$Eg+#9k6yV(R5-&F{=DHP8!yvSQ`Y~XRnUx@{O$-bGCksk~3&qH^dqX
zkf+ZZ?Nv5u>LBM@2?k%k&_aUb5Xjqf#!&7%zN#VZwmv65ezo^Y4S#(ed0yUn4tFOB
zh1f1SJ6_s?a{)u6VdwUC!Hv=8`%T9(^c`2hc9nt$(q{Dm2X)dK49ba+KEheQ;7^0)
ziFKw$%EHy_B1)M>=yK^=Z$U-LT36yX>EKT
zvD8IAom2&2?bTmX@_PBR4W|p?6?LQ+&UMzXxqHC5VHzf@Eb1u)kwyfy+NOM8Wa2y@
zNNDL0PE$F;yFyf^jy&RGwDXQwYw6yz>OMWvJt98X@;yr!*RQDBE-
zE*l*u=($Zi1}0-Y4lGaK?J$yQjgb+*ljUvNQ!;QYAoCq@>70=sJ{o{^21^?zT@r~hhf&O;Qiq+
ziGQQLG*D@5;LZ%09mwMiE4Q{IPUx-emo*;a6#DrmWr(zY27d@ezre)Z1BGZdo&pXn
z+);gOFelKDmnjq#8dL7CTiVH)dHOqWi~uE|NM^QI3EqxE6+_n>IW67~UB#J==QOGF
zp_S)c8TJ}uiaEiaER}MyB(grNn=2m&0yztA=!%3xUREyuG_jmadN*D&1nxvjZ6^+2
zORi7iX1iPi$tKasppaR9$a3IUmrrX)m*)fg1>H+$KpqeB*G>AQV((-G{}h=qItj|d
zz~{5@{?&Dab6;0c7!!%Se>w($RmlG7Jlv_zV3Ru8b2rugY0MVPOOYGlokI7%nhIy&
z-B&wE=lh2dtD!F?noD{z^O1~Tq4MhxvchzuT_oF3-t4YyA*MJ*n&+1X3~6quEN
z@m~aEp=b2~mP+}TUP^FmkRS_PDMA{B
zaSy(P=$T~R!yc^Ye0*pl5xcpm_JWI;@-di+nruhqZ4gy7cq-)I&s&Bt3BkgT(Zdjf
zTvvv0)8xzntEtp4iXm}~cT+pi5k{w{(Z@l2XU9lHr4Vy~3ycA_T?V(QS{qwt?v|}k
z_ST!s;C4!jyV5)^6xC#v!o*uS%a-jQ6<
z)>o?z7=+zNNtIz1*F_HJ(w@=`E+T|9TqhC(g7kKDc8z~?RbKQ)LRMn7A1p*PcX2YR
zUAr{);~c7I#3Ssv<0i-Woj0&Z4a!u|@Xt2J1>N-|ED<3$o2V?OwL4oQ%$@!zLamVz
zB)K&Ik^~GOmDAa143{I4?XUk1<3-k{<%?&OID&>Ud%z*Rkt*)mko0RwC2=qFf-^OV
z=d@47?tY=A;=2VAh0mF(3x;!#X!%{|vn;U2XW{(nu5b&8kOr)Kop3-5_xnK5oO_3y
z!EaIb{r%D{7zwtGgFVri4_!yUIGwR(xEV3YWSI_+E}Gdl>TINWsIrfj+7DE?xp+5^
zlr3pM-Cbse*WGKOd3+*Qen^*uHk)+EpH-{u@i%y}Z!YSid<}~kA*IRSk|nf+I1N=2
zIKi+&ej%Al-M5`cP^XU>9A(m7G>58>o|}j0ZWbMg&x`*$B9j#Rnyo0#=BMLdo%=ks
zLa3(2EinQLXQ(3zDe7Bce%Oszu%?8PO648TNst4SMFvj=+{b%)ELyB!0`B?9R6aO{i-63|s@|raSQGL~s)9R#J#duFaTSZ2M{X
z1?YuM*a!!|jP^QJ(hAisJuPOM`8Y-Hzl~%d@latwj}t&0{DNNC+zJARnuQfiN`HQ#
z?boY_2?*q;Qk)LUB)s8(Lz5elaW56p&fDH*AWAq7Zrbeq1!?FBGYHCnFgRu5y1jwD
zc|yBz+UW|X`zDsc{W~8m$sh@VVnZD$lLnKlq@Hg^;ky!}ZuPdKNi2BI70;hrpvaA4+Q_+K)I@|)q1N-H
zrycZU`*YUW``Qi^`bDX-j7j^&bO+-Xg$cz2#i##($uyW{Nl&{DK{=lLWV3|=<&si||2)l=8^8_z+Vho-#5LB0EqQ3v5U#*DF7
zxT)1j^`m+lW}p$>WSIG1eZ>L|YR-@Feu!YNWiw*IZYh03mq+2QVtQ}1ezRJM?0PA<
z;mK(J5@N8>u@<6Y$QAHWNE};rR|)U_&bv8dsnsza7{=zD1VBcxrALqnOf-qW(zzTn
zTAp|pEo#FsQ$~*$j|~Q;$Zy&Liu9OM;VF@#_&*nL!N2hH!Q6l*OeTxq!l>dEc{;Hw
zCQni{iN%jHU*C;?M-VUaXxf0FEJ_G=C8)C-wD!DvhY+qQ#FT3}Th8;GgV&AV94F`D
ztT6=w_Xm8)*)dBnDkZd~UWL|W=Glu!$hc|1w7_7l!3MAt95oIp4Xp{M%clu&TXehO
z+L-1#{mjkpTF@?|w1P98OCky~S%@OR&o75P&ZHvC}Y=(2_{ib(-Al_7aZ^U?s34#H}=
zGfFi5%KnFVCKtdO^>Htpb07#BeCXMDO8U}crpe1Gm`>Q=6qB4i=nLoLZ%p$TY=OcP
z)r}Et-Ed??u~f09d3Nx3bS@ja!fV(Dfa5lXxRs#;8?Y8G+Qvz+iv7fiRkL3liip})
z&G0u8RdEC9c$$rdU53=MH`p!Jn|DHjhOxHK$tW_pw9wCTf0Eo<){HoN=zG!!Gq4z4
z7PwGh)VNPXW-cE#MtofE`-$9~nmmj}m
zlzZscQ2+Jq%gaB9rMgVJkbhup0Ggpb)&L01T=%>n7-?v@I8!Q(p&+!fd+Y^Pu9l+u
zek(_$^HYFVRRIFt@0Fp52g5Q#I`tC3li`;UtDLP*rA{-#Yoa5qp{cD)QYhldihWe+
zG~zuaqLY~$-1sjh2lkbXCX;lq+p~!2Z=76cvuQe*Fl>IFwpUBP+d^&E4BGc{m#l%Kuo6#{XGoRyFc%Hqhf|%nYd<;yiC>tyEyk
z4I+a`(%%Ie=-*n
z-{mg=j&t12)LH3R?@-B1tEb7FLMePI1HK0`Ae@#)KcS%!Qt9p4_fmBl5zhO10n401
zBSfnfJ;?_r{%R)hh}BBNSl=$BiAKbuWrNGQUZ)+0=Mt&5!X*D@yGCSaMNY&@`;^a4
z;v=%D_!K!WXV1!3%4P-M*s%V2b#2jF2bk!)#2GLVuGKd#vNpRMyg`kstw0GQ8@^k^
zuqK5uR<>FeRZ#3{%!|4X!hh7hgirQ@Mwg%%ez8pF!N$xhMNQN((yS(F2-OfduxxKE
zxY#7O(VGfNuLv-ImAw5+h@gwn%!ER;*Q+001;W7W^waWT%@(T+5k!c3A-j)a8y11t
zx4~rSN0s$M8HEOzkcWW4YbKK9GQez2XJ|Nq?TFy;jmGbg;`m&%U4hIiarKmdTHt#l
zL=H;ZHE?fYxKQQXKnC+K!TAU}r086{4m}r()-QaFmU(qWhJlc$eas&y?=H9EYQy8N$8^bni9TpDp
zkA^WRs?KgYgjxX4T6?`SMs$`s3vlut(YU~f2F+id(Rf_)$BIMibk9lACI~LA+i7xn
z%-+=DHV*0TCTJp~-|$VZ@g2vmd*|2QXV;HeTzt530KyK>v&253N1l}bP_J#UjLy4)
zBJili9#-ey8Kj(dxmW^ctorxd;te|xo)%46l%5qE-YhAjP`Cc03vT)vV&GAV%#Cgb
zX~2}uWNvh`2<*AuxuJpq>SyNtZwzuU)r@@dqC@v=Ocd(HnnzytN+M&|Qi#f4Q8D=h
ziE<3ziFW%+!yy(q{il8H44g^5{_+pH60Mx5Z*FgC_3hKxmeJ+wVuX?T#ZfOOD3E4C
zRJsj#wA@3uvwZwHKKGN{{Ag+8^cs?S4N@6(Wkd$CkoCst(Z&hp+l=ffZ?2m%%ffI3
zdV7coR`R+*dPbNx=*ivWeNJK=Iy_vKd`-_Hng{l?hmp=|T3U&epbmgXXWs9ySE|=G
zeQ|^ioL}tveN{s72_&h+F+W;G}?;?_s@h5>DX(rp#eaZ!E=NivgLI
zWykLKev+}sHH41NCRm7W>K+_qdoJ8x9o5Cf!)|qLtF7Izxk*p|fX8UqEY)_sI_45O
zL2u>x=r5xLE%s|d%MO>zU%KV6QKFiEeo12g#bhei4!Hm+`~Fo~4h|BJ)%ENxy9)Up
zOxupSf1QZWun=)gF{L0YWJ<(r0?$bPFANrmphJ>kG`&7E+RgrWQi}ZS#-CQJ*i#8j
zM_A0?w@4Mq@xvk^>QSvEU|VYQoVI=TaOrsLTa`RZfe8{9F~mM{L+C`9YP9?OknLw|
zmkvz>cS6`pF0FYeLdY%>u&XpPj5$*iYkj=m7wMzHqzZ5SG~$i_^f@QEPEC+<2nf-{
zE7W+n%)q$!5@2pBuXMxhUSi*%F>e_g!$T-_`ovjBh(3jK9Q^~OR{)}!0}vdTE^M+m
z9QWsA?xG>EW;U~5gEuKR)Ubfi&YWnXV;3H6Zt^NE725*`;lpSK4HS1sN?{~9a4JkD
z%}23oAovytUKfRN87XTH2c=kq1)O5(fH_M3M-o{{@&~KD`~TRot-gqg7Q2U2o-iiF}K>m?CokhmODaLB
z1p6(6JYGntNOg(s!(>ZU&lzDf+Ur)^Lirm%*}Z>T)9)fAZ9>k(kvnM;ab$ptA=hoh
zVgsVaveXbMpm{|4*d<0>?l_JUFOO8A3xNLQOh%nVXjYI6X8h?a@6kDe5-m&;M0xqx
z+1U$s>(P9P)f0!{z%M@E7|9nn#IWgEx6A6JNJ(7dk`%6$3@!C!l;JK-p2?gg+W|d-
ziEzgk$w7k48NMqg$CM*4O~Abj3+_yUKTyK1p6GDsGEs;}=E_q>^LI-~pym$qhXPJf
z2`!PJDp4l(TTm#|n@bN!j;-FFOM__eLl!6{*}z=)UAcGYloj?bv!-XY1TA6Xz;82J
zLRaF{8ayzGa|}c--}|^xh)xgX>6R(sZD|Z|qX50gu=d`gEwHqC@WYU7{%<5VOnf9+
zB@FX?|UL%`8EIAe!*UdYl|6wRz6Y>(#8x92$#y}wMeE|ZM2X*c}dKJ^4NIf;Fm
zNwzq%QcO?$NR-7`su!*$dlIKo2y(N;qgH@1|8QNo$0wbyyJ2^}$iZ>M{BhBjTdMjK
z>gPEzgX4;g3$rU?jvDeOq`X=>)zdt|jk1Lv3u~bjHI=EGLfIR&+K3ldcc4D&Um&04
z3^F*}WaxR(ZyaB>DlmF_UP@+Q*h$&nsOB#gwLt{1#F4i-{A5J@`>B9@{^i?g_Ce&O
z<<}_We-RUFU&&MHa1#t56u_oM(Ljn7djja!T|gcxSoR=)@?owC*NkDarpBj=W4}=i1@)@L|C)
zQKA+o<(pMVp*Su(`zBC0l1yTa$MRfQ#uby|$mlOMs=G`4J|?apMzKei%jZql#gP@IkOaOjB7MJM=@1j(&!jNnyVkn5;4lvro1!vq
ztXiV8HYj5%)r1PPpIOj)f!>pc^3#LvfZ(hz}C@-3R(Cx7R427*Fwd!XO
z4~j&IkPHcBm0h_|iG;ZNrYdJ4HI!$rSyo&sibmwIgm1|J#g6%>=ML1r!kcEhm(XY&
zD@mIJt;!O%WP7CE&wwE3?1-dt;RTHdm~LvP7K`ccWXkZ0kfFa2S;wGtx_a}S2lslw
z$<4^Jg-n#Ypc(3t2N67Juasu=h)j&UNTPNDil4MQMTlnI81kY46uMH5B^U{~nmc6+
z9>(lGhhvRK9ITfpAD!XQ&BPphL3p8B4PVBN0NF6U49;ZA0Tr75AgGw7(S=Yio+xg_
zepZ*?V#KD;sHH+15ix&yCs0eSB-Z%D%uujlXvT#V$Rz@$+w!u#3GIo*AwMI#Bm^oO
zLr1e}k5W~G0xaO!C%Mb{sarxWZ4%Dn9vG`KHmPC9GWZwOOm11XJp#o0-P-${3m4g(
z6~)X9FXw%Xm~&99tj>a-ri})ZcnsfJtc10F@t9xF5vq6E)X!iUXHq-ohlO`gQdS&k
zZl})3k||u)!_=nNlvMbz%AuIr89l#I$;rG}qvDGiK?xTd5HzMQkw*p$YvFLGyQM!J
zNC^gD!kP{A84nGosi~@MLKqWQNacfs7O$dkZtm4-BZ~iA8xWZPkTK!HpA5zr!9Z&+icfAJ1)NWkTd!-9`NWU>9uXXUr;`Js#NbKFgrNhTcY4GNv*71}}T
zFJh?>=EcbUd2<|fiL+H=wMw8hbX6?+_cl4XnCB#ddwdG>bki*
zt*&6Dy&EIPluL@A3_;R%)shA-tDQA1!Tw4ffBRyy;2n)vm_JV06(4Or&QAOKNZB5f(MVC}&_!B>098R{Simr!UG}?CW1Ah+X+0#~0`X)od
zLYablwmFxN21L))!_zc`IfzWi`5>MxPe(DmjjO1}HHt7TJtAW+VXHt!aKZk>y6PoMsbDXRJnov;D~Ur~2R_7(Xr)aa%wJwZhS3gr7IGgt%@;`jpL@gyc6bGCVx!9CE7NgIbUNZ!Ur1RHror0~
zr(j$^yM4j`#c2KxSP61;(Tk^pe7b~}LWj~SZC=MEpdKf;B@on9=?_n|R|0q;Y*1_@
z>nGq>)&q!;u-8H)WCwtL&7F4vbnnfSAlK1mwnRq2&gZrEr!b1MA
z(3%vAbh3aU-IX`d7b@q`-WiT6eitu}ZH9x#d&qx}?CtDuAXak%5<-P!{a`V=$|XmJ
zUn@4lX6#ulB@a=&-9HG)a>KkH=jE7>&S&N~0X0zD=Q=t|7w;kuh#cU=NN7gBGbQTT
z;?bdSt8V&IIi}sDTzA0dkU}Z-Qvg;RDe8v>468p3*&hbGT1I3hi9hh~Z(!H}{+>eUyF)H&gdrX=k$aB%J6I;6+^^kn1mL+E+?A!A}@xV(Qa@M%HD5C@+-4Mb4lI=Xp=@9+^x+jhtOc
zYgF2aVa(uSR*n(O)e6tf3JEg2xs#dJfhEmi1iOmDYWk|wXNHU?g23^IGKB&yHnsm7
zm_+;p?YpA#N*7vXCkeN2LTNG`{QDa#U3fcFz7SB)83=<8rF)|udrEbrZL$o6W?oDR
zQx!178Ih9B#D9Ko$H(jD{4MME&<|6%MPu|TfOc#E0B}!j^MMpV69D#h2`vsEQ{(?c
zJ3Lh!3&=yS5fWL~;1wCZ?)%nmK`Eqgcu)O6rD^3%ijcxL50^z?OI(LaVDvfL0#zjZ
z2?cPvC$QCzpxpt5jMFp05OxhK0F!Q`rPhDi5)y=-0C}
zIM~ku&S@pl1&0=jl+rlS<4`riV~LC-#pqNde@44MB(j%)On$0Ko(@q?4`1?4149Z_
zZi!5aU@2vM$dHR6WSZpj+VboK+>u-CbNi7*lw4K^ZxxM#24_Yc`jvb9NPVi75L+MlM^U~`;a7`4H0L|TYK>%hfEfXLsu1JGM
zbh|8{wuc7ucV+`Ys1kqxsj`dajwyM;^X^`)#<+a~$WFy8b2t_RS{8yNYKKlnv+>vB
zX(QTf$kqrJ;%I@EwEs{cIcH@Z3|#^S@M+5jsP<^`@8^I4_8MlBb`~cE^n+{{;qW2q
z=p1=&+fUo%T{GhVX@;56kH8K_%?X=;$OTYqW1L*)hzelm^$*?_K;9JyIWhsn4SK(|
zSmXLTUE8VQX{se#8#Rj*lz`xHtT<61V~fb;WZUpu(M)f#;I+2_zR+)y5Jv?l`CxAinx|EY!`IJ*x9_gf_k&Gx2alL!hK
zUWj1T_pk|?iv}4EP#PZvYD_-LpzU!NfcLL%fK&r$W8O1KH9c2&GV~N#T$kaXGvAOl)|T
zuF9%6(i=Y3q?X%VK-D2YIYFPH3f|g$TrXW->&^Ab`WT
z7>Oo!u1u40?jAJ8Hy`bv}qbgs8)cF0&qeVjD?e+3Ggn1Im>K77ZSpbU*08
zfZkIFcv?y)!*B{|>nx@cE{KoutP+seQU?bCGE`tS0GKUO3PN~t=2u7q_6$l;uw^4c
zVu^f{uaqsZ{*a-N?2B8ngrLS8E&s6}Xtv9rR9C^b`@q8*iH)pFzf1|kCfiLw6u{Z%aC
z!X^5CzF6qofFJgklJV3oc|Qc2XdFl+y5M9*P8}A>Kh{
zWRgRwMSZ(?Jw;m%0etU5BsWT-Dj-5F;Q$OQJrQd+lv`i6>MhVo^p*^w6{~=fhe|bN
z*37oV0kji)4an^%3ABbg5RC;CS50@PV5_hKfXjYx+(DqQdKC^JIEMo6X66$qDdLRc
z!YJPSKnbY`#Ht6`g@xGzJmKzzn|abYbP+_Q(v?~~
z96%cd{E0BCsH^0HaWt{y(Cuto4VE7jhB1Z??#UaU(*R&Eo+J`UN+8mcb51F|I|n*J
zJCZ3R*OdyeS9hWkc_mA7-br>3Tw=CX2bl(=TpVt#WP8Bg^vE_9bP&6ccAf3lFMgr`
z{3=h@?Ftb$RTe&@IQtiJfV;O&4fzh)e1>7seG;
z=%mA4@c7{aXeJnhEg2J@Bm;=)j=O=cl#^NNkQ<{r;Bm|8Hg}bJ-S^g4`|itx)~!LN
zXtL}?f1Hs6UQ+f0-X6&TBCW=A4>bU0{rv8C4T!(wD-h>VCK4YJk`6C9$by!fxOYw-
zV#n+0{E(0ttq_#16B}
ze8$E#X9o{B!0vbq#WUwmv5Xz6{(!^~+}sBW{xctdNHL4^vDk!0E}(g|W_q;jR|ZK<
z8w>H-8G{%R#%f!E7cO_^B?yFRKLOH)RT9GJsb+kAKq~}WIF)NRLwKZ^Q;>!2MNa|}
z-mh?=B;*&D{Nd-mQRcfVnHkChI=DRHU4ga%xJ%+QkBd|-d9uRI76@BT(bjsjwS+r)
zvx=lGNLv1?SzZ;P)Gnn>04fO7Culg*?LmbEF0fATG8S@)oJ>NT3pYAXa*vX!eUTDF
ziBrp(QyDqr0ZMTr?4uG_Nqs6f%S0g?h`1vO5fo=5S&u#wI2d4+3hWiolEU!=3_oFo
zfie?+4W#`;1dd#X@g9Yj<53S<6OB!TM8w8})7k-$&q5(smc%;r
z(BlXkTp`C47+%4JA{2X}MIaPbVF!35P#p;u7+fR*46{T+LR8+j25oduCfDzDv6R-hU{TVVo9fz?^N3ShMt!t0NsH)pB
zRK8-S{Dn*y3b|k^*?_B70<2gHt==l7c&cT>r`C#{S}J2;s#d{M)ncW(#Y$C*lByLQ
z&?+{dR7*gpdT~(1;M(FfF==3z`^eW)=5a9RqvF-)2?S-(G
zhS;p(u~_qBum*q}On@$#08}ynd0+spzyVco0%G6;<-i5&016cV5UKzhQ~)fX03|>L
z8ej+HzzgVr6_5ZUpa4HW0Ca!=r1%*}Oo;2no&Zz8DfR)L!@r<5
z2viSZpmvo5XqXyAz{Ms7`7kX>fnr1gi4X~7KpznRT0{Xc5Cfz@43PjBMBoH@z_{~(
z(Wd}IPJ9hH+%)Fc)0!hrV+(A;76rhtI|YHbEDeERV~Ya>SQg^IvlazFkSK(KG9&{q
zkPIR~EeQaaBmwA<20}mBO?)N$(z1@p)5?%}rM|
zGF()~Z&Kx@OIDRI$d0T8;JX@vj3^2%pd_+@l9~a4lntZ;AvUIjqIZbuNTR6@hNJoV
zk4F;ut)LN4ARuyn2M6F~eg-e#UH%2P;8uPGFW^vq1vj8mdIayFOZo(tphk8C7hpT~
z1Fv8?b_LNR3QD9J+!v=p%}#
+
+
\ No newline at end of file
diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.ttf b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b
GIT binary patch
literal 45404
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