From 9001e4656ef98a2db76c25ddb149cea9ae197864 Mon Sep 17 00:00:00 2001 From: GiacomoHome Date: Fri, 17 Sep 2021 12:41:45 +0200 Subject: [PATCH] Initial Commit --- .cpanel.yml | 25 + .gitignore | 24 + .htaccess | 26 + application/Bootstrap.php | 231 ++ application/configs/application.ini | 31 + application/configs/config.ini | 17 + application/configs/dati_aziendali.json | 6 + application/configs/enviroment.ini | 26 + application/configs/parametri_sito.json | 5 + .../Admin/Index/Emailtemplate.php | 38 + .../Admin/Index/Generic.php | 38 + .../Monitoring/Index/Accesslog.php | 53 + .../Monitoring/Index/Errorlog.php | 60 + .../forms/Admin/Index/EmailTemplate/Add.php | 52 + application/forms/Admin/Index/Users/Add.php | 111 + .../forms/Default/Index/Auth/Login.php | 29 + .../forms/Default/Index/Auth/ResetPw.php | 24 + application/forms/V1/Test/Add.php | 31 + application/layouts/scripts/admin.phtml | 173 ++ .../scripts/admin/_contentHeaderAdmin.phtml | 21 + .../layouts/scripts/admin/_footerAdmin.phtml | 10 + .../layouts/scripts/admin/_navbarAdmin.phtml | 61 + .../layouts/scripts/admin/_sidebarAdmin.phtml | 52 + .../scripts/admin/_sidebarMonitoring.phtml | 52 + .../scripts/admin/baseSection/_default.phtml | 49 + .../admin/baseSection/_loginPage.phtml | 72 + .../admin/baseSection/_resetPage.phtml | 100 + application/layouts/scripts/layout.phtml | 83 + application/layouts/scripts/layout_old.phtml | 103 + .../layouts/scripts/public/_devBanner.phtml | 15 + .../layouts/scripts/public/_footer.phtml | 143 + .../layouts/scripts/public/_header.phtml | 55 + .../scripts/public/_privacyPolicy.phtml | 60 + application/models/FcmFirebase.php | 35 + application/models/Generic.php | 17 + application/models/MongoResources/Generic.php | 13 + application/models/Resources/Abstract.php | 13 + application/models/Resources/Accesslog.php | 12 + .../models/Resources/EmailTemplate.php | 14 + application/models/Resources/Errorlog.php | 23 + application/models/Resources/Users.php | 15 + .../models/Resources/VariabiliSito.php | 13 + application/models/Rest.php | 9 + application/models/RestResources/Generic.php | 32 + application/modules/admin/Bootstrap.php | 29 + .../admin/controllers/ErrorController.php | 64 + .../admin/controllers/IndexController.php | 280 ++ .../admin/views/scripts/error/error.phtml | 36 + .../views/scripts/index/_paginator.phtml | 47 + .../admin/views/scripts/index/dashboard.phtml | 20 + .../scripts/index/emailtemplate/_modal.phtml | 125 + .../index/emailtemplate/_modalFilter.phtml | 95 + .../index/emailtemplate/_searchBlock.phtml | 23 + .../scripts/index/emailtemplate/list.phtml | 170 ++ .../scripts/index/emailtemplate/td.phtml | 28 + .../scripts/index/emailtemplate/th.phtml | 17 + .../admin/views/scripts/index/index.phtml | 0 .../admin/views/scripts/index/settings.phtml | 59 + .../scripts/index/settings_tabs/accesso.phtml | 52 + .../index/settings_tabs/generali.phtml | 150 + .../scripts/index/settings_tabs/sito.phtml | 43 + .../scripts/index/settings_tabs/test.phtml | 54 + application/modules/auth/Bootstrap.php | 13 + .../auth/controllers/IndexController.php | 141 + application/modules/default/Bootstrap.php | 42 + .../default/controllers/ErrorController.php | 194 ++ .../default/controllers/IndexController.php | 436 +++ .../controllers/ServicesController.php | 73 + .../default/views/scripts/error/error.phtml | 34 + .../views/scripts/index/acquista.phtml | 365 +++ .../views/scripts/index/assistenza.phtml | 269 ++ .../views/scripts/index/caratteristiche.phtml | 578 ++++ .../views/scripts/index/copyright.phtml | 94 + .../scripts/index/downloadsoftware.phtml | 26 + .../default/views/scripts/index/index.phtml | 380 +++ .../default/views/scripts/index/login.phtml | 0 .../default/views/scripts/index/offline.phtml | 71 + .../default/views/scripts/index/privacy.phtml | 0 .../views/scripts/index/resetpassword.phtml | 0 application/modules/monitoring/Bootstrap.php | 29 + .../controllers/IndexController.php | 115 + .../views/scripts/index/_paginator.phtml | 47 + .../scripts/index/accesslog/_modal.phtml | 54 + .../index/accesslog/_searchBlock.phtml | 26 + .../views/scripts/index/accesslog/list.phtml | 170 ++ .../views/scripts/index/accesslog/td.phtml | 41 + .../views/scripts/index/accesslog/th.phtml | 22 + .../views/scripts/index/errorlog/_modal.phtml | 45 + .../scripts/index/errorlog/_searchBlock.phtml | 32 + .../views/scripts/index/errorlog/get.phtml | 63 + .../views/scripts/index/errorlog/list.phtml | 173 ++ .../views/scripts/index/errorlog/td.phtml | 60 + .../views/scripts/index/errorlog/th.phtml | 25 + .../views/scripts/index/index.phtml | 0 .../scripts/index/loginviiemails/_modal.phtml | 45 + .../index/loginviiemails/_searchBlock.phtml | 27 + .../scripts/index/loginviiemails/get.phtml | 64 + .../scripts/index/loginviiemails/list.phtml | 173 ++ .../scripts/index/loginviiemails/td.phtml | 19 + .../scripts/index/loginviiemails/th.phtml | 21 + .../views/scripts/index/partial/notify.phtml | 6 + application/modules/v1/Bootstrap.php | 37 + .../v1/controllers/IndexController.php | 50 + .../v1/controllers/UsersController.php | 48 + composer.json | 16 + index.php | 3 + languages/en/Zend_Validate.php | 269 ++ languages/it/Zend_Validate.php | 269 ++ library/App/Constants/Domains.php | 42 + .../App/Controller/Errors/WebServiceError.php | 53 + library/App/Controller/Plugin/Acl.php | 264 ++ .../App/Controller/Plugin/CPanel/Xmlapi.php | 2470 +++++++++++++++++ .../App/Controller/Plugin/LangSelector.php | 34 + library/App/Controller/Rest/Controller.php | 572 ++++ .../App/Controller/Rest/MongoController.php | 393 +++ .../Controller/Sections/AbstractSection.php | 552 ++++ library/App/Controller/Sections/Section.php | 93 + library/App/Exception/MessageException.php | 28 + .../App/Exception/ResponseCloudException.php | 23 + .../App/Form/Filters/MongoFormatBoolean.php | 13 + .../App/Form/Filters/MongoFormatDatetime.php | 35 + .../App/Form/Filters/MongoFormatTimezone.php | 28 + library/App/Form/Filters/MyBoolean.php | 13 + library/App/Form/Filters/MyFloatNumber.php | 24 + library/App/Form/Filters/MyFormatData.php | 39 + library/App/Form/Filters/MyJsonEncode.php | 13 + .../App/Form/Filters/MySqlsrvFormatData.php | 26 + library/App/Form/Validators/EmailPec.php | 35 + library/App/Form/Validators/InDomain.php | 49 + .../Form/Validators/MongoBooleanRequired.php | 23 + library/App/Form/Validators/MyData.php | 24 + library/App/Form/Validators/Piva.php | 70 + library/App/Model/AbstractGeneric.php | 485 ++++ library/App/Model/AbstractRest.php | 80 + library/App/Model/Acl/Acl.php | 26 + library/App/Model/Acl/AclRestV1.php | 29 + library/App/Model/CurlHttpClient.php | 84 + library/App/Model/FcmFirebase.php | 78 + library/App/Model/Mail.php | 59 + library/App/Model/Mongo/Adapter.php | 75 + library/App/Model/Mongo/Client.php | 254 ++ library/App/Model/Mongo/PaginatorAdapter.php | 41 + library/App/Model/MongoResource/Abstract.php | 115 + library/App/Model/Resource/Abstract.php | 95 + library/App/Model/RestResource/Abstract.php | 220 ++ library/App/PayPal/PayPalApi.php | 147 + library/App/Service/Auth.php | 74 + library/App/Service/CodificaPiva.php | 81 + library/App/Service/ConfigManager.php | 87 + library/App/Service/Cpanel.php | 157 ++ library/App/Service/CpanelApi.php | 263 ++ library/App/Service/Emails.php | 80 + library/App/Service/ExternalApiService.php | 119 + library/App/Service/FatturaElettronica.php | 345 +++ library/App/Service/FeAuthInfo.php | 94 + library/App/Service/IpManager.php | 73 + library/App/Service/JsonConfiguration.php | 107 + library/App/Service/NotifyError.php | 89 + library/App/Service/RsaCryptor.php | 47 + library/App/Service/SoapFeInviate.php | 81 + library/App/Service/V1Auth.php | 80 + library/App/Service/VariabiliSito.php | 89 + library/App/Service/WebServiceV1Auth.php | 111 + library/App/Stripe/StripeApi.php | 107 + library/Helpers/Action/Base64Image.php | 60 + library/Helpers/Action/CalcUtility.php | 18 + library/Helpers/Action/Currency.php | 15 + library/Helpers/Action/Docsmaker.php | 178 ++ library/Helpers/Action/Email.php | 222 ++ library/Helpers/Action/ExtractData.php | 253 ++ library/Helpers/Action/FilterFunctions.php | 249 ++ library/Helpers/Action/FormatData.php | 11 + library/Helpers/Action/Globalfunction.php | 228 ++ library/Helpers/Action/Image.php | 245 ++ library/Helpers/Action/MongoDateFunctions.php | 38 + .../Helpers/Action/MongoFilterFunctions.php | 255 ++ library/Helpers/Action/Pdf.php | 152 + library/Helpers/View/AddressFormat.php | 33 + library/Helpers/View/AllowedIp.php | 16 + library/Helpers/View/AuthInfo.php | 33 + library/Helpers/View/CleanFiltersParam.php | 34 + library/Helpers/View/Config.php | 18 + library/Helpers/View/Currency.php | 12 + library/Helpers/View/EncodeText.php | 17 + library/Helpers/View/ExtractData.php | 66 + library/Helpers/View/FormatData.php | 10 + library/Helpers/View/GetDomainData.php | 24 + library/Helpers/View/MatchUrl.php | 20 + library/Helpers/View/SlashesText.php | 17 + library/Helpers/View/VariabiliSito.php | 18 + library/Helpers/View/WrapText.php | 121 + log/log.txt | 0 public/.htaccess | 6 + public/admin/css/custom.css | 1198 ++++++++ public/admin/css/custom.css.map | 1 + public/admin/css/custom.min.css | 1 + public/admin/img/admin.png | Bin 0 -> 4592 bytes public/admin/img/admin.svg | 1 + public/admin/img/icons.svg | 1 + public/admin/img/user.svg | 110 + .../js/angularjs/angularGlobalFunctions.js | 67 + public/admin/js/angularjs/app.js | 1000 +++++++ public/admin/js/angularjs/dashboard.module.js | 82 + public/admin/js/angularjs/model.js | 271 ++ public/admin/js/globalfunctions.js | 565 ++++ .../handler/admin/event_handler_dashboard.js | 3 + .../handler/admin/event_handler_listemails.js | 177 ++ .../admin/event_handler_listemailtemplate.js | 181 ++ .../handler/admin/event_handler_settings.js | 97 + .../js/handler/default/event_handler_login.js | 7 + .../monitoring/event_handler_listaccesslog.js | 177 ++ .../monitoring/event_handler_listerrorlog.js | 316 +++ .../event_handler_listloginviiemails.js | 114 + public/admin/package.json | 26 + public/admin/scss/accent.scss | 14 + public/admin/scss/cards.scss | 95 + public/admin/scss/forms.scss | 168 ++ public/admin/scss/general.scss | 448 +++ public/admin/scss/index.scss | 33 + public/admin/scss/listPage.scss | 82 + public/admin/scss/loaders.scss | 0 public/admin/scss/loginPage.scss | 23 + public/admin/scss/modal_e_tabs.scss | 81 + public/admin/scss/navbar.scss | 9 + public/admin/scss/select2.scss | 14 + public/admin/scss/settingsPage.scss | 22 + public/admin/scss/sidebar.scss | 9 + public/admin/scss/sw-icons.scss | 14 + public/admin/scss/table.scss | 215 ++ public/admin/scss/variables.scss | 3 + public/baseImg/NoImage.png | Bin 0 -> 2888 bytes public/baseImg/logo.png | Bin 0 -> 9548 bytes public/baseImg/logo_as.png | Bin 0 -> 9318 bytes public/baseImg/logo_as_full.png | Bin 0 -> 294106 bytes public/baseImg/logo_as_medium.png | Bin 0 -> 17205 bytes public/baseImg/logo_small.png | Bin 0 -> 12197 bytes public/baseImg/no_logo.png | Bin 0 -> 1957 bytes public/favicons/android-icon-144x144.png | Bin 0 -> 7396 bytes public/favicons/android-icon-192x192.png | Bin 0 -> 9318 bytes public/favicons/android-icon-36x36.png | Bin 0 -> 1921 bytes public/favicons/android-icon-48x48.png | Bin 0 -> 2451 bytes public/favicons/android-icon-72x72.png | Bin 0 -> 3454 bytes public/favicons/android-icon-96x96.png | Bin 0 -> 4592 bytes public/favicons/apple-icon-114x114.png | Bin 0 -> 5632 bytes public/favicons/apple-icon-120x120.png | Bin 0 -> 5941 bytes public/favicons/apple-icon-144x144.png | Bin 0 -> 7396 bytes public/favicons/apple-icon-152x152.png | Bin 0 -> 7815 bytes public/favicons/apple-icon-180x180.png | Bin 0 -> 9642 bytes public/favicons/apple-icon-57x57.png | Bin 0 -> 2812 bytes public/favicons/apple-icon-60x60.png | Bin 0 -> 2899 bytes public/favicons/apple-icon-72x72.png | Bin 0 -> 3454 bytes public/favicons/apple-icon-76x76.png | Bin 0 -> 3578 bytes public/favicons/apple-icon-precomposed.png | Bin 0 -> 9892 bytes public/favicons/apple-icon.png | Bin 0 -> 9892 bytes public/favicons/browserconfig.xml | 2 + public/favicons/favicon-16x16.png | Bin 0 -> 1465 bytes public/favicons/favicon-32x32.png | Bin 0 -> 1730 bytes public/favicons/favicon-96x96.png | Bin 0 -> 4592 bytes public/favicons/favicon.ico | Bin 0 -> 1150 bytes public/favicons/manifest.json | 41 + public/favicons/ms-icon-144x144.png | Bin 0 -> 7396 bytes public/favicons/ms-icon-150x150.png | Bin 0 -> 7783 bytes public/favicons/ms-icon-310x310.png | Bin 0 -> 20573 bytes public/favicons/ms-icon-70x70.png | Bin 0 -> 3329 bytes public/front/assets/css/libs.bundle.css | 12 + public/front/assets/css/libs.bundle.css.map | 1 + public/front/assets/css/theme.bundle.css | 7 + public/front/assets/css/theme.bundle.css.map | 1 + public/front/assets/fonts/Feather/Feather.svg | 276 ++ public/front/assets/fonts/Feather/Feather.ttf | Bin 0 -> 65112 bytes .../front/assets/fonts/Feather/Feather.woff | Bin 0 -> 65188 bytes .../HK Grotesk Pro/HKGroteskPro-Bold.otf | Bin 0 -> 90304 bytes .../HK Grotesk Pro/HKGroteskPro-Bold.woff | Bin 0 -> 41856 bytes .../HK Grotesk Pro/HKGroteskPro-Bold.woff2 | Bin 0 -> 38400 bytes .../HKGroteskPro-BoldItalic.otf | Bin 0 -> 89816 bytes .../HKGroteskPro-BoldItalic.woff | Bin 0 -> 44272 bytes .../HKGroteskPro-BoldItalic.woff2 | Bin 0 -> 40792 bytes .../HK Grotesk Pro/HKGroteskPro-Book.otf | Bin 0 -> 91384 bytes .../HK Grotesk Pro/HKGroteskPro-Book.woff | Bin 0 -> 42184 bytes .../HK Grotesk Pro/HKGroteskPro-Book.woff2 | Bin 0 -> 38972 bytes .../HKGroteskPro-BookItalic.otf | Bin 0 -> 93676 bytes .../HKGroteskPro-BookItalic.woff | Bin 0 -> 45048 bytes .../HKGroteskPro-BookItalic.woff2 | Bin 0 -> 41588 bytes .../HKGroteskPro-ExtraLight.otf | Bin 0 -> 89248 bytes .../HKGroteskPro-ExtraLight.woff | Bin 0 -> 41784 bytes .../HKGroteskPro-ExtraLight.woff2 | Bin 0 -> 38488 bytes .../HKGroteskPro-ExtraLightItalic.otf | Bin 0 -> 92352 bytes .../HKGroteskPro-ExtraLightItalic.woff | Bin 0 -> 45444 bytes .../HKGroteskPro-ExtraLightItalic.woff2 | Bin 0 -> 41812 bytes .../HK Grotesk Pro/HKGroteskPro-Hairline.otf | Bin 0 -> 86968 bytes .../HK Grotesk Pro/HKGroteskPro-Hairline.woff | Bin 0 -> 37660 bytes .../HKGroteskPro-Hairline.woff2 | Bin 0 -> 34724 bytes .../HKGroteskPro-HairlineItalic.otf | Bin 0 -> 89796 bytes .../HKGroteskPro-HairlineItalic.woff | Bin 0 -> 40992 bytes .../HKGroteskPro-HairlineItalic.woff2 | Bin 0 -> 37932 bytes .../HK Grotesk Pro/HKGroteskPro-Italic.otf | Bin 0 -> 93444 bytes .../HK Grotesk Pro/HKGroteskPro-Italic.woff | Bin 0 -> 45076 bytes .../HK Grotesk Pro/HKGroteskPro-Italic.woff2 | Bin 0 -> 41552 bytes .../HK Grotesk Pro/HKGroteskPro-Light.otf | Bin 0 -> 89296 bytes .../HK Grotesk Pro/HKGroteskPro-Light.woff | Bin 0 -> 42512 bytes .../HK Grotesk Pro/HKGroteskPro-Light.woff2 | Bin 0 -> 39212 bytes .../HKGroteskPro-LightItalic.otf | Bin 0 -> 91932 bytes .../HKGroteskPro-LightItalic.woff | Bin 0 -> 45232 bytes .../HKGroteskPro-LightItalic.woff2 | Bin 0 -> 41844 bytes .../HK Grotesk Pro/HKGroteskPro-Medium.otf | Bin 0 -> 91344 bytes .../HK Grotesk Pro/HKGroteskPro-Medium.woff | Bin 0 -> 42556 bytes .../HK Grotesk Pro/HKGroteskPro-Medium.woff2 | Bin 0 -> 39252 bytes .../HKGroteskPro-MediumItalic.otf | Bin 0 -> 93552 bytes .../HKGroteskPro-MediumItalic.woff | Bin 0 -> 45452 bytes .../HKGroteskPro-MediumItalic.woff2 | Bin 0 -> 41932 bytes .../HK Grotesk Pro/HKGroteskPro-Regular.otf | Bin 0 -> 91252 bytes .../HK Grotesk Pro/HKGroteskPro-Regular.woff | Bin 0 -> 42044 bytes .../HK Grotesk Pro/HKGroteskPro-Regular.woff2 | Bin 0 -> 38644 bytes .../HK Grotesk Pro/HKGroteskPro-SemiBold.otf | Bin 0 -> 92020 bytes .../HK Grotesk Pro/HKGroteskPro-SemiBold.woff | Bin 0 -> 42164 bytes .../HKGroteskPro-SemiBold.woff2 | Bin 0 -> 38988 bytes .../HKGroteskPro-SemiBoldItalic.otf | Bin 0 -> 94008 bytes .../HKGroteskPro-SemiBoldItalic.woff | Bin 0 -> 45024 bytes .../HKGroteskPro-SemiBoldItalic.woff2 | Bin 0 -> 41436 bytes .../HK Grotesk Pro/HKGroteskPro-Thin.otf | Bin 0 -> 89380 bytes .../HK Grotesk Pro/HKGroteskPro-Thin.woff | Bin 0 -> 41304 bytes .../HK Grotesk Pro/HKGroteskPro-Thin.woff2 | Bin 0 -> 37976 bytes .../HKGroteskPro-ThinItalic.otf | Bin 0 -> 92356 bytes .../HKGroteskPro-ThinItalic.woff | Bin 0 -> 44596 bytes .../HKGroteskPro-ThinItalic.woff2 | Bin 0 -> 41160 bytes .../front/assets/img/buttons/button-app.png | Bin 0 -> 21212 bytes .../front/assets/img/buttons/button-play.png | Bin 0 -> 25385 bytes public/front/assets/img/devices/iphonex.png | Bin 0 -> 31814 bytes public/front/assets/img/devices/iphonex.svg | 1 + public/front/assets/img/devices/macbook.png | Bin 0 -> 54814 bytes public/front/assets/img/devices/macbook.svg | 1 + .../assets/img/icons/figma-dark-circle.png | Bin 0 -> 2791 bytes .../img/icons/payment-methods/alipay.svg | 11 + .../assets/img/icons/payment-methods/amex.svg | 12 + .../img/icons/payment-methods/default.svg | 47 + .../img/icons/payment-methods/diners.svg | 13 + .../img/icons/payment-methods/discover.svg | 12 + .../assets/img/icons/payment-methods/elo.svg | 17 + .../img/icons/payment-methods/hipercard.svg | 11 + .../assets/img/icons/payment-methods/jcb.svg | 27 + .../img/icons/payment-methods/maestro-old.svg | 27 + .../img/icons/payment-methods/maestro.svg | 18 + .../icons/payment-methods/mastercard-old.svg | 32 + .../img/icons/payment-methods/mastercard.svg | 18 + .../img/icons/payment-methods/paypal.svg | 18 + .../icons/payment-methods/security-code.svg | 54 + .../img/icons/payment-methods/unionpay.svg | 18 + .../img/icons/payment-methods/verve.svg | 16 + .../assets/img/icons/payment-methods/visa.svg | 88 + .../assets/img/icons/social/facebook.svg | 1 + .../assets/img/icons/social/instagram.svg | 1 + .../assets/img/icons/social/linkedin.svg | 1 + .../assets/img/icons/social/pinterest.svg | 1 + .../front/assets/img/icons/social/twitter.svg | 1 + .../illustrations/illustration-1-cropped.png | Bin 0 -> 67128 bytes .../img/illustrations/illustration-1-dark.png | Bin 0 -> 378239 bytes .../img/illustrations/illustration-1.png | Bin 0 -> 66183 bytes .../img/illustrations/illustration-2.png | Bin 0 -> 105958 bytes .../illustrations/illustration-3-cropped.png | Bin 0 -> 62306 bytes .../img/illustrations/illustration-3.png | Bin 0 -> 101471 bytes .../illustrations/illustration-4-cropped.png | Bin 0 -> 83661 bytes .../img/illustrations/illustration-4.png | Bin 0 -> 144019 bytes .../img/illustrations/illustration-5.png | Bin 0 -> 108399 bytes .../illustrations/illustration-6-cropped.png | Bin 0 -> 67263 bytes .../img/illustrations/illustration-6.png | Bin 0 -> 74080 bytes .../img/illustrations/illustration-7.png | Bin 0 -> 105702 bytes .../img/illustrations/illustration-8.png | Bin 0 -> 79925 bytes .../img/illustrations/illustration-9.png | Bin 0 -> 90742 bytes .../img/masks/avatar-group-hover-last.svg | 1 + .../assets/img/masks/avatar-group-hover.svg | 1 + .../front/assets/img/masks/avatar-group.svg | 1 + .../front/assets/img/masks/avatar-status.svg | 1 + .../front/assets/img/patterns/pattern-1.svg | 1 + .../front/assets/img/patterns/pattern-2.png | Bin 0 -> 10750 bytes .../img/screenshots/desktop/home_screen.png | Bin 0 -> 48712 bytes public/front/assets/js/theme.bundle.js | 2 + public/front/assets/js/theme.bundle.js.map | 1 + public/front/assets/js/vendor.bundle.js | 2 + public/front/assets/js/vendor.bundle.js.map | 1 + public/front/package.json | 49 + public/front/src/fonts/Feather/Feather.svg | 276 ++ public/front/src/fonts/Feather/Feather.ttf | Bin 0 -> 65112 bytes public/front/src/fonts/Feather/Feather.woff | Bin 0 -> 65188 bytes .../HK Grotesk Pro/HKGroteskPro-Bold.otf | Bin 0 -> 90304 bytes .../HK Grotesk Pro/HKGroteskPro-Bold.woff | Bin 0 -> 41856 bytes .../HK Grotesk Pro/HKGroteskPro-Bold.woff2 | Bin 0 -> 38400 bytes .../HKGroteskPro-BoldItalic.otf | Bin 0 -> 89816 bytes .../HKGroteskPro-BoldItalic.woff | Bin 0 -> 44272 bytes .../HKGroteskPro-BoldItalic.woff2 | Bin 0 -> 40792 bytes .../HK Grotesk Pro/HKGroteskPro-Book.otf | Bin 0 -> 91384 bytes .../HK Grotesk Pro/HKGroteskPro-Book.woff | Bin 0 -> 42184 bytes .../HK Grotesk Pro/HKGroteskPro-Book.woff2 | Bin 0 -> 38972 bytes .../HKGroteskPro-BookItalic.otf | Bin 0 -> 93676 bytes .../HKGroteskPro-BookItalic.woff | Bin 0 -> 45048 bytes .../HKGroteskPro-BookItalic.woff2 | Bin 0 -> 41588 bytes .../HKGroteskPro-ExtraLight.otf | Bin 0 -> 89248 bytes .../HKGroteskPro-ExtraLight.woff | Bin 0 -> 41784 bytes .../HKGroteskPro-ExtraLight.woff2 | Bin 0 -> 38488 bytes .../HKGroteskPro-ExtraLightItalic.otf | Bin 0 -> 92352 bytes .../HKGroteskPro-ExtraLightItalic.woff | Bin 0 -> 45444 bytes .../HKGroteskPro-ExtraLightItalic.woff2 | Bin 0 -> 41812 bytes .../HK Grotesk Pro/HKGroteskPro-Hairline.otf | Bin 0 -> 86968 bytes .../HK Grotesk Pro/HKGroteskPro-Hairline.woff | Bin 0 -> 37660 bytes .../HKGroteskPro-Hairline.woff2 | Bin 0 -> 34724 bytes .../HKGroteskPro-HairlineItalic.otf | Bin 0 -> 89796 bytes .../HKGroteskPro-HairlineItalic.woff | Bin 0 -> 40992 bytes .../HKGroteskPro-HairlineItalic.woff2 | Bin 0 -> 37932 bytes .../HK Grotesk Pro/HKGroteskPro-Italic.otf | Bin 0 -> 93444 bytes .../HK Grotesk Pro/HKGroteskPro-Italic.woff | Bin 0 -> 45076 bytes .../HK Grotesk Pro/HKGroteskPro-Italic.woff2 | Bin 0 -> 41552 bytes .../HK Grotesk Pro/HKGroteskPro-Light.otf | Bin 0 -> 89296 bytes .../HK Grotesk Pro/HKGroteskPro-Light.woff | Bin 0 -> 42512 bytes .../HK Grotesk Pro/HKGroteskPro-Light.woff2 | Bin 0 -> 39212 bytes .../HKGroteskPro-LightItalic.otf | Bin 0 -> 91932 bytes .../HKGroteskPro-LightItalic.woff | Bin 0 -> 45232 bytes .../HKGroteskPro-LightItalic.woff2 | Bin 0 -> 41844 bytes .../HK Grotesk Pro/HKGroteskPro-Medium.otf | Bin 0 -> 91344 bytes .../HK Grotesk Pro/HKGroteskPro-Medium.woff | Bin 0 -> 42556 bytes .../HK Grotesk Pro/HKGroteskPro-Medium.woff2 | Bin 0 -> 39252 bytes .../HKGroteskPro-MediumItalic.otf | Bin 0 -> 93552 bytes .../HKGroteskPro-MediumItalic.woff | Bin 0 -> 45452 bytes .../HKGroteskPro-MediumItalic.woff2 | Bin 0 -> 41932 bytes .../HK Grotesk Pro/HKGroteskPro-Regular.otf | Bin 0 -> 91252 bytes .../HK Grotesk Pro/HKGroteskPro-Regular.woff | Bin 0 -> 42044 bytes .../HK Grotesk Pro/HKGroteskPro-Regular.woff2 | Bin 0 -> 38644 bytes .../HK Grotesk Pro/HKGroteskPro-SemiBold.otf | Bin 0 -> 92020 bytes .../HK Grotesk Pro/HKGroteskPro-SemiBold.woff | Bin 0 -> 42164 bytes .../HKGroteskPro-SemiBold.woff2 | Bin 0 -> 38988 bytes .../HKGroteskPro-SemiBoldItalic.otf | Bin 0 -> 94008 bytes .../HKGroteskPro-SemiBoldItalic.woff | Bin 0 -> 45024 bytes .../HKGroteskPro-SemiBoldItalic.woff2 | Bin 0 -> 41436 bytes .../HK Grotesk Pro/HKGroteskPro-Thin.otf | Bin 0 -> 89380 bytes .../HK Grotesk Pro/HKGroteskPro-Thin.woff | Bin 0 -> 41304 bytes .../HK Grotesk Pro/HKGroteskPro-Thin.woff2 | Bin 0 -> 37976 bytes .../HKGroteskPro-ThinItalic.otf | Bin 0 -> 92356 bytes .../HKGroteskPro-ThinItalic.woff | Bin 0 -> 44596 bytes .../HKGroteskPro-ThinItalic.woff2 | Bin 0 -> 41160 bytes public/front/src/img/buttons/button-app.png | Bin 0 -> 21212 bytes public/front/src/img/buttons/button-play.png | Bin 0 -> 25385 bytes public/front/src/img/devices/iphonex.png | Bin 0 -> 31814 bytes public/front/src/img/devices/iphonex.svg | 1 + public/front/src/img/devices/macbook.png | Bin 0 -> 54814 bytes public/front/src/img/devices/macbook.svg | 1 + .../front/src/img/icons/figma-dark-circle.png | Bin 0 -> 2791 bytes .../src/img/icons/payment-methods/alipay.svg | 11 + .../src/img/icons/payment-methods/amex.svg | 12 + .../src/img/icons/payment-methods/default.svg | 47 + .../src/img/icons/payment-methods/diners.svg | 13 + .../img/icons/payment-methods/discover.svg | 12 + .../src/img/icons/payment-methods/elo.svg | 17 + .../img/icons/payment-methods/hipercard.svg | 11 + .../src/img/icons/payment-methods/jcb.svg | 27 + .../img/icons/payment-methods/maestro-old.svg | 27 + .../src/img/icons/payment-methods/maestro.svg | 18 + .../icons/payment-methods/mastercard-old.svg | 32 + .../img/icons/payment-methods/mastercard.svg | 18 + .../src/img/icons/payment-methods/paypal.svg | 18 + .../icons/payment-methods/security-code.svg | 54 + .../img/icons/payment-methods/unionpay.svg | 18 + .../src/img/icons/payment-methods/verve.svg | 16 + .../src/img/icons/payment-methods/visa.svg | 88 + .../front/src/img/icons/social/facebook.svg | 1 + .../front/src/img/icons/social/instagram.svg | 1 + .../front/src/img/icons/social/linkedin.svg | 1 + .../front/src/img/icons/social/pinterest.svg | 1 + public/front/src/img/icons/social/twitter.svg | 1 + .../illustrations/illustration-1-cropped.png | Bin 0 -> 67128 bytes .../img/illustrations/illustration-1-dark.png | Bin 0 -> 378239 bytes .../src/img/illustrations/illustration-1.png | Bin 0 -> 66183 bytes .../src/img/illustrations/illustration-2.png | Bin 0 -> 105958 bytes .../illustrations/illustration-3-cropped.png | Bin 0 -> 62306 bytes .../src/img/illustrations/illustration-3.png | Bin 0 -> 101471 bytes .../illustrations/illustration-4-cropped.png | Bin 0 -> 83661 bytes .../src/img/illustrations/illustration-4.png | Bin 0 -> 144019 bytes .../src/img/illustrations/illustration-5.png | Bin 0 -> 108399 bytes .../illustrations/illustration-6-cropped.png | Bin 0 -> 67263 bytes .../src/img/illustrations/illustration-6.png | Bin 0 -> 74080 bytes .../src/img/illustrations/illustration-7.png | Bin 0 -> 105702 bytes .../src/img/illustrations/illustration-8.png | Bin 0 -> 79925 bytes .../src/img/illustrations/illustration-9.png | Bin 0 -> 90742 bytes .../src/img/masks/avatar-group-hover-last.svg | 1 + .../src/img/masks/avatar-group-hover.svg | 1 + public/front/src/img/masks/avatar-group.svg | 1 + public/front/src/img/masks/avatar-status.svg | 1 + public/front/src/img/patterns/pattern-1.svg | 1 + public/front/src/img/patterns/pattern-2.png | Bin 0 -> 10750 bytes .../img/screenshots/desktop/home_screen.png | Bin 0 -> 48712 bytes public/front/src/js/aos.js | 18 + public/front/src/js/bigpicture.js | 30 + public/front/src/js/bootstrap.js | 28 + public/front/src/js/choices.js | 36 + public/front/src/js/countup.js | 37 + public/front/src/js/dropzone.js | 48 + public/front/src/js/flickity.js | 4 + public/front/src/js/highlight.js | 21 + public/front/src/js/isotope.js | 36 + public/front/src/js/jarallax.js | 22 + public/front/src/js/map.js | 29 + public/front/src/js/modal.js | 19 + public/front/src/js/navbar-dropdown.js | 73 + public/front/src/js/navbar.js | 72 + public/front/src/js/popover.js | 12 + public/front/src/js/pricing.js | 32 + public/front/src/js/quill.js | 40 + public/front/src/js/smooth-scroll.js | 24 + public/front/src/js/theme.js | 31 + public/front/src/js/tooltip.js | 12 + public/front/src/js/typed.js | 29 + public/front/src/js/user.js | 4 + public/front/src/scss/_user-variables.scss | 8 + public/front/src/scss/_user.scss | 12 + public/front/src/scss/libs.scss | 5 + public/front/src/scss/theme.scss | 25 + public/front/src/scss/theme/_accordion.scss | 24 + public/front/src/scss/theme/_alert.scss | 22 + public/front/src/scss/theme/_avatar.scss | 202 ++ public/front/src/scss/theme/_badge.scss | 115 + public/front/src/scss/theme/_breadcrumb.scss | 35 + public/front/src/scss/theme/_buttons.scss | 175 ++ public/front/src/scss/theme/_card.scss | 282 ++ public/front/src/scss/theme/_close.scss | 11 + public/front/src/scss/theme/_device.scss | 103 + public/front/src/scss/theme/_dropdown.scss | 111 + public/front/src/scss/theme/_footer.scss | 10 + public/front/src/scss/theme/_forms.scss | 6 + public/front/src/scss/theme/_functions.scss | 13 + public/front/src/scss/theme/_grid.scss | 15 + public/front/src/scss/theme/_icon.scss | 53 + public/front/src/scss/theme/_images.scss | 32 + public/front/src/scss/theme/_list-group.scss | 22 + public/front/src/scss/theme/_list.scss | 27 + public/front/src/scss/theme/_mixins.scss | 8 + public/front/src/scss/theme/_modal.scss | 18 + public/front/src/scss/theme/_navbar.scss | 394 +++ public/front/src/scss/theme/_pagination.scss | 34 + public/front/src/scss/theme/_popover.scss | 15 + public/front/src/scss/theme/_reboot.scss | 14 + public/front/src/scss/theme/_screenshot.scss | 9 + public/front/src/scss/theme/_section.scss | 19 + public/front/src/scss/theme/_shapes.scss | 188 ++ public/front/src/scss/theme/_sidenav.scss | 28 + public/front/src/scss/theme/_tables.scss | 14 + public/front/src/scss/theme/_theme.scss | 36 + public/front/src/scss/theme/_type.scss | 193 ++ public/front/src/scss/theme/_utilities.scss | 13 + public/front/src/scss/theme/_variables.scss | 1019 +++++++ public/front/src/scss/theme/_vendor.scss | 8 + .../scss/theme/forms/_floating-labels.scss | 14 + .../src/scss/theme/forms/_form-check.scss | 57 + .../src/scss/theme/forms/_form-control.scss | 32 + .../src/scss/theme/forms/_form-group.scss | 8 + .../src/scss/theme/forms/_form-select.scss | 15 + .../src/scss/theme/forms/_input-group.scss | 18 + .../front/src/scss/theme/forms/_leftover.scss | 10 + .../front/src/scss/theme/mixins/_badge.scss | 15 + .../front/src/scss/theme/mixins/_buttons.scss | 19 + .../front/src/scss/theme/mixins/_overlay.scss | 24 + .../src/scss/theme/utilities/_background.scss | 52 + .../src/scss/theme/utilities/_images.scss | 35 + .../front/src/scss/theme/utilities/_lift.scss | 20 + .../src/scss/theme/utilities/_overlay.scss | 49 + .../src/scss/theme/utilities/_position.scss | 10 + .../src/scss/theme/utilities/_shadows.scss | 8 + .../src/scss/theme/utilities/_sizing.scss | 18 + .../front/src/scss/theme/utilities/_type.scss | 14 + public/front/webpack.config.js | 132 + public/index.php | 61 + robots.txt | 7 + rsa/private_key.pem | 27 + rsa/public_key.pub | 9 + 570 files changed, 31013 insertions(+) create mode 100644 .cpanel.yml create mode 100644 .gitignore create mode 100644 .htaccess create mode 100644 application/Bootstrap.php create mode 100644 application/configs/application.ini create mode 100644 application/configs/config.ini create mode 100644 application/configs/dati_aziendali.json create mode 100644 application/configs/enviroment.ini create mode 100644 application/configs/parametri_sito.json create mode 100644 application/controllerSections/Admin/Index/Emailtemplate.php create mode 100644 application/controllerSections/Admin/Index/Generic.php create mode 100644 application/controllerSections/Monitoring/Index/Accesslog.php create mode 100644 application/controllerSections/Monitoring/Index/Errorlog.php create mode 100644 application/forms/Admin/Index/EmailTemplate/Add.php create mode 100644 application/forms/Admin/Index/Users/Add.php create mode 100644 application/forms/Default/Index/Auth/Login.php create mode 100644 application/forms/Default/Index/Auth/ResetPw.php create mode 100644 application/forms/V1/Test/Add.php create mode 100644 application/layouts/scripts/admin.phtml create mode 100644 application/layouts/scripts/admin/_contentHeaderAdmin.phtml create mode 100644 application/layouts/scripts/admin/_footerAdmin.phtml create mode 100644 application/layouts/scripts/admin/_navbarAdmin.phtml create mode 100644 application/layouts/scripts/admin/_sidebarAdmin.phtml create mode 100644 application/layouts/scripts/admin/_sidebarMonitoring.phtml create mode 100644 application/layouts/scripts/admin/baseSection/_default.phtml create mode 100644 application/layouts/scripts/admin/baseSection/_loginPage.phtml create mode 100644 application/layouts/scripts/admin/baseSection/_resetPage.phtml create mode 100644 application/layouts/scripts/layout.phtml create mode 100644 application/layouts/scripts/layout_old.phtml create mode 100644 application/layouts/scripts/public/_devBanner.phtml create mode 100644 application/layouts/scripts/public/_footer.phtml create mode 100644 application/layouts/scripts/public/_header.phtml create mode 100644 application/layouts/scripts/public/_privacyPolicy.phtml create mode 100644 application/models/FcmFirebase.php create mode 100644 application/models/Generic.php create mode 100644 application/models/MongoResources/Generic.php create mode 100644 application/models/Resources/Abstract.php create mode 100644 application/models/Resources/Accesslog.php create mode 100644 application/models/Resources/EmailTemplate.php create mode 100644 application/models/Resources/Errorlog.php create mode 100644 application/models/Resources/Users.php create mode 100644 application/models/Resources/VariabiliSito.php create mode 100644 application/models/Rest.php create mode 100644 application/models/RestResources/Generic.php create mode 100644 application/modules/admin/Bootstrap.php create mode 100644 application/modules/admin/controllers/ErrorController.php create mode 100644 application/modules/admin/controllers/IndexController.php create mode 100644 application/modules/admin/views/scripts/error/error.phtml create mode 100644 application/modules/admin/views/scripts/index/_paginator.phtml create mode 100644 application/modules/admin/views/scripts/index/dashboard.phtml create mode 100644 application/modules/admin/views/scripts/index/emailtemplate/_modal.phtml create mode 100644 application/modules/admin/views/scripts/index/emailtemplate/_modalFilter.phtml create mode 100644 application/modules/admin/views/scripts/index/emailtemplate/_searchBlock.phtml create mode 100644 application/modules/admin/views/scripts/index/emailtemplate/list.phtml create mode 100644 application/modules/admin/views/scripts/index/emailtemplate/td.phtml create mode 100644 application/modules/admin/views/scripts/index/emailtemplate/th.phtml create mode 100644 application/modules/admin/views/scripts/index/index.phtml create mode 100644 application/modules/admin/views/scripts/index/settings.phtml create mode 100644 application/modules/admin/views/scripts/index/settings_tabs/accesso.phtml create mode 100644 application/modules/admin/views/scripts/index/settings_tabs/generali.phtml create mode 100644 application/modules/admin/views/scripts/index/settings_tabs/sito.phtml create mode 100644 application/modules/admin/views/scripts/index/settings_tabs/test.phtml create mode 100644 application/modules/auth/Bootstrap.php create mode 100644 application/modules/auth/controllers/IndexController.php create mode 100644 application/modules/default/Bootstrap.php create mode 100644 application/modules/default/controllers/ErrorController.php create mode 100644 application/modules/default/controllers/IndexController.php create mode 100644 application/modules/default/controllers/ServicesController.php create mode 100644 application/modules/default/views/scripts/error/error.phtml create mode 100644 application/modules/default/views/scripts/index/acquista.phtml create mode 100644 application/modules/default/views/scripts/index/assistenza.phtml create mode 100644 application/modules/default/views/scripts/index/caratteristiche.phtml create mode 100644 application/modules/default/views/scripts/index/copyright.phtml create mode 100644 application/modules/default/views/scripts/index/downloadsoftware.phtml create mode 100644 application/modules/default/views/scripts/index/index.phtml create mode 100644 application/modules/default/views/scripts/index/login.phtml create mode 100644 application/modules/default/views/scripts/index/offline.phtml create mode 100644 application/modules/default/views/scripts/index/privacy.phtml create mode 100644 application/modules/default/views/scripts/index/resetpassword.phtml create mode 100644 application/modules/monitoring/Bootstrap.php create mode 100644 application/modules/monitoring/controllers/IndexController.php create mode 100644 application/modules/monitoring/views/scripts/index/_paginator.phtml create mode 100644 application/modules/monitoring/views/scripts/index/accesslog/_modal.phtml create mode 100644 application/modules/monitoring/views/scripts/index/accesslog/_searchBlock.phtml create mode 100644 application/modules/monitoring/views/scripts/index/accesslog/list.phtml create mode 100644 application/modules/monitoring/views/scripts/index/accesslog/td.phtml create mode 100644 application/modules/monitoring/views/scripts/index/accesslog/th.phtml create mode 100644 application/modules/monitoring/views/scripts/index/errorlog/_modal.phtml create mode 100644 application/modules/monitoring/views/scripts/index/errorlog/_searchBlock.phtml create mode 100644 application/modules/monitoring/views/scripts/index/errorlog/get.phtml create mode 100644 application/modules/monitoring/views/scripts/index/errorlog/list.phtml create mode 100644 application/modules/monitoring/views/scripts/index/errorlog/td.phtml create mode 100644 application/modules/monitoring/views/scripts/index/errorlog/th.phtml create mode 100644 application/modules/monitoring/views/scripts/index/index.phtml create mode 100644 application/modules/monitoring/views/scripts/index/loginviiemails/_modal.phtml create mode 100644 application/modules/monitoring/views/scripts/index/loginviiemails/_searchBlock.phtml create mode 100644 application/modules/monitoring/views/scripts/index/loginviiemails/get.phtml create mode 100644 application/modules/monitoring/views/scripts/index/loginviiemails/list.phtml create mode 100644 application/modules/monitoring/views/scripts/index/loginviiemails/td.phtml create mode 100644 application/modules/monitoring/views/scripts/index/loginviiemails/th.phtml create mode 100644 application/modules/monitoring/views/scripts/index/partial/notify.phtml create mode 100644 application/modules/v1/Bootstrap.php create mode 100644 application/modules/v1/controllers/IndexController.php create mode 100644 application/modules/v1/controllers/UsersController.php create mode 100644 composer.json create mode 100644 index.php create mode 100644 languages/en/Zend_Validate.php create mode 100644 languages/it/Zend_Validate.php create mode 100644 library/App/Constants/Domains.php create mode 100644 library/App/Controller/Errors/WebServiceError.php create mode 100644 library/App/Controller/Plugin/Acl.php create mode 100644 library/App/Controller/Plugin/CPanel/Xmlapi.php create mode 100644 library/App/Controller/Plugin/LangSelector.php create mode 100644 library/App/Controller/Rest/Controller.php create mode 100644 library/App/Controller/Rest/MongoController.php create mode 100644 library/App/Controller/Sections/AbstractSection.php create mode 100644 library/App/Controller/Sections/Section.php create mode 100644 library/App/Exception/MessageException.php create mode 100644 library/App/Exception/ResponseCloudException.php create mode 100644 library/App/Form/Filters/MongoFormatBoolean.php create mode 100644 library/App/Form/Filters/MongoFormatDatetime.php create mode 100644 library/App/Form/Filters/MongoFormatTimezone.php create mode 100644 library/App/Form/Filters/MyBoolean.php create mode 100644 library/App/Form/Filters/MyFloatNumber.php create mode 100644 library/App/Form/Filters/MyFormatData.php create mode 100644 library/App/Form/Filters/MyJsonEncode.php create mode 100644 library/App/Form/Filters/MySqlsrvFormatData.php create mode 100644 library/App/Form/Validators/EmailPec.php create mode 100644 library/App/Form/Validators/InDomain.php create mode 100644 library/App/Form/Validators/MongoBooleanRequired.php create mode 100644 library/App/Form/Validators/MyData.php create mode 100644 library/App/Form/Validators/Piva.php create mode 100644 library/App/Model/AbstractGeneric.php create mode 100644 library/App/Model/AbstractRest.php create mode 100644 library/App/Model/Acl/Acl.php create mode 100644 library/App/Model/Acl/AclRestV1.php create mode 100644 library/App/Model/CurlHttpClient.php create mode 100644 library/App/Model/FcmFirebase.php create mode 100644 library/App/Model/Mail.php create mode 100644 library/App/Model/Mongo/Adapter.php create mode 100644 library/App/Model/Mongo/Client.php create mode 100644 library/App/Model/Mongo/PaginatorAdapter.php create mode 100644 library/App/Model/MongoResource/Abstract.php create mode 100644 library/App/Model/Resource/Abstract.php create mode 100644 library/App/Model/RestResource/Abstract.php create mode 100644 library/App/PayPal/PayPalApi.php create mode 100644 library/App/Service/Auth.php create mode 100644 library/App/Service/CodificaPiva.php create mode 100644 library/App/Service/ConfigManager.php create mode 100644 library/App/Service/Cpanel.php create mode 100644 library/App/Service/CpanelApi.php create mode 100644 library/App/Service/Emails.php create mode 100644 library/App/Service/ExternalApiService.php create mode 100644 library/App/Service/FatturaElettronica.php create mode 100644 library/App/Service/FeAuthInfo.php create mode 100644 library/App/Service/IpManager.php create mode 100644 library/App/Service/JsonConfiguration.php create mode 100644 library/App/Service/NotifyError.php create mode 100644 library/App/Service/RsaCryptor.php create mode 100644 library/App/Service/SoapFeInviate.php create mode 100644 library/App/Service/V1Auth.php create mode 100644 library/App/Service/VariabiliSito.php create mode 100644 library/App/Service/WebServiceV1Auth.php create mode 100644 library/App/Stripe/StripeApi.php create mode 100644 library/Helpers/Action/Base64Image.php create mode 100644 library/Helpers/Action/CalcUtility.php create mode 100644 library/Helpers/Action/Currency.php create mode 100644 library/Helpers/Action/Docsmaker.php create mode 100644 library/Helpers/Action/Email.php create mode 100644 library/Helpers/Action/ExtractData.php create mode 100644 library/Helpers/Action/FilterFunctions.php create mode 100644 library/Helpers/Action/FormatData.php create mode 100644 library/Helpers/Action/Globalfunction.php create mode 100644 library/Helpers/Action/Image.php create mode 100644 library/Helpers/Action/MongoDateFunctions.php create mode 100644 library/Helpers/Action/MongoFilterFunctions.php create mode 100644 library/Helpers/Action/Pdf.php create mode 100644 library/Helpers/View/AddressFormat.php create mode 100644 library/Helpers/View/AllowedIp.php create mode 100644 library/Helpers/View/AuthInfo.php create mode 100644 library/Helpers/View/CleanFiltersParam.php create mode 100644 library/Helpers/View/Config.php create mode 100644 library/Helpers/View/Currency.php create mode 100644 library/Helpers/View/EncodeText.php create mode 100644 library/Helpers/View/ExtractData.php create mode 100644 library/Helpers/View/FormatData.php create mode 100644 library/Helpers/View/GetDomainData.php create mode 100644 library/Helpers/View/MatchUrl.php create mode 100644 library/Helpers/View/SlashesText.php create mode 100644 library/Helpers/View/VariabiliSito.php create mode 100644 library/Helpers/View/WrapText.php create mode 100644 log/log.txt create mode 100644 public/.htaccess create mode 100644 public/admin/css/custom.css create mode 100644 public/admin/css/custom.css.map create mode 100644 public/admin/css/custom.min.css create mode 100644 public/admin/img/admin.png create mode 100644 public/admin/img/admin.svg create mode 100644 public/admin/img/icons.svg create mode 100644 public/admin/img/user.svg create mode 100644 public/admin/js/angularjs/angularGlobalFunctions.js create mode 100644 public/admin/js/angularjs/app.js create mode 100644 public/admin/js/angularjs/dashboard.module.js create mode 100644 public/admin/js/angularjs/model.js create mode 100644 public/admin/js/globalfunctions.js create mode 100644 public/admin/js/handler/admin/event_handler_dashboard.js create mode 100644 public/admin/js/handler/admin/event_handler_listemails.js create mode 100644 public/admin/js/handler/admin/event_handler_listemailtemplate.js create mode 100644 public/admin/js/handler/admin/event_handler_settings.js create mode 100644 public/admin/js/handler/default/event_handler_login.js create mode 100644 public/admin/js/handler/monitoring/event_handler_listaccesslog.js create mode 100644 public/admin/js/handler/monitoring/event_handler_listerrorlog.js create mode 100644 public/admin/js/handler/monitoring/event_handler_listloginviiemails.js create mode 100644 public/admin/package.json create mode 100644 public/admin/scss/accent.scss create mode 100644 public/admin/scss/cards.scss create mode 100644 public/admin/scss/forms.scss create mode 100644 public/admin/scss/general.scss create mode 100644 public/admin/scss/index.scss create mode 100644 public/admin/scss/listPage.scss create mode 100644 public/admin/scss/loaders.scss create mode 100644 public/admin/scss/loginPage.scss create mode 100644 public/admin/scss/modal_e_tabs.scss create mode 100644 public/admin/scss/navbar.scss create mode 100644 public/admin/scss/select2.scss create mode 100644 public/admin/scss/settingsPage.scss create mode 100644 public/admin/scss/sidebar.scss create mode 100644 public/admin/scss/sw-icons.scss create mode 100644 public/admin/scss/table.scss create mode 100644 public/admin/scss/variables.scss create mode 100644 public/baseImg/NoImage.png create mode 100644 public/baseImg/logo.png create mode 100644 public/baseImg/logo_as.png create mode 100644 public/baseImg/logo_as_full.png create mode 100644 public/baseImg/logo_as_medium.png create mode 100644 public/baseImg/logo_small.png create mode 100644 public/baseImg/no_logo.png create mode 100644 public/favicons/android-icon-144x144.png create mode 100644 public/favicons/android-icon-192x192.png create mode 100644 public/favicons/android-icon-36x36.png create mode 100644 public/favicons/android-icon-48x48.png create mode 100644 public/favicons/android-icon-72x72.png create mode 100644 public/favicons/android-icon-96x96.png create mode 100644 public/favicons/apple-icon-114x114.png create mode 100644 public/favicons/apple-icon-120x120.png create mode 100644 public/favicons/apple-icon-144x144.png create mode 100644 public/favicons/apple-icon-152x152.png create mode 100644 public/favicons/apple-icon-180x180.png create mode 100644 public/favicons/apple-icon-57x57.png create mode 100644 public/favicons/apple-icon-60x60.png create mode 100644 public/favicons/apple-icon-72x72.png create mode 100644 public/favicons/apple-icon-76x76.png create mode 100644 public/favicons/apple-icon-precomposed.png create mode 100644 public/favicons/apple-icon.png create mode 100644 public/favicons/browserconfig.xml create mode 100644 public/favicons/favicon-16x16.png create mode 100644 public/favicons/favicon-32x32.png create mode 100644 public/favicons/favicon-96x96.png create mode 100644 public/favicons/favicon.ico create mode 100644 public/favicons/manifest.json create mode 100644 public/favicons/ms-icon-144x144.png create mode 100644 public/favicons/ms-icon-150x150.png create mode 100644 public/favicons/ms-icon-310x310.png create mode 100644 public/favicons/ms-icon-70x70.png create mode 100644 public/front/assets/css/libs.bundle.css create mode 100644 public/front/assets/css/libs.bundle.css.map create mode 100644 public/front/assets/css/theme.bundle.css create mode 100644 public/front/assets/css/theme.bundle.css.map create mode 100644 public/front/assets/fonts/Feather/Feather.svg create mode 100644 public/front/assets/fonts/Feather/Feather.ttf create mode 100644 public/front/assets/fonts/Feather/Feather.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Bold.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Bold.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Bold.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-BoldItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-BoldItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-BoldItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Book.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Book.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Book.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-BookItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-BookItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-BookItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLight.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLight.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLight.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLightItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLightItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLightItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Hairline.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Hairline.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Hairline.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-HairlineItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-HairlineItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-HairlineItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Italic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Italic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Italic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Light.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Light.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Light.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-LightItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-LightItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-LightItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Medium.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Medium.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Medium.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-MediumItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-MediumItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-MediumItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Regular.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Regular.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Regular.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-SemiBold.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-SemiBold.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-SemiBold.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-SemiBoldItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-SemiBoldItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-SemiBoldItalic.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Thin.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Thin.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-Thin.woff2 create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ThinItalic.otf create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ThinItalic.woff create mode 100644 public/front/assets/fonts/HK Grotesk Pro/HKGroteskPro-ThinItalic.woff2 create mode 100644 public/front/assets/img/buttons/button-app.png create mode 100644 public/front/assets/img/buttons/button-play.png create mode 100644 public/front/assets/img/devices/iphonex.png create mode 100644 public/front/assets/img/devices/iphonex.svg create mode 100644 public/front/assets/img/devices/macbook.png create mode 100644 public/front/assets/img/devices/macbook.svg create mode 100644 public/front/assets/img/icons/figma-dark-circle.png create mode 100644 public/front/assets/img/icons/payment-methods/alipay.svg create mode 100644 public/front/assets/img/icons/payment-methods/amex.svg create mode 100644 public/front/assets/img/icons/payment-methods/default.svg create mode 100644 public/front/assets/img/icons/payment-methods/diners.svg create mode 100644 public/front/assets/img/icons/payment-methods/discover.svg create mode 100644 public/front/assets/img/icons/payment-methods/elo.svg create mode 100644 public/front/assets/img/icons/payment-methods/hipercard.svg create mode 100644 public/front/assets/img/icons/payment-methods/jcb.svg create mode 100644 public/front/assets/img/icons/payment-methods/maestro-old.svg create mode 100644 public/front/assets/img/icons/payment-methods/maestro.svg create mode 100644 public/front/assets/img/icons/payment-methods/mastercard-old.svg create mode 100644 public/front/assets/img/icons/payment-methods/mastercard.svg create mode 100644 public/front/assets/img/icons/payment-methods/paypal.svg create mode 100644 public/front/assets/img/icons/payment-methods/security-code.svg create mode 100644 public/front/assets/img/icons/payment-methods/unionpay.svg create mode 100644 public/front/assets/img/icons/payment-methods/verve.svg create mode 100644 public/front/assets/img/icons/payment-methods/visa.svg create mode 100644 public/front/assets/img/icons/social/facebook.svg create mode 100644 public/front/assets/img/icons/social/instagram.svg create mode 100644 public/front/assets/img/icons/social/linkedin.svg create mode 100644 public/front/assets/img/icons/social/pinterest.svg create mode 100644 public/front/assets/img/icons/social/twitter.svg create mode 100644 public/front/assets/img/illustrations/illustration-1-cropped.png create mode 100644 public/front/assets/img/illustrations/illustration-1-dark.png create mode 100644 public/front/assets/img/illustrations/illustration-1.png create mode 100644 public/front/assets/img/illustrations/illustration-2.png create mode 100644 public/front/assets/img/illustrations/illustration-3-cropped.png create mode 100644 public/front/assets/img/illustrations/illustration-3.png create mode 100644 public/front/assets/img/illustrations/illustration-4-cropped.png create mode 100644 public/front/assets/img/illustrations/illustration-4.png create mode 100644 public/front/assets/img/illustrations/illustration-5.png create mode 100644 public/front/assets/img/illustrations/illustration-6-cropped.png create mode 100644 public/front/assets/img/illustrations/illustration-6.png create mode 100644 public/front/assets/img/illustrations/illustration-7.png create mode 100644 public/front/assets/img/illustrations/illustration-8.png create mode 100644 public/front/assets/img/illustrations/illustration-9.png create mode 100644 public/front/assets/img/masks/avatar-group-hover-last.svg create mode 100644 public/front/assets/img/masks/avatar-group-hover.svg create mode 100644 public/front/assets/img/masks/avatar-group.svg create mode 100644 public/front/assets/img/masks/avatar-status.svg create mode 100644 public/front/assets/img/patterns/pattern-1.svg create mode 100644 public/front/assets/img/patterns/pattern-2.png create mode 100644 public/front/assets/img/screenshots/desktop/home_screen.png create mode 100644 public/front/assets/js/theme.bundle.js create mode 100644 public/front/assets/js/theme.bundle.js.map create mode 100644 public/front/assets/js/vendor.bundle.js create mode 100644 public/front/assets/js/vendor.bundle.js.map create mode 100644 public/front/package.json create mode 100644 public/front/src/fonts/Feather/Feather.svg create mode 100644 public/front/src/fonts/Feather/Feather.ttf create mode 100644 public/front/src/fonts/Feather/Feather.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Bold.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Bold.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Bold.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-BoldItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-BoldItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-BoldItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Book.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Book.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Book.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-BookItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-BookItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-BookItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLight.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLight.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLight.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLightItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLightItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ExtraLightItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Hairline.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Hairline.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Hairline.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-HairlineItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-HairlineItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-HairlineItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Italic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Italic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Italic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Light.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Light.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Light.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-LightItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-LightItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-LightItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Medium.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Medium.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Medium.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-MediumItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-MediumItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-MediumItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Regular.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Regular.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Regular.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-SemiBold.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-SemiBold.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-SemiBold.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-SemiBoldItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-SemiBoldItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-SemiBoldItalic.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Thin.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Thin.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-Thin.woff2 create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ThinItalic.otf create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ThinItalic.woff create mode 100644 public/front/src/fonts/HK Grotesk Pro/HKGroteskPro-ThinItalic.woff2 create mode 100644 public/front/src/img/buttons/button-app.png create mode 100644 public/front/src/img/buttons/button-play.png create mode 100644 public/front/src/img/devices/iphonex.png create mode 100644 public/front/src/img/devices/iphonex.svg create mode 100644 public/front/src/img/devices/macbook.png create mode 100644 public/front/src/img/devices/macbook.svg create mode 100644 public/front/src/img/icons/figma-dark-circle.png create mode 100644 public/front/src/img/icons/payment-methods/alipay.svg create mode 100644 public/front/src/img/icons/payment-methods/amex.svg create mode 100644 public/front/src/img/icons/payment-methods/default.svg create mode 100644 public/front/src/img/icons/payment-methods/diners.svg create mode 100644 public/front/src/img/icons/payment-methods/discover.svg create mode 100644 public/front/src/img/icons/payment-methods/elo.svg create mode 100644 public/front/src/img/icons/payment-methods/hipercard.svg create mode 100644 public/front/src/img/icons/payment-methods/jcb.svg create mode 100644 public/front/src/img/icons/payment-methods/maestro-old.svg create mode 100644 public/front/src/img/icons/payment-methods/maestro.svg create mode 100644 public/front/src/img/icons/payment-methods/mastercard-old.svg create mode 100644 public/front/src/img/icons/payment-methods/mastercard.svg create mode 100644 public/front/src/img/icons/payment-methods/paypal.svg create mode 100644 public/front/src/img/icons/payment-methods/security-code.svg create mode 100644 public/front/src/img/icons/payment-methods/unionpay.svg create mode 100644 public/front/src/img/icons/payment-methods/verve.svg create mode 100644 public/front/src/img/icons/payment-methods/visa.svg create mode 100644 public/front/src/img/icons/social/facebook.svg create mode 100644 public/front/src/img/icons/social/instagram.svg create mode 100644 public/front/src/img/icons/social/linkedin.svg create mode 100644 public/front/src/img/icons/social/pinterest.svg create mode 100644 public/front/src/img/icons/social/twitter.svg create mode 100644 public/front/src/img/illustrations/illustration-1-cropped.png create mode 100644 public/front/src/img/illustrations/illustration-1-dark.png create mode 100644 public/front/src/img/illustrations/illustration-1.png create mode 100644 public/front/src/img/illustrations/illustration-2.png create mode 100644 public/front/src/img/illustrations/illustration-3-cropped.png create mode 100644 public/front/src/img/illustrations/illustration-3.png create mode 100644 public/front/src/img/illustrations/illustration-4-cropped.png create mode 100644 public/front/src/img/illustrations/illustration-4.png create mode 100644 public/front/src/img/illustrations/illustration-5.png create mode 100644 public/front/src/img/illustrations/illustration-6-cropped.png create mode 100644 public/front/src/img/illustrations/illustration-6.png create mode 100644 public/front/src/img/illustrations/illustration-7.png create mode 100644 public/front/src/img/illustrations/illustration-8.png create mode 100644 public/front/src/img/illustrations/illustration-9.png create mode 100644 public/front/src/img/masks/avatar-group-hover-last.svg create mode 100644 public/front/src/img/masks/avatar-group-hover.svg create mode 100644 public/front/src/img/masks/avatar-group.svg create mode 100644 public/front/src/img/masks/avatar-status.svg create mode 100644 public/front/src/img/patterns/pattern-1.svg create mode 100644 public/front/src/img/patterns/pattern-2.png create mode 100644 public/front/src/img/screenshots/desktop/home_screen.png create mode 100644 public/front/src/js/aos.js create mode 100644 public/front/src/js/bigpicture.js create mode 100644 public/front/src/js/bootstrap.js create mode 100644 public/front/src/js/choices.js create mode 100644 public/front/src/js/countup.js create mode 100644 public/front/src/js/dropzone.js create mode 100644 public/front/src/js/flickity.js create mode 100644 public/front/src/js/highlight.js create mode 100644 public/front/src/js/isotope.js create mode 100644 public/front/src/js/jarallax.js create mode 100644 public/front/src/js/map.js create mode 100644 public/front/src/js/modal.js create mode 100644 public/front/src/js/navbar-dropdown.js create mode 100644 public/front/src/js/navbar.js create mode 100644 public/front/src/js/popover.js create mode 100644 public/front/src/js/pricing.js create mode 100644 public/front/src/js/quill.js create mode 100644 public/front/src/js/smooth-scroll.js create mode 100644 public/front/src/js/theme.js create mode 100644 public/front/src/js/tooltip.js create mode 100644 public/front/src/js/typed.js create mode 100644 public/front/src/js/user.js create mode 100644 public/front/src/scss/_user-variables.scss create mode 100644 public/front/src/scss/_user.scss create mode 100644 public/front/src/scss/libs.scss create mode 100644 public/front/src/scss/theme.scss create mode 100644 public/front/src/scss/theme/_accordion.scss create mode 100644 public/front/src/scss/theme/_alert.scss create mode 100644 public/front/src/scss/theme/_avatar.scss create mode 100644 public/front/src/scss/theme/_badge.scss create mode 100644 public/front/src/scss/theme/_breadcrumb.scss create mode 100644 public/front/src/scss/theme/_buttons.scss create mode 100644 public/front/src/scss/theme/_card.scss create mode 100644 public/front/src/scss/theme/_close.scss create mode 100644 public/front/src/scss/theme/_device.scss create mode 100644 public/front/src/scss/theme/_dropdown.scss create mode 100644 public/front/src/scss/theme/_footer.scss create mode 100644 public/front/src/scss/theme/_forms.scss create mode 100644 public/front/src/scss/theme/_functions.scss create mode 100644 public/front/src/scss/theme/_grid.scss create mode 100644 public/front/src/scss/theme/_icon.scss create mode 100644 public/front/src/scss/theme/_images.scss create mode 100644 public/front/src/scss/theme/_list-group.scss create mode 100644 public/front/src/scss/theme/_list.scss create mode 100644 public/front/src/scss/theme/_mixins.scss create mode 100644 public/front/src/scss/theme/_modal.scss create mode 100644 public/front/src/scss/theme/_navbar.scss create mode 100644 public/front/src/scss/theme/_pagination.scss create mode 100644 public/front/src/scss/theme/_popover.scss create mode 100644 public/front/src/scss/theme/_reboot.scss create mode 100644 public/front/src/scss/theme/_screenshot.scss create mode 100644 public/front/src/scss/theme/_section.scss create mode 100644 public/front/src/scss/theme/_shapes.scss create mode 100644 public/front/src/scss/theme/_sidenav.scss create mode 100644 public/front/src/scss/theme/_tables.scss create mode 100644 public/front/src/scss/theme/_theme.scss create mode 100644 public/front/src/scss/theme/_type.scss create mode 100644 public/front/src/scss/theme/_utilities.scss create mode 100644 public/front/src/scss/theme/_variables.scss create mode 100644 public/front/src/scss/theme/_vendor.scss create mode 100644 public/front/src/scss/theme/forms/_floating-labels.scss create mode 100644 public/front/src/scss/theme/forms/_form-check.scss create mode 100644 public/front/src/scss/theme/forms/_form-control.scss create mode 100644 public/front/src/scss/theme/forms/_form-group.scss create mode 100644 public/front/src/scss/theme/forms/_form-select.scss create mode 100644 public/front/src/scss/theme/forms/_input-group.scss create mode 100644 public/front/src/scss/theme/forms/_leftover.scss create mode 100644 public/front/src/scss/theme/mixins/_badge.scss create mode 100644 public/front/src/scss/theme/mixins/_buttons.scss create mode 100644 public/front/src/scss/theme/mixins/_overlay.scss create mode 100644 public/front/src/scss/theme/utilities/_background.scss create mode 100644 public/front/src/scss/theme/utilities/_images.scss create mode 100644 public/front/src/scss/theme/utilities/_lift.scss create mode 100644 public/front/src/scss/theme/utilities/_overlay.scss create mode 100644 public/front/src/scss/theme/utilities/_position.scss create mode 100644 public/front/src/scss/theme/utilities/_shadows.scss create mode 100644 public/front/src/scss/theme/utilities/_sizing.scss create mode 100644 public/front/src/scss/theme/utilities/_type.scss create mode 100644 public/front/webpack.config.js create mode 100644 public/index.php create mode 100644 robots.txt create mode 100644 rsa/private_key.pem create mode 100644 rsa/public_key.pub diff --git a/.cpanel.yml b/.cpanel.yml new file mode 100644 index 0000000..df9c229 --- /dev/null +++ b/.cpanel.yml @@ -0,0 +1,25 @@ +# --- +# deployment: +# tasks: +# - export DEPLOYPATH=/home/gestionespiaggia/api.fatturab2b.net/ +# - export VENDORPATH=/home/gestionespiaggia/apidev.fatturab2b.net/vendor +# - export ADMIN_NODE_FOLDER=/home/fatturab2bnet/apidev.fatturab2b.net/public/admin/node_modules +# - /bin/rm -rf $DEPLOYPATH/application +# - /bin/cp -R application $DEPLOYPATH +# - /bin/rm -rf $DEPLOYPATH/emailtemplate +# - /bin/cp -R emailtemplate $DEPLOYPATH +# - /bin/rm -rf $DEPLOYPATH/languages +# - /bin/cp -R languages $DEPLOYPATH +# - /bin/rm -rf $DEPLOYPATH/library +# - /bin/cp -R library $DEPLOYPATH +# - /bin/rm -rf $DEPLOYPATH/public +# - /bin/cp -R public $DEPLOYPATH +# - /bin/rm -rf $DEPLOYPATH/rsa +# - /bin/cp -R rsa $DEPLOYPATH +# - /bin/rm $DEPLOYPATH/index.php +# - /bin/cp index.php $DEPLOYPATH +# - /bin/rm $DEPLOYPATH/robots.txt +# - /bin/cp robots.txt $DEPLOYPATH +# - /bin/rm -rf $DEPLOYPATH/vendor +# - /bin/cp -R $VENDORPATH $DEPLOYPATH +# - /bin/cp -R $ADMIN_NODE_FOLDER $DEPLOYPATH/public/admin diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f816dd --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +##### IDEA IGNORED FOLDER ##### +**/.idea +#**/.idea/workspace.xml +#**/.idea/tasks.xml +#.idea/dictionaries +#.idea/vcs.xml +#.idea/jsLibraryMappings.xml +#.idea/**.iws + +##### FOLDER TO IGNORE ##### +backup/bkconfig.json + +**/bower_components +**/node_modules +**/vendor +**/vendordev +**/init_project +**/imgrepo + +package-lock.json +composer.lock +desktop.ini + +/vendor/ diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..3b0cab0 --- /dev/null +++ b/.htaccess @@ -0,0 +1,26 @@ +#Cache Mensile + + Header set Cache-Control "max-age=7200" + + +SetEnv APPLICATION_ENV production +RewriteEngine On + +# RewriteCond %{SERVER_PORT} 80 +# RewriteRule ^(.*)$ https://apidev.fatturab2b.net/$1 [R,L] + +RewriteCond %{HTTP:Authorization} ^(.*) +RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] + +# force https:// for all except some selected URLs +RewriteCond %{HTTPS} off +#RewriteCond %{THE_REQUEST} !/v1/ [NC] +RewriteCond %{THE_REQUEST} !/services/ [NC] +RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] + +RewriteRule ^(application|library|languages|log|vendor|rsa)(/.*)?$ - [F] +RewriteCond %{REQUEST_FILENAME} -s [OR] +RewriteCond %{REQUEST_FILENAME} -l [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^.*$ - [NC,L] +RewriteRule ^.*$ index.php [NC,L] diff --git a/application/Bootstrap.php b/application/Bootstrap.php new file mode 100644 index 0000000..36b9667 --- /dev/null +++ b/application/Bootstrap.php @@ -0,0 +1,231 @@ +bootstrap("frontController"); + // $frontController = Zend_Controller_Front::getInstance(); + $this->_frontController = Zend_Controller_Front::getInstance(); + + // add the REST route for the API module only + $restRoute = new Zend_Rest_Route($this->_frontController, array(), array('v1')); + $this->_frontController->getRouter()->addRoute('rest', $restRoute); + } + + protected function _initDefaultModuleAutoloader() + { + $loader = Zend_Loader_Autoloader::getInstance(); + $loader->registerNamespace('App_'); + + $this->getResourceLoader() + ->addResourceType('modelResource', 'models/resources', 'Resource') + ->addResourceType('controllerSection', 'controllerSections', 'ControllerSection'); + } + + protected function _initEnviromentIni() + { + $this->_enviroments = new Zend_Config_Ini(APPLICATION_PATH . '/configs/enviroment.ini', APPLICATION_ENV); + Zend_Registry::set('ENVIROMENTS', $this->_enviroments); + } + + protected function _initConfigIni() + { + //VARIABILI CONSTANTI PER TUTTO IL DOMINIO + Zend_Registry::set('VARIABILE_VERSION', $this->_enviroments->get('version')); + + $this->_config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/config.ini', null, array('skipExtends' => true, + 'allowModifications' => true)); + Zend_Registry::set('config', $this->_config); + } + + protected function _initLocale() + { + //Detect Browser language + $browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); + $browserLang = ($browserLang != 'it' && $browserLang != 'en') ? 'it' : $browserLang; + + $locale = new Zend_Locale($browserLang); + Zend_Registry::set('Zend_Locale', $locale); + $this->_locale = $locale; + } + + protected function _initLanguage() + { + $localeValue = 'it'; + + $translationPath = dirname(APPLICATION_PATH) . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . $localeValue; + + $translate = new Zend_Translate('array', $translationPath, $localeValue); + + Zend_Registry::set('Zend_Translate', $translate); + Zend_Validate_Abstract::setDefaultTranslator($translate); + Zend_Form::setDefaultTranslator($translate); + } + + protected function _initFrontControllerPlugin() + { + $this->_frontController->registerPlugin(new App_Controller_Plugin_Acl()); + $this->_frontController->registerPlugin(new App_Controller_Plugin_LangSelector()); + } + + protected function _initViewSettings(){ + + $this->bootstrap('view'); + $view = $this->getResource('view'); + + $view->baseUrlSite = $this->_enviroments->get('baseUrlSite'); + $view->version = $this->_enviroments->get('version'); + } + + protected function _initMongoDbParms() + { + Zend_Registry::set('ENABLE_MONGODB', false); + + // per getire l'abilitazione inserire i dati necessari a mongo db connection + } + + protected function _initDbParms() + { + $mySqlDbParams = $this->_enviroments->get('mysql')->get('params'); + $db = new Zend_Db_Adapter_Pdo_Mysql($mySqlDbParams); + + Zend_Registry::set('db_adapter', $db); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + + $this->_db = $db; + } + + + protected function _initLogging() + { + $logger = new Zend_Log(); + + /**** FIREBUG DEBUG LOG ****/ + // $logger->addWriter(new Zend_Log_Writer_Firebug()); + /****************************/ + + /**** GENERAL LOG ****/ + $stream = @fopen(APPLICATION_PATH . '/../log/log.txt', 'a', false); + if (!$stream) { + throw new Exception('Failed to open stream of log file'); + } + $writer = new Zend_Log_Writer_Stream($stream); + $logger->addWriter($writer); + Zend_Registry::set('log', $logger); + /****************************/ + + /**** MT LOG *** + $logger_mt = new Zend_Log(); + $stream_mt = @fopen(APPLICATION_PATH . '/../log/log_mt.txt', 'a', false); + if (!$stream_mt) { + throw new Exception('Failed to open stream of mt log file'); + } + $writer_mt = new Zend_Log_Writer_Stream($stream_mt); + $logger_mt->addWriter($writer_mt); + Zend_Registry::set('log_mt', $logger_mt); + /****************************/ + + /*** ERROR DB LOG ***/ + $columnMapping = array('lvl' => 'priority', 'msg' => 'message', 'url' => 'url', 'trace' => 'trace', 'params' => 'params', 'section' => 'section','db_name'=> 'db_name','username' => 'username', 'token'=>'token'); + $error_writer = new Zend_Log_Writer_Db($this->_db, 'error_log', $columnMapping); + $error_logger = new Zend_Log($error_writer); + Zend_Registry::set('error_log', $error_logger); + /****************************/ + + $this->_logger = $logger; + } + + public function _initPersonalRouter() + { + $router = $this->_frontController->getRouter(); + + $router->addRoute( + 'sitemap', + new Zend_Controller_Router_Route('sitemap', + array( + 'module' => 'default', + 'controller' => 'index', + 'action' => 'sitemap' + ) + ) + ); + + $router->addRoute( + 'it', + new Zend_Controller_Router_Route('it/:action/*', + array( + 'module' => 'default', + 'controller' => 'index', + 'action' => 'index' + ) + ) + ); + + $router->addRoute( + 'en', + new Zend_Controller_Router_Route('en/:action/*', + array( + 'module' => 'default', + 'controller' => 'index', + 'action' => 'index' + ) + ) + ); + + $router->addRoute( + 'language', + new Zend_Controller_Router_Route('/lang/:lang', + array( + 'module' => 'default', + 'controller' => 'index', + 'action' => 'index', + 'lang' => ':lang' + ) + ) + ); + + $router->addRoute( + 'offline', + new Zend_Controller_Router_Route('/offline', + array( + 'controller' => 'index', + 'action' => 'offline' + ) + ) + ); + + $router->addRoute( + 'filterpager', + new Zend_Controller_Router_Route('filter/:module/:action/:page/:count/*', + array( + 'module' => 'admin', + 'controller' => 'index' + ) + ) + ); + + $router->addRoute( + 'v1_login', + new Zend_Controller_Router_Route('v1/login', + array( + 'module' => 'auth', + 'controller' => 'index', + 'action' => 'post' + ) + ) + ); + + /*********************************************************/ + + } + +} + diff --git a/application/configs/application.ini b/application/configs/application.ini new file mode 100644 index 0000000..dd3cc27 --- /dev/null +++ b/application/configs/application.ini @@ -0,0 +1,31 @@ +[production] +phpSettings.display_startup_errors = 1 +phpSettings.display_errors = 1 +includePaths.library = APPLICATION_PATH "/../library" +bootstrap.path = APPLICATION_PATH "/Bootstrap.php" +bootstrap.class = "Bootstrap" +appnamespace = "Application" + +resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" +resources.frontController.params.prefixDefaultModule = true + +resources.frontController.params.displayExceptions = 0 + +resources.frontController.plugins.PutHandler = "Zend_Controller_Plugin_PutHandler" + +resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" +resources.frontController.actionhelperpaths.Application_Controller_Helper = APPLICATION_PATH "/../library/Helpers/Action" +resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/../library/Helpers/View" + +resources.modules[] = "" + +[staging : production] + +[testing : production] +phpSettings.display_startup_errors = 1 +phpSettings.display_errors = 1 + +[development : production] +phpSettings.display_startup_errors = 1 +phpSettings.display_errors = 1 +resources.frontController.params.displayExceptions = 1 diff --git a/application/configs/config.ini b/application/configs/config.ini new file mode 100644 index 0000000..944b290 --- /dev/null +++ b/application/configs/config.ini @@ -0,0 +1,17 @@ +ip_master = "" +ip_alternativo = "185.31.65.102" +email_mittente = "info@adriaticasistemi.it" +email_mittente_nome = "Adriatica Sistemi" +email_primo_contatto = "info@adriaticasistemi.it" +default_footer_email = "Inserisci qui il footer che comparirà sotto alle email +puoi utilizzare %default_NomeSito% per inserire il nome del sito" +email_contatto_template = "CONTATTO" +test_email = "sviluppoweb@winfatt.com" +interrutore_sito = "off" +interrutore_webservices_v1 = "on" +interrutore_services = "on" +interrutore_testdb = "off" +interrutore_paypal_test = "off" +interrutore_stripe_test = "off" +ip_server = "185.31.65.139" +interrutore_email_services = "on" diff --git a/application/configs/dati_aziendali.json b/application/configs/dati_aziendali.json new file mode 100644 index 0000000..e5e8b8b --- /dev/null +++ b/application/configs/dati_aziendali.json @@ -0,0 +1,6 @@ +{ + "NomeSito":"GestioneSpiaggia.it", + "NomeBreve":"Gestione Spiaggia", + "RagioneSociale":"Adriatica Sistemi soc. coop.", + "PartitaIva":"" +} diff --git a/application/configs/enviroment.ini b/application/configs/enviroment.ini new file mode 100644 index 0000000..686b9a4 --- /dev/null +++ b/application/configs/enviroment.ini @@ -0,0 +1,26 @@ +[production] +version = "1.0.0" +baseUrlSite = "https://gestionespiaggia.it" + +password_salt = "gs108_" +site_short_id = "gs" + +mysql.params.host="localhost" +mysql.params.username = "gestionespiaggia_user" +mysql.params.password = "Winfatt108" +mysql.params.dbname = "gestionespiaggia_main" + +cpanel.username = "gestionespiaggia" +cpanel.password = "Winfatt108" +cpanel.host = "cpanel.gestionespiaggia.it" +cpanel.restusername = "admin" + +[staging : production] +version = "1.0.0" +baseUrlSite = "https://gestionespiaggia.it" + +[development : production] +version = "1.0.0" +baseUrlSite = "https://gestionespiaggia.it" + +mysql.params.dbname = "gestionespiaggia_main" diff --git a/application/configs/parametri_sito.json b/application/configs/parametri_sito.json new file mode 100644 index 0000000..8ffe3cd --- /dev/null +++ b/application/configs/parametri_sito.json @@ -0,0 +1,5 @@ +{ + "base_title":"GestioneSpiaggia", + "base_keywords":"", + "home_description":"" +} diff --git a/application/controllerSections/Admin/Index/Emailtemplate.php b/application/controllerSections/Admin/Index/Emailtemplate.php new file mode 100644 index 0000000..b4fbff0 --- /dev/null +++ b/application/controllerSections/Admin/Index/Emailtemplate.php @@ -0,0 +1,38 @@ +_resourceName = 'EmailTemplate'; + + //Usato per abilitare la sezione filtri + $this->_enableModalFilter = true; + + //Disable new insert of element + //$this->_enableNewInsert = false; + + parent::__construct($controller); + } + + public function lista(){ + parent::lista(); + + $this->_controller->_MENUITEM = "emailtemplate"; + $this->_controller->_EVENTLOADER = $this->_controller->getRequest()->getActionName(); + $this->_controller->_PAGETITLE = 'Elenco Template Email'; + $this->_controller->_ICONTITLE = 'fa-envelope'; + + $this->_controller->view->popover_default_param_content = $this->_controller->getDefaultParamsPopoverTemplate(); + } + + //Personalizzazione della funzione di delete Elemento singolo + /*protected function deleteElement($id){ + $this->_model->delete($this->_resourceName,$id); + }*/ + + + + + } diff --git a/application/controllerSections/Admin/Index/Generic.php b/application/controllerSections/Admin/Index/Generic.php new file mode 100644 index 0000000..e14b4b5 --- /dev/null +++ b/application/controllerSections/Admin/Index/Generic.php @@ -0,0 +1,38 @@ +_moduleName = 'admin'; + $this->_resourceName = 'NomeDellaRisorsa'; + + //Usato per abilitare la sezione filtri + $this->_enableModalFilter = true; + + //Disable new insert of element + //$this->_enableNewInsert = false; + + parent::__construct($controller); + } + + public function lista(){ + parent::lista(); + + $this->_controller->_MENUITEM = "nodellarisorsa"; + $this->_controller->_EVENTLOADER = $this->_controller->getRequest()->getActionName(); + $this->_controller->_PAGETITLE = 'Elenco Template ...'; + $this->_controller->_ICONTITLE = 'fa-'; + + } + + //Personalizzazione della funzione di delete Elemento singolo + /*protected function deleteElement($id){ + $this->_model->delete($this->_resourceName,$id); + }*/ + + + + +} diff --git a/application/controllerSections/Monitoring/Index/Accesslog.php b/application/controllerSections/Monitoring/Index/Accesslog.php new file mode 100644 index 0000000..e575b69 --- /dev/null +++ b/application/controllerSections/Monitoring/Index/Accesslog.php @@ -0,0 +1,53 @@ +_resourceName = 'Accesslog'; + + //Usato per abilitare la sezione filtri + $this->_enableModalFilter = false; + + //Disable new insert of element + $this->_enableNewInsert = false; + + //Disable new insert of element + //$this->_enableModalDetail = false; + + parent::__construct($controller); + } + + public function lista(){ + parent::lista(); + + $this->_controller->_EVENTLOADER = $this->_controller->getRequest()->getActionName(); + $this->_controller->_MENUITEM = "accesslog"; + $this->_controller->_PAGETITLE = 'Log Accessi al sito'; + $this->_controller->_ICONTITLE = 'fa-sign-in-alt'; + + } + + /** + * Questa funzione se dichiarata effettua la manipolazione sui dati prima di restiutirli nella get + * + * @param $data + * @return mixed + */ + protected function getElement($data){ + + $data['Data'] = $this->_helper->ExtractData($data['Data']); + $data['Descrizione'] = stripcslashes($data['Descrizione']); + + return $data; + } + + //Personalizzazione della funzione di delete Elemento singolo + /*protected function deleteElement($id){ + $this->_model->delete($this->_resourceName,$id); + }*/ + + + + +} diff --git a/application/controllerSections/Monitoring/Index/Errorlog.php b/application/controllerSections/Monitoring/Index/Errorlog.php new file mode 100644 index 0000000..da4f3d6 --- /dev/null +++ b/application/controllerSections/Monitoring/Index/Errorlog.php @@ -0,0 +1,60 @@ +_resourceName = 'Errorlog'; + + //Usato per abilitare la sezione filtri + $this->_enableModalFilter = false; + + //Disable new insert of element + $this->_enableNewInsert = false; + + parent::__construct($controller); + } + + public function lista() + { + parent::lista(); + + $this->_controller->_EVENTLOADER = $this->_controller->getRequest()->getActionName(); + $this->_controller->_MENUITEM = "errorlog"; + $this->_controller->_PAGETITLE = 'Elenco Errori'; + $this->_controller->_ICONTITLE = 'fa-hashtag'; + + } + + /** + * Questa funzione se dichiarata effettua la manipolazione sui dati prima di restiutirli nella get + * + * @param $data + * @return mixed + */ + protected function getElement($data) + { + + $data['params'] = Zend_Json::decode($data['params']); + $data['trace'] = Zend_Json::decode($data['trace']); + + $data['baseUrl'] = $this->_controller->getRequest()->getScheme() . '://' . $this->_controller->getRequest()->getHttpHost(); + + $this->_controller->view->assign($data); + + Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setScriptAction(strtolower($this->_resourceName) . '/get'); + + $this->_controller->render(); + $data['text'] = $this->_controller->getResponse()->getBody(); + + return $data; + } + + //Personalizzazione della funzione di delete Elemento singolo + /*protected function deleteElement($id){ + $this->_model->delete($this->_resourceName,$id); + }*/ + + +} diff --git a/application/forms/Admin/Index/EmailTemplate/Add.php b/application/forms/Admin/Index/EmailTemplate/Add.php new file mode 100644 index 0000000..7c0d6b7 --- /dev/null +++ b/application/forms/Admin/Index/EmailTemplate/Add.php @@ -0,0 +1,52 @@ +addElement('text', 'Codice', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'Nome', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'Oggetto', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'Testo', + array( + 'filters' => array('StringTrim'), + ) + ); + + $this->addElement('text', 'Tipologia', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'Footer', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + } + +} diff --git a/application/forms/Admin/Index/Users/Add.php b/application/forms/Admin/Index/Users/Add.php new file mode 100644 index 0000000..92655a4 --- /dev/null +++ b/application/forms/Admin/Index/Users/Add.php @@ -0,0 +1,111 @@ +addElement('text', 'RagioneSociale', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'Indirizzo', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'Comune', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'Provincia', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'Cap', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'PartitaIva', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'CodiceFiscale', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'Telefono', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'Email', + array( + 'filters' => array('StringTrim'), + 'validators' => array(new Zend_Validate_EmailAddress(), + /*new Zend_Validate_Db_NoRecordExists(array('table' => 'users', 'field' => 'Email', 'adapter' => Zend_Registry::get('db_adapter')))*/ + ) + ) + ); + + $this->addElement('text', 'Pec', + array( + 'filters' => array('StringTrim') + ) + ); + + $this->addElement('text', 'username', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'password', + array( + 'filters' => array('StringTrim'), + 'validators' => array( + array('StringLength', true, array(6)) + ) + ) + ); + + $this->addElement('text', 'role', + array( + 'filters' => array('StringTrim'), + 'required' => true + ) + ); + + $this->addElement('text', 'stato', + array( + 'filters' => array('StringTrim', new App_Form_Filters_MyBoolean()), + 'required' => true + ) + ); + + $this->addElement('text', 'Nota', + array( + 'filters' => array('StringTrim') + ) + ); + + } + +} diff --git a/application/forms/Default/Index/Auth/Login.php b/application/forms/Default/Index/Auth/Login.php new file mode 100644 index 0000000..37d71a1 --- /dev/null +++ b/application/forms/Default/Index/Auth/Login.php @@ -0,0 +1,29 @@ +addElement('text', 'username', array( + 'filters' => array('StringTrim'), + 'validators' => array( + array('StringLength', true, array(3, 150)) + ), + 'required' => true, + )); + + $this->addElement('password', 'password', array( + 'filters' => array('StringTrim'), + 'validators' => array( + array('StringLength', true, array(3, 50)) + ), + 'required' => true, + )); + + $this->addElement('text', 'ricorda_password', array( + 'filters' => array('StringTrim') + )); + + } +} diff --git a/application/forms/Default/Index/Auth/ResetPw.php b/application/forms/Default/Index/Auth/ResetPw.php new file mode 100644 index 0000000..0fb2ec7 --- /dev/null +++ b/application/forms/Default/Index/Auth/ResetPw.php @@ -0,0 +1,24 @@ +addElement('text', 'password', array( + 'filters' => array('StringTrim'), + 'required'=>true, + 'validators' => array(array('StringLength', true, array(6, 25))) + )); + + $this->addElement('text', 'password2', array( + 'filters' => array('StringTrim'), + 'required'=>true, + 'validators' => array(array('StringLength', true, + array(6, 25)), + array('identical', false, array('token' => 'password'))), + )); + + } +} diff --git a/application/forms/V1/Test/Add.php b/application/forms/V1/Test/Add.php new file mode 100644 index 0000000..45883a5 --- /dev/null +++ b/application/forms/V1/Test/Add.php @@ -0,0 +1,31 @@ +setMethod('post'); + $this->setName('testForm'); + $this->setAction(''); + + //$this->addElement('hidden', 'id'); + + $this->addElement('text', 'Nome', + array( + 'filters' => array('StringTrim'), + 'validators'=>array('Alnum'), + 'required' => true + ) + ); + + $this->addElement('text', 'Descrizione', + array( + 'filters' => array('StringTrim') + ) + ); + + } + +} diff --git a/application/layouts/scripts/admin.phtml b/application/layouts/scripts/admin.phtml new file mode 100644 index 0000000..24cfaf6 --- /dev/null +++ b/application/layouts/scripts/admin.phtml @@ -0,0 +1,173 @@ + + + + + + + + + + + + Admin | Dashboard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + customCssScript): ?> + + customCssScript as $script): ?> + + + + + + + + + + +action, array('login', 'authenticate', 'resetpassword'))): ?> + + + action) { + default: + case 'login': + echo $this->render('admin/baseSection/_loginPage.phtml'); + break; + case 'resetpassword': + echo $this->render('admin/baseSection/_resetPage.phtml'); + break; + } ?> + + + + render('admin/baseSection/_default.phtml') ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +customJsScript): ?> + + customJsScript as $script): ?> + + + + + +angularModuleName): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + +eventLoader): ?> + + + + + + diff --git a/application/layouts/scripts/admin/_contentHeaderAdmin.phtml b/application/layouts/scripts/admin/_contentHeaderAdmin.phtml new file mode 100644 index 0000000..27233c4 --- /dev/null +++ b/application/layouts/scripts/admin/_contentHeaderAdmin.phtml @@ -0,0 +1,21 @@ +
+
+
+
+

+ + pageTitle; ?> subTitle) ? ' - ' . $this->subTitle : ''; ?> +

+
+
+ +
+
+
+
diff --git a/application/layouts/scripts/admin/_footerAdmin.phtml b/application/layouts/scripts/admin/_footerAdmin.phtml new file mode 100644 index 0000000..7aaa7dc --- /dev/null +++ b/application/layouts/scripts/admin/_footerAdmin.phtml @@ -0,0 +1,10 @@ + diff --git a/application/layouts/scripts/admin/_navbarAdmin.phtml b/application/layouts/scripts/admin/_navbarAdmin.phtml new file mode 100644 index 0000000..4d96a04 --- /dev/null +++ b/application/layouts/scripts/admin/_navbarAdmin.phtml @@ -0,0 +1,61 @@ + diff --git a/application/layouts/scripts/admin/_sidebarAdmin.phtml b/application/layouts/scripts/admin/_sidebarAdmin.phtml new file mode 100644 index 0000000..7c645a6 --- /dev/null +++ b/application/layouts/scripts/admin/_sidebarAdmin.phtml @@ -0,0 +1,52 @@ + + + diff --git a/application/layouts/scripts/admin/_sidebarMonitoring.phtml b/application/layouts/scripts/admin/_sidebarMonitoring.phtml new file mode 100644 index 0000000..cefc796 --- /dev/null +++ b/application/layouts/scripts/admin/_sidebarMonitoring.phtml @@ -0,0 +1,52 @@ + + diff --git a/application/layouts/scripts/admin/baseSection/_default.phtml b/application/layouts/scripts/admin/baseSection/_default.phtml new file mode 100644 index 0000000..489b627 --- /dev/null +++ b/application/layouts/scripts/admin/baseSection/_default.phtml @@ -0,0 +1,49 @@ +
+ + + render('admin/_navbarAdmin.phtml') ?> + + + + + +
+ + action != 'index'): ?> + render('admin/_contentHeaderAdmin.phtml') ?> + + + +
+ + layout()->content ?> + +
+ +
+ + + + action)): ?> + render('admin/_footerAdmin.phtml'); ?> + + + +
diff --git a/application/layouts/scripts/admin/baseSection/_loginPage.phtml b/application/layouts/scripts/admin/baseSection/_loginPage.phtml new file mode 100644 index 0000000..2a82c47 --- /dev/null +++ b/application/layouts/scripts/admin/baseSection/_loginPage.phtml @@ -0,0 +1,72 @@ +
+ + + + + +
diff --git a/application/layouts/scripts/admin/baseSection/_resetPage.phtml b/application/layouts/scripts/admin/baseSection/_resetPage.phtml new file mode 100644 index 0000000..cdfa868 --- /dev/null +++ b/application/layouts/scripts/admin/baseSection/_resetPage.phtml @@ -0,0 +1,100 @@ +
+ + + + +
diff --git a/application/layouts/scripts/layout.phtml b/application/layouts/scripts/layout.phtml new file mode 100644 index 0000000..f34e63a --- /dev/null +++ b/application/layouts/scripts/layout.phtml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + <?= $this->title; ?> + + action == 'downloadsoftware'): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +render('public/_header.phtml'); ?> + + +layout()->content ?> + + +render('public/_footer.phtml'); ?> + + + + + + + + + + + + + + + + + + render('public/_privacyPolicy.phtml'); ?> + + + + diff --git a/application/layouts/scripts/layout_old.phtml b/application/layouts/scripts/layout_old.phtml new file mode 100644 index 0000000..81873f2 --- /dev/null +++ b/application/layouts/scripts/layout_old.phtml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + <?= $this->title; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +render('public/_header.phtml'); ?> + + +layout()->content ?> + + +render('public/_footer.phtml'); ?> + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +enableTestSdk): ?> + + render('public/_devBanner.phtml') ?> + + + + + diff --git a/application/layouts/scripts/public/_devBanner.phtml b/application/layouts/scripts/public/_devBanner.phtml new file mode 100644 index 0000000..32c55de --- /dev/null +++ b/application/layouts/scripts/public/_devBanner.phtml @@ -0,0 +1,15 @@ +
+
+
+ STAI VISUALIZZANDO L'AMBIENTE DI SVILUPPO + CHIUDI +
+
+
+ + \ No newline at end of file diff --git a/application/layouts/scripts/public/_footer.phtml b/application/layouts/scripts/public/_footer.phtml new file mode 100644 index 0000000..76e7d4c --- /dev/null +++ b/application/layouts/scripts/public/_footer.phtml @@ -0,0 +1,143 @@ + + diff --git a/application/layouts/scripts/public/_header.phtml b/application/layouts/scripts/public/_header.phtml new file mode 100644 index 0000000..910a090 --- /dev/null +++ b/application/layouts/scripts/public/_header.phtml @@ -0,0 +1,55 @@ + + diff --git a/application/layouts/scripts/public/_privacyPolicy.phtml b/application/layouts/scripts/public/_privacyPolicy.phtml new file mode 100644 index 0000000..fc3527e --- /dev/null +++ b/application/layouts/scripts/public/_privacyPolicy.phtml @@ -0,0 +1,60 @@ + + +
+
+
+ Questo sito o gli strumenti terzi da questo utilizzati si avvalgono di cookie necessari al funzionamento + ed utili alle finalità illustrate nella privacy policy e cookie policy + Ok,acconsento +
+
+
+ + diff --git a/application/models/FcmFirebase.php b/application/models/FcmFirebase.php new file mode 100644 index 0000000..b0c55fb --- /dev/null +++ b/application/models/FcmFirebase.php @@ -0,0 +1,35 @@ + array( + 'title' => $dati['Title'], + 'body' => $dati['Message'], + 'sound' => 'default', + //'badge' => '1' + ), + 'to' => $token + ); + + if($dati){ + $corpoNotifica['data'] = array( + 'action' => '', + 'url' => '' + ); + } + + $this->postCall($corpoNotifica); + } + + +} diff --git a/application/models/Generic.php b/application/models/Generic.php new file mode 100644 index 0000000..73bda64 --- /dev/null +++ b/application/models/Generic.php @@ -0,0 +1,17 @@ + _db -> query("SELECT 'error' as 'tipo',msg as 'text',id FROM `error_log` WHERE state = '1'"); + return $stmt -> fetchAll(); + } + + public function getNotifyList(){ + $stmt = $this -> _db -> query("SELECT 'error' as 'tipo',id,notify FROM `error_log` WHERE state = '1' AND notify = '0'"); + return $stmt -> fetchAll(); + } + +} diff --git a/application/models/Resources/Users.php b/application/models/Resources/Users.php new file mode 100644 index 0000000..73b3ad9 --- /dev/null +++ b/application/models/Resources/Users.php @@ -0,0 +1,15 @@ +init($this->_risorsa); + } + + public function getById($id){ + return parent::getById($id); + } + + public function deleteById($id){ + return parent::deleteById($id); + } + + public function getList($paged = null,$count = null,$order = null){ + return parent::getList($paged,$count,$order); + } + + public function getFiltered($paged = null,$count = null,$order = null,$where = null){ + return parent::getFiltered($paged,$count,$order,$where); + } + + public function updateAccessoCloud($params){ + $data = parent::getByMethod('nomeMetodoCustom',$params); + return $data['data']; + } + +} diff --git a/application/modules/admin/Bootstrap.php b/application/modules/admin/Bootstrap.php new file mode 100644 index 0000000..480cc45 --- /dev/null +++ b/application/modules/admin/Bootstrap.php @@ -0,0 +1,29 @@ +getRouter(); + + $router->addRoute( + 'admin', + new Zend_Controller_Router_Route('admin/:controller/:action', + array( + 'module'=>'admin', + 'controller'=>'index', + 'action'=>'index' + ) + ) + ); + + } + +} diff --git a/application/modules/admin/controllers/ErrorController.php b/application/modules/admin/controllers/ErrorController.php new file mode 100644 index 0000000..17573c2 --- /dev/null +++ b/application/modules/admin/controllers/ErrorController.php @@ -0,0 +1,64 @@ +view->menuitem = 'home'; + $this->view->pageName = 'Ops, si è verificato un errore'; + + $errors = $this->_getParam('error_handler'); + + if (!$errors || !$errors instanceof ArrayObject) { + $this->view->message = 'You have reached the error page'; + return; + } + + switch ($errors->type) { + case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: + case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: + case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: + // 404 error -- controller or action not found + $this->getResponse()->setHttpResponseCode(404); + $priority = Zend_Log::NOTICE; + $this->view->error_code = '404'; + $this->view->message = 'La pagina richiesta non è stata trovata'; + break; + default: + // application error + $this->getResponse()->setHttpResponseCode(500); + $priority = Zend_Log::CRIT; + $this->view->error_code = '500'; + $this->view->message = 'Errore Applicazione'; + break; + } + + // Log exception, if logger available + if ($log = $this->getLog()) { + $log->log($this->view->message, $priority, $errors->exception); + $log->log('Request Parameters', $priority, $errors->request->getParams()); + } + + // conditionally display exceptions + if ($this->getInvokeArg('displayExceptions') == true) { + $this->view->exception = $errors->exception; + } + print_r($errors->exception->getMessage()); + + $this->view->request = $errors->request; + } + + public function getLog() + { + $bootstrap = $this->getInvokeArg('bootstrap'); + if (!$bootstrap->hasResource('Log')) { + return false; + } + $log = $bootstrap->getResource('Log'); + return $log; + } + + +} + diff --git a/application/modules/admin/controllers/IndexController.php b/application/modules/admin/controllers/IndexController.php new file mode 100644 index 0000000..f02a887 --- /dev/null +++ b/application/modules/admin/controllers/IndexController.php @@ -0,0 +1,280 @@ +_helper->layout->setLayout('admin'); + + $this->_authService = new App_Service_Auth(); + $this->_genericModel = new Application_Model_Generic(); + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + + $this->_parametriSito = new App_Service_JsonConfiguration('parametri_sito'); + $this->_datiAziendali = new App_Service_JsonConfiguration('dati_aziendali'); + $this->_VariabiliSito = new App_Service_VariabiliSito(); + + $this->_MENUITEM = 'dashboard'; + $this->_PAGETITLE = 'DashBoard'; + $this->_ICONTITLE = 'fa-dashboard'; + + $this->_SECONDLEVEL = null; + $this->_SECONDLEVEL_ACTION = null; + + $this->_EVENTLOADER = FALSE; + $this->_ANGULARJS_MODULE_NAME = false; + + } + + public function preDispatch() + { + $this->_SIDEBAR_COLLAPSED = boolval($_COOKIE['ui_sidebar_collapsed']) || false; + + $this->view->enableTestSdk = $this->_ipManager->controllaAbilitazioneTestSdk(); + } + + public function postDispatch() + { + $this->view->controller = $this->getRequest()->getControllerName(); + $this->view->action = $this->getRequest()->getActionName(); + + $this->view->menu = $this->_MENUITEM; + $this->view->pageTitle = $this->_PAGETITLE; + $this->view->iconTitle = $this->_ICONTITLE; + + $this->view->secondLevel = $this->_SECONDLEVEL; + $this->view->secondLevelAction = $this->_SECONDLEVEL_ACTION; + + $this->view->eventLoader = $this->_EVENTLOADER; + $this->view->sideBarCollapsed = $this->_SIDEBAR_COLLAPSED; + + $this->view->angularModuleName = $this->_ANGULARJS_MODULE_NAME; + + $this->view->parametriSito = $this->_parametriSito->getAllParams(); + $this->view->datiAziendali = $this->_datiAziendali->getAllParams(); + } + + public function logoutAction() + { + $this->_authService->clear(); + + return $this->_helper->redirector('index', 'index', 'default'); + } + + public function indexAction() + { + $this->_EVENTLOADER = 'dashboard'; + // $this->_ANGULARJS_MODULE_NAME = 'dashboard'; + + $this->render('dashboard'); + } + + public function infoAction(){ + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + phpinfo(); + } + + /*=============================================================================================== + * =========================== GESTIONE SETTINGS ============================ + * =============================================================================================*/ + + public function settingsAction() + { + + $this->_MENUITEM = "settings"; + $this->_PAGETITLE = 'Impostazioni'; + $this->_ICONTITLE = 'fa-cogs'; + + $this->_EVENTLOADER = 'settings'; + $this->view->assign($this->_configs->getAllParam()); + $this->view->assign($this->_parametriSito->getAllParams()); + + $this->view->tabname = (!$_COOKIE['settings_tabname']) ? 'generico' : $_COOKIE['settings_tabname']; + $this->view->email_templates = $this->_genericModel->getList('EmailTemplate', null, null); + + $this->view->popover_default_param_content = $this->getDefaultParamsPopoverTemplate(); + } + + public function savesettingsAction() + { + + if ($this->getRequest()->isXmlHttpRequest()) { + + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $params = $this->getAllParams(); + + unset($params['controller']); + unset($params['module']); + unset($params['action']); + unset($params['section']); + + $response = array(); + switch ($this->_getParam('section')) { + case 'generico': + $params['interrutore_sito'] = (isset($params['interrutore_sito'])) ? 'on' : 'off'; + $params['interrutore_services'] = (isset($params['interrutore_services'])) ? 'on' : 'off'; + $params['interrutore_webservices_v1'] = (isset($params['interrutore_webservices_v1'])) ? 'on' : 'off'; + $response = $this->saveConfigParams($params); + break; + case 'sito': + foreach ($params as $key => $value) { + $this->_parametriSito->set($key, $value); + $response[$key] = 'OK'; + } + break; + case 'test': + $params['interrutore_testdb'] = (isset($params['interrutore_testdb'])) ? 'on' : 'off'; + $params['interrutore_paypal_test'] = (isset($params['interrutore_paypal_test'])) ? 'on' : 'off'; + $params['interrutore_stripe_test'] = (isset($params['interrutore_stripe_test'])) ? 'on' : 'off'; + $response = $this->saveConfigParams($params); + break; + case 'accesso': + $response = $this->saveConfigParams($params); + break; + } + + if ($this->check_has_error_value($response)) { + $response['stato'] = 'success'; + } else { + $response['stato'] = 'error'; + } + + $response = Zend_Json::encode($response); + $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody($response); + } + } + + public function savenewpasswordAction() + { + + if ($this->getRequest()->isXmlHttpRequest()) { + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + $params = $this->getAllParams(); + unset($params['controller']); + unset($params['module']); + unset($params['action']); + $response = array(); + if (!$params['vecchia_pwd']) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => false, 'message' => 'Inserire la vecchia password'))); + } + if (!$params['nuova_pwd']) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => false, 'message' => 'Inserire la nuova password'))); + } + if (!$params['nuova_pwd2']) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => false, 'message' => 'Ripeti la nuova password'))); + } + if (strtolower($params['nuova_pwd']) == strtolower($params['vecchia_pwd'])) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => false, 'message' => 'La nuova password non può essere uguale a quella corrente'))); + } + if (strtolower($params['nuova_pwd']) != strtolower($params['nuova_pwd2'])) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => false, 'message' => 'Le password non coincidono'))); + } + $admin = $this->_genericModel->getByColumnName('Users', 'username', 'admin'); + //Confronto le password + $passwordSalt = Zend_Registry::get('ENVIROMENTS')->get('password_salt'); + if (md5($passwordSalt . $params['vecchia_pwd']) != $admin['password']) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => false, 'message' => 'La vecchia password è errata', 'resetForm' => true))); + } + //Salvo la nuova password + $this->_genericModel->update('Users', $admin['id'], array('password' => md5($passwordSalt . $params['nuova_pwd']))); + $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('status' => true))); + } + } + + private function checkNullValue($value) + { + return (!$value || strtolower($value) === 'null') ? null : $value; + } + + + /*=============================================================================================== + * =========================== FUNZIONI PRIVATE DEL CONTROLLER ========================= + * =============================================================================================*/ + + public function getMainModel() + { + return $this->_genericModel; + } + + protected function saveConfigParams($params) + { + + $response = array(); + foreach ($params as $key => $value) { + $valori_non_null = array(); + if (!$value && in_array($key, $valori_non_null)) { + $response[$key] = 'Errore'; + } else { + $this->_configs->set($key, $value); + $response[$key] = 'OK'; + } + } + $this->_configs->write(); + + return $response; + } + + /** + * Scorre l'array se trova un valore riconosciuto come errore restituisce false altrimenti true + * @param array $array + * @return boolean + */ + protected function check_has_error_value($array) + { + + foreach ($array as $key => $value) { + if ($value == 'Error' || $value == 'Errore' || $value == '0') { + return FALSE; + } + } + + return true; + } + + /** + * Funzione che genera le indicazioni dei valori dei parametri di default leggendoli dal file di configurazione + * @return string + */ + public function getDefaultParamsPopoverTemplate() + { + + $html = '
Inserire il nome variabile senza gli apici
'; + //$html .= ''; + $params = $this->_datiAziendali->getAllParams(); + foreach ($params as $key => $val) { + $html .= "%default_" . $key . "%
- " . $val . "
"; + } + $html .= ''; + + return $html; + } + + +} //Close Class diff --git a/application/modules/admin/views/scripts/error/error.phtml b/application/modules/admin/views/scripts/error/error.phtml new file mode 100644 index 0000000..0120b48 --- /dev/null +++ b/application/modules/admin/views/scripts/error/error.phtml @@ -0,0 +1,36 @@ +
+
+ +
+ + error_code)): ?> +

+ error_code; ?> + +

+ + +
Clicca qui per tornare alla home del sito.
+ + exception)): ?> + +
Exception information:
+
+ Message: exception->getMessage() ?> +
+ +

Stack trace:

+
exception->getTraceAsString() ?>
+ +

Request Parameters:

+
escape(var_export($this->request->getParams(), true)) ?>
+ + + +
+
+
+ + + + diff --git a/application/modules/admin/views/scripts/index/_paginator.phtml b/application/modules/admin/views/scripts/index/_paginator.phtml new file mode 100644 index 0000000..466bbe2 --- /dev/null +++ b/application/modules/admin/views/scripts/index/_paginator.phtml @@ -0,0 +1,47 @@ +pageCount > 1): ?> +
    + + previous)): ?> +
  • + +
  • + + + + previous)): ?> +
  • + + + + + + pagesInRange as $page): ?> + current): ?> +
  • + +
  • + +
  • + + + + + next)): ?> +
  • + + + + + + next)): ?> +
  • + +
  • + + +
    + dal: firstItemNumber; ?> - lastItemNumber; ?> di totalItemCount; ?> +
    + +
+ diff --git a/application/modules/admin/views/scripts/index/dashboard.phtml b/application/modules/admin/views/scripts/index/dashboard.phtml new file mode 100644 index 0000000..b85672b --- /dev/null +++ b/application/modules/admin/views/scripts/index/dashboard.phtml @@ -0,0 +1,20 @@ +
+ +
+

+ Gestione Spiaggia + Version version; ?> +

+ +
+ +
+ +
+ +
+ + diff --git a/application/modules/admin/views/scripts/index/emailtemplate/_modal.phtml b/application/modules/admin/views/scripts/index/emailtemplate/_modal.phtml new file mode 100644 index 0000000..627d647 --- /dev/null +++ b/application/modules/admin/views/scripts/index/emailtemplate/_modal.phtml @@ -0,0 +1,125 @@ + diff --git a/application/modules/admin/views/scripts/index/emailtemplate/_modalFilter.phtml b/application/modules/admin/views/scripts/index/emailtemplate/_modalFilter.phtml new file mode 100644 index 0000000..094cbf0 --- /dev/null +++ b/application/modules/admin/views/scripts/index/emailtemplate/_modalFilter.phtml @@ -0,0 +1,95 @@ + + diff --git a/application/modules/admin/views/scripts/index/emailtemplate/_searchBlock.phtml b/application/modules/admin/views/scripts/index/emailtemplate/_searchBlock.phtml new file mode 100644 index 0000000..a5a9f73 --- /dev/null +++ b/application/modules/admin/views/scripts/index/emailtemplate/_searchBlock.phtml @@ -0,0 +1,23 @@ +
+ +
+ +
+ +
+ +
+ CleanFiltersParam($this->search_params)); ?> +
+ + +
+
diff --git a/application/modules/admin/views/scripts/index/emailtemplate/list.phtml b/application/modules/admin/views/scripts/index/emailtemplate/list.phtml new file mode 100644 index 0000000..d172c0f --- /dev/null +++ b/application/modules/admin/views/scripts/index/emailtemplate/list.phtml @@ -0,0 +1,170 @@ +
+ +
+ +
+ + + + + +
+ +
+ + isActiveNewInsert): ?> + + + + isActiveFilterModal): ?> + + + + + +
+ +
+ +
+ +
+
+ + + +
+
VariabileValore
+ + + render("index/$this->resourceName/th.phtml") ?> + + + + table) > 0): ?> + table as $key => $value): ?> + partial("index/$this->resourceName/td.phtml", $value) ?> + + + + + + + + + + + + +
+ + Nessun record presente + + + Nessun risultato trovato in base alla ricerca +
+
+ + + + + +isActiveModalDetail): ?> + render("index/$this->resourceName/_modal.phtml"); ?> + + +isActiveFilterModal): ?> + render("index/$this->resourceName/_modalFilter.phtml"); ?> + + +idDetail > 0): ?> + + + diff --git a/application/modules/admin/views/scripts/index/emailtemplate/td.phtml b/application/modules/admin/views/scripts/index/emailtemplate/td.phtml new file mode 100644 index 0000000..511d2ec --- /dev/null +++ b/application/modules/admin/views/scripts/index/emailtemplate/td.phtml @@ -0,0 +1,28 @@ + + + + + Codice; ?> + + + + Codice; ?> + + + +
+ + +
+ + + + + diff --git a/application/modules/admin/views/scripts/index/emailtemplate/th.phtml b/application/modules/admin/views/scripts/index/emailtemplate/th.phtml new file mode 100644 index 0000000..d24ae72 --- /dev/null +++ b/application/modules/admin/views/scripts/index/emailtemplate/th.phtml @@ -0,0 +1,17 @@ + + + + + Codice + Nome + + diff --git a/application/modules/admin/views/scripts/index/index.phtml b/application/modules/admin/views/scripts/index/index.phtml new file mode 100644 index 0000000..e69de29 diff --git a/application/modules/admin/views/scripts/index/settings.phtml b/application/modules/admin/views/scripts/index/settings.phtml new file mode 100644 index 0000000..21969dd --- /dev/null +++ b/application/modules/admin/views/scripts/index/settings.phtml @@ -0,0 +1,59 @@ +
+
+
+ +
+
+ + + +
+
+ +
+ render("index/settings_tabs/generali.phtml") ?> +
+ +
+ render("index/settings_tabs/sito.phtml") ?> +
+ +
+ render("index/settings_tabs/accesso.phtml") ?> +
+ +
+ render("index/settings_tabs/test.phtml") ?> +
+ +
+ +
+ + +
+ +
+ +
+ +
+
diff --git a/application/modules/admin/views/scripts/index/settings_tabs/accesso.phtml b/application/modules/admin/views/scripts/index/settings_tabs/accesso.phtml new file mode 100644 index 0000000..0c012a2 --- /dev/null +++ b/application/modules/admin/views/scripts/index/settings_tabs/accesso.phtml @@ -0,0 +1,52 @@ +
+ +

Password accesso amministratore

+ +
+
+
+ + + +
+ +
+

+ + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+
+
+ +
+ + + +
+ +
diff --git a/application/modules/admin/views/scripts/index/settings_tabs/generali.phtml b/application/modules/admin/views/scripts/index/settings_tabs/generali.phtml new file mode 100644 index 0000000..0960b71 --- /dev/null +++ b/application/modules/admin/views/scripts/index/settings_tabs/generali.phtml @@ -0,0 +1,150 @@ +
+
+ +

Configurazioni

+ + + +
+
+
+
+ + +
+ interrutore_sito == 'on') ? 'checked' : ''; ?>> +
+ +

+ + +
+ interrutore_services == 'on') ? 'checked' : ''; ?>> +
+ +
+ + +
+ interrutore_webservices_v1 == 'on') ? 'checked' : ''; ?>> +
+ +
+
+ +
+
+ + + +
+ +
+ +

+ + + +
+ +
+ +

+ + + +
+ +
+
+
+
+ +
+ +

Email

+ +
+
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+
+
+ + + +
+ +
+ + +
+ +
+ +
+ +
+ +
+
+
+ + + +
+ +
+ +
+ +
+ +
+
diff --git a/application/modules/admin/views/scripts/index/settings_tabs/sito.phtml b/application/modules/admin/views/scripts/index/settings_tabs/sito.phtml new file mode 100644 index 0000000..e5a6399 --- /dev/null +++ b/application/modules/admin/views/scripts/index/settings_tabs/sito.phtml @@ -0,0 +1,43 @@ +
+
+ + + +

MetaTag del sito:

+ +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ +
diff --git a/application/modules/admin/views/scripts/index/settings_tabs/test.phtml b/application/modules/admin/views/scripts/index/settings_tabs/test.phtml new file mode 100644 index 0000000..cdc4a10 --- /dev/null +++ b/application/modules/admin/views/scripts/index/settings_tabs/test.phtml @@ -0,0 +1,54 @@ +
+
+ + + +

Ambiente di Test:

+ +
+
+ + + +
+ interrutore_testdb == 'on') ? 'checked' : ''; ?>> +
+ + + +
+ +
+ +
+ +
+ + + + +
+ + +
diff --git a/application/modules/auth/Bootstrap.php b/application/modules/auth/Bootstrap.php new file mode 100644 index 0000000..ef91ed3 --- /dev/null +++ b/application/modules/auth/Bootstrap.php @@ -0,0 +1,13 @@ +registerPlugin(new Zend_Controller_Plugin_PutHandler()); + + } + + +} diff --git a/application/modules/auth/controllers/IndexController.php b/application/modules/auth/controllers/IndexController.php new file mode 100644 index 0000000..4528ed5 --- /dev/null +++ b/application/modules/auth/controllers/IndexController.php @@ -0,0 +1,141 @@ +_resourceName = 'Users'; + + $this->_authService = new App_Service_WebServiceV1Auth(); + $this->_model = new Application_Model_Generic(); + $this->_configs = new App_Service_ConfigManager(); + + parent::init(); + } + + public function getAction() + { + + try { + switch ($this->_getParam('method')) { + case'check-connection': + $this->_responseData->data = []; + $this->_inArray = true; + break; + case'ora-server': + $format = $this->_getParam('format', 'd/m/Y H:i'); + $this->_responseData->data = array('data' => date($format)); + break; + default: + $this->disableCallAction(); + break; + } + + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + $this->_status = false; + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function postAction() + { + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + if (preg_match('/application\/json/', $this->getFrontController()->getRequest()->getHeader('Content-Type'))) { + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + } else { + $params = $this->getAllParams(); + } + + if (isset($params['username']) && isset($params['password'])) { + $this->authuser($params['username'], trim($params['password']), $params['staylogin']); + } + + } + + public function putAction() + { + $this->disableCallAction(); + } + + public function deleteAction() + { + + $this->disableCallAction(); + } + + //################ FUNZIONI PRIVATE ################################################################################ + + private function authuser($username, $password, $staylogin = null) + { + $staylogin = ($staylogin == null) ? 0 : $staylogin; + + if ($username == null || $password == null) { + return $this->sendErrorResponse("Username e/o password non ricevuti.", App_Service_WebServiceV1Auth::NO_CREDENTIAL_CLOUDUSER); + } else { + $user = $this->_authService->authenticate($username, $password, $staylogin); + switch ($user) { + case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND: + $this->sendErrorResponse("Username inserito inesistente", App_Service_WebServiceV1Auth::FAILURE_IDENTITY_NOT_FOUND); + break; + case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID: + $this->sendErrorResponse("Le credenziali inserite non sono valide", App_Service_WebServiceV1Auth::FAILURE_CREDENTIAL_INVALID); + break; + case App_Service_WebServiceV1Auth::ACCOUNT_DEACTIVATED: + $this->sendErrorResponse("Account disattivato. Per informazioni contattare l'amministratore.", App_Service_WebServiceV1Auth::ACCOUNT_DEACTIVATED); + break; + case Zend_Auth_Result::FAILURE: + default: + $this->sendErrorResponse("Errore durante l'autenticazione", App_Service_WebServiceV1Auth::FAILURE); + break; + case Zend_Auth_Result::SUCCESS: + case is_array($user): + break; + } + } + + $userData = array_diff_key($user, array_flip(array('password','staylogin','rcode','DataRichiestaResetPw','NumeroResetPw'))); + + //Aggiungo i dati sull'area di consegna associata all'attività + $userData = $this->getDataByRole($userData); + + $this->_responseData->data = $userData; + $this->_status = true; + + $this->sendResponse(); + } + + private function getDataByRole($userData){ + + switch ($userData['role']){ + case 'user': + $userData = array_diff_key($userData, array_flip(array('secret_token', 'rcode', + 'Indirizzo', 'Comune', 'Cap', 'Provincia', 'PartitaIva', 'CodiceFiscale', + 'Pec', 'Telefono', 'UltimoAccesso', 'Nota', 'Descrizione'))); + break; + default: + break; + } + + return $userData; + } + +}//END CLASS diff --git a/application/modules/default/Bootstrap.php b/application/modules/default/Bootstrap.php new file mode 100644 index 0000000..558c9c0 --- /dev/null +++ b/application/modules/default/Bootstrap.php @@ -0,0 +1,42 @@ +getRouter(); + + $router->addRoute( + 'authenticate', + new Zend_Controller_Router_Route('/authenticate', + array( + 'module'=>'default', + 'controller'=>'index', + 'action'=>'authenticate' + ) + ) + ); + + $router->addRoute( + 'resetpassword', + new Zend_Controller_Router_Route('/resetpassword/:rcode', + array( + 'module'=>'default', + 'controller'=>'index', + 'action'=>'resetpassword', + 'rcode' => null + ) + ) + ); + + + } + +} diff --git a/application/modules/default/controllers/ErrorController.php b/application/modules/default/controllers/ErrorController.php new file mode 100644 index 0000000..23291e7 --- /dev/null +++ b/application/modules/default/controllers/ErrorController.php @@ -0,0 +1,194 @@ +_allowedController = array('admin', 'index', 'error', 'services'); + $this->_allowedModule = array('admin', 'default', 'v1', 'monitoring', 'user'); + $this->_restModule = array('v1','auth'); + $this->_ignoredMessages = array( + "Accesso Scaduto", + "Username e/o password non ricevuti.", + "I dati inseriti non sono validi", + "Le credenziali inserite non sono valide", + "Account disattivato. Per informazioni contattare l'amministratore.", + "Username inserito inesistente" + ); + $this->_ipManager = new App_Service_IpManager(); + } + + public function preDispatch() + { + $this->_response->clearHeader('Access-Control-Allow-Headers'); + $this->_response->setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Origin,Authorization,x-requested-with,Content-Type,X-As-Dev-On,,X-As-Dev-Pw,MongoDbName'); + + $this->_response->clearHeader('Access-Control-Allow-Methods'); + $this->_response->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, PATCH, DELETE'); + + $this->_response->clearHeader('Access-Control-Allow-Origin'); + $this->_response->setHeader('Access-Control-Allow-Origin', '*'); + + $this->_response->clearHeader('Access-Control-Allow-Credentials'); + $this->_response->setHeader('Access-Control-Allow-Credentials', 'true'); + + $this->view->allowedIp = $this->_ipManager->allowedIp(); + + $this->view->responseCode = null; + } + + public function errorAction() + { + $errors = $this->_getParam('error_handler'); + if ($this->_getParam('module') != 'default') { + $content = array('status' => false); + } + + if (!$errors || !$errors instanceof ArrayObject) { + $content['message'] = 'You have reached the error page'; + return; + } + + switch ($errors->type) { + case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: + case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: + case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: + // 404 error -- controller or action not found + $this->getResponse()->setHttpResponseCode(404); + $this->view->responseCode = 404; + $this->view->title = "Adriatica Sistemi soc. coop. - Pagina non trovata - Errore 404"; + + $priority = Zend_Log::NOTICE; + if (in_array($this->_getParam('module'), $this->_restModule)) { + $content['message'] = 'Page not found'; + } else { + $this->view->message = 'Page not found'; + } + break; + default: + if ($errors->exception instanceof App_Controller_Errors_WebServiceError) { + // web services error + $content['message'] = $errors->exception->getMyMessage(); + $content['errorCode'] = $errors->exception->getErrorCode(); + + if ($errors->exception->getErrorDetail()) { + $content['errorDetail'] = $errors->exception->getErrorDetail(); + } + + //Recupero tutti i parametri disponibili sulla richiesta + $allParams = $this->getRequest()->getRawBody(); + if(!$allParams){ + $allParams = Zend_Json::encode($errors->request->getParams()); + } + + $dbName = '';$token = ''; $username = ''; + if(Zend_Registry::isRegistered('TOKEN')){ + $model = new Application_Model_Generic(); + $token = Zend_Registry::get('TOKEN'); + $user = $model->getByColumnName('users', 'token', $token); + if($user){ + $dbName = $user['NomeDB']; + $username = $user['username']; + } + } + + $this->getResponse()->setHttpResponseCode(400); + + //Zend_Registry::get('log')->info(print_r($errors,true)); + + if (!in_array($errors->exception->getMessage(), $this->_ignoredMessages)) + Zend_Registry::get('error_log') + ->setEventItem('url', $errors->request->getRequestUri()) + ->setEventItem('trace', Zend_Json::encode($errors->exception->getTrace())) + ->setEventItem('params', $allParams) + ->setEventItem('db_name', $dbName) + ->setEventItem('username', $username) + ->setEventItem('token', $token) + ->setEventItem('section', 'web_service') + ->info($content['message']); + + } else { + // application error + $this->getResponse()->setHttpResponseCode(500); + $priority = Zend_Log::CRIT; + if (in_array($this->_getParam('module'), $this->_restModule)) { + $content['message'] = $errors->exception->getMessage(); + } else { + $this->view->message = $errors->exception->getMessage(); + } + } + break; + } + + // Log exception, if logger available + if ($log = $this->getLog()) { + $log->log($this->view->message, $priority, $errors->exception); + $log->log('Request Parameters', $priority, $errors->request->getParams()); + } + + // conditionally display exceptions + if ($this->getInvokeArg('displayExceptions') == true || in_array($this->_getParam('module'), array('admin','monitoring'))) { + if (in_array($this->_getParam('module'), $this->_restModule)) { + $content['exception_trace'] = (array)$errors->exception->getTrace(); + } else { + $this->view->exception = $errors->exception; + } + } + + if (in_array($this->_getParam('module'), $this->_restModule) && APPLICATION_ENV != 'production') { + $content['request'] = (array)$errors->request; + } else { + $this->view->request = $errors->request; + } + + if (in_array($this->_getParam('module'), $this->_restModule)) { + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + $this->getResponse() + ->setHeader('Content-Type', 'json') + ->setBody($this->_helper->Globalfunction->safeJsonEncode($content)) + ->sendResponse(); + exit(1); + } + + //Registro il log dell'errore + //Zend_Registry::get('log')->info(print_r($errors,true)); + if (in_array($this->_getParam('module'), $this->_allowedModule) + && in_array($this->_getParam('controller'), $this->_allowedController) + && !in_array($errors->exception->getMessage(), $this->_ignoredMessages)) + Zend_Registry::get('error_log')->setEventItem('url', $errors->request->getRequestUri()) + ->setEventItem('trace', Zend_Json::encode($errors->exception->getTrace())) + ->setEventItem('params', Zend_Json::encode($errors->request->getParams())) + ->setEventItem('section', $this->_getParam('module')) + ->info($errors->exception->getMessage()); + } + + public function getLog() + { + $bootstrap = $this->getInvokeArg('bootstrap'); + if (!$bootstrap->hasResource('Log')) { + return false; + } + $log = $bootstrap->getResource('Log'); + return $log; + } + + public function invalidAction() + { + $content = $this->_helper->json(array('status' => 'error', 'message' => $this->_getParam('message'))); + $this->getResponse() + ->setHeader('Content-Type', 'json') + ->setBody($content) + ->sendResponse(); + } + + +} + diff --git a/application/modules/default/controllers/IndexController.php b/application/modules/default/controllers/IndexController.php new file mode 100644 index 0000000..0c1af7e --- /dev/null +++ b/application/modules/default/controllers/IndexController.php @@ -0,0 +1,436 @@ +_helper->layout->setLayout('layout'); + $this->_urlHelper = $this->_helper->getHelper('url'); + $this->_authService = new App_Service_Auth(); + $this->_genericModel = new Application_Model_Generic(); + $this->_restModel = new Application_Model_Rest(); + $this->_configs = new App_Service_ConfigManager(); + $this->_translate = Zend_Form::getDefaultTranslator(); + $this->_ipManager = new App_Service_IpManager(); + $this->_rsaCryptor = new App_Service_RsaCryptor(); + + $this->_VariabiliSito = new App_Service_VariabiliSito(); + $this->_datiAziendali = new App_Service_JsonConfiguration('dati_aziendali'); + $this->_parametriSito = new App_Service_JsonConfiguration("parametri_sito"); + + $this->_TITLE = "home"; + $this->_DESCRIPTION = ""; + $this->_KEYWORDS = ""; + + $this->_TITLE = $this->_parametriSito->get('base_title'); + $this->_DESCRIPTION = ""; + $this->_KEYWORDS = $this->_parametriSito->get('base_keywords'); + + $BASE_COOKIE_STRING = strtolower(Zend_Registry::get('ENVIROMENTS')->get('site_short_id')) . '_'; + + $this->_COOKIE_EXPIRE_TIME = time() + (86400 * 30); + $this->_COOKIE_SITE_CREDENTIALS = $BASE_COOKIE_STRING . "CREDENTIALS"; + } + + public function preDispatch() + { + + $action = $this->getRequest()->getActionName(); + if ($this->_configs->get('interrutore_sito') == 'off' && $action != 'login' && $action != 'authenticate' && $action != 'offline' && !$this->_ipManager->allowedIp()) { + $this->_helper->redirector('offline', 'index', 'default'); + } + + if (Zend_Registry::get('Zend_Locale') == 'it') { + $this->view->lang = 'it'; + } else { + $this->view->lang = 'en'; + } + + $this->view->action = $action; + $this->view->controller = $this->getRequest()->getControllerName(); + + $this->view->enableTestSdk = $this->_ipManager->controllaAbilitazioneTestSdk(); + } + + public function postDispatch() + { + $this->view->title = $this->_TITLE; + $this->view->keywords = $this->_KEYWORDS; + $this->view->description = $this->_DESCRIPTION; + + $this->view->menuitem = $this->_MENUITEM; + $this->view->pagename = $this->_PAGENAME; + $this->view->subtitle = $this->_SUBTITLE; + + $this->view->parametriSito = $this->_parametriSito->getAllParams(); + $this->view->datiAziendali = $this->_datiAziendali->getAllParams(); + } + + public function offlineAction() + { + $this->_DESCRIPTION .= "Il Sito è in manutenzuione"; + if ($this->_configs->get('interrutore_sito') == 'off') { + $this->_helper->getHelper('layout')->disableLayout(); + } else { + $this->_helper->redirector('index', 'index'); + } + } + + public function loginAction() + { + $this->_helper->layout->setLayout('admin'); + + $this->view->moduleName = 'default'; + $this->view->eventLoader = 'login'; + $this->view->formData = $this->recuperaCredenziali(); + + if (isset($this->_authService->getAuth()->getIdentity()->username)) + $this->_helper->redirector('index', $this->_authService->getAuth()->getIdentity()->role); + } + + public function authenticateAction() + { + $this->_helper->layout->setLayout('admin'); + + $this->view->moduleName = 'default'; + $this->view->eventLoader = 'login'; + $this->view->formData = $this->recuperaCredenziali(); + + if (!$this->getRequest()->isPost()) { + return $this->_helper->redirector('index'); + } + + $form = new Application_Form_Default_Index_Auth_Login(); + if (!$form->isValid($this->getRequest()->getPost())) { + $this->view->error = 'I campi sono richiesti'; + + $this->render('login'); + return false; + } + + if (false === $this->_authService->authenticate($form->getValues())) { + $this->view->error = 'Le credenziali non sono valide!'; + $this->render('login'); + return false; + } + + //memorizzo le credenziali se necessario + $data = $form->getValues(); + if ($data['ricorda_password'] == 'on') { + try { + $data['password'] = $this->_rsaCryptor->cripta($data['password']); + setcookie($this->_COOKIE_SITE_CREDENTIALS, Zend_Json::encode($data), $this->_COOKIE_EXPIRE_TIME, "/"); + } catch (Exception $e) { + } + } else { + setcookie($this->_COOKIE_SITE_CREDENTIALS, "", $this->_COOKIE_EXPIRE_TIME, "/"); + } + + //Accesso andato a buon fine + + //Generazione del Token temporaneo per l'accesso + $user = $this->_authService->getIdentity(); + + if ($user->role !== 'admin') { + if ($user->token != null) { + $token = $user->token; //Esistente uso quello già presente + } else { + do { //se non esiste ne genero uno nuovo e controllo che sia univoco + $token = hash('sha1', $user->username . date('YmdHis') . mt_rand(5, 10)); + if ($this->_genericModel->getByColumnName('Users', 'token', $token)) { + $exist = true; + } else { + $exist = false; + } + $user->token = $token; + } while ($exist); + } + + $this->_genericModel->update('Users', $user->id, array('UltimoLogin' => date('Y-m-d H:i:s'), 'token' => $token)); + } else { + $this->_genericModel->update('Users', $user->id, array('UltimoLogin' => date('Y-m-d H:i:s'))); + } + + $this->_genericModel->insert('Accesslog', array('ip' => $_SERVER['REMOTE_ADDR'], 'tipo' => $this->_authService->getIdentity()->role)); + + return $this->_helper->redirector('index', 'index', $this->_authService->getIdentity()->role); + } + + public function indexAction() + { + // $this->_helper->getHelper('layout')->disableLayout(); + + /*if (isset($this->_authService->getAuth()->getIdentity()->username)) + $this->_helper->redirector('index', $this->_authService->getAuth()->getIdentity()->role); + else + $this->_helper->redirector('login', 'index', 'default');*/ + } + + /** + * ===================================================================================================================== + * ========= ELENCO PAGINE STATIC ACTION =============================================== + * ===================================================================================================================== + */ + + public function assistenzaAction() + { + + } + + public function caratteristicheAction() + { + + } + + public function acquistaAction() + { + + } + + public function downloadsoftwareAction() + { + + } + + public function copyrightAction() + { + + } + + public function privacyAction() + { + $this->redirect("https://www.iubenda.com/privacy-policy/70038880"); + } + + public function cookiepolicyAction() + { + $this->redirect("https://www.iubenda.com/privacy-policy/70038880/cookie-policy"); + } + + /** + * ===================================================================================================================== + * ========= ACTION SPECIALI =========================================================== + * ===================================================================================================================== + */ + + public function resetpasswordAction() + { + $this->_helper->layout->setLayout('admin'); + + $this->view->moduleName = 'default'; + $rcode = $this->getParam('rcode', null); + $this->view->hideForm = false; + $this->view->rcode = $rcode; + + if (!$rcode && $this->getRequest()->isPost()) { + + $email = $this->_getParam('Email', null); + if (!$email) { + $this->view->errorMessage = "Inserire un email corretta!"; + return; + } + + $users = $this->_genericModel->getByColumnName('Users', 'Email', $email); + if (!$users || !$users['stato'] || $users['role'] === 'admin') { + $this->view->warningMessage = "Nessuna corrispondenza per l'email inserita."; + $this->view->hideForm = true; + return; + } + + if ($users['NumeroResetPw'] > 5) { + $this->view->warningMessage = "Hai effettuato troppe richieste per il reseet password, attendi 48 ore o contatta l'amministrazione su xxxx"; + $this->view->hideForm = true; + return; + } + + //Genero rcode e incremento il numero di richieste già effettuate per il limite max + $numeroReset = ($users['NumeroResetPw']) ? $users['NumeroResetPw'] : 0; + $numeroReset += 1; + $rcode = md5($users['PartitaIva'] . date('YmdHis')); + $this->_genericModel->update('Users', $users['id'], array('DataRichiestaResetPw' => date('Y-m-d H:i:s'), 'rcode' => $rcode, 'NumeroResetPw' => $numeroReset)); + $users['rcode'] = $rcode; + + //Invio email di recupero + $this->inviaEmailDiRecuperoPassword($users); + + $this->view->successMessage = "Ti è stata inviata una email per effettuare il reset della password, consulta la tua casella di posta e segui le istruzioni."; + $this->view->hideForm = true; + return; + } + + // FINE RICHIESTA + + // INIZIO RESET PASSWORD + + if ($rcode) { + + //Controllo del codice rcode + $utente = $this->_genericModel->getByColumnName('Users', 'rcode', $rcode); + if (!$utente) { + $this->view->warningMessage = "La richiesta è scaduta, effettuare una nuova richiesta!"; + $this->view->rcode = false; + return; + } + + + if ($this->getRequest()->isPost()) { + $form = new Application_Form_Default_Index_Auth_ResetPw(); + if (!$form->isValid($this->getAllParams())) { + $this->view->errorMessage = "Ci sono errori di compilazione, controllare i campi!"; + $this->view->errorForm = $form->getMessages(); + $this->view->formData = $form->getValues(); + return; + } + + $data = $form->getValues(); + $nuovaPassword = md5(Zend_Registry::get('ENVIROMENTS')->get('password_salt') . $data['password']); + + //Inserimento nuova password nel db + $this->_genericModel->update('Users', $utente['id'], array('password' => $nuovaPassword, 'rcode' => null, 'NumeroResetPw' => 0)); + $this->view->successMessage = 'La password è stata reimpostata correttamente, effettua un nuovo login cliccando qui.'; + $this->view->hideForm = true; + return; + } + + } + + } + + public function sendcontactAction() + { + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + if ($this->getRequest()->isXmlHttpRequest()) { + + $form = new Application_Form_Index_Contact_Add(); + if (!$form->isValid($this->getAllParams())) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array( + 'success' => false, + 'message' => $form->getMessages(), + ))); + } + + try { + $emailTemplate = $this->_genericModel->getByColumnName('EmailTemplate', 'Codice', $this->_configs->get('email_contatto_template')); + if (!$emailTemplate) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array( + 'success' => false, + 'message' => "Email template non trovato o non assegnato", + ))); + } + + $this->_helper->Email->sendEmailByTemplate($this->_configs->get('email_primo_contatto'), $emailTemplate, $form->getValues()); + + //Incremento il contatore contatti email + $numContatti = $this->_VariabiliSito->get('I_Numero_Contatti_Email'); + $this->_VariabiliSito->set('I_Numero_Contatti_Email', ++$numContatti); + + $response['success'] = true; + } catch (Zend_Exception $e) { + return $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array( + 'success' => false, + 'message' => "si è verificato un errore durante l'invio del messaggio", + ))); + } + + $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode($response)); + } else { + $this->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('success' => false, 'errore' => 'Operazione non consentita'))); + } + } + + public function sitemapAction() + { + + $this->_helper->getHelper('layout')->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + header('Content-type: text/xml'); + header('Pragma: public'); + header('Cache-control: private'); + header('Expires: -1'); + echo ''; + echo ''; + + /*echo ''; + echo 'https://sfdasdas.com/'; + echo 'monthly'; + echo '';*/ + + echo ''; + } + + /** + * ===================================================================================================================== + * ========= FUNZIONI PRIVATE DEL CONTROLLER =========================================== + * ===================================================================================================================== + */ + + private function recuperaCredenziali() + { + //Recupero eventuali credenziali memorizzate + if (isset($_COOKIE[$this->_COOKIE_SITE_CREDENTIALS])) { + $credentials = Zend_Json::decode($_COOKIE[$this->_COOKIE_SITE_CREDENTIALS]); + if ($credentials['ricorda_password'] == 'on') { + try { + $credentials['password'] = $this->_rsaCryptor->decripta($credentials['password']); + } catch (Exception $e) { + $credentials = array('ricorda_password' => 'off'); + } + return $credentials; + } + } + + return array('ricorda_password' => 'on'); + } + + private function inviaEmailDiRecuperoPassword($user) + { + + //Invio email per conferma + $emailTemplate = $this->_genericModel->getByColumnName('EmailTemplate', 'Codice', 'EMAIL_RECUPERO_PASSWORD'); + if (!$emailTemplate) { + throw new Exception("Errore invio email richiesta recupero password"); + } + + $params = $user; + $params['link'] = $this->getRequest()->getScheme() . '://' . $this->getRequest()->getHttpHost() + . $this->_urlHelper->url(array('rcode' => $params['rcode']), 'resetpassword', true); + $this->_helper->Email->sendEmailByTemplate($params['Email'], $emailTemplate, $params); + } + +} + diff --git a/application/modules/default/controllers/ServicesController.php b/application/modules/default/controllers/ServicesController.php new file mode 100644 index 0000000..c0a73d4 --- /dev/null +++ b/application/modules/default/controllers/ServicesController.php @@ -0,0 +1,73 @@ +_helper->getHelper('layout')->disableLayout(); + + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + $this->_genericModel = new Application_Model_Generic(); + } + + public function preDispatch() + { + $action = $this->getRequest()->getActionName(); + if ($this->_configs->get('interrutore_services') == 'off' && $action != 'offline') { + $this->_helper->redirector('offline', 'services'); + } + } + + public function postDispatch() + { + + } + + public function offlineAction() + { + $this->_helper->viewRenderer->setNoRender(); + echo 'I servizi sono al momento disabilitati.'; + } + + public function indexAction() + { + $this->_helper->redirector('index', 'index'); + } + + /** + * ===================================================================================================================== + * ================ SERVIZI ================================================ + * ===================================================================================================================== + */ + + /** + * ===================================================================================================================== + * ========= FUNZIONI CRON DEL CPANEL =================================================== + * ===================================================================================================================== + */ + + /** + * ===================================================================================================================== + * ========= FUNZIONI PRIVATE DEL CONTROLLER =========================================== + * ===================================================================================================================== + */ + + private function _errorToLog($e, $message) + { + Zend_Registry::get('error_log')->setEventItem('url', $this->getRequest()->getRequestUri()) + ->setEventItem('trace', Zend_Json::encode($e->getTrace())) + ->setEventItem('params', Zend_Json::encode([])) + ->setEventItem('section', 'services') + ->info($message); + } + +} + diff --git a/application/modules/default/views/scripts/error/error.phtml b/application/modules/default/views/scripts/error/error.phtml new file mode 100644 index 0000000..33541d8 --- /dev/null +++ b/application/modules/default/views/scripts/error/error.phtml @@ -0,0 +1,34 @@ +responseCode == 404): ?> + +
+
+

404 - Pagina non Trovata

+

La pagina che stavi cercando di raggiungere a questo indirizzo sembra non esistere.
+ Questo è di solito il risultato di un link errato o non aggiornato.

+ Vai alla home del sito! +
+
+ + + +

Si è verificato un errore

+

message ?>

+ + + +exception) && $this->allowedIp): ?> + +

Exception information:

+

+ Message: exception->getMessage() ?> +

+ +

Stack trace:

+
exception->getTraceAsString() ?>
+  
+ +

Request Parameters:

+
escape(var_export($this->request->getParams(), true)) ?>
+  
+ + \ No newline at end of file diff --git a/application/modules/default/views/scripts/index/acquista.phtml b/application/modules/default/views/scripts/index/acquista.phtml new file mode 100644 index 0000000..039a319 --- /dev/null +++ b/application/modules/default/views/scripts/index/acquista.phtml @@ -0,0 +1,365 @@ +
+ + +
+ + + + + + + + + +
+ + +
+
+
+ + +

+ Acquista Gestione Spiaggia +

+ +
+
+
+ +
+ + +
+
+ + + +
+
+ + +
+
+
+ +
+ + +
+
+ + +
+ + Licenza Gestione Spiaggia Enterprise + +
+ + +
+ € + 185 + + iva +
+ + +

+ Annuali +

+ + +
+ + +
+ +
+ + +

+ Tutte le funzionalità +

+ +
+
+ + +
+ +
+ + +

+ 1000 Fatture elettroniche incluse +

+ +
+ +
+ + +
+ +
+ + +

+ 15 Ticket di assistenza telefonica +

+ +
+ + + + Acquista + + +
+
+ +
+ +
+
+ +
+
+ + +

+ - Pacchetti e Servizi Aggiuntivi - +

+ + +

+ I pacchetti e servizi aggiuntivi sono acquistabili solo in abbinamento ad una licenza valida +

+ +
+
+ +
+
+ +
+ + +
+
+ + +
+ + Assistenza Telefonica + +
+ + +
+ € + 80 + + iva +
+ + +

+ Pacchetto Aggiuntivo +

+ + +
+ + +
+ +
+ + +

+ 100 Minuti / 10 Ticket +

+ +
+ + + + Acquista + + +
+
+ +
+ +
+ + +
+
+ + +
+ + Fatture Elettroniche + +
+ + +
+ € + 70 + + iva +
+ + +

+ Pacchetto Aggiuntivo +

+ + +
+ + +
+ +
+ + +

+ 1000 Fatture Elettroniche +

+ +
+ + + + Acquista + + +
+
+ +
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+
+ + + + FAQ + + + +

+ Domande Frequenti +

+ + +

+ Rispondiamo alle domande più comuni che potresti avere. +

+ +
+
+
+
+ + +

+ Come procedo all'acquisto? +

+ + +

+ Per acquistare la licenza o un pacchetto aggiuntivo ti basta cliccare sul prodotto e una volta + aperto il carrello seguire la semplice procedura di acquisto, al termine del pagamento riceverei una + mail con i dati di attivzione entro 24 ore. +

+ + +

+ Come attivo la licenza d'uso? +

+ + +

+ Una volta terminata la procedura d'acquisto invieremo tramite e-mail (solitamente in giornata + all'email indicata) la fattura contenente i codici licenza necessari per l'attivazione + del software.
+ + I codici delle licenze sono calcolati in base alla partita iva della + vostra azienda, ed una volta concessa non può più essere modificata. + +

+ +
+
+ + +

+ Quanto dura la licenza? +

+ + +

+ La licenza ha una durata di 365 gg dalla data di acquisto; in caso l'acquisto venga effettuato prima + della scadenza la licenza verrà ricalcolata dalla data di scadenza. +

+ + +

+ Quali metodi di pagamenti sono accettati? +

+ + +

+ I metodi di pagamento accettati sono: carta di credito, carte prepagate o conto PayPal, altrimenti + tramite bonifico bancario.
+ In caso di pagamento tramite bonifico bancario al termine della procedura è consigliato stampare + l'ordine contenente tutti i dati necessari all'acquisto (Coordinate Bancarie ecc..) che dovrà + poi essere inviato insieme alla ricevuta di effettuato pagamento tramite email. + +

    +
  • + ... +
  • +
  • + ... +
  • +
  • + ... +
  • +
  • + ... +
  • +
  • + ... +
  • +
  • + ... +
  • +
+

+ +
+
+
+
diff --git a/application/modules/default/views/scripts/index/assistenza.phtml b/application/modules/default/views/scripts/index/assistenza.phtml new file mode 100644 index 0000000..8b91c48 --- /dev/null +++ b/application/modules/default/views/scripts/index/assistenza.phtml @@ -0,0 +1,269 @@ +
+
+
+
+ + +

+ Assistenza +

+ +
+
+ + + + Chiamaci + + +
+
+
+
+ + +
+ +
+
+
+
+ + +

+ L'Adriatica Sistemi fornisce assistenza dal lunedì al venerdì dalle ore 9:00 alle ore 13:00 nei + giorni lavorativi (con possibilità di tele-assistenza se si dispone di una linea ADSL). +

+ +

+ Per Fattura Facile l'assistenza è inclusa per tutta la durata della licenza. +

+ +

+ Per maggiori informazioni sull'assistenza clicca qui. +

+ + +

+ AGGIORNAMENTI +

+ +

+ I nostri software principali hanno la funzione di aggiornamento automatico. Se non è possibile + utilizzare l'aggiornamento automatico o il software non dispone di questa funzione è sufficiente + scaricare il programma completo ed installarlo sul computer da aggiornare (è importante non + disinstallare la versione precedentemente installata, l'installazione del pacchetto completo non + sovrascriverà mai i dati esistenti). +

+ + + +

+ MANUALI: +

+ + + + + + + + + + + + + + + + + + + + + + +

+ GUIDE: +

+ + + + + + + + + + + + +

+ DRIVER & UTILITY: +

+ + + + + +
+
+ + +
+
+ + +

+ Richiedi Assistenza Tecnica +

+ + +

+ Tramite il pulsante in basso portrai scaricare il software che permetterà ai nosstri tecnici + di collegarsi in teleassistenza. +

+ + Teleassistenza + + +
+ Telefono +
+ + +

+ +39 085 65690 +

+ + +
+ Email +
+ + +

+ info@adriaticasistetmi.it +

+ +
+
+ +
+
+
+
diff --git a/application/modules/default/views/scripts/index/caratteristiche.phtml b/application/modules/default/views/scripts/index/caratteristiche.phtml new file mode 100644 index 0000000..79ce878 --- /dev/null +++ b/application/modules/default/views/scripts/index/caratteristiche.phtml @@ -0,0 +1,578 @@ +
+
+
+
+ + + + Caratteristiche + + + +

+ Scopri tutte le funzionalità di Fattura Facile. +

+ +
+
+ +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Caratteristica + + + + + +
+ +

+ GESTIONE DOCUMENTI +

+ +
    +
  • Fatture,D.D.T.,Preventivi
  • +
  • Ordini clienti / fornitori
  • +
  • Documenti da fornitore
  • +
  • Documenti parametrici
  • +
  • Creazione automatica e/o manuale della scadenze dei pagamenti
  • +
  • Gestione allegati
  • +
  • Creazione autotmatica articoli ed aggiornamento listino
  • +
  • Esportazione / importazione documenti
  • +
  • Fatture o altro documento direttamente da preventivi, DDT, ordini ...
  • +
  • Raggruppamento documenti
  • +
  • Ricerca avanzata documenti
  • +
  • Ri.Ba.
  • +
+ +
+ +
+ +

+ FATTURA ELETTRONICA +

+ +

+ Esportazione fatture in formato XML +

+ +

+ Funzionalità integrate nel software per: +

    +
  • Invio fatture elettroniche a clienti
  • +
  • Possivilità di invio automatico email di cortesia per le Fattura Elettroniche accettate dall'AdE
  • +
  • Ricezione fattura elettroniche da fornitore
  • +
  • Importazione fatture elettroniche
  • +
  • Firma automatica su tutti i documenti
  • +
  • Conservazione sostitutiva per 10 anni delle fatture elettroniche e notifiche +
  • Download massivo fatture elettroniche in formato xml
  • + +
+

+ +

+ Note: +

    +
  • 1.000 Fatture Elettroniche (attive + passive) incluse nella licenza d'uso, + cumulabili e senza scadenza. +
  • +
  • Il Codice Destinatario viene fornito all'attivazione del servizio di + Fatturazione Elettronica incluso nella licenza + (il Codice Destinatario deve essere inserito nel Cassetto Fiscale e comunicato + ai propri fornitori) +
  • +
  • Compatibile con sistemi successivi a Windows XP
  • +
  • Richiesta connessione ad Internet
  • +
  • Dimensione massima del file fattura elettronica con allegati: +
    < 500 kb invio verso privati +
    < 5.000 Kb verso Pubblica Amministrazione +
  • +
+

+ +
+ +
+ +

+ CONTATTI +

+ +
    +
  • Anagrafiche clienti/fornitori
  • +
  • Ricerca avanzata anagrafiche
  • +
  • Gestione allegati
  • +
  • Banca e pagamenti
  • +
  • Destinazione
  • +
  • Documenti
  • +
  • Crediti
  • +
  • Articoli
  • +
  • Stampa etichette
  • +
+ +
+ +
+ +

+ MAGAZZINO +

+ +
    +
  • Scheda articolo
  • +
  • Stampa etichette
  • +
  • Storico movimenti articoli
  • +
  • Lista articoli / sottoscora / ordinati
  • +
  • Creazione documento inventario / ordine
  • +
  • Calcolo valore magazzino
  • +
  • Listini (modifica, aggiornamento e stampa)
  • +
  • Notifica articoli sottoscorta
  • +
  • Gestione lotti
  • +
  • Gestione allegati
  • +
  • Inventario con riallineamento giacenze
  • +
+ +
+ +
+ +

+ SCADENZARIO +

+ +
    +
  • Scadenze pagamenti clienti e fornitori
  • +
  • Saldo parziale / totale scadenze
  • +
  • Notifica crediti in scadenza e/o scaduti
  • +
+ +
+ +
+ +

+ STATISTICHE +

+ +
    +
  • Lista documenti e totali per cliente
  • +
  • Totali e dettaglio articoli
  • +
  • Totali articoli per gruppi appartenenza
  • +
  • Totali per iva
  • +
  • Elenco clienti / fornitori
  • +
+ +
+ +
+ +

+ AGENDA +

+ +
    +
  • Gestione semplificata di appuntamenti ed impegni
  • +
+ +
+ +
+ +

+ CALENDARIO APPUNTAMENTI +

+ +
    +
  • Calendario e agenda professionale per la gestione degli appuntamenti
  • +
  • Ricerca avanzata e gestione stati appuntamento
  • +
  • Campi ed intervalli orari parametrici
  • +
+ +
+ +
+ +

+ PROMEMORIA +

+ +
    +
  • Gestione appunti
  • +
+ +
+ +
+ +

+ PRIMA NOTA +

+ +
    +
  • Inserimento manuale movimenti
  • +
  • Creazione automatica movimenti da registrazione documenti e saldo pagamenti.
  • +
  • (gestione regole per la creazione automatica dei movimenti)
  • +
+ +
+ +
+ +

+ AGENDA PAGAMENTI +

+ +
    +
  • Agenda indipendente per l'inserimento semplificato delle scadenze dei pagamenti
  • +
+ +
+ +
+ +

+ DIARIO PRESENZE +

+ +
    +
  • Agenda per memorizzare le ore di presenza dei collaboratori
  • +
+ +
+ +
+ +

+ AGENTI +

+ +
    +
  • Gestione agenti
  • +
  • Calcolo provvigioni con % su importo fatture
  • +
  • Calcolo provvigioni con tabella provvigioni (su articoli e sconti applicati)
  • +
  • Stampa e saldo provvigioni agenti
  • +
+ +
+ +
+ +

+ BANCO +

+ +
    +
  • Interfaccia grafica "vendita al banco"
  • +
  • Collegabile con misuratori fiscali*
  • +
  • Compatibile con monitor touch screen
  • +
  • Compatibile con stampantine termiche**
  • +
+ +

+ + *Tutti i misuratori che utilizzano il protocollo Xon-Xoff (per maggiori informazioni è consigliabile contattarci telefonicamente). +
**Stampanti dotati di driver per Windows. +
+

+ +
+ +
+ +

+ GESTIONE UTENTI +

+ +
    +
  • Gestione utenti e permessi
  • +
+ +
+ +
+ +

+ GESTIONE ARCHIVI +

+ +
    +
  • Creazione e manutenzione archivi
  • +
  • Backup manuale e/o automatico
  • +
  • Ottimizzazione archivio
  • +
+ +
+ +
+ +

+ UTILITY E VERTICALIZZAZIONI +

+ +
    +
  • Calcolatrice
  • +
  • Importazione anagrafiche contatti
  • +
  • Importazione anagrafiche articoli
  • +
  • Controllo e download automatico aggiornamenti software
  • +
  • Verticalizzazioni (carrozzeria, vetreria, panificio, mercato ittico)
  • +
  • Utility (calcolo superficie marmo, calcolo litri, calcolo quantità da prezzo totale)
  • +
  • Varie (lettere di sollecito, stampa bollettino postale td123)
  • +
+ +
+ +
+ +

+ PDF E INVIO EMAIL +

+ +
    +
  • Esportazione documenti in formato PDF ***
  • +
  • Invio automatico email di cortesia per le Fattura Elettroniche
  • +
+ +

+ + *** per sistemi precedenti a Window 10 è necessario utilizzare PDFCreator + +

+ +
+ +
+ +

+ ALTRO +

+ +
    +
  • Prezzi unitari fino a 6 decimali
  • +
  • Quantità fino a 4 decimali
  • +
  • Modalità prezzi iva inclusa / iva esclusa
  • +
  • Ritenuta d'acconto
  • +
  • Acconto, bollo, incentivo
  • +
  • Spese incasso, trasporto e varie
  • +
  • Gestione lotti
  • +
  • Campi aggiuntivi per matricole, colli
  • +
+ +
+ +
+ +

+ GESTIONE INTERVENTI +

+ +
    +
  • Interventi, calendario interventi, storico interventi (per la programmazione esterna delle assistenze)
  • +
  • Riparazioni, storico riparazioni (per la gestione interna delle riparazioni)
  • +
  • Apparecchiature clienti
  • +
  • Contratti, calendario contratti
  • +
  • Programmazione interventi
  • +
  • Ticket
  • +
+ +
+ +
+ +

+ MULTIPOSTAZIONE +

+ +
    +
  • Possibilità di lavorare contemporaneamente da più postazioni sullo stesso archivio (condiviso su rete ethernet con massimo 5 postazioni attive simultaneamente).
  • +
  • Possibilità' di utilizzare la licenza su tutti i computer dell'azienda (con stessa Partita IVA)
  • +
+ +
+ +
+
+ +
+
+ +
+
+ + +
+
+
+
+ + +

+ Prova tutte le caratteristiche ... +

+ + +

+ Scarica il software gratuitamente e prova tutte le sue funzionalità +

+ + + + Provalo Ora + + +
+
+
+
+ + +
+
+ + + +
+
diff --git a/application/modules/default/views/scripts/index/copyright.phtml b/application/modules/default/views/scripts/index/copyright.phtml new file mode 100644 index 0000000..f92c3f5 --- /dev/null +++ b/application/modules/default/views/scripts/index/copyright.phtml @@ -0,0 +1,94 @@ +
+
+
+
+ + +

+ Copyright +

+ +
+
+
+
+ + +
+ +
+
+
+
+ + +

+ OGGETTO +

+ + +

+ Il servizio di assistenza telefonica, esclusivamente sui software della Adriatica Sistemi che la + prevedono, viene fornito dalle ore 8.30 alle 13.00 e dal lunedì al venerdì, esclusi i giorni festivi + e feriali non lavorativi per un massimo di 150 minuti annui, suddivisi in scatti da dieci minuti + ciascuno. Per le telefonate di durata inferiore a dieci minuti, verrà in ogni caso conteggiato uno + scatto o una chiamata, con un massimo di n. 15 telefonate annue. É esclusa la presenza in loco di + personale tecnico ed ogni fornitura di materiali o pezzi di ricambio. Il servizio di assistenza + telefonica fornisce al Cliente la possibilità di parlare al telefono con un tecnico che potrà anche + operare in teleassistenza (se il computer su cui bisogna intervenire dispone di una connessione + internet) e riguarda la risoluzione di problemi o la consulenza circa l'utilizzo di tutti i software + prodotti da Adriatica Sistemi, regolarmente acquistati e licenziati. Sono esclusi dal servizio i + prodotti in versione DEMO e i prodotti di terzi. Il mancato utilizzo delle telefonate a + disposizione, sia esso totale o parziale, non dà diritto alla restituzione del prezzo pattuito. +

+ + +

+ RISERVATEZZA +

+ +

+ La Adriatica Sistemi si impegna a prendere ogni ragionevole misura per assicurare che tutte le + informazioni di carattere segreto o riservato conosciute dal Cliente che rimangano tali, come pure + tutti i dati elaborati in ordine a quelle informazioni. +

+ + +

+ COPYRIGHT +

+ +

+ La Adriatica Sistemi rimane l'unica titolare dei diritti proprietari e di sfruttamento economico + relativi a invenzioni e programmi (inclusi software, documentazione e programmi scritti, studi, ecc) + e a quant'altro sia stato preparato, realizzato, sviluppato in funzione dei servizi acquistati dal + Cliente, al quale è concesso solo un diritto d'uso limitato e non trasferibile. +

+ +

RESPONSABILITA'

+ +

+ La Adriatica Sistemi si impegna ad impiegare la migliore tecnologia di cui è a conoscenza e le + migliori risorse a sua disposizione per fornire i Servizi oggetto del presente contratto. Il Cliente + conviene e concorda che Adriatica Sistemi non potrà in alcun caso essere ritenuta responsabile dei + ritardi o malfunzionamenti nella prestazione dei Servizi dipendenti da eventi fuori dal ragionevole + controllo della stessa quali, a titolo esemplificativo: (i) eventi di forza maggiore; (ii) eventi + dipendenti da fatto di terzi quali, a titolo meramente esemplificativo, l'interruzione o il + malfunzionamento dei servizi degli operatori di telecomunicazioni e/o delle linee elettriche; (iii) + malfunzionamento dei terminali o degli altri sistemi di comunicazione utilizzati dal Cliente. In + caso di interruzione del Servizio la Adriatica Sistemi si impegna a ripristinare il Servizio nel + minor tempo possibile. Il Cliente, inoltre, conviene e concorda che Adriatica Sistemi non potrà in + alcun caso essere ritenuta responsabile per atti od omissioni compiuti dal Cliente e in contrasto + con le obbligazioni da questi assunte ai sensi delle presenti condizioni o di quelle del singolo + software acquistato, così come non potrà essere ritenuta responsabile per malfunzionamenti dovuti a + vizi dei mezzi indispensabili all'accesso, ad un uso improprio degli stessi e/o delle modalità di + accesso al servizio da parte del Cliente o di terzi. La Adriatica Sistemi non potrà essere in nessun + caso ritenuta responsabile nei confronti del Cliente o di terzi per perdita di profitto, mancato + guadagno, né per qualsiasi altra forma di lucro cessante o danno indiretto e consequenziale connesso + all'esecuzione del presente contratto. +

+ +
+
+
+
diff --git a/application/modules/default/views/scripts/index/downloadsoftware.phtml b/application/modules/default/views/scripts/index/downloadsoftware.phtml new file mode 100644 index 0000000..7d4a849 --- /dev/null +++ b/application/modules/default/views/scripts/index/downloadsoftware.phtml @@ -0,0 +1,26 @@ + +
+
+
+
+ + +

+ Avvio del download ... +

+ + +

+ è in corso il download del software Fattura Facile
+ in caso non dovesse avviarsi automaticamente utilizzare il pulsante. +

+ + + + Scarica + + +
+
+
+
diff --git a/application/modules/default/views/scripts/index/index.phtml b/application/modules/default/views/scripts/index/index.phtml new file mode 100644 index 0000000..009e373 --- /dev/null +++ b/application/modules/default/views/scripts/index/index.phtml @@ -0,0 +1,380 @@ + +
+ + +
+ + + +
+ + +
+
+
+ + +
+ ... +
+ +
+
+ + +

+ Fattura + Facile +

+ + +

+ Il software gestionale che permette di gestire con estrema semplicità fatture, fatture elettroniche, + d.d.t., preventivi, magazzino e scadenze. +

+ + + + Download + + + Acquista + + +
+
+
+ +
+ + +
+
+
+
+ + +
+ + + + + + + +
+ + +

+ Gestione Documenti +

+ + +

+ Crea rapidamente e facilemente tutti i documenti di cui hai bisogno Fatture,Fatture Elettroniche, + D.D.T., Preventivi, Ordini clienti / fornitori, Documenti da fornitore +

+ +
+
+ + +
+ + + + + + + +
+ + +

+ Fattura Elettronica +

+ + +

+ Senza avvalersi di nessun altro strumento o servizio, inviare, firmare, ricevere e conservare le + Fatture Elettroniche, il tutto rapidamente e dall'interno del software. +

+ +
+
+ + +
+ + + + + + + +
+ + +

+ Contatti +

+ + +

+ Gestisci le anagrafiche clienti e sfrutta tutte le funzionalità di Ricerca avanzata, Gestione + allegati, Banca e pagamenti, Destinazioni, Articoli, Stampa etichette +

+ +
+
+ +
+
+ + +
+ + + + + + + +
+ + +

+ Magazzino +

+ + +

+ Gestione degli articoli di magazzino e generazione automatica dello storico dei movimenti, gestione + listini, e calcolo del valore di magazzino, lotti e allegati. +

+ +
+
+ + +
+ + + + + + + +
+ + +

+ Scadenzario +

+ + +

+ Consulta le scadenza dei pagamenti di clienti e fornotori, effettua un saldo parziale della + scadenza, notifica crediti in scadenza o scaduti. +

+ +
+
+ + +
+ + + + + + + + + +
+ + +

+ Statistiche +

+ + +

+ Consulta le statistiche per visualizzare la lista documenti e totali per cliente, o il dettaglio + articoli, totali iva ed elenco clienti / fornitori. +

+ +
+
+ + + +
+
+ +
+
+
+
+ + +
+
+
+
+ + +

+ Prezzi +

+ + +

+ Un unica licenza annuale con tutte le funzionalità incluse +

+ +
+
+
+
+ + +
+
+ + +
Enterprise
+ + +
+ € + 185 + + iva +
+ + +

+ Annuali +

+ + +
+ + + + + + + +

+ Gestione documenti +

+ +
+
+ + + + + + + +

+ Fatturazione elettronica con 1000 fatture incluse +

+ +
+
+ + + + + + + +

+ Gestione anagrafiche clienti e articoli +

+ +
+
+ + + + + + + +

+ Assistenza telefonica inclusa per un anno qui tutti i + dettagli +

+ +
+ +
+
+ +
+ +
+
+
+ + +
+
+
+
+ + +

+ Scopri tutte le caratteristiche ... +

+ + +

+ Scarica il software gratuitamente e prova tutte le sue funzionalità +

+ + + + Provalo Ora + + +
+
+
+
+ + +
+
+ + + +
+
diff --git a/application/modules/default/views/scripts/index/login.phtml b/application/modules/default/views/scripts/index/login.phtml new file mode 100644 index 0000000..e69de29 diff --git a/application/modules/default/views/scripts/index/offline.phtml b/application/modules/default/views/scripts/index/offline.phtml new file mode 100644 index 0000000..14be58a --- /dev/null +++ b/application/modules/default/views/scripts/index/offline.phtml @@ -0,0 +1,71 @@ + + + + + + + <?= $this->datiAziendali['NomeSito']; ?> + + + + + + + + + + diff --git a/application/modules/default/views/scripts/index/privacy.phtml b/application/modules/default/views/scripts/index/privacy.phtml new file mode 100644 index 0000000..e69de29 diff --git a/application/modules/default/views/scripts/index/resetpassword.phtml b/application/modules/default/views/scripts/index/resetpassword.phtml new file mode 100644 index 0000000..e69de29 diff --git a/application/modules/monitoring/Bootstrap.php b/application/modules/monitoring/Bootstrap.php new file mode 100644 index 0000000..444acfc --- /dev/null +++ b/application/modules/monitoring/Bootstrap.php @@ -0,0 +1,29 @@ +getRouter(); + + $router->addRoute( + 'monitoring', + new Zend_Controller_Router_Route('monitoring/:controller/:action', + array( + 'module'=>'monitoring', + 'controller'=>'index', + 'action'=>'index' + ) + ) + ); + + } + +} diff --git a/application/modules/monitoring/controllers/IndexController.php b/application/modules/monitoring/controllers/IndexController.php new file mode 100644 index 0000000..d6889da --- /dev/null +++ b/application/modules/monitoring/controllers/IndexController.php @@ -0,0 +1,115 @@ +_helper->layout->setLayout('admin'); + $this->_authService = new App_Service_Auth(); + $this->_genericModel = new Application_Model_Generic(); + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + + $this->_parametriSito = new App_Service_JsonConfiguration('parametri_sito'); + $this->_datiAziendali = new App_Service_JsonConfiguration('dati_aziendali'); + + $this->_MENUITEM = 'dashboard'; + $this->_PAGETITLE = 'DashBoard'; + $this->_ICONTITLE = 'fa-dashboard'; + + $this->_SECONDLEVEL = null; + $this->_SECONDLEVEL_ACTION = null; + + $this->_EVENTLOADER = FALSE; + + } + + public function preDispatch() + { + $this->view->moduleName = 'monitoring'; + + if ($this->_getParam('update')) { + $this->view->update = $this->_getParam('update'); + } else { + $this->view->update = '0'; + } + + if ($this->_getParam('err')) { + $this->view->error = $this->_getParam('err'); + } else { + $this->view->error = '0'; + } + + //Controllo delle notifiche + $nNot = $this->_genericModel->countFiltered('Errorlog', array('state = ?' => 1)); + $this->view->notification = $nNot; + if ($nNot > 0) { + $this->view->notificationlist = $this->_genericModel->customQuery("SELECT COUNT(*) as tot, section, state FROM `error_log` WHERE state = '1' GROUP BY section"); + } + + $this->_SIDEBAR_COLLAPSED = $_COOKIE['ui_sidebar_collapsed']; + + $this->view->enableTestSdk = $this->_ipManager->controllaAbilitazioneTestSdk(); + } + + public function postDispatch() + { + $this->view->action = $this->getRequest()->getActionName(); + + $this->view->menu = $this->_MENUITEM; + $this->view->pageTitle = $this->_PAGETITLE; + $this->view->iconTitle = $this->_ICONTITLE; + + $this->view->secondLevel = $this->_SECONDLEVEL; + $this->view->secondLevelAction = $this->_SECONDLEVEL_ACTION; + + $this->view->sideBarCollapsed = $this->_SIDEBAR_COLLAPSED; + + $this->view->eventLoader = $this->_EVENTLOADER; + + $this->view->parametriSito = $this->_parametriSito->getAllParams(); + $this->view->datiAziendali = $this->_datiAziendali->getAllParams(); + } + + public function logoutAction() + { + $this->_authService->clear(); + + return $this->_helper->redirector('index', 'index', 'default'); + } + + public function indexAction() + { + + } + + /*=============================================================================================== + * =========================== FUNZIONI PRIVATE DEL CONTROLLER ========================= + * =============================================================================================*/ + + public function getMainModel() + { + return $this->_genericModel; + } + + +} //Close Class diff --git a/application/modules/monitoring/views/scripts/index/_paginator.phtml b/application/modules/monitoring/views/scripts/index/_paginator.phtml new file mode 100644 index 0000000..c4fb69a --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/_paginator.phtml @@ -0,0 +1,47 @@ +pageCount > 1): ?> + + diff --git a/application/modules/monitoring/views/scripts/index/accesslog/_modal.phtml b/application/modules/monitoring/views/scripts/index/accesslog/_modal.phtml new file mode 100644 index 0000000..358c741 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/accesslog/_modal.phtml @@ -0,0 +1,54 @@ + diff --git a/application/modules/monitoring/views/scripts/index/accesslog/_searchBlock.phtml b/application/modules/monitoring/views/scripts/index/accesslog/_searchBlock.phtml new file mode 100644 index 0000000..24d42c2 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/accesslog/_searchBlock.phtml @@ -0,0 +1,26 @@ + +
+ + +
+ +
+ + +
+ +
+ CleanFiltersParam($this->search_params)); ?> +
+ + +
+
diff --git a/application/modules/monitoring/views/scripts/index/accesslog/list.phtml b/application/modules/monitoring/views/scripts/index/accesslog/list.phtml new file mode 100644 index 0000000..61aceaa --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/accesslog/list.phtml @@ -0,0 +1,170 @@ +
+ +
+ +
+ + + + + +
+ +
+ + isActiveNewInsert): ?> + + + + isActiveFilterModal): ?> + + + + + +
+ +
+ +
+ +
+
+ + + +
+ + + + render("index/$this->resourceName/th.phtml") ?> + + + + table) > 0): ?> + table as $key => $value): ?> + partial("index/$this->resourceName/td.phtml", $value) ?> + + + + + + + + + + + + +
+ + Nessun record presente + + + Nessun risultato trovato in base alla ricerca +
+
+ + + +
+ +isActiveModalDetail): ?> + render("index/$this->resourceName/_modal.phtml"); ?> + + +isActiveFilterModal): ?> + render("index/$this->resourceName/_modalFilter.phtml"); ?> + + +idDetail > 0): ?> + + + diff --git a/application/modules/monitoring/views/scripts/index/accesslog/td.phtml b/application/modules/monitoring/views/scripts/index/accesslog/td.phtml new file mode 100644 index 0000000..ce9ebf6 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/accesslog/td.phtml @@ -0,0 +1,41 @@ + + + + ExtractData($this->data, 'withtime', true); ?> + ip; ?> + + tipo): + case'admin': ?> + + + + + + + + + + + + + + tipo); ?> + + + +
+ +
+ + + + diff --git a/application/modules/monitoring/views/scripts/index/accesslog/th.phtml b/application/modules/monitoring/views/scripts/index/accesslog/th.phtml new file mode 100644 index 0000000..86546c2 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/accesslog/th.phtml @@ -0,0 +1,22 @@ + + + + + + Data + Ip + Tipo + + + diff --git a/application/modules/monitoring/views/scripts/index/errorlog/_modal.phtml b/application/modules/monitoring/views/scripts/index/errorlog/_modal.phtml new file mode 100644 index 0000000..42fb0d8 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/errorlog/_modal.phtml @@ -0,0 +1,45 @@ + diff --git a/application/modules/monitoring/views/scripts/index/errorlog/_searchBlock.phtml b/application/modules/monitoring/views/scripts/index/errorlog/_searchBlock.phtml new file mode 100644 index 0000000..171253a --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/errorlog/_searchBlock.phtml @@ -0,0 +1,32 @@ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ CleanFiltersParam($this->search_params)); ?> +
+ + +
+
diff --git a/application/modules/monitoring/views/scripts/index/errorlog/get.phtml b/application/modules/monitoring/views/scripts/index/errorlog/get.phtml new file mode 100644 index 0000000..f54ff60 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/errorlog/get.phtml @@ -0,0 +1,63 @@ + +

Url:
baseUrl; ?>url; ?>

+ +section === 'web_service'): ?> +
+
+

NomeDB:
db_name; ?>

+
+
+

Username:
username; ?>

+
+
+

Token:
token; ?>

+
+
+ + +
Messaggio:
+
+ msg; ?> +
+ + + +
Stack Trace:
+
+ + + + + + + + + trace as $key => $value): ?> + + + + + + + + +
FileLineFunctionClass
+
+
+
Parametri:
+
+ + + + + + + params as $key => $value): ?> + + + + + + +
ParametroValore
+
diff --git a/application/modules/monitoring/views/scripts/index/errorlog/list.phtml b/application/modules/monitoring/views/scripts/index/errorlog/list.phtml new file mode 100644 index 0000000..251dab9 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/errorlog/list.phtml @@ -0,0 +1,173 @@ +
+ +
+ +
+ + + + + +
+ +
+ + isActiveNewInsert): ?> + + + + isActiveFilterModal): ?> + + + + + +
+ +
+ +
+ +
+
+ + + +
+ + + + render("index/$this->resourceName/th.phtml") ?> + + + + table) > 0): ?> + table as $key => $value): ?> + partial("index/$this->resourceName/td.phtml", $value) ?> + + + + + + + + + + + + +
+ + Nessun record presente + + + Nessun risultato trovato in base alla ricerca +
+
+ + + +
+ +isActiveModalDetail): ?> + render("index/$this->resourceName/_modal.phtml"); ?> + + +isActiveFilterModal): ?> + render("index/$this->resourceName/_modalFilter.phtml"); ?> + + +idDetail > 0): ?> + + + diff --git a/application/modules/monitoring/views/scripts/index/errorlog/td.phtml b/application/modules/monitoring/views/scripts/index/errorlog/td.phtml new file mode 100644 index 0000000..d811a88 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/errorlog/td.phtml @@ -0,0 +1,60 @@ + + + + ExtractData($this->data,'withtime',true); ?> + msg); ?> + username); ?> + db_name); ?> + state): + case'1': ?> + New + + Pending + + Viewed + + Resolved + + + + section; ?> + +
+ + + state): + case'1': ?> + + + + + + + + + + + +
+ + + + diff --git a/application/modules/monitoring/views/scripts/index/errorlog/th.phtml b/application/modules/monitoring/views/scripts/index/errorlog/th.phtml new file mode 100644 index 0000000..6a76ceb --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/errorlog/th.phtml @@ -0,0 +1,25 @@ + + + + + + Data + Messaggio di errore + Username + Db Name + Stato + Section + + + diff --git a/application/modules/monitoring/views/scripts/index/index.phtml b/application/modules/monitoring/views/scripts/index/index.phtml new file mode 100644 index 0000000..e69de29 diff --git a/application/modules/monitoring/views/scripts/index/loginviiemails/_modal.phtml b/application/modules/monitoring/views/scripts/index/loginviiemails/_modal.phtml new file mode 100644 index 0000000..e7a8727 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/loginviiemails/_modal.phtml @@ -0,0 +1,45 @@ + diff --git a/application/modules/monitoring/views/scripts/index/loginviiemails/_searchBlock.phtml b/application/modules/monitoring/views/scripts/index/loginviiemails/_searchBlock.phtml new file mode 100644 index 0000000..2dd12af --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/loginviiemails/_searchBlock.phtml @@ -0,0 +1,27 @@ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ CleanFiltersParam($this->search_params)); ?> +
+ + +
+
diff --git a/application/modules/monitoring/views/scripts/index/loginviiemails/get.phtml b/application/modules/monitoring/views/scripts/index/loginviiemails/get.phtml new file mode 100644 index 0000000..b776523 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/loginviiemails/get.phtml @@ -0,0 +1,64 @@ + +

Data:
DataInvio; ?>

+ +
Messaggio:
+
+ message; ?> +
+ +
Processed:
+
+ + + + + + + + + processed_emails) <= 0): ?> + + + + + processed_emails as $key => $value): ?> + + + + + + + + + +
IdEmailStato PrecedenteNuovo Stato
Nessun invio
+
+
+
Errori:
+
+ + + + + + + + + errors) <= 0): ?> + + + + + errors as $key => $value): ?> + + + + + + + + + + +
EmailIdEmailStatoPrecedenteMessage
Nessun errore
+
diff --git a/application/modules/monitoring/views/scripts/index/loginviiemails/list.phtml b/application/modules/monitoring/views/scripts/index/loginviiemails/list.phtml new file mode 100644 index 0000000..1afef2a --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/loginviiemails/list.phtml @@ -0,0 +1,173 @@ +
+ +
+ +
+ + + + + +
+ +
+ + isActiveNewInsert): ?> + + + + isActiveFilterModal): ?> + + + + + +
+ +
+ +
+ +
+
+ + + +
+ + + + render("index/$this->resourceName/th.phtml") ?> + + + + table) > 0): ?> + table as $key => $value): ?> + partial("index/$this->resourceName/td.phtml", $value) ?> + + + + + + + + + + + + +
+ + Nessun record presente + + + Nessun risultato trovato in base alla ricerca +
+
+ + + +
+ +isActiveModalDetail): ?> + render("index/$this->resourceName/_modal.phtml"); ?> + + +isActiveFilterModal): ?> + render("index/$this->resourceName/_modalFilter.phtml"); ?> + + +idDetail > 0): ?> + + + diff --git a/application/modules/monitoring/views/scripts/index/loginviiemails/td.phtml b/application/modules/monitoring/views/scripts/index/loginviiemails/td.phtml new file mode 100644 index 0000000..8eaadbd --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/loginviiemails/td.phtml @@ -0,0 +1,19 @@ + + + + ExtractData($this->DataInvio,'withtime',true); ?> + message); ?> + + +
+ + +
+ + + + diff --git a/application/modules/monitoring/views/scripts/index/loginviiemails/th.phtml b/application/modules/monitoring/views/scripts/index/loginviiemails/th.phtml new file mode 100644 index 0000000..2425153 --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/loginviiemails/th.phtml @@ -0,0 +1,21 @@ + + + + + + Data + Messaggio + + + diff --git a/application/modules/monitoring/views/scripts/index/partial/notify.phtml b/application/modules/monitoring/views/scripts/index/partial/notify.phtml new file mode 100644 index 0000000..64751bc --- /dev/null +++ b/application/modules/monitoring/views/scripts/index/partial/notify.phtml @@ -0,0 +1,6 @@ + + + tot ?> errori per la sezione section ?> + + diff --git a/application/modules/v1/Bootstrap.php b/application/modules/v1/Bootstrap.php new file mode 100644 index 0000000..afc9102 --- /dev/null +++ b/application/modules/v1/Bootstrap.php @@ -0,0 +1,37 @@ +registerPlugin(new Zend_Controller_Plugin_PutHandler()); + } + + public function _initPersonalRouter() + { + $router = Zend_Controller_Front::getInstance()->getRouter(); + + $router->addRoute( + 'paginator', + new Zend_Controller_Router_Route('/:module/:controller/list/:page/:count/*', + array( + 'module' => 'v1', + 'action' => 'get' + ) + ) + ); + + $router->addRoute( + 'getmethod', + new Zend_Controller_Router_Route('/:module/:controller/m/:method/*', + array( + 'module' => 'v1', + 'action' => 'get' + ) + ) + ); + + } + +} diff --git a/application/modules/v1/controllers/IndexController.php b/application/modules/v1/controllers/IndexController.php new file mode 100644 index 0000000..a53831e --- /dev/null +++ b/application/modules/v1/controllers/IndexController.php @@ -0,0 +1,50 @@ +_resourceName = 'Abstract'; + parent::init(); + } + + public function indexAction() + { + try { + $this->_responseData->message = 'As Fb2b.net WS'; + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + $this->_responseData->message = $e->getMessage(); + $this->_responseData->trace = $e->getTrace(); + $this->sendResponse(); + } + } + + public function getAction() + { + $this->_responseData->message = 'Funzione non disponibile'; + $this->sendResponse(); + } + + public function postAction() + { + $this->_responseData->message = 'Funzione non disponibile'; + $this->sendResponse(); + } + + public function putAction() + { + $this->_responseData->message = 'Funzione non disponibile'; + $this->sendResponse(); + } + + public function deleteAction() + { + $this->_responseData->message = 'Funzione non disponibile'; + $this->sendResponse(); + } + + +}//END CLASS diff --git a/application/modules/v1/controllers/UsersController.php b/application/modules/v1/controllers/UsersController.php new file mode 100644 index 0000000..0e48a11 --- /dev/null +++ b/application/modules/v1/controllers/UsersController.php @@ -0,0 +1,48 @@ +_resourceName = 'Users'; + $this->_authInfo = new App_Service_Auth(); + parent::init(); + } + + public function postAction() + { + $this->disableCallAction(); + } + + public function putAction() + { + $this->disableCallAction(); + } + + public function deleteAction() + { + $this->disableCallAction(); + } + + //----------------------------------------------- + + public function switchMethodFunction($method) + { + switch ($method) { + default: + $this->defaultGetList(); + break; + } + } + + public function getSingleElementManipulate($data) + { + return array_diff_key($data, array_flip(array('token', 'password', 'staylogin'))); + } + + + +}//END CLASS diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..73695d0 --- /dev/null +++ b/composer.json @@ -0,0 +1,16 @@ +{ + "name": "adriaticasistemi/gestionespiaggia.it", + "description": "GestioneSpiaggia.it", + "type": "project", + "license": "proprietary", + "require": { + "shardj/zf1-future": "^1.19.5" + }, + "authors": [ + { + "name": "Adriatica Sistemi", + "email": "info@adriaticasistemi.it" + } + ], + "minimum-stability": "stable" +} diff --git a/index.php b/index.php new file mode 100644 index 0000000..83c9814 --- /dev/null +++ b/index.php @@ -0,0 +1,3 @@ + "Tipo di dato non valido: il dato dev'essere di tipo float, stringa o intero.", + "'%value%' contains characters which are non alphabetic and no digits" => "'%value%' contiene caratteri che non sono alfanumerici", + "'%value%' is an empty string" => "'%value%' è una stringa vuota", + + // Zend_Validate_Alpha + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' contains non alphabetic characters" => "'%value%' contiene caratteri non alfabetici", + "'%value%' is an empty string" => "'%value%' è una stringa vuota", + + // Zend_Validate_Barcode + "'%value%' failed checksum validation" => "'%value%' non ha un checksum valido", + "'%value%' contains invalid characters" => "'%value%' contiene caratteri non permessi", + "'%value%' should have a length of %length% characters" => "'%value%' non ha la lunghezza corretta di %length% caratteri", + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + + // Zend_Validate_Between + "'%value%' is not between '%min%' and '%max%', inclusively" => "'%value%' non è compreso tra '%min%' e '%max%', inclusi", + "'%value%' is not strictly between '%min%' and '%max%'" => "'%value%' non è strettamente compreso tra '%min%' e '%max%'", + + // Zend_Validate_Callback + "'%value%' is not valid" => "'%value%' non è valido", + "Failure within the callback, exception returned" => "Callback fallita, eccezione ritornata", + + // Zend_Validate_Ccnum + "'%value%' must contain between 13 and 19 digits" => "'%value%' deve contenere tra 13 e 19 cifre", + "Luhn algorithm (mod-10 checksum) failed on '%value%'" => "L'algoritmo di Luhn (checksum mod-10) è fallito su '%value%'", + + // Zend_Validate_CreditCard + "Luhn algorithm (mod-10 checksum) failed on '%value%'" => "L'algoritmo di Luhn (checksum mod-10) è fallito su '%value%'", + "'%value%' must contain only digits" => "'%value%' deve contenere solo cifre", + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' contains an invalid amount of digits" => "'%value%' contiene un numero non valido di cifre", + "'%value%' is not from an allowed institute" => "'%value%' proviene da un istituto non supportato", + "Validation of '%value%' has been failed by the service" => "'%value%' non è stato validato dal servizio", + "The service returned a failure while validating '%value%'" => "Il servizio ha ritornato validazione negativa per '%value%'", + + // Zend_Validate_Date + "Invalid type given, value should be string, integer, array or Zend_Date" => "Tipo di dato non valido, il dato dev'essere di tipo stringa, intero, array o Zend_Date", + "'%value%' does not appear to be a valid date" => "'%value%' non sembra essere una data valida", + "'%value%' does not fit the date format '%format%'" => "'%value%' non corrisponde al formato data '%format%'", + + // Zend_Validate_Db_Abstract + "No record matching %value% was found" => "Non è stato trovato un record con valore %value%", + "A record matching %value% was found" => "E' già presente un record con valore %value%", + + // Zend_Validate_Digits + "Invalid type given, value should be float, string, or integer" => "Tipo di dato non valido: il dato dev'essere di tipo float, stringa o intero.", + "'%value%' contains characters which are not digits; but only digits are allowed" => "'%value%' contiene caratteri che non sono cifre, ma solo le cifre sono ammesse", + "'%value%' is an empty string" => "'%value%' è una stringa vuota", + + // Zend_Validate_EmailAddress + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' is not a valid email address in the basic format local-part@hostname" => "'%value%' non è un indirizzo email valido nel formato base local-part@hostname", + "'%hostname%' is not a valid hostname for email address '%value%'" => "'%hostname%' non è un hostname valido nell'indirizzo email '%value%'", + "'%hostname%' does not appear to have a valid MX record for the email address '%value%'" => "'%hostname%' non sembra avere un record MX DNS valido nell'indirizzo email %value%'", + "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network." => "'%hostname%' non è in un segmento di rete routabile. L'indirizzo email '%value%' non può essere risolto nella rete pubblica.", + "'%localPart%' can not be matched against dot-atom format" => "'%localPart%' non può essere validato nel formato dot-atom", + "'%localPart%' can not be matched against quoted-string format" => "'%localPart%' non può essere validato nel formato quoted-string", + "'%localPart%' is no valid local part for email address '%value%'" => "'%localPart%' non è una local part valida nell'indirizzo email '%value%'", + "'%value%' exceeds the allowed length" => "'%value%' supera la lunghezza consentita", + + // Zend_Validate_File_Count + "Too many files, maximum '%max%' are allowed but '%count%' are given" => "Troppi file, sono consentiti massimo '%max%' file ma ne sono stati passati '%count%'", + "Too few files, minimum '%min%' are expected but '%count%' are given" => "Troppi pochi file, sono attesi minimo '%min%' file ma ne sono stato passati solo '%count%'", + + // Zend_Validate_File_Crc32 + "File '%value%' does not match the given crc32 hashes" => "Il file '%value%' non ha un hash crc32 tra quelli consentiti", + "A crc32 hash could not be evaluated for the given file" => "L'hash crc32 non può essere calcolato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_ExcludeExtension + "File '%value%' has a false extension" => "Il file '%value%' ha un'estensione invalida", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_ExcludeMimeType + "File '%value%' has a false mimetype of '%type%'" => " Il file '%value%' ha un mimetype non consentito: '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere individuato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_Exists + "File '%value%' does not exist" => "Il file '%value%' non esiste", + + // Zend_Validate_File_Extension + "File '%value%' has a false extension" => "Il file '%value%' ha un'estensione invalida", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_FilesSize + "All files in sum should have a maximum size of '%max%' but '%size%' were detected" => "I file devono avere in totale una dimensione massima di '%max%' ma è stata rilevata una dimensione di '%size%'", + "All files in sum should have a minimum size of '%min%' but '%size%' were detected" => "I file devono avere in totale una dimensione minima di '%min%' ma è stata rilevata una dimensione di '%size%'", + "One or more files can not be read" => "Uno o più file non possono essere letti", + + // Zend_Validate_File_Hash + "File '%value%' does not match the given hashes" => "I file '%value%' non corrisponde agli hash dati", + "A hash could not be evaluated for the given file" => "Un hash non può essere valutato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_ImageSize + "Maximum allowed width for image '%value%' should be '%maxwidth%' but '%width%' detected" => "La larghezza massima consentita per l'immagine '%value%' è '%maxwidth%' ma è stata rilevata una larghezza di '%width%'", + "Minimum expected width for image '%value%' should be '%minwidth%' but '%width%' detected" => "La larghezza minima consentita per l'immagine '%value%' è '%minwidth%' ma è stata rilevata una larghezza di '%width%'", + "Maximum allowed height for image '%value%' should be '%maxheight%' but '%height%' detected" => "L'altezza massima consentita per l'immagine '%value%' è '%maxheight%' ma è stata rilevata un'altezza di '%height%'", + "Minimum expected height for image '%value%' should be '%minheight%' but '%height%' detected" => "L'altezza minima consentita per l'immagine '%value%' è '%minheight%' ma è stata rilevata un'altezza di '%height%'", + "The size of image '%value%' could not be detected" => "Le dimensioni dell'immagine '%value%' non possono essere rilevate", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_IsCompressed + "File '%value%' is not compressed, '%type%' detected" => "Il file '%value%' non è un file compresso, ma un file di tipo '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere rilevato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_IsImage + "File '%value%' is no image, '%type%' detected" => "Il file '%value%' non è un'immagine, ma un file di tipo '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere rilevato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_Md5 + "File '%value%' does not match the given md5 hashes" => "Il file '%value%' non corrisponde agli hash md5 dati", + "A md5 hash could not be evaluated for the given file" => "Un hash md5 non può essere valutato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_MimeType + "File '%value%' has a false mimetype of '%type%'" => "Il file '%value%' ha un mimetype invalido: '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere rilevato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_NotExists + "File '%value%' exists" => "Il file '%value%' esiste già", + + // Zend_Validate_File_Sha1 + "File '%value%' does not match the given sha1 hashes" => "Il file '%value%' non corrisponde agli hash sha1 dati", + "A sha1 hash could not be evaluated for the given file" => "Un hash sha1 non può essere valutato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_Size + "Maximum allowed size for file '%value%' is '%max%' but '%size%' detected" => "La dimensione massima consentita per il file '%value%' è '%max%' ma è stata rilevata una dimensione di '%size%'", + "Minimum expected size for file '%value%' is '%min%' but '%size%' detected" => "La dimensione minima consentita per il file '%value%' è '%min%' ma è stata rilevata una dimensione di '%size%'", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_Upload + "File '%value%' exceeds the defined ini size" => "Il file '%value%' eccede la dimensione definita nell'ini", + "File '%value%' exceeds the defined form size" => "Il file '%value%' eccede la dimensione definita nella form", + "File '%value%' was only partially uploaded" => "Il file '%value%' è stato caricato solo parzialmente", + "File '%value%' was not uploaded" => "Il file '%value%' non è stato caricato", + "No temporary directory was found for file '%value%'" => "Non è stata trovata una directory temporanea per il file '%value%'", + "File '%value%' can't be written" => "Il file '%value%' non può essere scritto", + "A PHP extension returned an error while uploading the file '%value%'" => "Un'estensione di PHP ha generato un errore durante il caricamento del file '%value%'", + "File '%value%' was illegally uploaded. This could be a possible attack" => "Il file '%value%' è stato caricato irregolarmente. Potrebbe trattarsi di un attacco", + "File '%value%' was not found" => "Il file '%value%' non è stato trovato", + "Unknown error while uploading file '%value%'" => "Errore sconosciuto durante il caricamento del file '%value%'", + + // Zend_Validate_File_WordCount + "Too much words, maximum '%max%' are allowed but '%count%' were counted" => "Il file contiene troppe parole, ne sono consentite massimo '%max%' ma ne sono state contate '%count%'", + "Too less words, minimum '%min%' are expected but '%count%' were counted" => "Il file contiene troppe poche parole, ne sono consentite minimo '%min%' ma ne sono state contate '%count%'", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_Float + "Invalid type given, value should be float, string, or integer" => "Tipo di dato non valido: il dato dev'essere di tipo float, stringa o intero.", + "'%value%' does not appear to be a float" => "'%value%' non sembra essere un dato di tipo float", + + // Zend_Validate_GreaterThan + "'%value%' is not greater than '%min%'" => "'%value%' non è maggiore di '%min%'", + + // Zend_Validate_Hex + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' has not only hexadecimal digit characters" => "'%value%' non è composto solo da caratteri esadecimali", + + // Zend_Validate_Hostname + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' appears to be an IP address, but IP addresses are not allowed" => "'%value%' sembra essere un indirizzo IP, ma gli indirizzi IP non sono consentiti", + "'%value%' appears to be a DNS hostname but cannot match TLD against known list" => "'%value%' sembra essere un hostname DNS ma il suo TLD è sconosciuto", + "'%value%' appears to be a DNS hostname but contains a dash in an invalid position" => "'%value%' sembra essere un hostname DNS ma contiene un trattino in una posizione non valida", + "'%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'" => "'%value%' sembra essere un hostname DNS ma non rispetta lo schema per il TLD '%tld%'", + "'%value%' appears to be a DNS hostname but cannot extract TLD part" => "'%value%' sembra essere un hostname DNS ma non è possibile estrarne il TLD", + "'%value%' does not match the expected structure for a DNS hostname" => "'%value%' non sembra rispettare la struttura attesa per un hostname DNS", + "'%value%' does not appear to be a valid local network name" => "'%value%' non sembra essere un local network name valido", + "'%value%' appears to be a local network name but local network names are not allowed" => "'%value%' sembra essere un local network name, ma i local network names non sono consentiti", + "'%value%' appears to be a DNS hostname but the given punycode notation cannot be decoded" => "'%value%' sembra essere un hostname DNS ma la notazione punycode data non può essere decodificata", + + // Zend_Validate_Iban + "Unknown country within the IBAN '%value%'" => "Country Code sconosciuto nell'IBAN '%value%'", + "'%value%' has a false IBAN format" => "'%value%' ha un formato IBAN non valido", + "'%value%' has failed the IBAN check" => "'%value%' ha fallito il controllo IBAN", + + // Zend_Validate_Identical + "The token '%token%' does not match the given token '%value%'" => "Il token '%token%' non corrisponde al token dato '%value%'", + "No token was provided to match against" => "Non è stato dato nessun token per il confronto", + "The two given tokens do not match" => "I due campi non corrispondono", + + // Zend_Validate_InArray + "'%value%' was not found in the haystack" => "'%value%' non è stato trovato nell'array", + + // Zend_Validate_Int + "Invalid type given, value should be string or integer" => "Tipo di dato non valido, il dato dev'essere una stringa o un intero", + "'%value%' does not appear to be an integer" => "'%value%' non sembra essere un intero", + + // Zend_Validate_Ip + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' does not appear to be a valid IP address" => "'%value%' non sembra essere un indirizzo IP valido", + + // Zend_Validate_Isbn + "Invalid type given, value should be string or integer" => "Tipo di dato non valido, il dato dev'essere una stringa o un intero", + "'%value%' is no valid ISBN number" => "'%value%' non è un numero ISBN valido", + + // Zend_Validate_LessThan + "'%value%' is not less than '%max%'" => "'%value%' non è minore di '%max%'", + + // Zend_Validate_NotEmpty + "Invalid type given, value should be float, string, array, boolean or integer" => "Tipo di dato non valido, il dato dev'essere di tipo float, stringa, array, booleano o intero", + "Value is required and can't be empty" => "Campo obbligatorio", + + // Zend_Validate_PostCode + "Invalid type given. The value should be a string or a integer" => "Tipo di dato non valido. Il dato dev'essere una stringa o un intero", + "'%value%' does not appear to be a postal code" => "'%value%' non sembra essere un codice postale", + + // Zend_Validate_Regex + "Invalid type given, value should be string, integer or float" => "Tipo di dato non valido: il dato dev'essere di tipo stringa, intero o float.", + "'%value%' does not match against pattern '%pattern%'" => "'%value%' non corrisponde al pattern '%pattern%'", + "There was an internal error while using the pattern '%pattern%'" => "Si è verificato un errore interno usando il pattern '%pattern%'", + + // Zend_Validate_Sitemap_Changefreq + "'%value%' is no valid sitemap changefreq" => "'%value%' non è una sitemap changefreq valida", + "Invalid type given, the value should be a string" => "Invalid type given, the value should be a string", + + // Zend_Validate_Sitemap_Lastmod + "'%value%' is no valid sitemap lastmod" => "'%value%' non è un sitemap lastmod valido", + "Invalid type given, the value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + + // Zend_Validate_Sitemap_Loc + "'%value%' is no valid sitemap location" => "'%value%' non è una sitemap location valida", + "Invalid type given, the value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + + // Zend_Validate_Sitemap_Priority + "'%value%' is no valid sitemap priority" => "'%value%' non è una sitemap priority valida", + "Invalid type given, the value should be a integer, a float or a numeric string" => "Tipo di dato non valido, il dato dev'essere di tipo intero, float o una stringa numerica", + + // Zend_Validate_StringLength + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' is less than %min% characters long" => "'%value%' è meno lungo di %min% caratteri", + "'%value%' is more than %max% characters long" => "'%value%' è più lungo di %max% caratteri", + + // Zend_Validate_DbRecordExist + "No record matching '%value%' was found"=>"Il valore '%value%' non risulta valido" +); diff --git a/languages/it/Zend_Validate.php b/languages/it/Zend_Validate.php new file mode 100644 index 0000000..9b1fb19 --- /dev/null +++ b/languages/it/Zend_Validate.php @@ -0,0 +1,269 @@ + "Tipo di dato non valido: il dato dev'essere di tipo float, stringa o intero.", + "'%value%' contains characters which are non alphabetic and no digits" => "'%value%' contiene caratteri che non sono alfanumerici", + "'%value%' is an empty string" => "'%value%' è una stringa vuota", + + // Zend_Validate_Alpha + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' contains non alphabetic characters" => "'%value%' contiene caratteri non alfabetici", + "'%value%' is an empty string" => "'%value%' è una stringa vuota", + + // Zend_Validate_Barcode + "'%value%' failed checksum validation" => "'%value%' non ha un checksum valido", + "'%value%' contains invalid characters" => "'%value%' contiene caratteri non permessi", + "'%value%' should have a length of %length% characters" => "'%value%' non ha la lunghezza corretta di %length% caratteri", + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + + // Zend_Validate_Between + "'%value%' is not between '%min%' and '%max%', inclusively" => "'%value%' non è compreso tra '%min%' e '%max%', inclusi", + "'%value%' is not strictly between '%min%' and '%max%'" => "'%value%' non è strettamente compreso tra '%min%' e '%max%'", + + // Zend_Validate_Callback + "'%value%' is not valid" => "'%value%' non è valido", + "Failure within the callback, exception returned" => "Callback fallita, eccezione ritornata", + + // Zend_Validate_Ccnum + "'%value%' must contain between 13 and 19 digits" => "'%value%' deve contenere tra 13 e 19 cifre", + "Luhn algorithm (mod-10 checksum) failed on '%value%'" => "L'algoritmo di Luhn (checksum mod-10) è fallito su '%value%'", + + // Zend_Validate_CreditCard + "Luhn algorithm (mod-10 checksum) failed on '%value%'" => "L'algoritmo di Luhn (checksum mod-10) è fallito su '%value%'", + "'%value%' must contain only digits" => "'%value%' deve contenere solo cifre", + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' contains an invalid amount of digits" => "'%value%' contiene un numero non valido di cifre", + "'%value%' is not from an allowed institute" => "'%value%' proviene da un istituto non supportato", + "Validation of '%value%' has been failed by the service" => "'%value%' non è stato validato dal servizio", + "The service returned a failure while validating '%value%'" => "Il servizio ha ritornato validazione negativa per '%value%'", + + // Zend_Validate_Date + "Invalid type given, value should be string, integer, array or Zend_Date" => "Tipo di dato non valido, il dato dev'essere di tipo stringa, intero, array o Zend_Date", + "'%value%' does not appear to be a valid date" => "'%value%' non sembra essere una data valida", + "'%value%' does not fit the date format '%format%'" => "'%value%' non corrisponde al formato data '%format%'", + + // Zend_Validate_Db_Abstract + "No record matching %value% was found" => "Non è stato trovato un record con valore %value%", + "A record matching %value% was found" => "E' già presente un record con valore %value%", + + // Zend_Validate_Digits + "Invalid type given, value should be float, string, or integer" => "Tipo di dato non valido: il dato dev'essere di tipo float, stringa o intero.", + "'%value%' contains characters which are not digits; but only digits are allowed" => "'%value%' contiene caratteri che non sono cifre, ma solo le cifre sono ammesse", + "'%value%' is an empty string" => "'%value%' è una stringa vuota", + + // Zend_Validate_EmailAddress + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' is not a valid email address in the basic format local-part@hostname" => "'%value%' non è un indirizzo email valido nel formato base local-part@hostname", + "'%hostname%' is not a valid hostname for email address '%value%'" => "'%hostname%' non è un hostname valido nell'indirizzo email '%value%'", + "'%hostname%' does not appear to have a valid MX record for the email address '%value%'" => "'%hostname%' non sembra avere un record MX DNS valido nell'indirizzo email %value%'", + "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network." => "'%hostname%' non è in un segmento di rete routabile. L'indirizzo email '%value%' non può essere risolto nella rete pubblica.", + "'%localPart%' can not be matched against dot-atom format" => "'%localPart%' non può essere validato nel formato dot-atom", + "'%localPart%' can not be matched against quoted-string format" => "'%localPart%' non può essere validato nel formato quoted-string", + "'%localPart%' is no valid local part for email address '%value%'" => "'%localPart%' non è una local part valida nell'indirizzo email '%value%'", + "'%value%' exceeds the allowed length" => "'%value%' supera la lunghezza consentita", + + // Zend_Validate_File_Count + "Too many files, maximum '%max%' are allowed but '%count%' are given" => "Troppi file, sono consentiti massimo '%max%' file ma ne sono stati passati '%count%'", + "Too few files, minimum '%min%' are expected but '%count%' are given" => "Troppi pochi file, sono attesi minimo '%min%' file ma ne sono stato passati solo '%count%'", + + // Zend_Validate_File_Crc32 + "File '%value%' does not match the given crc32 hashes" => "Il file '%value%' non ha un hash crc32 tra quelli consentiti", + "A crc32 hash could not be evaluated for the given file" => "L'hash crc32 non può essere calcolato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_ExcludeExtension + "File '%value%' has a false extension" => "Il file '%value%' ha un'estensione invalida", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_ExcludeMimeType + "File '%value%' has a false mimetype of '%type%'" => " Il file '%value%' ha un mimetype non consentito: '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere individuato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_Exists + "File '%value%' does not exist" => "Il file '%value%' non esiste", + + // Zend_Validate_File_Extension + "File '%value%' has a false extension" => "Il file '%value%' ha un'estensione invalida", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_FilesSize + "All files in sum should have a maximum size of '%max%' but '%size%' were detected" => "I file devono avere in totale una dimensione massima di '%max%' ma è stata rilevata una dimensione di '%size%'", + "All files in sum should have a minimum size of '%min%' but '%size%' were detected" => "I file devono avere in totale una dimensione minima di '%min%' ma è stata rilevata una dimensione di '%size%'", + "One or more files can not be read" => "Uno o più file non possono essere letti", + + // Zend_Validate_File_Hash + "File '%value%' does not match the given hashes" => "I file '%value%' non corrisponde agli hash dati", + "A hash could not be evaluated for the given file" => "Un hash non può essere valutato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_ImageSize + "Maximum allowed width for image '%value%' should be '%maxwidth%' but '%width%' detected" => "La larghezza massima consentita per l'immagine '%value%' è '%maxwidth%' ma è stata rilevata una larghezza di '%width%'", + "Minimum expected width for image '%value%' should be '%minwidth%' but '%width%' detected" => "La larghezza minima consentita per l'immagine '%value%' è '%minwidth%' ma è stata rilevata una larghezza di '%width%'", + "Maximum allowed height for image '%value%' should be '%maxheight%' but '%height%' detected" => "L'altezza massima consentita per l'immagine '%value%' è '%maxheight%' ma è stata rilevata un'altezza di '%height%'", + "Minimum expected height for image '%value%' should be '%minheight%' but '%height%' detected" => "L'altezza minima consentita per l'immagine '%value%' è '%minheight%' ma è stata rilevata un'altezza di '%height%'", + "The size of image '%value%' could not be detected" => "Le dimensioni dell'immagine '%value%' non possono essere rilevate", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_IsCompressed + "File '%value%' is not compressed, '%type%' detected" => "Il file '%value%' non è un file compresso, ma un file di tipo '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere rilevato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_IsImage + "File '%value%' is no image, '%type%' detected" => "Il file '%value%' non è un'immagine, ma un file di tipo '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere rilevato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_Md5 + "File '%value%' does not match the given md5 hashes" => "Il file '%value%' non corrisponde agli hash md5 dati", + "A md5 hash could not be evaluated for the given file" => "Un hash md5 non può essere valutato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_MimeType + "File '%value%' has a false mimetype of '%type%'" => "Il file '%value%' ha un mimetype invalido: '%type%'", + "The mimetype of file '%value%' could not be detected" => "Il mimetype del file '%value%' non può essere rilevato", + "File '%value%' can not be read" => "Il file '%value%' non può essere letto", + + // Zend_Validate_File_NotExists + "File '%value%' exists" => "Il file '%value%' esiste già", + + // Zend_Validate_File_Sha1 + "File '%value%' does not match the given sha1 hashes" => "Il file '%value%' non corrisponde agli hash sha1 dati", + "A sha1 hash could not be evaluated for the given file" => "Un hash sha1 non può essere valutato per il file dato", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_Size + "Maximum allowed size for file '%value%' is '%max%' but '%size%' detected" => "La dimensione massima consentita per il file '%value%' è '%max%' ma è stata rilevata una dimensione di '%size%'", + "Minimum expected size for file '%value%' is '%min%' but '%size%' detected" => "La dimensione minima consentita per il file '%value%' è '%min%' ma è stata rilevata una dimensione di '%size%'", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_File_Upload + "File '%value%' exceeds the defined ini size" => "Il file '%value%' eccede la dimensione definita nell'ini", + "File '%value%' exceeds the defined form size" => "Il file '%value%' eccede la dimensione definita nella form", + "File '%value%' was only partially uploaded" => "Il file '%value%' è stato caricato solo parzialmente", + "File '%value%' was not uploaded" => "Il file '%value%' non è stato caricato", + "No temporary directory was found for file '%value%'" => "Non è stata trovata una directory temporanea per il file '%value%'", + "File '%value%' can't be written" => "Il file '%value%' non può essere scritto", + "A PHP extension returned an error while uploading the file '%value%'" => "Un'estensione di PHP ha generato un errore durante il caricamento del file '%value%'", + "File '%value%' was illegally uploaded. This could be a possible attack" => "Il file '%value%' è stato caricato irregolarmente. Potrebbe trattarsi di un attacco", + "File '%value%' was not found" => "Il file '%value%' non è stato trovato", + "Unknown error while uploading file '%value%'" => "Errore sconosciuto durante il caricamento del file '%value%'", + + // Zend_Validate_File_WordCount + "Too much words, maximum '%max%' are allowed but '%count%' were counted" => "Il file contiene troppe parole, ne sono consentite massimo '%max%' ma ne sono state contate '%count%'", + "Too less words, minimum '%min%' are expected but '%count%' were counted" => "Il file contiene troppe poche parole, ne sono consentite minimo '%min%' ma ne sono state contate '%count%'", + "File '%value%' could not be found" => "Il file '%value%' non può essere trovato", + + // Zend_Validate_Float + "Invalid type given, value should be float, string, or integer" => "Tipo di dato non valido: il dato dev'essere di tipo float, stringa o intero.", + "'%value%' does not appear to be a float" => "'%value%' non sembra essere un dato di tipo float", + + // Zend_Validate_GreaterThan + "'%value%' is not greater than '%min%'" => "'%value%' non è maggiore di '%min%'", + + // Zend_Validate_Hex + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' has not only hexadecimal digit characters" => "'%value%' non è composto solo da caratteri esadecimali", + + // Zend_Validate_Hostname + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' appears to be an IP address, but IP addresses are not allowed" => "'%value%' sembra essere un indirizzo IP, ma gli indirizzi IP non sono consentiti", + "'%value%' appears to be a DNS hostname but cannot match TLD against known list" => "'%value%' sembra essere un hostname DNS ma il suo TLD è sconosciuto", + "'%value%' appears to be a DNS hostname but contains a dash in an invalid position" => "'%value%' sembra essere un hostname DNS ma contiene un trattino in una posizione non valida", + "'%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'" => "'%value%' sembra essere un hostname DNS ma non rispetta lo schema per il TLD '%tld%'", + "'%value%' appears to be a DNS hostname but cannot extract TLD part" => "'%value%' sembra essere un hostname DNS ma non è possibile estrarne il TLD", + "'%value%' does not match the expected structure for a DNS hostname" => "'%value%' non sembra rispettare la struttura attesa per un hostname DNS", + "'%value%' does not appear to be a valid local network name" => "'%value%' non sembra essere un local network name valido", + "'%value%' appears to be a local network name but local network names are not allowed" => "'%value%' sembra essere un local network name, ma i local network names non sono consentiti", + "'%value%' appears to be a DNS hostname but the given punycode notation cannot be decoded" => "'%value%' sembra essere un hostname DNS ma la notazione punycode data non può essere decodificata", + + // Zend_Validate_Iban + "Unknown country within the IBAN '%value%'" => "Country Code sconosciuto nell'IBAN '%value%'", + "'%value%' has a false IBAN format" => "'%value%' ha un formato IBAN non valido", + "'%value%' has failed the IBAN check" => "'%value%' ha fallito il controllo IBAN", + + // Zend_Validate_Identical + "The token '%token%' does not match the given token '%value%'" => "Il token '%token%' non corrisponde al token dato '%value%'", + "No token was provided to match against" => "Non è stato dato nessun token per il confronto", + "The two given tokens do not match" => "I due campi non corrispondono", + + // Zend_Validate_InArray + "'%value%' was not found in the haystack" => "'%value%' non è stato trovato nell'array", + + // Zend_Validate_Int + "Invalid type given, value should be string or integer" => "Tipo di dato non valido, il dato dev'essere una stringa o un intero", + "'%value%' does not appear to be an integer" => "'%value%' non sembra essere un intero", + + // Zend_Validate_Ip + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' does not appear to be a valid IP address" => "'%value%' non sembra essere un indirizzo IP valido", + + // Zend_Validate_Isbn + "Invalid type given, value should be string or integer" => "Tipo di dato non valido, il dato dev'essere una stringa o un intero", + "'%value%' is no valid ISBN number" => "'%value%' non è un numero ISBN valido", + + // Zend_Validate_LessThan + "'%value%' is not less than '%max%'" => "'%value%' non è minore di '%max%'", + + // Zend_Validate_NotEmpty + "Invalid type given, value should be float, string, array, boolean or integer" => "Tipo di dato non valido, il dato dev'essere di tipo float, stringa, array, booleano o intero", + "Value is required and can't be empty" => "Campo obbligatorio", + + // Zend_Validate_PostCode + "Invalid type given. The value should be a string or a integer" => "Tipo di dato non valido. Il dato dev'essere una stringa o un intero", + "'%value%' does not appear to be a postal code" => "'%value%' non sembra essere un codice postale", + + // Zend_Validate_Regex + "Invalid type given, value should be string, integer or float" => "Tipo di dato non valido: il dato dev'essere di tipo stringa, intero o float.", + "'%value%' does not match against pattern '%pattern%'" => "'%value%' non corrisponde al pattern '%pattern%'", + "There was an internal error while using the pattern '%pattern%'" => "Si è verificato un errore interno usando il pattern '%pattern%'", + + // Zend_Validate_Sitemap_Changefreq + "'%value%' is no valid sitemap changefreq" => "'%value%' non è una sitemap changefreq valida", + "Invalid type given, the value should be a string" => "Invalid type given, the value should be a string", + + // Zend_Validate_Sitemap_Lastmod + "'%value%' is no valid sitemap lastmod" => "'%value%' non è un sitemap lastmod valido", + "Invalid type given, the value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + + // Zend_Validate_Sitemap_Loc + "'%value%' is no valid sitemap location" => "'%value%' non è una sitemap location valida", + "Invalid type given, the value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + + // Zend_Validate_Sitemap_Priority + "'%value%' is no valid sitemap priority" => "'%value%' non è una sitemap priority valida", + "Invalid type given, the value should be a integer, a float or a numeric string" => "Tipo di dato non valido, il dato dev'essere di tipo intero, float o una stringa numerica", + + // Zend_Validate_StringLength + "Invalid type given, value should be a string" => "Tipo di dato non valido, il dato dev'essere una stringa", + "'%value%' is less than %min% characters long" => "'%value%' è meno lungo di %min% caratteri", + "'%value%' is more than %max% characters long" => "'%value%' è più lungo di %max% caratteri", + + // Zend_Validate_DbRecordExist + "No record matching '%value%' was found"=>"Il valore '%value%' non risulta valido" +); diff --git a/library/App/Constants/Domains.php b/library/App/Constants/Domains.php new file mode 100644 index 0000000..d2e9865 --- /dev/null +++ b/library/App/Constants/Domains.php @@ -0,0 +1,42 @@ + + [ + 'admin' => ['name' => 'Amministratore', 'icon' => 'user-cog', 'color' => ''], + 'user' => ['name' => 'Utente', 'icon' => 'user', 'color' => ''] + ], + self::DOMAIN_SOFTWARE => + [ + 'Winfatt' => ['name' => 'Winfatt', 'icon' => '', 'color' => ''], + 'GestioneSpiaggia' => ['name' => 'Gestione Spiaggia', 'icon' => '', 'color' => ''], + 'Webfatt' => ['name' => 'Webfatt', 'icon' => '', 'color' => ''] + ], + self::DOMAIN_NAME_STATI_INVIO_EMAILS => + [ + 'DaInviare' => ['name' => 'Da Inviare', 'icon' => 'user-cog', 'color' => 'gray'], + 'InElaborazione' => ['name' => 'In Elaborazione', 'icon' => 'user-cog', 'color' => 'warning'], + 'Inviato' => ['name' => 'Inviato', 'icon' => 'user-cog', 'color' => 'success'], + 'Annullato' => ['name' => 'Annullato', 'icon' => 'user-cog', 'color' => 'danger'], + ], + self::DOMAIN_NAME_STATIFE => + [ + 'AC' => ['name' => 'In Attesa Consegna', 'icon' => '', 'color' => 'gray'], + 'RC' => ['name' => 'Consegnata', 'icon' => '', 'color' => 'success'], + 'NS' => ['name' => 'Scartata', 'icon' => '', 'color' => 'danger'], + 'MC' => ['name' => 'Mancata Consegna', 'icon' => '', 'color' => 'warning'], + // 'DT' => ['name' => 'Decorrenza Termini', 'icon' => '', 'color' => ''], + // 'EC_ACCETTAZIONE' => ['name' => 'Accettata', 'icon' => '', 'color' => ''], + // 'EC_RIFIUTO' => ['name' => 'Rifiutata', 'icon' => '', 'color' => ''], + ], + ]; + +} diff --git a/library/App/Controller/Errors/WebServiceError.php b/library/App/Controller/Errors/WebServiceError.php new file mode 100644 index 0000000..f934f8d --- /dev/null +++ b/library/App/Controller/Errors/WebServiceError.php @@ -0,0 +1,53 @@ +_message = $message; + $this->_errorDetail = $errorDetail; + $this->_errorCode = $errorCode; + } + + public function getMyMessage() + { + return $this->_message; + } + + public function getErrorDetail() + { + return $this->_errorDetail; + } + + public function getErrorCode() + { + return $this->_errorCode; + } + +} diff --git a/library/App/Controller/Plugin/Acl.php b/library/App/Controller/Plugin/Acl.php new file mode 100644 index 0000000..fcf6994 --- /dev/null +++ b/library/App/Controller/Plugin/Acl.php @@ -0,0 +1,264 @@ +_genericModel = new Application_Model_Generic(); + $this->_auth = Zend_Auth::getInstance(); + $this->_acl = new App_Model_Acl_Acl(); + $this->_aclRestV1 = new App_Model_Acl_AclRestV1(); + + $this->_role = !$this->_auth->hasIdentity() ? 'unregistered' : $this->_auth->getIdentity()->role; + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + + } + + public function preDispatch(Zend_Controller_Request_Abstract $request) + { + + //Gestione degli accessi separati per i vari moduli + /** + * V1 = Web Service di tipo REST per interfacciarsi verso lesterno [Accesso Tramite TOKEN] + * DEFAULT | AUTH: Accesso normale del sito + * ADMIN: Accesso solo per l'utente admin + */ + + switch ($request->getModuleName()) { + //Il modulo default e auth non hanno bisogno di autenticazione quindi imposto user come 'unregistered' e vado avanti + case'default': + case'auth': + $this->_role = 'unregistered'; + if (!$this->_acl->isAllowed($this->_role, $request->getModuleName())) { + $this->denyAccess(); + } + return; + case 'admin': + case 'user': + case 'monitoring': + if (!$this->_acl->isAllowed($this->_role, $request->getModuleName())) { + $this->_auth->clearIdentity(); + $this->_redirectLogin($request); + } + return; + case'v1': + //controllo se il web services non è offline + if ($this->_configs->get('interrutore_webservices_v1') == 'off' && !$this->_ipManager->allowedIp()) { + $this->_redirectOffline($request); + } + + //controllo il web services ad accesso libero + $this->_role = 'unregistered'; + if (!$this->_aclRestV1->isAllowed(trim($this->_role), $request->getControllerName())) { + //Se il controller non è abilitato all'accesso libero allora procedo con l'autenticazione server v1 tramite token + $this->accessoV1($request, $request->getHeader(self::AUTHORIZATION_HEADER)); + } else { + if (Zend_Registry::get('ENABLE_MONGODB')) { + // controllo se settare il parametro per il nome DB nel caso non sono autenticato utilizzo un db mongo di default + $mongoDbName = $request->getHeader(self::MONGO_DB_NAME); + if ($mongoDbName) { + $mongoDbName = $this->_ipManager->getMongoDbName($mongoDbName); + $this->setMongoDbRegistryName($mongoDbName); + } + } + } + + break; + default: + break; + } + + //Controllo i permessi prima sul modulo e poi sul controller in caso sia un webservices + if (!$this->_acl->isAllowed(trim($this->_role), $request->getModuleName())) { + $this->denyAccess(); + } else { + switch ($request->getModuleName()) { + case'v1': + if (!$this->_aclRestV1->isAllowed(trim($this->_role), $request->getControllerName())) + $this->denyAccess(); + break; + } + } + + } + + private function accessoV1(Zend_Controller_Request_Abstract $request, $token) + { + if (!$token) return $this->_redirectNoAuth($request); + + //Controllo che nell'autorization header sia contenuto anche il metodo di autorizazzione lo scompongo e ottendo il codice + $authorizationHeaderParts = explode(' ', $token); + if (count($authorizationHeaderParts) > 1) { + $type = strtoupper($authorizationHeaderParts[0]); + $token = $authorizationHeaderParts[1]; + } else { + $token = $authorizationHeaderParts[0]; + } + + $user = null; + switch ($type) { + case self::AUTH_TYPE_SECRET_ID: + $user = $this->authenticateV1SecretToken($token); + break; + default: + $user = $this->authenticateV1($token); + break; + } + + // Salvo il token nel registry + Zend_Registry::set('TOKEN', $token); + + if ($user != null) + $this->_role = $user['role']; + else + $this->_redirectTokenScaduto($request); + + if (!$user['stato']) { + $this->_redirectDeactiveUserState($request); + } + + if (Zend_Registry::get('ENABLE_MONGODB')) { + $mongoDbName = $this->_ipManager->getMongoDbName($user['NomeDB']); + if ($user['role'] === 'admin') { + $mongoDbName = $request->getHeader(self::MONGO_DB_NAME); + if (!$mongoDbName) { + $mongoDbName = $this->_ipManager->getMongoAdminDbName(); + } else { + $mongoDbName = $this->_ipManager->getMongoDbName($mongoDbName); + } + } + + $this->setMongoDbRegistryName($mongoDbName); + } + + } + + private function setMongoDbRegistryName($mongoDbName) + { + if (Zend_Registry::isRegistered(App_Model_Mongo_Adapter::MONGO_DB_ADAPTER_REG_NAME)) + Zend_Registry::get(App_Model_Mongo_Adapter::MONGO_DB_ADAPTER_REG_NAME)->setDbname($mongoDbName); + else + Zend_Registry::set(App_Model_Mongo_Adapter::MONGO_DB_NAME, $mongoDbName); + } + + private function authenticateV1($token) + { + $user = $this->_genericModel->getByColumnName('Users', 'token', $token, '=', true); + if (!$user) { + return null; + } + + //Aggiornamento del campo UltimoAccesso + $this->_genericModel->update('Users', $user['id'], array('UltimoAccesso' => date('Y-m-d H:i:s'))); + + return $user; + } + + private function authenticateV1SecretToken($token) + { + $user = $this->_genericModel->getByColumnName('Users', 'secret_token', $token, '=', true); + if (!$user) { + return null; + } + + //Aggiornamento del campo UltimoAccesso + $this->_genericModel->update('Users', $user['id'], array('UltimoAccesso' => date('Y-m-d H:i:s'))); + + return $user; + } + + public function denyAccess() + { + $this->_request->setModuleName('default') + ->setControllerName('error') + ->setActionName('invalid') + ->setParam('message', 'L\'utente non ha i permessi per accedere alla risorsa.'); + } + + protected function _invalidCredential() + { + $this->_request->setModuleName('default') + ->setControllerName('error') + ->setActionName('invalid') + ->setParam('message', 'Username e/o password errati.'); + } + + protected function _redirectInvalidRequest(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + $request->setModuleName('default') + ->setControllerName('error') + ->setActionName('invalid') + ->setParam('message', 'Invalid authentication header.'); + } + + protected function _redirectNoAuth(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + $request->setModuleName('default') + ->setControllerName('error') + ->setActionName('invalid') + ->setParam('message', 'Authentication header not found'); + } + + protected function _redirectUrlScaduto(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + $request->setModuleName('default') + ->setControllerName('error') + ->setActionName('invalid') + ->setParam('message', 'Url Scaduto'); + } + + protected function _redirectTokenScaduto(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + throw new App_Controller_Errors_WebServiceError(utf8_encode("Accesso Scaduto"), null, App_Controller_Errors_WebServiceError::WEBSERVICE_SESSION_EXPIRED); + } + + protected function _redirectOffline(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + $request->setModuleName('default') + ->setControllerName('error') + ->setActionName('invalid') + ->setParam('message', 'Il web services è offline'); + } + + protected function _redirectDeactiveUserState(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + throw new App_Controller_Errors_WebServiceError(utf8_encode("Account Api Disattivato"), null, App_Controller_Errors_WebServiceError::WEBSERVICE_SESSION_EXPIRED); + } + + protected function _redirectNoMongoDBName(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + throw new App_Controller_Errors_WebServiceError(utf8_encode("Nomd DB Mongo non specificato"), null, App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR); + } + + protected function _redirectLogin(\Zend_Controller_Request_Abstract $request) + { + // Forward the request to the noauth error page. + $request->setParam('section', $request->getModuleName()) + ->setModuleName('default') + ->setControllerName('index') + ->setActionName('login'); + } + +} diff --git a/library/App/Controller/Plugin/CPanel/Xmlapi.php b/library/App/Controller/Plugin/CPanel/Xmlapi.php new file mode 100644 index 0000000..f67d223 --- /dev/null +++ b/library/App/Controller/Plugin/CPanel/Xmlapi.php @@ -0,0 +1,2470 @@ +set_hash("username", $accessHash); +* $xmlapi->set_password("username", "password"); +* +* 3.) Execute a function +* $xmlapi->listaccts(); +* +* @category Cpanel +* @package xmlapi +* @copyright 2012 cPanel, Inc. +* @license http://sdk.cpanel.net/license/bsd.html +* @version Release: 1.0.13 +* @link http://twiki.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/XmlApi +* @since Class available since release 0.1 +**/ + +class App_Controller_Plugin_CPanel_Xmlapi extends Zend_Controller_Plugin_Abstract +{ + // should debugging statements be printed? + private $debug = false; + + // The host to connect to + private $host = '127.0.0.1'; + + // the port to connect to + private $port = '2087'; + + // should be the literal strings http or https + private $protocol = 'https'; + + // output that should be given by the xml-api + private $output = 'simplexml'; + + // literal strings hash or password + private $auth_type = null; + + // the actual password or hash + private $auth = null; + + // username to authenticate as + private $user = null; + + // The HTTP Client to use + + private $http_client = 'curl'; + + /** + * Instantiate the XML-API Object + * All parameters to this function are optional and can be set via the accessor functions or constants + * This defaults to password auth, however set_hash can be used to use hash authentication + * + * @param string $host The host to perform queries on + * @param string $user The username to authenticate as + * @param string $password The password to authenticate with + * @return Xml_Api object + */ + public function __construct($host = null, $user = null, $password = null ) + { + // Check if debugging must be enabled + if ( (defined('XMLAPI_DEBUG')) && (XMLAPI_DEBUG == '1') ) { + $this->debug = true; + } + + // Check if raw xml output must be enabled + if ( (defined('XMLAPI_RAW_XML')) && (XMLAPI_RAW_XML == '1') ) { + $this->raw_xml = true; + } + + /** + * Authentication + * This can either be passed at this point or by using the set_hash or set_password functions + **/ + + if ( ( defined('XMLAPI_USER') ) && ( strlen(XMLAPI_USER) > 0 ) ) { + $this->user = XMLAPI_USER; + + // set the authtype to pass and place the password in $this->pass + if ( ( defined('XMLAPI_PASS') ) && ( strlen(XMLAPI_PASS) > 0 ) ) { + $this->auth_type = 'pass'; + $this->auth = XMLAPI_PASS; + } + + // set the authtype to hash and place the hash in $this->auth + if ( ( defined('XMLAPI_HASH') ) && ( strlen(XMLAPI_HASH) > 0 ) ) { + $this->auth_type = 'hash'; + $this->auth = preg_replace("/(\n|\r|\s)/", '', XMLAPI_HASH); + } + + // Throw warning if XMLAPI_HASH and XMLAPI_PASS are defined + if ( ( ( defined('XMLAPI_HASH') ) && ( strlen(XMLAPI_HASH) > 0 ) ) + && ( ( defined('XMLAPI_PASS') ) && ( strlen(XMLAPI_PASS) > 0 ) ) ) { + error_log('warning: both XMLAPI_HASH and XMLAPI_PASS are defined, defaulting to XMLAPI_HASH'); + } + + + // Throw a warning if XMLAPI_HASH and XMLAPI_PASS are undefined and XMLAPI_USER is defined + if ( !(defined('XMLAPI_HASH') ) || !defined('XMLAPI_PASS') ) { + error_log('warning: XMLAPI_USER set but neither XMLAPI_HASH or XMLAPI_PASS have not been defined'); + } + + } + + if ( ( $user != null ) && ( strlen( $user ) < 9 ) ) { + $this->user = $user; + } + + if ($password != null) { + $this->set_password($password); + } + + /** + * Connection + * + * $host/XMLAPI_HOST should always be equal to either the IP of the server or it's hostname + */ + + // Set the host, error if not defined + if ($host == null) { + if ( (defined('XMLAPI_HOST')) && (strlen(XMLAPI_HOST) > 0) ) { + $this->host = XMLAPI_HOST; + } else { + throw new Exception("No host defined"); + } + } else { + $this->host = $host; + } + + // disabling SSL is probably a bad idea.. just saying. + if ( defined('XMLAPI_USE_SSL' ) && (XMLAPI_USE_SSL == '0' ) ) { + $this->protocol = "http"; + } + + // Detemine what the default http client should be. + if ( function_exists('curl_setopt') ) { + $this->http_client = "curl"; + } elseif ( ini_get('allow_url_fopen') ) { + $this->http_client = "fopen"; + } else { + throw new Exception('allow_url_fopen and curl are neither available in this PHP configuration'); + } + + } + + /** + * Accessor Functions + **/ + /** + * Return whether the debug option is set within the object + * + * @return boolean + * @see set_debug() + */ + public function get_debug() + { + return $this->debug; + } + + /** + * Turn on debug mode + * + * Enabling this option will cause this script to print debug information such as + * the queries made, the response XML/JSON and other such pertinent information. + * Calling this function without any parameters will enable debug mode. + * + * @param bool $debug turn on or off debug mode + * @see get_debug() + */ + public function set_debug( $debug = 1 ) + { + $this->debug = $debug; + } + + /** + * Get the host being connected to + * + * This function will return the host being connected to + * @return string host + * @see set_host() + */ + public function get_host() + { + return $this->host; + } + + /** + * Set the host to query + * + * Setting this will set the host to be queried + * @param string $host The host to query + * @see get_host() + */ + public function set_host( $host ) + { + $this->host = $host; + } + + /** + * Get the port to connect to + * + * This will return which port the class is connecting to + * @return int $port + * @see set_port() + */ + public function get_port() + { + return $this->port; + } + + /** + * Set the port to connect to + * + * This will allow a user to define which port needs to be connected to. + * The default port set within the class is 2087 (WHM-SSL) however other ports are optional + * this function will automatically set the protocol to http if the port is equal to: + * - 2082 + * - 2086 + * - 2095 + * - 80 + * @param int $port the port to connect to + * @see set_protocol() + * @see get_port() + */ + public function set_port( $port ) + { + if ( !is_int( $port ) ) { + $port = intval($port); + } + + if ($port < 1 || $port > 65535) { + throw new Exception('non integer or negative integer passed to set_port'); + } + + // Account for ports that are non-ssl + if ($port == '2086' || $port == '2082' || $port == '80' || $port == '2095') { + $this->set_protocol('http'); + } + + $this->port = $port; + } + + /** + * Return the protocol being used to query + * + * This will return the protocol being connected to + * @return string + * @see set_protocol() + */ + public function get_protocol() + { + return $this->protocol; + } + + /** + * Set the protocol to use to query + * + * This will allow you to set the protocol to query cpsrvd with. The only to acceptable values + * to be passed to this function are 'http' or 'https'. Anything else will cause the class to throw + * an Exception. + * @param string $proto the protocol to use to connect to cpsrvd + * @see get_protocol() + */ + public function set_protocol( $proto ) + { + if ($proto != 'https' && $proto != 'http') { + throw new Exception('https and http are the only protocols that can be passed to set_protocol'); + } + $this->protocol = $proto; + } + + /** + * Return what format calls with be returned in + * + * This function will return the currently set output format + * @see set_output() + * @return string + */ + public function get_output() + { + return $this->output; + } + + /** + * Set the output format for call functions + * + * This class is capable of returning data in numerous formats including: + * - json + * - xml + * - {@link http://php.net/simplexml SimpleXML} + * - {@link http://us.php.net/manual/en/language.types.array.php Associative Arrays} + * + * These can be set by passing this class any of the following values: + * - json - return JSON string + * - xml - return XML string + * - simplexml - return SimpleXML object + * - array - Return an associative array + * + * Passing any value other than these to this class will cause an Exception to be thrown. + * @param string $output the output type to be set + * @see get_output() + */ + public function set_output( $output ) + { + if ($output != 'json' && $output != 'xml' && $output != 'array' && $output != 'simplexml') { + throw new Exception('json, xml, array and simplexml are the only allowed values for set_output'); + } + $this->output = $output; + } + + /** + * Return the auth_type being used + * + * This function will return a string containing the auth type in use + * @return string auth type + * @see set_auth_type() + */ + public function get_auth_type() + { + return $this->auth_type; + } + + /** + * Set the auth type + * + * This class is capable of authenticating with both hash auth and password auth + * This function will allow you to manually set which auth_type you are using. + * + * the only accepted parameters for this function are "hash" and "pass" anything else will cuase + * an exception to be thrown + * + * @see set_password() + * @see set_hash() + * @see get_auth_type() + * @param string auth_type the auth type to be set + */ + public function set_auth_type( $auth_type ) + { + if ($auth_type != 'hash' && $auth_type != 'pass') { + throw new Exception('the only two allowable auth types arehash and path'); + } + $this->auth_type = $auth_type; + } + + /** + * Set the password to be autenticated with + * + * This will set the password to be authenticated with, the auth_type will be automatically adjusted + * when this function is used + * + * @param string $pass the password to authenticate with + * @see set_hash() + * @see set_auth_type() + * @see set_user() + */ + public function set_password( $pass ) + { + $this->auth_type = 'pass'; + $this->auth = $pass; + } + + /** + * Set the hash to authenticate with + * + * This will set the hash to authenticate with, the auth_type will automatically be set when this function + * is used. This function will automatically strip the newlines from the hash. + * @param string $hash the hash to autenticate with + * @see set_password() + * @see set_auth_type() + * @see set_user() + */ + public function set_hash( $hash ) + { + $this->auth_type = 'hash'; + $this->auth = preg_replace("/(\n|\r|\s)/", '', $hash); + } + + /** + * Return the user being used for authtication + * + * This will return the username being authenticated against. + * + * @return string + */ + public function get_user() + { + return $this->user; + } + + /** + * Set the user to authenticate against + * + * This will set the user being authenticated against. + * @param string $user username + * @see set_password() + * @see set_hash() + * @see get_user() + */ + public function set_user( $user ) + { + $this->user = $user; + } + + /** + * Set the user and hash to be used for authentication + * + * This function will allow one to set the user AND hash to be authenticated with + * + * @param string $user username + * @param string $hash WHM Access Hash + * @see set_hash() + * @see set_user() + */ + public function hash_auth( $user, $hash ) + { + $this->set_hash( $hash ); + $this->set_user( $user ); + } + + /** + * Set the user and password to be used for authentication + * + * This function will allow one to set the user AND password to be authenticated with + * @param string $user username + * @param string $pass password + * @see set_pass() + * @see set_user() + */ + public function password_auth( $user, $pass ) + { + $this->set_password( $pass ); + $this->set_user( $user ); + } + + /** + * Return XML format + * + * this function will cause call functions to return XML format, this is the same as doing: + * set_output('xml') + * + * @see set_output() + */ + public function return_xml() + { + $this->set_output('xml'); + } + + /** + * Return simplexml format + * + * this function will cause all call functions to return simplexml format, this is the same as doing: + * set_output('simplexml') + * + * @see set_output() + */ + public function return_object() + { + $this->set_output('simplexml'); + } + + /** + * Set the HTTP client to use + * + * This class is capable of two types of HTTP Clients: + * - curl + * - fopen + * + * When using allow url fopen the class will use get_file_contents to perform the query + * The only two acceptable parameters for this function are 'curl' and 'fopen'. + * This will default to fopen, however if allow_url_fopen is disabled inside of php.ini + * it will switch to curl + * + * @param string client The http client to use + * @see get_http_client() + */ + + public function set_http_client( $client ) + { + if ( ( $client != 'curl' ) && ( $client != 'fopen' ) ) { + throw new Exception('only curl and fopen and allowed http clients'); + } + $this->http_client = $client; + } + + /** + * Get the HTTP Client in use + * + * This will return a string containing the HTTP client currently in use + * + * @see set_http_client() + * @return string + */ + public function get_http_client() + { + return $this->http_client; + } + + /* + * Query Functions + * -- + * This is where the actual calling of the XML-API, building API1 & API2 calls happens + */ + + /** + * Perform an XML-API Query + * + * This function will perform an XML-API Query and return the specified output format of the call being made + * + * @param string $function The XML-API call to execute + * @param array $vars An associative array of the parameters to be passed to the XML-API Calls + * @return mixed + */ + public function xmlapi_query( $function, $vars = array() ) + { + // Check to make sure all the data needed to perform the query is in place + if (!$function) { + throw new Exception('xmlapi_query() requires a function to be passed to it'); + } + + if ($this->user == null) { + throw new Exception('no user has been set'); + } + + if ($this->auth ==null) { + throw new Exception('no authentication information has been set'); + } + + // Build the query: + + $query_type = '/xml-api/'; + + if ($this->output == 'json') { + $query_type = '/json-api/'; + } + + $args = http_build_query($vars, '', '&'); + $url = $this->protocol . '://' . $this->host . ':' . $this->port . $query_type . $function; + + if ($this->debug) { + error_log('URL: ' . $url); + error_log('DATA: ' . $args); + } + + // Set the $auth string + + $authstr = NULL; + if ($this->auth_type == 'hash') { + $authstr = 'Authorization: WHM ' . $this->user . ':' . $this->auth . "\r\n"; + } elseif ($this->auth_type == 'pass') { + $authstr = 'Authorization: Basic ' . base64_encode($this->user .':'. $this->auth) . "\r\n"; + } else { + throw new Exception('invalid auth_type set'); + } + + if ($this->debug) { + error_log("Authentication Header: " . $authstr ."\n"); + } + + // Perform the query (or pass the info to the functions that actually do perform the query) + + $response = NULL; + if ($this->http_client == 'curl') { + $response = $this->curl_query($url, $args, $authstr); + } elseif ($this->http_client == 'fopen') { + $response = $this->fopen_query($url, $args, $authstr); + } + + /* + * Post-Query Block + * Handle response, return proper data types, debug, etc + */ + + // print out the response if debug mode is enabled. + if ($this->debug) { + error_log("RESPONSE:\n " . $response); + } + + // The only time a response should contain is in the case of authentication error + // cPanel 11.25 fixes this issue, but if is in the response, we'll error out. + + if (stristr($response, '') == true) { + if (stristr($response, 'Login Attempt Failed') == true) { + error_log("Login Attempt Failed"); + + return; + } + if (stristr($response, 'action="/login/"') == true) { + error_log("Authentication Error"); + + return; + } + + return; + } + + + // perform simplexml transformation (array relies on this) + if ( ($this->output == 'simplexml') || $this->output == 'array') { + $response = simplexml_load_string($response, null, LIBXML_NOERROR | LIBXML_NOWARNING); + if (!$response) { + error_log("Some error message here"); + + return; + } + if ($this->debug) { + error_log("SimpleXML var_dump:\n" . print_r($response, true)); + } + } + + // perform array tranformation + if ($this->output == 'array') { + $response = $this->unserialize_xml($response); + if ($this->debug) { + error_log("Associative Array var_dump:\n" . print_r($response, true)); + } + } + + return $response; + } + + private function curl_query( $url, $postdata, $authstr ) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); + // Return contents of transfer on curl_exec + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Allow self-signed certs + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); + // Set the URL + curl_setopt($curl, CURLOPT_URL, $url); + // Increase buffer size to avoid "funny output" exception + curl_setopt($curl, CURLOPT_BUFFERSIZE, 131072); + + // Pass authentication header + $header[0] =$authstr . + "Content-Type: application/x-www-form-urlencoded\r\n" . + "Content-Length: " . strlen($postdata) . "\r\n" . "\r\n" . $postdata; + + curl_setopt($curl, CURLOPT_HTTPHEADER, $header); + + curl_setopt($curl, CURLOPT_POST, 1); + + $result = curl_exec($curl); + if ($result == false) { + throw new Exception("curl_exec threw error \"" . curl_error($curl) . "\" for " . $url . "?" . $postdata ); + } + curl_close($curl); + + return $result; + } + + private function fopen_query( $url, $postdata, $authstr ) + { + if ( !(ini_get('allow_url_fopen') ) ) { + throw new Exception('fopen_query called on system without allow_url_fopen enabled in php.ini'); + } + + $opts = array( + 'http' => array( + 'allow_self_signed' => true, + 'method' => 'POST', + 'header' => $authstr . + "Content-Type: application/x-www-form-urlencoded\r\n" . + "Content-Length: " . strlen($postdata) . "\r\n" . + "\r\n" . $postdata + ) + ); + $context = stream_context_create($opts); + + return file_get_contents($url, false, $context); + } + + + /* + * Convert simplexml to associative arrays + * + * This function will convert simplexml to associative arrays. + */ + private function unserialize_xml($input, $callback = null, $recurse = false) + { + // Get input, loading an xml string with simplexml if its the top level of recursion + $data = ( (!$recurse) && is_string($input) ) ? simplexml_load_string($input) : $input; + // Convert SimpleXMLElements to array + if ($data instanceof SimpleXMLElement) { + $data = (array) $data; + } + // Recurse into arrays + if (is_array($data)) { + foreach ($data as &$item) { + $item = $this->unserialize_xml($item, $callback, true); + } + } + // Run callback and return + return (!is_array($data) && is_callable($callback)) ? call_user_func($callback, $data) : $data; + } + + + /* TO DO: + Implement API1 and API2 query functions!!!!! + */ + /** + * Call an API1 function + * + * This function allows you to call API1 from within the XML-API, This allowes a user to peform actions + * such as adding ftp accounts, etc + * + * @param string $user The username of the account to perform API1 actions on + * @param string $module The module of the API1 call to use + * @param string $function The function of the API1 call + * @param array $args The arguments for the API1 function, this should be a non-associative array + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CallingAPIFunctions XML API Call documentation + * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiRef/WebHome API1 & API2 Call documentation + * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiBasics/CallingApiOne API1 Documentation + */ + public function api1_query($user, $module, $function, $args = array() ) + { + if ( !isset($module) || !isset($function) || !isset($user) ) { + error_log("api1_query requires that a module and function are passed to it"); + + return false; + } + + if (!is_array($args)) { + error_log('api1_query requires that it is passed an array as the 4th parameter'); + + return false; + } + + $cpuser = 'cpanel_xmlapi_user'; + $module_type = 'cpanel_xmlapi_module'; + $func_type = 'cpanel_xmlapi_func'; + $api_type = 'cpanel_xmlapi_apiversion'; + + if ( $this->get_output() == 'json' ) { + $cpuser = 'cpanel_jsonapi_user'; + $module_type = 'cpanel_jsonapi_module'; + $func_type = 'cpanel_jsonapi_func'; + $api_type = 'cpanel_jsonapi_apiversion'; + } + + $call = array( + $cpuser => $user, + $module_type => $module, + $func_type => $function, + $api_type => '1' + ); + for ($int = 0; $int < count($args); $int++) { + $call['arg-' . $int] = $args[$int]; + } + + return $this->xmlapi_query('cpanel', $call); + } + + /** + * Call an API2 Function + * + * This function allows you to call an API2 function, this is the modern API for cPanel and should be used in preference over + * API1 when possible + * + * @param string $user The username of the account to perform API2 actions on + * @param string $module The module of the API2 call to use + * @param string $function The function of the API2 call + * @param array $args An associative array containing the arguments for the API2 call + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CallingAPIFunctions XML API Call documentation + * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiRef/WebHome API1 & API2 Call documentation + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ApiTwo Legacy API2 Documentation + * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiBasics/CallingApiTwo API2 Documentation + */ + + public function api2_query($user, $module, $function, $args = array()) + { + if (!isset($user) || !isset($module) || !isset($function) ) { + error_log("api2_query requires that a username, module and function are passed to it"); + + return false; + } + if (!is_array($args)) { + error_log("api2_query requires that an array is passed to it as the 4th parameter"); + + return false; + } + + $cpuser = 'cpanel_xmlapi_user'; + $module_type = 'cpanel_xmlapi_module'; + $func_type = 'cpanel_xmlapi_func'; + $api_type = 'cpanel_xmlapi_apiversion'; + + if ( $this->get_output() == 'json' ) { + $cpuser = 'cpanel_jsonapi_user'; + $module_type = 'cpanel_jsonapi_module'; + $func_type = 'cpanel_jsonapi_func'; + $api_type = 'cpanel_jsonapi_apiversion'; + } + + $args[$cpuser] = $user; + $args[$module_type] = $module; + $args[$func_type] = $function; + $args[$api_type] = '2'; + + return $this->xmlapi_query('cpanel', $args); + } + + #### + # XML API Functions + #### + + /** + * Return a list of available XML-API calls + * + * This function will return an array containing all applications available within the XML-API + * + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListAvailableCalls XML API Call documentation + */ + public function applist() + { + return $this->xmlapi_query('applist'); + } + + #### + # Account functions + #### + + /** + * Create a cPanel Account + * + * This function will allow one to create an account, the $acctconf parameter requires that the follow + * three associations are defined: + * - username + * - password + * - domain + * + * Failure to prive these will cause an error to be logged. Any other key/value pairs as defined by the createaccount call + * documentation are allowed parameters for this call. + * + * @param array $acctconf + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CreateAccount XML API Call documentation + */ + + public function createacct($acctconf) + { + if (!is_array($acctconf)) { + error_log("createacct requires that first parameter passed to it is an array"); + + return false; + } + if (!isset($acctconf['username']) || !isset($acctconf['password']) || !isset($acctconf['domain'])) { + error_log("createacct requires that username, password & domain elements are in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('createacct', $acctconf); + } + + /** + * Change a cPanel Account's Password + * + * This function will allow you to change the password of a cpanel account + * + * @param string $username The username to change the password of + * @param string $pass The new password for the cPanel Account + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ChangePassword XML API Call documentation + */ + public function passwd($username, $pass) + { + if (!isset($username) || !isset($pass)) { + error_log("passwd requires that an username and password are passed to it"); + + return false; + } + + return $this->xmlapi_query('passwd', array('user' => $username, 'pass' => $pass)); + } + + /** + * Limit an account's monthly bandwidth usage + * + * This function will set an account's bandwidth limit. + * + * @param string $username The username of the cPanel account to modify + * @param int $bwlimit The new bandwidth limit in megabytes + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/LimitBandwidth XML API Call documentation + */ + public function limitbw($username, $bwlimit) + { + if (!isset($username) || !isset($bwlimit)) { + error_log("limitbw requires that an username and bwlimit are passed to it"); + + return false; + } + + return $this->xmlapi_query('limitbw', array('user' => $username, 'bwlimit' => $bwlimit)); + } + + /** + * List accounts on Server + * + * This call will return a list of account on a server, either no parameters or both parameters may be passed to this function. + * + * @param string $searchtype Type of account search to use, allowed values: domain, owner, user, ip or package + * @param string $search the string to search against + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListAccounts XML API Call documentation + */ + public function listaccts($searchtype = null, $search = null) + { + if ($search) { + return $this->xmlapi_query('listaccts', array('searchtype' => $searchtype, 'search' => $search )); + } + + return $this->xmlapi_query('listaccts'); + } + + /** + * Modify a cPanel account + * + * This call will allow you to change limitations and information about an account. See the XML API call documentation for a list of + * acceptable values for args. + * + * @param string $username The username to modify + * @param array $args the new values for the modified account (see {@link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ModifyAccount modifyacct documentation}) + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ModifyAccount XML API Call documentation + */ + public function modifyacct($username, $args = array()) + { + if (!isset($username)) { + error_log("modifyacct requires that username is passed to it"); + + return false; + } + $args['user'] = $username; + if (sizeof($args) < 2) { + error_log("modifyacct requires that at least one attribute is passed to it"); + + return false; + } + + return $this->xmlapi_query('modifyacct', $args); + } + + /** + * Edit a cPanel Account's Quota + * + * This call will allow you to change a cPanel account's quota + * + * @param string $username The username of the account to modify the quota. + * @param int $quota the new quota in megabytes + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditQuota XML API Call documentation + */ + public function editquota($username, $quota) + { + if (!isset($username) || !isset($quota)) { + error_log("editquota requires that an username and quota are passed to it"); + + return false; + } + + return $this->xmlapi_query('editquota', array('user' => $username, 'quota' => $quota)); + } + + /** + * Return a summary of the account's information + * + * This call will return a brief report of information about an account, such as: + * - Disk Limit + * - Disk Used + * - Domain + * - Account Email + * - Theme + * - Start Data + * + * Please see the XML API Call documentation for more information on what is returned by this call + * + * @param string $username The username to retrieve a summary of + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ShowAccountInformation XML API Call documenation + */ + public function accountsummary($username) + { + if (!isset($username)) { + error_log("accountsummary requires that an username is passed to it"); + + return false; + } + + return $this->xmlapi_query('accountsummary', array('user' => $username)); + } + + /** + * Suspend a User's Account + * + * This function will suspend the specified cPanel users account. + * The $reason parameter is optional, but can contain a string of any length + * + * @param string $username The username to suspend + * @param string $reason The reason for the suspension + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SuspendAccount XML API Call documentation + */ + public function suspendacct($username, $reason = null) + { + if (!isset($username)) { + error_log("suspendacct requires that an username is passed to it"); + + return false; + } + if ($reason) { + return $this->xmlapi_query('suspendacct', array('user' => $username, 'reason' => $reason )); + } + + return $this->xmlapi_query('suspendacct', array('user' => $username)); + } + + /** + * List suspended accounts on a server + * + * This function will return an array containing all the suspended accounts on a server + * + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListSuspended XML API Call documentation + */ + public function listsuspended() + { + return $this->xmlapi_query('listsuspended'); + } + + /** + * Remove an Account + * + * This XML API call will remove an account on the server + * The $keepdns parameter is optional, when enabled this will leave the DNS zone on the server + * + * @param string $username The usename to delete + * @param bool $keepdns When pass a true value, the DNS zone will be retained + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/TerminateAccount + */ + public function removeacct($username, $keepdns = false) + { + if (!isset($username)) { + error_log("removeacct requires that a username is passed to it"); + + return false; + } + if ($keepdns) { + return $this->xmlapi_query('removeacct', array('user' => $username, 'keepdns' => '1')); + } + + return $this->xmlapi_query('removeacct', array('user' => $username)); + } + + /** + * Unsuspend an Account + * + * This XML API call will unsuspend an account + * + * @param string $username The username to unsuspend + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/UnsuspendAcount XML API Call documentation + */ + public function unsuspendacct($username) + { + if (!isset($username)) { + error_log("unsuspendacct requires that a username is passed to it"); + + return false; + } + + return $this->xmlapi_query('unsuspendacct', array('user' => $username)); + } + + /** + * Change an Account's Package + * + * This XML API will change the package associated account. + * + * @param string $username the username to change the package of + * @param string $pkg The package to change the account to. + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ChangePackage XML API Call documentation + */ + public function changepackage($username, $pkg) + { + if (!isset($username) || !isset($pkg)) { + error_log("changepackage requires that username and pkg are passed to it"); + + return false; + } + + return $this->xmlapi_query('changepackage', array('user' => $username, 'pkg' => $pkg)); + } + + /** + * Return the privileges a reseller has in WHM + * + * This will return a list of the privileges that a reseller has to WHM + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ViewPrivileges XML API Call documentation + */ + public function myprivs() + { + return $this->xmlapi_query('myprivs'); + } + + + /** + * Display Data about a Virtual Host + * + * This function will return information about a specific domain. This data is essentially a representation of the data + * Contained in the httpd.conf VirtualHost for the domain. + * + * @return mixed + * @param string $domain The domain to fetch information for + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DomainUserData + */ + + public function domainuserdata( $domain ) + { + if (!isset( $domain ) ) { + error_log("domainuserdata requires that domain is passed to it"); + + return false; + } + + return $this->xmlapi_query("domainuserdata", array( 'domain' => $domain ) ); + } + + /** + * Change a site's IP Address + * + * This function will allow you to change the IP address that a domain listens on. + * In order to properly call this function Either $user or $domain parameters must be defined + * @param string $ip The $ip address to change the account or domain to + * @param string $user The username to change the IP of + * @param string $domain The domain to change the IP of + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetSiteIp XML API Call documentation + */ + public function setsiteip ( $ip, $user = null, $domain = null ) + { + if ( !isset($ip) ) { + error_log("setsiteip requires that ip is passed to it"); + + return false; + } + + if ($user == null && $domain == null) { + error_log("setsiteip requires that either domain or user is passed to it"); + + return false; + } + + if ($user == null) { + return $this->xmlapi_query( "setsiteip", array( "ip" => $ip, "domain" => $domain ) ); + } else { + return $this->xmlapi_query( "setsiteip", array( "ip" => $ip, "user" => $user ) ); + } + } + + #### + # DNS Functions + #### + + // This API function lets you create a DNS zone. + /** + * Add a DNS Zone + * + * This XML API function will create a DNS Zone. This will use the "standard" template when + * creating the zone. + * + * @param string $domain The DNS Domain that you wish to create a zone for + * @param string $ip The IP you want the domain to resolve to + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddDNSZone XML API Call documentation + */ + public function adddns($domain, $ip) + { + if (!isset($domain) || !isset($ip)) { + error_log("adddns require that domain, ip are passed to it"); + + return false; + } + + return $this->xmlapi_query('adddns', array('domain' => $domain, 'ip' => $ip)); + } + + /** + * Add a record to a zone + * + * This will append a record to a DNS Zone. The $args argument to this function + * must be an associative array containing information about the DNS zone, please + * see the XML API Call documentation for more info + * + * @param string $zone The DNS zone that you want to add the record to + * @param array $args Associative array representing the record to be added + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddZoneRecord XML API Call documentation + */ + public function addzonerecord( $zone, $args ) + { + if (!is_array($args)) { + error_log("addzonerecord requires that $args passed to it is an array"); + + return; + } + + $args['zone'] = $zone; + + return $this->xmlapi_query('addzonerecord', $args); + } + + /** + * Edit a Zone Record + * + * This XML API Function will allow you to edit an existing DNS Zone Record. + * This works by passing in the line number of the record you wish to edit. + * Line numbers can be retrieved with dumpzone() + * + * @param string $zone The zone to edit + * @param int $line The line number of the zone to edit + * @param array $args An associative array representing the zone record + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditZoneRecord XML API Call documentation + * @see dumpzone() + */ + + public function editzonerecord( $zone, $line, $args ) + { + if (!is_array($args)) { + error_log("editzone requires that $args passed to it is an array"); + + return; + } + + $args['domain'] = $zone; + $args['Line'] = $line; + + return $this->xmlapi_query('editzonerecord', $args); + } + + /** + * Retrieve a DNS Record + * + * This function will return a data structure representing a DNS record, to + * retrieve all lines see dumpzone. + * @param string $zone The zone that you want to retrieve a record from + * @param string $line The line of the zone that you want to retrieve + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/GetZoneRecord XML API Call documentation + */ + public function getzonerecord( $zone, $line ) + { + return $this->xmlapi_query('getzonerecord', array( 'domain' => $zone, 'Line' => $line ) ); + } + + /** + * Remove a DNS Zone + * + * This function will remove a DNS Zone from the server + * + * @param string $domain The domain to be remove + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeleteDNSZone XML API Call documentation + */ + public function killdns($domain) + { + if (!isset($domain)) { + error_log("killdns requires that domain is passed to it"); + + return false; + } + + return $this->xmlapi_query('killdns', array('domain' => $domain)); + } + + /** + * Return a List of all DNS Zones on the server + * + * This XML API function will return an array containing all the DNS Zones on the server + * + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListDNSZone XML API Call documentation + */ + public function listzones() + { + return $this->xmlapi_query('listzones'); + } + + /** + * Return all records in a zone + * + * This function will return all records within a zone. + * @param string $domain The domain to return the records from. + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListOneZone XML API Call documentation + * @see editdnsrecord() + * @see getdnsrecord() + */ + public function dumpzone($domain) + { + if (!isset($domain)) { + error_log("dumpzone requires that a domain is passed to it"); + + return false; + } + + return $this->xmlapi_query('dumpzone', array('domain' => $domain)); + } + + /** + * Return a Nameserver's IP + * + * This function will return a nameserver's IP + * + * @param string $nameserver The nameserver to lookup + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/LookupIP XML API Call documentation + */ + public function lookupnsip($nameserver) + { + if (!isset($nameserver)) { + error_log("lookupnsip requres that a nameserver is passed to it"); + + return false; + } + + return $this->xmlapi_query('lookupnsip', array('nameserver' => $nameserver)); + } + + /** + * Remove a line from a zone + * + * This function will remove the specified line from a zone + * @param string $zone The zone to remove a line from + * @param int $line The line to remove from the zone + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RemoveZone XML API Call documentation + */ + public function removezonerecord($zone, $line) + { + if ( !isset($zone) || !isset($line) ) { + error_log("removezone record requires that a zone and line number is passed to it"); + + return false; + } + + return $this->xmlapi_query('removezonerecord', array('zone' => $zone, 'Line' => $line) ); + } + + /** + * Reset a zone + * + * This function will reset a zone removing all custom records. Subdomain records will be readded by scanning the userdata datastore. + * @param string $domain the domain name of the zone to reset + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ResetZone XML API Call documentation + */ + public function resetzone($domain) + { + if ( !isset($domain) ) { + error_log("resetzone requires that a domain name is passed to it"); + + return false; + } + + return $this->xmlapi_query('resetzone', array('domain' => $domain)); + } + + #### + # Package Functions + #### + + /** + * Add a new package + * + * This function will allow you to add a new package + * This function should be passed an associative array containing elements that define package parameters. + * These variables map directly to the parameters for the XML-API Call, please refer to the link below for a complete + * list of possible variable. The "name" element is required. + * @param array $pkg an associative array containing package parameters + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddPackage XML API Call documentation + */ + public function addpkg($pkg) + { + if (!isset($pkg['name'])) { + error_log("addpkg requires that name is defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('addpkg', $pkg); + } + + /** + * Remove a package + * + * This function allow you to delete a package + * @param string $pkgname The package you wish to delete + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeletePackage XML API Call documentation + */ + public function killpkg($pkgname) + { + if (!isset($pkgname)) { + error_log("killpkg requires that the package name is passed to it"); + + return false; + } + + return $this->xmlapi_query('killpkg', array('pkg' => $pkgname)); + } + + /** + * Edit a package + * + * This function allows you to change a package's paremeters. This is passed an associative array defining + * the parameters for the package. The keys within this array map directly to the XML-API call, please see the link + * below for a list of possible keys within this package. The name element is required. + * @param array $pkg An associative array containing new parameters for the package + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditPackage XML API Call documentation + */ + public function editpkg($pkg) + { + if (!isset($pkg['name'])) { + error_log("editpkg requires that name is defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('editpkg', $pkg); + } + + /** + * List Packages + * + * This function will list all packages available to the user + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListPackages XML API Call documentation + */ + public function listpkgs() + { + return $this->xmlapi_query('listpkgs'); + } + + #### + # Reseller functions + #### + + /** + * Make a user a reseller + * + * This function will allow you to mark an account as having reseller privileges + * @param string $username The username of the account you wish to add reseller privileges to + * @param int $makeowner Boolean 1 or 0 defining whether the account should own itself or not + * @see setacls() + * @see setresellerlimits() + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddResellerPrivileges XML API Call documentation + */ + public function setupreseller($username, $makeowner = true) + { + if (!isset($username)) { + error_log("setupreseller requires that username is passed to it"); + + return false; + } + if ($makeowner) { + return $this->xmlapi_query('setupreseller', array('user' => $username, 'makeowner' => '1')); + } + + return $this->xmlapi_query('setupreseller', array('user' => $username, 'makeowner' => '0')); + } + + /** + * Create a New ACL List + * + * This function allows you to create a new privilege set for reseller accounts. This is passed an + * Associative Array containing the configuration information for this variable. Please see the XML API Call documentation + * For more information. "acllist" is a required element within this array + * @param array $acl an associative array describing the parameters for the ACL to be create + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CreateResellerACLList XML API Call documentation + */ + public function saveacllist($acl) + { + if (!isset($acl['acllist'])) { + error_log("saveacllist requires that acllist is defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('saveacllist', $acl); + } + + + /** + * List available saved ACLs + * + * This function will return a list of Saved ACLs for reseller accounts + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListCurrentResellerACLLists XML API Call documentation + */ + public function listacls() + { + return $this->xmlapi_query('listacls'); + } + + /** + * List Resellers + * + * This function will return a list of resellers on the server + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListResellerAccounts XML API Call documentation + */ + public function listresellers() + { + return $this->xmlapi_query('listresellers'); + } + + /** + * Get a reseller's statistics + * + * This function will return general information on a reseller and all it's account individually such as disk usage and bandwidth usage + * + * @param string $username The reseller to be checked + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListResellersAccountsInformation XML API Call documentation + */ + public function resellerstats($username) + { + if (!isset($username)) { + error_log("resellerstats requires that a username is passed to it"); + + return false; + } + + return $this->xmlapi_query('resellerstats', array('reseller' => $username)); + } + + /** + * Remove Reseller Privileges + * + * This function will remove an account's reseller privileges, this does not remove the account. + * + * @param string $username The username to remove reseller privileges from + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RemoveResellerPrivileges XML API Call documentation + */ + public function unsetupreseller($username) + { + if (!isset($username)) { + error_log("unsetupreseller requires that a username is passed to it"); + + return false; + } + + return $this->xmlapi_query('unsetupreseller', array('user' => $username)); + } + + /** + * Set a reseller's privileges + * + * This function will allow you to set what parts of WHM a reseller has access to. This is passed an associative array + * containing the privleges that this reseller should have access to. These map directly to the parameters passed to the XML API Call + * Please view the XML API Call documentation for more information. "reseller" is the only required element within this array + * @param array $acl An associative array containing all the ACL information for the reseller + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellersACLList XML API Call documentation + */ + public function setacls($acl) + { + if (!isset($acl['reseller'])) { + error_log("setacls requires that reseller is defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('setacls', $acl); + } + + /** + * Terminate a Reseller's Account + * + * This function will terminate a reseller's account and all accounts owned by the reseller + * + * @param string $reseller the name of the reseller to terminate + * @param boolean $terminatereseller Passing this as true will terminate the the reseller's account as well as all the accounts owned by the reseller + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/TerminateResellerandAccounts XML API Call documentation + * + **/ + public function terminatereseller($reseller, $terminatereseller = true) + { + if (!isset($reseller)) { + error_log("terminatereseller requires that username is passed to it"); + + return false; + } + $verify = 'I understand this will irrevocably remove all the accounts owned by the reseller ' . $reseller; + if ($terminatereseller) { + return $this->xmlapi_query('terminatereseller', array('reseller' => $reseller, 'terminatereseller' => '1', 'verify' => $verify)); + } + + return $this->xmlapi_query('terminatereseller', array('reseller' => $reseller, 'terminatereseller' => '0', 'verify' => $verify)); + } + + /** + * Set a reseller's dedicated IP addresses + * + * This function will set a reseller's dedicated IP addresses. If an IP is not passed to this function, + * it will reset the reseller to use the server's main shared IP address. + * @param string $user The username of the reseller to change dedicated IPs for + * @param string $ip The IP to assign to the reseller, this can be a comma-seperated list of IPs to allow for multiple IP addresses + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerIps XML API Call documentation + */ + public function setresellerips($user, $ip = null) + { + if (!isset($user) ) { + error_log("setresellerips requires that a username is passed to it"); + + return false; + } + $params = array("user" => $user); + if ($ip != null) { + $params['ip'] = $ip; + } + + return $this->xmlapi_query('setresellerips',$params); + } + + /** + * Set Accounting Limits for a reseller account + * + * This function allows you to define limits for reseller accounts not included with in access control such as + * the number of accounts a reseller is allowed to create, the amount of disk space to use. + * This function is passed an associative array defining these limits, these map directly to the parameters for the XML API + * Call, please refer to the XML API Call documentation for more information. The only required parameters is "user" + * + * @param array $reseller_cfg An associative array containing configuration information for the specified reseller + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerLimits XML API Call documentation + * + */ + public function setresellerlimits( $reseller_cfg ) + { + if ( !isset($reseller_cfg['user'] ) ) { + error_log("setresellerlimits requires that a user is defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('setresellerlimits',$reseller_cfg); + } + + /** + * Set a reseller's main IP + * + * This function will allow you to set a reseller's main IP. By default all accounts created by this reseller + * will be created on this IP + * @param string $reseller the username of the reseller to change the main IP of + * @param string $ip The ip you would like this reseller to create accounts on by default + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerMainIp XML API Call documentation + */ + public function setresellermainip($reseller, $ip) + { + if ( !isset($reseller) || !isset($ip) ) { + error_log("setresellermainip requires that an reseller and ip are passed to it"); + + return false; + } + + return $this->xmlapi_query("setresellermainip", array('user' => $reseller, 'ip' => $ip)); + } + + /** + * Set reseller package limits + * + * This function allows you to define which packages a reseller has access to use + * @param string $user The reseller you wish to define package limits for + * @param boolean $no_limit Whether or not you wish this reseller to have packages limits + * @param string $package if $no_limit is false, then the package you wish to modify privileges for + * @param boolean $allowed if $no_limit is false, then defines if the reseller should have access to the package or not + * @param int $number if $no_limit is false, then defines the number of account a reseller can create of a specific package + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerPkgLimit XML API Call documentation + */ + public function setresellerpackagelimits($user, $no_limit, $package = null, $allowed = null, $number = null) + { + if (!isset($user) || !isset($no_limit) ) { + error_log("setresellerpackagelimits requires that a username and no_limit are passed to it by default"); + + return false; + } + if ($no_limit) { + return $this->xmlapi_query("setresellerpackagelimits", array( 'user' => $user, "no_limit" => '1') ); + } else { + if ( is_null($package) || is_null($allowed) ) { + error_log('setresellerpackagelimits requires that package and allowed are passed to it if no_limit eq 0'); + + return false; + } + $params = array( + 'user' => $user, + 'no_limit' => '0', + 'package' => $package, + ); + if ($allowed) { + $params['allowed'] = 1; + } else { + $params['allowed'] = 0; + } + if ( !is_null($number) ) { + $params['number'] = $number; + } + + return $this->xmlapi_query('setresellerpackagelimits', $params); + } + } + + /** + * Suspend a reseller and all accounts owned by a reseller + * + * This function, when called will suspend a reseller account and all account owned by said reseller + * @param string $reseller The reseller account to be suspended + * @param string $reason (optional) The reason for suspending the reseller account + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SuspendReseller XML API Call documentation + */ + public function suspendreseller($reseller, $reason = null) + { + if (!isset($reseller) ) { + error_log("suspendreseller requires that the reseller's username is passed to it"); + + return false; + } + $params = array("user" => $reseller); + if ($reason) { + $params['reason'] = $reason; + } + + return $this->xmlapi_query('suspendreseller', $params); + } + + + /** + * Unsuspend a Reseller Account + * + * This function will unsuspend a reseller account and all accounts owned by the reseller in question + * @param string $user The username of the reseller to be unsuspended + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/UnsuspendReseller XML API Call documentation + */ + public function unsuspendreseller($user) + { + if (!isset($user) ) { + error_log("unsuspendreseller requires that a username is passed to it"); + + return false; + } + + return $this->xmlapi_query('unsuspendreseller', array('user' => $user)); + } + + /** + * Get the number of accounts owned by a reseller + * + * This function will return the number of accounts owned by a reseller account, along with information such as the number of active, suspended and accounting limits + * @param string $user The username of the reseller to get account information from + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AcctCounts XML API Call documentation + */ + public function acctcounts($user) + { + if (!isset($user)) { + error_log('acctcounts requires that a username is passed to it'); + + return false; + } + + return $this->xmlapi_query('acctcounts', array('user' => $user) ); + } + + /** + * Set a reseller's nameservers + * + * This function allows you to change the nameservers that account created by a specific reseller account will use. + * If this function is not passed a $nameservers parameter, it will reset the nameservers for the reseller to the servers's default + * @param string $user The username of the reseller account to grab reseller accounts from + * @param string $nameservers A comma seperate list of nameservers + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerNameservers XML API Call documentation + */ + public function setresellernameservers($user, $nameservers = null) + { + if (!isset($user)) { + error_log("setresellernameservers requires that a username is passed to it"); + + return false; + } + $params = array('user' => $user); + if ($nameservers) { + $params['nameservers'] = $nameservers; + } + + return $this->xmlapi_query('setresellernameservers', $params); + } + + #### + # Server information + #### + + /** + * Get a server's hostname + * + * This function will return a server's hostname + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DisplayServerHostname XML API Call documentation + */ + public function gethostname() + { + return $this->xmlapi_query('gethostname'); + } + + /** + * Get the version of cPanel running on the server + * + * This function will return the version of cPanel/WHM running on the remote system + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DisplaycPanelWHMVersion XML API Call documentation + */ + public function version() + { + return $this->xmlapi_query('version'); + } + + + /** + * Get Load Average + * + * This function will return the loadavg of the remote system + * + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/LoadAvg XML API Call documentation + */ + public function loadavg() + { + return $this->xmlapi_query('loadavg'); + } + + /** + * Get a list of languages on the remote system + * + * This function will return a list of available langauges for the cPanel interface + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/GetLangList XML API Call documentation + * + */ + public function getlanglist() + { + return $this->xmlapi_query('getlanglist'); + } + + #### + # Server administration + #### + + /** + * Reboot server + * + * This function will reboot the server + * @param boolean $force This will determine if the server should be given a graceful or forceful reboot + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RebootServer XML API Call documentation + */ + public function reboot($force = false) + { + if ($force) { + return $this->xmlapi_query('reboot', array('force' => '1')); + } + + return $this->xmlapi_query('reboot'); + } + + /** + * Add an IP to a server + * + * This function will add an IP alias to your server + * @param string $ip The IP to be added + * @param string $netmask The netmask of the IP to be added + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddIPAddress XML API Call documentation + */ + public function addip($ip, $netmask) + { + if (!isset($ip) || !isset($netmask)) { + error_log("addip requires that an IP address and Netmask are passed to it"); + + return false; + } + + return $this->xmlapi_query('addip', array('ip' => $ip, 'netmask' => $netmask)); + } + + // This function allows you to delete an IP address from your server. + /** + * Delete an IP from a server + * + * Remove an IP from the server + * @param string $ip The IP to remove + * @param string $ethernetdev The ethernet device that the IP is bound to + * @param bool $skipifshutdown Whether the function should remove the IP even if the ethernet interface is down + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeleteIPAddress XML API Call documentation + */ + public function delip($ip, $ethernetdev = null, $skipifshutdown = false) + { + $args = array(); + if (!isset($ip)) { + error_log("delip requires that an IP is defined in the array passed to it"); + + return false; + } + $args['ip'] = $ip; + if ($ethernetdev) { + $args['ethernetdev'] = $ethernetdev; + } + $args['skipifshutdown'] = ($skipifshutdown) ? '1' : '0'; + + return $this->xmlapi_query('delip', $args); + } + + /** + * List IPs + * + * This should return a list of IPs on a server + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeleteIPAddress XML API Call documentation + */ + public function listips() + { + return $this->xmlapi_query('listips'); + } + + /** + * Set Hostname + * + * This function will allow you to set the hostname of the server + * @param string $hostname the hostname that should be assigned to the serve + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetHostname XML API Call documentation + */ + public function sethostname($hostname) + { + if (!isset($hostname)) { + error_log("sethostname requires that hostname is passed to it"); + + return false; + } + + return $this->xmlapi_query('sethostname', array('hostname' => $hostname)); + } + + /** + * Set the resolvers used by the server + * + * This function will set the resolvers in /etc/resolv.conf for the server + * @param string $nameserver1 The IP of the first nameserver to use + * @param string $nameserver2 The IP of the second namesever to use + * @param string $nameserver3 The IP of the third nameserver to use + * @param string $nameserver4 The IP of the forth nameserver to use + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResolvers XML API Call documentation + */ + public function setresolvers($nameserver1, $nameserver2 = null, $nameserver3 = null) + { + $args = array(); + if (!isset($nameserver1)) { + error_log("setresolvers requires that nameserver1 is defined in the array passed to it"); + + return false; + } + $args['nameserver1'] = $nameserver1; + if ($nameserver2) { + $args['nameserver2'] = $nameserver2; + } + if ($nameserver3) { + $args['nameserver3'] = $nameserver3; + } + + return $this->xmlapi_query('setresolvers', $args); + } + + /** + * Display bandwidth Usage + * + * This function will return all bandwidth usage information for the server, + * The arguments for this can be passed in via an associative array, the elements of this array map directly to the + * parameters of the call, please see the XML API Call documentation for more information + * @param array $args The configuration for what bandwidth information to display + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ShowBw XML API Call documentation + */ + public function showbw($args = null) + { + if (is_array($args)) { + return $this->xmlapi_query('showbw', $args); + } + + return $this->xmlapi_query('showbw'); + } + + public function nvset($key, $value) + { + if (!isset($key) || !isset($value)) { + error_log("nvset requires that key and value are passed to it"); + + return false; + } + + return $this->xmlapi_query('nvset', array('key' => $key, 'value' => $value)); + } + + // This function allows you to retrieve and view a non-volatile variable's value. + public function nvget($key) + { + if (!isset($key)) { + error_log("nvget requires that key is passed to it"); + + return false; + } + + return $this->xmlapi_query('nvget', array('key' => $key)); + } + + #### + # Service functions + #### + + /** + * Restart a Service + * + * This function allows you to restart a service on the server + * @param string $service the service that you wish to restart please view the XML API Call documentation for acceptable values to this parameters + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RestartService XML API Call documentation + */ + public function restartsrv($service) + { + if (!isset($service)) { + error_log("restartsrv requires that service is passed to it"); + + return false; + } + + return $this->xmlapi_query('restartservice', array('service' => $service)); + } + + /** + * Service Status + * + * This function will return the status of all services on the and whether they are running or not + * @param string $service A single service to filter for. + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ServiceStatus XML API Call documentation + */ + public function servicestatus($args=array()) + { + if (!empty($args) && !is_array($args)) { + $args = array('service'=>$args); + } elseif (!is_array($args)) { + $args = array(); + } + + return $this->xmlapi_query('servicestatus', $args); + } + + /** + * Configure A Service + * + * This function will allow you to enabled or disable services along with their monitoring by chkservd + * @param string $service The service to be monitored + * @param bool $enabled Whether the service should be enabled or not + * @param bool $monitored Whether the service should be monitored or not + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ConfigureService XML API Call documentation + */ + public function configureservice($service, $enabled = true, $monitored = true) + { + if (!isset($service)) { + error_log("configure service requires that a service is passed to it"); + + return false; + } + $params = array('service' => $service); + + if ($enabled) { + $params['enabled'] = 1; + } else { + $params['enabled'] = 0; + } + + if ($monitored) { + $params['monitored'] = 1; + } else { + $params['monitored'] = 0; + } + + return $this->xmlapi_query('configureservice', $params); + + } + + #### + # SSL functions + #### + + /** + * Display information on an SSL host + * + * This function will return information on an SSL Certificate, CSR, cabundle and SSL key for a specified domain + * @param array $args Configuration information for the SSL certificate, please see XML API Call documentation for required values + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/FetchSSL XML API Call documentation + */ + public function fetchsslinfo($args) + { + if ( (isset($args['domain']) && isset($args['crtdata'])) || (!isset($args['domain']) && !isset($args['crtdata'])) ) { + error_log("fetchsslinfo requires domain OR crtdata is passed to it"); + } + if (isset($args['crtdata'])) { + // crtdata must be URL-encoded! + $args['crtdata'] = urlencode(trim($args['crtdata'])); + } + + return $this->xmlapi_query('fetchsslinfo', $args); + } + + /** + * Generate an SSL Certificate + * + * This function will generate an SSL Certificate, the arguments for this map directly to the call for the XML API call. Please consult the XML API Call documentation for more information + * @param array $args the configuration for the SSL Certificate being generated + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/GenerateSSL XML API Call documentation + */ + public function generatessl($args) + { + if (!isset($args['xemail']) || !isset($args['host']) || !isset($args['country']) || !isset($args['state']) || !isset($args['city']) || !isset($args['co']) || !isset($args['cod']) || !isset($args['email']) || !isset($args['pass'])) { + error_log("generatessl requires that xemail, host, country, state, city, co, cod, email and pass are defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('generatessl', $args); + } + + /** + * Install an SSL certificate + * + * This function will allow you to install an SSL certificate that is uploaded via the $argument parameter to this call. The arguments for this call map directly to the parameters for the XML API call, + * please consult the XML API Call documentation for more information. + * @param array $args The configuration for the SSL certificate + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/InstallSSL XML API Call documentation + */ + public function installssl($args) + { + if (!isset($args['user']) || !isset($args['domain']) || !isset($args['cert']) || !isset($args['key']) || !isset($args['cab']) || !isset($args['ip'])) { + error_log("installssl requires that user, domain, cert, key, cab and ip are defined in the array passed to it"); + + return false; + } + + return $this->xmlapi_query('installssl', $args); + } + + /** + * List SSL Certs + * + * This function will list all SSL certificates installed on the server + * @return mixed + * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListSSL XML API Call documentation + */ + public function listcrts() + { + return $this->xmlapi_query('listcrts'); + } + + #### + # cPanel API1 functions + # Note: A cPanel account username is required + # Some cPanel features must be enabled to be able to use some function (f.e. park, unpark) + #### + + // This API1 function adds a emailaccount for a specific user. + public function addpop($username, $args) + { + if (!isset($username) || !isset($args)) { + error_log("addpop requires that a user and args are passed to it"); + + return false; + } + if (is_array($args) && (sizeof($args) < 3)) { + error_log("addpop requires that args at least contains an email_username, email_password and email_domain"); + + return false; + } + + return $this->api1_query($username, 'Email', 'addpop', $args); + } + + // This API function parks a domain onto this user's account + public function park($username, $newdomain, $topdomain) + { + $args = array(); + if ( (!isset($username)) && (!isset($newdomain)) ) { + error_log("park requires that a username and new domain are passed to it"); + + return false; + } + $args['domain'] = $newdomain; + if ($topdomain) { + $args['topdomain'] = $topdomain; + } + + return $this->api2_query($username, 'Park', 'park', $args); + } + + // This API function unparks a domain from this user's account. + public function unpark($username, $domain) + { + $args = array(); + if ( (!isset($username)) && (!isset($domain)) ) { + error_log("unpark requires that a username and domain are passed to it"); + + return false; + } + $args['domain'] = $domain; + + return $this->api2_query($username, 'Park', 'unpark', $args); + } + + #### + # cPanel API2 functions + # Note: A cPanel account username is required + # Some cPanel features must be enabled to be able to use some function + #### + + // This API2 function allows you to view the diskusage of a emailaccount. + public function getdiskusage($username, $args) + { + if (!isset($username) || !isset($args)) { + error_log("getdiskusage requires that a username and args are passed to it"); + + return false; + } + if (is_array($args) && (!isset($args['domain']) || !isset($args['login']))) { + error_log("getdiskusage requires that args at least contains an email_domain and email_username"); + + return false; + } + + return $this->api2_query($username, 'Email', 'getdiskusage', $args); + } + + // This API2 function allows you to list ftp-users associated with a cPanel account including disk information. + public function listftpwithdisk($username) + { + if (!isset($username)) { + error_log("listftpwithdisk requires that user is passed to it"); + + return false; + } + + return $this->api2_query($username, 'Ftp', 'listftpwithdisk'); + } + + // This API2 function allows you to list ftp-users associated with a cPanel account. + public function listftp($username) + { + if (!isset($username)) { + error_log("listftp requires that user is passed to it"); + + return false; + } + + return $this->api2_query($username, 'Ftp', 'listftp'); + } + + // This API function displays a list of all parked domains for a specific user. + public function listparkeddomains($username, $domain = null) + { + $args = array(); + if (!isset($username)) { + error_log("listparkeddomains requires that a user is passed to it"); + + return false; + } + if (isset($domain)) { + $args['regex'] = $domain; + + return $this->api2_query($username, 'Park', 'listparkeddomains', $args); + } + + return $this->api2_query($username, 'Park', 'listparkeddomains'); + } + + // This API function displays a list of all addon domains for a specific user. + public function listaddondomains($username, $domain = null) + { + $args = array(); + if (!isset($username)) { + error_log("listaddondomains requires that a user is passed to it"); + + return false; + } + if (isset($domain)) { + $args['regex'] = $domain; + + return $this->api2_query($username, 'AddonDomain', 'listaddondomains', $args); + } + + return $this->api2_query($username, 'Park', 'listaddondomains'); + } + + // This API function displays a list of all selected stats for a specific user. + public function stat($username, $args = null) + { + if ( (!isset($username)) || (!isset($args)) ) { + error_log("stat requires that a username and options are passed to it"); + + return false; + } + if (is_array($args)) { + $display = ''; + foreach ($args as $key => $value) { + $display .= $value . '|'; + } + $values['display'] = substr($display, 0, -1); + } else { + $values['display'] = substr($args, 0, -1); + } + + return $this->api2_query($username, 'StatsBar', 'stat', $values); + } + +} diff --git a/library/App/Controller/Plugin/LangSelector.php b/library/App/Controller/Plugin/LangSelector.php new file mode 100644 index 0000000..0f0616f --- /dev/null +++ b/library/App/Controller/Plugin/LangSelector.php @@ -0,0 +1,34 @@ +getParam('lang',''); + $langLocale = ''; + + switch($lang) { + case "it": + $langLocale = 'it'; break; + case "en": + $langLocale = 'en'; break; + default: + $langLocale = isset($session->lang) ? $session->lang : Zend_Registry::get('Zend_Locale')->getLanguage(); + } + + $locale = new Zend_Locale($langLocale); + Zend_Registry::set('Zend_Locale', $locale); + + $translationPath = dirname( APPLICATION_PATH ) . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . $langLocale; + $translate = new Zend_Translate('array', $translationPath, $locale); + + $session->lang = $langLocale; + + Zend_Registry::set('Zend_Translate', $translate); + Zend_Validate_Abstract::setDefaultTranslator($translate); + Zend_Form::setDefaultTranslator($translate); + + } +} diff --git a/library/App/Controller/Rest/Controller.php b/library/App/Controller/Rest/Controller.php new file mode 100644 index 0000000..01f04b0 --- /dev/null +++ b/library/App/Controller/Rest/Controller.php @@ -0,0 +1,572 @@ +_helper->viewRenderer->setNoRender(true); + $this->_helper->AjaxContext() + ->addActionContext('get', 'json') + ->addActionContext('post', 'json') + ->addActionContext('put', 'json') + ->addActionContext('patch', 'json') + ->addActionContext('delete', 'json') + ->addActionContext('options', 'json') + ->addActionContext('head', 'json') + ->initContext('json'); + + $this->_responseData = new stdClass(); + $this->_status = false; + $this->_inArray = false; + + if (!$this->_resourceFormName) { + $this->_resourceFormName = $this->_resourceName; + } + + if (!$this->_patchResourceName) { + $this->_patchResourceName = $this->_resourceName; + } + + $this->_genericModel = new Application_Model_Generic(); + $this->_dbAdapter = $this->_genericModel->getResource($this->_resourceName)->getDbAdapter(); + } + + public function preDispatch() + { + $this->_response->setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Origin,Authorization,x-requested-with,Content-Type,Cache-Control,X-As-Dev-On,X-As-Dev-Pw,MongoDbName'); + $this->_response->setHeader('Access-Control-Expose-Headers', 'X-Tot-Items,X-Page,X-Count,X-Tot-Filtered'); + $this->_response->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, PATCH, DELETE'); + $this->_response->setHeader('Access-Control-Allow-Origin', '*'); + $this->_response->setHeader('Access-Control-Allow-Credentials', 'true'); + + // Controllo sui metodi di prefetch + if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { + return $this->optionsAction(); + } + + if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { + return $this->optionsAction(); + } + + if ($_SERVER['REQUEST_METHOD'] === 'PATCH') { + return $this->patchAction(); + } + } + + //##################################### CRUD FUNCTIONS ############################################################# + + public function indexAction() + { + $this->getAction(); + } + + public function getAction() + { + try { + $this->switchMethodFunction($this->_getParam('method')); + } catch (Exception $e) { + $this->_status = false; + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function postAction() + { + + try { + + $this->_dbAdapter->beginTransaction(); + + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + + $form = $this->getAddFormForResource(); + + //Inserimento di batch + if (is_array($params[0])) { + $failedElements = array(); + foreach ($params as $key => $riga) { + if ($form->isValid($riga)) { + $dati = $form->getValues(); + $this->insertSingleElement($dati); + } else { + array_push($failedElements, $key); + } + } + + $this->_dbAdapter->commit(); + + $this->_status = true; + $this->_responseData->data = array('failed_elements_index' => $failedElements); + return $this->sendResponse(); + } + + //Inserimento di un singolo elemento + if (!$form->isValid($params)) { + $this->_status = false; + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_FORM_DATAINVALID; + $this->_responseData->message = 'I dati inseriti non sono validi'; + $this->_responseData->errorDetails = $form->getMessages(); + $this->sendResponse(); + } + + $dati = $form->getValues(); + + $dati = $this->preInsertElement($dati); + + $dati['id'] = $this->insertSingleElement($dati); + + $this->_dbAdapter->commit(); + + $dati = $this->afterInsertElement($dati); + + $this->_responseData->data = ($this->_returnWithDataObject) ? array('data' => $dati) : $dati; + $this->_status = true; + + $this->sendResponse(); + } catch (Exception $e) { + try{ + $this->_dbAdapter->rollBack(); + }catch (Exception $e2){} + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function putAction() + { + try { + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + + $this->_dbAdapter->beginTransaction(); + $form = $this->getAddFormForResource(); + + //Aggiornamento di batch + if (is_array($params[0])) { + $failedElements = array(); + $resolvedElements = array(); + foreach ($params as $key => $riga) { + if ($form->isValid($riga) && $riga['id']) { + $this->updateSingleElement($riga['id'], $form->getValues()); + array_push($resolvedElements, $riga['id']); + } else { + array_push($failedElements, $riga['id']); + } + } + + $this->_dbAdapter->commit(); + + $this->_status = true; + $this->_responseData->data = array('failed_elements_id' => $failedElements, 'resolved_elements_id' => $resolvedElements); + return $this->sendResponse(); + } + + //Aggiornamento singolo + if (!$form->isValidPartial($params)) { + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_FORM_DATAINVALID; + $this->_responseData->message = 'I dati inseriti non sono validi'; + $this->_responseData->errorDetails = $form->getMessages(); + $this->sendResponse(); + } + + $dati = $form->getValues(); + + if (!$this->_getParam('id')) { + $this->_responseData->message = 'Id elemento non trovato'; + $this->sendResponse(); + } + + $dati = $this->preUpdateElement($dati, $this->_getParam('id')); + + $this->updateSingleElement($this->_getParam('id'), $dati); + $dati['id'] = $this->_getParam('id'); + + $this->_dbAdapter->commit(); + + $dati = $this->afterUpdateElement($dati); + + $this->_responseData->data = ($this->_returnWithDataObject) ? array('data' => $dati) : $dati; + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + try{ + $this->_dbAdapter->rollBack(); + }catch (Exception $e2){} + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function patchAction() + { + try { + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + + $this->_dbAdapter->beginTransaction(); + $form = $this->getAddFormForResource(); + + //Aggiornamento singolo + if (!$form->isValidPartial($params)) { + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_FORM_DATAINVALID; + $this->_responseData->message = 'I dati inseriti non sono validi'; + $this->_responseData->errorDetails = $form->getMessages(); + $this->sendResponse(); + } + + $formData = $form->getValues(); + + //rimuovo i valori vuoti che non devono essere sovrascritti + foreach ($formData as $key => $val) { + if (!$val) unset($formData[$key]); + } + + $id = $this->_getParam('id'); + if (!$id) { + $this->_responseData->message = 'Id elemento non trovato'; + $this->sendResponse(); + } + + $oldElement = $this->_genericModel->getById($this->_resourceName, $id); + $dati = array_merge($oldElement, $formData); + + $dati = $this->preUpdateElement($dati, $this->_getParam('id')); + + $dati = $this->updateSingleElement($this->_getParam('id'), $dati); + + $this->_dbAdapter->commit(); + + $dati = $this->afterUpdateElement($dati); + + $this->_responseData->data = $dati; + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + try{ + $this->_dbAdapter->rollBack(); + }catch (Exception $e2){} + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function deleteAction() + { + try { + + $this->_dbAdapter->beginTransaction(); + + if (!$this->_getParam('id')) { + $this->_status = false; + $this->_responseData->message = "Errore id non trovato"; + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_NOIDERROR; + return $this->sendResponse(); + } + + $toDelete = explode(',', $this->_getParam('id')); + //Eliminazione batch + if (is_array($toDelete) && count($toDelete) > 1) { + $failedElements = array(); + $resolvedElements = array(); + foreach ($toDelete as $key => $id) { + try { + $this->deleteSingleElement($id); + array_push($resolvedElements, $id); + } catch (Exception $e) { + array_push($failedElements, $id); + } + } + + $this->_dbAdapter->commit(); + $this->_responseData->data = $resolvedElements; + $this->_status = true; + + return $this->sendResponse(); + } + + $id = $this->_getParam('id', null); + if (!$id) { + $this->_responseData->message = 'Id non ricevuto'; + $this->sendResponse(); + } + + // Pre delete + $this->preDeleteElement($id); + + //Eliminazione Singola + $this->deleteSingleElement($id); + + // After delete + $this->afterDeleteElement($id); + + $this->_dbAdapter->commit(); + $this->_status = true; + return $this->sendResponse(); + } catch (Exception $e) { + try{ + $this->_dbAdapter->rollBack(); + }catch (Exception $e2){} + $this->_responseData->message = $e->getMessage(); + return $this->sendResponse(); + } + } + + public function headAction() + { + $this->_status = true; + $this->sendResponse(); + } + + public function optionsAction() + { + $this->_status = true; + $this->sendResponse(); + } + + //##################################### SINGLE ELEMENT FUNCTIONS ################################################### + + public function getSingleElement($id) + { + return $this->getSingleElementManipulate($this->_genericModel->getById($this->_resourceName, $id)); + } + + public function insertSingleElement($dati) + { + return $this->_genericModel->insert($this->_resourceName, $dati); + } + + public function updateSingleElement($id, $dati) + { + return $this->_genericModel->update($this->_resourceName, $id, $dati); + } + + public function deleteSingleElement($id) + { + return $this->_genericModel->delete($this->_resourceName, $id); + } + + public function insertDataToRowList($list) + { + return $list; + } + + //##################################### SWITCH METHOD FUNCTIONS ################################################### + + public function switchMethodFunction($method) + { + switch ($method) { + case'bycolumn': + $this->defaultGetByColumnName(); + break; + default: + $this->defaultGetList(); + break; + } + } + + protected function defaultGetList() + { + if ($this->_getParam('id') != null) { + $this->_responseData->data = $this->getSingleElement($this->_getParam('id')); + } else { + $this->_inArray = true; + + $page = $this->_getParam('page', $this->_defaultPageNumber); + $count = $this->_getParam('count', $this->_defaultPageCount); + $order = $this->_getParam('order', $this->_defaultOrder); + $select = $this->_getParam('select', null); + + $this->checkIfSetJoinData($this->getAllParams()); + $this->checkIfSetGroupBy($this->getAllParams()); + + $where = $this->_helper->FilterFunctions($this->getAllParams()); + + $where = $this->setFixedSelectWhere($where); + $data = $this->_genericModel->getList($this->_resourceName, $page, $count, $where, $order, $select, $this->_joinData, $this->_groupBy); + + $data = $this->insertDataToRowList($data); + + $this->_responseData->data = $data; + } + + $this->_status = true; + $this->sendResponse(); + } + + public function defaultGetByColumnName() + { + $columnName = $this->_getParam('name', ''); + $val = $this->_getParam('val', ''); + + $data = $this->_genericModel->getByColumnName($this->_resourceName, $columnName, $val); + + $this->_responseData->data = $data; + $this->_status = true; + $this->sendResponse(); + } + + /** + * Serve per applicare eventuali filtri fissi + * @param $where + * @return mixed + */ + public function setFixedSelectWhere($where) + { + return $where; + } + + /** + * Serve ad applicare un eventuale joinData + * @param $params + */ + public function checkIfSetJoinData($params) + { + + } + + /** + * Serve ad applicare un eventuale groupBy + * @param $params + */ + public function checkIfSetGroupBy($params) + { + + } + + //##################################### HELPERS FUNCTIONS ################################################### + + public function getSingleElementManipulate($data) + { + return $data; + } + + public function preInsertElement($data) + { + return $data; + } + + public function afterInsertElement($data) + { + return $data; + } + + public function preUpdateElement($data, $id) + { + return $data; + } + + public function afterUpdateElement($data) + { + return $data; + } + + public function preDeleteElement($id) + { + return; + } + + public function afterDeleteElement($id) + { + return; + } + + //##################################### GENERIC FUNCTIONS ########################################################## + + public function sendResponse() + { + + if (!$this->_status) { + $message = (!$this->_responseData->message) ? "Errore non identificato sul web service risorsa: '$this->_resourceName'" : $this->_responseData->message; + $errorCode = (!$this->_responseData->errorCode) ? App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR : $this->_responseData->errorCode; + + $this->sendErrorResponse($message, $errorCode); + } + + if (isset($this->_responseData->data)) { + if ($this->_responseData->data instanceof Zend_Paginator) { + $this->_responseData->totalItems = $this->_genericModel->getCountTotal($this->_resourceName); + $this->_responseData->currentItemsCount = $this->_responseData->data->getTotalItemCount(); + $this->_responseData->data = (array)$this->_responseData->data->getCurrentItems(); + } else if (is_array($this->_responseData->data)) { + $this->_responseData->totalItems = $this->_genericModel->getCountTotal($this->_resourceName); + $this->_responseData->currentItemsCount = count($this->_responseData->data); + } else if (is_string($this->_responseData->data)) { + $this->_responseData->data = array('message' => $this->_responseData->data); + } + } + + if ($this->_inArray) { + $content = $this->_responseData->data; + $this->getResponse() + ->setHeader('X-Page', $this->getParam('page')) + ->setHeader('X-Count', $this->getParam('count')) + ->setHeader('X-Tot-Filtered', $this->_responseData->currentItemsCount) + ->setHeader('X-Tot-Items', $this->_responseData->totalItems); + } else { + $content = ($this->_responseData->data); + } + + $this->getResponse() + ->setHeader('Content-Type', 'application/json;charset=utf-8') + ->setBody($this->_helper->Globalfunction->safeJsonEncode($content)) + ->sendResponse(); + + exit; + } + + public function sendErrorResponse($message, $errorCode, $dbName = null) + { + + $message = (!$message) ? "Errore non identificato sul web service risorsa: '$this->_resourceName'" : $message; + $errorCode = (!$errorCode) ? App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR : $errorCode; + + throw new App_Controller_Errors_WebServiceError(utf8_encode($message), $dbName, $errorCode); + } + + public function disableCallAction() + { + // Disabilito la risorsa + $this->sendErrorResponse("Funzione non disponibile", App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_NOPERMISSION); + } + + public function getAddFormForResource() + { + + $class = implode('_', array( + 'Application_Form', + strtoupper($this->getRequest()->getModuleName()), + ucfirst($this->_resourceFormName), + 'Add')); + + if (!class_exists($class)) { + throw new App_Controller_Errors_WebServiceError("Classe '$class' potrebbe non esistere"); + } + + return new $class(); + } + +} + diff --git a/library/App/Controller/Rest/MongoController.php b/library/App/Controller/Rest/MongoController.php new file mode 100644 index 0000000..3db0643 --- /dev/null +++ b/library/App/Controller/Rest/MongoController.php @@ -0,0 +1,393 @@ +_helper->viewRenderer->setNoRender(true); + $this->_helper->AjaxContext() + ->addActionContext('get', 'json') + ->addActionContext('post', 'json') + ->addActionContext('put', 'json') + ->addActionContext('patch', 'json') + ->addActionContext('delete', 'json') + ->addActionContext('options', 'json') + ->addActionContext('head', 'json') + ->initContext('json'); + + } + + public function preDispatch() + { + $this->_responseData = new stdClass(); + $this->_status = false; + $this->_inArray = false; + + $this->_mongoModel = new App_Model_Mongo_Client(); + + $this->_response->setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Origin,Authorization,x-requested-with,Content-Type,Cache-Control,X-As-Dev-On,X-As-Dev-Pw'); + $this->_response->setHeader('Access-Control-Expose-Headers', 'X-Tot-Items, X-Page,X-Count,X-Tot-Filtered'); + $this->_response->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, PATCH, DELETE'); + $this->_response->setHeader('Access-Control-Allow-Origin', '*'); + $this->_response->setHeader('Access-Control-Allow-Credentials', 'true'); + + // Controllo sui metodi di prefetch + if($_SERVER['REQUEST_METHOD'] === 'OPTIONS'){ + return $this->optionsAction(); + } + + if($_SERVER['REQUEST_METHOD'] === 'HEAD'){ + return $this->optionsAction(); + } + + if($_SERVER['REQUEST_METHOD'] === 'PATCH'){ + return $this->patchAction(); + } + } + + //##################################### CRUD FUNCTIONS ############################################################# + + public function indexAction() + { + $this->getAction(); + } + + public function getAction() + { + + try { + switch ($this->_getParam('method')) { + default: + if ($this->_getParam('id') != null) { + $this->_responseData->data = $this->getSingleElement($this->_getParam('id')); + } else { + $this->_inArray = true; + + $page = intval($this->_getParam('page', null)); + $count = intval($this->_getParam('count', null)); + $order = $this->_getParam('order', null); + //$projection = $this->_helper->MongoProjectionFunctions($this->_getParam('select', null), $this->_defaultProjection); + $projection = $this->_getParam('select', null); + $addFields = null; + + $where = $this->_helper->MongoFilterFunctions($this->getAllParams()); + + $where = $this->handleGetListFilters($where); + + $data = $this->_mongoModel->getListAggregation($this->_resourceName, $page, $count, $where, $order, $projection, $addFields); + + // Zend_Registry::get('log')->info(print_r($data,true)); + + $this->_responseData->data = $data; + } + break; + } + + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + $this->_status = false; + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function postAction() + { + + try { + + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + + $form = $this->getAddFormForResource(); + + //Inserimento di un singolo elemento + if (!$form->isValid($params)) { + $this->_status = false; + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_FORM_DATAINVALID; + $this->_responseData->message = 'I dati inseriti non sono validi'; + $this->_responseData->errorDetails = $form->getMessages(); + $this->sendResponse(); + } + + $dati = $form->getValues(); + + $dati = $this->preInsertElement($dati); + + $dati['id'] = $this->insertSingleElement($dati); + + $dati = $this->afterInsertElement($dati); + + $this->_responseData->data = array('data' => $dati); + $this->_status = true; + + $this->sendResponse(); + } catch (Exception $e) { + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function putAction() + { + try { + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + + $form = $this->getAddFormForResource(); + + //Aggiornamento singolo + if (!$form->isValidPartial($params)) { + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_FORM_DATAINVALID; + $this->_responseData->message = 'I dati inseriti non sono validi'; + $this->_responseData->errorDetails = $form->getMessages(); + $this->sendResponse(); + } + + $dati = $form->getValues(); + + if (!$this->_getParam('id')) { + $this->_responseData->message = 'Id elemento non trovato'; + $this->sendResponse(); + } + + $dati = $this->preUpdateElement($dati, $this->_getParam('id')); + + $this->updateSingleElement($this->_getParam('id'), $dati); + $dati['id'] = $this->_getParam('id'); + + $dati = $this->afterUpdateElement($dati); + + $this->_responseData->data = array('data' => $dati); + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function patchAction() + { + try { + $params = Zend_Json::decode($this->getRequest()->getRawBody()); + + // Zend_Registry::get('log')->info(print_r($params,true)); + + $form = $this->getAddFormForResource(); + + //Aggiornamento singolo + if (!$form->isValidPartial($params)) { + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_FORM_DATAINVALID; + $this->_responseData->message = 'I dati inseriti non sono validi'; + $this->_responseData->errorDetails = $form->getMessages(); + $this->sendResponse(); + } + + $dati = $form->getValues(); + + //rimuovo i valori vuoti che non devono essere sovrascritti + foreach ($dati as $key => $val){ + if(!$val) unset($dati[$key]); + } + + $id = $this->_getParam('id'); + if (!$id) { + $this->_responseData->message = 'Id elemento non trovato'; + $this->sendResponse(); + } + + // Zend_Registry::get('log')->info(print_r($dati,true)); + + $oldElement = (array) $this->_mongoModel->getById($this->_resourceName, $id); + $dati = array_merge($oldElement, $dati); + + // Zend_Registry::get('log')->info(print_r($oldElement,true)); + + $dati = $this->preUpdateElement($dati, $id); + + // Zend_Registry::get('log')->info(print_r($dati,true)); + + $this->updateSingleElement($id, $dati); + $dati['id'] = $id; + + $dati = $this->afterUpdateElement($dati); + + $this->_responseData->data = array('data' => $dati); + $this->_status = true; + $this->sendResponse(); + } catch (Exception $e) { + $this->_responseData->message = $e->getMessage(); + $this->sendResponse(); + } + } + + public function deleteAction() + { + try { + + if (!$this->_getParam('id')) { + $this->_status = false; + $this->_responseData->message = "Errore id non trovato"; + $this->_responseData->errorCode = App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_NOIDERROR; + return $this->sendResponse(); + } + + //Eliminazione Singola + $this->deleteSingleElement($this->_getParam('id')); + + $this->_status = true; + return $this->sendResponse(); + } catch (Exception $e) { + $this->_responseData->message = $e->getMessage(); + return $this->sendResponse(); + } + } + + public function headAction() + { + $this->_status = true; + $this->sendResponse(); + } + + public function optionsAction() + { + $this->_status = true; + $this->sendResponse(); + } + + //##################################### SINGLE ELEMENT FUNCTIONS ################################################### + + public function getSingleElement($id) + { + return $this->getSingleElementManipulate($this->_mongoModel->getById($this->_resourceName, $id)); + } + + public function insertSingleElement($dati) + { + return $this->_mongoModel->insert($this->_resourceName, $dati); + } + + public function updateSingleElement($id, $dati) + { + return $this->_mongoModel->update($this->_resourceName, $id, $dati); + } + + public function deleteSingleElement($id) + { + return $this->_mongoModel->delete($this->_resourceName, $id); + } + + //##################################### HELPERS FUNCTIONS ################################################### + + public function getSingleElementManipulate($data) + { + return $data; + } + + public function preInsertElement($data) + { + return $data; + } + + public function afterInsertElement($data) + { + return $data; + } + + public function preUpdateElement($data, $id) + { + return $data; + } + + public function afterUpdateElement($data) + { + return $data; + } + + public function handleGetListFilters($where){ + return $where; + } + + //##################################### GENERIC FUNCTIONS ########################################################## + + public function sendResponse() + { + + if (!$this->_status) { + $message = (!$this->_responseData->message) ? "Errore non identificato sul web service risorsa: '$this->_resourceName'" : $this->_responseData->message; + $errorCode = (!$this->_responseData->errorCode) ? App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR : $this->_responseData->errorCode; + + $this->sendErrorResponse($message, $errorCode); + } + + if (isset($this->_responseData->data) && is_array($this->_responseData->data)) { + $this->_responseData->totalItems = $this->_mongoModel->getCountTotal($this->_resourceName); + + if (Zend_Registry::isRegistered(App_Model_Mongo_Client::WHERE_MONGO_REG_NAME)) { + $this->_responseData->currentItemsCount = $this->_mongoModel->getCountFilteredTotal($this->_resourceName, Zend_Registry::get(App_Model_Mongo_Client::WHERE_MONGO_REG_NAME)); + } else { + $this->_responseData->currentItemsCount = $this->_responseData->totalItems; + } + } + + if ($this->_inArray) { + $content = $this->_responseData->data; + $this->getResponse() + ->setHeader('X-Page', $this->getParam('page')) + ->setHeader('X-Count', $this->getParam('count')) + ->setHeader('X-Tot-Filtered', $this->_responseData->currentItemsCount) + ->setHeader('X-Tot-Items', $this->_responseData->totalItems); + } else { + $content = ($this->_responseData->data); + } + + $this->getResponse() + ->setHeader('Content-Type', 'application/json;charset=utf-8') + ->setBody($this->_helper->Globalfunction->safeJsonEncode($content)) + ->sendResponse(); + + exit; + } + + public function sendErrorResponse($message, $errorCode, $dbName = null) + { + + $message = (!$message) ? "Errore non identificato sul web service risorsa: '$this->_resourceName'" : $message; + $errorCode = (!$errorCode) ? App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR : $errorCode; + + throw new App_Controller_Errors_WebServiceError(utf8_encode($message), $dbName, $errorCode); + } + + public function disableCallAction() + { + // Disabilito la risorsa + $this->sendErrorResponse("Funzione non disponibile", App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_NOPERMISSION); + } + + protected function getAddFormForResource() + { + + $class = implode('_', array( + 'Application_Form', + strtoupper($this->getRequest()->getModuleName()), + ucfirst($this->_resourceName), + 'Add')); + + if (!class_exists($class)) { + throw new App_Controller_Errors_WebServiceError("Classe '$class' potrebbe non esistere"); + } + + return new $class(); + } + +} + diff --git a/library/App/Controller/Sections/AbstractSection.php b/library/App/Controller/Sections/AbstractSection.php new file mode 100644 index 0000000..40cfa6b --- /dev/null +++ b/library/App/Controller/Sections/AbstractSection.php @@ -0,0 +1,552 @@ +_controller = $controller; + $this->_model = $controller->getMainModel(); + + if (!($this->_controller->_configs instanceof App_Service_ConfigManager)) + throw new Exception("E' necessario instanziare nella classe " . get_class($this->_controller) . " la proprietà '_configs' come App_Service_ConfigManager"); + + $this->_COOKIE_EXPIRE_TIME = time() + (86400 * 30); + + $BASE_COOKIE_STRING = str_replace('#module#', strtolower($this->_controller->getRequest()->getModuleName()), + str_replace('#site#', strtolower(Zend_Registry::get('ENVIROMENTS')->get('site_short_id')), + str_replace('#resource#', strtolower($this->_resourceName), self::COOKIE_BASE_STRING_VARIABLE_NAME))); + + $this->_COUNT_VARIABLE_NAME = $BASE_COOKIE_STRING . "count"; + $this->_ORDER_VARIABLE_NAME = $BASE_COOKIE_STRING . "order"; + $this->_ORDERTYPE_VARIABLE_NAME = $BASE_COOKIE_STRING . "ordertype"; + $this->_SEARCHPARAMS_VARIABLE_NAME = $BASE_COOKIE_STRING . "searchparams"; + } + + /*************************************************************************************************************** + ************************************** FUNZIONI CRUD *********************************************** + **************************************************************************************************************/ + + public function lista() + { + + $this->listPreDispatch(); + + $this->handleSearchListParams(); + + $this->checkIfSetJoinData($this->_SEARCH_PARAMS); + $this->checkIfSetGroupBy($this->_SEARCH_PARAMS); + + $orderString = $this->_ORDERLIST . ' ' . $this->_ORDERLIST_TYPE; + + $where = $this->_controller->getHelper('FilterFunctions')->direct($this->_SEARCH_PARAMS, true); + $list = $this->_model->getList($this->_resourceName, $this->_PAGE, $this->_COUNT, $where, $orderString, '*', $this->_joinData, $this->_groupBy); + + if ($list instanceof Zend_Paginator) { + $list->setPageRange(5); + $this->_controller->view->totFiltrati = $list->getTotalItemCount(); + } else { + $this->_controller->view->totFiltrati = count($list); + } + + $this->_controller->view->totElementi = $this->_model->getCountTotal($this->_resourceName); + $this->_controller->view->table = $list; + + $this->listPostDispatch(); + } + + public function get() + { + $this->_controller->getHelper('layout')->disableLayout(); + $this->_controller->getHelper('viewRenderer')->setNoRender(); + + if ($this->_controller->getRequest()->isXmlHttpRequest()) { + if (!$this->_controller->getParam('id')) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => false, 'message' => 'Id non ricevuto'))); + } + $element = $this->_model->getById($this->_resourceName, $this->_controller->getParam('id')); + if (!$element) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => false, 'message' => $this->_resourceName . ' non trovato'), false)); + } + + if (method_exists($this, 'getElement')) { + $element = $this->getElement($element); + } + + $response = Zend_Json::encode(array_merge($element, array('success' => true))); + $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody($response); + } + } + + public function save() + { + $this->_controller->getHelper('layout')->disableLayout(); + $this->_controller->getHelper('viewRenderer')->setNoRender(); + + if ($this->_controller->getRequest()->isXmlHttpRequest()) { + + if (!$this->_controller->getRequest()->isPost()) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => FALSE, 'message' => 'Errore durante la richiesta.'))); + } + + $form = $this->getDefaultSaveFormClassName(); + if (!$form->isValid($_POST)) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => 'invalid', + 'message' => 'Controllare i dati inseriti nei campi sono presenti errori.', + 'errors' => $form->getMessages()))); + } + + try { + + $dati = $form->getValues(); + $id = $this->_controller->getParam('id'); + $op = $this->_controller->getParam('op'); + + $response = array(); + $response['id'] = $id; + $response['op'] = $op; + + if ($op == 'insert') { + $dati = $this->preInsertFunction($dati); + + $dati['id'] = $this->insertFunction($dati); + + $dati = $this->afterInsertFunction($dati); + } else { + + if (!$id) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('success' => FALSE, + 'message' => 'Errore id non ricevuto'))); + } + + $dati = $this->preUpdateFunction($dati, $id); + + $this->updateFunction($id, $dati); + $dati['id'] = $id; + + $dati = $this->afterUpdateFunction($dati, $id); + } + + $this->_controller->view->assign($dati); + $this->_controller->render(strtolower($this->_resourceName) . '/td'); + + $response['text'] = $this->_controller->getResponse()->getBody(); + $response['data'] = $dati; + + $response['success'] = true; + $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode($response)); + } catch (Exception $e) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('stato' => false, + 'shortMessage' => 'Si è verificato un errore durante il salvataggio dei dati', + 'message' => $e->getMessage()) + )); + } + } + } + + public function delete() + { + if ($this->_controller->getRequest()->isXmlHttpRequest()) { + + $this->_controller->getHelper('layout')->disableLayout(); + $this->_controller->getHelper('viewRenderer')->setNoRender(); + + if (!$this->_controller->getParam('id') || !$this->_controller->getParam('cod')) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('success' => false, + 'message' => 'Id o codice non trovato.'))); + } + + try { + $this->deleteSingleElement($this->_controller->getParam('id')); + + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('success' => true))); + } catch (Exception $e) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('success' => false, + 'message' => 'Si è verificato un errore durante l\'eliminazione.' . $e->getMessage()))); + } + + } + } + + public function deleteSelect() + { + $this->_controller->getHelper('layout')->disableLayout(); + $this->_controller->getHelper('viewRenderer')->setNoRender(); + if ($this->_controller->getRequest()->isXmlHttpRequest()) { + if ($this->_controller->getParam('data')) { + $data = $this->_controller->getParam('data'); + if (count($data) <= 0) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode(array('success' => FALSE, 'message' => 'Nessun elemento selezionato'))); + } + $response['success'] = 'TRUE'; + $response['id'] = array(); + foreach ($data as $key => $value) { + array_push($response['id'], $value); + $this->deleteSingleElement($value); + } + } else { + $response['success'] = FALSE; + $response['message'] = "Si è verificato un errore durante l'eliminazione"; + } + $response = Zend_Json::encode($response); + $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody($response); + } + } + + public function setstate() + { + if ($this->_controller->getRequest()->isXmlHttpRequest()) { + + $this->_controller->getHelper('layout')->disableLayout(); + $this->_controller->getHelper('viewRenderer')->setNoRender(); + + if (!$this->_controller->getParam('id')) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => FALSE, 'message' => 'Id non trovato.'))); + } + + try { + $this->_model->update('Errorlog', $this->_controller->getParam('id'), array('state' => $this->_controller->getParam('state'))); + + $this->_controller->view->assign($this->_model->getById('Errorlog', $this->_controller->getParam('id'))); + + $this->_controller->render('errorlog/td'); + $response['text'] = $this->_controller->getResponse()->getBody(); + $response['success'] = true; + + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody(Zend_Json::encode($response)); + } catch (Exception $e) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => FALSE, 'message' => 'Si è verificato un errore durante l\'eliminazione.'))); + } + } + } + + public function setstateSelect() + { + + $this->_controller->getHelper('layout')->disableLayout(); + $this->_controller->getHelper('viewRenderer')->setNoRender(); + + if ($this->_controller->getRequest()->isXmlHttpRequest()) { + + if ($this->_controller->getParam('data')) { + + $data = $this->_controller->getParam('data'); + + if (count($data) <= 0) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => FALSE, 'message' => 'Nessun elemento selezionato'))); + } + + $state = $this->_controller->getParam('state'); + if (!$state) { + return $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8') + ->setBody(Zend_Json::encode(array('success' => FALSE, 'message' => 'Stato da impostare non selezionato'))); + } + + $response['rows'] = array(); + foreach ($data as $key => $value) { + + $this->_controller->getResponse()->setBody(""); + + $this->_model->update($this->_resourceName, $value, array('state' => $state)); + + $this->_controller->view->assign($this->_model->getById($this->_resourceName, $value)); + + $this->_controller->render('errorlog/td'); + $tdRow = array( + 'id' => $value, + 'tdRow' => $this->_controller->getResponse()->getBody() + ); + + array_push($response['rows'], $tdRow); + } + + $response['success'] = true; + + } else { + $response['success'] = FALSE; + $response['message'] = "Si è verificato un errore durante l'aggiornamento dei dati"; + } + + $response = Zend_Json::encode($response); + $this->_controller->getResponse()->setHeader('Content-type', 'application/json;charset=UTF-8')->setBody($response); + } + } + + /*************************************************************************************************************** + *********************************** FUNZIONI SPECIALIZZATE ***************************************** + **************************************************************************************************************/ + + /** + * Serve a manipolare i search params dopo che sono stati recuperati dallo storage e ad esempio a fissare dei parametri fissi + */ + public function handleSearchListParams(){ + } + + /** + * Serve a impostare il joinData i params vengono passati per essere utilizzati per eventuali condizioni + * @param $params + */ + public function checkIfSetJoinData($params){ + + } + + /** + * Serve a impostare il groupBy i params vengono passati per essere utilizzati per eventuali condizioni + * @param $params + */ + public function checkIfSetGroupBy($params){ + + } + + //Funzione di eliminazione singolo elemento personalizzarabile definendo il metodo deleteElement + protected function deleteSingleElement($id) + { + $this->preDeleteFunction($id); + + if (method_exists($this, 'deleteElement')) { + $this->deleteElement($id); + } else { + $this->_model->delete($this->_resourceName, $id); + } + + $this->afterDeleteFunction($id); + } + + /** + * Funzione da sovrascrivere che viene eseguita prima l'inserimento dell'elemento nel db; (deve restiuire i dati) + * @param $data + * @return mixed + */ + public function preInsertFunction($data) + { + return $data; + } + + /** + * Funzione che effettua il singolo inserimento dell'elemento + * + * @param array $dati + * @return mixed + */ + public function insertFunction(array $dati){ + return $this->_model->insert($this->_resourceName, $dati); + } + + /** + * Funzione da sovrascrivere che viene eseguita dopo l'inserimento dell'elemento nel db; (deve restiuire i dati) + * @param $data + * @return mixed + */ + public function afterInsertFunction($data) + { + return $data; + } + + /** + * Funzione da sovrascrivere che viene eseguita prima l'aggiornamento dei dati nel db; (deve restiuire i dati) + * @param $data + * @return mixed + */ + public function preUpdateFunction($data, $id) + { + return $data; + } + + /** + * Funzione che effettua il singolo update dell'elemento + * @param $id + * @param array $dati + */ + public function updateFunction($id, array $dati){ + $this->_model->update($this->_resourceName, $id, $dati); + } + + /** + * Funzione da sovrascrivere che viene eseguita dopo l'aggiornamento dei dati nel db; (deve restiuire i dati) + * @param $data + * @return mixed + */ + public function afterUpdateFunction($data, $id) + { + return $data; + } + + /** + * Funzione da sovrascrivere che viene eseguita prima dell'eliminazione dell'elemento nel db; (più che altro è una funzione di controllo) + * @param $id + * @return mixed + */ + public function preDeleteFunction($id) + { + return null; + } + + /** Funzione che viene eseguita appena dopo l'eliminazione + * @param $id + * @return null + */ + public function afterDeleteFunction($id) + { + return null; + } + + /** + * @return mixed + * + * Restituisce la classe Form generica "Add" per la sezione + */ + public function getDefaultSaveFormClassName() + { + $class = implode('_', array( + 'Application', + 'Form', + ucfirst($this->_controller->getRequest()->getModuleName()), + ucfirst($this->_controller->getRequest()->getControllerName()), + $this->_resourceName, + 'Add')); + return new $class(); + } + + private function listPreDispatch() + { + + $this->_controller->view->resourceName = strtolower($this->_resourceName); + $this->_controller->view->isActiveModalDetail = $this->_enableModalDetail; + $this->_controller->view->isActiveFilterModal = $this->_enableModalFilter; + $this->_controller->view->isActiveNewInsert = $this->_enableNewInsert; + $this->_controller->view->customJsScript = $this->_customJsSectionScripts; + $this->_controller->view->customCssScript = $this->_customCssSectionScripts; + + $count = $this->_controller->getParam('count'); + if ($count !== null && intval($count) != 0) { + $this->_COUNT = intval($count); + setcookie($this->_COUNT_VARIABLE_NAME, intval($count), $this->_COOKIE_EXPIRE_TIME, "/"); + } else { + if (isset($_COOKIE[$this->_COUNT_VARIABLE_NAME])) { + $this->_COUNT = intval($_COOKIE[$this->_COUNT_VARIABLE_NAME]); + } else { + $this->_COUNT = $this->_defaultCount; + } + } + + if ($this->_controller->getParam('reset')) { + $this->_PAGE = 1; + //$this->_COUNT = $this->_defaultCount; + $this->_ORDERLIST = $this->_model->getResource($this->_resourceName)->getDefaultOrder(); + $this->_ORDERLIST_TYPE = $this->_model->getResource($this->_resourceName)->getDefaultTipoOrder(); + $this->_SEARCH_PARAMS = array(); + + //Resetto anche i cookie + //setcookie($this->_COUNT_VARIABLE_NAME, intval($this->_COUNT), $this->_COOKIE_EXPIRE_TIME, "/"); + setcookie($this->_ORDER_VARIABLE_NAME, $this->_ORDERLIST, $this->_COOKIE_EXPIRE_TIME, "/"); + setcookie($this->_ORDERTYPE_VARIABLE_NAME, $this->_ORDERLIST_TYPE, $this->_COOKIE_EXPIRE_TIME, "/"); + setcookie($this->_SEARCHPARAMS_VARIABLE_NAME, Zend_Json::encode($this->_SEARCH_PARAMS), $this->_COOKIE_EXPIRE_TIME, "/"); + + return; + } + + $this->_PAGE = $this->_controller->getParam('page', 1); + + if (isset($_COOKIE[$this->_ORDER_VARIABLE_NAME]) && !$this->_controller->getParam('order')) { + $this->_ORDERLIST = $_COOKIE[$this->_ORDER_VARIABLE_NAME]; + //Zend_Registry::get('log')->info(print_r("ORDERLIST_COOKIE_PARAM: ".$this->_ORDERLIST,true)); + } else { + $this->_ORDERLIST = $this->_controller->getParam('order', $this->_model->getResource($this->_resourceName)->getDefaultOrder()); + //Zend_Registry::get('log')->info(print_r("ORDERLIST_NEW_PARAM: ".$this->_ORDERLIST,true)); + setcookie($this->_ORDER_VARIABLE_NAME, $this->_ORDERLIST, $this->_COOKIE_EXPIRE_TIME, "/"); + } + + if (isset($_COOKIE[$this->_ORDERTYPE_VARIABLE_NAME]) && !$this->_controller->getParam('tipoOrder')) { + $this->_ORDERLIST_TYPE = $_COOKIE[$this->_ORDERTYPE_VARIABLE_NAME]; + //Zend_Registry::get('log')->info(print_r("ORDERLISTTYPE_COOKIE_PARAM: ".$this->_ORDERLIST_TYPE,true)); + } else { + $this->_ORDERLIST_TYPE = $this->_controller->getParam('tipoOrder', $this->_model->getResource($this->_resourceName)->getDefaultTipoOrder()); + //Zend_Registry::get('log')->info(print_r("ORDERLISTTYPE_NEW_PARAM: ".$this->_ORDERLIST_TYPE,true)); + setcookie($this->_ORDERTYPE_VARIABLE_NAME, $this->_ORDERLIST_TYPE, $this->_COOKIE_EXPIRE_TIME, "/"); + } + + if (isset($_COOKIE[$this->_SEARCHPARAMS_VARIABLE_NAME])) { + $this->_SEARCH_PARAMS = Zend_Json::Decode($_COOKIE[$this->_SEARCHPARAMS_VARIABLE_NAME]); + } else { + $this->_SEARCH_PARAMS = array(); + } + + //Aggiungo eventuali nuovi parametri + $params = $this->_controller->getHelper('FilterFunctions')->cleanParams($this->_controller->getAllParams(), false); + + //Riunisco i parametri gia esistenti con i nuovi + $this->_SEARCH_PARAMS = array_replace($this->_SEARCH_PARAMS, $params); + } + + private function listPostDispatch() + { + $this->_controller->view->moduleName = $this->_controller->getRequest()->getModuleName(); + + $this->_controller->view->count = $this->_COUNT; + $this->_controller->view->page = $this->_PAGE; + $this->_controller->view->order = $this->_ORDERLIST; + $this->_controller->view->tipoOrder = $this->_ORDERLIST_TYPE; + $this->_controller->view->search_params = $this->_SEARCH_PARAMS; + + //Elimino i parametri vuoti dalle searchparams + $this->_SEARCH_PARAMS = $this->_controller->getHelper('FilterFunctions')->cleanParams($this->_controller->getAllParams()); + + setcookie($this->_SEARCHPARAMS_VARIABLE_NAME, Zend_Json::encode($this->_SEARCH_PARAMS), $this->_COOKIE_EXPIRE_TIME, '/'); + + //Cambio il nome dello script view in 'list' + Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setScriptAction(strtolower($this->_resourceName) . '/list'); + } + +} diff --git a/library/App/Controller/Sections/Section.php b/library/App/Controller/Sections/Section.php new file mode 100644 index 0000000..c02847d --- /dev/null +++ b/library/App/Controller/Sections/Section.php @@ -0,0 +1,93 @@ +getRequest()->getActionName(); + $sectionName = null; + try { + + if (preg_match("/^list/", $actionName)) { + $sectionName = preg_replace("/list/", "", $actionName); + return $this->generaSectionClass($sectionName)->lista(); + } + + if (preg_match("/^get/", $actionName)) { + $sectionName = preg_replace("/get/", "", $actionName); + return $this->generaSectionClass($sectionName)->get(); + } + + if (preg_match("/^save|^salva/", $actionName)) { + $sectionName = preg_replace("/save|salva/", "", $actionName); + return $this->generaSectionClass($sectionName)->save(); + } + + if (preg_match("/^(?=.*?delete)(?!.*?select).*$/", $actionName)) { + $sectionName = preg_replace("/delete/", "", $actionName); + return $this->generaSectionClass($sectionName)->delete(); + } + + if (preg_match("/^deleteselect/", $actionName)) { + $sectionName = preg_replace("/deleteselect/", "", $actionName); + return $this->generaSectionClass($sectionName)->deleteSelect(); + } + + if (preg_match("/^(?=.*?setstate)(?!.*?select).*$/", $actionName)) { + $sectionName = preg_replace("/setstate/", "", $actionName); + return $this->generaSectionClass($sectionName)->setstate(); + } + + if (preg_match("/^setstateselect/", $actionName)) { + $sectionName = preg_replace("/setstateselect/", "", $actionName); + return $this->generaSectionClass($sectionName)->setstateSelect(); + } + + /** + * Gestisce le funzione custom di un report se vengono separate dal trattino + * con la stringa composta cosi: "-" + */ + if (preg_match("/-/", $actionName)) { + + $sectionName = explode('-', $actionName)[0]; + $functionName = explode('-', $actionName)[1]; + + // non funzionante con php 5 + // [$sectionName, $functionName] = explode('-', $actionName); + + return $this->generaSectionClass($sectionName)->$functionName(); + } + + } catch (Exception $e) { + try { + parent::__call($actionName, null); + } catch (Exception $e2) { + throw new Exception($e->getMessage()); + } + } + + } + + private function generaSectionClass($sectionName) + { + if (!isset($this->_sections[$sectionName])) { + $className = $this->getSectionClassName($sectionName); + $this->_sections[$sectionName] = new $className($this); + } + return $this->_sections[$sectionName]; + } + + private function getSectionClassName($sectionName) + { + return implode('_', array( + 'Application', + 'ControllerSection', + ucfirst($this->getRequest()->getModuleName()), + ucfirst($this->getRequest()->getControllerName()), + ucfirst($sectionName))); + } + +} diff --git a/library/App/Exception/MessageException.php b/library/App/Exception/MessageException.php new file mode 100644 index 0000000..6a8da0e --- /dev/null +++ b/library/App/Exception/MessageException.php @@ -0,0 +1,28 @@ +message = $message; + $this->_appMessage=$message; + $this->_appCode=$code; + } + + public function getAppMessage(){ + return $this->_appMessage; + } + + public function getAppCode(){ + return $this->_appCode; + } + +} diff --git a/library/App/Exception/ResponseCloudException.php b/library/App/Exception/ResponseCloudException.php new file mode 100644 index 0000000..6d49484 --- /dev/null +++ b/library/App/Exception/ResponseCloudException.php @@ -0,0 +1,23 @@ +_message = $message; + $this->_errorCode=$errorCode; + } + + public function getMyMessage(){ + return $this->_message; + } + + public function getErrorCode(){ + return $this->_errorCode; + } + +} \ No newline at end of file diff --git a/library/App/Form/Filters/MongoFormatBoolean.php b/library/App/Form/Filters/MongoFormatBoolean.php new file mode 100644 index 0000000..aa1a2e4 --- /dev/null +++ b/library/App/Form/Filters/MongoFormatBoolean.php @@ -0,0 +1,13 @@ +info(print_r('FormatData: '.$data,true)); + + $dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy')); + $dateValidatorSlashWithTime = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy HH:ii:ss')); + $dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + + if($dateValidatorSlashWithTime->isValid($data)){ + $data = explode(' ', $data); + $dataString = implode('-', array_reverse(explode("/", $data[0]))) ." ".$data[1]; + }else if ($dateValidatorSlash->isValid($data)) { + $dataString = implode('-', array_reverse(explode("/", $data))) . $this->checkTimeString($data); + }else if($dateValidatorTrattino->isValid($data)){ + $dataString = $data.$this->checkTimeString($data); + }else{ + return $data; + } + + $orig_date = new DateTime($dataString); + return new MongoDB\BSON\UTCDateTime($orig_date->getTimestamp() * 1000); + } + + //Controlla se aggiungere o no l'ora alla stringa + private function checkTimeString($data) + { + return (preg_match('/[0-9]{2}:[0-9]{2}:[0-9]{2}/', $data)) ? '' : " 00:00:00"; + } + +} diff --git a/library/App/Form/Filters/MongoFormatTimezone.php b/library/App/Form/Filters/MongoFormatTimezone.php new file mode 100644 index 0000000..bd42cc0 --- /dev/null +++ b/library/App/Form/Filters/MongoFormatTimezone.php @@ -0,0 +1,28 @@ + 'dd/mm/yyyy')); + $dateValidatorSlashWithTime = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy HH:ii:ss')); + $dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + + if($dateValidatorSlashWithTime->isValid($data)){ + $data = explode(' ', $data); + $dataString = implode('-', array_reverse(explode("/", $data[0]))) ." ".$data[1]; + }else if ($dateValidatorSlash->isValid($data)) { + $dataString = implode('-', array_reverse(explode("/", $data))) . " 00:00:00"; + }else if($dateValidatorTrattino->isValid($data)){ + $dataString = $data." 00:00:00"; + }else{ + return $data; + } + + $orig_date = new DateTime($dataString); + //Zend_Registry::get('log')->info(print_r($orig_date,true)); + return new MongoDB\BSON\Timestamp(1,$orig_date->getTimestamp()); + } + +} diff --git a/library/App/Form/Filters/MyBoolean.php b/library/App/Form/Filters/MyBoolean.php new file mode 100644 index 0000000..c0e5627 --- /dev/null +++ b/library/App/Form/Filters/MyBoolean.php @@ -0,0 +1,13 @@ +_enableNull = false; + if (is_array($options) && array_key_exists('enable_null', $options)) { + $this->_enableNull = $options['enable_null']; + } + } + + public function filter($value) + { + if(!is_numeric($value)){ + return ($this->_enableNull) ? null : 0; + } + + return floatval($value); + } +} diff --git a/library/App/Form/Filters/MyFormatData.php b/library/App/Form/Filters/MyFormatData.php new file mode 100644 index 0000000..373f62e --- /dev/null +++ b/library/App/Form/Filters/MyFormatData.php @@ -0,0 +1,39 @@ + 'dd/mm/yyyy')); + $dateValidatorSlashWithTime = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy HH:ii:ss')); + $dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + + switch (true){ + case ($dateValidatorSlashWithTime->isValid($data) && !$this->isTimestamp($data)): + $data = explode(' ',$data); + $date = $data[0]; + $time = $data[1]; + return implode('-', array_reverse(explode("/", $date))) . " ". $time; + case ($dateValidatorSlash->isValid($data) && !$this->isTimestamp($data)): + return implode('-', array_reverse(explode("/", $data))); + /*case ($this->isTimestamp($data)): + $data = new DateTime('@' . $data); + return $data->format('Y-m-d H:i:s');*/ + case ($dateValidatorTrattino->isValid($data) && !$this->isTimestamp($data)): + default: + return $data; + } + } + + private function isTimestamp($string) + { + try { + new DateTime('@' . $string); + } catch(Exception $e) { + return false; + } + return true; + } + +} diff --git a/library/App/Form/Filters/MyJsonEncode.php b/library/App/Form/Filters/MyJsonEncode.php new file mode 100644 index 0000000..9f0afc2 --- /dev/null +++ b/library/App/Form/Filters/MyJsonEncode.php @@ -0,0 +1,13 @@ +info($data); + $data = new DateTime($data['date']); + return $data -> format("Y-m-d"); + }elseif(is_string($data)){ + $dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy')); + $dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + if ($dateValidatorSlash->isValid($data)) { + return implode('-', array_reverse(explode("/", $data))); + }else if($dateValidatorTrattino->isValid($data)){ + return $data; + }else{ + return null; + } + } + + return $data; + } + +} \ No newline at end of file diff --git a/library/App/Form/Validators/EmailPec.php b/library/App/Form/Validators/EmailPec.php new file mode 100644 index 0000000..f3ff99a --- /dev/null +++ b/library/App/Form/Validators/EmailPec.php @@ -0,0 +1,35 @@ +'Valore non presente ', + self::EMAIL_ISPEC=>"L'Email inserita sembra essere una PEC, si prega di inserire un email privata" + ); + + public function isValid($value) + { + $this->_setValue($value); + + $isValid = true; + + if ($value === ''){ + $this->_error(self::EMAIL_NULL); + $isValid = false; + } + + $domain = explode('@',$value); + $domain = $domain[1]; + + if(in_array($domain,$this->_PEC_DOMAINS)){ + $this->_error(self::EMAIL_ISPEC); + $isValid = false; + } + + return $isValid; + } + } \ No newline at end of file diff --git a/library/App/Form/Validators/InDomain.php b/library/App/Form/Validators/InDomain.php new file mode 100644 index 0000000..84b616c --- /dev/null +++ b/library/App/Form/Validators/InDomain.php @@ -0,0 +1,49 @@ + 'Dominio non specificato', + self::DOMAIN_NO_VALUE => "Il valore non è compreso nel dominio specificato" + ); + + protected $_domain; + protected $_domainName; + + public function __construct($domainName) + { + $this->_domainName = $domainName; + $this->setDomain($domainName); + } + + public function isValid($value) + { + $this->_setValue($value); + + $isValid = true; + if (!in_array($value, $this->_domain)) { + $this->_error(self::DOMAIN_NO_VALUE); + $isValid = false; + } + + return $isValid; + } + + private function setDomain($domainName) + { + + if (!$domainName) { + throw new Zend_Validate_Exception('Nome di dominio non specificato'); + } + + $this->_domain = array_keys(App_Constants_Domains::DOMAINS[$domainName]); + + if(!$this->_domain){ + throw new Zend_Validate_Exception('Nome di dominio non trovato'); + } + + } +} diff --git a/library/App/Form/Validators/MongoBooleanRequired.php b/library/App/Form/Validators/MongoBooleanRequired.php new file mode 100644 index 0000000..d5e05e0 --- /dev/null +++ b/library/App/Form/Validators/MongoBooleanRequired.php @@ -0,0 +1,23 @@ + "Il campo deve essere di true o false" + ); + + public function isValid($value) + { + $this->_setValue($value); + + $isValid = true; + + if($value !== true && $value !== false){ + $this->_error(self::REQUIRED_VALUE); + $isValid = false; + } + + return $isValid; + } + } diff --git a/library/App/Form/Validators/MyData.php b/library/App/Form/Validators/MyData.php new file mode 100644 index 0000000..111c21d --- /dev/null +++ b/library/App/Form/Validators/MyData.php @@ -0,0 +1,24 @@ +'Formato data non valido' + ); + + public function isValid($value) + { + $this->_setValue($value); + + $isValid = true; + + $dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + if(!$dateValidatorTrattino->isValid($value)){ + $this->_error(self::INVALID_DATA_FORMAT); + $isValid = false; + } + + return $isValid; + } + } \ No newline at end of file diff --git a/library/App/Form/Validators/Piva.php b/library/App/Form/Validators/Piva.php new file mode 100644 index 0000000..284f72c --- /dev/null +++ b/library/App/Form/Validators/Piva.php @@ -0,0 +1,70 @@ +'Valore non presente ', + self::PIVA_LENGHT=>'La lunghezza della partita iva "%value%" non è corretta: la partita IVA dovrebbe essere lunga esattamente 11 caratteri', + self::PIVA_MATCH=>'La partita iva "%value%" contiene dei caratteri non ammessi: la partita IVA dovrebbe contenere solo cifre', + self::PIVA_INVALID=>'La partita iva "%value%" non è valida', + self::PIVA_INVALID_ME=>'La partita iva "%value%" non è valida: non puoi inserire la nostra p.iva', + self::PIVA_INVALID_ZERO=>'Sei sicuro che "%value%" sia la tua partita iva?', + ); + + public function isValid($value,$checkPivaInterna = true) + { + $this->_setValue($value); + + $isValid = true; + + if ($value === ''){ + $this->_error(self::PIVA_NULL); + $isValid = false; + } + + if(strlen($value) != 11){ + $this->_error(self::PIVA_LENGHT); + $isValid = false; + } + + /*Controllo personalizzato sulla propria partita iva */ + if ($value === '01999590688' && $checkPivaInterna){ + $this->_error(self::PIVA_INVALID_ME); + $isValid = false; + } + + if ($value === '00000000000'){ + $this->_error(self::PIVA_INVALID_ZERO); + $isValid = false; + } + + if(preg_match("/^[0-9]+\$/", $value) != 1){ + $this->_error(self::PIVA_MATCH); + $isValid = false; + } + + $s = 0; + for ($i = 0; $i <= 9; $i += 2) + $s += ord($value[$i]) - ord('0'); + + for ($i = 1; $i <= 9; $i += 2) { + $c = 2 * (ord($value[$i]) - ord('0')); + if ($c > 9) + $c = $c - 9; + $s += $c; + } + + if ((10 - $s % 10) % 10 != ord($value[10]) - ord('0')){ + $this->_error(self::PIVA_INVALID); + $isValid = false; + } + + return $isValid; + } + } diff --git a/library/App/Model/AbstractGeneric.php b/library/App/Model/AbstractGeneric.php new file mode 100644 index 0000000..04f2ff7 --- /dev/null +++ b/library/App/Model/AbstractGeneric.php @@ -0,0 +1,485 @@ +_resources[$name])) { + $class = implode('_', array( + $this->_getNamespace(), + 'Model_Resources', + ucfirst($name))); + + //Controllo l'esistenza della classe + if (!class_exists($class)) { + throw new App_Controller_Errors_WebServiceError("Errore generazione la classe risorsa '$class' potrebbe non esistere"); + } + + $this->_resources[$name] = new $class(); + } + + return $this->_resources[$name]; + } + + private function _getNamespace() + { + $ns = explode('_', get_class($this)); + return $ns[0]; + } + + /*==================================================================================================== + *======================= FUNZIONI GENERICHE PER OGNI TABELLA ========================== + *====================================================================================================*/ + + /** + * @param $resourceName + * @param $info + * @return mixed + * @throws App_Controller_Errors_WebServiceError + */ + public function insert($resourceName, $info) + { + + return $this->getResource($resourceName)->insert($info); + } + + public function update($resourceName, $id, $info) + { + + $resource = $this->getResource($resourceName); + $idString = (is_int($id)) ? " = $id" : " = '$id'"; + return $resource->update($info, $resource->getPrimaryKey() . $idString); + } + + public function updateWhere($resourceName, $condition, $info) + { + //Se passo un array di condizioni viene construita la stringa + if (is_array($condition)) { + $last_key = key(array_slice($condition, -1, 1, TRUE)); + $str = ""; + foreach ($condition as $key => $val) { + $str .= str_replace('?', $val, $key); + if ($key != $last_key) $str .= " AND "; + } + $condition = $str; + } + + $resource = $this->getResource($resourceName); + return $resource->update($info, $condition); + } + + public function delete($resourceName, $id) + { + $resource = $this->getResource($resourceName); + $idString = (is_int($id)) ? " = $id" : " = '$id'"; + return $resource->delete($resource->getPrimaryKey() . $idString); + } + + public function deleteWhere($resourceName, $condition) + { + //Se passo un array di condizioni viene construita la stringa + if (is_array($condition)) { + $last_key = key(array_slice($condition, -1, 1, TRUE)); + $str = ""; + foreach ($condition as $key => $val) { + $str .= str_replace('?', $val, $key); + if ($key != $last_key) $str .= " AND "; + } + $condition = $str; + } + + $resource = $this->getResource($resourceName); + return $resource->delete($condition); + } + + public function getById($resourceName, $id) + { + + $resource = $this->getResource($resourceName); + return $resource->getAdapter()->query('SELECT * FROM ' . $resource->getTableName() . ' WHERE ' . $resource->getPrimaryKey() . ' = ?', array($id))->fetch(); + } + + public function getLastId($resourceName) + { + + $resource = $this->getResource($resourceName); + return $resource->getAdapter()->query('SELECT id FROM ' . $resource->getTableName() . ' ORDER BY ' . $resource->getPrimaryKey() . ' DESC LIMIT 1')->fetchColumn(0); + } + + public function getCountTotal($resourceName) + { + + $resource = $this->getResource($resourceName); + return $resource->getAdapter()->query('SELECT COUNT(*) as num FROM ' . $resource->getTableName())->fetchColumn(0); + } + + // FUNZIONE GET LIST CON OVERLOAD + + public function getList() + { + $args = func_get_args(); + $functionName = (func_num_args() === 2 && is_array($args[1])) ? 'getListOptions' : 'getListDefault'; + return call_user_func_array(array(&$this, $functionName), $args); + } + + /** + * #Overload + * Funzione get list che accetta i parametri inseriti in un array in modo da non dover più rispettare l'ordine di inserimento + * + * @param $resourceName + * @param array $options + * @return Zend_Paginator + * @throws Zend_Exception + * @throws Zend_Paginator_Exception + */ + public function getListOptions($resourceName, array $options = []) + { + foreach ($options as $optionKey => $val) { + if (!in_array($optionKey, self::ALLOWED_GETLIST_ARRAY_OPTIONS)) { + throw new App_Controller_Errors_WebServiceError("'$optionKey' non e' una opzione valida per la funzione getList()"); + } + } + + return $this->getListDefault($resourceName, + $options['page'], $options['count'], $options['where'], + $options['order'], $options['selectList'], $options['joinOptions'], + $options['groupBy'], $options['fetchRow'], $options['having']); + } + + /** + * Funzione getList completa (può sostituire anche la funzione getFilteredList) + * + * @param $resourceName + * @param null $paged + * @param null $count + * @param array $where + * @param null $order + * @param string $selectList + * @param null $joinData + * @param null $groupBy + * @param bool $fetchRow + * @return Zend_Paginator + * @throws Zend_Exception + * @throws Zend_Paginator_Exception + */ + public function getListDefault($resourceName, $paged = null, $count = null, $where = array(), $order = null, $selectList = '*', $joinData = null, $groupBy = null, $fetchRow = false, $having = false) + { + $resource = $this->getResource($resourceName); + + // definizione della select list + $selectList = (!is_null($selectList)) ? $selectList : $resource->getDefaultSelectColumns(); + if (is_string($selectList)) { + $selectList = explode(',', $selectList); + } + $select = $resource->getAdapter()->select()->from($resource->getTableName(), $selectList); + + //Gestione dell'eventuale Join + $joinData = (!is_null($joinData)) ? $joinData : $resource->getDefaultJoinData(); + if (is_array($joinData)) { + $select = $this->applicateJoinData($select, $joinData); + } + + //gestione dei parametri di ricerca + if (is_array($where)) { + foreach ($where as $key => $value) { + // se trovo l'operatore '#OR' o '#ANDOR' significa che devo applicare l'or per gli elementi passati nel campo value, NB: il value deve essere una string separata da virgole + if (preg_match("/#OR/", $key)) { // #ANDOR accoda la query es: WHERE ... OR (nome_campo = ?) + $select = $this->applicateOrWhere($select, $key, $value, '#OR'); + } else if (preg_match("/#ANDOR/", $key)) { // #ANDOR compone la query es: WHERE ... AND ( campo1 = ? OR campo2 = ?) + + //salvo le condizioni presenti e resetto temporaneamente le condizini + $oldWhereConditions = $select->getPart(Zend_Db_Select::WHERE); + $select->reset(Zend_Db_Select::WHERE); + + // genero le condizioni or + $select = $this->applicateOrWhere($select, $key, $value, '#ANDOR'); + + // recupero le condizioni or generate e resetto di nuovo tutte le condizioni + $orWhereConditions = $select->getPart(Zend_Db_Select::WHERE); + $select->reset(Zend_Db_Select::WHERE); + + // reimposto le vecchie condizioni e accodo le nuove condizioni or + if ($oldWhereConditions) $select->where(implode(' ', $oldWhereConditions)); + $select->where(implode(' ', $orWhereConditions)); + + } else { + //Di default utilizzo where con la AND + $select->where($key, $value); + } + } + } + + //Gestione dell'eventuale grouBy + if ($groupBy) { + $select->group($groupBy); + } + + //gestione dell'ordinamento + $order = (!$order) ? $resource->getDefaultOrder() : $order; + if (is_string($order)) { + $tmpOrder = explode(',', $order); + foreach ($tmpOrder as &$ord) { + // il '.' serve a definire il nome della tabella altrimenti imposto quella di default della risorsa che chiama la query + if (!preg_match("/\./", $ord)) { + $ord = $resource->getTableName() . "." . trim($ord); + } + + // Se non esiste un verso di ordinamento assegno quello di default della risorsa per ogni campo ordinamento passato + if (!preg_match("/(ASC|DESC|desc|asc)$/", $ord)) { + $ord = explode(' ', trim($ord))[0] . ' ' . strtoupper($resource->getDefaultTipoOrder()); + } + } + + $order = $tmpOrder; + } + + $select->order($order); + + //Gestione dell'eventuale grouBy + if ($having && is_array($having)) { + foreach (array_keys($having) as $key) { + $select->having($key, $having[$key]); + } + } + + // Zend_Registry::get('log')->info(print_r($select->__toString(), true)); + + //Esecuzione della query di ricerca + if (null !== $paged && null !== $count) { + $adapter = new Zend_Paginator_Adapter_DbSelect($select); + $paginator = new Zend_Paginator($adapter); + $paginator->setItemCountPerPage($count)->setCurrentPageNumber((int)$paged); + + return $paginator; + } + $stmt = $resource->getAdapter()->query($select->__toString()); + + //Gestione del Fetch + if ($fetchRow) + return $stmt->fetch(); + else + return $stmt->fetchAll(); + } + + /** + * @param $resourceName + * @param $where + * @param null $order + * @param null $selectList + * @param null $joinData + * @param null $groupBy + * @return Zend_Paginator + * @throws Zend_Exception + * @throws Zend_Paginator_Exception + */ + public function getFiltered($resourceName, $where, $order = null, $selectList = null, $joinData = null, $groupBy = null) + { + return $this->getList($resourceName, null, null, $where, $order, $selectList, $joinData, $groupBy, true); + } + + /** + * Con questa funzione posso recuperare il numero di elementi di una tabella in base a parametri + * @param $resourceName + * @param $where + * + * @return Zend_Paginator + */ + public function countFiltered($resourceName, $where) + { + //Definizione della risorsa + $resource = $this->getResource($resourceName); + $select = $resource->getAdapter()->select()->from($resource->getTableName(), 'COUNT(*) as num'); + + //Applico le eventuali condizioni di ricerca + foreach ($where as $key => $value) { + $select->where($key, $value); + } + + $stmt = $resource->getAdapter()->query($select->__toString()); + + return $stmt->fetchColumn(0); + } + + /** + * Questa funzione passato il nome della colonna su cui cercare cerca il valore scelto; + * l'operatore di default è 'uguale' + * altriemnti è possibile specificarne un altro trimete il parametro @op + * + * @param $resourceName + * @param $columnName + * @param $value + * @param $fetchRow | Se impostato a true ritorna la riga come oggetto + * @param $op + * @param $joinData | per eseguire un join con altre tabelle + * + * @return mixed + */ + public function getByColumnName($resourceName, $columnName, $value, $op = "=", $fetchRow = false, $order = null, $joinData = null) + { + + $resource = $this->getResource($resourceName); + + //GESTIONE OPERATORI + switch ($op) { + case'LIKE': + $value = "%" . $value . "%"; + break; + case'LIKEPRE': + $value = "%" . $value; + break; + case'LIKEPOST': + $value = $value . "%"; + break; + default: + break; + } + + $select = $resource->getAdapter()->select()->from($resource->getTableName()); + + //Gestione dell'eventuale Join + if (is_array($joinData)) { + $select = $this->applicateJoinData($select, $joinData); + } + + $select->where($columnName . ' ' . $op . ' ?', $value); + + if ($order != null && (is_array($order) || is_string($order))) { + $select->order($order); + } + + if ($fetchRow) { + if ($order != null && (is_array($order) || is_string($order))) { + return $resource->fetchRow($resource->select()->where($columnName . ' ' . $op . ' ?', $value)->order($order)); + } else { + return $resource->fetchRow($resource->select()->where($columnName . ' ' . $op . ' ?', $value)); + } + } else { + return $resource->getAdapter()->query($select->__toString())->fetch(); + } + } + + /** + * @param $query + * @param null $params + * @param bool $fetchRow + * @return mixed + * + * @throws App_Controller_Errors_WebServiceError + */ + public function customQuery($query, $params = null, $fetchRow = false) + { + + $resource = $this->getResource('Abstract'); + $stmt = $resource->getAdapter()->query($query, $params); + + //Gestione del Fetch + if ($fetchRow) + return $stmt->fetch(); + else + return $stmt->fetchAll(); + } + + /** + * @param $select + * @param $joinData + * @return mixed + * + * @throws App_Controller_Errors_WebServiceError + */ + private function applicateJoinData($select, $joinData) + { + + if (!isset($joinData[0])) { + if (!array_key_exists(self::JOIN_TABLE_NAME, $joinData)) + throw new App_Controller_Errors_WebServiceError("Nome tabella per il join non trovato"); + + if (!array_key_exists(self::JOIN_CONDITION_NAME, $joinData)) + throw new App_Controller_Errors_WebServiceError("Nome del campo di condizione per il join non trovato"); + + $colonne = (!$joinData[self::JOIN_COLUMNS_NAME]) ? array('*') : $joinData[self::JOIN_COLUMNS_NAME]; + $joinFunctionName = (in_array($joinData[self::JOIN_TYPE], self::JOIN_FUNCTION_NAME_ALLOWED)) ? $joinData[self::JOIN_TYPE] : 'join'; + + return $select->$joinFunctionName($joinData[self::JOIN_TABLE_NAME], $joinData[self::JOIN_CONDITION_NAME], $colonne); + } else { // Gestione di più join contemporanei + foreach ($joinData as $key => $join) { + if (!array_key_exists(self::JOIN_TABLE_NAME, $join)) + throw new App_Controller_Errors_WebServiceError("Nome tabella per il join non trovato per il join index: [$key]"); + + if (!array_key_exists(self::JOIN_CONDITION_NAME, $join)) + throw new App_Controller_Errors_WebServiceError("Nome del campo di condizione per il join non trovato per il join index: [$key]"); + + $colonne = (!$join[self::JOIN_COLUMNS_NAME]) ? array('*') : $join[self::JOIN_COLUMNS_NAME]; + $joinFunctionName = (in_array($join[self::JOIN_TYPE], self::JOIN_FUNCTION_NAME_ALLOWED)) ? $join[self::JOIN_TYPE] : 'join'; + + $select->$joinFunctionName($join[self::JOIN_TABLE_NAME], $join[self::JOIN_CONDITION_NAME], $colonne); + } + return $select; + } + + } + + private function applicateOrWhere($select, string $keyNomeCampo, $valoriOr, string $op = '#OR') + { + + $valueOrDaApplicare = null; + if (is_string($valoriOr)) + $valueOrDaApplicare = explode(',', $valoriOr); + elseif (is_array($valoriOr)) + $valueOrDaApplicare = $valoriOr; + + if (!$valueOrDaApplicare) { + throw new App_Controller_Errors_WebServiceError("Valori per la condizione '$op' non validi per generare la query", App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR); + } + + $keyDaApplicare = str_replace($op, '=', $keyNomeCampo); + + if (is_array($valueOrDaApplicare) && count($valueOrDaApplicare) > 0) { + foreach ($valueOrDaApplicare as $val) { + $select->orwhere($keyDaApplicare, $val); + } + } + + return $select; + } + +} diff --git a/library/App/Model/AbstractRest.php b/library/App/Model/AbstractRest.php new file mode 100644 index 0000000..6f058aa --- /dev/null +++ b/library/App/Model/AbstractRest.php @@ -0,0 +1,80 @@ +_resources[$name])) { + $class = implode('_', array( + $this->_getNamespace(), + 'Model', + 'RestResources', + ucfirst($name))); + + //Controllo l'esistenza della classe [commentato perchè genera errore su alcune risorse] + if (!class_exists($class)) { + throw new App_Controller_Errors_WebServiceError("Errore di generazione per la classe risorsa rest '$class'. Potrebbe non esistere!"); + } + + $this->_resources[$name] = new $class(); + } + + return $this->_resources[$name]; + } + + private function _getNamespace() + { + $ns = explode('_', get_class($this)); + return $ns[0]; + } + + /** + * @param $results + * @param $page + * @param $count + * @return Zend_Paginator + * + * Questa funzione pasato un array lo converte in un oggetto Zend Paginator + */ + public function converResultsToZendPaginator($results,$page,$count){ + $dati = $this->getOffsetPaginatedArray($results['data'],$results['totalItem'],$page,$count); + $results = Zend_Paginator::factory($dati); + $results->setItemCountPerPage($count); + $results->setCurrentPageNumber($page); + return $results; + } + + /** + * @param $results + * @param $totalItems + * @param $page + * @param $count + * @return array + * Funzione che crea un offset di oggetti per far si che il paginator conosca il numero totale di elemnti presenti + */ + public function getOffsetPaginatedArray($results,$totalItems,$page,$count){ + $dati = array(); + $rangeStart = (($page * $count) - $count) + 1; + $rangeEnd = $page * $count; + $rangeX = 0; + + for($i = 0; $i < $totalItems ;$i++){ + if($i >= $rangeStart -1 && $i <= $rangeEnd -1){ + $dati[$i] = $results[$rangeX]; + $rangeX++; + }else{ + $dati[$i] = array(); + } + } + + return $dati; + } + +} diff --git a/library/App/Model/Acl/Acl.php b/library/App/Model/Acl/Acl.php new file mode 100644 index 0000000..903e31f --- /dev/null +++ b/library/App/Model/Acl/Acl.php @@ -0,0 +1,26 @@ +addRole(new Zend_Acl_Role('unregistered')) + ->add(new Zend_Acl_Resource('default')) + ->add(new Zend_Acl_Resource('auth')) + ->add(new Zend_Acl_Resource('v1')) + ->allow('unregistered', array('default', 'auth', 'v1')); + + // ACL for user + $this->addRole(new Zend_Acl_Role('user'), 'unregistered') + ->add(new Zend_Acl_Resource('user')) + ->allow('user', array('user')); + + // ACL for administrator + $this->addRole(new Zend_Acl_Role('admin'), array('user')) + ->add(new Zend_Acl_Resource('admin')) + ->add(new Zend_Acl_Resource('monitoring')) + ->allow('admin', array('admin', 'monitoring')); + } + +} diff --git a/library/App/Model/Acl/AclRestV1.php b/library/App/Model/Acl/AclRestV1.php new file mode 100644 index 0000000..fe7c653 --- /dev/null +++ b/library/App/Model/Acl/AclRestV1.php @@ -0,0 +1,29 @@ +addRole(new Zend_Acl_Role('unregistered')) + ->add(new Zend_Acl_Resource('index')) + ->add(new Zend_Acl_Resource('error')) + ->add(new Zend_Acl_Resource('services')) + ->allow('unregistered', array('index','error','services')); + + // ACL for user + $this->addRole(new Zend_Acl_Role('user'), 'unregistered') + ->add(new Zend_Acl_Resource('emails')) + ->allow('user', array('emails')); + + // ACL for administrator + $this->addRole(new Zend_Acl_Role('admin'), 'user') + ->add(new Zend_Acl_Resource('users')) + ->allow('admin', array('users')); + } +} diff --git a/library/App/Model/CurlHttpClient.php b/library/App/Model/CurlHttpClient.php new file mode 100644 index 0000000..007fcdf --- /dev/null +++ b/library/App/Model/CurlHttpClient.php @@ -0,0 +1,84 @@ +_urlNameServices = $urlName; + + $this->_httpClient = new Zend_Http_Client($urlName); + $this->_httpClient->setConfig(array( + 'adapter' => 'Zend_Http_Client_Adapter_Curl', + 'maxredirects' => 0, + 'timeout' => 60, + 'ssltransport' => 'ssl' + )); + } + + /***** METODI COMUNI DELLE CHIMATE *****/ + + public function getCall($params){ + $this->_httpClient->setMethod('GET'); + $this->_httpClient->setParameterGet($params); + return $this->executeCall(); + } + + public function postCall($dati,$formatJson = false){ + $this->_httpClient->setMethod('POST'); + if($formatJson) + $this->_httpClient->setRawData(json_encode($dati),'application/json;charset=utf-8'); + else + $this->_httpClient->setParameterPost($dati); + return $this->executeCall(); + } + + public function putCall($dati,$formatJson = false){ + $this->_httpClient->setMethod('PUT'); + if($formatJson) + $this->_httpClient->setRawData(json_encode($dati),'application/json;charset=utf-8'); + else + $this->_httpClient->setParameterPost($dati); + return $this->executeCall(); + } + + public function deleteCall($params){ + $this->_httpClient->setMethod('DELETE'); + $this->_httpClient->setParameterGet($params); + return $this->executeCall(); + } + + /***** METODI PRIVATI PER GESTIRE LE CHIAMATE *****/ + + private function executeCall(){ + $httpResponse = $this->_httpClient->request(); + $headerResponse = $httpResponse->getHeaders(); + + if(preg_match('/application\/json/',$headerResponse['Content-type'])){ + $httpResponseBody = json_decode($httpResponse->getBody(),1); + + if(json_last_error() !== JSON_ERROR_NONE){ + Zend_Registry::get('log')->info($this->_httpClient->getUri()); + Zend_Registry::get('log')->info("Errore codifica JSON:"); + Zend_Registry::get('log')->info(print_r($httpResponse,true)); + return null; + } + + if (!$httpResponseBody['status'] && !$httpResponseBody['success']) { + Zend_Registry::get('log')->info($this->_httpClient->getUri()); + Zend_Registry::get('log')->info("Errore 'httpResponse' no status or success code:"); + Zend_Registry::get('log')->info(print_r($httpResponseBody,true)); + throw new Exception($httpResponseBody['message'],$httpResponseBody['errorCode']); + } + }else{ + $httpResponseBody = $httpResponse->getBody(); + } + + return $httpResponseBody; + } + + } diff --git a/library/App/Model/FcmFirebase.php b/library/App/Model/FcmFirebase.php new file mode 100644 index 0000000..591643a --- /dev/null +++ b/library/App/Model/FcmFirebase.php @@ -0,0 +1,78 @@ +_httpClient instanceof Zend_Http_Client) { + //$this->_httpClient = $this->_httpClient; + } else { + $this->_httpClient = new Zend_Http_Client(); + $this->_httpClient->setConfig(array( + 'adapter' => 'Zend_Http_Client_Adapter_Curl', + 'maxredirects' => 0, + 'timeout' => 60, + 'ssltransport' => 'ssl' + )); + $this->_httpClient->setHeaders('Authorization', 'key=' . self::SECRET_ID); + } + } + + /***** METODI COMUNI DELLE CHIMATE *****/ + + public function postCall($dati) + { + $this->_httpClient->setMethod('POST'); + $this->_httpClient->setUri($this->getBaseUrl() . '/send'); + $this->_httpClient->setRawData(Zend_Json::encode($dati), 'application/json;charset=utf-8'); + return $this->executeCall(); + } + + /***** METODI PRIVATI PER GESTIRE LE CHIAMATE *****/ + + private function getBaseUrl() + { + return self::BASE_API_URL . "/" . self::API_VERSION; + } + + private function executeCall() + { + $httpResponse = $this->_httpClient->request(); + + /*if($this->_ipManager->allowedIp()){ + Zend_Registry::get('log')->info(print_r($httpResponse,true)); + }*/ + + // Zend_Registry::get('log')->info(print_r($this->_httpClient->getLastRequest(), true)); + + $httpResponseEncoded = json_decode($httpResponse->getBody(), 1); + + // Zend_Registry::get('log')->info(print_r($httpResponseEncoded, true)); + + if (json_last_error() !== JSON_ERROR_NONE) { + Zend_Registry::get('log')->info($this->_httpClient->getUri()); + Zend_Registry::get('log')->info("Errore codifica JSON:"); + Zend_Registry::get('log')->info(print_r($httpResponse, true)); + return null; + } + + if ($this->_httpClient->getLastResponse()->getStatus() != '200' || $httpResponseEncoded['status'] == 'error') { + Zend_Registry::get('log')->info($this->_httpClient->getUri()); + Zend_Registry::get('log')->info("Errore status response " . $this->_httpClient->getLastResponse()->getStatus()); + Zend_Registry::get('log')->info(print_r($httpResponseEncoded, true)); + throw new App_Exception_ResponseCloudException($httpResponseEncoded['message'], $httpResponseEncoded['errorCode']); + } + + return $httpResponseEncoded; + } + +} diff --git a/library/App/Model/Mail.php b/library/App/Model/Mail.php new file mode 100644 index 0000000..685589d --- /dev/null +++ b/library/App/Model/Mail.php @@ -0,0 +1,59 @@ +setType(Zend_Mime::MULTIPART_RELATED); + + $dom = new DOMDocument(null, $this->getCharset()); + @$dom->loadHTML($html); + + $images = $dom->getElementsByTagName('img'); + + for ($i = 0; $i < $images->length; $i++) { + $img = $images->item($i); + $url = $img->getAttribute('src'); + + $image_http = new Zend_Http_Client($url); + $image_http->setAdapter('Zend_Http_Client_Adapter_Curl'); + + $response = $image_http->request(); + + if ($response->getStatus() == 200) { + $image_content = $response->getBody(); + + $pathinfo = pathinfo($url); + $mime_type = $response->getHeader('Content-Type'); + + $mime = new Zend_Mime_Part($image_content); + $mime->id = $url; + $mime->location = $url; + $mime->type = $mime_type; + $mime->disposition = Zend_Mime::DISPOSITION_INLINE; + $mime->encoding = Zend_Mime::ENCODING_BASE64; + $mime->filename = $pathinfo['basename']; + + $this->addAttachment($mime); + } + } + } + } catch (ZendException $e) { + Zend_Registry::get('error_log')->setEventItem('url', $this->getRequest()->getRequestUri())->setEventItem('trace', Zend_Json::encode($e->getTrace()))->setEventItem('params', Zend_Json::encode($this->getRequest()->getParams()))->info($e->getMessage()); + } + + return parent::setBodyHtml($html, $charset, $encoding); + } +} \ No newline at end of file diff --git a/library/App/Model/Mongo/Adapter.php b/library/App/Model/Mongo/Adapter.php new file mode 100644 index 0000000..6baf87e --- /dev/null +++ b/library/App/Model/Mongo/Adapter.php @@ -0,0 +1,75 @@ +_connectionUri = "mongodb://$this->_host:$this->_port"; + + //Autenticazione mongoDB + if ($connectionData['user'] && ['password']) { + + $this->_username = $connectionData['user']; + $this->_password = $connectionData['password']; + + $this->_host = ($connectionData['host']) ? $connectionData['host'] : $this->_host; + $this->_port = ($connectionData['port']) ? $connectionData['port'] : $this->_port; + + $mongoAuth = "$this->_username:$this->_password"; + $mongoHost = "$this->_host:$this->_port"; + + //AuthMongoUri + $this->_connectionUri = "mongodb://$mongoAuth@$mongoHost"; + } + + if($connectionData['dbname']){ + $this->_dbname = $connectionData['dbname']; + } + } + + /** + * @return \MongoDB\Client + */ + public function getMongoClient(): \MongoDB\Client + { + if(!$this->_mongoClient){ + $this->_mongoClient = new MongoDB\Client($this->_connectionUri); + } + return $this->_mongoClient; + } + + /** + * @return string|null + */ + public function getDbname(): string + { + return $this->_dbname; + } + + /** + * @param string $dbname + */ + public function setDbname(string $dbname): void + { + $this->_dbname = $dbname; + Zend_Registry::set(self::MONGO_DB_ADAPTER_REG_NAME,$this); + } + + + +} diff --git a/library/App/Model/Mongo/Client.php b/library/App/Model/Mongo/Client.php new file mode 100644 index 0000000..0430191 --- /dev/null +++ b/library/App/Model/Mongo/Client.php @@ -0,0 +1,254 @@ +setDbname(Zend_Registry::get(App_Model_Mongo_Adapter::MONGO_DB_NAME)); + } + + $this->_mongoClient = $mongoAdapter->getMongoClient(); + $dbName = $mongoAdapter->getDbname(); + + $this->_db = $this->_mongoClient->selectDatabase($dbName); + } + + /** + * @param $name + * @return App_Model_MongoResource_Abstract + * @throws App_Controller_Errors_WebServiceError + */ + public function getResource($name) + { + + if (!isset($this->_resources[$name])) { + $class = implode('_', array( + 'Application', + 'Model', + 'MongoResources', + ucfirst($name))); + + //Controllo l'esistenza della classe + if (!class_exists($class)) { + throw new App_Controller_Errors_WebServiceError("Errore generazione la classe risorsa mongo '$class' potrebbe non esistere"); + } + + $this->_resources[$name] = new $class(); + } + + return $this->_resources[$name]; + } + + public function test() + { + return $this->_mongoClient->test; + } + + public function setDatabase($dbName) + { + return $this->_db = $this->_mongoClient->selectDatabase($dbName); + } + + public function listDatabases() + { + return $this->_mongoClient->listDatabases(); + } + + public function getDatabase() + { + return $this->_db; + } + + public function deleteDatabase() + { + return $this->_mongoClient->dropDatabase($this->getDatabase()); + } + + public function getCollection($resourceName) + { + $collection = $this->getResource($resourceName)->getCollectionName(); + return $this->getDatabase()->$collection; + } + + public function emptyCollection($resourceName) + { + return $this->getCollection($resourceName)->deleteMany(['id' => array('$gt'=>0)]); + } + + // FUNZIONI PER INTERROGARE IL DB + + public function getById($name, $id) + { + $optionsParams['projection'] = ['_id' => 0]; + return $this->getCollection($name)->findOne([$this->getResource($name)->getPrimaryKey() => $id], $optionsParams); + } + + public function insert($name, $data) + { + $id = uniqid(); + $this->getCollection($name)->insertOne(array_merge([$this->getResource($name)->getPrimaryKey() => $id], $data)); + return $id; + } + + public function update($name, $id, $data) + { + return $this->getCollection($name)->updateOne([$this->getResource($name)->getPrimaryKey() => $id], ['$set' => $data]); + } + + public function delete($name, $id) + { + return $this->getCollection($name)->deleteOne([$this->getResource($name)->getPrimaryKey() => $id]); + } + + public function getCountTotal($name) + { + return $this->getCollection($name)->countDocuments(); + } + + public function getCountFilteredTotal($name, $filter) + { + return $this->getCollection($name)->countDocuments($filter); + } + + public function getList($name, $paged = null, $count = null, $where = null, $order = null, $projection = null) + { + $findParams = array(); + + if (null !== $paged && null !== $count && $count > 0 && $paged > 0) { + if ($paged > 1) $findParams['skip'] = (($paged - 1) * $count); + $findParams['limit'] = $count; + } + + $order = (!$order) ? $this->getResource($name)->getDefaultOrder($order) : $order; + if ($order && is_array($order)) { + $findParams['sort'] = $order; + } + + $projection = (!$projection) ? $this->getResource($name)->getDefaultProjection($projection) : $projection; + if ($projection && is_array($projection)) { + $findParams['projection'] = $projection; + } + + if ($where === null) $where = array(); + + $cursor = $this->getCollection($name)->find($where, $findParams); + + return $cursor->toArray(); + } + + public function getListAggregation($name, $paged = null, $count = null, $where = null, $order = null, $projection = null, $addFields = null, $extraAggregation = null) + { + $aggregations = array(); + + if ($where === null) $where = array(); + if (count($where) > 0) { + array_push($aggregations, ['$match' => $where]); + } + + $order = $this->getResource($name)->getDefaultOrder($order); + if ($order && is_array($order)) { + array_push($aggregations, ['$sort' => $order]); + } + + if (null !== $paged && null !== $count && $count > 0 && $paged > 0) { + if ($paged > 1) + array_push($aggregations, ['$skip' => (($paged - 1) * $count)]); + array_push($aggregations, ['$limit' => $count]); + } + + $projection = $this->getResource($name)->getDefaultProjection($projection); + if ($projection && is_array($projection)) { + array_push($aggregations, ['$project' => $projection]); + } + + //$totElements = $this->getCountTotal($name); + $addFields = $this->getResource($name)->getDefaultAddFields(); + if ($addFields && is_array($addFields)) { + + /*if($totElements <= 0){ + unset($addFields['Data']); + }*/ + + array_push($aggregations, ['$addFields' => $addFields]); + } + + if ($extraAggregation && is_array($extraAggregation)) { + if(count($extraAggregation) > 1){ + $aggregations = array_merge($aggregations, $extraAggregation); + }else{ + array_push($aggregations, $extraAggregation); + } + } + + // Zend_Registry::get('log')->info(print_r($aggregations,true)); + + $cursor = $this->getCollection($name)->aggregate($aggregations); + + return $cursor->toArray(); + } + + public function getByColumnName($name, $columnName, $value, $op = "=", $all = false) + { + + switch ($op) { + case'=': + default: + $params = array($columnName => $value); + break; + case 'LIKE': + $params = array($columnName => ['$regex' => $value, '$options' => 'i']); + break; + } + + if ($all) { + return $this->getCollection($name)->find($params)->toArray(); + } else { + return $this->getCollection($name)->findOne($params); + } + } + + public function find($name, $params = array()) + { + return $this->getCollection($name)->find($params)->toArray(); + } + + public function aggregate($name, $aggregate) + { + return $this->getCollection($name)->aggregate($aggregate); + } + + // CRUD FUNCTION WITH OBJECTID + + public function getByObjectId($name, $id) + { + return $this->getCollection($name)->find([$this->getResource($name)->getPrimaryKey() => new MongoDB\BSON\ObjectID($id)])->toArray(); + } + + public function insertWithObjectId($name, $data) + { + unset($data['_id']); + return $this->getCollection($name)->insertOne($data); + } + + public function updateByObjectId($name, $id, $data) + { + return $this->getCollection($name)->updateOne([$this->getResource($name)->getPrimaryKey() => new MongoDB\BSON\ObjectID($id)], ['$set' => $data]); + } + + public function deleteByObjectId($name, $id) + { + return $this->getCollection($name)->deleteOne([$this->getResource($name)->getPrimaryKey() => new MongoDB\BSON\ObjectID($id)]); + } + +} diff --git a/library/App/Model/Mongo/PaginatorAdapter.php b/library/App/Model/Mongo/PaginatorAdapter.php new file mode 100644 index 0000000..49ccb80 --- /dev/null +++ b/library/App/Model/Mongo/PaginatorAdapter.php @@ -0,0 +1,41 @@ +_cursor = $cursor; + } + + /** + * Returns an cursor limited to items for a page. + * + * @param integer $offset Page offset + * @param integer $itemCountPerPage Number of items per page + * @return MongoDB\Driver\Cursor + */ + public function getItems($offset, $itemCountPerPage) + { + $cursor = $this->_cursor->skip($offset)->limit($itemCountPerPage); + return $cursor; + } + + /** + * Returns the total number of rows in the cursor. + * + * @return integer + */ + public function count() + { + return count($this->_cursor->toArray()); + } +} diff --git a/library/App/Model/MongoResource/Abstract.php b/library/App/Model/MongoResource/Abstract.php new file mode 100644 index 0000000..08bf6e8 --- /dev/null +++ b/library/App/Model/MongoResource/Abstract.php @@ -0,0 +1,115 @@ + ' + protected $_defaultTipoOrder; + + public $_defaultProjection; // array di projection mongo db + public $_defaultAddFields; // array di addFileds con el regole di mongoDb + + public function __construct() + { + if(!$this->_defaultOrder){ + throw new App_Controller_Errors_WebServiceError("'_defaultOrder' non definito per la risorsa ". get_class($this)); + } + + if(!$this->_defaultTipoOrder){ + throw new App_Controller_Errors_WebServiceError("'_defaultTipoOrder' non definito per la risorsa " . get_class($this)); + } + + parent::__construct(); + } + + //Funzione che restituisce il nome della collezione + public function getCollectionName() + { + return $this->_name; + } + + //Funzione che restituisce la chiave primaria sicura + public function getPrimaryKey() + { + if (is_array($this->_primary)) return $this->_primary[1]; + return $this->_primary; + } + + //Funzione che restituisce il campo ordinamento di default + public function getDefaultOrder($order) + { + $order = (!$order) ? $this->_defaultOrder : $order; + + if (!is_array($order)) { + $order = explode(',', $order); + } + + $sort = array(); + if (count($order) > 0) + foreach ($order as $val) { + $tmp = explode(' ', trim($val)); + $orderType = strtoupper(trim($tmp[1])); + $orderType = ($tmp[1] && ($orderType == 'ASC' || $orderType == 'DESC')) ? $orderType : 'ASC'; + $sort[trim($tmp[0])] = ($orderType == 'ASC') ? 1 : -1; + } + return $sort; + } + + //Funzione che restituisce il tipo di ordinamento di default + public function getDefaultTipoOrder() + { + if (isset($this->_defaultTipoOrder) && $this->_defaultTipoOrder) return $this->_defaultTipoOrder; + return "ASC"; + } + + public function getDefaultAddFields() + { + if($this->_defaultAddFields) return $this->_defaultAddFields; + + return null; + } + + public function getDefaultProjection($projection, $defaultProjection = null, $hideObjectId = true) + { + $defaultProjection = ($this->_defaultProjection === null) ? (($hideObjectId) ? ['_id'=>0] : []) : $this->_defaultProjection; + $projectionArray = ($hideObjectId) ? ['_id'=>0] : []; + + if (is_null($projection) || $projection === '*' || (is_array($projection) && count($projection) <= 0)) { + return $defaultProjection; + } + + if (is_string($projection)) { + $projection = explode(',', $projection); + } + + // aggiungendo '#0' tra i valori della proiezione eseguo la proiezione negativa + $projectionType = in_array('#0', $projection) ? 0 : 1; + + if (is_array($projection) && count($projection) > 0) { + foreach ($projection as $column) { + $projectionArray[$column] = $projectionType; + } + } + + return $projectionArray; + } + + public function getDefaultOrderString() + { + return $this->getDefaultOrder() . ' ' . $this->getDefaultTipoOrder(); + } + + //--------------- FUNZIONI PER LA GESTIONE DI DATABASE MULTIPLI ------------------------------------------ + + public function _setDbName($nomedb) + { + Zend_Registry::set(App_Model_Mongo_Adapter::MONGO_DB_NAME, $nomedb); + } + + public function getDbName() + { + return Zend_Registry::get(App_Model_Mongo_Adapter::MONGO_DB_NAME); + } + +} diff --git a/library/App/Model/Resource/Abstract.php b/library/App/Model/Resource/Abstract.php new file mode 100644 index 0000000..4abfe1b --- /dev/null +++ b/library/App/Model/Resource/Abstract.php @@ -0,0 +1,95 @@ +_defaultOrder){ + throw new App_Controller_Errors_WebServiceError("'_defaultOrder' non definito per la risorsa ". get_class($this)); + } + + if(!$this->_defaultTipoOrder){ + throw new App_Controller_Errors_WebServiceError("'_defaultTipoOrder' non definito per la risorsa " . get_class($this)); + } + + parent::__construct(); + } + + //Funzione che restituisce il nome della tabella + public function getTableName() + { + return $this->_name; + } + + //Funzione che restituisce la chiave primaria sicura + public function getPrimaryKey() + { + if (is_array($this->_primary)) return $this->_primary[1]; + return $this->_primary; + } + + //Funzione che restituisce il campo ordinamento di default + public function getDefaultOrder() + { + if (isset($this->_defaultOrder) && $this->_defaultOrder) return $this->_defaultOrder; + return $this->getPrimaryKey(); + } + + //Funzione che restituisce il tipo di ordinamento di default + public function getDefaultTipoOrder() + { + if (isset($this->_defaultTipoOrder) && $this->_defaultTipoOrder) return $this->_defaultTipoOrder; + return "ASC"; + } + + //Funzione che restituisce il tipo di select default + public function getDefaultSelectColumns() + { + if (isset($this->_defaultSelectColumns) && $this->_defaultSelectColumns) return $this->_defaultSelectColumns; + return "*"; + } + + //Funzione che restituisce il campo joinData di default + public function getDefaultJoinData() + { + if (isset($this->_defaultJoinData) && $this->_defaultJoinData) return $this->_defaultJoinData; + return null; + } + + public function getDefaultOrderString() + { + return $this->getDefaultOrder() . ' ' . $this->getDefaultTipoOrder(); + } + + //--------------- FUNZIONI PER LA GESTIONE DI DATABASE MULTIPLI ------------------------------------------ + + public function _setDbName($nomedb) + { + $dbparam = $this->_db->getConfig(); + $dbparam['dbname'] = $nomedb; + $this->_db = Zend_Db::factory('Pdo_Mysql', $dbparam); + } + + /** + * @return Zend_Db_Adapter_Abstract + */ + public function getDbAdapter() + { + return $this->_db; + } + + public function setDBConnection($nomeDB) + { + $this->_db->query('USE ' . $nomeDB); + } + +} diff --git a/library/App/Model/RestResource/Abstract.php b/library/App/Model/RestResource/Abstract.php new file mode 100644 index 0000000..d69cc36 --- /dev/null +++ b/library/App/Model/RestResource/Abstract.php @@ -0,0 +1,220 @@ +_risorsa || !$this->_apiUrl || !$this->_apiVersion) + throw new Exception("Non sono stati specificati tutti i parametri necessari alla risorsa (_risorsa,_apiUrl,_apiVersion)"); + + if ($this->_httpClient instanceof Zend_Http_Client) { + //$this->_httpClient = $this->_httpClient; + } else { + $this->_httpClient = new Zend_Http_Client(); + $this->_httpClient->setConfig(array( + 'adapter' => 'Zend_Http_Client_Adapter_Curl', + 'maxredirects' => 0, + 'timeout' => 60, + 'ssltransport' => 'ssl' + )); + } + } + + /***** METODI COMUNI DELLE CHIMATE *****/ + + public function postCall($dati) + { + $this->_httpClient->setMethod('POST'); + $this->_httpClient->setUri($this->getBaseUrl()); + $this->_httpClient->setRawData(json_encode($dati), 'application/json;charset=utf-8'); + return $this->executeCall(); + } + + public function updateById($id, $item) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('PUT'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_BY_ID, array('id' => $id))); + $this->_httpClient->setRawData(json_encode($item), 'application/json;charset=utf-8'); + return $this->executeCall(); + } + + public function deleteById($id) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('DELETE'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_BY_ID, array('id' => $id))); + return $this->executeCall(); + } + + public function getById($id) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('GET'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_BY_ID, array('id' => $id))); + return $this->executeCall(); + } + + public function getByColumnName($column, $value) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('GET'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_BY_COLUMNNAME, array('colname' => $column, 'value' => $value))); + return $this->executeCall(); + } + + public function getList($paged = null, $count = null, $order = null) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('GET'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_ALL_LIST)); + $this->_httpClient->setParameterGet(array('page' => $paged, 'count' => $count, 'order' => $order)); + + return $this->executeCall(); + } + + public function getFiltered($paged = null, $count = null, $order = null, $where = null) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('GET'); + + if (is_array($order)) { + $orderStr = ""; + $last_key = key(array_slice($order, -1, 1, TRUE)); + foreach ($order as $k => $val) { + $orderStr .= $val; + if ($k !== $last_key) $orderStr .= ","; + } + } + if ($orderStr) $order = $orderStr; + + $this->_httpClient->setParameterGet(array('page' => $paged, 'count' => $count, 'order' => $order)); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_FILTER, $where)); + + return $this->executeCall(); + } + + public function getByMethod($method, $params = null) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('GET'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_GENERIC, $method)); + $this->_httpClient->setParameterGet($params); + return $this->executeCall(); + } + + public function getByCustomUrl($url, $params = null) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('GET'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_CUSTOM_URL, $url)); + $this->_httpClient->setParameterGet($params); + return $this->executeCall(); + } + + public function postByCustomUrl($url, $dati = null) + { + $this->_httpClient->resetParameters(); + $this->_httpClient->setMethod('POST'); + $this->_httpClient->setUri($this->getMethodUrl(self::METHOD_CUSTOM_URL, $url)); + $this->_httpClient->setRawData(json_encode($dati), 'application/json;charset=utf-8'); + return $this->executeCall(); + } + + /***** METODI PRIVATI PER GESTIRE LE CHIAMATE *****/ + + private function getMethodUrl($method, $params = null) + { + $url = $this->getBaseUrl(!(self::METHOD_CUSTOM_URL === $method)); + switch ($method) { + case self::METHOD_BY_ID: + if (!isset($params['id'])) throw new Exception("Id Richiesto"); + $url .= "/" . $params['id']; + break; + case self::METHOD_ALL_LIST: + break; + case self::METHOD_FILTER: + $url .= "/method/filtra"; + $this->_httpClient->setParameterGet($params); + break; + case self::METHOD_GENERIC: + if (!$params) throw new Exception("Nome del metodo non valido"); + $url .= "/method/$params"; + break; + case self::METHOD_BY_COLUMNNAME: + if (!isset($params['colname'])) throw new Exception("Nome Colonna Richiesto"); + if (!isset($params['value'])) throw new Exception("Valore Richiesto"); + $url .= "/method/bycolumn/colname/" . $params['colname'] . "/val/" . $params['value']; + break; + case self::METHOD_CUSTOM_URL: + if (!$params) throw new Exception("Nome dell'url non valido"); + $url .= "$params"; + break; + default: + break; + } + return $url; + } + + private function getBaseUrl($withResouces = true) + { + if ($withResouces) { + return $this->_apiUrl . "/" . $this->_apiVersion . "/" . strtolower($this->_risorsa); + } else { + return $this->_apiUrl . "/" . $this->_apiVersion; + } + } + + private function executeCall() + { + + if ($this->_secretId) { + $this->_httpClient->setHeaders('Authorization', $this->_secretId); + } + + if ($this->_testHeader) { + $this->_httpClient->setHeaders('X-As-Dev-On', '1'); + } + + $httpResponse = $this->_httpClient->request(); + + //Zend_Registry::get('log')->info(print_r($this->_httpClient->getLastRequest(),true)); + //Zend_Registry::get('log')->info(print_r($httpResponse,true)); + + $httpResponseEncoded = json_decode($httpResponse->getBody(), 1); + + if (json_last_error() !== JSON_ERROR_NONE) { + Zend_Registry::get('log')->info($this->_httpClient->getUri()); + Zend_Registry::get('log')->info("Errore codifica JSON:"); + Zend_Registry::get('log')->info(print_r($httpResponse, true)); + return null; + } + + if ($this->_httpClient->getLastResponse()->getStatus() != '200') { + Zend_Registry::get('log')->info($this->_httpClient->getUri()); + Zend_Registry::get('log')->info("Errore status response " . $this->_httpClient->getLastResponse()->getStatus()); + Zend_Registry::get('log')->info(print_r($httpResponseEncoded, true)); + throw new App_Exception_ResponseCloudException($httpResponseEncoded['message'], $httpResponseEncoded['errorCode']); + } + + return $httpResponseEncoded; + } + +} diff --git a/library/App/PayPal/PayPalApi.php b/library/App/PayPal/PayPalApi.php new file mode 100644 index 0000000..d69394d --- /dev/null +++ b/library/App/PayPal/PayPalApi.php @@ -0,0 +1,147 @@ +_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + + //La modalita Test o Sandbox viene impostata dal parametro delle configurazioni e solo se la chiamata avviene da un IP abilitato + $this->_apiPayPalTestAccount = false; + if($this->_ipManager->allowedDevMode()){ + $this->_apiPayPalTestAccount = ($this->_configs->get('interrutore_paypal_test') == 'on') ? 1:0; + } + + if($this->_apiPayPalTestAccount){ + $this->_apiMode = "sandbox"; + $this->_logLevel = "DEBUG"; + $this->_clientId = self::TEST_CLIENT_ID; + $this->_clientSecret = self::TEST_CLIENT_SECRET; + } + + //Controlla se il log è abilitato che esista anche il file su cui salvare altrimenti lo disabilita + if($this->_logEnabled) + $this->_logEnabled = file_exists($this->_logFileName); + + $this->_apiContext = $this->setApiContext($this->_clientId, $this->_clientSecret); + } + + public function getPayPalContext() + { + return $this->_apiContext; + } + + public function getWebProfile(){ + + $webProfile = new WebProfile(); + + try { + $webProfileList = $webProfile->get_list($this->_apiContext); + } catch (Exception $ex) { + return null; + } + + //Controlla se gia esiste un web profile con il nome assegnato + if($webProfileList){ + foreach($webProfileList as $profile){ + if($profile->name == self::WEBPROFILE_NAME){ + $webProfile = $profile; + return $webProfile; + } + } + } + + //Altrimenti lo creo con questi parametri specifici + $webProfile->setName(self::WEBPROFILE_NAME); + $webProfile->setTemporary(false); + + $presentation = new Presentation(); + $presentation->setLogoImage(self::LOGO_URL_IMAGE); + $webProfile->setPresentation($presentation); + + $inputFields = new InputFields(); + $inputFields->setNoShipping(1); + $webProfile->setInputFields($inputFields); + + try { + $webProfile = $webProfile->create($this->_apiContext); + } catch (Exception $ex) { + return null; + } + + return $webProfile; + + } + + public function deleteWebProfile(){ + + $webProfile = $this->getWebProfile(); + //Elimina questo web profile + try { + $webProfileRes = $webProfile->delete($this->_apiContext); + } catch (Exception $ex) { + exit(1); + } + + ResultPrinter::printResult("", "WebProfile", "", $webProfile, $webProfileRes); + + return null; + } + + private function setApiContext($clientId, $clientSecret) + { + + $apiContext = new ApiContext( + new OAuthTokenCredential( + $clientId, + $clientSecret + ) + ); + + $apiContext->setConfig( + array( + 'mode' => $this->_apiMode, + 'log.LogEnabled' => $this->_logEnabled, + 'log.FileName' => $this->_logFileName, + 'log.LogLevel' => $this->_logLevel, + 'cache.enabled' => true + ) + ); + + return $apiContext; + } + +} diff --git a/library/App/Service/Auth.php b/library/App/Service/Auth.php new file mode 100644 index 0000000..ad4d231 --- /dev/null +++ b/library/App/Service/Auth.php @@ -0,0 +1,74 @@ +_configs = new App_Service_ConfigManager(); + $this->_acl = new App_Model_Acl_Acl(); + } + + public function authenticate($credentials) + { + $adapter = $this->getAuthAdapter($credentials); + $auth = $this->getAuth(); + $result = $auth->authenticate($adapter); + + if (!$result->isValid()) { + return false; + } + + $user = $adapter->getResultRowObject(); + Zend_Registry::set("username",$user->username); + Zend_Registry::set("role",$user->role); + + $auth->getStorage()->write($user); + + return true; + } + + public function getAuth() + { + if (null === $this->_auth) { + $this->_auth = Zend_Auth::getInstance(); + } + return $this->_auth; + } + + public function getIdentity() + { + $auth = $this->getAuth(); + if ($auth->hasIdentity()) { + return $auth->getIdentity(); + } + return false; + } + + public function checkPermission($resourceName){ + return $this->_acl->isAllowed($this->getIdentity()->role, $resourceName); + } + + public function clear() + { + $this->getAuth()->clearIdentity(); + } + + public function getAuthAdapter($values) + { + $salt = Zend_Registry::get('ENVIROMENTS')->get('password_salt'); + $authAdapter = new Zend_Auth_Adapter_DbTable( + Zend_Db_Table_Abstract::getDefaultAdapter(), + 'users', + 'username', + 'password', + "MD5(CONCAT('$salt',?))" + ); + $authAdapter->setIdentity($values['username']); + $authAdapter->setCredential($values['password']); + return $authAdapter; + } +} diff --git a/library/App/Service/CodificaPiva.php b/library/App/Service/CodificaPiva.php new file mode 100644 index 0000000..b8405f9 --- /dev/null +++ b/library/App/Service/CodificaPiva.php @@ -0,0 +1,81 @@ +".intval($packs[$i]) . "-$charpos-17=$x"; + $strDecript .= chr(intval($packs[$i]) - $charpos - 17); + }else{ + //echo "
".intval($packs[$i]) . "-$charpos-177=$x"; + $strDecript .= chr(intval($packs[$i]) - $charpos - 177); + } + } + + return $strDecript; + } + +} diff --git a/library/App/Service/ConfigManager.php b/library/App/Service/ConfigManager.php new file mode 100644 index 0000000..657a417 --- /dev/null +++ b/library/App/Service/ConfigManager.php @@ -0,0 +1,87 @@ +_config = Zend_Registry::get('config'); + $this->_writer = new Zend_Config_Writer_Ini(array('config'=> $this->_config,'filename' => APPLICATION_PATH.'/configs/config.ini')); + $this->_ipManager = new App_Service_IpManager(); + } + + /** + * Aggiorna l'oggetto config ricaricando tutte le impostazioni memorizzate + * nel file config.ini + */ + public function update() + { + $this->_config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/config.ini', null, array('skipExtends'=> true, + 'allowModifications' => true)); + Zend_Registry::set('config',$this->_config); + } + + /** + * Inserisci nel file di configurazione il parametro passato memorizzandolo + * + * @param string $param + * @param string $value + * @return void + */ + public function insert($param,$value) + { + if($param==null||$param==''){ + return; + } + $this->_config->__set($param, $value); + $this->write(); + } + + public function set($key,$value){ + $this->_config->__set($key, $value); + } + + /** + * Restituisce il valore del parametro richiesto + * + * @param string $name + * @return string + */ + public function get($name){ + return $this->_config->get($name); + } + + /** + * Elimina il parametro richiesto se esistente + * + * @param string $param + * @return boolean + */ + public function delete($param){ + if($this->_config->get($param)){ + $this->_config->__unset($param); + $this->write(); + return TRUE; + }else{ + return FALSE; + } + } + + public function write(){ + $this->_writer->config=$this->_config; + $this->_writer->write(); + $this->update(); + } + + public function getAllParam(){ + $data=array(); + foreach ($this->_config as $key => $value) { + $data[$key]=$value; + } + return $data; + } + +} diff --git a/library/App/Service/Cpanel.php b/library/App/Service/Cpanel.php new file mode 100644 index 0000000..455fce1 --- /dev/null +++ b/library/App/Service/Cpanel.php @@ -0,0 +1,157 @@ + /dev/null'; + + public function __construct() + { + $this->_configs = Zend_Registry::get('config'); + $this->_enviroments = Zend_Registry::get('ENVIROMENTS'); + + $this->_cronCommandBase = str_replace('%baseUrlSite%', $this->_enviroments->get('baseUrlSite'), $this->_cronCommandBase); + + $this->_CPANEL_HOST = $this->_enviroments->get('cpanel')->get('host'); + $this->_CPANEL_USERNAME = $this->_enviroments->get('cpanel')->get('username'); + $this->_CPANEL_PASSWORD = $this->_enviroments->get('cpanel')->get('password'); + $this->_RESTUSERNAME = $this->_enviroments->get('cpanel')->get('restusername'); + + $this->_cpanelApi = new App_Service_CpanelApi($this->_CPANEL_USERNAME, $this->_CPANEL_PASSWORD, $this->_CPANEL_HOST); + } + + public function listCron() + { + + try { + + $res = $this->_cpanelApi->api2->Cron->listcron(); + + if ($res->errors) { + if (is_array($res->errors)) + return implode(';', $res->errors); + else + return "ERRORE: richiesta elenco funzioni cron --- " . $res->errors; + } + + return $res; + + } catch (Exception $e) { + return $e; + } + + } + + public function attivaFunzioneCron() + { + + try { + + $res = $this->_cpanelApi->api2->Cron->add_line(array( + 'command' => $this->_cronCommandBase, + 'day' => '*', + 'hour' => '*', + 'minute' => '*/2', // Una volta ogni due minuti + 'month' => '*', + 'weekday' => '*', + )); + + if ($res->errors) { + if (is_array($res->errors)) + return implode(';', $res->errors); + else + return "ERRORE: attivazione cron sync ordini --- " . $res->errors; + } + + $data = $res->cpanelresult->data[0]; + + if($data->status == 1){ + return ['stato'=>true,'message'=>'Sincronizzazione attivata']; + }elseif($data->status === 0 && $data->statusmsg == "This cron job already exists.") { + return ['stato'=>true,'message'=>'Sincronizzazione già attiva']; + }else{ + return ['stato'=>false,'message'=>'Errore durante l\'operazione di sincronizzazione']; + } + + } catch (Exception $e) { + return $e; + } + + } + + public function disattivaFunzioneCron() + { + + try { + + $res = null; + $cronList = $this->listCron(); + + $x = 0; + foreach ($cronList->cpanelresult->data as $cron) { + $x++; + if ($cron->command === $this->_cronCommandBase) { + $res = $this->removeCron($x); + } + } + + $data = $res->cpanelresult->data[0]; + + if($data !== null && $data->status === 1){ + return ['stato'=>false,'message'=>'Sincronizzazione disattivata']; + }else{ + return ['stato'=>false,'message'=>'Sincronizzazione non attiva']; + } + + } catch (Exception $e) { + return $e; + } + + } + + public function removeCron($lineKey) + { + + try { + + $res = $this->_cpanelApi->api2->Cron->remove_line(array('line' => $lineKey)); + + if ($res->errors) { + if (is_array($res->errors)) + return implode(';', $res->errors); + else + return "ERRORE: rimozione funzione cron --- " . $res->errors; + } + + return $res; + + } catch (Exception $e) { + return $e; + } + + } + + public function checkFunzioneCronIsActive() + { + try { + $listCron = $this->listCron(); + foreach ($listCron->cpanelresult->data as $cron){ + if($cron->command === $this->_cronCommandBase) return true; + } + return false; + } catch (Exception $e) { + return $e; + } + } + + +} diff --git a/library/App/Service/CpanelApi.php b/library/App/Service/CpanelApi.php new file mode 100644 index 0000000..26ee283 --- /dev/null +++ b/library/App/Service/CpanelApi.php @@ -0,0 +1,263 @@ +user = $user; + $this->pass = $pass; + $this->server = $server; + if ($this->secret) { + $this->secret = $secret; + $this->set2Fa(); + } + } + + /** + * Include the ot class so we can generate a valid token for 2FA + */ + protected function set2Fa() + { + require 'otphp/lib/otphp.php'; + $totp = new \OTPHP\TOTP($this->secret); + $this->token = $totp->now(); + } + + public function __get($name) + { + switch (strtolower($name)) { + case 'get': + $this->httpMethod = 'GET'; + break; + case 'post': + $this->httpMethod = 'POST'; + break; + case 'api2': + $this->setApi('api2'); + break; + case 'uapi': + $this->setApi('uapi'); + break; + default: + $this->scope = $name; + } + return $this; + } + + /** + * Set the api to use for connections. + * @param $api + * @return $this + * @throws Exception + */ + protected function setApi($api) + { + $this->api = $api; + $this->setMethod(); + return $this; + } + + /** + * Function to set the method used to communicate with the chosen api. + * @return $this + * @throws Exception + */ + protected function setMethod() + { + switch ($this->api) { + case 'uapi': + $this->method = '/execute/'; + break; + case 'api2': + $this->method = '/json-api/cpanel/'; + break; + default: + throw new Exception('$this->api is not set or is incorrectly set. The only available options are \'uapi\' or \'api2\''); + } + return $this; + } + + /** + * Magic __toSting() method, allows us to return the result as raw json + * @return mixed + */ + public function __toString() + { + return $this->json; + } + + /** + * Magic __call method, will translate all function calls to object to API requests + * @param $name - name of the function + * @param $arguments - an array of arguments + * @return mixed + * @throws Exception + */ + public function __call($name, $arguments) + { + if (count($arguments) < 1 || !is_array($arguments[0])) + $arguments[0] = []; + $this->json = $this->APIcall($name, $arguments[0]); + return json_decode($this->json); + } + + /** + * @param $name + * @param $arguments + * @return bool|mixed + * @throws Exception + */ + protected function APIcall($name, $arguments) + { + $this->auth = base64_encode($this->user . ":" . $this->pass); + $this->type = $this->ssl == 1 ? "https://" : "http://"; + $this->requestUrl = $this->type . $this->server . ':' . $this->port . $this->method; + switch ($this->api) { + case 'uapi': + $this->requestUrl .= ($this->scope != '' ? $this->scope . "/" : '') . $name . '?'; + break; + case 'api2': + if ($this->scope == '') { + throw new Exception('Scope must be set.'); + } + $this->requestUrl .= '?cpanel_jsonapi_user=' . $this->user . '&cpanel_jsonapi_apiversion=2&cpanel_jsonapi_module=' . $this->scope . '&cpanel_jsonapi_func=' . $name . '&'; + break; + default: + throw new Exception('$this->api is not set or is incorrectly set. The only available options are \'uapi\' or \'api2\''); + } + if($this->httpMethod == 'GET') { + $this->requestUrl .= http_build_query($arguments); + } + if($this->httpMethod == 'POST'){ + $this->postData = $arguments; + } + + return $this->curl_request($this->requestUrl); + } + + /** + * @param $url + * @return bool|mixed + */ + protected function curl_request($url) + { + $httpHeaders = array("Authorization: Basic " . $this->auth); + //If we have a token then send that with the request for 2FA. + if ($this->token) { + $httpHeaders[] = "X-CPANEL-OTP: " . $this->token; + } + $ch = curl_init(); + if($this->httpMethod == 'POST'){ + $httpHeaders[] = "Content-type: multipart/form-data"; + curl_setopt($ch,CURLOPT_POSTFIELDS, $this->postData); + } + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders); + curl_setopt($ch, CURLOPT_TIMEOUT, 100020); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + + $content = $this->curl_exec_follow($ch, $this->maxredirect); + $this->eno = curl_errno($ch); + $this->emes = curl_error($ch); + + curl_close($ch); + + return $content; + } + + /** + * @param $ch + * @param null $maxredirect + * @return bool|mixed + */ + protected function curl_exec_follow($ch, &$maxredirect = null) + { + // we emulate a browser here since some websites detect + // us as a bot and don't let us do our job + $user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)" . + " Gecko/20041107 Firefox/1.0"; + curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); + + $mr = $maxredirect === null ? 5 : intval($maxredirect); + + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0); + curl_setopt($ch, CURLOPT_MAXREDIRS, $mr); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + return curl_exec($ch); + } + + /** + * Function to get the last request made + * @return mixed + */ + public function getLastRequest() + { + return $this->requestUrl; + } + + /** + * Function to return the error if there was one, or FALSE if not. + * @return array|bool + */ + public function getError() + { + if (!empty($this->eno)) { + return ['no' => $this->eno, 'message' => $this->emes]; + } + return FALSE; + } + } \ No newline at end of file diff --git a/library/App/Service/Emails.php b/library/App/Service/Emails.php new file mode 100644 index 0000000..a9523db --- /dev/null +++ b/library/App/Service/Emails.php @@ -0,0 +1,80 @@ +_configs = Zend_Registry::get('config'); + $this->_ipManager = new App_Service_IpManager(); + $this->_genericModel = new Application_Model_Generic(); + } + + public function sendEmailByTemplateHtml($email, $oggetto, $templateName, $params = array(), $nomeMittente = null, $filename = null) + { + $mail = new App_Model_Mail('UTF-8'); + + $templateFileName = self::EMAIL_TEMPLATE_PATH.$templateName; + + if(!file_exists($templateFileName)){ + throw new Exception("Email template non trovato impossibile inviare l'email"); + } + + $testoEmail = file_get_contents($templateFileName); + + $params = $this->preparaDatiPerSostituzione($params); + + if (count($params) > 0) { + foreach ($params as $key => $val) { + $oggetto = str_replace($key, $val, $oggetto); + $testoEmail = str_replace($key, $val, $testoEmail); + } + } + + if ($filename != null) { + if (file_exists($filename)) + $mail->createAttachment(file_get_contents($filename), 'application/pdf', Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $filename); + } + + $nomeMittente = ($nomeMittente) ? $nomeMittente : $this->_configs->get('email_mittente_nome'); + + $mail->setFrom('noreply@fatturab2b.net', $nomeMittente)->setSubject($oggetto); + + $mail->setBodyHtml($testoEmail); + + //Inserisco il o i destinatari/o + if (is_string($email)) { + $mail->addTo($email, $email); + } else if (is_array($email)) { + foreach ($email as $val) { + $mail->addTo($val); + } + } + + $mail->send(); + } + + /** + * Questa funzione presi i parametri passati nell array ne aggiunge i simboli + * percentuale per farli riconoscere popi nel testo e sostituirli + * @param $dati + * @return array + */ + private function preparaDatiPerSostituzione($dati){ + $newParams = array(); + + foreach($dati as $key => $val){ + $newParams['%'.$key.'%'] = $val; + } + + return $newParams; + } + +} diff --git a/library/App/Service/ExternalApiService.php b/library/App/Service/ExternalApiService.php new file mode 100644 index 0000000..ee46a4b --- /dev/null +++ b/library/App/Service/ExternalApiService.php @@ -0,0 +1,119 @@ +_configs = Zend_Registry::get('config'); + $this->_ipManager = new App_Service_IpManager(); + $this->_genericModel = new Application_Model_Generic(); + + $this->_httpClient = new Zend_Http_Client(); + $this->_httpClient->setConfig(array( + 'adapter' => 'Zend_Http_Client_Adapter_Curl', + 'maxredirects' => 0, + 'timeout' => 60, + 'ssltransport' => 'ssl' + )); + + } + + public function setConnectionParams($codiceAttivita, $tipoApi) + { + + //Recupero se presenti i dati per la comunicazione con un eventuale endpoint + $api = $this->_genericModel->getFiltered('ExternalApi', array('CodiceAttivita = ?' => $codiceAttivita, 'TipoApi = ?' => $tipoApi, 'Attivo = ?' => 1)); + + if (!$api) { + $this->_authToken = null; + $this->_endPoint = null; + } else { + $this->_authToken = $api['AuthToken']; + $this->_endPoint = $api['Endpoint']; + } + + } + + public function checkConnectionParams() + { + if (!$this->_authToken || !$this->_endPoint) { + throw new App_Controller_Errors_WebServiceError('Parametri per la connessione non impostati correttamente', App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR); + } + } + + public function postCall($dati = array()) + { + + $this->checkConnectionParams(); + + $this->_httpClient->setMethod('POST'); + $this->_httpClient->setUri($this->_endPoint); + $this->_httpClient->setRawData(json_encode($dati), 'application/json;charset=utf-8'); + + return $this->executeCall(); + } + + public function putCall($dati = array()) + { + + $this->checkConnectionParams(); + + $this->_httpClient->setMethod('PUT'); + $this->_httpClient->setUri($this->_endPoint); + $this->_httpClient->setRawData(json_encode($dati), 'application/json;charset=utf-8'); + + return $this->executeCall(); + } + + private function executeCall() + { + + $this->_httpClient->setHeaders('Authorization', 'Secret ' . $this->_authToken); + + if ($this->_ipManager->allowedDevMode()) { + $this->_httpClient->setHeaders('X-As-Dev-On', '1'); + $this->_httpClient->setHeaders('X-As-Dev-Pw', 'JackDev2590'); + } + + $httpResponse = $this->_httpClient->request(); + $httpResponse->getStatus(); + + $headerResponse = $httpResponse->getHeaders(); + + // Zend_Registry::get('log')->info(print_r($this->_httpClient->getLastRequest(),true)); + // Zend_Registry::get('log')->info(print_r($this->_httpClient->getLastResponse(),true)); + + // Zend_Registry::get('log')->info(print_r($headerResponse,true)); + // Zend_Registry::get('log')->info(print_r($httpResponse->getStatus(),true)); + + if (preg_match('/application\/json|json/', $headerResponse['Content-type'])) { + $httpResponseBody = json_decode($httpResponse->getBody(), 1); + + if (json_last_error() !== JSON_ERROR_NONE) { + throw new App_Controller_Errors_WebServiceError("Errore di decodifica json per la chiamata: " . $this->_httpClient->getUri(), App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR); + } + + if ($httpResponse->getStatus() >= 400 && $httpResponse->getStatus() < 500) { + throw new App_Controller_Errors_WebServiceError($httpResponseBody['message'], App_Controller_Errors_WebServiceError::WEBSERVICE_GENERIC_ERROR); + } + + } else { + $httpResponseBody = $httpResponse->getBody(); + } + + return $httpResponseBody; + } + +} diff --git a/library/App/Service/FatturaElettronica.php b/library/App/Service/FatturaElettronica.php new file mode 100644 index 0000000..7808183 --- /dev/null +++ b/library/App/Service/FatturaElettronica.php @@ -0,0 +1,345 @@ + array('Codice' => 'TD01', 'Descrizione' => 'Fattura'), + 'TD02' => array('Codice' => 'TD02', 'Descrizione' => 'Acconto/Anticipo su fattura'), + 'TD03' => array('Codice' => 'TD03', 'Descrizione' => 'Acconto/Anticipo su parcella'), + 'TD04' => array('Codice' => 'TD04', 'Descrizione' => 'Nota di credito'), + 'TD05' => array('Codice' => 'TD05', 'Descrizione' => 'Nota di debito'), + 'TD06' => array('Codice' => 'TD06', 'Descrizione' => 'Parcella') + ); + + public function __construct() + { + $this->_ipManager = new App_Service_IpManager(); + } + + public function getCredenzialiUtente() + { + return $this->_credenzialiUtente; + } + + public function setCredenzialiUtente($credenzialiUtente) + { + if (!isset($credenzialiUtente['CustomerCode'])) throw new Exception("Errore campo 'customerCode' non impostato nelle credenziali"); + if (!isset($credenzialiUtente['Password'])) throw new Exception("Errore campo 'Password' non impostato nelle credenziali"); + + $this->_credenzialiUtente = $credenzialiUtente; + } + + /************************ FUNZIONI FATTURE INVIATE ********************************************************/ + + public function verificaStatoServizioFeInviateServer() + { + + $this->setCredenzialiUtente(array( + 'CustomerCode' => '', + 'Password' => '' + )); + $this->_soapClient = new App_Service_SoapFeInviate($this->getCredenzialiUtente()); + + $result = $this->_soapClient->ContattoHub(); + + //Controllo eventuali errori sulla rispsota + if ($result->ContattoHubResult != '0') { + return false; + } else { + return true; + } + + } + + public function getFatturaInviata($idSdi){ + + $this->_soapClient = new App_Service_SoapFeInviate($this->getCredenzialiUtente()); + + $params = array( + 'paramFilter' => array( + 'IdSdi' => $idSdi, + 'DataCustomerServicesConsumption' => false, + 'DataFullInvoices' => true + )); + + $result = $this->_soapClient->GetElectronicInvoices($this->_soapClient->mergeParamsCredenziali($params)); + + //Controllo eventuali errori sulla rispsota + if ($result->GetElectronicInvoicesResult->ResultCode != 'Success') { + $this->SoapErrorResultHandler($result->GetElectronicInvoicesResult); + } + + if (is_object($result->GetElectronicInvoicesResult->ElectronicInvoices->ElectronicInvoice)) { + $data = array(0 => (array)$result->GetElectronicInvoicesResult->ElectronicInvoices->ElectronicInvoice); + } elseif (is_array($result->GetElectronicInvoicesResult->ElectronicInvoices->ElectronicInvoice)) { + $data = $result->GetElectronicInvoicesResult->ElectronicInvoices->ElectronicInvoice; + } else { + $data = array(); + } + + // Zend_Registry::get('log')->info(print_r($this->_soapClient->getLastRequest(),true)); + // Zend_Registry::get('log')->info(print_r($data,true)); + + return $data; + } + + public function getEsitoFatturaInviata($idEsito, $tipoMessaggiOEsito, $getXmlData = false) + { + $this->_soapClient = new App_Service_SoapFeInviate($this->getCredenzialiUtente()); + + $params = array( + 'paramFileOutcome' => array( + 'IdOutcome' => $idEsito + )); + + $result = $this->_soapClient->GetFileElectronicInvoiceOutcome($this->_soapClient->mergeParamsCredenziali($params)); + + //Controllo eventuali errori sulla rispsota + if ($result->GetFileElectronicInvoiceOutcomeResult->ResultCode != 'Success') { + $this->SoapErrorResultHandler($result->GetFileElectronicInvoiceOutcomeResult); + } + + $xmlCode = $result->GetFileElectronicInvoiceOutcomeResult->File; + + $responseData = array( + 'xmlFile' => $this->addXslTagToXml($xmlCode, $this->getXslByTipoMessaggioEsito($tipoMessaggiOEsito)), + 'filename' => $result->GetFileElectronicInvoiceOutcomeResult->Filename + ); + + if ($getXmlData) { + $responseData['xmlData'] = simplexml_load_string($xmlCode); + } + + return $responseData; + } + + /** + * @param $idFatt - Id della fattura da recuparare dai server della 2C + * @param bool $xmlData - true: restiuisce i dati in formato xml della fattura elettronica | false: non li restituisce (DEFAULT: false) + * @param bool $onlyXmlData - restituisce solo i dati xml della fattura elettronica (DEFAULT: false) + * @param bool $fileFirmato - true: resituisce il file firmato .p7m (DEFAULT: false) + * @param bool $getXslProcessed - restituisce l'html della fattura elettronica elaborato con il foglio di stile (DEFAULT: false) + * @param string $xslFile - Indica il file del foglio di stile da utilizzare (DEFAULT: "fatturaordinaria_v1_2_1.xsl") + * @return array|bool|SimpleXMLElement + * @throws App_Controller_Errors_WebServiceError + * @throws Zend_Exception + */ + public function getFatturaInviataXml($idFatt, $xmlData = false, $onlyXmlData = false, $fileFirmato = false, $getXslProcessed = false, $xslFile = "fatturaordinaria_v1_2_1.xsl") + { + $this->_soapClient = new App_Service_SoapFeInviate($this->getCredenzialiUtente()); + + $params = array( + 'paramFileInvoice' => array( + 'IdInvoice' => $idFatt, + 'ExtractionP7M' => !$fileFirmato + )); + + $result = $this->_soapClient->GetFileElectronicInvoice($this->_soapClient->mergeParamsCredenziali($params)); + + Zend_Registry::get('log')->info(print_r($result,true)); + + //Controllo eventuali errori sulla rispsota + if ($result->GetFileElectronicInvoiceResult->ResultCode != 'Success') { + $this->SoapErrorResultHandler($result->GetFileElectronicInvoiceResult); + } + + if ($xmlData && !$fileFirmato) { + $xmlData = simplexml_load_string($result->GetFileElectronicInvoiceResult->File); + + //Elimino eventuali allegati dall'xml data per non appesantire la chiamata + foreach ($xmlData->FatturaElettronicaBody as $body) { + if (isset($body->Allegati)) { + foreach ($body->Allegati as $allegato) { + unset($allegato->Attachment); + } + } + } + } + + if (!$fileFirmato) + $filename = $xmlData->FatturaElettronicaHeader->DatiTrasmissione->IdTrasmittente->IdPaese . $xmlData->FatturaElettronicaHeader->DatiTrasmissione->IdTrasmittente->IdCodice . '_' . $xmlData->FatturaElettronicaHeader->DatiTrasmissione->ProgressivoInvio . ".xml"; + else + $filename = $result->GetFileElectronicInvoiceResult->Filename; + + if ($onlyXmlData && !$getXslProcessed) { + return $xmlData; + } + + if ($getXslProcessed) { + $tipoFattura = self::TipiDocumentoFatturaElettronica[$xmlData->FatturaElettronicaBody->DatiGenerali->DatiGeneraliDocumento->TipoDocumento . ""]; + $dataDocumento = implode('/', array_reverse(explode("-", $xmlData->FatturaElettronicaBody->DatiGenerali->DatiGeneraliDocumento->Data . ""))); + $nomeFileFattura = $tipoFattura['Descrizione'] . " " . $xmlData->FatturaElettronicaBody->DatiGenerali->DatiGeneraliDocumento->Numero . " del " . $dataDocumento; + return array( + 'htmlProcessed' => $this->getXslCodeProcessed($result->GetFileElectronicInvoiceResult->File, $xslFile), + 'Filename' => $nomeFileFattura + ); + } + + //Se il file è firmato (p7m) allora non elaboro il file xml per aggiungere il foglio di stile altrimenti si + $elaboraXml = !preg_match('/.p7m/', $filename); + if ($elaboraXml) { + $file = $this->addXslTagToXml($result->GetFileElectronicInvoiceResult->File, $xslFile); + $allegati = $this->estraiAllegatoDaXml($result->GetFileElectronicInvoiceResult->File); + } else { + $file = $result->GetFileElectronicInvoiceResult->File; + $allegati = array(); + } + + return array( + 'File' => $file, + 'Filename' => $filename, + 'XmlData' => $xmlData, + 'Allegati' => $allegati, + ); + + } + + /**********************************************************/ + + private function getXslByTipoMessaggioEsito($tipo) + { + switch ($tipo) { + case'MC': + case'MT': + case'NS': + case'RC': + return $tipo . "_v1_1.xsl"; + break; + case'DT': + return $tipo . "_v1_0.xsl"; + break; + default: + return "NE_v1_0.xsl"; + break; + } + } + + private function addXslTagToXml($xmlCode, $xslFileName) + { + $doc = new DOMDocument(); + $doc->loadXML($xmlCode); + + if ($doc->firstChild->nodeName == 'xml-stylesheet') { + $doc->firstChild->nodeValue = 'type="text/xsl" href="' . $xslFileName . '"'; + return $doc->saveXML(); + } + + $newDoc = new DOMDocument('1.0', 'UTF-8'); + $newDoc->preserveWhiteSpace = true; + $newDoc->formatOutput = true; + + $newDoc->createElement("xml"); + + $styleSheet = $newDoc->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="' . $xslFileName . '"'); + $newDoc->appendChild($styleSheet); + $newNode = $newDoc->importNode($doc->firstChild, true); + $newDoc->appendChild($newNode); + + return $newDoc->saveXML(); + } + + private function estraiAllegatoDaXml($xmlCode) + { + $doc = new DOMDocument(); + $doc->loadXML($xmlCode); + + $allegati = $doc->getElementsByTagName('Allegati'); + + $allegatiTmp = array(); + foreach ($allegati as $allegato) { + array_push($allegatiTmp, array( + 'NomeFile' => $allegato->getElementsByTagName('NomeAttachment')[0]->nodeValue, + 'FormatoAttachment' => $allegato->getElementsByTagName('FormatoAttachment')[0]->nodeValue, + 'File' => $allegato->getElementsByTagName('Attachment')[0]->nodeValue + )); + } + + return $allegatiTmp; + } + + private function SoapErrorResultHandler($result) + { + if (trim(str_replace('Errore -->', '', trim($result->ResultMessage))) == 'Impossibile recuperare il cliente') { + throw new Exception("Credenziali servizio FatturaFE non valide"); + } else + throw new Exception(trim($result->ResultMessage)); + + } + + private function xml2array($xmlObject, $out = array()) + { + foreach ((array)$xmlObject as $index => $node) + $out[$index] = (is_object($node)) ? $this->xml2array($node) : $node; + + return $out; + } + + private function getXslCodeProcessed($xmlCode, $xslFile) + { + + $xslPath = APPLICATION_PATH . "/../../docs/xsl/"; + $tmpFile = APPLICATION_PATH . "/../../docs/tmp/" . date('d_m_Hisu') . ".xml"; + + $myfile = fopen($tmpFile, "w"); + fwrite($myfile, $xmlCode); + fclose($myfile); + + // Load the XML source + $xml = new DOMDocument; + $xml->load($tmpFile); + + unlink($tmpFile); + + $xsl = new DOMDocument; + $XslPath = $xslPath . $xslFile; + + if (!file_exists($XslPath)) { + throw new Exception("File xsl non trovato"); + } + $xsl->load($XslPath); + + // Configure the transformer + $proc = new XSLTProcessor; + $proc->importStyleSheet($xsl); // attach the xsl rules + + return $proc->transformToXML($xml); + } + + /** + * Questa funzione passato un filename e un array contente i filename già utilizzati ne rinomina i duplicati aggiungendo "(incremento)" alla fine del nomefile + * + * @param $filename + * @param $listFileNamePresent + * @param int $x + * @param null $filenameOriginal + * @return string + */ + private function checkDuplicatedFileName($filename, &$listFileNamePresent, $x = 0, $filenameOriginal = null) + { + + if (!in_array(strtolower($filename), $listFileNamePresent)) { + array_push($listFileNamePresent, strtolower($filename)); + return $filename; + } + + if ($x == 0) $filenameOriginal = pathinfo($filename, PATHINFO_FILENAME); + + $x++; + $filename = $filenameOriginal . "($x)." . pathinfo($filename, PATHINFO_EXTENSION); + + //Ricorsione + return $this->checkDuplicatedFileName($filename, $listFileNamePresent, $x, $filenameOriginal); + } + + private function getFileSizeInByte($base64string) + { + $bytes = strlen(base64_decode($base64string)); + return round($bytes, 2); + } + +} diff --git a/library/App/Service/FeAuthInfo.php b/library/App/Service/FeAuthInfo.php new file mode 100644 index 0000000..39e7c65 --- /dev/null +++ b/library/App/Service/FeAuthInfo.php @@ -0,0 +1,94 @@ +_model = new Application_Model_Generic(); + } + + /** + * Funzione per il recupero delle credenziali di accesso al servizio fatturaB2B + * + * Le cerca prima nella tabella di appoggio interna fe_authdata + * se non le trova le cerca tramite il collegamento al sito fattuab2b.it e le memorizza per i successvi utilizzi + * + * @param string $piva + * @return mixed + * @throws App_Controller_Errors_WebServiceError + */ + public function getFeAuthCredential(string $piva) + { + $piva = str_replace('IT','', $piva); + $credenziali = $this->_model->getByColumnName('FeAuthData', 'PartitaIva', $piva); + + if (!$credenziali) { // se non le trovo le cerco sul servizio del sito fattura b2b + $credenziali = $this->getFeAuthFatturaB2B($piva); + } + + return $this->decriptaCredenziali($credenziali); + } + + /** + * Recuper le credenziali dal sito fatturab2b.it e nel caso non sono presenti le memorizza sulla tabella delle credenziali + * @param $piva + * @return array|array[] + * @throws App_Controller_Errors_WebServiceError + */ + private function getFeAuthFatturaB2B($piva) + { + + //Controllo se il cliente ha il servizio di fatturazione elettronica attivo sul sito FatturaB2B + $ApiFatturaB2B = new App_Model_CurlHttpClient('https://www.fatturab2b.it/services/checkserviziofe'); + $credenzialiFe = $ApiFatturaB2B->getCall(array('piva' => $piva, 'info' => 1)); + + if (!$credenzialiFe || !$credenzialiFe['success'] || !$credenzialiFe['data']['StatoServizio']) { + throw new App_Controller_Errors_WebServiceError("Credenziali non esistenti o servizio non attivo per la partita iva $piva"); + } + + $credenziali = $credenzialiFe['data']; + $credenziali['PartitaIva'] = str_replace('IT','', $credenziali['PartitaIva']); + + return $this->insertUpdateFeAuthRecord($credenziali); + } + + /** + * Memorizza le credenziali nella tabella di appoggio fe_authdata + * + * @param $credenziali + * @return array|array[] + * @throws App_Controller_Errors_WebServiceError + * @throws Zend_Form_Exception + */ + private function insertUpdateFeAuthRecord($credenziali) + { + + $feAuthDataForm = new Application_Form_Admin_Index_FeAuthData_Add(); + if(!$feAuthDataForm->isValid($credenziali)){ + throw new App_Controller_Errors_WebServiceError("Dati da inserire nel fe auth data non validi"); + } + + $credenziali = $feAuthDataForm->getValues(); + $credenziali['DataUpdate'] = date('Y-m-d H:i:s'); + + $this->_model->deleteWhere('FeAuthData', array("PartitaIva = '?'" => $credenziali['PartitaIva'])); + $credenziali['id'] = $this->_model->insert('FeAuthData', $credenziali); + + return $credenziali; + } + + /** + * Decripta le credenziali e le restituisce + * + * @param $credenziali + * @return mixed + */ + private function decriptaCredenziali($credenziali){ + $credenziali['Password'] = App_Service_CodificaPiva::decriptaHex($credenziali['Password']); + return $credenziali; + } + + +} diff --git a/library/App/Service/IpManager.php b/library/App/Service/IpManager.php new file mode 100644 index 0000000..aff3f29 --- /dev/null +++ b/library/App/Service/IpManager.php @@ -0,0 +1,73 @@ +_configs = Zend_Registry::get('config'); + $this->_enviroments = Zend_Registry::get('ENVIROMENTS'); + $this->_allowedHostList = array(); + } + + /** + * Aggiorna l'oggetto config ricaricando tutte le impostazioni memorizzate + * nel file config.ini + */ + public function allowedIp() + { + + $ip_consentiti = explode(',',$this->_configs->get('ip_alternativo')); + $ip_master = trim($this->_configs->get('ip_master')); + $ip_server = trim($this->_configs->get('ip_server')); + + if(in_array($_SERVER['REMOTE_ADDR'], array_merge([$ip_master], [$ip_server], $ip_consentiti))){ + return true; + } + + return false; + } + + public function allowedHost(Zend_Controller_Request_Http $request){ + $host = $request->getServer(); + $host = $host['SERVER_NAME']; + + if(preg_match('/'.implode('|', $this->_allowedHostList).'/',$host)){ + return true; + } + + return false; + } + + public function allowedDevMode(){ + return (APPLICATION_ENV === 'development'); + } + + public function allowedDevAndStagingMode(){ + return (APPLICATION_ENV === 'development' || APPLICATION_ENV === 'staging'); + } + + public function controllaAbilitazioneTestSdk(){ + return $this->allowedDevMode(); + } + + public function getMongoAdminDbName(){ + return $this->_enviroments->get('mongodb')->get('params')->get('dbname'); + } + + public function getMongoDbName($nomeDb){ + switch (APPLICATION_ENV){ + case 'development': + return $nomeDb.'_dev'; + case 'staging': + return $nomeDb.'_test'; + default: + case 'production': + return $nomeDb; + } + } + +} diff --git a/library/App/Service/JsonConfiguration.php b/library/App/Service/JsonConfiguration.php new file mode 100644 index 0000000..3d13b1f --- /dev/null +++ b/library/App/Service/JsonConfiguration.php @@ -0,0 +1,107 @@ +initializeConfigurationFile($nomeFile); + } + + private function initializeConfigurationFile($name) + { + + $filePath = self::CONFIGURATION_FOLDER_PATH . $name . ".json"; + if (!file_exists($filePath)) throw new Zend_Exception("File di configurazione \"$name.json\" non trovato"); + $readerName = strtoupper($name) . '_CONFIG' . '_READER'; + $writerName = strtoupper($name) . '_CONFIG' . '_WRITER'; + //READER CONFIG FILE + if (Zend_Registry::isRegistered($readerName)){ + $this->_config = Zend_Registry::get($readerName); + + return; + } + $this->_config = new Zend_Config_Json($filePath, null, array('skipExtends' => true, 'allowModifications' => true)); + Zend_Registry::set($readerName, $this->_config); + //WRITER + if (Zend_Registry::isRegistered($writerName)){ + $this->_writer = Zend_Registry::get($writerName); + + return; + } + $this->_writer = new Zend_Config_Writer_Json(array('config' => $this->_config, 'filename' => $filePath)); + $this->_writer->setPrettyPrint(true); + Zend_Registry::set($writerName, $this->_writer); + } + + /** + * Aggiorna l'oggetto config ricaricando tutte le impostazioni memorizzate + * nel file config.ini + */ + public function update() + { + + $this->_config = new Zend_Config_Json(APPLICATION_PATH . '/configs/config.ini', null, array('skipExtends' => true, 'allowModifications' => true)); + Zend_Registry::set('config', $this->_config); + } + + public function write() + { + + $this->_writer->config = $this->_config; + $this->_writer->write(); + } + + public function set($key, $value) + { + + $this->_config->__set($key, $value); + $this->_writer->write(); + } + + /** + * Restituisce il valore del parametro richiesto + * + * @param string $name + * + * @return string + */ + public function get($name) + { + + return $this->_config->get($name); + } + + /** + * Elimina il parametro richiesto se esistente + * + * @param string $param + * + * @return boolean + */ + public function delete($param) + { + if (!$this->_config->get($param)) return false; + $this->_config->__unset($param); + $this->write(); + + return true; + } + + public function getAllParams() + { + + $data = array(); + foreach ($this->_config as $key => $value){ + $data[$key] = $value; + } + + return $data; + } + + } diff --git a/library/App/Service/NotifyError.php b/library/App/Service/NotifyError.php new file mode 100644 index 0000000..1f1119e --- /dev/null +++ b/library/App/Service/NotifyError.php @@ -0,0 +1,89 @@ +_configs = Zend_Registry::get('config'); + $this->_variabiliService = new App_Service_VariabiliSito(); + } + + /** + * Notifica l'errore critico solo se il parametro memorizzato nelle variabili del sito è settato a zero + * Serve a notificarlo una volta sola fin quando non riattivo la notifica + * + * @param $nomeVariabileErrore + * @param $message + * @param $exception + * @param null $params + * @param bool $inviaEmail + * @throws Zend_Exception + */ + public function notificaErroreCritico($nomeVariabileErrore, $message, $exception, $params = null, $inviaEmail = true){ + $variabileCheckNotififyError = $this->_variabiliService->get($nomeVariabileErrore); + if(!$variabileCheckNotififyError){ + + // Zend_Registry::get('log')->info(print_r($exception, true)); + + if($inviaEmail){ + $this->inviaEmailDiErrore($message, $exception, $params); + } + + $this->_variabiliService->set('I_CheckNotify_LoadMtTasks_Error', 1); + } + } + + public function inviaEmailDiErrore($shortdesc, Exception $e = null, $params = null, $email = null) + { + $mail = new Zend_Mail('UTF-8'); + + if(!$email) $email = $this->_configs->get('test_email'); + + $subject = '--- SERVER AS Fatturab2b.net --- NOTIFICA ERRORE ---'; + + $message = '
ERROR MESSAGE: ' . $shortdesc; + + if ($e != null) { + $message .= '

STACK TRACE ERRORE:
'; + + foreach ($e->getTrace() as $key => $value) { + $message .= "
[ " . $key . "] = " . $value; + if (is_array($value)) { + $message .= '
['; + foreach ($value as $key2 => $value2) { + $message .= "[ " . $key2 . "] = " . $value2 . "
"; + } + $message .= ']
'; + } + } + + $message .= '
EXCEPTION STAMP:
'; + + $message .= "
";
+            $message .= print_r($e,true);
+            $message .= "
"; + } + + if($params){ + $message .= '

PARAMETRI:
'; + + $message .= "
";
+            $message .= print_r($params,true);
+            $message .= "
"; + + $message .= '
'; + } + + $message .= '

Errore inviato dal server il ' . date('d/m/Y H:i:s'); + + $mail->setFrom($this->_configs->get('email_mittente'), $this->_configs->get('email_mittente_nome')) + ->setSubject($subject) + ->addTo($email, '') + ->setBodyHtml($message) + ->send(); + } + +} diff --git a/library/App/Service/RsaCryptor.php b/library/App/Service/RsaCryptor.php new file mode 100644 index 0000000..c8a2cbe --- /dev/null +++ b/library/App/Service/RsaCryptor.php @@ -0,0 +1,47 @@ + self::RSA_PATH."private_key.pem", + 'certificatePath' => self::RSA_PATH. 'public_key.pub', + 'passPhrase' => self::PASS_PHRASE, + 'hashAlgorithm' => OPENSSL_ALGO_SHA1 + ); + + public function __construct() + { + + if(Zend_Registry::isRegistered(self::RSA_OBJECT_REGISTRY_NAME)){ + $this->_cryptor = Zend_Registry::get(self::RSA_OBJECT_REGISTRY_NAME); + }else{ + $this->_cryptor = new Zend_Crypt_Rsa(self::RSA_KEY_OPTIONS); + Zend_Registry::set(self::RSA_OBJECT_REGISTRY_NAME, $this->_cryptor); + } + + } + + public function getPrivateKey(){ + return new Zend_Crypt_Rsa_Key_Private($this->_cryptor->getPemString(), self::RSA_KEY_OPTIONS['passPhrase']); + } + + public function getPublicKey(){ + return new Zend_Crypt_Rsa_Key_Public($this->_cryptor->getCertificateString(), self::RSA_KEY_OPTIONS['passPhrase']); + } + + public function cripta($data){ + return $this->_cryptor->encrypt($data, $this->getPrivateKey(), 'base64'); + } + + public function decripta($data){ + return $this->_cryptor->decrypt($data, $this->getPublicKey(), 'base64'); + } + + } diff --git a/library/App/Service/SoapFeInviate.php b/library/App/Service/SoapFeInviate.php new file mode 100644 index 0000000..38cc9d4 --- /dev/null +++ b/library/App/Service/SoapFeInviate.php @@ -0,0 +1,81 @@ +'0000001Test0000463', + 'Password'=>'B13144FA3D9E11D70079B2C929B549D2' + ); + + protected $_configs; + protected $_ipManager; + + private $_credenziali; + private $_testSDK; + + public function __construct(array $credenziali = null) + { + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + + if($this->_ipManager->allowedDevMode()) + $this->_testSDK = true; + else + $this->_testSDK = false; + + if($this->_testSDK){ + parent::__construct(self::TEST_URL); + if(!$credenziali) + $this->_credenziali = self::TEST_CRED; + else + $this->_credenziali = $credenziali; + }else{ + parent::__construct(self::PROD_URL); + if(!$credenziali){ + throw new Zend_Exception("Errore credenziali non presenti nell'inizializzione del SOAP FEInviate"); + } + + $this->_credenziali = $credenziali; + } + } + + public function getCredenziali() + { + return $this->_credenziali; + } + + public function getOldCredenziali() + { + return array( + 'codiceCliente'=>$this->_credenziali['CustomerCode'], + 'passwordServizi'=>$this->_credenziali['Password'] + ); + } + + public function mergeParamsCredenziali($params = array()){ + return array_merge_recursive(array('paramAuth'=>$this->_credenziali),$params); + } + + public function mergeParamsOldCredenziali($params = array()){ + return array_merge_recursive(array( + 'codiceCliente'=>$this->_credenziali['CustomerCode'], + 'passwordServizi'=>$this->_credenziali['Password'] + ),$params); + } + + public static function strToBytesArray($str){ + $tmp = array(); + for($i = 0; $i < mb_strlen($str, 'ASCII'); $i++) { + $tmp[$i] = ord($str[$i]); + } + return $tmp; + } + + public static function BytesArrayToStr($arrayOfBytes){ + return implode(array_map("chr", $arrayOfBytes)); + } + +} diff --git a/library/App/Service/V1Auth.php b/library/App/Service/V1Auth.php new file mode 100644 index 0000000..718cb48 --- /dev/null +++ b/library/App/Service/V1Auth.php @@ -0,0 +1,80 @@ +_genericModel = new Application_Model_Generic(); + } + + public function getUser() + { + if (Zend_Registry::isRegistered('TOKEN')) { + return $this->_genericModel->getByColumnName('Users', 'token', Zend_Registry::get('TOKEN')); + } else { + return null; + } + } + + public function controllaPermessiSuOrdine($ordineMapping, $user = null) + { + + if (!$user) { + $user = $this->getUser(); + } + + switch ($user['role']) { + case 'admin': + return true; + case 'user': + return $user['id'] === $ordineMapping['ID_Utente']; + case 'attivita': + return $user['id'] === $ordineMapping['ID_Attivita']; + case 'rider': + return $user['id'] === $ordineMapping['ID_UserRider']; + default: + return false; + } + + } + + /** + * Controlla se il permesso passatto o i permessi sono validi per l'utente loggato + * @param array $role + * @param null $user + * @return bool + */ + public function controllaPermessiByRole(array $role, $user = null) + { + + if (!$user) { + $user = $this->getUser(); + } + + return in_array($user['role'], $role); + } + + public function getPermissionWhere($user = null) + { + + if (!$user) { + $user = $this->getUser(); + } + + switch ($user['role']) { + case 'admin': + return []; + case 'user': + return ['ID_Utente = ?' => $user['id']]; + case 'attivita': + return ['ID_Attivita = ?' => $user['id']]; + case 'rider': + return ['ID_UserRider = ?' => $user['id']]; + default: + return ['id < ?' => '0']; // forza a non restituire nulla + } + + } +} diff --git a/library/App/Service/VariabiliSito.php b/library/App/Service/VariabiliSito.php new file mode 100644 index 0000000..07eeb32 --- /dev/null +++ b/library/App/Service/VariabiliSito.php @@ -0,0 +1,89 @@ +_genericModel = new Application_Model_Generic(); + $this->initialize(); + + } + + private function initialize() + { + + if (Zend_Registry::isRegistered(self::VARIABILI_SITO_REGISTRY_NAME)){ + $this->_variabili = Zend_Registry::get(self::VARIABILI_SITO_REGISTRY_NAME); + return; + } + + $tmp = $this->_genericModel->getList('VariabiliSito'); + $variabili = array(); + + foreach($tmp as $key => $val){ + $tipo = explode('_',$val['Nome'])[0]; + switch($tipo){ + case'I': + $variabili[$val['Nome']] = $val['ValoreInteger']; + break; + case'D': + $variabili[$val['Nome']] = $val['ValoreDouble']; + break; + case'S': + $variabili[$val['Nome']] = $val['ValoreString']; + break; + case'TJ': + $variabili[$val['Nome']] = Zend_Json::decode($val['ValoreString']); + break; + } + } + + $this->_variabili = $variabili; + Zend_Registry::set(self::VARIABILI_SITO_REGISTRY_NAME, $this->_variabili); + } + + public function get($key) + { + return $this->_variabili[$key]; + } + + public function set($key,$value){ + + $tipo = explode('_',$key)[0]; + switch($tipo){ + case'I': + $data = array('ValoreInteger'=>$value); + break; + case'D': + $data = array('ValoreDouble'=>$value); + break; + case'T': + $data = array('ValoreString'=>$value); + break; + case'TJ': + $data = array('ValoreString'=>Zend_Json::encode($value)); + break; + default: + throw new Exception("Tipo del valore da inserire non specificato"); + break; + } + + if(array_key_exists($key,$this->_variabili)) //update + $this->_genericModel->updateWhere('VariabiliSito',"Nome = '$key'",$data); + else //Inserimento + $this->_genericModel->insert('VariabiliSito',array_merge(array('Nome'=>$key),$data)); + + $this->_variabili[$key] = $value; + Zend_Registry::set(self::VARIABILI_SITO_REGISTRY_NAME, $this->_variabili); + } + + public function getAll(){ + return $this->_variabili; + } + +} diff --git a/library/App/Service/WebServiceV1Auth.php b/library/App/Service/WebServiceV1Auth.php new file mode 100644 index 0000000..24da257 --- /dev/null +++ b/library/App/Service/WebServiceV1Auth.php @@ -0,0 +1,111 @@ +_model = new Application_Model_Generic(); + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + } + + public function authenticate($username, $password, $staylogin = 0) + { + $adapter = $this->getAuthAdapter(array('username' => $username, 'password' => $password)); + $auth = $this->getAuth(); + $result = $auth->authenticate($adapter); + + if (!$result->isValid()) { + return $result->getCode(); + } + + $user = (array)$adapter->getResultRowObject(); + if (!$user['stato']) { + return self::ACCOUNT_DEACTIVATED; + } + + //Generazione del Token temporaneo per l'accesso + if ($user['token'] != null) { + $token = $user['token']; //Esistente uso quello già presente + } else { + do { //se non esiste ne genero uno nuovo e controllo che sia univoco + $token = hash('sha1', $user['username'] . date('H:i:s') . mt_rand(5, 10)); + if ($this->_model->getByColumnName('Users', 'token', $token)) { + $exist = true; + } else { + $exist = false; + } + $user['token'] = $token; + } while ($exist); + } + + //Imposto il DB MONGO dell'utente + $mongoDbName = $this->_ipManager->getMongoDbName($user['NomeDB']); + if(Zend_Registry::isRegistered(App_Model_Mongo_Adapter::MONGO_DB_ADAPTER_REG_NAME)) + Zend_Registry::get(App_Model_Mongo_Adapter::MONGO_DB_ADAPTER_REG_NAME)->setDbname($mongoDbName); + else + Zend_Registry::set(App_Model_Mongo_Adapter::MONGO_DB_NAME, $mongoDbName); + + //Memorizzo l'ultimo accesso dell'utente + $this->_model->update('Users', $user['id'], array( + 'token' => $token, + 'UltimoLogin' => date('Y-m-d H:i:s'), + 'staylogin' => $staylogin) + ); + + $auth->getStorage()->write($user); + + return $user; + } + + public function getAuth() + { + if (null === $this->_auth) { + $this->_auth = Zend_Auth::getInstance(); + $this->_auth->setStorage(new Zend_Auth_Storage_Session('Web_Auth')); + } + return $this->_auth; + } + + public function getIdentity() + { + $auth = $this->getAuth(); + if ($auth->hasIdentity()) { + return $auth->getIdentity(); + } + return false; + } + + public function clear() + { + $this->getAuth()->clearIdentity(); + } + + public function getAuthAdapter($values) + { + $salt = Zend_Registry::get('ENVIROMENTS')->get('password_salt'); + $authAdapter = new Zend_Auth_Adapter_DbTable( + Zend_Db_Table_Abstract::getDefaultAdapter(), + 'users', + 'username', + 'password', + "MD5(CONCAT('$salt',?))" + ); + $authAdapter->setIdentity($values['username']); + $authAdapter->setCredential($values['password']); + return $authAdapter; + } +} diff --git a/library/App/Stripe/StripeApi.php b/library/App/Stripe/StripeApi.php new file mode 100644 index 0000000..9f4fed0 --- /dev/null +++ b/library/App/Stripe/StripeApi.php @@ -0,0 +1,107 @@ +_currency = 'eur'; + $this->_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + + $this->_apiStripeTestAccount = false; + if($this->_ipManager->allowedDevMode()){ + $this->_apiStripeTestAccount = ($this->_configs->get('interrutore_stripe_test') == 'on') ? 1:0; + } + + if ($this->_apiStripeTestAccount){ + $this->_secretKey = self::TEST_SECRECT_KEY; + $this->_publishableKey = self::TEST_PUBLISHABLE_KEY; + } else{ + $this->_secretKey = self::LIVE_SECRET_KEY; + $this->_publishableKey = self::LIVE_PUBLISHABLE_KEY; + } + $this->_Stripe = new Stripe(); + $this->_Stripe->setApiKey($this->_secretKey); + } + + /** + * @param $number + * @param $exp_month + * @param $exp_year + * @param $cvc + * @param null $extraData + * + * @return \Stripe\ApiOperations\ApiResource + */ + public function createToken($number, $exp_month, $exp_year, $cvc,$extraData = null) + { + $card = array( + 'number' => $number, + 'exp_month' => $exp_month, + 'exp_year' => $exp_year, + 'cvc' => $cvc + ); + + //Nel caso in cui passo dei dati extra li aggiungo alla chiamata per la creazionde del token + if($extraData && (is_array($extraData) || is_object($extraData))){ + foreach($extraData as $key => $val){ + $card[$key] = $val; + } + } + + $token = Token::create(array('card' => $card)); + + return $token; + } + + /** + * @param $amount + * @param $token + * @param string $description + * + * @return \Stripe\ApiOperations\ApiResource + * @throws Exception + */ + public function createCharge($amount, $token,$description = self::DEFAULT_DESCRIPTION_TEXT) + { + + if(!$token) + throw new Exception("Il Token non è stato generato correttamente"); + + $charge = Charge::create(array( + "amount" => $amount, + "currency" => $this->_currency, + "card" => $token, + "description"=>$description + )); + return $charge; + } + + } diff --git a/library/Helpers/Action/Base64Image.php b/library/Helpers/Action/Base64Image.php new file mode 100644 index 0000000..bfd6a0a --- /dev/null +++ b/library/Helpers/Action/Base64Image.php @@ -0,0 +1,60 @@ +_genericModel = new Application_Model_Generic(); + } + + public function direct() + { + + } + +} diff --git a/library/Helpers/Action/Currency.php b/library/Helpers/Action/Currency.php new file mode 100644 index 0000000..faf0447 --- /dev/null +++ b/library/Helpers/Action/Currency.php @@ -0,0 +1,15 @@ +toCurrency($number); + + } + +} diff --git a/library/Helpers/Action/Docsmaker.php b/library/Helpers/Action/Docsmaker.php new file mode 100644 index 0000000..ec07cde --- /dev/null +++ b/library/Helpers/Action/Docsmaker.php @@ -0,0 +1,178 @@ +_dataHelper = $this->getActionController()->getHelper('ExtractData'); + $this->_formatDataHelper = $this->getActionController()->getHelper('FormatData'); + $this->_globalFunction = $this->getActionController()->getHelper('Globalfunction'); + $this->_view = null; + } + + public function direct() + { + } + + public function reportAttivita(Zend_View &$view, $dati, $mode = 'I', $autoprint = false, $returnHtml = false) + { + + $this->_view = $view; + $preOutputScript = ""; + + if (!$this->_view) { + throw new Zend_Exception("Errore view non presente"); + } + + if (!$dati) { + throw new Zend_Exception("Errore dati non ricevuti"); + } + + /********************************************* Calcolo dei dati necessari **********************************************/ + + $totali = array_merge($dati['ElencoLicenze']); + end($totali); + $this->_view->lastRigaKey = key($totali); + + //$stringa_periodo = ($data[0] === $data[1]) ? 'del ' . $this->_formatDataHelper->direct($data[0], 'd/m/Y') : 'dal ' . $this->_formatDataHelper->direct($data[0], 'd/m/Y') . ' al ' . $this->_formatDataHelper->direct($data[1], 'd/m/Y'); + + $this->_view->assign(array( + 'Data' => $dati['Data'], + 'Periodo' => $dati['Periodo'], + 'ElencoLicenze' => $dati['ElencoLicenze'], + 'TotaliAttivazioni' => $dati['TotaliAttivazioni'], + 'TotaleFe' => $dati['TotaleFe'], + 'Rivenditore' => $dati['Rivenditore'] + )); + + $this->_view->setScriptPath(APPLICATION_PATH . "/modules/default/views/scripts/"); + + $filename = 'Report ' . str_replace('/', '', $dati['Periodo']) . ' - ' . $dati['Rivenditore']['RagioneSociale']; + + if ($mode == 'F') { + $preOutputScript = APPLICATION_PATH . "/../public/doctmp/"; + } + + $this->getResponse()->setBody(''); + $html = $this->_view->render('index/print/reportattivita.phtml'); + + $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4', + 'margin_top' => 38, 'margin_right' => 10, 'margin_bottom' => 5, 'margin_left' => 10, + 'margin_header' => 5, 'margin_footer' => 5]); + $mpdf->setAutoTopMargin = 'stretch'; + $mpdf->setAutoBottomMargin = 'stretch'; + $mpdf->keep_table_proportions = true; + + $mpdf->SetTitle($filename); + $mpdf->SetAuthor("Adriatica Sistemi soc. coop."); + $mpdf->SetDisplayMode('fullpage'); + + //Funzione che avvia la stampa direttamente + if ($autoprint == 'true') { + $mpdf->SetJS('this.print();'); + } + + if (!$returnHtml) { + $mpdf->WriteHTML($html); + //Il Mode 'S' restituisce il contenuto del file che codifico in base64 e lo retituisco + if ($mode == 'S') { + $res = array(); + $res['filename'] = $filename . ".pdf"; + $res['filecontent'] = $mpdf->Output($preOutputScript . $filename . ".pdf", $mode); + return $res; + } else { + //Gestione per gli altri mode 'I' o 'F' o 'D' + $mpdf->Output($preOutputScript . $filename . ".pdf", $mode); + $res = array(); + $res['filename'] = $filename . ".pdf"; + $res['path'] = $preOutputScript; + $res['completeFilePath'] = $preOutputScript . $filename . '.pdf'; + return $res; + } + } + + return $html; + } + + public function reportAttivitaAdmin(Zend_View &$view, $dati, $mode = 'I', $autoprint = false, $returnHtml = false) + { + + $this->_view = $view; + $preOutputScript = ""; + + if (!$this->_view) { + throw new Zend_Exception("Errore view non presente"); + } + + if (!$dati) { + throw new Zend_Exception("Errore dati non ricevuti"); + } + + /********************************************* Calcolo dei dati necessari **********************************************/ + + $tmp = $dati['ElencoRivenditori']; + end($tmp); + $this->_view->lastRigaKey = key($tmp); + + $this->_view->assign(array( + 'Data' => $dati['Data'], + 'Periodo' => $dati['Periodo'], + 'ElencoAttivita' => $dati['ElencoAttivita'] + )); + + $this->_view->setScriptPath(APPLICATION_PATH . "/modules/default/views/scripts/"); + + $filename = 'Report Riepilogo per Attività ' . str_replace('/', '-', $dati['Periodo']); + + if ($mode == 'F') { + $preOutputScript = APPLICATION_PATH . "/../public/doctmp/"; + } + + $this->getResponse()->setBody(''); + $html = $this->_view->render('index/print/reportattivitaadmin.phtml'); + + $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4', + 'margin_top' => 28, 'margin_right' => 10, 'margin_bottom' => 5, 'margin_left' => 10, + 'margin_header' => 5, 'margin_footer' => 5]); + $mpdf->setAutoTopMargin = 'stretch'; + $mpdf->setAutoBottomMargin = 'stretch'; + $mpdf->keep_table_proportions = true; + + $mpdf->SetTitle($filename); + $mpdf->SetAuthor("Adriatica Sistemi soc. coop."); + $mpdf->SetDisplayMode('fullpage'); + + //Funzione che avvia la stampa direttamente + if ($autoprint == 'true') { + $mpdf->SetJS('this.print();'); + } + + if (!$returnHtml) { + $mpdf->WriteHTML($html); + //Il Mode 'S' restituisce il contenuto del file che codifico in base64 e lo retituisco + if ($mode == 'S') { + $res = array(); + $res['filename'] = $filename . ".pdf"; + $res['filecontent'] = $mpdf->Output($preOutputScript . $filename . ".pdf", $mode); + return $res; + } else { + //Gestione per gli altri mode 'I' o 'F' o 'D' + $mpdf->Output($preOutputScript . $filename . ".pdf", $mode); + $res = array(); + $res['filename'] = $filename . ".pdf"; + $res['path'] = $preOutputScript; + $res['completeFilePath'] = $preOutputScript . $filename . '.pdf'; + return $res; + } + } + + return $html; + } + +} diff --git a/library/Helpers/Action/Email.php b/library/Helpers/Action/Email.php new file mode 100644 index 0000000..938e92f --- /dev/null +++ b/library/Helpers/Action/Email.php @@ -0,0 +1,222 @@ +_configs = new App_Service_ConfigManager(); + $this->_ipManager = new App_Service_IpManager(); + } + + /** + * Invia un email all'utente con i parametri scelti + * + * @param String $message | $subject | $email + * @param boolean $text | $footer + * @return void + */ + public function direct($message, $subject, $email, $text = false, $footer = false) + { + $mail = new App_Model_Mail('UTF-8'); + + if ($footer) { + $message .= $this->addFooter(); + } + + $mail->setFrom($this->_configs->get('email_mittente'), $this->_configs->get('email_mittente_nome'))->setSubject($subject)->addTo($email, 'Fatturab2b.net'); + + if ($text == false) { + $mail->setBodyHtml($message); + } else { + $mail->setBodyText($message); + } + + $mail->send(); + } + + /** + * Invia un email all'utente in base a un template memorizzato nel DB. + * @param $email + * @param $template + * @param array $params + * @param null $filename + * @throws Zend_Mail_Exception + */ + public function sendEmailByTemplate($email, $template, $params = array(), $nomeMittente = null, $filename = null,$fileNameInterno = null) + { + $mail = new App_Model_Mail('UTF-8'); + + if(!$template){ + throw new Exception("Email template non trovato impossibile inviare l'email"); + } + + $params = $this->preparaDatiPerSostituzione($params); + + if (count($params) > 0) { + foreach ($params as $key => $val) { + $template['Oggetto'] = str_replace($key, $val, $template['Oggetto']); + $template['Testo'] = str_replace($key, $val, $template['Testo']); + } + } + + if ($template['Footer']) + $template['Testo'] .= $this->addFooter(); + + if ($filename != null) { + if (file_exists($filename)) + $mail->createAttachment(file_get_contents($filename), 'application/pdf', Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $filename); + } + + $nomeMittente = ($nomeMittente) ? $nomeMittente : $this->_configs->get('email_mittente_nome'); + + $mail->setFrom($this->_configs->get('email_mittente'), $nomeMittente)->setSubject($template['Oggetto']); + + if ($template['Tipologia'] == 'HTML') { + $mail->setBodyHtml($template['Testo']); + } else if ($template['Tipologia'] == 'TEXT') { + $mail->setBodyText($template['Testo']); + } + + //Nel caso in cui sono in test le email vengono inviate solo a sviluppoweb + if($this->_ipManager->controllaAbilitazioneTestSdk()){ + $email=$this->_configs->get('test_email'); + if($template['Resend']) + $template['Resend'] = 'TEST'; + } + + //Inserisco il o i destinatari/o + if(is_string($email)){ + $mail->addTo($email, $email); + }else if(is_array($email)){ + foreach($email as $val){ + $mail->addTo($val); + } + } + + $mail->send(); + + //INVIO COAPIA AL NOSTRO STISTEMA + if($template['Resend']){ + + $mail->clearRecipients(); + + //Controllo se devo reinviare la mail anche al nostro server + if ($template['Resend'] == 'INFO') + $mail->addTo($this->_configs->get('email_mittente'), $this->_configs->get('email_mittente_nome')); + if ($template['Resend'] == 'ACQUISTI') + $mail->addTo($this->_configs->get('email_ordine'), $this->_configs->get('email_mittente_nome')); + if ($template['Resend'] == 'TEST') + $mail->addTo($this->_configs->get('test_email'), $this->_configs->get('email_mittente_nome')); + + if($fileNameInterno){ + $mail->setParts(array()); + if (file_exists($fileNameInterno)) + $mail->createAttachment(file_get_contents($fileNameInterno), 'application/pdf', Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $fileNameInterno); + } + + $mail->send(); + + //CANCELLO IL FILE DEL PDF + if ($fileNameInterno != null) { + if (file_exists($fileNameInterno)) + @unlink($fileNameInterno); + } + } + + //Invio l'email per la stampante con il testo vuoto + if ($template['Resend'] == 'ACQUISTI' && !$this->_ipManager->controllaAbilitazioneTestSdk()){ + $mail->clearRecipients(); + $mail->setBodyHtml(""); + $mail->setBodyText(""); + $mail->addTo("", $this->_configs->get('email_mittente_nome')); + $mail->send(); + } + + } + + public function reportErrorToEmail($error, $shortdesc, Exception $e = null,$email = null) + { + $mail = new Zend_Mail('UTF-8'); + + if(!$email) $email = $this->_configs->get('test_email'); + + $subject = '--- SERVER Fatturab2b.net [EMAIL] --- ERRORE ---'; + + $message = '
ERROR-MESSAGE: ' . $shortdesc; + + if ($e != null) { + $message .= '

STACK TRACE ERRORE:
'; + + foreach ($e->getTrace() as $key => $value) { + $message .= "
[ " . $key . "] = " . $value; + if (is_array($value)) { + $message .= '
['; + foreach ($value as $key2 => $value2) { + $message .= "[ " . $key2 . "] = " . $value2 . "
"; + } + $message .= ']
'; + } + } + + $message .= '
EXCEPTION STAMP:
'; + + $message .= "
";
+            $message .= print_r($e,true);
+            $message .= "
"; + } + + $message .= '

PARAMETRI RICEVUTI:
'; + + $message .= "
";
+        $message .= print_r($error,true);
+        $message .= "
"; + + $message .= '
'; + + $message .= '

Errore inviato dal server il ' . date('d/m/Y H:i:s'); + + $mail->setFrom($this->_configs->get('email_mittente'), $this->_configs->get('email_mittente_nome')) + ->setSubject($subject) + ->addTo($email, '') + ->setBodyHtml($message) + ->send(); + } + + /** + * Funzione che restituisce il footer per ogni email + * + * @param String $ragsoc | $email + * @return void + */ + public function addFooter() + { + $footer = '

'; + $footer .= ''; + return $footer; + } + + /**************************** + *** FUNZIONI PRIVATE ****** + ***************************/ + + /** + * Questa funzione presi i parametri passati nell array ne aggiunge i simboli + * percentuale per farli riconoscere popi nel testo e sostituirli + * @param $dati + * @return array + */ + private function preparaDatiPerSostituzione($dati){ + $newParams = array(); + + foreach($dati as $key => $val){ + $newParams['%'.$key.'%'] = $val; + } + + return $newParams; + } + +} diff --git a/library/Helpers/Action/ExtractData.php b/library/Helpers/Action/ExtractData.php new file mode 100644 index 0000000..1d92f80 --- /dev/null +++ b/library/Helpers/Action/ExtractData.php @@ -0,0 +1,253 @@ + diff($datetime2); + return $interval -> days; + } + + /** + * Funzione che passate due date nel formato aaaa-mm-dd ne calcola i giorni di differenza formatti col segno + * + * @param string $data1|string $data2 + * @return string $days + */ + public function diff_date_segno($data1, $data2) { + if(is_string($data1)) + $datetime1 = new DateTime($data1); + else + $datetime1 = $data1; + + if(is_string($data2)) + $datetime2 = new DateTime($data2); + else + $datetime2 = $data2; + + $interval = $datetime1 -> diff($datetime2); + return $interval -> format('%R%a'); + } + + /** + * Funzione che passata una data e i giorni da sommare restituisce la data somma + * + * @param string $data + * @return string $days + */ + public function add_days_date($data,$days){ + $data = explode('/',$data); + array_reverse($data); + $data = implode('-', $data); + $date = new DateTime($data); + $date->add(new DateInterval('P'.$days.'D')); + return $date->format('d/m/Y'); + } + + /** + * Funzione che passata una data e i giorni da sottrarre e restituisce la data calcolata + * + * @param $data + * @param $days + * @param bool|false $slashed + * + * @return string + */ + public function sub_days_date($data,$days,$slashed = false){ + $data = $this->getDataForDb($data); + $date = new DateTime($data); + $date->sub(new DateInterval('P'.$days.'D')); + if($slashed) + return $date->format('d/m/Y'); + else + return $date->format('Y-m-d'); + } + + /** + * Funzione che passata una data e gli anni da sottrarre restituisce la data sottratta + * + * @param string $data + * @return string $days + */ + public function diff_days_year($data,$years){ + $data = explode('/',$data); + array_reverse($data); + $data = implode('-', $data); + $date = new DateTime($data); + $date->sub(new DateInterval('P'.$years.'Y')); + return $date->format('d/m/Y'); + } + + /** + * Funzione che passata una data e i giorni da sottrarre restituisce la data sottratta + * + * @param string $data + * @return string $days + */ + public function diff_days($data,$days){ + + $this->_dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy')); + $this->_dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + + if ($this->_dateValidatorSlash->isValid($data)) { + $data = implode('-',array_reverse(explode('/',$data))); + } + + if(!$this->_dateValidatorTrattino->isValid($data)){ + return null; + } + + $date = new DateTime($data); + $date->sub(new DateInterval('P'.$days.'D')); + return $date->format('d/m/Y'); + } + + /** + * Funzione che passata una data la ritorna pronta per l'inserimento sul db false se non � una data valida + * + * @param $data + * + * @return bool|string + */ + public function getDataForDb($data){ + + if(is_array($data)){ + $data = new DateTime(substr($data['date'],0,10)); + return $data -> format('Y-d-m'); + }elseif(is_string($data)){ + $this->_dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy')); + $this->_dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + if ($this->_dateValidatorSlash->isValid($data)) { + return $this->unslashData($data); + }else if($this->_dateValidatorTrattino->isValid($data)){ + return $data; + }else{ + return null; + } + }else{ + return $data; + } + + } + +} diff --git a/library/Helpers/Action/FilterFunctions.php b/library/Helpers/Action/FilterFunctions.php new file mode 100644 index 0000000..31f5836 --- /dev/null +++ b/library/Helpers/Action/FilterFunctions.php @@ -0,0 +1,249 @@ +_dataHelper = $this->getActionController()->getHelper('ExtractData'); + $this->_filterOperators = array('>','<','>=','<=','=','ISNULL','NONULL'); + } + + /** + * Questa funzione ricevuti i parametri restitisce l'array contenente tutti i valori per eseguire la ricerca da passare alla query + * @param $filter + * @param bool|false $analizzaOperatori + * @return array + */ + public function direct($filter, $analizzaOperatori = false) + { + + if ($analizzaOperatori) { + $filter = $this->getFilterParamsWithOperator($filter); + } + + $where = array(); + + $filter = $this->cleanParams($filter,false); + + foreach ($filter as $key => $val) { + + if (substr($key, -2) == 'OP') continue; + + $nomeCampo = explode('-', $key)[0]; + $nomeCampo = str_replace('#','.',$nomeCampo); + + if (array_key_exists($key . 'OP', $filter)) + $op = $filter[$key . 'OP']; + else + $op = 'EQUAL'; + + switch ($op) { + case'ICHECK': + $where[$nomeCampo . ' = ?'] = ($val == 'on') ? '1':'0'; + break; + case'EQUAL': + $where[$nomeCampo . ' = ?'] = $val; + break; + case'NOTEQUAL': + $where[$nomeCampo . ' <> ?'] = $val; + break; + case'MIN': + $where[$nomeCampo . ' < ?'] = $val; + break; + case'MAX': + $where[$nomeCampo . ' > ?'] = $val; + break; + case'EQUALMIN': + $where[$nomeCampo . ' <= ?'] = $val; + break; + case'EQUALMAX': + $where[$nomeCampo . ' >= ?'] = $val; + break; + case'LIKE': + $val = '%' . $val . '%'; + $where[$nomeCampo . ' ' . $op . ' ?'] = $val; + break; + case'LIKEPRE': + $val = '%' . $val; + $where[$nomeCampo . ' LIKE ?'] = $val; + break; + case'LIKEPOST': + $val = $val . '%'; + $where[$nomeCampo . ' LIKE ?'] = $val; + break; + case'DATEEQUAL': + $where[$nomeCampo . ' = ?'] = $this->_dataHelper->unslashData($val); + break; + case'DATEEQUALMIN': //Inserisco anche l'ora perchè cosi le query funzionano sia sui i tipi "date" che "datetime" + $where[$nomeCampo . ' <= ?'] = trim($this->_dataHelper->unslashData($val)) . ' 23:59:59'; + break; + case'DATEEQUALMAX': + $where[$nomeCampo . ' >= ?'] = trim($this->_dataHelper->unslashData($val)) . ' 00:00:00'; + break; + case'DATEMIN': + $where[$nomeCampo . ' < ?'] = trim($this->_dataHelper->unslashData($val)) . ' 23:59:59'; + break; + case'DATEMAX': + $where[$nomeCampo . ' > ?'] = trim($this->_dataHelper->unslashData($val)) . ' 00:00:00'; + break; + case'DATERANGE': + $val = explode('|', $val); + if (trim($val[0]) && trim($val[0]) != 'undefined') $where[$nomeCampo . ' >= ?'] = $this->_dataHelper->unslashData(trim($val[0])) . ' 00:00:00'; + if (trim($val[1]) && trim($val[1]) != 'undefined') $where[$nomeCampo . ' <= ?'] = $this->_dataHelper->unslashData(trim($val[1])) . ' 23:59:59'; + break; + case'ISNULL': + $where[$nomeCampo . ' IS NULL'] = ""; + break; + case'NONULL': + $where[$nomeCampo . ' IS NOT NULL'] = ""; + break; + case'ORWHERE': + $where[$nomeCampo . ' #OR ?'] = $val; + break; + case'ANDORWHERE': + $where[$nomeCampo . ' #ANDOR ?'] = $val; + break; + case'IN': + if(!is_array($val)){ + $val = explode(',', $val); + } + $where[$nomeCampo . ' IN ( ? )'] = $val; + break; + default: + throw new Exception("'$op' non è un operatore di filtro valido"); + } + } + + return $where; + } + + /** + * Questa funzione riceve i parametri di ricerca in ingresso gli analizza per applicare eventuali operatori applicati + * @param $params + * @return array + */ + public function getFilterParamsWithOperator($params) + { + + $params = $this->cleanParams($params); + + $newParams = array(); + + foreach ($params as $key => $val) { + if (substr($key, -2) == 'OP') continue; + if (substr($key, -9) == 'OPDEFAULT') continue; + if (!array_key_exists($key . "OP", $params)) { + + $op = $this->findOperator($val); + switch ($op) { + case'>=': + $newParams[$key . 'OP'] = 'EQUALMAX'; + $newParams[$key] = trim(substr($val, 2)); + break; + case'<=': + $newParams[$key . 'OP'] = 'EQUALMIN'; + $newParams[$key] = trim(substr($val, 2)); + break; + case'<': + $newParams[$key . 'OP'] = 'MIN'; + $newParams[$key] = trim(substr($val, 1)); + break; + case'>': + $newParams[$key . 'OP'] = 'MAX'; + $newParams[$key] = trim(substr($val, 1)); + break; + case'=': + $newParams[$key . 'OP'] = 'EQUAL'; + $newParams[$key] = trim(substr($val, 1)); + break; + case'<>': + $newParams[$key . 'OP'] = 'NOTEQUAL'; + $newParams[$key] = trim(substr($val, 2)); + break; + case'ISNULL': + $newParams[$key . 'OP'] = 'ISNULL'; + $newParams[$key] = ""; + break; + case'NONULL': + $newParams[$key . 'OP'] = 'NONULL'; + $newParams[$key] = ""; + break; + default: + if(isset($params[$key.'OPDEFAULT'])){ + $newParams[$key . 'OP'] = $params[$key.'OPDEFAULT']; + }else{ + $newParams[$key . 'OP'] = 'EQUAL'; + } + $newParams[$key] = $val; + break; + } + + } else { + $newParams[$key] = $val; + $newParams[$key . "OP"] = $params[$key . "OP"]; + } + } + + return $newParams; + + } + + /** + * Funzione che passata una stringa cerca se viene applicato un operatore e lo restuisce + * @param $val + * @return string + */ + private function findOperator($val) + { + $op = trim(explode(' ', $val)[0]); + if (in_array($op, $this->_filterOperators)) return $op; + + $op = trim(substr($val, 0, 6)); + if (in_array($op, $this->_filterOperators)) return $op; + + $op = $op = trim(substr($val, 0, 2)); + if (in_array($op, $this->_filterOperators)) return $op; + + $op = $op = trim(substr($val, 0, 1)); + if (in_array($op, $this->_filterOperators)) return $op; + + return 'EQUAL'; + } + + public function cleanParams($params,$removeEmptyValue = true,$removeOperator = false){ + unset($params['controller']); + unset($params['module']); + unset($params['action']); + unset($params['method']); + unset($params['page']); + unset($params['count']); + unset($params['order']); + unset($params['tipoOrder']); + unset($params['filtrato']); + unset($params['orwhere']); + unset($params['reset']); + unset($params['iddet']); + unset($params['select']); + unset($params['compactlist']); + unset($params['deliveryinfo']); + + if($removeEmptyValue){ + //Elimino i campi vuoti tranne le select vuote + foreach ($params as $key => $val) { + if (empty($val) && $val !== '0') unset($params[$key]); + + //Elimino anche i paramtri di operazione + if ($removeOperator && preg_match('/OP$/',$key)){ + unset($params[$key]); + } + } + } + + return $params; + } + + +} diff --git a/library/Helpers/Action/FormatData.php b/library/Helpers/Action/FormatData.php new file mode 100644 index 0000000..c31da92 --- /dev/null +++ b/library/Helpers/Action/FormatData.php @@ -0,0 +1,11 @@ + format($format); + } + +} diff --git a/library/Helpers/Action/Globalfunction.php b/library/Helpers/Action/Globalfunction.php new file mode 100644 index 0000000..a8eb5be --- /dev/null +++ b/library/Helpers/Action/Globalfunction.php @@ -0,0 +1,228 @@ +_configs = new App_Service_ConfigManager(); + $this->_dataHelper = $this->getActionController()->getHelper('ExtractData'); + $this->_genericModel = new Application_Model_Generic(); + } + + public function direct() + { + } + + /** + * ===================================================================================================================== + * ========= FUNZIONI RELATIVE ALLA SCADENZA + * =========================================== + * ===================================================================================================================== + */ + + /** + * Funzione che restituisce il numero fattura successivo per l'inserimento di una nuova fattura + * in base alla data scelta + * + * @param string $data (YYYY-mm-dd) + * @return int $num + */ + public function getNumFatturaSucc($data,$serie = null) + { + $num = $this->_genericModel->getNumFatturaSucc($data,$serie); + if ($num == NULL || $num == '' || $num == 0 || $num == FALSE) + return 1; + return $num; + } + + /** + * Funzione che restituisce il numero fattura successivo per l'inserimento di una nuova fattura + * in base alla data scelta + * @return int $num + */ + public function getProgressivoInvioSucc() + { + + $lastProgressivo = strtoupper($this->_genericModel->getLastProgressivoInvio()); + + if(!$lastProgressivo) $lastProgressivo = $this->_configs->get('lettera_progressivo_invio'); + + $pad = 5; + + $char = preg_replace("/[0-9]/",'',$lastProgressivo); + if(strlen($char) > 0) $pad -= strlen($char); + + $num = preg_replace("/[A-Za-z]/",'',$lastProgressivo); + + $num = intval($num); + if (!$num) $num = 0; + + $maxNum = intval(str_repeat("9", $pad)); + + $num += 1; + if($num > $maxNum){ + //Incremento dell'ultimo carattere + if(!$char) + $char = 'A'; + else + ++$char; + + $pad = 5 - strlen($char); + $num = 1; + } + + $num = str_pad($num, $pad, "0", STR_PAD_LEFT); + if($pad < 5) $num = $char.$num; + + return $num; + } + + public function formattaNumeroFatturaXml($numero, $decimali = 2) + { + if ($decimali < 2) $decimali = 2; + return number_format($numero, $decimali, '.', ''); + } + + /** + * Funzione di validazione di una partita iva + * @param $pi + * @return string + */ + public function ControllaPIVA($pi) + { + if ($pi === '') + return ''; + if (strlen($pi) != 11) + return "La lunghezza della partita IVA non è\n" . "corretta: la partita IVA dovrebbe essere lunga\n" . "esattamente 11 caratteri.\n"; + if (preg_match("/^[0-9]+\$/", $pi) != 1) + return "La partita IVA contiene dei caratteri non ammessi:\n" . "la partita IVA dovrebbe contenere solo cifre.\n"; + $s = 0; + for ($i = 0; $i <= 9; $i += 2) + $s += ord($pi[$i]) - ord('0'); + for ($i = 1; $i <= 9; $i += 2) { + $c = 2 * (ord($pi[$i]) - ord('0')); + if ($c > 9) + $c = $c - 9; + $s += $c; + } + if ((10 - $s % 10) % 10 != ord($pi[10]) - ord('0')) + return "La partita IVA non è valida:\n" . "il codice di controllo non corrisponde."; + return ''; + } + + /** + * @param $value + * @return string + * Funzione ricorsiva per codificare un array di valori in Json in modo sicuro comreso i caratteri utf-8 + */ + public function safeJsonEncode($value) + { + if (version_compare(PHP_VERSION, '5.4.0') >= 0) { + $encoded = json_encode($value,JSON_PRETTY_PRINT); + } else { + $encoded = json_encode($value); + } + switch (json_last_error()) { + case JSON_ERROR_NONE: + return $encoded; + case JSON_ERROR_DEPTH: + return 'Maximum stack depth exceeded'; + case JSON_ERROR_STATE_MISMATCH: + return 'Underflow or the modes mismatch'; + case JSON_ERROR_CTRL_CHAR: + return 'Unexpected control character found'; + case JSON_ERROR_SYNTAX: + return 'Syntax error, malformed JSON'; + case JSON_ERROR_UTF8: + $clean = $this->utf8ize($value); + return $this->safeJsonEncode($clean); + default: + return 'Unknown error'; + } + } + + /** + * @param $value + * @return mixed|string + * Funzione ricorsiva per convertire in modo sicuro compreso i caratetteri utf-8 dal formato Json + */ + public function safeJsonDecode($value) + { + if (version_compare(PHP_VERSION, '5.4.0') >= 0) { + $encoded = json_decode($value,JSON_PRETTY_PRINT); + } else { + $encoded = json_decode($value); + } + switch (json_last_error()) { + case JSON_ERROR_NONE: + return $encoded; + case JSON_ERROR_DEPTH: + return 'Maximum stack depth exceeded'; + case JSON_ERROR_STATE_MISMATCH: + return 'Underflow or the modes mismatch'; + case JSON_ERROR_CTRL_CHAR: + return 'Unexpected control character found'; + case JSON_ERROR_SYNTAX: + return 'Syntax error, malformed JSON'; + case JSON_ERROR_UTF8: + $clean = $this->utf8decodize($value); + return $this->safeJsonDecode($clean); + default: + return 'Unknown error'; + } + } + + /** + * @param $mixed + * @return array|string + * Funzione ricorsiva per codificare un array di valori in utf-8 + */ + public function utf8ize($mixed) + { + if (is_array($mixed)) { + foreach ($mixed as $key => $value) { + $mixed[$key] = $this->utf8ize($value); + } + } else if (is_string($mixed)) { + return utf8_encode($mixed); + } + return $mixed; + } + + /** + * @param $mixed + * @return array|string + * Funzione ricorsiva per decodificare un array di valori in utf-8 + */ + public function utf8decodize($mixed) + { + if (is_array($mixed)) { + foreach ($mixed as $key => $value) { + $mixed[$key] = $this->utf8decodize($value); + } + } else if (is_string($mixed)) { + return utf8_decode($mixed); + } + return $mixed; + } + + /** + * @param $array + * @param $key + * @return array Questa funzione passato un array lo restituisce ragruppato per la chiave desiderata + */ + function groupArrayByKey($array, $key) { + $return = array(); + foreach($array as $val) { + $return[$val[$key]][] = $val; + } + return $return; + } + + } diff --git a/library/Helpers/Action/Image.php b/library/Helpers/Action/Image.php new file mode 100644 index 0000000..a92713a --- /dev/null +++ b/library/Helpers/Action/Image.php @@ -0,0 +1,245 @@ +saveImage($CurWidth, $CurHeight, $CreatedImage, $DestFolder, $Quality, $ImageType)) { + + /* + We have succesfully resized and created thumbnail image + We can now output image to user's browser or store information in the database + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
Thumbnail
Resized Image
';*/ + + } else { + return FALSE; //output error + } + + return TRUE; + } + + // This function will proportionally resize image + public function resizeImage($CurWidth, $CurHeight, $MaxSize, $DestFolder, $SrcImage, $Quality, $ImageType) + { + //Check Image size is not 0 + if ($CurWidth <= 0 || $CurHeight <= 0) { + return FALSE; + } + //Construct a proportional size of new image + $ImageScale = min($MaxSize / $CurWidth, $MaxSize / $CurHeight); + $NewWidth = ceil($ImageScale * $CurWidth); + $NewHeight = ceil($ImageScale * $CurHeight); + $NewCanves = imagecreatetruecolor($NewWidth, $NewHeight); + // Resize Image + if (imagecopyresampled($NewCanves, $SrcImage, 0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight)) { + switch (strtolower($ImageType)) { + case 'image/png': + imagepng($NewCanves, $DestFolder); + break; + case 'image/gif': + imagegif($NewCanves, $DestFolder); + break; + case 'image/jpeg': + case 'image/pjpeg': + imagejpeg($NewCanves, $DestFolder, $Quality); + break; + default: + return FALSE; + } + //Destroy image, frees memory + if (is_resource($NewCanves)) { + imagedestroy($NewCanves); + } + + return TRUE; + } + + } + + //This function corps image to create exact square images, no matter what its original size! + public function cropImage($CurWidth, $CurHeight, $iSize, $DestFolder, $SrcImage, $Quality, $ImageType) + { + //Check Image size is not 0 + if ($CurWidth <= 0 || $CurHeight <= 0) { + return FALSE; + } + //abeautifulsite.net has excellent article about "Cropping an Image to Make Square bit.ly/1gTwXW9 + if ($CurWidth > $CurHeight) { + $y_offset = 0; + $x_offset = ($CurWidth - $CurHeight) / 2; + $square_size = $CurWidth - ($x_offset * 2); + } else { + $x_offset = 0; + $y_offset = ($CurHeight - $CurWidth) / 2; + $square_size = $CurHeight - ($y_offset * 2); + } + $NewCanves = imagecreatetruecolor($iSize, $iSize); + if (imagecopyresampled($NewCanves, $SrcImage, 0, 0, $x_offset, $y_offset, $iSize, $iSize, $square_size, $square_size)) { + switch (strtolower($ImageType)) { + case 'image/png': + imagepng($NewCanves, $DestFolder); + break; + case 'image/gif': + imagegif($NewCanves, $DestFolder); + break; + case 'image/jpeg': + case 'image/pjpeg': + imagejpeg($NewCanves, $DestFolder, $Quality); + break; + default: + return FALSE; + } + //Destroy image, frees memory + if (is_resource($NewCanves)) { + imagedestroy($NewCanves); + } + + return TRUE; + + } + + } + + public function saveImage($CurWidth, $CurHeight, $srcImage, $DestFolder, $Quality, $ImageType) + { + //Check Image size is not 0 + if ($CurWidth <= 0 || $CurHeight <= 0) { + return FALSE; + } + + $NewCanves = $srcImage; + + switch (strtolower($ImageType)) { + case 'image/png': + imagesavealpha($NewCanves, true); + $color = imagecolorallocatealpha($NewCanves, 0, 0, 0, 127); + imagefill($NewCanves, 0, 0, $color); + imagepng($NewCanves, $DestFolder); + break; + case 'image/gif': + imagegif($NewCanves, $DestFolder); + break; + case 'image/jpeg': + case 'image/pjpeg': + imagejpeg($NewCanves, $DestFolder, $Quality); + break; + default: + return FALSE; + + } + //Destroy image, frees memory + if (is_resource($NewCanves)) { + imagedestroy($NewCanves); + } + + return TRUE; + + } + + /** + * Funzione che passati i valori esegue l'operazione relativa in base all'analisi dei file attualmente presenti + * + * @param $inputFileName + * @param $formImageName + * @param $oldImageRecord + * @param $imagePath + * @param $nomeFile + * @param bool|true $randomizeImageName + * + * @return mixed|string + */ + public function image_operation($inputFileName, $formImageName, $oldImageRecord, $imagePath, $nomeFile, $randomizeImageName = true) + { + + //Controllo che il nome del file sia valido + if (!empty($_FILES[$inputFileName]) && $_FILES[$inputFileName]['name'] != '') { + if($randomizeImageName){ + $nomeFile = time() ."_". str_replace(' ', '-', strtolower($nomeFile)); + }else{ + $nomeFile = str_replace(' ', '-', strtolower($nomeFile)); + } + } + + //Vedo che operazione eseguire sul file immagine memorizzato nel file system + if (!empty($_FILES[$inputFileName]) && $nomeFile != '') { + if ($oldImageRecord != null) { //AGGIORNAMENTO + if ($oldImageRecord[$formImageName] != '' && file_exists($imagePath . $oldImageRecord[$formImageName])) { + unlink($imagePath . $oldImageRecord[$formImageName]); //Elimina la vecchia precendente dal file system + } + } + if (!$this->direct($imagePath, $inputFileName,$nomeFile)) { //Memorizza la nuova immagine + return 'error'; + } + } elseif (empty($_FILES[$inputFileName]) && $nomeFile == '') { //CANCELLO SOLO L'IMMAGINE + if ($oldImageRecord != null) { + if ($oldImageRecord[$formImageName] != '' && file_exists($imagePath . $oldImageRecord[$formImageName])) { + unlink($imagePath . $oldImageRecord[$formImageName]); + } + } + } + + return (!$nomeFile) ? null : $nomeFile; + } + + /** + * Controlla che l'immagine esiste e nel caso posistivo la elimina del fyle system + * @param $nomeFile + * @param $path + */ + public function deleteImage($nomeFile, $path) + { + if (file_exists($path . $nomeFile)) { + @unlink($path . $nomeFile); + } + } + + } diff --git a/library/Helpers/Action/MongoDateFunctions.php b/library/Helpers/Action/MongoDateFunctions.php new file mode 100644 index 0000000..7b3eb7e --- /dev/null +++ b/library/Helpers/Action/MongoDateFunctions.php @@ -0,0 +1,38 @@ + 'dd/mm/yyyy HH:ii:ss')); + $dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy')); + $dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd')); + + if ($dateValidatorSlashWithTime->isValid($data)) { + $data = explode(' ', $data); + $dataString = implode('-', array_reverse(explode("/", $data[0]))) . " " . $data[1]; + } else if ($dateValidatorSlash->isValid($data)) { + $dataString = implode('-', array_reverse(explode("/", $data))) . $this->checkTimeString($data); + } else if ($dateValidatorTrattino->isValid($data)) { + $dataString = $data . $this->checkTimeString($data); + } else { + return null; + } + + $orig_date = new DateTime($dataString); + return new MongoDB\BSON\UTCDateTime($orig_date->getTimestamp() * 1000); + } + + private function checkTimeString($data) + { + return (preg_match('/[0-9]{2}:[0-9]{2}:[0-9]{2}/', $data)) ? '' : " 00:00:00"; + } + + +} diff --git a/library/Helpers/Action/MongoFilterFunctions.php b/library/Helpers/Action/MongoFilterFunctions.php new file mode 100644 index 0000000..b6ed193 --- /dev/null +++ b/library/Helpers/Action/MongoFilterFunctions.php @@ -0,0 +1,255 @@ +_dateHelper = $this->getActionController()->getHelper('ExtractData'); + $this->_mongoDate = $this->getActionController()->getHelper('MongoDateFunctions'); + $this->_filterOperators = array('>', '<', '>=', '<=', '=', 'ISNULL', 'NONULL'); + } + + /** + * Questa funzione ricevuti i parametri restitisce l'array contenente tutti i valori per eseguire la ricerca da passare alla query + * @param $filter + * @param bool|false $analizzaOperatori + * @return array + */ + public function direct($filter, $analizzaOperatori = false) + { + + if (is_null($filter)) return null; + + if ($analizzaOperatori) { + $filter = $this->getFilterParamsWithOperator($filter); + } + + $where = array(); + + $filter = $this->cleanParams($filter, false); + + foreach ($filter as $key => $val) { + + if (substr($key, -2) == 'OP') continue; + + $nomeCampo = explode('-', $key)[0]; + $nomeCampo = str_replace('#', '.', $nomeCampo); + + if (array_key_exists($key . 'OP', $filter)) + $op = $filter[$key . 'OP']; + else + $op = 'EQUAL'; + + switch ($op) { + case'ICHECK': + $where[$nomeCampo] = ($val == 'on') ? true : false; + break; + case'EQUAL': + $where[$nomeCampo] = $val; + break; + case'NOTEQUAL': + $where[$nomeCampo] = ['$ne' => $val]; + break; + case'MIN': + $where[$nomeCampo] = ['$lt' => intval($val)]; + break; + case'MAX': + $where[$nomeCampo] = ['$gt' => intval($val)]; + break; + case'EQUALMIN': + $where[$nomeCampo] = ['$lte' => intval($val)]; + break; + case'EQUALMAX': + $where[$nomeCampo] = ['$gte' => intval($val)]; + break; + case'LIKE': + //$where[$nomeCampo] = ['$regex' => new MongoDB\BSON\Regex("$val",'i')]; + $where[$nomeCampo] = ['$regex' => $val, '$options' => 'i']; + break; + case'LIKEPRE': + $where[$nomeCampo] = ['$regex' => "^$val", '$options' => 'i']; + break; + case'LIKEPOST': + $where[$nomeCampo] = ['$regex' => "$val$", '$options' => 'i']; + break; + case'DATEEQUAL': + $where[$nomeCampo] = $this->_mongoDate->direct(trim($val) . $this->checkTimeString($val)); + break; + case'DATEEQUALMIN': //Inserisco anche l'ora perchè cosi le query funzionano sia sui i tipi "date" che "datetime" + $where[$nomeCampo] = array('$gte' => $this->_mongoDate->direct(trim($val) . $this->checkTimeString($val))); + break; + case'DATEEQUALMAX': + $where[$nomeCampo] = array('$lte' => $this->_mongoDate->direct(trim($val) . $this->checkTimeString($val, true))); + break; + case'DATEMIN': + $where[$nomeCampo] = array('$gt' => $this->_mongoDate->direct(trim($val) . $this->checkTimeString($val))); + break; + case'DATEMAX': + $where[$nomeCampo] = array('$lt' => $this->_mongoDate->direct(trim($val) . $this->checkTimeString($val, true))); + break; + case'DATERANGE': + $val = explode('|', $val); + if ((trim($val[0]) && trim($val[0]) != 'undefined') && (trim($val[1]) && trim($val[1]) != 'undefined')) { + $where[$nomeCampo] = array( + '$gte' => $this->_mongoDate->direct(trim($val[0]) . $this->checkTimeString($val[0])), + '$lte' => $this->_mongoDate->direct(trim($val[1]) . $this->checkTimeString($val[1], true)) + ); + } + break; + case'ISNULL': + $where[$nomeCampo] = ['$exists' => 0]; + break; + case'NONULL': + $where[$nomeCampo] = ['$exists' => 1]; + break; + default: + throw new Exception("'$op' non è un operatore di filtro valido"); + break; + } + } + + //Salvo i dati della where in modo da poterli riutilizzare in caso di necessità durante la chiamata + if (count($where) > 0) { + Zend_Registry::set(App_Model_Mongo_Client::WHERE_MONGO_REG_NAME, $where); + } + + return $where; + } + + /** + * Questa funzione riceve i parametri di ricerca in ingresso gli analizza per applicare eventuali operatori applicati + * @param $params + * @return array + */ + public function getFilterParamsWithOperator($params) + { + + $params = $this->cleanParams($params); + + $newParams = array(); + + foreach ($params as $key => $val) { + if (substr($key, -2) == 'OP') continue; + if (substr($key, -9) == 'OPDEFAULT') continue; + if (!array_key_exists($key . "OP", $params)) { + + $op = $this->findOperator($val); + switch ($op) { + case'>=': + $newParams[$key . 'OP'] = 'EQUALMAX'; + $newParams[$key] = trim(substr($val, 2)); + break; + case'<=': + $newParams[$key . 'OP'] = 'EQUALMIN'; + $newParams[$key] = trim(substr($val, 2)); + break; + case'<': + $newParams[$key . 'OP'] = 'MIN'; + $newParams[$key] = trim(substr($val, 1)); + break; + case'>': + $newParams[$key . 'OP'] = 'MAX'; + $newParams[$key] = trim(substr($val, 1)); + break; + case'=': + $newParams[$key . 'OP'] = 'EQUAL'; + $newParams[$key] = trim(substr($val, 1)); + break; + case'<>': + $newParams[$key . 'OP'] = 'NOTEQUAL'; + $newParams[$key] = trim(substr($val, 2)); + break; + case'ISNULL': + $newParams[$key . 'OP'] = 'ISNULL'; + $newParams[$key] = ""; + break; + case'NONULL': + $newParams[$key . 'OP'] = 'NONULL'; + $newParams[$key] = ""; + break; + default: + if (isset($params[$key . 'OPDEFAULT'])) { + $newParams[$key . 'OP'] = $params[$key . 'OPDEFAULT']; + } else { + $newParams[$key . 'OP'] = 'EQUAL'; + } + $newParams[$key] = $val; + break; + } + + } else { + $newParams[$key] = $val; + $newParams[$key . "OP"] = $params[$key . "OP"]; + } + } + + return $newParams; + + } + + /** + * Funzione che passata una stringa cerca se viene applicato un operatore e lo restuisce + * @param $val + * @return string + */ + private function findOperator($val) + { + $op = trim(explode(' ', $val)[0]); + if (in_array($op, $this->_filterOperators)) return $op; + + $op = trim(substr($val, 0, 6)); + if (in_array($op, $this->_filterOperators)) return $op; + + $op = $op = trim(substr($val, 0, 2)); + if (in_array($op, $this->_filterOperators)) return $op; + + $op = $op = trim(substr($val, 0, 1)); + if (in_array($op, $this->_filterOperators)) return $op; + + return 'EQUAL'; + } + + public function cleanParams($params, $removeEmptyValue = true, $removeOperator = false) + { + unset($params['controller']); + unset($params['module']); + unset($params['action']); + unset($params['method']); + unset($params['page']); + unset($params['count']); + unset($params['order']); + unset($params['tipoOrder']); + unset($params['filtrato']); + unset($params['orwhere']); + unset($params['reset']); + unset($params['iddet']); + unset($params['select']); + + if ($removeEmptyValue) { + //Elimino i campi vuoti tranne le select vuote + foreach ($params as $key => $val) { + if (empty($val) && $val !== '0') unset($params[$key]); + + //Elimino anche i paramtri di operazione + if ($removeOperator && preg_match('/OP$/', $key)) { + unset($params[$key]); + } + } + } + + return $params; + } + + private function checkTimeString($data, $timeEnd = false) + { + $timeString = ($timeEnd) ? ' 23:59:59' : ' 00:00:00'; + return (preg_match('/[0-9]{2}:[0-9]{2}:[0-9]{2}/', $data)) ? '' : $timeString; + } + + +} diff --git a/library/Helpers/Action/Pdf.php b/library/Helpers/Action/Pdf.php new file mode 100644 index 0000000..a032f3c --- /dev/null +++ b/library/Helpers/Action/Pdf.php @@ -0,0 +1,152 @@ + _dataHelper = $this -> getActionController() -> getHelper('ExtractData'); + } + + public function creaPdf($row,$articolo, $filename) { + ///////////////////////////////////////////////////////// + + // operazioni preliminari fattorizzate in questo punto del codice + + ///////////////////////////////////////////////////////// + + $font = "Arial"; + + $font_size = 10; + + $pdf = new Fpdf(); + + $pdf -> AddPage(); + + $pdf -> SetFillColor(238, 238, 238); + + ///////////////////////////////////////////////////////// + + // Logo aziendale + + ///////////////////////////////////////////////////////// + + // col seguente codice siamo in grado di eseguire correttamente sia girando come ADMIN che come Utente (sia in modalità acquisto che reinvio-fatture) + try{ + if ($row['nome_logo'] && file_exists("public/front/img/".$row['nome_logo'])) { + if ($row['nome_logo'] == 'IntestazioneFattura.jpg') { + $pdf->Image("public/front/img/" . $row['nome_logo'], 10, 5, 80, 60); + } else { + $pdf->Image("public/front/img/" . $row['nome_logo'], 10, 10, 80, 60); + } + }else{ + $pdf -> Image("public/front/img/IntestazioneFattura2.jpg", 10, 10, 80, 60); + } + }catch(Exception $e){ + $pdf -> Image("public/front/img/IntestazioneFattura2.jpg", 10, 10, 80, 60); + } + + + ///////////////////////////////////////////////////////// + + // recupero dati + + ///////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////// + + // FINE + + ///////////////////////////////////////////////////////// + + $pdf -> Output($filename, "F"); + @chmod(0777, $filename); + + return $filename; + } + + private function printEuro($x) { + setlocale(LC_MONETARY, 'it_IT'); + $x = $this -> money_format('%.2n', $x + 0); + $x = str_replace("EUR", EURO, $x); + $x = trim($x); + return $x; + } + + private function money_format($format, $number) { + $regex = '/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?' . '(?:#([0-9]+))?(?:\.([0-9]+))?([in%])/'; + if (setlocale(LC_MONETARY, 0) == 'C') { + setlocale(LC_MONETARY, ''); + } + $locale = localeconv(); + preg_match_all($regex, $format, $matches, PREG_SET_ORDER); + foreach ($matches as $fmatch) { + $value = floatval($number); + $flags = array('fillchar' => preg_match('/\=(.)/', $fmatch[1], $match) ? $match[1] : ' ', 'nogroup' => preg_match('/\^/', $fmatch[1]) > 0, 'usesignal' => preg_match('/\+|\(/', $fmatch[1], $match) ? $match[0] : '+', 'nosimbol' => preg_match('/\!/', $fmatch[1]) > 0, 'isleft' => preg_match('/\-/', $fmatch[1]) > 0); + $width = trim($fmatch[2]) ? (int)$fmatch[2] : 0; + $left = trim($fmatch[3]) ? (int)$fmatch[3] : 0; + $right = trim($fmatch[4]) ? (int)$fmatch[4] : $locale['int_frac_digits']; + $conversion = $fmatch[5]; + + $positive = true; + if ($value < 0) { + $positive = false; + $value *= -1; + } + $letter = $positive ? 'p' : 'n'; + + $prefix = $suffix = $cprefix = $csuffix = $signal = ''; + + $signal = $positive ? $locale['positive_sign'] : $locale['negative_sign']; + switch (true) { + case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+' : + $prefix = $signal; + break; + case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+' : + $suffix = $signal; + break; + case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+' : + $cprefix = $signal; + break; + case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+' : + $csuffix = $signal; + break; + case $flags['usesignal'] == '(' : + case $locale["{$letter}_sign_posn"] == 0 : + $prefix = '('; + $suffix = ')'; + break; + } + if (!$flags['nosimbol']) { + $currency = $cprefix . ($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) . $csuffix; + } else { + $currency = ''; + } + $space = $locale["{$letter}_sep_by_space"] ? ' ' : ''; + + $value = number_format($value, $right, $locale['mon_decimal_point'], $flags['nogroup'] ? '' : $locale['mon_thousands_sep']); + $value = @explode($locale['mon_decimal_point'], $value); + + $n = strlen($prefix) + strlen($currency) + strlen($value[0]); + if ($left > 0 && $left > $n) { + $value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0]; + } + $value = implode($locale['mon_decimal_point'], $value); + if ($locale["{$letter}_cs_precedes"]) { + $value = $prefix . $currency . $space . $value . $suffix; + } else { + $value = $prefix . $value . $space . $currency . $suffix; + } + if ($width > 0) { + $value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ? STR_PAD_RIGHT : STR_PAD_LEFT); + } + + $format = str_replace($fmatch[0], $value, $format); + } + return $format; + } + +} diff --git a/library/Helpers/View/AddressFormat.php b/library/Helpers/View/AddressFormat.php new file mode 100644 index 0000000..fdb2e80 --- /dev/null +++ b/library/Helpers/View/AddressFormat.php @@ -0,0 +1,33 @@ + 0){ + $str.= utf8_encode($indirizzo) . '
'; + } + + if(strlen(trim($comune)) > 0){ + $str .= utf8_encode($comune); + } + + if(strlen(trim($cap)) > 0){ + $str .= ' - '.$cap; + } + + if(strlen(trim($provincia)) > 0){ + $str .= ' ('.utf8_encode($provincia).')'; + } + + if(strlen(trim($regione)) > 0){ + $str .= ' - '.utf8_encode($regione); + } + + return $str; + } + +} diff --git a/library/Helpers/View/AllowedIp.php b/library/Helpers/View/AllowedIp.php new file mode 100644 index 0000000..006b24b --- /dev/null +++ b/library/Helpers/View/AllowedIp.php @@ -0,0 +1,16 @@ +_ipManager) { + $this->_ipManager = new App_Service_IpManager(); + } + + return $this->_ipManager->allowedIp(); + } + +} diff --git a/library/Helpers/View/AuthInfo.php b/library/Helpers/View/AuthInfo.php new file mode 100644 index 0000000..5628f0b --- /dev/null +++ b/library/Helpers/View/AuthInfo.php @@ -0,0 +1,33 @@ +_authService) { + $this->_authService = new App_Service_Auth(); + } + if (null === $info) { + return $this; + } + if (false === $this->isLoggedIn()) { + return null; + } + return $this->_authService->getIdentity()->$info; + } + + public function isLoggedIn() + { + return $this->_authService->getAuth()->hasIdentity(); + } + + public function checkPermission($resourceName) + { + if ($this->isLoggedIn()) { + return $this->_authService->checkPermission($resourceName); + } + return false; + } +} diff --git a/library/Helpers/View/CleanFiltersParam.php b/library/Helpers/View/CleanFiltersParam.php new file mode 100644 index 0000000..46d99de --- /dev/null +++ b/library/Helpers/View/CleanFiltersParam.php @@ -0,0 +1,34 @@ + $val) { + if (empty($val) && $val !== '0') unset($params[$key]); + + //Elimino anche i paramtri di operazione + if (preg_match('/OP$/',$key)){ + unset($params[$key]); + } + } + } + + return $params; + } + +} diff --git a/library/Helpers/View/Config.php b/library/Helpers/View/Config.php new file mode 100644 index 0000000..41f4209 --- /dev/null +++ b/library/Helpers/View/Config.php @@ -0,0 +1,18 @@ +_configService) { + $this->_configService = new App_Service_ConfigManager(); + } + if (null === $info) { + return $this; + } + return $this->_configService->get($info); + } + +} diff --git a/library/Helpers/View/Currency.php b/library/Helpers/View/Currency.php new file mode 100644 index 0000000..4faeea6 --- /dev/null +++ b/library/Helpers/View/Currency.php @@ -0,0 +1,12 @@ +toCurrency($number); + } + +} diff --git a/library/Helpers/View/EncodeText.php b/library/Helpers/View/EncodeText.php new file mode 100644 index 0000000..bcfdc2f --- /dev/null +++ b/library/Helpers/View/EncodeText.php @@ -0,0 +1,17 @@ +",utf8_encode($string)); + } + +} diff --git a/library/Helpers/View/ExtractData.php b/library/Helpers/View/ExtractData.php new file mode 100644 index 0000000..624ce2a --- /dev/null +++ b/library/Helpers/View/ExtractData.php @@ -0,0 +1,66 @@ + format($format); + } + +} diff --git a/library/Helpers/View/FormatData.php b/library/Helpers/View/FormatData.php new file mode 100644 index 0000000..5970794 --- /dev/null +++ b/library/Helpers/View/FormatData.php @@ -0,0 +1,10 @@ + format($format); + } + +} diff --git a/library/Helpers/View/GetDomainData.php b/library/Helpers/View/GetDomainData.php new file mode 100644 index 0000000..35c3c53 --- /dev/null +++ b/library/Helpers/View/GetDomainData.php @@ -0,0 +1,24 @@ +'.$pattern.'', $text); + } + } + return $text; + } + +} diff --git a/library/Helpers/View/SlashesText.php b/library/Helpers/View/SlashesText.php new file mode 100644 index 0000000..ad4a4a1 --- /dev/null +++ b/library/Helpers/View/SlashesText.php @@ -0,0 +1,17 @@ +_service) { + $this->_service = new App_Service_VariabiliSito(); + } + if (null === $info) { + return $this; + } + return $this->_service->get($info); + } + +} diff --git a/library/Helpers/View/WrapText.php b/library/Helpers/View/WrapText.php new file mode 100644 index 0000000..dd22af9 --- /dev/null +++ b/library/Helpers/View/WrapText.php @@ -0,0 +1,121 @@ +$lenght){ + return $this->truncateHtml($string,$lenght); + } + + return $string; + } + + /** + * truncateHtml can truncate a string up to a number of characters while preserving whole words and HTML tags + * + * @param string $text String to truncate. + * @param integer $length Length of returned string, including ellipsis. + * @param string $ending Ending to be appended to the trimmed string. + * @param boolean $exact If false, $text will not be cut mid-word + * @param boolean $considerHtml If true, HTML tags would be handled correctly + * + * @return string Trimmed string. + */ + function truncateHtml($text, $length = 100, $ending = '...', $exact = false, $considerHtml = true) { + if ($considerHtml) { + // if the plain text is shorter than the maximum length, return the whole text + if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) { + return $text; + } + // splits all html-tags to scanable lines + preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER); + $total_length = strlen($ending); + $open_tags = array(); + $truncate = ''; + foreach ($lines as $line_matchings) { + // if there is any html-tag in this line, handle it and add it (uncounted) to the output + if (!empty($line_matchings[1])) { + // if it's an "empty element" with or without xhtml-conform closing slash + if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) { + // do nothing + // if tag is a closing tag + } else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) { + // delete tag from $open_tags list + $pos = array_search($tag_matchings[1], $open_tags); + if ($pos !== false) { + unset($open_tags[$pos]); + } + // if tag is an opening tag + } else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) { + // add tag to the beginning of $open_tags list + array_unshift($open_tags, strtolower($tag_matchings[1])); + } + // add html-tag to $truncate'd text + $truncate .= $line_matchings[1]; + } + // calculate the length of the plain text part of the line; handle entities as one character + $content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2])); + if ($total_length+$content_length> $length) { + // the number of characters which are left + $left = $length - $total_length; + $entities_length = 0; + // search for html entities + if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) { + // calculate the real length of all entities in the legal range + foreach ($entities[0] as $entity) { + if ($entity[1]+1-$entities_length <= $left) { + $left--; + $entities_length += strlen($entity[0]); + } else { + // no more characters left + break; + } + } + } + $truncate .= substr($line_matchings[2], 0, $left+$entities_length); + // maximum lenght is reached, so get off the loop + break; + } else { + $truncate .= $line_matchings[2]; + $total_length += $content_length; + }// if the maximum length is reached, get off the loop + if($total_length>= $length) { + break; + } + } + } else { + if (strlen($text) <= $length) { + return $text; + } else { + $truncate = substr($text, 0, $length - strlen($ending)); + } + } + // if the words shouldn't be cut in the middle... + if (!$exact) { + // ...search the last occurance of a space... + $spacepos = strrpos($truncate, ' '); + if (isset($spacepos)) { + // ...and cut the text in this position + $truncate = substr($truncate, 0, $spacepos); + } + } + // add the defined ending to the text + $truncate .= $ending; + if($considerHtml) { + // close all unclosed html-tags + foreach ($open_tags as $tag) { + $truncate .= ''; + } + } + return $truncate; + } + +} diff --git a/log/log.txt b/log/log.txt new file mode 100644 index 0000000..e69de29 diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..7a9766d --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,6 @@ +RewriteEngine On +RewriteCond %{REQUEST_FILENAME} -s [OR] +RewriteCond %{REQUEST_FILENAME} -l [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^.*$ - [NC,L] +RewriteRule ^.*$ index.php [NC,L] diff --git a/public/admin/css/custom.css b/public/admin/css/custom.css new file mode 100644 index 0000000..de09f49 --- /dev/null +++ b/public/admin/css/custom.css @@ -0,0 +1,1198 @@ +body { + font-size: 15px; +} + +.form-control { + font-size: 0.95rem; +} + +.text-sm .navbar { + font-size: 16px !important; + height: 50px; + border-bottom: 0; +} +.text-sm .btn-group .btn { + font-size: 1rem !important; +} +.text-sm .brand-link { + font-size: 1rem; +} + +.bg-brand { + background-color: #007BFF !important; +} + +a.bg-brand:hover, a.bg-brand:focus, +button.bg-brand:hover, +button.bg-brand:focus { + background-color: #0062cc !important; +} + +.alert-brand { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} +.alert-brand hr { + border-top-color: #9fcdff; +} +.alert-brand .alert-link { + color: #002752; +} + +.btn-brand { + color: #fff; + background-color: #007BFF; + border-color: #007BFF; +} +.btn-brand:hover { + color: #fff; + background-color: #0062cc; + border-color: #1a88ff; +} +.btn-brand:focus, .btn-brand.focus { + color: #fff; + background-color: #0062cc; + border-color: #1a88ff; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.btn-brand.disabled, .btn-brand:disabled { + color: #fff; + background-color: #007BFF; + border-color: #007BFF; +} +.btn-brand:not(:disabled):not(.disabled):active, .btn-brand:not(:disabled):not(.disabled).active, .show > .btn-brand.dropdown-toggle { + color: #fff; + background-color: #3395ff; + border-color: #003166; +} +.btn-brand:not(:disabled):not(.disabled):active:focus, .btn-brand:not(:disabled):not(.disabled).active:focus, .show > .btn-brand.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.m0, .no-margin { + margin: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.m-5 { + margin: 5px !important; +} + +.mr-5 { + margin-right: 5px !important; +} + +.ml-5 { + margin-left: 5px !important; +} + +.mt-5 { + margin-top: 5px !important; +} + +.mb-5 { + margin-bottom: 5px !important; +} + +.m-10 { + margin: 10px !important; +} + +.mr-10 { + margin-right: 10px !important; +} + +.ml-10 { + margin-left: 10px !important; +} + +.mt-10 { + margin-top: 10px !important; +} + +.mb-10 { + margin-bottom: 10px !important; +} + +.m-15 { + margin: 15px !important; +} + +.mr-15 { + margin-right: 15px !important; +} + +.ml-15 { + margin-left: 15px !important; +} + +.mt-15 { + margin-top: 15px !important; +} + +.mb-15 { + margin-bottom: 15px !important; +} + +.m-20 { + margin: 20px !important; +} + +.mr-20 { + margin-right: 20px !important; +} + +.ml-20 { + margin-left: 20px !important; +} + +.mt-20 { + margin-top: 20px !important; +} + +.mb-20 { + margin-bottom: 20px !important; +} + +.pd0, .no-padding { + padding: 0 !important; +} + +.pd-0 { + padding: 0 !important; +} + +.pdr-0 { + padding-right: 0 !important; +} + +.pdl-0 { + padding-left: 0 !important; +} + +.pdt-0 { + padding-top: 0 !important; +} + +.pdb-0 { + padding-bottom: 0 !important; +} + +.pd-5 { + padding: 5px !important; +} + +.pdr-5 { + padding-right: 5px !important; +} + +.pdl-5 { + padding-left: 5px !important; +} + +.pdt-5 { + padding-top: 5px !important; +} + +.pdb-5 { + padding-bottom: 5px !important; +} + +.pd-10 { + padding: 10px !important; +} + +.pdr-10 { + padding-right: 10px !important; +} + +.pdl-10 { + padding-left: 10px !important; +} + +.pdt-10 { + padding-top: 10px !important; +} + +.pdb-10 { + padding-bottom: 10px !important; +} + +.pd-15 { + padding: 15px !important; +} + +.pdr-15 { + padding-right: 15px !important; +} + +.pdl-15 { + padding-left: 15px !important; +} + +.pdt-15 { + padding-top: 15px !important; +} + +.pdb-15 { + padding-bottom: 15px !important; +} + +.pd-20 { + padding: 20px !important; +} + +.pdr-20 { + padding-right: 20px !important; +} + +.pdl-20 { + padding-left: 20px !important; +} + +.pdt-20 { + padding-top: 20px !important; +} + +.pdb-20 { + padding-bottom: 20px !important; +} + +/*------------------------------------------*/ +.no-border-top { + border-top: 0; +} + +.no-padding-right { + padding-right: 0; +} + +.no-padding-left { + padding-left: 0; +} + +.no-padding-left > input { + border-left: 0; +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +@media (min-width: 767px) { + .no-border-right-sm { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .no-border-top-sm { + border-top: 0; + } + + .no-border-r-l-sm { + border-radius: 0; + } + + .no-padding-l-sm { + padding-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .no-padding-l-sm input { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .no-padding-r-sm { + padding-right: 0; + } + .no-padding-r-sm input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .no-padding-r-l-sm { + padding-right: 0; + padding-left: 0; + } + .no-padding-r-l-sm input { + border-radius: 0; + } +} +.filtratiLabel { + font-size: 13px; + padding-right: 10px; + vertical-align: bottom; + margin-top: 19px; + display: block; +} + +hr.white { + border-top: 1px solid #FFF; +} +hr.dark { + border-top: 1px solid #333; +} +hr.light { + border-top: 1px solid #DDD; +} + +/*------------------------------------------*/ +.border-top-white { + border-top: 1px solid #FFF; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.border-bottom-white { + border-bottom: 1px solid #FFF; +} + +.border-right-white { + border-right: 1px solid #FFF; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.border-left-white { + border-left: 1px solid #FFF; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.sidebar-menu li.divider-md { + border-top: 3px solid #1a2226; +} + +.note-editor.note-frame { + border-radius: 0 !important; +} + +.logo-img { + position: absolute; + top: 0; + right: 15px; + max-height: 100px; +} + +.btn > .badge { + position: absolute; + top: -6px; + right: -4px; + font-size: 10px; + font-weight: 400; + z-index: 100; +} + +.main-footer { + padding: 10px 15px; +} + +section.content.list { + padding: 12px 0 0 0; +} + +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +::-webkit-scrollbar-thumb { + background: #888; +} + +::-webkit-scrollbar-thumb:hover { + background: #555; +} + +@media (max-width: 575.98px) { + .content-wrapper, .main-sidebar { + padding-top: 50px !important; + } + + .box-footer { + padding: 8px 3px !important; + } + + section.content.list { + padding: 0; + } + + section.content-header { + padding: 10px 15px 8px; + } +} +.dropdown-menu { + z-index: 1100 !important; + font-size: 0.9rem; + padding: 5px 0; +} + +.content-header > .breadcrumb.top0 { + top: 0; +} + +.sidebar-dark-brand .nav-sidebar > .nav-item > .nav-link.active { + background-color: #007BFF; + color: #fff; +} +.sidebar-dark-brand .nav-sidebar.nav-legacy > .nav-item > .nav-link.active { + border-color: #007BFF; +} + +.accent-brand .btn-link, +.accent-brand a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):not(.btn) { + color: #007BFF; +} +.accent-brand .btn-link:hover, +.accent-brand a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):not(.btn):hover { + color: #0056b3; +} +.accent-brand .dropdown-item:active, .accent-brand .dropdown-item.active { + background: #007BFF; + color: #fff; +} +.accent-brand .custom-control-input:checked ~ .custom-control-label::before { + background: #007BFF; + border-color: #004a99; +} +.accent-brand .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,"); +} +.accent-brand .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid), +.accent-brand .custom-select:focus, +.accent-brand .custom-control-input:focus:not(:checked) ~ .custom-control-label::before, +.accent-brand .custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; +} +.accent-brand .page-item .page-link { + color: #007BFF; +} +.accent-brand .page-item.active a, .accent-brand .page-item.active .page-link { + background-color: #007BFF; + border-color: #007BFF; + color: #fff; +} +.accent-brand .page-item.disabled a, .accent-brand .page-item.disabled .page-link { + background-color: #fff; + border-color: #dee2e6; + color: #6c757d; +} +.accent-brand [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link) { + color: #C2C7D0; +} +.accent-brand [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover { + color: #fff; +} +.accent-brand [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link) { + color: #343a40; +} +.accent-brand [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover { + color: #212529; +} + +[class*=accent-] a.btn-brand { + color: #fff; +} + +.bg-brand { + background-color: #007BFF !important; +} +.bg-brand, +.bg-brand > a { + color: #fff !important; +} +.bg-brand.btn:hover { + border-color: #0062cc; + color: #ececec; +} +.bg-brand.btn:not(:disabled):not(.disabled):active, .bg-brand.btn:not(:disabled):not(.disabled).active, .bg-brand.btn:active, .bg-brand.btn.active { + background-color: #0062cc !important; + border-color: #005cbf; + color: #fff; +} + +.navbar-dark-brand { + background-color: #007BFF; +} +.navbar-dark-brand .nav > li > a { + color: rgba(255, 255, 255, 0.8); +} +.navbar-dark-brand .nav > li > a:hover, +.navbar-dark-brand .nav > li > a:active, +.navbar-dark-brand .nav > li > a:focus, +.navbar-dark-brand .nav .open > a, +.navbar-dark-brand .nav .open > a:hover, +.navbar-dark-brand .nav .open > a:focus, +.navbar-dark-brand .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.navbar-dark-brand .sidebar-toggle { + color: rgba(255, 255, 255, 0.8); +} +.navbar-dark-brand .sidebar-toggle:hover, .navbar-dark-brand .sidebar-toggle:focus { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} + +.nav-item.dev-block { + margin-top: 6px !important; +} + +.card-brand:not(.card-outline) > .card-header { + background-color: #007BFF; +} +.card-brand:not(.card-outline) > .card-header, +.card-brand:not(.card-outline) > .card-header a { + color: #fff; +} +.card-brand:not(.card-outline) > .card-header a.active { + color: #212529; +} +.card-brand.card-outline { + border-top: 3px solid #007BFF; +} +.card-brand.card-outline-tabs > .card-header a:hover { + border-top: 3px solid #dee2e6; +} +.card-brand.card-outline-tabs > .card-header a.active { + border-top: 3px solid #007BFF; +} + +.bg-brand .btn-tool, +.bg-gradient-brand .btn-tool, +.card-brand:not(.card-outline) .btn-tool { + color: rgba(255, 255, 255, 0.8); +} +.bg-brand .btn-tool:hover, +.bg-gradient-brand .btn-tool:hover, +.card-brand:not(.card-outline) .btn-tool:hover { + color: #fff; +} + +.card.bg-brand .bootstrap-datetimepicker-widget .table td, +.card.bg-brand .bootstrap-datetimepicker-widget .table th, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget .table td, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget .table th { + border: none; +} +.card.bg-brand .bootstrap-datetimepicker-widget table thead tr:first-child th:hover, +.card.bg-brand .bootstrap-datetimepicker-widget table td.day:hover, +.card.bg-brand .bootstrap-datetimepicker-widget table td.hour:hover, +.card.bg-brand .bootstrap-datetimepicker-widget table td.minute:hover, +.card.bg-brand .bootstrap-datetimepicker-widget table td.second:hover, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table thead tr:first-child th:hover, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.day:hover, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.hour:hover, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.minute:hover, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.second:hover { + background: #0067d6; + color: #fff; +} +.card.bg-brand .bootstrap-datetimepicker-widget table td.today::before, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.today::before { + border-bottom-color: #fff; +} +.card.bg-brand .bootstrap-datetimepicker-widget table td.active, +.card.bg-brand .bootstrap-datetimepicker-widget table td.active:hover, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.active, +.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.active:hover { + background: #3395ff; + color: #fff; +} + +.card-brand.card-outline-tabs, .card-brand.card-outline { + border-top: 0 !important; +} +.card-brand.card-outline .card-header .nav-link.active { + color: #FFFFFF !important; + background: #007BFF; +} +.card-brand.card-outline.card-outline-tabs .card-header .nav-link.active { + color: inherit !important; + background: whitesmoke; + border-bottom-color: whitesmoke; +} +.card-brand.card-outline.card-outline-tabs .card-body { + background-color: whitesmoke; +} +.card-brand .card-header .nav-link { + color: #007BFF !important; +} + +.accordion-card { + box-shadow: none; + border: 1px solid #DDD; + border-radius: 4px; +} +.accordion-card.no-border { + border: 0; +} +.accordion-card.no-border-radius { + border-radius: 0; +} + +.delivery-card .card-header { + padding: 8px 4px; +} +.delivery-card .prodoti-list-item { + font-size: 13px; + color: #333333; +} +.delivery-card .riepilogo-list-item { + font-size: 14px; + color: #333333; +} +.delivery-card .totale-ordine { + margin-top: 5px; + font-weight: bold; +} +.delivery-card .metodo-pagamento { + color: #333333; +} + +.position-card { + margin-bottom: 0; + border-top: 1px solid #DDD; +} + +.table-border { + border: 1px solid #ddd; +} + +th[data-ord] { + cursor: pointer; +} + +.content.list { + padding: 0; +} + +.box-header { + margin-bottom: 8px; + margin-right: 8px; + margin-left: 8px; +} + +.floatThead-container { + overflow-x: inherit !important; +} + +.table-border.flot-header { + font-size: 0.95rem; + border-left: 0; + border-right: 0; +} +.table-border.flot-header tbody tr { + /*&:hover{ + td{ + background: transparent; + } + }*/ +} +.table-border.flot-header tbody tr td { + border-top: 1px solid #DDD; + vertical-align: middle; + padding: 5px; +} +.table-border.flot-header th { + background-color: #FFF; + border-bottom: 1px solid #DDD; +} + +.table-wrapper { + height: 729px; + transition: height ease 0.7s; +} + +.table-responsive { + padding: 0; +} + +.table-border td, .table-border th { + border-bottom: 1px solid #ddd; +} + +table.table-popover { + font-size: 12px; +} + +table { + margin-bottom: 0 !important; +} + +.table > thead > tr > th { + border-bottom: none !important; +} + +.popover.popover-default-variables { + border-radius: 0; + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; +} + +td.no-rows { + color: #6c757d !important; + height: 729px; + vertical-align: middle !important; + font-size: 1.1em; + text-transform: uppercase; + text-align: center; + border: none !important; +} +td.no-rows > i { + display: block; + font-size: 3em; + color: #6c757d !important; +} + +.ui-dialog { + z-index: 2000 !important; +} + +@media (min-width: 768px) { + .table-responsive { + border: none; + overflow-y: scroll; + margin: 0; + } +} +.table-wrapper-2, .table-wrapper-3 { + height: 200px; + overflow-y: scroll; + background: whitesmoke; +} +.table-wrapper-2 td.no-rows, .table-wrapper-3 td.no-rows { + height: 152px !important; +} +.table-wrapper-2 td.no-rows > i, .table-wrapper-3 td.no-rows > i { + font-size: 2em !important; +} + +.table-tickets { + border-top: 1px solid #EEE !important; + border-bottom: 1px solid #EEE !important; + border-left: none !important; + border-right: none !important; +} +.table-tickets td { + vertical-align: middle !important; + padding: 6px !important; +} + +.floatThead-table thead > tr > th { + background: #FFF; + z-index: 1001; + padding-left: 6px !important; + padding-right: 6px !important; +} + +.table-righe { + border-top: 1px solid #EEE !important; + border-bottom: 1px solid #EEE !important; + border-left: none !important; + border-right: none !important; +} +.table-righe td { + vertical-align: middle !important; + padding: 6px !important; +} + +table.sottoaree-table th { + border-top: none; + box-shadow: none !important; +} +table.sottoaree-table td.no-rows { + height: 303px !important; +} +table.sottoaree-table td.no-rows > i { + font-size: 2em !important; +} + +.modal-with-tabs .modal-header { + border-bottom: none; +} +.modal-with-tabs .modal-body .card { + box-shadow: none; + border-radius: 0; +} + +.modal.modal-second-level { + z-index: 2070 !important; + overflow: auto; +} + +body.modal-second .modal-backdrop { + z-index: 2069 !important; +} + +body.modal-second, body.modal-third { + overflow-y: hidden !important; +} + +.box-border { + border: 1px solid #DDD; +} + +.box-footer { + padding: 8px 10px; + border-top: 1px solid #DDD; +} + +/**** MODAL **/ +.modal-dialog > .overlay, .modal-dialog > .loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.modal-dialog .overlay { + z-index: 1010; + background: rgba(255, 255, 255, 0.7); + border-radius: 3px; +} + +.modal-dialog .overlay > .fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px; +} + +.modal-dialog .overlay.dark { + background: rgba(0, 0, 0, 0.5); +} + +.modal-body { + background-color: whitesmoke; +} + +.modal-body .label { + text-align: right; + margin-right: 3px; +} + +/**** TABELLA **/ +.table-border { + border: 1px solid #ddd; +} +.table-border th { + font-weight: 500; +} + +.table-border td, .table-border th { + border-bottom: 1px solid #ddd; +} + +/**** TABS **/ +.nav-tabs a.disabled { + color: #ddd; +} + +.modal.modal-second-level { + z-index: 2070 !important; + overflow: auto; +} + +body.modal-second, body.modal-third { + overflow-y: hidden !important; +} + +body.modal-second .modal-backdrop { + z-index: 2069 !important; +} + +/****** FORM *****/ +.form-box-container { + border: 1px solid #ddd; + margin: 10px 0; + padding: 15px; +} + +.note-editable { + min-height: 426px; +} + +.datepicker { + z-index: 1151 !important; +} + +/******* PREVIEW IMAGE *******/ +.image-preview-input { + background-color: #fff; + border-color: #ccc; + color: #333; + margin: 0; + overflow: hidden; + position: relative; +} +.image-preview-input input[type=file] { + cursor: pointer; + font-size: 20px; + margin: 0; + opacity: 0; + padding: 0; + position: absolute; + right: 0; + top: 0; +} + +.image_preview_block_container .logo { + padding: 10px; + max-height: 149px; +} +.image_preview_block_container .banner { + padding: 10px; + max-height: 200px; +} + +.image-preview-clear-btn { + margin: 0; +} + +input.form-control:focus, select.form-control:focus { + border: 1px solid #3c8dbc; +} + +.form-group.has-error .form-control, .form-group.has-error .input-group-addon { + border: 1px solid #dd4b39; + box-shadow: none !important; +} + +.form-error > span { + color: #dd4b39 !important; +} + +.form-group .label-danger { + background: none repeat scroll 0 0 rgba(0, 0, 0, 0) !important; + color: #dd4b39 !important; + text-align: right !important; + overflow: hidden; + font-size: 12px; +} + +[elastic] { + min-height: 37px; +} + +textarea.resize-vertical { + resize: vertical; +} +textarea.resize-horizontal { + resize: horizontal; +} + +#modalForm label { + font-weight: normal; +} + +.compact-form.no-border-radius input, .compact-form.no-border-radius select, .compact-form.no-border-radius textarea { + border-radius: 0; +} +.compact-form .label-danger { + text-align: right; +} +.compact-form label { + font-size: 0.95rem; + margin-top: 7px; + font-weight: normal !important; +} +.compact-form .form-group { + margin-bottom: 5px; +} +.compact-form .form-group .form-control { + box-shadow: none !important; +} +.compact-form .form-group .has-error .form-control { + box-shadow: none !important; + border: 1px solid #dd4b39; +} + +/**** SUMMERNNOTE EDITOR ****/ +.panel.note-editor { + border-radius: 0; + border: 1px solid #DDD; + box-shadow: none; +} + +/**** BTN RADIo BOX ****/ +.btn-radiobox .btn-app { + text-transform: uppercase; +} +.btn-radiobox .btn-app:first-child { + margin-left: 0; +} +.btn-radiobox .btn-app.active { + border-color: #007BFF; +} +.btn-radiobox .btn-app.active i { + color: #007BFF; +} +.btn-radiobox .btn-app input { + display: none; +} + +.select2-fullwidth .select2-container { + min-width: 100%; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #007BFF; + border-color: #007BFF; +} + +.select2-container--default .select2-results__option--highlighted[aria-selected], .select2-container--default .select2-results__option--highlighted[aria-selected]:hover { + background-color: #007BFF; +} + +.sw-icon-font-picker { + width: 28px; + padding: 4px; +} + +.fip-box .sw-icon-font-picker, .icons-selector .selected-icon .sw-icon-font-picker { + padding: 6px 4px; +} + +.icons-selector.fip-bootstrap span.current-icon, .icons-selector.fip-bootstrap span.current-icon:hover { + background-color: #007BFF; + color: #fff; + border: 1px solid #007BFF; +} + +.breadcrumb { + font-size: 14px; +} + +.dropdown-multifunction-down { + margin-top: 5px; +} + +.pagination { + margin-top: 5px; + margin-left: 5px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal !important; + vertical-align: middle; +} +.pagination .text-counter { + margin-top: 5px; +} + +.box-footer { + background: #FFFFFF; + padding: 4px 3px !important; +} + +.note-editor { + box-shadow: none; +} + +.bootstrap-modal-selector { + overflow-y: scroll; +} + +.pagination-counter { + font-size: 14px; +} +.pagination-counter label { + margin-right: 5px; + font-weight: normal !important; +} +.pagination-counter input.form-control { + border-radius: 0.2rem; +} + +@media (min-width: 768px) { + .box-title.search-left { + width: 65%; + } + .box-title.search-right { + width: 35%; + } + .box-title.search-right > * { + float: right; + } + + #orderSelect { + max-width: 150px; + } + + .pagination-counter { + max-width: 150px; + margin-top: 5px; + } + .pagination-counter label { + padding-top: 5px; + } + .pagination-counter > .form-group { + margin-bottom: 0; + } +} +.login-logo img { + display: block; + margin-left: auto; + margin-right: auto; + max-height: 150px; + max-width: 250px; +} + +.login-card-body { + border-radius: 5px; +} +.login-card-body .icheck-primary { + margin-top: 7px; +} + +.footer-login { + margin-top: 10px; + text-align: center; + font-size: 0.9em; +} + +/** TAB SETTINGS **/ +#settings-tab .panel-body { + border-top: 0; + border-right: 1px solid #DDD; + border-left: 1px solid #DDD; + border-bottom: 1px solid #DDD; +} +#settings-tab .panel-body .well { + box-shadow: none; +} + +.well { + border: 1px solid #DDD; + border-radius: 5px; + padding: 10px; +} + +/*# sourceMappingURL=custom.css.map */ diff --git a/public/admin/css/custom.css.map b/public/admin/css/custom.css.map new file mode 100644 index 0000000..bccd816 --- /dev/null +++ b/public/admin/css/custom.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/general.scss","../node_modules/bootstrap/scss/mixins/_background-variant.scss","../node_modules/bootstrap/scss/mixins/_hover.scss","../node_modules/bootstrap/scss/mixins/_alert.scss","../node_modules/bootstrap/scss/mixins/_gradients.scss","../node_modules/bootstrap/scss/mixins/_buttons.scss","../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../node_modules/admin-lte/build/scss/mixins/_sidebar.scss","../scss/variables.scss","../node_modules/admin-lte/build/scss/mixins/_accent.scss","../node_modules/bootstrap/scss/_variables.scss","../node_modules/admin-lte/build/scss/_variables.scss","../scss/accent.scss","../node_modules/admin-lte/build/scss/mixins/_backgrounds.scss","../scss/navbar.scss","../node_modules/admin-lte/build/scss/mixins/_navbar.scss","../node_modules/admin-lte/build/scss/mixins/_cards.scss","../scss/cards.scss","../scss/table.scss","../scss/modal_e_tabs.scss","../scss/forms.scss","../scss/select2.scss","../scss/sw-icons.scss","../scss/listPage.scss","../scss/loginPage.scss","../scss/settingsPage.scss"],"names":[],"mappings":"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AKE;EACA;;AAGF;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;;;ACrEN;EACE;;AAQI;EACE;EACA,YTjBM;;AS0BN;EACE;EACA;EACA;;AAKN;EACE;;AAOJ;EACE;;;AAMN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AC5FF;EACE;;;AAGF;EACE;;;AASF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EAEE;EAEA;EACA;;AAGE;AAEE;AAAA;AAAA;AAAA;AAAA;;AAMA;EACE;EACA;EACA;;AAMN;EACE;EACA;;;AAKJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;;;AZhDE;EYqDF;IACE;IACA;IACA;;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;;AAMN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAMF;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAKF;EACE;EACA;;AAGF;EACE;;AAEA;EACE;;;AAMJ;EACE;;AAKA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;ACjNF;EACE;;;AAGF;EAEE;EACA;;;AAGF;AAEA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;AACA;EACE;;;AAIF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AASF;EACE;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;;AAIA;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AASE;EACE;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;;AAMN;AAEA;EACE;EACA;EACA;;;AAGF;AAGE;EAEE;;AAEA;EACE;;AAGF;EACE,cZ5JU;;AY6JV;EACE,OZ9JQ;;AYkKZ;EACE;;;ACnKJ;EACE;;;AAIJ;EACE,kBbNc;EaOd,cbPc;;;AaUhB;EACE,kBbXc;;;AcDhB;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE,kBdTc;EcUd;EACA;;;ACZF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AjBiBA;EiBTA;IACE;;EAGF;IACE;;EAEA;IACE;;;EAMN;IACE;;;EAGF;IACE;IACA;;EAEA;IACE;;EAGF;IACE;;;AC7EJ;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;;ACrBF;AAIE;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAMN;EACE;EACA;EACA","file":"custom.css"} \ No newline at end of file diff --git a/public/admin/css/custom.min.css b/public/admin/css/custom.min.css new file mode 100644 index 0000000..fb4950e --- /dev/null +++ b/public/admin/css/custom.min.css @@ -0,0 +1 @@ +body{font-size:15px}.form-control{font-size:.95rem}.text-sm .navbar{font-size:16px !important;height:50px;border-bottom:0}.text-sm .btn-group .btn{font-size:1rem !important}.text-sm .brand-link{font-size:1rem}.bg-brand{background-color:#007bff !important}a.bg-brand:hover,a.bg-brand:focus,button.bg-brand:hover,button.bg-brand:focus{background-color:#0062cc !important}.alert-brand{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-brand hr{border-top-color:#9fcdff}.alert-brand .alert-link{color:#002752}.btn-brand{color:#fff;background-color:#007bff;border-color:#007bff}.btn-brand:hover{color:#fff;background-color:#0062cc;border-color:#1a88ff}.btn-brand:focus,.btn-brand.focus{color:#fff;background-color:#0062cc;border-color:#1a88ff;box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-brand.disabled,.btn-brand:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-brand:not(:disabled):not(.disabled):active,.btn-brand:not(:disabled):not(.disabled).active,.show>.btn-brand.dropdown-toggle{color:#fff;background-color:#3395ff;border-color:#003166}.btn-brand:not(:disabled):not(.disabled):active:focus,.btn-brand:not(:disabled):not(.disabled).active:focus,.show>.btn-brand.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.m0,.no-margin{margin:0 !important}.mr-0{margin-right:0 !important}.ml-0{margin-left:0 !important}.mt-0{margin-top:0 !important}.mb-0{margin-bottom:0 !important}.m-5{margin:5px !important}.mr-5{margin-right:5px !important}.ml-5{margin-left:5px !important}.mt-5{margin-top:5px !important}.mb-5{margin-bottom:5px !important}.m-10{margin:10px !important}.mr-10{margin-right:10px !important}.ml-10{margin-left:10px !important}.mt-10{margin-top:10px !important}.mb-10{margin-bottom:10px !important}.m-15{margin:15px !important}.mr-15{margin-right:15px !important}.ml-15{margin-left:15px !important}.mt-15{margin-top:15px !important}.mb-15{margin-bottom:15px !important}.m-20{margin:20px !important}.mr-20{margin-right:20px !important}.ml-20{margin-left:20px !important}.mt-20{margin-top:20px !important}.mb-20{margin-bottom:20px !important}.pd0,.no-padding{padding:0 !important}.pd-0{padding:0 !important}.pdr-0{padding-right:0 !important}.pdl-0{padding-left:0 !important}.pdt-0{padding-top:0 !important}.pdb-0{padding-bottom:0 !important}.pd-5{padding:5px !important}.pdr-5{padding-right:5px !important}.pdl-5{padding-left:5px !important}.pdt-5{padding-top:5px !important}.pdb-5{padding-bottom:5px !important}.pd-10{padding:10px !important}.pdr-10{padding-right:10px !important}.pdl-10{padding-left:10px !important}.pdt-10{padding-top:10px !important}.pdb-10{padding-bottom:10px !important}.pd-15{padding:15px !important}.pdr-15{padding-right:15px !important}.pdl-15{padding-left:15px !important}.pdt-15{padding-top:15px !important}.pdb-15{padding-bottom:15px !important}.pd-20{padding:20px !important}.pdr-20{padding-right:20px !important}.pdl-20{padding-left:20px !important}.pdt-20{padding-top:20px !important}.pdb-20{padding-bottom:20px !important}.no-border-top{border-top:0}.no-padding-right{padding-right:0}.no-padding-left{padding-left:0}.no-padding-left>input{border-left:0}.center-block{display:block;margin-left:auto;margin-right:auto}@media(min-width:767px){.no-border-right-sm{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.no-border-top-sm{border-top:0}.no-border-r-l-sm{border-radius:0}.no-padding-l-sm{padding-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.no-padding-l-sm input{border-top-left-radius:0;border-bottom-left-radius:0}.no-padding-r-sm{padding-right:0}.no-padding-r-sm input{border-top-right-radius:0;border-bottom-right-radius:0}.no-padding-r-l-sm{padding-right:0;padding-left:0}.no-padding-r-l-sm input{border-radius:0}}.filtratiLabel{font-size:13px;padding-right:10px;vertical-align:bottom;margin-top:19px;display:block}hr.white{border-top:1px solid #FFF}hr.dark{border-top:1px solid #333}hr.light{border-top:1px solid #DDD}.border-top-white{border-top:1px solid #FFF;border-top-right-radius:0;border-top-left-radius:0}.border-bottom-white{border-bottom:1px solid #FFF}.border-right-white{border-right:1px solid #FFF;border-top-right-radius:0;border-bottom-right-radius:0}.border-left-white{border-left:1px solid #FFF;border-top-left-radius:0;border-bottom-left-radius:0}.sidebar-menu li.divider-md{border-top:3px solid #1a2226}.note-editor.note-frame{border-radius:0 !important}.logo-img{position:absolute;top:0;right:15px;max-height:100px}.btn>.badge{position:absolute;top:-6px;right:-4px;font-size:10px;font-weight:400;z-index:100}.main-footer{padding:10px 15px}section.content.list{padding:12px 0 0 0}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#888}::-webkit-scrollbar-thumb:hover{background:#555}@media(max-width:575.98px){.content-wrapper,.main-sidebar{padding-top:50px !important}.box-footer{padding:8px 3px !important}section.content.list{padding:0}section.content-header{padding:10px 15px 8px}}.dropdown-menu{z-index:1100 !important;font-size:.9rem;padding:5px 0}.content-header>.breadcrumb.top0{top:0}.sidebar-dark-brand .nav-sidebar>.nav-item>.nav-link.active{background-color:#007bff;color:#fff}.sidebar-dark-brand .nav-sidebar.nav-legacy>.nav-item>.nav-link.active{border-color:#007bff}.accent-brand .btn-link,.accent-brand a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):not(.btn){color:#007bff}.accent-brand .btn-link:hover,.accent-brand a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):not(.btn):hover{color:#0056b3}.accent-brand .dropdown-item:active,.accent-brand .dropdown-item.active{background:#007bff;color:#fff}.accent-brand .custom-control-input:checked ~ .custom-control-label::before{background:#007bff;border-color:#004a99}.accent-brand .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,")}.accent-brand .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid),.accent-brand .custom-select:focus,.accent-brand .custom-control-input:focus:not(:checked) ~ .custom-control-label::before,.accent-brand .custom-file-input:focus ~ .custom-file-label{border-color:#80bdff}.accent-brand .page-item .page-link{color:#007bff}.accent-brand .page-item.active a,.accent-brand .page-item.active .page-link{background-color:#007bff;border-color:#007bff;color:#fff}.accent-brand .page-item.disabled a,.accent-brand .page-item.disabled .page-link{background-color:#fff;border-color:#dee2e6;color:#6c757d}.accent-brand [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link){color:#c2c7d0}.accent-brand [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#fff}.accent-brand [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link){color:#343a40}.accent-brand [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#212529}[class*=accent-] a.btn-brand{color:#fff}.bg-brand{background-color:#007bff !important}.bg-brand,.bg-brand>a{color:#fff !important}.bg-brand.btn:hover{border-color:#0062cc;color:#ececec}.bg-brand.btn:not(:disabled):not(.disabled):active,.bg-brand.btn:not(:disabled):not(.disabled).active,.bg-brand.btn:active,.bg-brand.btn.active{background-color:#0062cc !important;border-color:#005cbf;color:#fff}.navbar-dark-brand{background-color:#007bff}.navbar-dark-brand .nav>li>a{color:rgba(255,255,255,0.8)}.navbar-dark-brand .nav>li>a:hover,.navbar-dark-brand .nav>li>a:active,.navbar-dark-brand .nav>li>a:focus,.navbar-dark-brand .nav .open>a,.navbar-dark-brand .nav .open>a:hover,.navbar-dark-brand .nav .open>a:focus,.navbar-dark-brand .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.navbar-dark-brand .sidebar-toggle{color:rgba(255,255,255,0.8)}.navbar-dark-brand .sidebar-toggle:hover,.navbar-dark-brand .sidebar-toggle:focus{background:rgba(0,0,0,0.1);color:#f6f6f6}.nav-item.dev-block{margin-top:6px !important}.card-brand:not(.card-outline)>.card-header{background-color:#007bff}.card-brand:not(.card-outline)>.card-header,.card-brand:not(.card-outline)>.card-header a{color:#fff}.card-brand:not(.card-outline)>.card-header a.active{color:#212529}.card-brand.card-outline{border-top:3px solid #007bff}.card-brand.card-outline-tabs>.card-header a:hover{border-top:3px solid #dee2e6}.card-brand.card-outline-tabs>.card-header a.active{border-top:3px solid #007bff}.bg-brand .btn-tool,.bg-gradient-brand .btn-tool,.card-brand:not(.card-outline) .btn-tool{color:rgba(255,255,255,0.8)}.bg-brand .btn-tool:hover,.bg-gradient-brand .btn-tool:hover,.card-brand:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-brand .bootstrap-datetimepicker-widget .table td,.card.bg-brand .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-brand .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-brand .bootstrap-datetimepicker-widget .table th{border:0}.card.bg-brand .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-brand .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-brand .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-brand .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-brand .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.second:hover{background:#0067d6;color:#fff}.card.bg-brand .bootstrap-datetimepicker-widget table td.today::before,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.today::before{border-bottom-color:#fff}.card.bg-brand .bootstrap-datetimepicker-widget table td.active,.card.bg-brand .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-brand .bootstrap-datetimepicker-widget table td.active:hover{background:#3395ff;color:#fff}.card-brand.card-outline-tabs,.card-brand.card-outline{border-top:0 !important}.card-brand.card-outline .card-header .nav-link.active{color:#fff !important;background:#007bff}.card-brand.card-outline.card-outline-tabs .card-header .nav-link.active{color:inherit !important;background:whitesmoke;border-bottom-color:whitesmoke}.card-brand.card-outline.card-outline-tabs .card-body{background-color:whitesmoke}.card-brand .card-header .nav-link{color:#007bff !important}.accordion-card{box-shadow:none;border:1px solid #DDD;border-radius:4px}.accordion-card.no-border{border:0}.accordion-card.no-border-radius{border-radius:0}.delivery-card .card-header{padding:8px 4px}.delivery-card .prodoti-list-item{font-size:13px;color:#333}.delivery-card .riepilogo-list-item{font-size:14px;color:#333}.delivery-card .totale-ordine{margin-top:5px;font-weight:bold}.delivery-card .metodo-pagamento{color:#333}.position-card{margin-bottom:0;border-top:1px solid #DDD}.table-border{border:1px solid #ddd}th[data-ord]{cursor:pointer}.content.list{padding:0}.box-header{margin-bottom:8px;margin-right:8px;margin-left:8px}.floatThead-container{overflow-x:inherit !important}.table-border.flot-header{font-size:.95rem;border-left:0;border-right:0}.table-border.flot-header tbody tr td{border-top:1px solid #DDD;vertical-align:middle;padding:5px}.table-border.flot-header th{background-color:#FFF;border-bottom:1px solid #DDD}.table-wrapper{height:729px;transition:height ease .7s}.table-responsive{padding:0}.table-border td,.table-border th{border-bottom:1px solid #ddd}table.table-popover{font-size:12px}table{margin-bottom:0 !important}.table>thead>tr>th{border-bottom:none !important}.popover.popover-default-variables{border-radius:0;font-family:"Helvetica Neue Light","HelveticaNeue-Light","Helvetica Neue",Calibri,Helvetica,Arial,sans-serif}td.no-rows{color:#6c757d !important;height:729px;vertical-align:middle !important;font-size:1.1em;text-transform:uppercase;text-align:center;border:none !important}td.no-rows>i{display:block;font-size:3em;color:#6c757d !important}.ui-dialog{z-index:2000 !important}@media(min-width:768px){.table-responsive{border:0;overflow-y:scroll;margin:0}}.table-wrapper-2,.table-wrapper-3{height:200px;overflow-y:scroll;background:whitesmoke}.table-wrapper-2 td.no-rows,.table-wrapper-3 td.no-rows{height:152px !important}.table-wrapper-2 td.no-rows>i,.table-wrapper-3 td.no-rows>i{font-size:2em !important}.table-tickets{border-top:1px solid #EEE !important;border-bottom:1px solid #EEE !important;border-left:none !important;border-right:none !important}.table-tickets td{vertical-align:middle !important;padding:6px !important}.floatThead-table thead>tr>th{background:#FFF;z-index:1001;padding-left:6px !important;padding-right:6px !important}.table-righe{border-top:1px solid #EEE !important;border-bottom:1px solid #EEE !important;border-left:none !important;border-right:none !important}.table-righe td{vertical-align:middle !important;padding:6px !important}table.sottoaree-table th{border-top:0;box-shadow:none !important}table.sottoaree-table td.no-rows{height:303px !important}table.sottoaree-table td.no-rows>i{font-size:2em !important}.modal-with-tabs .modal-header{border-bottom:0}.modal-with-tabs .modal-body .card{box-shadow:none;border-radius:0}.modal.modal-second-level{z-index:2070 !important;overflow:auto}body.modal-second .modal-backdrop{z-index:2069 !important}body.modal-second,body.modal-third{overflow-y:hidden !important}.box-border{border:1px solid #DDD}.box-footer{padding:8px 10px;border-top:1px solid #DDD}.modal-dialog>.overlay,.modal-dialog>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.modal-dialog .overlay{z-index:1010;background:rgba(255,255,255,0.7);border-radius:3px}.modal-dialog .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.modal-dialog .overlay.dark{background:rgba(0,0,0,0.5)}.modal-body{background-color:whitesmoke}.modal-body .label{text-align:right;margin-right:3px}.table-border{border:1px solid #ddd}.table-border th{font-weight:500}.table-border td,.table-border th{border-bottom:1px solid #ddd}.nav-tabs a.disabled{color:#ddd}.modal.modal-second-level{z-index:2070 !important;overflow:auto}body.modal-second,body.modal-third{overflow-y:hidden !important}body.modal-second .modal-backdrop{z-index:2069 !important}.form-box-container{border:1px solid #ddd;margin:10px 0;padding:15px}.note-editable{min-height:426px}.datepicker{z-index:1151 !important}.image-preview-input{background-color:#fff;border-color:#ccc;color:#333;margin:0;overflow:hidden;position:relative}.image-preview-input input[type=file]{cursor:pointer;font-size:20px;margin:0;opacity:0;padding:0;position:absolute;right:0;top:0}.image_preview_block_container .logo{padding:10px;max-height:149px}.image_preview_block_container .banner{padding:10px;max-height:200px}.image-preview-clear-btn{margin:0}input.form-control:focus,select.form-control:focus{border:1px solid #3c8dbc}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border:1px solid #dd4b39;box-shadow:none !important}.form-error>span{color:#dd4b39 !important}.form-group .label-danger{background:none repeat scroll 0 0 rgba(0,0,0,0) !important;color:#dd4b39 !important;text-align:right !important;overflow:hidden;font-size:12px}[elastic]{min-height:37px}textarea.resize-vertical{resize:vertical}textarea.resize-horizontal{resize:horizontal}#modalForm label{font-weight:normal}.compact-form.no-border-radius input,.compact-form.no-border-radius select,.compact-form.no-border-radius textarea{border-radius:0}.compact-form .label-danger{text-align:right}.compact-form label{font-size:.95rem;margin-top:7px;font-weight:normal !important}.compact-form .form-group{margin-bottom:5px}.compact-form .form-group .form-control{box-shadow:none !important}.compact-form .form-group .has-error .form-control{box-shadow:none !important;border:1px solid #dd4b39}.panel.note-editor{border-radius:0;border:1px solid #DDD;box-shadow:none}.btn-radiobox .btn-app{text-transform:uppercase}.btn-radiobox .btn-app:first-child{margin-left:0}.btn-radiobox .btn-app.active{border-color:#007bff}.btn-radiobox .btn-app.active i{color:#007bff}.btn-radiobox .btn-app input{display:none}.select2-fullwidth .select2-container{min-width:100%}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#007bff;border-color:#007bff}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#007bff}.sw-icon-font-picker{width:28px;padding:4px}.fip-box .sw-icon-font-picker,.icons-selector .selected-icon .sw-icon-font-picker{padding:6px 4px}.icons-selector.fip-bootstrap span.current-icon,.icons-selector.fip-bootstrap span.current-icon:hover{background-color:#007bff;color:#fff;border:1px solid #007bff}.breadcrumb{font-size:14px}.dropdown-multifunction-down{margin-top:5px}.pagination{margin-top:5px;margin-left:5px;margin-bottom:0;font-size:14px;font-weight:normal !important;vertical-align:middle}.pagination .text-counter{margin-top:5px}.box-footer{background:#fff;padding:4px 3px !important}.note-editor{box-shadow:none}.bootstrap-modal-selector{overflow-y:scroll}.pagination-counter{font-size:14px}.pagination-counter label{margin-right:5px;font-weight:normal !important}.pagination-counter input.form-control{border-radius:.2rem}@media(min-width:768px){.box-title.search-left{width:65%}.box-title.search-right{width:35%}.box-title.search-right>*{float:right}#orderSelect{max-width:150px}.pagination-counter{max-width:150px;margin-top:5px}.pagination-counter label{padding-top:5px}.pagination-counter>.form-group{margin-bottom:0}}.login-logo img{display:block;margin-left:auto;margin-right:auto;max-height:150px;max-width:250px}.login-card-body{border-radius:5px}.login-card-body .icheck-primary{margin-top:7px}.footer-login{margin-top:10px;text-align:center;font-size:.9em}#settings-tab .panel-body{border-top:0;border-right:1px solid #DDD;border-left:1px solid #DDD;border-bottom:1px solid #DDD}#settings-tab .panel-body .well{box-shadow:none}.well{border:1px solid #DDD;border-radius:5px;padding:10px} \ No newline at end of file diff --git a/public/admin/img/admin.png b/public/admin/img/admin.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9a186c7d37b1dc82fd51828579d61786531f51 GIT binary patch literal 4592 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 NfCbjpv>xM?{2w|!J \ No newline at end of file diff --git a/public/admin/img/icons.svg b/public/admin/img/icons.svg new file mode 100644 index 0000000..cc8298a --- /dev/null +++ b/public/admin/img/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/admin/img/user.svg b/public/admin/img/user.svg new file mode 100644 index 0000000..977c621 --- /dev/null +++ b/public/admin/img/user.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/admin/js/angularjs/angularGlobalFunctions.js b/public/admin/js/angularjs/angularGlobalFunctions.js new file mode 100644 index 0000000..b62d837 --- /dev/null +++ b/public/admin/js/angularjs/angularGlobalFunctions.js @@ -0,0 +1,67 @@ +Number.prototype.toFixedDown = function (digits) { + var re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"); + var m = this.toString().match(re); + return m ? parseFloat(m[1]) : this.valueOf(); +}; + +Number.prototype.truncate = function (digits) { + var num = this.valueOf().toFixedDown(digits); + num = num.toString(); + var intero = String(num.split('.')[0]); + var fraction = String(num.split('.')[1]); + var padding = ''; + if (isNaN(intero)) return ''; + + if (fraction == 'undefined') { + fraction = ''; + padding = new Array(Math.max(digits - fraction.length, 0) + 1).join('0'); + if (digits > 0) { + num += '.' + padding; + } + } else { + padding = new Array(Math.max(digits - fraction.length, 0) + 1).join('0'); + num += padding; + } + return num; +}; + +//funzione per l'arrotondamento delle cifre decimali in eccesso dal 5 +Number.prototype.toFixedExcess = function(precision){ + precision = (parseInt(precision) == 0) ? 0:(parseInt(precision) || 2); + var num = this.valueOf(); + var pow = Math.pow(10,precision); + return (Math.round( num * pow ) / pow).toFixed(precision); +}; + +//Funzione per arrotondare correttamente i numeri in modo da correggere l'errore delle somme e differenze +function myParseFloat(number){ + //console.log("MyParseFloat-Old: "+number); + var newnumber = new Number(number+'').toFixed(12); + //console.log("MyParseFloat-New: "+newnumber); + return parseFloat(newnumber); +} + +//Funzione che implementa il pad left di una stringa +Number.prototype.padLeft = function (n,str) { + return (this < 0 ? '-' : '') + + Array(n-String(Math.abs(this)).length+1) + .join(str||'0') + + (Math.abs(this)); +}; + +const checkIfAddressIsInArea = (location, area) => { + if (google.maps.geometry.poly.containsLocation(location, area)){ + return true; + } else { + return false; + } +} + +const checkIfAddressIsInAreaLatLon = (lat, lon) => { + const location = new google.maps.LatLng(lat, lon); + if (google.maps.geometry.poly.containsLocation(location, area)){ + return true; + } else { + return false; + } +} diff --git a/public/admin/js/angularjs/app.js b/public/admin/js/angularjs/app.js new file mode 100644 index 0000000..28c2c0a --- /dev/null +++ b/public/admin/js/angularjs/app.js @@ -0,0 +1,1000 @@ +'use strict'; + +var basePath = `${BASE_URL_SITE}/v1/`; +var INTEGER_REGEXP = /^\-?\d+$/; +var PIVA_REGEXP = /^\d{11,11}$/; +var bootstrapDatepickerConfig = { + format: "dd/mm/yyyy", + todayBtn: "linked", + language: "it", + autoclose: true, + orientation: 'auto bottom', + startDate: '01-01-1900', + endDate: '31-12-9999' +}; + +var app = angular.module('app', ['ngResource', 'ngStorage', 'ngAnimate', 'ui.bootstrap', 'toaster', 'angularMoment','chart.js','daterangepicker']) + + .config(($sessionStorageProvider) => { + $sessionStorageProvider.setKeyPrefix('movedelivery_'); + }) + + .run(($rootScope, $http, $locale, amMoment, $sessionStorage, AuthService) => { + amMoment.changeLocale('it'); + + const token = $('body').attr('data-token'); + $sessionStorage.token = token; + $http.defaults.headers.common['Authorization'] = `Basic ${token}`; + + //Inizializzo i dati per cui l'utente è authenticato lato server + AuthService.Load(); + }) + + //services + .factory('AuthService', ($sessionStorage, $rootScope, Users, toaster) => { + const service = {}; + + service.Load = () => { + Users.getUserData().then((result) => { + service.setUserData(result.data); + }).catch((err) => { + toaster.error("Errore", "Non è stato possibile recuperare l'utente, conttatare l'amministrazione!") + }); + }; + + service.setUserData = function (user) { + $rootScope.authUser = user; + $sessionStorage.authUser = user; + }; + + service.getUserData = function () { + return $sessionStorage.authUser; + }; + + service.getInfo = function (param) { + return $sessionStorage.authUser[param]; + }; + + return service; + }) + .factory('socket', ($rootScope) => { + // const wsUrl = 'http://localhost:3000'; + const wsUrl = 'https://wsdev.movedelivery.it'; + const token = 'Secret a5addff3637fd153b1301b84f1c768a0'; + + let socket = io.connect(wsUrl, { + transportOptions: { + polling: { + extraHeaders: { + Authorization: token, + }, + }, + }, + }); + + return { + connection: function (callback) { + socket.on('connect', () => { + $rootScope.$apply(function () { + callback(socket.id); + }); + }); + }, + on: function (eventName, callback) { + socket.on(eventName, function () { + let args = arguments; + $rootScope.$apply(function () { + callback.apply(socket, args); + }); + }); + }, + emit: function (eventName, data, callback) { + socket.emit(eventName, data, function () { + let args = arguments; + $rootScope.$apply(function () { + if (callback) { + callback.apply(socket, args); + } + }); + }); + }, + }; + }) + + //Filters + .filter("isNumeric", function () { + return function (value) { + if (value == null || value == 'null' || value == '' || !angular.isDefined(value)) return false; + return (!isNaN(parseFloat(value)) && isFinite(value)); + }; + }) + .filter('getById', function () { + return function (input, id) { + var i = 0, len = input.length; + for (; i < len; i++) { + if (+input[i].id == +id) { + return input[i]; + } + } + return null; + } + }) + .filter('getBooleanValueOfCheck', function () { + return function (input) { + return input === '1' || input === true || input === 1; + } + }) + .filter('getElementByKeyValue', function () { + return function (elenco, chiaveDaCercare, valoraDaCercare) { + if (elenco == undefined) + return null; + + if (valoraDaCercare == null) return null; + + var value = null; + angular.forEach(elenco, function (val) { + if (val[chiaveDaCercare].toLowerCase() == valoraDaCercare.toLowerCase()) { + value = val; + } + }); + return value; + } + }) + .filter('sanitize', function ($sce) { + return function (htmlCode) { + return $sce.trustAsHtml(htmlCode); + } + }) + .filter("formattaInPrezzoUnitario", function ($filter) { + return function (value, valuta) { + value = String(value).replace(',', '.').replace(/[^\d.-]/g, ''); + var num = $filter('number')(value, 2); + if (valuta) + return num + " €"; + else + return num; + }; + }) + .filter('AddressEncode', function () { + return function (comune, cap, provincia) { + var str = ''; + if (cap) + str += cap; + if (cap && comune) + str += " - " + comune; + else if (cap) + str += comune; + if (provincia) + str += ' (' + provincia + ')'; + + return str; + } + }) + .filter('contaElementiOggetto', function () { + return function (input) { + if (!angular.isDefined(input)) + return 0; + + var i = 0; + angular.forEach(input, function (val) { + if (angular.isDefined(val) && val != '') + i++; + }); + return i; + } + }) + .filter("slashDataNoTime", function () { + return function (data) { + if (!angular.isDefined(data) || data == null) return; + data = data.split("-"); + data.reverse(); + return data.join("/"); + } + }) + .filter("unslashDataNoTime", function () { + return function (data) { + if (!angular.isDefined(data) || data == null) return; + data = data.split("/"); + data.reverse(); + return data.join("-"); + } + }) + .filter("slashDataWithTime", function () { + return function (data, withtime) { + withtime = (withtime === undefined) ? true : withtime; + if (!angular.isDefined(data) || data == null) return; + data = data.split(' '); + let time = data[1]; + data = data[0].split("-"); + data.reverse(); + if (withtime) + return data.join("/") + " " + time; + else + return data.join("/"); + } + }) + .filter("DataIsoFormat", function (moment) { + return function (data, formatString) { + if (angular.isUndefined(data)) return; + + formatString = formatString || 'DD/MM/YYYY'; + return moment(data).format(formatString); + } + }) + .filter("getTipoOperazione", function () { + return function (data) { + if (!angular.isDefined(data) || data == null) return ''; + switch (data) { + case 'NEW': + return 'Nuova Attivazione'; + case 'RINNOVO': + return 'Rinnovo Licenza'; + case 'CAMBIOVERSIONE': + return 'Cambio Versione Licenza'; + } + } + }) + .filter('cleanZero', function ($filter) { + return function (val) { + if (val === undefined) return; + if (!$filter('isNumeric')(parseFloat(val.replace(',', '.'))) || parseFloat(val.replace(',', '.')) == '0') + return ''; + else + return val; + } + }) + + //Factory + .factory('focus', function ($timeout, $window) { + return function (id, selectText) { + selectText = (angular.isDefined(selectText)) ? selectText : false; + $timeout(function () { + let element = $window.document.getElementById(id); + if (element) { + element.focus(); + if (selectText) { + element.select(); + } + } + }); + }; + }) + + //Directive + .directive('cleanZeroValue', function () { + return { + require: 'ngModel', + link: function (scope, element, attrs, ngModelCtrl) { + const value = parseFloat(ngModelCtrl.modelValue); + if (value === 0) { + ngModelCtrl.$setViewValue(''); + ngModelCtrl.$render(); + } + } + } + }) + .directive('integer', function () { + return { + require: 'ngModel', + link: function (scope, elm, attrs, ctrl) { + ctrl.$validators.integer = function (modelValue, viewValue) { + if (ctrl.$isEmpty(modelValue)) { + return true; + } + + if (!INTEGER_REGEXP.test(viewValue)) { + return false; + } + + // it is invalid + return true; + }; + } + }; + }) + .directive('limitInput', function () { + return { + require: 'ngModel', + link: function (scope, elem, attrs) { + var limit = parseInt(attrs.limitInput); + angular.element(elem).on("keypress", function (e) { + if (e.charCode >= 39 && e.charCode <= 249) { //il controllo viene effettuato solo sui caratteri stampabili + if (this.value.length >= limit) e.preventDefault(); + } + }); + } + }; + }) + .directive('partitaiva', function () { + return { + require: 'ngModel', + link: function (scope, elm, attrs, ctrl) { + ctrl.$validators.partitaiva = function (modelValue, viewValue) { + let isValid = true; + + if (ctrl.$isEmpty(modelValue)) { + return true; + } + + if (!PIVA_REGEXP.test(viewValue)) { + return false; + } + + let s = 0; + for (let i = 0; i <= 9; i += 2) + s += ord(viewValue[i]) - ord('0'); + + for (let i = 1; i <= 9; i += 2) { + let c = 2 * (ord(viewValue[i]) - ord('0')); + if (c > 9) + c = c - 9; + s += c; + } + + if ((10 - s % 10) % 10 !== ord(viewValue[10]) - ord('0')) { + isValid = false; + } + + return isValid; + }; + } + }; + + function ord(string) { + let str = string + '', + code = str.charCodeAt(0); + if (0xD800 <= code && code <= 0xDBFF) { + let hi = code; + if (str.length === 1) { + return code; + } + let low = str.charCodeAt(1); + return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + } + if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate + return code; + } + return code; + } + }) + .directive('checkPiva', function (Licenze) { + return { + require: 'ngModel', + scope: {idLicenza: '=', ngModel: '&'}, + link: function (scope, elm, attrs, ctrl) { + ctrl.$validators.checkPiva = function (modelValue, viewValue) { + let isValid = true; + + const validFormat = ctrl.$validators.partitaiva(modelValue, viewValue); + if (modelValue && (ctrl.$isEmpty(modelValue) || (modelValue + '').length !== 11 || !validFormat)) { + return true; + } + + if (!scope.idLicenza && (modelValue + '').length === 11) { + Licenze.checkEsistenzaPiva(modelValue).then((res) => { + isValid = !res.isActive; + ctrl.$setValidity('checkPiva', isValid); + console.log('res set Valitidity', res); + }).catch(() => isValid = true); + } + + return isValid; + }; + } + }; + }) + .directive('identical', function () { + return { + require: "ngModel", + scope: { + otherModelValue: "=identical" + }, + link: function (scope, element, attributes, ngModel) { + + ngModel.$validators.identical = function (modelValue) { + return modelValue == scope.otherModelValue; + }; + + scope.$watch("otherModelValue", function () { + ngModel.$validate(); + }); + } + }; + }) + .directive('icheck', function icheck($timeout, $parse) { + return { + restrict: 'A', + require: 'ngModel', + link: function ($scope, element, $attrs) { + return $timeout(function () { + + let form = null; + const ngModelGetter = $parse($attrs['ngModel']); + // let value = $parse($attrs['ngModel'])($scope); + + //Controlli per settare il form collegato come dirty quando cambia il valore + if (angular.isDefined($attrs.form)) + form = $parse($attrs['form'])($scope); + + $(element).iCheck({ + checkboxClass: 'icheckbox_square-blue', + radioClass: 'iradio_square-blue' + }).on('ifChanged', function (event) { + if ($(element).attr('type') === 'checkbox' && $attrs['ngModel']) { + $scope.$apply(function () { + return ngModelGetter.assign($scope, (event.target.checked) ? 1 : 0); + }); + } + }).on('ifClicked', function (event) { + //Gestisco l'attributo ngClick se presente chiamo la funzione associata + if (angular.isDefined($attrs.ngClick)) { + var clickFunction = $parse($attrs['ngClick'])($scope); + if (angular.isDefined(clickFunction)) + $timeout(function () { + $scope.$apply(function () { + clickFunction(); + }); + }); + } + if (form != null) form.$setDirty(true); + }); + + $scope.$watch($attrs['ngModel'], function (value) { + $timeout(function () { + if (!value || value == '0') { + $(element).iCheck('uncheck'); + } else { + $(element).iCheck('check'); + } + }); + }); + + }); + } + }; + }) + .directive('onEnterKey', function onEnterKey() { + return function (scope, element, attrs) { + element.bind("keydown keypress", function (event) { + if (event.which === 13) { + scope.$apply(function () { + scope.$eval(attrs.onEnterKey); + }); + event.preventDefault(); + } + }); + }; + }) + .directive('numbersOnly', function () { + return { + require: 'ngModel', + link: function (scope, element, attrs, modelCtrl) { + modelCtrl.$parsers.push(function (inputValue) { + if (inputValue == undefined) return ''; + var transformedInput = inputValue.replace(/[^0-9]/g, ''); + if (transformedInput !== inputValue) { + modelCtrl.$setViewValue(transformedInput); + modelCtrl.$render(); + } + return transformedInput; + }); + } + }; + }) + .directive('quantityInput', function () { + return { + restrict: 'EA', + require: ['ngModel'], + replace: true, + template: ` +
+ +
+
+
+
-
+
+
`, + scope: { + quantita: "=ngModel", + step: "=", + min: "=", + max: "=", + onClickBtn: "=", + disabled: '=ngDisabled' + }, + link: function (scope, element, attrs, modelCtrl) { + + var input = element.find('input[type="number"]'); + + var btnUp = element.find('.quantity-up'), + btnDown = element.find('.quantity-down'), + min = scope.min || 1, + max = scope.max || undefined, + step = scope.step || 1; + + btnUp.click(function () { + if (scope.disabled) return; + var oldValue = parseFloat(scope.quantita); + if (oldValue >= max) { + var newVal = oldValue; + } else { + var newVal = oldValue + step; + } + element.find("input").val(newVal); + element.find("input").trigger("change"); + if (oldValue != newVal) + scope.onClickBtn(scope.quantita); + }); + + btnDown.click(function () { + if (scope.disabled) return; + var oldValue = parseFloat(input.val()); + if (oldValue <= min) { + var newVal = oldValue; + } else { + var newVal = oldValue - step; + } + element.find("input").val(newVal); + element.find("input").trigger("change"); + if (oldValue != newVal) + scope.onClickBtn(scope.quantita); + }); + + } + }; + }) + .directive("moveNextOnMaxlength", function () { + return { + restrict: "A", + link: function ($scope, element) { + var $nextElement; + + if (angular.isDefined(element.attr("next-element"))) { + $nextElement = $('#' + element.attr("next-element"))[0]; + } else { + $nextElement = element.next(); + } + + element.on("input", function (e) { + if (element.val().length === parseInt(element.attr("maxlength"))) { + if (angular.isDefined($nextElement)) { + $nextElement.focus(); + } + } + }); + } + } + }) + .directive('bootstrapDatepicker', function bootstrapDatepicker($parse) { + return { + require: '?ngModel', + restrict: 'A', + link: function ($scope, element, attrs, controller) { + var updateModel, form = null; + updateModel = function (ev) { + //element.datepicker('hide'); + //element.blur(); + return $scope.$apply(function () { + return controller.$setViewValue(ev.date); + }); + }; + + //Controlli per settare il form collegato come dirty quando cambia il valore + if (angular.isDefined(attrs.form)) + form = $parse(attrs['form'])($scope); + + if (controller != null) { + controller.$render = function () { + element.datepicker(bootstrapDatepickerConfig); + element.datepicker('update', controller.$viewValue); + element.datepicker('setValue'); + element.datepicker('update'); + return controller.$viewValue; + }; + } + + return attrs.$observe('bootstrapDatepicker', function (value) { + var options; + options = angular.copy(bootstrapDatepickerConfig); + if (angular.isObject(value)) { + options = value; + } + if (typeof (value) === "string" && value.length > 0) { + options = angular.fromJson(value); + } + if (angular.isDefined(attrs.dateOrientation)) { + options.orientation = attrs.dateOrientation; + } + return element.datepicker(options).on('changeDate', + function () { + updateModel; + if (form != null) form.$setDirty(true); + }); + }); + } + }; + }) + .directive('inputNumber', function ($locale) { + // Usage: + // + // Creates: + // + var directive = { + link: link, + require: 'ngModel', + restrict: 'A' + }; + return directive; + + + function link(scope, el, attrs, ngModelCtrl) { + el.addClass('text-right'); + if (angular.isDefined(attrs.noCleanzero)) { + var cleanzero = false; + } else { + var cleanzero = true; + } + + var decimalSeparator = $locale.NUMBER_FORMATS.DECIMAL_SEP; + var groupSeparator = $locale.NUMBER_FORMATS.GROUP_SEP; + + // Create new regular expression with current decimal separator. + var NUMBER_REGEXP = "^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$"; + var regex = new RegExp(NUMBER_REGEXP); + + var formatting = true; + var maxInputLength = 16; // Maximum input length. Default max ECMA script. + var max; // Maximum value. Default undefined. + var min; // Minimum value. Default undefined. + var lastValidValue; // Last valid value. + var decimals = 2; // Number of decimals. Default 2. + + /*switch (attrs.inputNumber) { + case'prezzo': + decimals = 2; + break; + case'prezzo_unitario': + decimals = ConfigParam.get('DecimaliPrezzoUnitario'); + break; + case'quantita': + decimals = ConfigParam.get('DecimaliQuantita'); + break; + }*/ + + // Create parsers and formatters. + ngModelCtrl.$parsers.push(parseViewValue); + ngModelCtrl.$parsers.push(minValidator); + ngModelCtrl.$parsers.push(maxValidator); + ngModelCtrl.$formatters.push(formatViewValue); + + el.bind('blur', onBlur); // Event handler for the leave event. + el.bind('focus', onFocus); // Event handler for the focus event. + + // Put a watch on the min, max and decimal value changes in the attribute. + scope.$watch(attrs.min, onMinChanged); + scope.$watch(attrs.max, onMaxChanged); + scope.$watch(attrs.decimals, onDecimalsChanged); + scope.$watch(attrs.formatting, onFormattingChanged); + + // Setup decimal formatting. + if (decimals > -1) { + ngModelCtrl.$parsers.push(function (value) { + return (value) ? round(value) : value; + }); + ngModelCtrl.$formatters.push(function (value) { + return (value) ? formatPrecision(value) : value; + }); + } + + function onMinChanged(value) { + if (!angular.isUndefined(value)) { + min = parseFloat(value); + lastValidValue = minValidator(ngModelCtrl.$modelValue); + ngModelCtrl.$setViewValue(formatPrecision(lastValidValue)); + ngModelCtrl.$render(); + } + } + + function onMaxChanged(value) { + if (!angular.isUndefined(value)) { + max = parseFloat(value); + maxInputLength = calculateMaxLength(max); + lastValidValue = maxValidator(ngModelCtrl.$modelValue); + ngModelCtrl.$setViewValue(formatPrecision(lastValidValue)); + ngModelCtrl.$render(); + } + } + + function onDecimalsChanged(value) { + if (!angular.isUndefined(value)) { + decimals = parseFloat(value); + maxInputLength = calculateMaxLength(max); + if (lastValidValue !== undefined) { + ngModelCtrl.$setViewValue(formatPrecision(lastValidValue)); + ngModelCtrl.$render(); + } + } + } + + function onFormattingChanged(value) { + if (!angular.isUndefined(value)) { + formatting = (value !== false); + ngModelCtrl.$setViewValue(formatPrecision(lastValidValue)); + ngModelCtrl.$render(); + } + } + + /** + * Round the value to the closest decimal. + */ + function round(value) { + var d = Math.pow(10, decimals); + return Math.round(value * d) / d; + } + + /** + * Format a number with the thousand group separator. + */ + function numberWithCommas(value) { + if (formatting) { + var parts = value.toString().split(decimalSeparator); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator); + return parts.join(decimalSeparator); + } else { + // No formatting applies. + return value; + } + } + + /** + * Format a value with thousand group separator and correct decimal char. + */ + function formatPrecision(value, noComma) { + noComma = (angular.isDefined(noComma)) ? noComma : false; + if (!(value || value === 0)) { + return ''; + } + var formattedValue = parseFloat(value).toFixedExcess(decimals); + formattedValue = formattedValue.replace('.', decimalSeparator); + return (noComma) ? formattedValue : numberWithCommas(formattedValue); + } + + function formatViewValue(value) { + if (angular.isString(value) && (value == null || (cleanzero && parseFloat(value.replace(',', '.')) == 0))) return ''; + return ngModelCtrl.$isEmpty(value) ? '' : '' + value; + } + + /** + * Parse the view value. + */ + function parseViewValue(value) { + if (angular.isUndefined(value)) { + value = ''; + } + value = value.toString().replace(decimalSeparator, '.'); + + // Handle leading decimal point, like ".5" + if (value.indexOf('.') === 0) { + value = '0' + value; + } + + // Allow "-" inputs only when min < 0 + if (value.indexOf('-') === 0) { + if (min >= 0) { + value = null; + ngModelCtrl.$setViewValue(formatViewValue(lastValidValue)); + ngModelCtrl.$render(); + } else if (value === '-') { + value = ''; + } + } + + var empty = ngModelCtrl.$isEmpty(value); + if (empty) { + lastValidValue = ''; + //ngModelCtrl.$modelValue = undefined; + } else { + if (regex.test(value) && (value.length <= maxInputLength)) { + if (value > max) { + lastValidValue = max; + } else if (value < min) { + lastValidValue = min; + } else { + lastValidValue = (value === '') ? null : parseFloat(value); + } + } else { + // Render the last valid input in the field + ngModelCtrl.$setViewValue(formatViewValue(lastValidValue)); + ngModelCtrl.$render(); + } + } + + return lastValidValue; + } + + /** + * Calculate the maximum input length in characters. + * If no maximum the input will be limited to 16; the maximum ECMA script int. + */ + function calculateMaxLength(value) { + var length = 16; + if (!angular.isUndefined(value)) { + length = Math.floor(value).toString().length; + } + if (decimals > 0) { + // Add extra length for the decimals plus one for the decimal separator. + length += decimals + 1; + } + if (min < 0) { + // Add extra length for the - sign. + length++; + } + return length; + } + + /** + * Minimum value validator. + */ + function minValidator(value) { + if (!angular.isUndefined(min)) { + if (!ngModelCtrl.$isEmpty(value) && (value < min)) { + return min; + } else { + return value; + } + } else { + return value; + } + } + + /** + * Maximum value validator. + */ + function maxValidator(value) { + if (!angular.isUndefined(max)) { + if (!ngModelCtrl.$isEmpty(value) && (value > max)) { + return max; + } else { + return value; + } + } else { + return value; + } + } + + + /** + * Function for handeling the blur (leave) event on the control. + */ + function onBlur() { + var value = ngModelCtrl.$modelValue; + if (!angular.isUndefined(value)) { + if (value == null || (cleanzero && parseFloat(value) == 0)) { + ngModelCtrl.$viewValue = ""; + ngModelCtrl.$render(); + return; + } + // Format the model value. + ngModelCtrl.$viewValue = formatPrecision(value); + ngModelCtrl.$render(); + } + } + + /** + * Function for handeling the focus (enter) event on the control. + * On focus show the value without the group separators. + */ + function onFocus() { + var value = ngModelCtrl.$modelValue; + if (!angular.isUndefined(value)) { + if (value == null || (cleanzero && parseFloat(value) == 0)) { + ngModelCtrl.$viewValue = ""; + ngModelCtrl.$render(); + return; + } + ngModelCtrl.$viewValue = formatPrecision(value, true).toString().replace(".", decimalSeparator); + ngModelCtrl.$render(); + } + } + } + }) + .directive('elastic', function elastic($timeout, $rootScope) { + return { + restrict: 'A', + link: function ($scope, element, attrs) { + + $scope.initialHeight = $scope.initialHeight || element[0].style.height; + $scope.maxHeight = attrs.elasticMaxHeight || null; + + let resize = function () { + //Controllo che se impostato il param maxHeight e se viene superato blocco il resize + if ($scope.maxHeight && (element[0].scrollHeight > $scope.maxHeight)) { + return; + } + + element[0].style.height = $scope.initialHeight; + element[0].style.height = "" + element[0].scrollHeight + "px"; + }; + + element.on("input change focus", resize); + $timeout(resize, 1500); + + //Funzione per richiamare lo showhide esternamente + $rootScope.$on('resize-elastic-textbox', function (event) { + resize(); + }); + } + }; + }) + .directive('maxlines', function () { + return function (scope, element, attrs) { + element.bind("keydown keypress", function (event) { + if (event.which === 13) { + let text = element.val(), + numberOfLines = (text.match(/\n/g) || []).length + 1, + maxRows = parseInt(element.attr('maxlines')); + + if (event.which === 13 && numberOfLines === maxRows) { + return false; + } + } + }); + }; + }) + + .service('DateRangePickerService', function (moment) { + let service = {}; + + service.getDefaultOptions = function () { + return defaultDateRangePickerOptions; + }; + + service.getTrimestreCustomRangeOptions = function(){ + + let ranges = { + 'Ultimi 30 gg': [moment().subtract(29, 'days'), moment()], + 'Questo Mese': [moment().startOf('month'), moment().endOf('month')], + 'Mese Scorso': [moment().subtract(1,'month').startOf('month'), moment().subtract(1,'month').endOf('month')], + 'Anno in Corso': [moment().startOf('year'), moment().endOf('year')]}; + + let periodi ={ + 1:{start:0,end:2}, + 2:{start:3,end:5}, + 3:{start:6,end:8}, + 4:{start:9,end:11} + }; + + let Anno = moment().format('YYYY'); + for(let i=1;i<5;i++){ + let labelAnno = i+"° Trimestre "+Anno; + ranges[labelAnno] = [moment().month(periodi[i].start).startOf('month'), moment().month(periodi[i].end).endOf('month')]; + } + + ranges['Anno Scorso'] = [moment().subtract(1,'year').startOf('year'), moment().subtract(1,'year').endOf('year')]; + + return ranges; + }; + + /** + * Formatta le date dei filtri nel modo corretto prima di invairle alla richiesta del web service + * @param filtri + * @param nomeDateStart + * @param nomeDateEnd + * @returns {*} + */ + service.getFormattedFilterDate = function (filtri,nomeDateStart,nomeDateEnd,dateFormatString) { + + nomeDateStart = nomeDateStart || 'DateStart'; + nomeDateEnd = nomeDateEnd || 'DateEnd'; + dateFormatString = dateFormatString || 'DD/MM/YYYY'; + + var tmpFilter = angular.copy(filtri); + tmpFilter[nomeDateStart] = moment(tmpFilter[nomeDateStart]).format(dateFormatString); + tmpFilter[nomeDateEnd] = moment(tmpFilter[nomeDateEnd]).format(dateFormatString); + + return tmpFilter; + + }; + + return service; + }); diff --git a/public/admin/js/angularjs/dashboard.module.js b/public/admin/js/angularjs/dashboard.module.js new file mode 100644 index 0000000..c61a87f --- /dev/null +++ b/public/admin/js/angularjs/dashboard.module.js @@ -0,0 +1,82 @@ +'use strict'; + +function DashboardController($scope, Ordini, moment, toaster, AuthService, DateRangePickerService, $timeout, $window) { + + $scope.dateRangeOptions = { + ...defaultDateRangePickerOptions, + ranges: DateRangePickerService.getTrimestreCustomRangeOptions(), + autoApply: true + }; + + const stampaRapportoAdminUri = `${BASE_URL_SITE}/admin/index/stampareportattivita`; + + $scope.loading = true; + $scope.DataConsegna = {startDate: moment().subtract(29, 'days'), endDate: moment()}; + + $scope.Periodo = ''; + + $scope.series = ['Ordini ' + $scope.Periodo, '']; + $scope.colors = ['#44ABF1', '#DDDDDD']; + + $scope.labels = []; + $scope.data = []; + + $scope.TotOrdiniPeriodo = 0; + + $scope.graphOptions = { + legend: {display: false}, + scales: { + yAxes: [ + { + id: 'y-axis-1', + type: 'linear', + display: true, + position: 'left' + } + ] + } + }; + + $scope.$watch('DataConsegna', (oldVal, newVal) => { + $scope.Periodo = 'Dal ' + newVal.startDate.format('DD/MM/YYYY') + ' al ' + newVal.endDate.format('DD/MM/YYYY'); + $scope.refreshGraph(); + }); + + $scope.refreshGraph = () => { + $scope.loading = true; + const per = $scope.DataConsegna.startDate.format('YYYY-MM-DD') + '|' + $scope.DataConsegna.endDate.format('YYYY-MM-DD'); + Ordini.getGraphData(per).then((res) => { + $scope.labels = res.DatiGrafico.labels; + $scope.data = [res.DatiGrafico.data, []]; + $scope.TotOrdiniPeriodo = res.TotOrdini; + }).catch((err) => { + toaster.error("Attenzione", "Errore durante il recupero dei dati del grafico"); + }).finally(() => { + $timeout(() => { + $scope.loading = false + }, 300); + }); + }; + + $scope.stampaRapporto = () => { + + if (!$scope.DataConsegna) { + alert("Devi selezionare un periodo per la stampa rapporto"); + return; + } + + let periodo = $scope.DataConsegna.startDate.format('YYYY-MM-DD') + '|' + $scope.DataConsegna.endDate.format('YYYY-MM-DD'); + + /*if(!confirm(`Aprire la stampa report per il periodo scelto (${periodo}) ?`)){ + return; + }*/ + + let url = `${stampaRapportoAdminUri}/p/${periodo}`; + $window.open(url, '_blank'); + }; + + //$scope.refreshGraph(); + +} + +app.controller('DashboardController', DashboardController); diff --git a/public/admin/js/angularjs/model.js b/public/admin/js/angularjs/model.js new file mode 100644 index 0000000..3105508 --- /dev/null +++ b/public/admin/js/angularjs/model.js @@ -0,0 +1,271 @@ +angular.module('app') + + .factory('SottoAree', function ($resource) { + const resource = $resource(basePath + 'sottoaree/:id', {id: '@id'}, { + update: {method: 'PUT'}, + insert: {method: 'POST'}, + getList: { + method: 'GET', + url: basePath + 'sottoaree', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + }, + getByCodice: { + method: 'GET', + url: basePath + 'sottoaree/m/get-by-codice' + } + }); + return { + get: function (success, error) { + return resource.query(success, error); + }, + find: function (id) { + return resource.get({id: id}).$promise; + }, + insert: function (data) { + return resource.insert(data).$promise; + }, + update: function (data) { + return resource.update(data).$promise; + }, + delete: function (id) { + return resource.delete({id: id}).$promise; + }, + getList: function (data) { + return resource.getList(data).$promise; + }, + getByCodice: function (codice) { + return resource.getByCodice({Codice: codice}).$promise; + } + }; + }) + + .factory('Users', function ($resource) { + const resource = $resource(basePath + 'users/:id', {id: '@id'}, { + update: {method: 'PUT'}, + insert: {method: 'POST'}, + getUserData: { + method: 'GET', + url: basePath + 'users/m/get-user-info', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + }, + getList: { + method: 'GET', + url: basePath + 'users', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + }, + proponiCodiceUtente: { + method: 'GET', + url: basePath + 'users/m/get-codice' + }, + caricaRidersMt: { + method: 'GET', + url: basePath + 'users/m/get-riders-mt', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + }, + }); + return { + get: function (success, error) { + return resource.query(success, error); + }, + find: function (id) { + return resource.get({id: id}).$promise; + }, + getByToken: function (token) { + return resource.getList({token: token}).$promise; + }, + getUserData: function () { + return resource.getUserData().$promise; + }, + insert: function (data) { + return resource.insert(data).$promise; + }, + update: function (data) { + return resource.update(data).$promise; + }, + delete: function (id) { + return resource.delete({id: id}).$promise; + }, + getList: function (data) { + return resource.getList(data).$promise; + }, + proponiCodiceUtente: function (role) { + return resource.proponiCodiceUtente({role: role}).$promise; + }, + caricaRidersMt: function () { + return resource.caricaRidersMt().$promise; + } + }; + }) + + .factory('FasceOrarie', function ($resource) { + const resource = $resource(basePath + 'fasceorarie/:id', {id: '@id'}, { + update: {method: 'PUT'}, + insert: {method: 'POST'}, + getList: { + method: 'GET', + url: basePath + 'fasceorarie', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + } + }); + return { + get: function (success, error) { + return resource.query(success, error); + }, + find: function (id) { + return resource.get({id: id}).$promise; + }, + insert: function (data) { + return resource.insert(data).$promise; + }, + update: function (data) { + return resource.update(data).$promise; + }, + delete: function (id) { + return resource.delete({id: id}).$promise; + }, + getList: function (data) { + return resource.getList(data).$promise; + } + }; + }) + + .factory('TipologieAttivita', function ($resource) { + const resource = $resource(basePath + 'tipologieattivita/:id', {id: '@id'}, { + update: {method: 'PUT'}, + insert: {method: 'POST'}, + getList: { + method: 'GET', + url: basePath + 'tipologieattivita', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + } + }); + return { + get: function (success, error) { + return resource.query(success, error); + }, + find: function (id) { + return resource.get({id: id}).$promise; + }, + insert: function (data) { + return resource.insert(data).$promise; + }, + update: function (data) { + return resource.update(data).$promise; + }, + delete: function (id) { + return resource.delete({id: id}).$promise; + }, + getList: function (data) { + return resource.getList(data).$promise; + } + }; + }) + + .factory('Ordini', function ($resource) { + const resource = $resource(basePath + 'ordini/:id', {id: '@id'}, { + update: {method: 'PUT'}, + insert: {method: 'POST'}, + getList: { + method: 'GET', + url: basePath + 'ordini', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + }, + getOrdiniDaGestire: { + method: 'GET', + url: basePath + 'ordiniadmin', + transformResponse: function (result,headers) { + let res = {}; + res.data = angular.fromJson(result); + res.headers = headers(); + return res; + } + }, + checkStatoOrdiniSync: { + method: 'GET', + url: basePath + 'ordiniadmin/m/check-ordini-sync', + }, + setStatoOrdiniSync: { + method: 'GET', + url: basePath + 'ordiniadmin/m/set-ordini-sync', + }, + resetMtDashboard: { + method: 'GET', + url: basePath + 'ordiniadmin/m/reset-mt-dashboard', + }, + getGraphData: { + method: 'GET', + url: basePath + 'ordiniadmin/m/get-graph-data', + } + }); + return { + get: function (success, error) { + return resource.query(success, error); + }, + find: function (id) { + return resource.get({id: id}).$promise; + }, + insert: function (data) { + return resource.insert(data).$promise; + }, + update: function (data) { + return resource.update(data).$promise; + }, + delete: function (id) { + return resource.delete({id: id}).$promise; + }, + getList: function (data) { + return resource.getList(data).$promise; + }, + getOrdiniDaGestire: function (data) { + return resource.getOrdiniDaGestire(data).$promise; + }, + checkStatoOrdiniSync: function () { + return resource.checkStatoOrdiniSync().$promise; + }, + setStatoOrdiniSync: function (stato) { + return resource.setStatoOrdiniSync({s: stato}).$promise; + }, + resetMtDashboard: function () { + return resource.resetMtDashboard().$promise; + }, + getGraphData: function (periodo) { + return resource.getGraphData({p: periodo}).$promise; + } + }; + }); + diff --git a/public/admin/js/globalfunctions.js b/public/admin/js/globalfunctions.js new file mode 100644 index 0000000..48bdbac --- /dev/null +++ b/public/admin/js/globalfunctions.js @@ -0,0 +1,565 @@ +'use strict'; + +/******************** PARAMETRI ******************************/ +const BASE_URL_SITE = $('link[rel="canonical"]').attr('href'); +var modal_id = '#modal'; +var form_id = '#' + $(modal_id).attr('data-form'); +var form = $(form_id); +var filter_modal_id = '#filterModal'; +var filter_form_id = '#' + $(filter_modal_id).attr('data-form'); +var filter_form = $(filter_form_id); +var modalLoader = $('#modal-loader'); +/*********************************************************************************/ + +/**** FUNZIONI GLOBALI PERSONALIZZATE ***/ + +const defaultDatePickerOptions = { + language: 'it', + format: "dd/mm/yyyy", + autoclose: true +}; + +const defaultDateRangePickerOptions = { + autoApply: false, + autoUpdateInput: false, + linkedCalendars: false, + showCustomRangeLabel: false, + locale: { + "format": "DD/MM/YYYY", + "separator": " | ", + "applyLabel": "Ok", + "cancelLabel": "Reset", + "fromLabel": "Da", + "toLabel": "A", + "customRangeLabel": "Custom", + "weekLabel": "W", + "daysOfWeek": [ + "Dom", + "Lun", + "Mar", + "Mer", + "Gio", + "Ven", + "Sab" + ], + "monthNames": [ + "Gennaio", + "Febbraio", + "Marzo", + "Aprile", + "Maggio", + "Giugno", + "Luglio", + "Agosto", + "Settembre", + "Ottobre", + "Novembre", + "Dicembre" + ], + "firstDay": 1 + }, + alwaysShowCalendars: true, + ranges: { + 'Oggi': [moment(), moment()], + 'Ieri': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], + 'Ultimi 7 gg': [moment().subtract(6, 'days'), moment()], + 'Ultimi 30 gg': [moment().subtract(29, 'days'), moment()], + 'Questo Mese': [moment().startOf('month'), moment().endOf('month')], + 'Mese Scorso': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] + } +}; + +let $table; + +String.prototype.capitalize = function () { + return this.charAt(0).toUpperCase() + this.slice(1) +} + +$('a[href="#"]').click(function (event) { + event.preventDefault(); +}); + +$('a[data-widget="pushmenu"]').click(function () { + let collapsed = ($('body').hasClass('sidebar-collapse')) ? 0 : 1; + $.cookie('ui_sidebar_collapsed', collapsed, {path: '/'}); + if (collapsed) { + $table.trigger('reflow'); + } +}); + +/**************************************** + ************* SEZIONE FORM ************* + ***************************************/ + +function populateForm(data, frm) { + $.each(data, function (key, value) { + var $ctrl = $('[name=' + key + ']', frm); + if ($ctrl.is('select')) { + $("option", $ctrl).each(function () { + if (this.value == value) { + this.selected = true; + } + }); + } else { + switch ($ctrl.attr("type")) { + case "text": + case "hidden": + case "number": + $ctrl.val(value); + break; + case "textarea": + $ctrl.val(value); + break; + case "radio": + case "checkbox": + $ctrl.each(function () { + if ($(this).attr('id') == key && value == '1') { + $(this).iCheck('check'); + } + }); + break; + default: + $ctrl.val(value); + break; + } + } + }); + $('input.datepicker').datepicker('update'); +} + +function resetForm(tipo, form_id) { + + $(form_id + ' #ErrorDescription').html('').addClass('d-none'); + $(form_id + ' div.form-group').removeClass('has-error'); + $(form_id + ' div.multi-line-field-label-error').removeClass('has-error'); + $(form_id + ' div.label-danger').addClass('d-none').html(''); + + if (tipo != 'errors') { + $(form_id).clearForm(); + } +} + +function getErrorHtml(formErrors, noBr) { + + if ((typeof (formErrors) === 'undefined') || (formErrors.length < 1)) return; + + noBr = (typeof (noBr) === 'undefined') ? false : noBr; + + var out = ''; + let brtxt = (noBr) ? '' : '
'; + for (let errorKey in formErrors) { + out += (formErrors[errorKey] + brtxt); + } + + return out; +} + +function showErrors(form_id, resp) { + resetForm('errors', form_id); + //$(form_id + ' #ErrorDescription').html(resp.message).removeClass('d-none'); + toastr.error(resp.message); + for (let key in resp.errors) { + + let errBlock = $(form_id + ' div#' + key); + let labelBlock = $(form_id + ' div#' + key + ' .label-danger'); + + errBlock.addClass('has-error'); + + if (labelBlock.length === 0) { + labelBlock = errBlock.parent().children(' .label-danger'); + labelBlock.html(labelBlock.html() + ' | ' + getErrorHtml(resp.errors[key], true)); + labelBlock.removeClass('d-none'); + } else { + labelBlock.html(getErrorHtml(resp.errors[key])).removeClass('d-none'); + } + + } +} + +function initDatePicker() { + $('.datepicker').datepicker(defaultDatePickerOptions); +} + +function initDateRangePicker(customRange) { + + let dateRangePickerOptions = defaultDateRangePickerOptions; + + if (customRange) { + dateRangePickerOptions.ranges = customRange; + } + + $('input[daterangepicker]').daterangepicker(dateRangePickerOptions); + + $('input[daterangepicker]').on('apply.daterangepicker', function (ev, picker) { + $(this).val(picker.startDate.format('DD/MM/YYYY') + ' | ' + picker.endDate.format('DD/MM/YYYY')); + }); + + $('input[daterangepicker]').on('cancel.daterangepicker', function (ev, picker) { + $(this).val(''); + }); +} + +function initSwitchButton() { + //Abilita gli swithc button + $("input[data-bootstrap-switch]").each(function () { + $(this).bootstrapSwitch('state', $(this).prop('checked')); + }); +} + +function initICheck() { + + var tableBody = $('#tablebody'); + + $('#select_all').click(function (link) { + link.preventDefault(); + tableBody.find(':checkbox').iCheck('check'); + }); + + $('#deselect_all').click(function (link) { + link.preventDefault(); + tableBody.find(':checkbox').iCheck('uncheck'); + }); + + $('#invert_all').click(function (link) { + link.preventDefault(); + tableBody.find(':checkbox').iCheck('toggle'); + }); +} + +function initTooltip() { + $('[data-toggle="tooltip"]').tooltip(); +} + +function initPopover() { + $('[data-toggle="popover"]').popover(); +} + +function initSummernote() { + $('.summernote').summernote({ + dialogsInBody: true + }); +} + +function initSelect2(){ + $('select[select2]').select2(); +} + +/*function initFontIconPicker(options){ + $('[font-icon-picker]').fontIconPicker(options); +}*/ + +function refreshFormComponents() { + $("input[type='checkbox'], input[type='radio']").not(".no-icheck").iCheck({ + checkboxClass: 'icheckbox_square-blue', + radioClass: 'iradio_square-blue' + }); + + initTooltip(); + initPopover(); +} + +function initFormComponents() { + + refreshFormComponents(); + + initICheck(); + initSwitchButton(); + initDatePicker(); + initDateRangePicker(); +} + +$(document).ready(() => { + setOrderThValue(); + fixHeghtOfTableList(); +}).delegate('a[href="#"]', 'click', function (link) { + link.preventDefault(); +}) + .delegate('#filterData', 'click', function (link) { + link.preventDefault(); + $(filter_modal_id).modal('show'); + }) + .delegate('#filtra', 'click', function (link) { + link.preventDefault(); + filter_form.submit(); + }) + .delegate('#resetFiltri', 'click', function (link) { + link.preventDefault(); + filter_form.clearForm(); + filter_form.find('select').val(''); + }) + .delegate('th[data-ord]', 'click', function (link) { + link.preventDefault(); + + const ordVal = $(this).attr('data-ord'); + const tipoOrderEl = $('#tipoOrder'); + const tipoOrder = (tipoOrderEl.val() === 'ASC') ? 'DESC' : 'ASC'; + + $('#order').val(ordVal); + tipoOrderEl.val(tipoOrder); + + $('#searchForm').submit(); + }) + .delegate('select[data-refresh-search-form]', 'change', function (link) { + link.preventDefault(); + $('#searchForm').submit(); + }) + +/******************************************* + ************* SEZIONE TABELLA ************* + ******************************************/ + +function setOrderThValue() { + const ordVal = $('#order').val(); + const tipoOrd = $('#tipoOrder').val(); + + $('th[data-ord]').find('i').remove(); + + const thOrd = $('th[data-ord="' + ordVal + '"]'); + + const icon = (tipoOrd === 'ASC') ? 'fa-chevron-up' : 'fa-chevron-down'; + const iconText = ``; + + thOrd.find('i').remove(); + const thText = thOrd.html() + ' ' + iconText; + + thOrd.html(thText); +} + +function initTableFlotHeader() { + + //Abilito l'header fisso + $table = $('.table.flot-header'); + $table.floatThead({ + autoReflow: true, + scrollContainer: function ($table) { + return $table.closest('.table-wrapper'); + }, + responsiveContainer: function ($table) { + return $table.closest('.table-responsive'); + } + }); + + //Imposta l'altezza del table-wrapper + fixHeghtOfTableList(); +} + +function refreshTable() { + if ($table) { + fixHeghtOfTableList(); + } +} + +function fixHeghtOfTableList() { + + let windowHeight = $(window).height(); + + let navbarHeight = $(".navbar").outerHeight() || 0; + let footerHeight = $(".main-footer").outerHeight() || 0; + + let contentHeaderHeight = $(".content-header").outerHeight() || 0; + let boxHeaderHeight = $(".box-header").outerHeight() || 0; + + let boxFooterHeight = $(".box-footer").outerHeight() || 0; + + let tableWrapperHeight = windowHeight - (navbarHeight + footerHeight + contentHeaderHeight + boxHeaderHeight + boxFooterHeight + 15); + $('.table-wrapper').css("height", tableWrapperHeight + "px"); + + let theadHeight = $('.table-wrapper thead').outerHeight() + 1; + + const totHeight = tableWrapperHeight - theadHeight; + + $('td.no-rows').css("height", (totHeight) + "px"); +} + +$(window).resize(function () { + fixHeghtOfTableList(); + $table.trigger('reflow'); +}); + +/************************************************** + ************* FUNZIONI SPECIALIZZATE ************* + *************************************************/ + +function password_generator(len) { + let length = (len) ? (len) : (10); + let string = "abcdefghijklmnopqrstuvwxyz"; //to upper + let numeric = '0123456789'; + let punctuation = '!@#$%^&*()_+~`|}{[]\:;?><,./-='; + let password = ""; + let character = ""; + let crunch = true; + while (password.length < length) { + let entity1 = Math.ceil(string.length * Math.random() * Math.random()); + let entity2 = Math.ceil(numeric.length * Math.random() * Math.random()); + let entity3 = Math.ceil(punctuation.length * Math.random() * Math.random()); + let hold = string.charAt(entity1); + hold = (entity1 % 2 == 0) ? (hold.toUpperCase()) : (hold); + character += hold; + character += numeric.charAt(entity2); + character += punctuation.charAt(entity3); + password = character; + } + return password; +} + +function copyToClipboard(elem) { + // create hidden text element, if it doesn't already exist + var targetId = "_hiddenCopyText_"; + var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA"; + var origSelectionStart, origSelectionEnd; + if (isInput) { + // can just use the original source element for the selection and copy + target = elem; + origSelectionStart = elem.selectionStart; + origSelectionEnd = elem.selectionEnd; + } else { + // must use a temporary form element for the selection and copy + target = document.getElementById(targetId); + if (!target) { + var target = document.createElement("textarea"); + target.style.position = "absolute"; + target.style.left = "-9999px"; + target.style.top = "0"; + target.id = targetId; + document.body.appendChild(target); + } + target.textContent = elem.textContent; + } + // select the content + var currentFocus = document.activeElement; + target.focus(); + target.setSelectionRange(0, target.value.length); + + // copy the selection + var succeed; + try { + succeed = document.execCommand("copy"); + } catch (e) { + succeed = false; + } + // restore original focus + if (currentFocus && typeof currentFocus.focus === "function") { + currentFocus.focus(); + } + + if (isInput) { + // restore prior selection + elem.setSelectionRange(origSelectionStart, origSelectionEnd); + } else { + // clear temporary content + target.textContent = ""; + } + return succeed; +} + +/** + * Questa funzione passato un template html ne sostituisce i parametri + * @param template + * @param params + */ +function prepareHTMLWithParams(template, params) { + if (params instanceof Array) { + params.forEach(function (val, key) { + template = template.replace(new RegExp('%' + key + '%', 'g'), val); + }); + } else if (params instanceof Object) { + Object.keys(params).forEach(function (key) { + template = template.replace(new RegExp('%' + key + '%', 'g'), params[key]); + }); + } + + return template; +} + +/************************************************************************************ + ************* SEZIONE FUNZIONI GENRICHE PER LA GESTIONE DELLE IMMAGINI ************* + ************************************************************************************/ + +/** + * Questa funzione carica l'immagine nel box anteprima + * @param basePathImage + * @param nomeVaribileFile + * @param valFile + */ +function popolaImmagine(basePathImage, nomeVaribileFile, valFile, custom_class) { + + if (custom_class === undefined) { + custom_class = 'img-fluid img-thumbnail'; + } + + if (valFile) { + $('#preview_block_' + nomeVaribileFile).addClass(custom_class).attr('src', basePathImage + valFile); + $('#image-preview-filename-' + nomeVaribileFile).val(valFile); + $("#image-preview-input-title-" + nomeVaribileFile).text("Cambia"); + $("#image-preview-clear-" + nomeVaribileFile).show(); + } +} + +/** + * Questa funzione resetta il blocco immagine in base al parametro nome File che riceve + * @param nomeVariabileFile + * @param baseImagePath + */ +function resetImageInput(nomeVariabileFile, baseImagePath) { + // $('#preview_block_' + nomeVariabileFile).attr('src', baseImagePath + 'noimage.jpg'); + $('#preview_block_' + nomeVariabileFile).attr('src', baseImagePath + 'no_img.png'); + $('#image-preview-filename-' + nomeVariabileFile).val(''); + $('#image-preview-clear-' + nomeVariabileFile).hide(); + $('#image-preview-input-title-' + nomeVariabileFile).html('Carica ...'); + + var input_file = $('input#image_' + nomeVariabileFile); + input_file.replaceWith(input_file.val('').clone(true)); +} + +/** + * Questa funzione definisce gli event handler per il nome immagine che riceve in entrata + * + * @param nome_immagine + * @param base_image_path + * @param custom_class [default value: img-fluid img-thumbnail'] + * @param custom_style [default value: ''] + * + * '?' sta a indicare la Varibile NomeFile che si passa, dovrebbe corrispondere al nome del campo immagine + * image-preview-clear-? = Identificativo del pulsante "Cancella" + * image-preview-input-title-? = Identifica il testo del pusante "Scegli..." o "Cambia" + * image-preview-input-? = Identificativo del input di tipo FILE dove andra dell'immagine + * image-preview-filename-? = Identificativo dell'input che contiene il nome del file immagine caricato + * image_preview_block_? = Identificativo del blocco che contiene l'html con il tag + * preview_block_? = Identificatico dell'elemento immagine per visualizzare l'anteprima + */ +function defineEventHandlerForImageBlock(nome_immagine, base_image_path, custom_class, custom_style) { + + if (custom_class === undefined) { + custom_class = 'img-fluid img-thumbnail'; + } + + if (custom_style === undefined) { + custom_style = ''; + } + + //Evento click pulsante cancella + $('#image-preview-clear-' + nome_immagine).click(function () { + resetImageInput(nome_immagine, base_image_path); + }); + + //Evento che al caricamento dell'immgaine ne crea il blocco anteprima + $("#image-preview-input-" + nome_immagine + " input:file").change(function () { + let img = $('', { + id: 'preview_block_' + nome_immagine, + class: custom_class, + style: custom_style + }); + let nome_file_1 = this.files[0]; + let reader_file_1 = new FileReader(); + // Set preview image into the popover data-content + reader_file_1.onload = function (e) { + $("#image-preview-input-title-" + nome_immagine).text("Cambia"); + $("#image-preview-clear-" + nome_immagine).show(); + $("#image-preview-filename-" + nome_immagine).val(nome_file_1.name); + img.attr('src', e.target.result); + $("#image_preview_block_" + nome_immagine).html($(img)[0].outerHTML); + }; + reader_file_1.readAsDataURL(nome_file_1); + }); +} + diff --git a/public/admin/js/handler/admin/event_handler_dashboard.js b/public/admin/js/handler/admin/event_handler_dashboard.js new file mode 100644 index 0000000..c6247db --- /dev/null +++ b/public/admin/js/handler/admin/event_handler_dashboard.js @@ -0,0 +1,3 @@ +$('document').ready(function () { + +}); diff --git a/public/admin/js/handler/admin/event_handler_listemails.js b/public/admin/js/handler/admin/event_handler_listemails.js new file mode 100644 index 0000000..7510384 --- /dev/null +++ b/public/admin/js/handler/admin/event_handler_listemails.js @@ -0,0 +1,177 @@ +'use strict'; + +function beforeSubmit() { + modalLoader.removeClass('d-none').addClass('d-flex'); +} + +function errorOnSubmit() { + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +function afterSubmit(resp) { + if (resp.success === 'invalid') { + showErrors(form_id, resp); + } else if (resp.success === true) { + + let id; + let mex = ''; + if (resp.op === 'insert') { + $('#tablebody').prepend(resp.text); + $('input#id').val(resp.data.id); + mex = 'Inserimento effettuato con successo'; + id = resp.data.id; + } else { + $('tr[data-id=' + resp.id + ']').replaceWith(resp.text); + mex = 'Modifca effettuata con successo'; + id = resp.id; + } + + refreshFormComponents(); + $('#norows').remove(); + $(modal_id).modal('hide'); + $('#save').attr('op', 'insert'); + myResetForm('', form_id); + + toastr.success(mex); + } else { + toastr.error(resp.shortMessage); + console.error(resp.message); + } + + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +//Specializzo la funzione resetForm nel caso ci sia bisogno di campi TEXTAREA o immagini da resettare +function myResetForm(tipo, formid) { + resetForm(tipo, formid); +} + +function edit(id) { + $('#save').attr('op', 'edit'); + var dati = 'id=' + id; + var url = $(form_id).attr('data-get'); + myResetForm('all', form_id); + $.getJSON(url, dati, function (resp) { + if (resp.success) { + populateForm(resp, form); + + $(modal_id).modal('show'); + } else { + toastr.error(resp.message); + } + }); +} + +$(document).ready(function () { + initFormComponents(); + initTableFlotHeader(); +}) + .delegate('#new', 'click', function (link) { + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + $(modal_id).modal('show'); + }) + .delegate('#save', 'click', function (link) { + link.preventDefault(); + var operation = $(this).attr('op'); + var options = { + target: '#ErrorDescription', + beforeSubmit: beforeSubmit, + success: afterSubmit, + error: errorOnSubmit, + data: { + op: operation + }, + dataType: 'json', + resetForm: false + }; + $(form_id).ajaxSubmit(options); + }) + .delegate('#edit,#editLink', 'click', function (link) { + link.preventDefault(); + const id = $(this).parents('tr').attr('data-id'); + edit(id); + }) + .delegate('#delete', 'click', function (link) { + link.preventDefault(); + + const url = $(form_id).attr('data-delete'); + let tr = $(this).parents('tr'); + const cod = tr.attr('data-cod'); + let id = tr.attr('data-id'); + let message = 'Sei sicuro di voler eliminare definitivamente l\'elemento?'; + + if (confirm(message)) { + $.ajax({ + type: 'POST', + url: url, + data: 'id=' + id + "&cod=" + cod, + dataType: 'json', + complete: function (resp) { + + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + + toastr.success('Eliminazione effettuata con successo'); + + } else { + toastr.error(resp.message); + } + } + }); + } + }) + .delegate('#delete_select', 'click', function (link) { + link.preventDefault(); + + let message = 'Sei sicuro di voler eliminare definitivamente gli elementi selezionati?'; + + if (confirm(message)) { + let data = []; + $('#tablebody').find(':checkbox').each(function () { + if (this.checked) { + data.push($(this).val()); + } + }); + + let url = $(this).attr('href'); + + $.ajax({ + type: 'POST', + url: url, + data: { + data: data + }, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + var ids = resp.id; + for (var i = 0; i < ids.length; i++) { + var tr = $('#tablebody tr[data-id=' + ids[i] + ']'); + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + } + } else { + toastr.error(resp.message); + } + + $('#tablebody').find(':checkbox').iCheck('uncheck'); + } + }); + } + }) + .delegate(modal_id,'hidden.bs.modal',function(link){ + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + }); diff --git a/public/admin/js/handler/admin/event_handler_listemailtemplate.js b/public/admin/js/handler/admin/event_handler_listemailtemplate.js new file mode 100644 index 0000000..ffa95f7 --- /dev/null +++ b/public/admin/js/handler/admin/event_handler_listemailtemplate.js @@ -0,0 +1,181 @@ +'use strict'; + +function beforeSubmit() { + modalLoader.removeClass('d-none').addClass('d-flex'); +} + +function errorOnSubmit() { + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +function afterSubmit(resp) { + if (resp.success === 'invalid') { + showErrors(form_id, resp); + } else if (resp.success === true) { + + let id; + let mex = ''; + if (resp.op === 'insert') { + $('#tablebody').prepend(resp.text); + $('input#id').val(resp.data.id); + mex = 'Inserimento effettuato con successo'; + id = resp.data.id; + } else { + $('tr[data-id=' + resp.id + ']').replaceWith(resp.text); + mex = 'Modifca effettuata con successo'; + id = resp.id; + } + + refreshFormComponents(); + $('#norows').remove(); + $(modal_id).modal('hide'); + $('#save').attr('op', 'insert'); + myResetForm('', form_id); + + toastr.success(mex); + } else { + toastr.error(resp.shortMessage); + console.error(resp.message); + } + + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +//Specializzo la funzione resetForm nel caso ci sia bisogno di campi TEXTAREA o immagini da resettare +function myResetForm(tipo, formid) { + resetForm(tipo, formid); + $('textarea#Testo').summernote('code', ''); +} + +function edit(id) { + $('#save').attr('op', 'edit'); + var dati = 'id=' + id; + var url = $(form_id).attr('data-get'); + myResetForm('all', form_id); + $.getJSON(url, dati, function (resp) { + if (resp.success) { + populateForm(resp, form); + + $('textarea#Testo').summernote('code', resp.Testo); + + $(modal_id).modal('show'); + } else { + toastr.error(resp.message); + } + }); +} + +$(document).ready(function () { + initFormComponents(); + initTableFlotHeader(); + initSummernote(); +}) + .delegate('#new', 'click', function (link) { + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + $(modal_id).modal('show'); + }) + .delegate('#save', 'click', function (link) { + link.preventDefault(); + var operation = $(this).attr('op'); + var options = { + target: '#ErrorDescription', + beforeSubmit: beforeSubmit, + success: afterSubmit, + error: errorOnSubmit, + data: { + op: operation + }, + dataType: 'json', + resetForm: false + }; + $(form_id).ajaxSubmit(options); + }) + .delegate('#edit,#editLink', 'click', function (link) { + link.preventDefault(); + const id = $(this).parents('tr').attr('data-id'); + edit(id); + }) + .delegate('#delete', 'click', function (link) { + link.preventDefault(); + + const url = $(form_id).attr('data-delete'); + let tr = $(this).parents('tr'); + const cod = tr.attr('data-cod'); + let id = tr.attr('data-id'); + let message = 'Sei sicuro di voler eliminare definitivamente l\'elemento?'; + + if (confirm(message)) { + $.ajax({ + type: 'POST', + url: url, + data: 'id=' + id + "&cod=" + cod, + dataType: 'json', + complete: function (resp) { + + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + + toastr.success('Eliminazione effettuata con successo'); + + } else { + toastr.error(resp.message); + } + } + }); + } + }) + .delegate('#delete_select', 'click', function (link) { + link.preventDefault(); + + let message = 'Sei sicuro di voler eliminare definitivamente gli elementi selezionati?'; + + if (confirm(message)) { + let data = []; + $('#tablebody').find(':checkbox').each(function () { + if (this.checked) { + data.push($(this).val()); + } + }); + + let url = $(this).attr('href'); + + $.ajax({ + type: 'POST', + url: url, + data: { + data: data + }, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + var ids = resp.id; + for (var i = 0; i < ids.length; i++) { + var tr = $('#tablebody tr[data-id=' + ids[i] + ']'); + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + } + } else { + toastr.error(resp.message); + } + + $('#tablebody').find(':checkbox').iCheck('uncheck'); + } + }); + } + }) + .delegate(modal_id,'hidden.bs.modal',function(link){ + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + }); diff --git a/public/admin/js/handler/admin/event_handler_settings.js b/public/admin/js/handler/admin/event_handler_settings.js new file mode 100644 index 0000000..03e8069 --- /dev/null +++ b/public/admin/js/handler/admin/event_handler_settings.js @@ -0,0 +1,97 @@ +'use strict'; + +function resetForm(tipo) { + $('#Error_Description').html('').addClass('hidden'); + $('.input-group').removeClass('has-error'); + $('.form-control').removeClass('no-border'); + $('.error-icon').addClass('hidden'); + $('.label-error').addClass('hidden').html(''); + if (tipo != 'errors') { + $('.form-control').val(''); + } +} + +function beforeSubmit() { + +} + +function errorOnSubmit() { + $('#modal-loader').addClass('hidden'); +} + +function afterSubmit(resp) { + + $('.has-error').removeClass('has-error'); + $.each(resp, function (index, val) { + if (val == 'OK') $('#' + index).addClass('has-success'); + else $('#' + index).addClass('has-error'); + }); + + toastr.success('Parametri di configurazione aggiornati con successo.'); +} + +$(document).ready(function () { + + initDatePicker(); + initTooltip(); + initPopover(); + initSwitchButton(); + + var options = { + target: '#Error_Description', + beforeSubmit: beforeSubmit, + error: errorOnSubmit, + success: afterSubmit, + dataType: 'json', + resetForm: false + }; + + $('a.setting-tab').click(function () { + var tabname = $(this).attr('href'); + tabname = tabname.replace('#', ''); + $.cookie('settings_tabname', tabname); + }); + + $(".btn-save").click(function (link) { + link.preventDefault(); + const formID = $('.tab-pane.active').attr('id').capitalize(); + const form = $('form#settings' + formID); + form.ajaxSubmit(options); + return false; + }); + + $('#btn-new-passoword').click(function (e) { + e.preventDefault(); + var form = $('#password_form'); + form.ajaxSubmit({ + target: '#Error_Description', + success: function (resp) { + if (!resp.status) { + toastr.warning(" " + resp.message); + if (resp.resetForm) { + $('[form="password_form"]').val(''); + } + } else { + $('[form="password_form"]').val(''); + toastr.warning(" La password è stata reimpostata correttamente"); + } + }, + dataType: 'json', + resetForm: false + }); + return false; + }); + + $("#BtnGeneraPassword").click(function (event) { + event.preventDefault(); + $("#superPwd").val(password_generator(20)); + }); + + $("#BtnCopyToClipboard").click(function (event) { + event.preventDefault(); + $('#superPwd').attr('type', 'text'); + copyToClipboard($('#superPwd')[0]); + $('#superPwd').attr('type', 'password'); + }); + +}); diff --git a/public/admin/js/handler/default/event_handler_login.js b/public/admin/js/handler/default/event_handler_login.js new file mode 100644 index 0000000..a57beec --- /dev/null +++ b/public/admin/js/handler/default/event_handler_login.js @@ -0,0 +1,7 @@ +$(function () { + $('input').iCheck({ + checkboxClass: 'icheckbox_square-blue', + radioClass: 'iradio_square-blue', + increaseArea: '20%' // optional + }); +}); diff --git a/public/admin/js/handler/monitoring/event_handler_listaccesslog.js b/public/admin/js/handler/monitoring/event_handler_listaccesslog.js new file mode 100644 index 0000000..342de0e --- /dev/null +++ b/public/admin/js/handler/monitoring/event_handler_listaccesslog.js @@ -0,0 +1,177 @@ +'use strict'; + +function beforeSubmit() { + modalLoader.removeClass('d-none').addClass('d-flex'); +} + +function errorOnSubmit() { + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +function afterSubmit(resp) { + if (resp.success === 'invalid') { + showErrors(form_id, resp); + } else if (resp.success === true) { + + let id; + let mex = ''; + if (resp.op === 'insert') { + $('#tablebody').prepend(resp.text); + $('input#id').val(resp.data.id); + mex = 'Inserimento effettuato con successo'; + id = resp.data.id; + } else { + $('tr[data-id=' + resp.id + ']').replaceWith(resp.text); + mex = 'Modifca effettuata con successo'; + id = resp.id; + } + + refreshFormComponents(); + $('#norows').remove(); + $(modal_id).modal('hide'); + $('#save').attr('op', 'insert'); + myResetForm('', form_id); + + toastr.success(mex); + } else { + toastr.error(resp.shortMessage); + console.error(resp.message); + } + + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +//Specializzo la funzione resetForm nel caso ci sia bisogno di campi TEXTAREA o immagini da resettare +function myResetForm(tipo, formid) { + resetForm(tipo, formid); +} + +function edit(id) { + $('#save').attr('op', 'edit'); + let dati = 'id=' + id; + let url = $(form_id).attr('data-get'); + myResetForm('all', form_id); + $.getJSON(url, dati, function (resp) { + if (resp.success) { + populateForm(resp, form); + + $(modal_id).modal('show'); + } else { + toastr.error(resp.message); + } + }); +} + +$(document).ready(function () { + initFormComponents(); + initTableFlotHeader(); +}) + .delegate('#new', 'click', function (link) { + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + $(modal_id).modal('show'); + }) + .delegate('#save', 'click', function (link) { + link.preventDefault(); + let operation = $(this).attr('op'); + let options = { + target: '#ErrorDescription', + beforeSubmit: beforeSubmit, + success: afterSubmit, + error: errorOnSubmit, + data: { + op: operation + }, + dataType: 'json', + resetForm: false + }; + $(form_id).ajaxSubmit(options); + }) + .delegate('#edit,#editLink', 'click', function (link) { + link.preventDefault(); + const id = $(this).parents('tr').attr('data-id'); + edit(id); + }) + .delegate('#delete', 'click', function (link) { + link.preventDefault(); + + const url = $(form_id).attr('data-delete'); + let tr = $(this).parents('tr'); + const cod = tr.attr('data-cod'); + let id = tr.attr('data-id'); + let message = 'Sei sicuro di voler eliminare definitivamente l\'elemento?'; + + if (confirm(message)) { + $.ajax({ + type: 'POST', + url: url, + data: 'id=' + id + "&cod=" + cod, + dataType: 'json', + complete: function (resp) { + + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + + toastr.success('Eliminazione effettuata con successo'); + + } else { + toastr.error(resp.message); + } + } + }); + } + }) + .delegate('#delete_select', 'click', function (link) { + link.preventDefault(); + + let message = 'Sei sicuro di voler eliminare definitivamente gli elementi selezionati?'; + + if (confirm(message)) { + let data = []; + $('#tablebody').find(':checkbox').each(function () { + if (this.checked) { + data.push($(this).val()); + } + }); + + let url = $(this).attr('href'); + + $.ajax({ + type: 'POST', + url: url, + data: { + data: data + }, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + var ids = resp.id; + for (var i = 0; i < ids.length; i++) { + var tr = $('#tablebody tr[data-id=' + ids[i] + ']'); + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + } + } else { + toastr.error(resp.message); + } + + $('#tablebody').find(':checkbox').iCheck('uncheck'); + } + }); + } + }) + .delegate(modal_id,'hidden.bs.modal',function(link){ + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + }); diff --git a/public/admin/js/handler/monitoring/event_handler_listerrorlog.js b/public/admin/js/handler/monitoring/event_handler_listerrorlog.js new file mode 100644 index 0000000..a634584 --- /dev/null +++ b/public/admin/js/handler/monitoring/event_handler_listerrorlog.js @@ -0,0 +1,316 @@ +'use strict'; + +function beforeSubmit() { + modalLoader.removeClass('d-none').addClass('d-flex'); +} + +function errorOnSubmit() { + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +function afterSubmit(resp) { + if (resp.success === 'invalid') { + showErrors(form_id, resp); + } else if (resp.success === true) { + + let id; + let mex = ''; + if (resp.op === 'insert') { + $('#tablebody').prepend(resp.text); + $('input#id').val(resp.data.id); + mex = 'Inserimento effettuato con successo'; + id = resp.data.id; + } else { + $('tr[data-id=' + resp.id + ']').replaceWith(resp.text); + mex = 'Modifca effettuata con successo'; + id = resp.id; + } + + refreshFormComponents(); + $('#norows').remove(); + $(modal_id).modal('hide'); + $('#save').attr('op', 'insert'); + myResetForm('', form_id); + + toastr.success(mex); + } else { + toastr.error(resp.shortMessage); + console.error(resp.message); + } + + modalLoader.removeClass('d-flex').addClass('d-none'); +} + +//Specializzo la funzione resetForm nel caso ci sia bisogno di campi TEXTAREA o immagini da resettare +function myResetForm(tipo, formid) { + resetForm(tipo, formid); +} + +function edit(id) { + $('#save').attr('op', 'edit'); + let dati = 'id=' + id; + let url = $(form_id).attr('data-get'); + myResetForm('all', form_id); + $.getJSON(url, dati, function (resp) { + if (resp.success) { + $('#main_contenitor').html(resp.text); + + $(modal_id).modal('show'); + } else { + toastr.error(resp.message); + } + }); +} + +$(document).ready(function () { + initFormComponents(); + initTableFlotHeader(); +}) + .delegate('#new', 'click', function (link) { + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + $(modal_id).modal('show'); + }) + .delegate('#save', 'click', function (link) { + link.preventDefault(); + var operation = $(this).attr('op'); + var options = { + target: '#ErrorDescription', + beforeSubmit: beforeSubmit, + success: afterSubmit, + error: errorOnSubmit, + data: { + op: operation + }, + dataType: 'json', + resetForm: false + }; + $(form_id).ajaxSubmit(options); + }) + .delegate('#edit,#editLink', 'click', function (link) { + link.preventDefault(); + const id = $(this).parents('tr').attr('data-id'); + edit(id); + }) + .delegate('#delete', 'click', function (link) { + link.preventDefault(); + + const url = $(form_id).attr('data-delete'); + let tr = $(this).parents('tr'); + const cod = tr.attr('data-cod'); + let id = tr.attr('data-id'); + let message = 'Sei sicuro di voler eliminare definitivamente l\'elemento?'; + + if (confirm(message)) { + $.ajax({ + type: 'POST', + url: url, + data: 'id=' + id + "&cod=" + cod, + dataType: 'json', + complete: function (resp) { + + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + + toastr.success('Eliminazione effettuata con successo'); + + } else { + toastr.error(resp.message); + } + } + }); + } + }) + .delegate('#delete_select', 'click', function (link) { + link.preventDefault(); + + let message = 'Sei sicuro di voler eliminare definitivamente gli elementi selezionati?'; + + if (confirm(message)) { + let data = []; + $('#tablebody').find(':checkbox').each(function () { + if (this.checked) { + data.push($(this).val()); + } + }); + + let url = $(this).attr('href'); + + $.ajax({ + type: 'POST', + url: url, + data: { + data: data + }, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + var ids = resp.id; + for (var i = 0; i < ids.length; i++) { + var tr = $('#tablebody tr[data-id=' + ids[i] + ']'); + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + } + } else { + toastr.error(resp.message); + } + + $('#tablebody').find(':checkbox').iCheck('uncheck'); + } + }); + } + }) + .delegate('select#state', 'change', function (link) { + link.preventDefault(); + $('select#state').val($(this).val()); + $('#searchForm').submit(); + }) + .delegate('#set-state','click',function (link) { + link.preventDefault(); + + var url = $(this).attr('data-url'); + var tr = $(this).parents('tr'); + var state = $(this).attr('data-state'); + var id = tr.attr('data-id'); + var message = 'Sei sicuro di voler modificare lo stato dell\'elemento?'; + + if (confirm(message)) { + $.ajax({ + type: 'POST', + url: url, + data: 'id=' + id +'&state=' + state, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + tr.replaceWith(resp.text); + refreshFormComponents(); + } else { + alert(resp.message); + } + } + }); + } else { + return; + } + + }) + .delegate('#setstate_select', 'click', function (link) { + link.preventDefault(); + + var url = $(this).attr('href'); + var stateNum = null; + + var data = []; + $('#tablebody').find(':checkbox').each(function () { + if (this.checked) { + data.push($(this).val()); + } + }); + + if(data.length <= 0){ + alert("Nessun elemento selezioanto"); + return; + } + + function confirmChoice() { + var val = $('select#selectState').val(); + + if(!val){ + alert("E' necessario scegliere uno stato"); + return; + } + + stateNum = val; + dialog.dialog( "close" ); + + if (confirm("Sei sicuro di voler modificare lo stato degli elementi selezionati?")) { + + $.ajax({ + type: 'POST', + url: url, + data: { + data: data, + state:stateNum + }, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + var rows = resp.rows; + for (var i = 0; i < rows.length; i++) { + var tr = $('#tablebody tr[data-id=' + rows[i].id + ']'); + tr.replaceWith(rows[i].tdRow); + } + + $.growl({ + type: 'success', + message: "Elementi aggiornati", + icon: 'fa fa-check fa-fw' + }, grownl_my_default_options); + + } else { + $.growl({ + type: 'danger', + message: resp.message, + icon: 'fa fa-times fa-fw' + }, grownl_my_default_options); + } + + refreshFormComponents(); + $('#tablebody').find(':checkbox').iCheck('uncheck'); + } + }); + } + } + + var dialog = $('
') + .html(choicheHtmlModal) + .dialog({ + title:"Scegli lo stato da impostare:", + autoOpen: false, + height: 200, + width: 350, + modal: true, + buttons: { + "OK": confirmChoice, + Cancel: function() { + $(this).dialog( "close" ); + } + }, + close: function() { + $(this).dialog( "destroy" ); + } + }); + + dialog.dialog( "open" ); + + }) + .delegate(modal_id,'hidden.bs.modal',function(link){ + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + }); + + +var choicheHtmlModal = ` +
+
+ +
+
`; diff --git a/public/admin/js/handler/monitoring/event_handler_listloginviiemails.js b/public/admin/js/handler/monitoring/event_handler_listloginviiemails.js new file mode 100644 index 0000000..58b7752 --- /dev/null +++ b/public/admin/js/handler/monitoring/event_handler_listloginviiemails.js @@ -0,0 +1,114 @@ +'use strict'; + +//Specializzo la funzione resetForm nel caso ci sia bisogno di campi TEXTAREA o immagini da resettare +function myResetForm(tipo, formid) { + resetForm(tipo, formid); +} + +function edit(id) { + $('#save').attr('op', 'edit'); + let dati = 'id=' + id; + let url = $(form_id).attr('data-get'); + myResetForm('all', form_id); + $.getJSON(url, dati, function (resp) { + if (resp.success) { + $('#main_contenitor').html(resp.text); + + $(modal_id).modal('show'); + } else { + toastr.error(resp.message); + } + }); +} + +$(document).ready(function () { + initFormComponents(); + initTableFlotHeader(); +}) + .delegate('#edit,#editLink', 'click', function (link) { + link.preventDefault(); + const id = $(this).parents('tr').attr('data-id'); + edit(id); + }) + .delegate('#delete', 'click', function (link) { + link.preventDefault(); + + const url = $(form_id).attr('data-delete'); + let tr = $(this).parents('tr'); + const cod = tr.attr('data-cod'); + let id = tr.attr('data-id'); + let message = 'Sei sicuro di voler eliminare definitivamente l\'elemento?'; + + if (confirm(message)) { + $.ajax({ + type: 'POST', + url: url, + data: 'id=' + id + "&cod=" + cod, + dataType: 'json', + complete: function (resp) { + + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + + toastr.success('Eliminazione effettuata con successo'); + + } else { + toastr.error(resp.message); + } + } + }); + } + }) + .delegate('#delete_select', 'click', function (link) { + link.preventDefault(); + + let message = 'Sei sicuro di voler eliminare definitivamente gli elementi selezionati?'; + + if (confirm(message)) { + let data = []; + $('#tablebody').find(':checkbox').each(function () { + if (this.checked) { + data.push($(this).val()); + } + }); + + let url = $(this).attr('href'); + + $.ajax({ + type: 'POST', + url: url, + data: { + data: data + }, + dataType: 'json', + complete: function (resp) { + resp = jQuery.parseJSON(resp.responseText); + if (resp.success) { + var ids = resp.id; + for (var i = 0; i < ids.length; i++) { + var tr = $('#tablebody tr[data-id=' + ids[i] + ']'); + tr.animate({ + 'opacity': 'hide' + }, 500, function () { + tr.remove(); + }); + } + } else { + toastr.error(resp.message); + } + + $('#tablebody').find(':checkbox').iCheck('uncheck'); + } + }); + } + }) + .delegate(modal_id,'hidden.bs.modal',function(link){ + link.preventDefault(); + myResetForm('tutto', form_id); + $('#save').attr('op', 'insert'); + }); diff --git a/public/admin/package.json b/public/admin/package.json new file mode 100644 index 0000000..0dd4317 --- /dev/null +++ b/public/admin/package.json @@ -0,0 +1,26 @@ +{ + "name": "swadmin", + "version": "1.0.0", + "description": "SW Admin", + "dependencies": { + "@fonticonpicker/fonticonpicker": "^3.1.1", + "admin-lte": "~3.0.5", + "angular": "^1.8.0", + "angular-animate": "^1.8.0", + "angular-chart.js": "^1.1.1", + "angular-daterangepicker": "^0.2.3-alpha1", + "angular-moment": "^1.3.0", + "angular-resource": "^1.8.0", + "angularjs-toaster": "^3.0.0", + "bootstrap-datepicker": "^1.9.0", + "floatthead": "^2.2.1", + "icheck": "^1.0.2", + "jquery-form": "^4.3.0", + "jquery.cookie": "^1.4.1", + "ngstorage": "^0.3.11", + "select2": "^4.0.13", + "ui-bootstrap4": "^3.0.6" + }, + "devDependencies": {}, + "author": "" +} diff --git a/public/admin/scss/accent.scss b/public/admin/scss/accent.scss new file mode 100644 index 0000000..9d6a5a1 --- /dev/null +++ b/public/admin/scss/accent.scss @@ -0,0 +1,14 @@ + +@import "../node_modules/admin-lte/build/scss/mixins/accent"; +@import "../node_modules/admin-lte/build/scss/mixins/backgrounds"; + +$brandName: 'brand'; +@include accent-variant($brandName, $brandColor-01); + +[class*="accent-"] { + a.btn-brand { + color: color-yiq($brandColor-01); + } +} + +@include background-variant($brandName, $brandColor-01); diff --git a/public/admin/scss/cards.scss b/public/admin/scss/cards.scss new file mode 100644 index 0000000..6bedb6c --- /dev/null +++ b/public/admin/scss/cards.scss @@ -0,0 +1,95 @@ +@import "../node_modules/admin-lte/build/scss/mixins/cards"; + +$brandName: 'brand'; +@include cards-variant($brandName, $brandColor-01); + +.card-brand { + + &.card-outline-tabs, &.card-outline { + border-top: 0 !important; + } + + &.card-outline { + + .card-header { + + .nav-link { + &.active { + color: #FFFFFF !important; + background: $brandColor-01; + } + } + } + + &.card-outline-tabs { + .card-header { + + .nav-link { + &.active { + color: inherit !important; + background: whitesmoke; + border-bottom-color: whitesmoke; + } + } + } + + .card-body { + background-color: whitesmoke; + } + } + + } + + .card-header { + .nav-link { + color: $brandColor-01 !important; + } + } + +} + +.accordion-card { + box-shadow: none; + border: 1px solid #DDD; + border-radius: 4px; + + &.no-border { + border: 0; + } + + &.no-border-radius { + border-radius: 0; + } + +} + +.delivery-card { + .card-header { + padding: 8px 4px; + } + + .prodoti-list-item { + font-size: 13px; + color: #333333; + } + + .riepilogo-list-item { + font-size: 14px; + color: #333333; + } + + .totale-ordine { + margin-top: 5px; + font-weight: bold; + } + + .metodo-pagamento { + color: #333333; + } +} + +.position-card { + margin-bottom: 0; + border-top: 1px solid #DDD; +} + diff --git a/public/admin/scss/forms.scss b/public/admin/scss/forms.scss new file mode 100644 index 0000000..cec5c8a --- /dev/null +++ b/public/admin/scss/forms.scss @@ -0,0 +1,168 @@ +/****** FORM *****/ + +.form-box-container { + border: 1px solid #ddd; + margin: 10px 0; + padding: 15px; +} + +.note-editable { + min-height: 426px; +} + +.datepicker { + z-index: 1151 !important; +} + +/******* PREVIEW IMAGE *******/ + +.image-preview-input { + + background-color: #fff; + border-color: #ccc; + color: #333; + margin: 0; + overflow: hidden; + position: relative; + + input[type="file"] { + cursor: pointer; + font-size: 20px; + margin: 0; + opacity: 0; + padding: 0; + position: absolute; + right: 0; + top: 0; + } +} + +.image-preview-input-title { + // margin-left: 2px; +} + +.image_preview_block_container{ + .logo{ + padding: 10px; + max-height: 149px; + } + + .banner{ + padding: 10px; + max-height: 200px; + } +} + +.image-preview-clear-btn{ + margin: 0; +} + +input.form-control:focus, select.form-control:focus { + border: 1px solid #3c8dbc; +} + +.form-group.has-error .form-control, .form-group.has-error .input-group-addon { + border: 1px solid #dd4b39; + box-shadow: none !important; +} + +.form-error > span { + color: #dd4b39 !important; +} + +.form-group { + .label-danger { + background: none repeat scroll 0 0 rgba(0, 0, 0, 0) !important; + color: #dd4b39 !important; + text-align: right !important; + overflow: hidden; + font-size: 12px; + } +} + +[elastic] { + min-height: 37px; +} + +textarea { + &.resize-vertical { + resize: vertical; + } + + &.resize-horizontal { + resize: horizontal; + } +} + +#modalForm label { + font-weight: normal; +} + +// ------------ COMPACT FORM ---------------------- + +.compact-form { + + &.no-border-radius { + + input, select, textarea { + border-radius: 0; + } + } + + .label-danger { + text-align: right; + } + + label { + font-size: 0.95rem; + margin-top: 7px; + font-weight: normal !important; + } + + .form-group { + margin-bottom: 5px; + + .form-control { + box-shadow: none !important; + //font-size: 0.95rem; + } + + .has-error .form-control { + box-shadow: none !important; + border: 1px solid #dd4b39; + } + + } +} + +/**** SUMMERNNOTE EDITOR ****/ + +.panel.note-editor { + border-radius: 0; + border: 1px solid #DDD; + box-shadow: none; +} + +/**** BTN RADIo BOX ****/ + +.btn-radiobox{ + .btn-app{ + + text-transform: uppercase; + + &:first-child{ + margin-left: 0; + } + + &.active{ + border-color: $brandColor-01; + i{ + color: $brandColor-01; + } + } + + input{ + display: none; + } + } +} diff --git a/public/admin/scss/general.scss b/public/admin/scss/general.scss new file mode 100644 index 0000000..d4ba3cf --- /dev/null +++ b/public/admin/scss/general.scss @@ -0,0 +1,448 @@ +body { + font-size: 15px; +} + +.form-control { + font-size: 0.95rem; +} + +//Redefine di alcuni componenti a text-sm sul body +.text-sm { + + .navbar{ + font-size: 16px !important; + height: 50px; + border-bottom: 0; + } + + .btn-group { + .btn { + font-size: 1rem !important; + } + } + + .brand-link { + font-size: 1rem; + } + +} + +$theme-colors: ( + "brand": $brandColor-01 +); + +// Generate alert modifier classes +@each $color, $value in $theme-colors { + + @include bg-variant('.bg-#{$color}', $value); + + .alert-#{$color} { + @include alert-variant(theme-color-level($color, -10), theme-color-level($color, -9), theme-color-level($color, 6)); + } + .btn-#{$color} { + @include button-variant(theme-color($color), theme-color($color), darken(theme-color($color), 10%), lighten(theme-color($color), 5%), lighten(theme-color($color), 10%), darken(theme-color($color), 30%)); + } +} + +.m0, .no-margin { + margin: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.m-5 { + margin: 5px !important; +} + +.mr-5 { + margin-right: 5px !important; +} + +.ml-5 { + margin-left: 5px !important; +} + +.mt-5 { + margin-top: 5px !important; +} + +.mb-5 { + margin-bottom: 5px !important; +} + +.m-10 { + margin: 10px !important; +} + +.mr-10 { + margin-right: 10px !important; +} + +.ml-10 { + margin-left: 10px !important; +} + +.mt-10 { + margin-top: 10px !important; +} + +.mb-10 { + margin-bottom: 10px !important; +} + +.m-15 { + margin: 15px !important; +} + +.mr-15 { + margin-right: 15px !important; +} + +.ml-15 { + margin-left: 15px !important; +} + +.mt-15 { + margin-top: 15px !important; +} + +.mb-15 { + margin-bottom: 15px !important; +} + +.m-20 { + margin: 20px !important; +} + +.mr-20 { + margin-right: 20px !important; +} + +.ml-20 { + margin-left: 20px !important; +} + +.mt-20 { + margin-top: 20px !important; +} + +.mb-20 { + margin-bottom: 20px !important; +} + + +.pd0, .no-padding { + padding: 0 !important; +} + +.pd-0 { + padding: 0 !important; +} + +.pdr-0 { + padding-right: 0 !important; +} + +.pdl-0 { + padding-left: 0 !important; +} + +.pdt-0 { + padding-top: 0 !important; +} + +.pdb-0 { + padding-bottom: 0 !important; +} + +.pd-5 { + padding: 5px !important; +} + +.pdr-5 { + padding-right: 5px !important; +} + +.pdl-5 { + padding-left: 5px !important; +} + +.pdt-5 { + padding-top: 5px !important; +} + +.pdb-5 { + padding-bottom: 5px !important; +} + +.pd-10 { + padding: 10px !important; +} + +.pdr-10 { + padding-right: 10px !important; +} + +.pdl-10 { + padding-left: 10px !important; +} + +.pdt-10 { + padding-top: 10px !important; +} + +.pdb-10 { + padding-bottom: 10px !important; +} + +.pd-15 { + padding: 15px !important; +} + +.pdr-15 { + padding-right: 15px !important; +} + +.pdl-15 { + padding-left: 15px !important; +} + +.pdt-15 { + padding-top: 15px !important; +} + +.pdb-15 { + padding-bottom: 15px !important; +} + +.pd-20 { + padding: 20px !important; +} + +.pdr-20 { + padding-right: 20px !important; +} + +.pdl-20 { + padding-left: 20px !important; +} + +.pdt-20 { + padding-top: 20px !important; +} + +.pdb-20 { + padding-bottom: 20px !important; +} + +/*------------------------------------------*/ + +.no-border-top { + border-top: 0; +} + +.no-padding-right { + padding-right: 0; +} + +.no-padding-left { + padding-left: 0; +} + +.no-padding-left > input { + border-left: 0; +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +@media (min-width: 767px) { + + .no-border-right-sm { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .no-border-top-sm { + border-top: 0; + } + + .no-border-r-l-sm { + border-radius: 0; + } + + .no-padding-l-sm { + padding-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + input { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + } + + .no-padding-r-sm { + padding-right: 0; + + input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } + + .no-padding-r-l-sm { + padding-right: 0; + padding-left: 0; + + input { + border-radius: 0; + } + } +} + +.filtratiLabel { + font-size: 13px; + padding-right: 10px; + vertical-align: bottom; + margin-top: 19px; + display: block; +} + +hr { + &.white { + border-top: 1px solid #FFF; + } + + &.dark { + border-top: 1px solid #333; + } + + &.light { + border-top: 1px solid #DDD; + } +} + + +/*------------------------------------------*/ + +.border-top-white { + border-top: 1px solid #FFF; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.border-bottom-white { + border-bottom: 1px solid #FFF; +} + +.border-right-white { + border-right: 1px solid #FFF; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.border-left-white { + border-left: 1px solid #FFF; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.sidebar-menu li.divider-md { + border-top: 3px solid #1a2226; +} + +.note-editor.note-frame { + border-radius: 0 !important; +} + +.logo-img { + position: absolute; + top: 0; + right: 15px; + max-height: 100px; +} + +.btn > .badge { + position: absolute; + top: -6px; + right: -4px; + font-size: 10px; + font-weight: 400; + z-index: 100; +} + +.main-footer { + padding: 10px 15px; +} + +//################################# CONTENT LIST ########################### + +section.content.list { + padding: 12px 0 0 0; + +} + +//Custom scroll bar +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +::-webkit-scrollbar-thumb { + background: #888; +} + +::-webkit-scrollbar-thumb:hover { + background: #555; +} + +@include media-breakpoint-down(xs) { + + .content-wrapper, .main-sidebar { + padding-top: 50px !important; + } + + .box-footer { + padding: 8px 3px !important; + } + + section.content.list { + padding: 0; + } + + section.content-header { + padding: 10px 15px 8px; + } +} + +.dropdown-menu { + z-index: 1100 !important; + font-size: 0.9rem; + padding: 5px 0; +} + +.content-header > .breadcrumb.top0 { + top: 0; +} diff --git a/public/admin/scss/index.scss b/public/admin/scss/index.scss new file mode 100644 index 0000000..ed57d3c --- /dev/null +++ b/public/admin/scss/index.scss @@ -0,0 +1,33 @@ +@import "../node_modules/bootstrap/scss/functions"; +@import "../node_modules/bootstrap/scss/_variables.scss"; +@import "../node_modules/bootstrap/scss/mixins/hover"; +@import "../node_modules/bootstrap/scss/mixins/gradients"; +@import "../node_modules/bootstrap/scss/mixins/background-variant"; +@import "../node_modules/bootstrap/scss/mixins/deprecate"; +@import "../node_modules/bootstrap/scss/mixins/box-shadow"; +@import "../node_modules/bootstrap/scss/mixins/alert"; +@import "../node_modules/bootstrap/scss/mixins/buttons"; +@import "../node_modules/bootstrap/scss/mixins/_breakpoints"; + +@import "../node_modules/admin-lte/build/scss/_variables.scss"; + +//************************ + +@import 'variables.scss'; +@import 'general.scss'; + +@import 'sidebar.scss'; +@import 'accent.scss'; +@import 'navbar.scss'; +@import 'cards.scss'; + +@import 'table.scss'; +@import 'modal_e_tabs.scss'; +// @import 'loaders.scss'; +@import 'forms.scss'; +@import 'select2.scss'; +@import 'sw-icons.scss'; + +@import 'listPage.scss'; +@import 'loginPage.scss'; +@import 'settingsPage.scss'; diff --git a/public/admin/scss/listPage.scss b/public/admin/scss/listPage.scss new file mode 100644 index 0000000..be41b3d --- /dev/null +++ b/public/admin/scss/listPage.scss @@ -0,0 +1,82 @@ +.breadcrumb{ + font-size: 14px; +} + +.dropdown-multifunction-down { + margin-top: 5px; +} + +.pagination{ + margin-top: 5px; + margin-left: 5px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal !important; + vertical-align: middle; + + .text-counter{ + margin-top:5px; + } +} + +.box-footer { + background: #FFFFFF; + padding: 4px 3px !important; +} + +.note-editor{ + box-shadow: none; +} + +.bootstrap-modal-selector { + overflow-y:scroll; +} + +.pagination-counter{ + font-size: 14px; + + label{ + margin-right:5px; + font-weight: normal !important; + } + + input.form-control{ + border-radius: 0.2rem; + } +} + +@include media-breakpoint-up(md) { + + .box-title { + + &.search-left { + width: 65%; + } + + &.search-right { + width: 35%; + + > * { + float: right; + } + } + + } + + #orderSelect { + max-width: 150px; + } + + .pagination-counter { + max-width: 150px; + margin-top: 5px; + + label { + padding-top: 5px; + } + + > .form-group { + margin-bottom: 0; + } + } +} diff --git a/public/admin/scss/loaders.scss b/public/admin/scss/loaders.scss new file mode 100644 index 0000000..e69de29 diff --git a/public/admin/scss/loginPage.scss b/public/admin/scss/loginPage.scss new file mode 100644 index 0000000..a875e03 --- /dev/null +++ b/public/admin/scss/loginPage.scss @@ -0,0 +1,23 @@ +.login-logo{ + img{ + display: block; + margin-left: auto; + margin-right:auto; + max-height: 150px; + max-width: 250px; + } +} + +.login-card-body{ + border-radius: 5px; + + .icheck-primary{ + margin-top:7px; + } +} + +.footer-login{ + margin-top:10px; + text-align: center; + font-size: 0.9em; +} diff --git a/public/admin/scss/modal_e_tabs.scss b/public/admin/scss/modal_e_tabs.scss new file mode 100644 index 0000000..fa808cf --- /dev/null +++ b/public/admin/scss/modal_e_tabs.scss @@ -0,0 +1,81 @@ +.box-border{ + border:1px solid #DDD; +} + +.box-footer{ + //min-height: 55px; + padding: 8px 10px; + border-top:1px solid #DDD; +} + +/**** MODAL **/ + +.modal-dialog > .overlay, .modal-dialog > .loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.modal-dialog .overlay { + z-index: 1010; + background: rgba(255, 255, 255, 0.7); + border-radius: 3px; +} + +.modal-dialog .overlay > .fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px; +} + +.modal-dialog .overlay.dark { + background: rgba(0, 0, 0, 0.5); +} + +.modal-body{ + background-color: whitesmoke; +} + +.modal-body .label{ + text-align: right; + margin-right: 3px; +} + +/**** TABELLA **/ + +.table-border{ + border: 1px solid #ddd; + + th{ + font-weight: 500; + } +} + +.table-border td,.table-border th{ + border-bottom: 1px solid #ddd; +} + +/**** TABS **/ +.nav-tabs a.disabled { + color: #ddd; +} + + +.modal.modal-second-level { + z-index: 2070 !important; + overflow: auto; +} + +body.modal-second,body.modal-third{ + overflow-y: hidden !important; +} + +body.modal-second .modal-backdrop { + z-index: 2069 !important; +} diff --git a/public/admin/scss/navbar.scss b/public/admin/scss/navbar.scss new file mode 100644 index 0000000..fdbc80d --- /dev/null +++ b/public/admin/scss/navbar.scss @@ -0,0 +1,9 @@ +@import "../node_modules/admin-lte/build/scss/mixins/navbar"; + +.navbar-dark-brand{ + @include navbar-variant($brandColor-01); +} + +.nav-item.dev-block{ + margin-top: 6px !important; +} diff --git a/public/admin/scss/select2.scss b/public/admin/scss/select2.scss new file mode 100644 index 0000000..fd2389b --- /dev/null +++ b/public/admin/scss/select2.scss @@ -0,0 +1,14 @@ +.select2-fullwidth{ + .select2-container{ + min-width: 100%; + } +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice{ + background-color: $brandColor-01; + border-color: $brandColor-01; +} + +.select2-container--default .select2-results__option--highlighted[aria-selected], .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{ + background-color: $brandColor-01; +} diff --git a/public/admin/scss/settingsPage.scss b/public/admin/scss/settingsPage.scss new file mode 100644 index 0000000..e462651 --- /dev/null +++ b/public/admin/scss/settingsPage.scss @@ -0,0 +1,22 @@ +/** TAB SETTINGS **/ + +#settings-tab{ + + .panel-body{ + border-top: 0; + border-right: 1px solid #DDD; + border-left: 1px solid #DDD; + border-bottom: 1px solid #DDD; + + .well{ + box-shadow: none; + } + } + +} + +.well{ + border: 1px solid #DDD; + border-radius: 5px; + padding: 10px; +} diff --git a/public/admin/scss/sidebar.scss b/public/admin/scss/sidebar.scss new file mode 100644 index 0000000..4cf6634 --- /dev/null +++ b/public/admin/scss/sidebar.scss @@ -0,0 +1,9 @@ +@import "../node_modules/admin-lte/build/scss/mixins/sidebar"; + +.sidebar-dark-brand{ + @include sidebar-color($brandColor-01); +} + + + + diff --git a/public/admin/scss/sw-icons.scss b/public/admin/scss/sw-icons.scss new file mode 100644 index 0000000..afccfae --- /dev/null +++ b/public/admin/scss/sw-icons.scss @@ -0,0 +1,14 @@ +.sw-icon-font-picker{ + width: 28px; + padding: 4px; +} + +.fip-box .sw-icon-font-picker, .icons-selector .selected-icon .sw-icon-font-picker{ + padding: 6px 4px; +} + +.icons-selector.fip-bootstrap span.current-icon, .icons-selector.fip-bootstrap span.current-icon:hover{ + background-color: $brandColor-01; + color: #fff; + border: 1px solid $brandColor-01; +} diff --git a/public/admin/scss/table.scss b/public/admin/scss/table.scss new file mode 100644 index 0000000..927c126 --- /dev/null +++ b/public/admin/scss/table.scss @@ -0,0 +1,215 @@ +.table-border { + border: 1px solid #ddd; +} + +th[data-ord] { + cursor: pointer; +} + +.floatThead-wrapper { + .box-body { + //background-color: #f5f5f5; + } +} + +.content.list { + padding: 0; +} + +.box-header { + margin-bottom: 8px; + margin-right: 8px; + margin-left: 8px; +} + +.floatThead-container{ + overflow-x: inherit !important; +} + +.table-border.flot-header { + + font-size: 0.95rem; + + border-left: 0; + border-right: 0; + + tbody { + tr { + + /*&:hover{ + td{ + background: transparent; + } + }*/ + + td { + border-top: 1px solid #DDD; + vertical-align: middle; + padding: 5px; + //background-color: #FFF; + } + } + } + + th { + background-color: #FFF; + border-bottom: 1px solid #DDD; + } + +} + +.table-wrapper { + height: 729px; + transition: height ease 0.7s; +} + +.table-responsive { + padding: 0; +} + +.table-border td, .table-border th { + border-bottom: 1px solid #ddd; +} + +table.table-popover { + font-size: 12px; +} + +table{ + margin-bottom: 0 !important; +} + +.table > thead > tr > th { + border-bottom: none !important; +} + +.popover.popover-default-variables { + border-radius: 0; + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; +} + +td.no-rows { + color: #6c757d !important; + height: 729px; + //background-color: #f5f5f5 !important; + vertical-align: middle !important; + font-size: 1.1em; + text-transform: uppercase; + text-align: center; + border: none !important; + + > i { + display: block; + font-size: 3em; + color: #6c757d !important; + } +} + +.ui-dialog { + z-index: 2000 !important; +} + +@include media-breakpoint-up(md) { + + .table-responsive { + border: none; + overflow-y: scroll; + margin: 0; + } + +} + +.table-wrapper-2,.table-wrapper-3{ + height: 200px; + overflow-y: scroll; + background: whitesmoke; + + td.no-rows{ + height: 152px !important; + + > i{ + font-size: 2em !important; + } + } +} + + +.table-tickets{ + border-top:1px solid #EEE !important; + border-bottom:1px solid #EEE !important; + border-left:none !important; + border-right:none !important; + + td{ + vertical-align: middle !important; + padding: 6px !important; + } +} + +.floatThead-table{ + + thead > tr > th{ + background: #FFF; + z-index: 1001; + padding-left: 6px !important; + padding-right: 6px !important; + } +} + +.table-righe { + border-top: 1px solid #EEE !important; + border-bottom: 1px solid #EEE !important; + border-left: none !important; + border-right: none !important; + + td { + vertical-align: middle !important; + padding: 6px !important; + } +} + +table.sottoaree-table{ + th{ + border-top:none; + box-shadow: none !important; + } + + td.no-rows{ + height: 303px !important; + + > i{ + font-size: 2em !important; + } + } +} + +.modal-with-tabs{ + .modal-header{ + border-bottom: none; + } + + .modal-body{ + + .card{ + box-shadow: none; + border-radius: 0; + } + } +} + +.modal.modal-second-level { + z-index: 2070 !important; + overflow: auto; +} + +body.modal-second .modal-backdrop { + z-index: 2069 !important; +} + +body.modal-second,body.modal-third{ + overflow-y: hidden !important; +} + + + + diff --git a/public/admin/scss/variables.scss b/public/admin/scss/variables.scss new file mode 100644 index 0000000..8a02bbb --- /dev/null +++ b/public/admin/scss/variables.scss @@ -0,0 +1,3 @@ + +$brandColor-01: #007BFF; +$logoColor: #F5B741; diff --git a/public/baseImg/NoImage.png b/public/baseImg/NoImage.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f045a4b7cd48d8f2b6f5705848defb17d5c42a GIT binary patch literal 2888 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%0AS{QY*?5+Kro@AGf@cyDAa2j!$R8S-x;u+6~ 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%0AE7#XIFX>#E{gYk_-lE%i=gB-vOqhk`rEH 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 IM6N<$g7PCa@c;k- literal 0 HcmV?d00001 diff --git a/public/baseImg/logo_small.png b/public/baseImg/logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..c0152837b4dc5c9007de680a936ebfb089cbe501 GIT binary patch literal 12197 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 literal 0 HcmV?d00001 diff --git a/public/baseImg/no_logo.png b/public/baseImg/no_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..58c88cb6f70e4c83dbd9873be979f835caa74c46 GIT binary patch literal 1957 zcmV;W2U_@vP)hp0aBy(y>gs!Ydy|ustE;Ppg@w+} z&Y78+;o;%S%gedBxuc__#>U2+oSdblrPS2a-QC^5z`%ilf#&AsX8XkG000L7Nkl;M0k$0W1`hdNf<`Z6c?hq=ZXs5~V=fWT_SFbu;m48t%C z!!QiPFbu;m3}X;y>wVUlb0^-}jhlX3$9Vkk1L-n{Zz~y%Gm&!3I(=KpNKTU}xAJdm z8OdQf>BYCTj3g7~UKb7#A9CBa^TWo`QDo~u>B+aXj3XjbjXr$L79ZnJQlzD*u*@HK zP(D89JVl8XqsB73A3p~lvz?$o%h60!UFaNKCMeKyd=u0ois_mu^;KNxJOP9!6F?`h?{S1)PsUlCHS4BWn;}VLU?t=Yu?&8~j?U z4$5uRb4v5vxulmFtJ23!#ITphW+~!aNHv_O(y#gqzO8ivPEPcK=7rGjnMtC6%NfRq3`axp+OBAKEGNr?a3X zxk=Jf#o`lS(xh086^^X5Vxuv4 zS6QUU)EdsES7-*VB7Kz$oA)%G`1WB0Q0qNco?`+hRr<p^cI3#G5lv~}r-dO2BimVLk!DdK# z@6?iXllEU~z4SDcmf51GTT@3$^jD;V*VdV`Up!OZPHsuMNlUU?>Ey50^ufPAS1y*N z%#$wKx?-s95*=z!U)X|%bbms+-%Vb(s@wkOrAr3xZO@5L>fexldX%m-ZEtv2_0LG} ziX8pYo&O@;q`}Qqr3Y_Cmq1SQq>K5w7|4S7iNL=my;7tPy6Ue=H_3+=Yjfnf4NcEp zmu}LeHI<}SZz?xbx-Ut8JC+JElXR07s3J*v_C(!_(oI^H6nkzsMSabGc`Dtc#b~j| zh|=FxE=f0O3qn}=RMN-C;CvBsTydG{bLslc*?*PIl+umbU#ER>?T-04P`X)B750?U z&5EVDOeuXcL4lToX05s~f^neq;{*j-4szlh`%|20jAv0^T77#Flh&tJZ_m-S80E)K zdhExnVf~JqJJT3_Sbtl}d-&(Nx%XB(IP6n|-tR&Mc)YR9FDKWi3F~u$v~q{J88t~` z7=~dOhG7_nVHoCLp&5M&e;jr5uP$0N-BCn0@rK?)?Imx=J|&hXu6DUxpKU_a_k_#F zo4_VAox*o4%Na=Ie6VK(CpxcC@o?cs@@N6uqP@TZ0#Fyd#)D#IFp|$2-U$sqSV;CE z4y6#sLLawZ{QDn0GP*?b?^&UJr7)scDb(lNccqDPlnqMXe+o`z=4GW=T8^4_t=iY; z#@#j-cdJ8C8SG0Z-cbX>lLoXW1HaAO?Wl+t*qox`K>A)p3$3Nr?O9S7Ocy7M?KbM; zsv>>v07B*u(OO7LuiaO+TiAF^qJIesA>!Sw6kkFpA6J&zC8ZGTJFT$)DxK_J4djLl z9<+2g@g8(R<aZj)PjzuF1Tj??WmQg);7YrlmTONGsdf!c-q7r>YbMZ)kHaCVM zd7{#r{#8|N%m&u_+FCfk3L6`=)$N|D#X(y{BkiwJQEDXYQ{?pOYOFrEQcat?jjhF& zE=84>!e;XJvCCe{hSK3jC@eChm!Dg5rw)lu@&}QkKx2j>(WT_t+-;yOw2z=y-rAUW zsn_ALbskVUUb~Wz2#+FOpf>wUH6T&j1^HH=BEkG%+7*qA+T1i|Q*R+lPeiy1nRz)y z?8X>y3z^1VGE&j>Doc)XYkOxPQc|R%Hf!p{w7ErZhA~8vbhyU~2N)XHFG~jx<9D~g zLQw349Jkbx9UQQT&eO7#6wpM|Rdgk3+T7v=Q=LMWckD(BzpwQuS@^QmilmF)=ZKCi zT)=TtI;zZ)dhBbT;y^uicnn38*X9-qX{0|0t$yj)l%c!UY<96Ksc4lcntVgUO&p~= zxt{UG#FyGl!8VV5ijzD}gH~xw}9hX#Y6ndT<5)-(?ZO1fIf7o|VS0o*l} zH_Jh-xN9(x>@%>%VQp=0oW6Cl-ZMSR5vTum;;kgs(p|h1&((-;zTC~Tc-ro&+;MEO z=oD|#g>vtn<=%U}F-LYG-_RJ*Wgd&S^^fU&al7FUQz%%0q6_$wh`? r7=~dOhG7_nVHk#C7=~dOhSBgJtZ7CD?5DOG00000NkvXXu0mjfcv<3{ literal 0 HcmV?d00001 diff --git a/public/favicons/android-icon-144x144.png b/public/favicons/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..c1bfcc151bb52ada1719afe90bea461cbc4b3823 GIT binary patch literal 7396 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 ZpkM_Q++Ra2zX|LB*jqbVJ+SnO{RelVRyP0u literal 0 HcmV?d00001 diff --git a/public/favicons/android-icon-72x72.png b/public/favicons/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc5714887feff8dcc281703b7ad3adc862d10ef GIT binary patch literal 3454 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 literal 0 HcmV?d00001 diff --git a/public/favicons/android-icon-96x96.png b/public/favicons/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9a186c7d37b1dc82fd51828579d61786531f51 GIT binary patch literal 4592 zcmZ{o2{e@L`^TR#3|WVeB@8tgvWzt|vQ38U#!^|b4#sN+*~T^u$uik0^~$~!DqC49 zN<)bf#w%qFMNte<*#^Jq{r%7RzyJ4~|2fZfUFW{9&-K0T=ef_h&+|MP_O|8%yi&XX z00>x|Hg#Y}uiwT4Vf&ByWIcA^3^1`V0f75Cd@OG+_81iIV2%Om2M#Z?2Qc5$4mJP~ zdkg@mDFCp|o}w-QKqL|XzIp)wIv)TIg%-8pPO=jaA1iZH;0WLk7+sQ$;AGDn2tDl* z4ghLLej6zIwow!S2>Du=nm9#|FBd0aCp%p(cX&IdnO4z;=wOCh%aA_zFLdK3Qb-Jf129 z6vn4moo;BxcEMm|1!VB<0AG^^93r-|pU_846tr zHs%6-{r12U$xRqCZ4>elwu&g&C4(rpDYo5{^BHtEMw`@3H?t{2-#Dik}#r|aHwPf6XZG>5b!7OHDEkx12_xT5+Rb0t)k~V&C2#5 zJYr~>x`v)Vx85CKh74QQXK=SY1E~QYgsih3b_zEl7B(TS3Fff+#XrM}DPr?kMPZ3< z2PVI!WOA2Z2;f)&JS4sg#)w7<>Z1g5quQ*r+T>aY{fRtV^tdGAoxytzpsoQ~?kB~s zhvTbu21=>b3(SlO`BE;Gm+Gs%V14RO`aybB9#NpOb2!_7^E;jRelUtm5+4N<0cLmu z$++Bo|6@L=pMD!rRi7G8ea|s{YRu1_z~y1tIOqHlG!r~yjz}K+hCeP!QOxHe^+L6% z7R>boJhhnl1#>&e*$A9cx$iV%sc5eg0fb;P`nDwkI)&-4WOw_)&mi?&d!Wo?IatWp z7mva}#A-j-J`#Y#0!$xO@kL*2*Hz=RGSm41dg$n~6^W(rBQ+P>4%@_dHn#r}JQ8ci$Ku#T@`AoKL9AXL zq0S@t>W@vscx4jPF>?mYCd?FG8DmgUrrpS?H&_{d-HW|Vdv_~N6$($;`PH) zs{d@(Im2J^u~+?0$U74BxxQHcgX2jJ6=T1IUr?*ezV)1|D6^=)kBVHfrlK|jhDU_6 zJL>2^5fd^yOUgnQ{YS^>0l3gG5W{_dXGj400k84#QK3P@WY)V#xi8~O%%?TC`p1Q( zybUU(g3W|&iwN9mppN9OrRSN@eqgp+3tF03^yT_er z!w+E}ea1Dj@KY-}WilLnJmfxS%uG-R_OK4PKb2$3p#4gzYgVS=h!U|Xt~5D0S#aZF zB@~Rj)+pg9;E22W{$iyWOGPq!Pm4kLW#j(~RQh=}xsQWfsy4X8l2jGT5mQo4NZA$S zMJjESn562B|D4yM_pS2v$ep@14@tj~-csq55S$WprZUoqeEP!Ix3M!{2s@>N3n-a+ zNFh&D0X&JpxN#-n_+>&yH8t&uXFDWXapcaXB!WH)7!If&=HkPper+OBqkp>DFP%sK z!F^@e?NdxcX3$Qp$jz6BI@jR!3udNRr&IPXIqyosmKL0}Nw%w^bpQ*pDRU&~PIu~P zismq-WTPkxGpz)Fkfq+WM?6(zufy4b2Pe#)r#pBgC%$dwI%kr*kmuQyc16o|IcBi= z+HAatO1`NvUxFblcM1cSgJw7S+G8T}s$nS6d6qDufyFpP#HOOJ!DjDfRu-uUfhYb@ z{&;UH&+**79aP%60mfNud#TBfpRY=`QFA?aQM1S9W(Ttv-Onm+-=6-|&ed!^b-9Sx zA{khu(f|qW+9>Mm9bYBR4SudbRB`!r72?ua6720+)ktL)nq6UxFcU_Q)V0i0GIx)z z9-ea-kBfA=L{o<;Z+VSe5p7+U68*B{AT3m(nrauVe1N=iT$qx;OY5Ksl$;v-j?T;7 zmE5{xK#1bh|HSds&t5RpaMfc5zKOjqRO!Mx>a3Pet@*rFVhPGB^VCbacf_40i`kob zT2ibx{OZ>{jdbaCDR;aGi9@Qw?QXTzOF^4~{ zW-c~5;8c0LyCS7EoEnu|SJpbLPNCZ|2x~6pie+^w&$wdywv!v>6cs)$JFsp}@V^cV zkmn#t^yk8E5-+GHDw~gHhozn}^lH{2Yx3$-@<0UziN=+B<68~(7lQ1AXZnUqlUpA| zIBj_-x+cV5_vHOlPYNeRmVuzoTPUZr1=YRKTc9pnxS;Ew6s`GU#NxO|#ao1g@z{6B z;L3?g_ss+og5vjQRv{i> z2yT`Y%)0SlhS5#<0_BKF9TFK6i04LiZVntx=>-YFw)Z?>o_FOA$Yd8CWQ?!GCF8YL zb>_x;s#vSziRBCaVhM^$)$+8DDOWr4KIqq^P-MmWR?K=VKOs}FeQW)6b6jKY@oG8L zRjids$^QA?`z=m^u(a$6_q48o&NllOPmgoBM3pZVm{`rqGx4H_Gaj*Yj5~-!W?T~I znt#AFUtA>IvjknLs>`Gl+6r!U#xdwm4hT5t7bMU&j0Vi5YugY;%4@y2V3WwVr6~CP z*MY&DlS9$+${dmM$`7wU&+=waHvwh9xim{2t|8#p&39h9>554Xj9bYylBm>~pK*}SzQ776NrziCfN5t@cN#4vk0aJx-G7%ZB#=ZFhr1bn{DsG2-f9^NjuZf`HG{O%dY z5Kl z;3CA;5>Pueq#`y@XUSM&*ESEo{EPSrc6Wn`fp_+ttRKs1_1Y6Fsg9w#grWw;9Qcjx zJmo2rcU8Z#e@)feEKe2Mc}@!*PpbuugoJ<`=QH!~6T(NACBW-;u0gYoQF{BP-h_Od z2RBh|Unb~{O{>@X;Dq(&gZ4enP*advu*NT1%+1cr1EjvFqDjr(7kMm?MEUNQo%}-h ziC=Zn#I62ZorhIkBZ}3*6VDo3_9d)iQTPu$Ho-HTc2_uYn2S$GXYZ}K$Wpd%m|Ne4 z>qz^m1$`wZ#@%g+34S~<9$%jLXoY^a%Zq87`I!6R)6Wai!O?pXbfrY8Riz(qN(A|u zrTTtEl)MUb7T#G4jQTRn?|P8u9rtJMQs$FS+4XO(9ddK^4034tEER4&&Hz;%Ajdj1L{wNBS46*uwfSn6ESDu%UDfbLYe>~b1m3FKV28TpRNh zdgs6;S6w;TwEe{m4S6N7>D*cVn@-slcfgt5HaBl@+_AQKgE`jrrbT|y^o=yc>UCz) zjROjA_g{kRu$v7!^nE@lh(v%kKXTx77hq9jx>bsGfQ;G-?1zl%xiVei2hlmg7T2el zrtq$&nkQU)(6H8wC!_*DXQ6CCux`jUX<+Glp!yTqc|x33UKg(aG>wmA2zqTbKT_Pc zurZ#zopru=agXdck%$`c)XQ(%9lJgp%LfjeE^)oJIc2;TWAbu@Hk;PKGskCJZHirW zx{4X@D$OC2r3ht7kpDV~qn% zHT0a2C^Y-hMjl5Z(MTjJFt_Oc6p%vjf&MZ7f5B;O1dLr^_PaxPh<^mxJIoKTAbAJ) z*?0#8`Ub&t)lR7CsiI(-NDb}3TWZ2^8oDq-L_{cBU7buOs|Eh1*~X^TLc#(jQB{p;D zA3FcToDIZB5Pl=Wwemb{MDibqO(4lHA|})i_?0N6Oj30`Lzc`mt|cofI5F3<*&8_l^qm z4G9ic|KE*K_x01&L27vG;C-~bQ7F8YueY|AFJ4ni(@z_zbwb-)ja{L}Uf+|4>mBS4 NfCbjpv>xM?{2w|!J^r-MU}=tIqUWOr0D#HJ5MfR7VSkO5 znzZIDrNomQrH_u84gj>}Fr2zmk@jTa)<|8Td0b$Fv=R0+v^E2P>tXEl?Ew6?O}pM0ARoy&`!CCp(I7Z{GR66Y!)pyc=6hC;B@a{xWVG6-v_J1sFPt*IzMg{u%UJnfVIb6BOFPK-W z?p)8TXqx!6DoGBHT#V;8yW>2(4MT>0lCHXd4%e2sOz!Hof0^2lVu;9^t2X_IUMxz1 zy^(qpE5A6d#o)!~aw$h_f_j8Z9-9OFz{L=y-QbfOhZB*5m3qTWwMV_jSUR^0 zoMFW*dEr~oya5FlhQ;)oRkv}w6dS39#;)ufMBSBeVm;B9Xe;bcFa8;;haaw_*uvhz zl2t)Utc=z)R(i1S(eNgqg3^U>SJQJyJX9>CcVVXkYor+M_^N+bl{h-(<-oAW@L1nI zic7*6EuEy}OEy3oM<=7l1*4i{3Gmu@p|JJtZI=UT-k+iYNTfUEZRKeKbs3PGRdiqr za6?3Mx8iy!UQGil!!^(fUuR|XSITDci!=#TDr}wpkT~`U>SpBh6q}C82pM{6WzPijzm@^us6nsP?b7(R$J1gQz^!hhmRQzq?|dW8*gex=ljlD0Tw41rTWK!r}@(jF6%UAb7ShKBYD9ccPd# zhh|#lZ~Mvp9;!Sg>>#HY?t75XI{5Zal{HSIzN4=+hr-XDb`!c+V`4{IMg2|cAeRV` zZ*M5&qXJf(J0Aqr-aiQ`FQ*hVv?=!pdF{T!ZCD$}#U__YE6~sAxTDh9H&IM)iuqHi z&x~W)6SYs6gL_)C5KblXTQ{iRnF0wMCE$tK>a3Jv$}+LIo;7tL zWDW8aMTWZq#}Z;Wqi=vNMP*ImGWV+H^yx(FAoo;M{cF4Y?wBD;mm4oEZcwf{SGpjX zlu}E!rfbOHGWRU%cIO?_A@|tTrE#3~6Xf63@=7ALb>#TB8@aA6%{=F%#W~6}$>;U9 zRnZ@*F-w|EknhgAn^Na8@o;wFmJO;Kda!YvzS1+I)`EBnZV^fPd%ud3vQ9HzV%0Y` zFE)QC{uH4a5t+*`30d%_(59@=%M(~$fr{5(`D!5p3De3Sak%n$9kTY}l8#SNIA{YvS3)^hn&UW*u}(HwvUnq{_A8X4uJ#> zUf+9N_=+gN^|B8%XJ zhpgi}XGMLGEc`5sfHQL2BWj3vji`+6S1dH<-~RFE#(vl)&K>d1u5;pCKr&i0+S;*Z zu&Cks@t2Vp{P3#(+^}$-*+z4sHMqX}+rPNMBv@5wu@j7objHTqG3Uybjtq45yl=8%Qk!&tByVL9uU) z@?41G~t|? z#Jo%1{|wT>msOg~c&M8C?lZ0-H}c_|y?I}B_iPZ=-cfBo@yK##{LE0bF)C~>x@YiR z&dmDWU$qvpfy|Ox-n#3F{GS8H^|ansZGX3xII8A+VQO~x;=o^H;}vi_kG-8kCVo}U z$>@?k`TMWFJrj*jwe08d1(OMiulM={(iOFmYG{sX@O^ZTi$8C?9rZ2O^GaYj4qs`( z3IR~zM!{x1evRiEIaZ4)1%^heDl12Mh*GtY9+B1am`>Aeq}I!4#qR?PrnI_o^-^hm zH|M^Yh~X#C#y-TdzrPKwI`e0lw@6#sjft%FLF#@k2ufO5Z(ukPm=$poF?vYHuQI_-#UO@TqI|&5@K; z!HYmpL-C;Pkqh|)gIKK5!gcH*^?8QGghS~lNIiGz4{9ZfCnmFovz<6duH51GUWB%% zb6oe!2$HeoN8L^$@508Jn4^cqlUJ_l9NH=S+pO{Tm`%lU4TTUVTM39yU6iYkR7^T^ zr#L^lDS`S>l$b&$bd~fHHe?pvzo%nZ-5*5ZeNuiaFGO{69vEeM;R)GT$fI87-t%MF z?m_1Fo4w9Sk(fo7;>wZyKh%V;cz+2pi2dp^jc{_QaX&#{E|#t>IFAyiK} zP46iT^*`vgaML0?1hmPz3n5l~0o1?M3e9txqOn#N# zjIZ|dciX4+O5WH}%d2-5V`x|&<=R$c2)$t-hvv-2xh zmU4zcL*|#^6n-DE>CRzER51+*lG$2OP zJ>=7I1Mxldtl zYl^|$qt#j((IibqFC>GZ9HDcPae)2D&#cUos?iKhX$4HB43V!8gG#ci`x%#SEtR`G zdvRqM>tyMNO#M1V5yvffSMzFsGcwXtepafseQeL2IsJG!tG7~t_Oa2vp1}w_*-dtz zZGt)4_!yukTqAvx2G!(^3%o!abA`}|-i&kYKeXZ3PGfxANX_yJ%)e=8%UOMW`m0VO zm!3pD2-i7R#k=i7|JiOOD_^n@Y@^mqI_pzkwLCX`>R%3CiwU}j8O6wauo}c((e$o9 z8y+51z3~ZqKX3T$@3{r@&YW$E1Qs^F;S^=T66>ug)seQ3kKPKb9i6chmhL-v4MTP2 z1G`?tULOOID}&6=e9-WsgY*mR?~@MmGbDm(*Yl+O7(lz?V|Mqq6F}l*W0M0EB@lb? z>K_$IwdZ!SQkbbLT^!9XlVmMuGWo1i?sP<7Y|FE;RmBUc9FDL8yOzBmq5R+6Q#Za( z%TiR9$wJ!S2xh)BRuJ1|CZ6mZRp@mrXn%CtQea37Imxq$2Zt4u;|>o>3dJyd>F`4F z_Ev4J>V?ILTKwe}zg3N>(>tK1W$^5M-<=}VcVqY6sL@aFVymVZ%A6H;6VbZBn#|KL2PNlTZrpI_& zqhW&tT~tgkEFwoCw=BgKzlT8FT@N@iPTirbG(GyoMIR9_DC&A4*2v^y@8&?(X-jgJ zu6HeK32+V^J0;aSK4x@AYMeamI?hNzl%<6QY3Y4Gtst}QS+S!RONu?SMohjZt5{|@ z72Mk;hJbTGE;(jI@v5KWEGaw9jw{EZ_8SmY7(Ms{<4h1>YyR>iQe zF$XqPKHS)~VxMO*a|Gt8)Oi0s`fJM+h zn!H1qA$ksPtpGxTSz}m_EnYp3rb3l&U;fqU-pbZQyQRD6S-G&&df(^@snMiG@2F4x z&HWmYRhuKhwP)KGU)@6PqKDi&FD+6BXy$L&{0`?)h4uO7dQw^SADq%Q&&Oyq^xUDo znZ^Iu(?D9?-&p$SkznM&UCECCO?cZtyy}U%dOP7HF%BJEI7E*n z#eU$aIN13SZuh1{!=HUEDCyW<8|OSTf{Pk^H(iJ z7W2M@%T$1IL%E)9>iiAL+@5o7j}01d4dHV=i<+JXv*uC}ypUT?v)?S74i_U|mS#$G zKsn^HRt1R9cMVm?o5kIa$zFar*NmDNcMlb8WiQT7z7pBhDQ)Sux^Ne=z~?4m46lX2 zQ?tbvNA5;l%8?M3zt=W<_fO?a`}XU>;yofRQoU>VNf^@!l;AU7{T?AdKpstKUK@&bzyNKm`vc?}{o? z3bYo)e6pD?${t|^Wtti2*XdK8bYub(uyHmySN$5p)#r(zlk1Py~p$Ucuw!I&qd87PMhq3@L%qUg-eEBO?~YfEMI44h^u zINM>RR+o2W*DWuSU5@6ynyeg6StgY^I`)px1?7AC&sr|y(+z3r?SEE12nOr6n@a~j zk*3));Tn(YY`-C*BPW}-{j0NU{J9eiEUJ9n>cgZS=Ubi@Wsu1J05mR1>YY}B4%F|x z8yv&jD%_U#xjaWK?ALdTs;BzfH^kv7&r*jAU;RF{ln(6S6<>=9me1kL$`x@lee&g% z>Fju4Q7>IeqsN89j@PJz)9Ryn)t_$>53WWBPqm=jdL73!9_g+(K4r#I5yE!~ef|D%qXEeQq4DXOR{tHM=PV8E8r-zh4~ zzv|fdUPl2iUERVOt#721-M>;-tc?I~-vAWp_Mw46n1Em(sJDBhuV-*jIP`xW4Ac{) zqzIF9SM>6bcUM*QlJ|61koWY0%fnF$FnMJKcUclcmek+lo*x4w1;9w(9MP=nmh@k& Cj~9~w literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon-120x120.png b/public/favicons/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..b38a00edb8c618f21ec5c713e16d6df006d24f1c GIT binary patch literal 5941 zcmZ{o2Q-}DxAzBQ7^9QuJwepbTa-bxsL`Su3?{l6B}5sW(L*9i^pHdnUGxzIDU1-k zlSITYBpA`I-+$fregE%&-MiMa_g?4h&;IUn)_K;m)^k$LP4($$IB5U?0G*+M?w!jR z{*O_EF1?C};+M++^n#hd0Dy)p$SIuia!iK0qpuBkJ<9#_a=`CyaK{7yh!6$ zzn4?7n*cxv6ad(A1prhF006eY;tq?OmkE&DZGByU5Wo|lnaGOdnXv#0-r_w~~ zcDWYL)ra$&hi67B@wn#(mMqtM1QLZm%a`$lYX(XRcCdtV&(PDFwfGJ->E6}~!3B_q zm0g#F)Pc^qXRPx-Hk+Itz>Bg|Qzony%#4wGw^IleDha>+{|zYKaS8L=6z$XABw+&-JE|GA10k z0g7ZNkTdsh)K}X<1eY)PcTij;(}-V#PlM)-fPp547ZmjSIksdM3F)tbYX2A)Q#fYD z0Unlv3F1B&zK-}*mKq^!`>O;m<>9lB9WkxmvLcKOhG~|{RN+)JfCYwAYGe@1D#;ZI zqaj_{kbZ{sZed4$7DuB)2iFvjL95lq>Ng;8;3ljul?TVW@tt;sWg(@tx_$V-e&u`- zg0yFC+@|Wle8y#AYRsE`*bDG%ud6_ORHq#$%Wmdbv?(n(3N)I2aD!{?*7)=9v4n_N z5sU&(9OryW3KpRA*Mg6(FN|?F=c4F_7>kFQ)}a=thyZ{&sx$ zGWI1EFCE^KnnXsVYnDg`ciQW2m7Q=10Nc&|>8=V)WPg32xVrGvZnz>E6pmcb z`iM<9Ie!oEqc5v&hoq?YI{DKn;_QZZ{ZdyregL zmBZFIVA!9y==gs-uGn|${i)nW(Nh>Sk@)5QU#Q*l)d{ zFEiiJ*l;6+Tr6RS-_U5zl;KW|KIljpV3!ykP=CG7BQ+6uZ6I@0fb}Sf!%qdC_pU5; zd0?QA_f5w>wO|Vu^7NOt;02$c1_i5=HdhJAr?rhdCTaiKgwg#4)_PH@IkKC#Rc`w! zyauhf*BX1lIEM1Gm~_3Bh)HTwHH<%_DwhjAwkVQ~B%vOAV9d!WtGFmf$ z@utH@Nv84*u@MvM<$|A}a|-a$ui+In){0$=%a5$whnB4Q7Zv!GiR{?;?-48><9X`D(dtD-;HdK6gX)5W#Zq0Z@=Kj50{YH;KYM$aq4iax6(X0Fe{-L?d1ug4~ zI*34x+sZAH6fDH0awI1Z6z4)72@Vu_5k#NHi#}cRzxl&So5V_d3{;x>i;2ng3a5A&uLtJTY5Y^;jNQ4o^bdXxwBlfCjw(n=U3V>!;A|K-VwBG%HfN!A0EA# z^{Cl6Q;)Vx7JtRtg`u%Vsq#aP2u7rKlKF{Rj&3X4BW|tL_mB4&;*|v5xU#P=qzsp2 z)a^eU5AFn-5cz2efTKXuftSJpw0-9?nOH_JJTnko{>|456EmMGu~qFoMb&3G%u53E zlthXp8ms)dW-O@lfh- z=u%+PP$YmElu{FZypHP?CjOv)Sw7bcw=K8}CcwORe`G5I%dq>_}g;ZS)*4 zKP*79hdftxHS)$KkzNEP2{kxZ!&p14u7+ z)cdpKzT^#$$*=3o-0v&YIKadLMn5WiPiJQ8p#j(pNXhh6t4Wo*i?D7~Ca_aji+lT9 z%nW3gXSGR#pW~P0weDI2KPtPa^SxNhj}lAH!9c!is#gc~2a`r>4~R`Lt(WTlAxY z{H|%)NJGh6nmLXdCFnnblr*FYuZ7w>lMn0F~ zSlF}}=1&d~}+wXN{@c6GoFHq|zK{=$gH7WS~FXp@4ZtXtQ`5WTcL)Y3I(Cms z=0`!ui?Gf94)|Q|KOQkMMEdZWlqAQ1#D{giK^nZwT9C$#QNg!GaLhEmXO;{877u|Z z&5k+b>;((Ert#lbGD2wRhq$1&`73wSSe4!6#4R-V(@Bo$Si0zKJ;pg3?@jZ3a~Baa znCCpsmIqMTVUH@VtBH0M?{x_-QQ9jwYkw7SffX_z<*Fwf&a2@)O6xOU;hDR$T`%k0 zqyrfWE&36LUw=M1!^MIlc}zBpeiTXW8}Mq? zaPtnR6)AjEw{w4^)=}V^NjN_OgkY^qn$L;TX~%&ae6(gpqK@^;SC%fKyEgX_~3 z*}JAUDdg}!-(`;KtvuWuaE7pOu{cMKtBEF%X!p(9)(9r~Z@i7mUwtEIeWSrcsZ+=_ z%hG;-to#?og@L0I#PrjtyB9b}Zwhm8j2@{A<3mUt)7x()@5R)VL#%tcFbgKTZ4zl6 zi&AXIK$qc-wvPKp!o0e2A3K-$iCCfjyKs@5UbW>bBwr5|vnrFblntKio`u2Vv5p^Y zj?Pf#Wy9k6ey+Z`Zj6+P^zDt?p_;pb>&R_NXnBlHP31(VQqYUCq(O$3#OR<6QO8op zPvP7ZZzt}#xqtqZJpFjV?6rhsqJQ&m#>SZA$iTn>6JL!N2=3~sIO`%upa1hGrd9jQ zMS+8&6L~OM;u5XXbq2j!_uN49U4TQ~=yN&0_9r^yH)q~vPjXl1OUF27QH5|y zu?{sdmy^))FQp1N#ZF|4Wo&^>-T>(n>lvwjJ}ba{R;@Wr`>S{TZ6i6Op{UF?n#Bmr zn+gZe-_QG8T|eZ@f-4=yRo1n=e5ou#J+FMgdj!uZRTey;8swQ!Ns)3t77Kh^*!;Fo zUK!K8@0s?-%@@`?e2R=Gs69_gFI_<{$<(*Sp%c-!ZK71kcZVqVJTqPxRN@$WB2dX3y!@?tM zMXfUYEG2CFYd}+uqhoLx`F}F`V z>`fHz+i&l*H}GL))MUQXGpBm#{f&Q`DlYxvU2*SW&cQ+>1HB3u<+ex^7cV@SmJS$h z=5tYUd@Q?uf7HHzXSHMdnQ{N$p_3w)c@;-5&uiTN{=ZNfGYf5?Z85anQQgRoR5HRz z7{-nwbMc7a<*gcWP9$Q^6-=-{p5_|V_``Eq9!<@qqdYdL^jo*1JYBuQTK&JvcldYb zAHTF2l(dOS2wIyI}~(RH(+ z)oIqM^sCB}J|-q|GwKJS?1#sCeQ>JG?*OG|1U+xlWXif$NOn5532V%(p?)et9N3^3cjj( zqmBG1mxbzRC^7>P5uCu9J&0GzT}e@>yx4J@af=T3k2oo5Yf%r+rI^;)r~Opt&f*Cp zm*aBhT)av@MITG(n=4hD>SlYnX!nOMn?p$6A2o-Yu&g1@=(79tgL9~%Vy;~Yd+>BS(QO#d`N zuPDB=V}Cvc&&?3325}eF#%;tb03&}ObSiJ;l*{C#N|AouYcPC#TEv?aXsfB0_7*I~ zVaUylAYrcjhDdX)igM@;q^PSh^4tUReXC`9kXNZkw8-S_`=(>Py%EGxT%ES{STM=f zfL(k|I9y5WA()OTo~5PnZhf`dQ~=A4QmNprg+5{%KBPMmKM2P>`7nbP^s&T(qbIAN zv@>uNo?bY@DEvd`X6T$r&TR?)OBLX@rK_`UdAAl&O%c;_t&sT%!`)9J7EWj+qUlk$ za9{Um_AKLHjt-nJ-|EL$A)Pv)=4sCFu3{p*%fXTY$BxyB`|hzDrdOO)gCEbi^Q(fP z>N{=76WyODKcu7HX^MF$EwB?P=&DAKofrDk?uqJC=}j%ix*Hq5&ml|4Ot$M&wJS`T z>(KpQ$9}50YW%g3>K=@^3;&DbJ6 z(BA(b6LkXAmk7tdAtp#a1p0m;0`RX@NeB9SX*SxJ{)di<)g=XxQBYP z2P5r{P*i}*z!f~)U0v+dySgWDiMf;$ZEE`tRNuEE^{gG;a=A;92-1VXR`9bh0hWUz$bPH>mt zT)wYf)%(3$@7}7@r_b(QYjvMG`=7HrQBOye0G9?A000oEt10O}`SgDb8}sSDrLxxY zj81Fa5}`Fv9jq4f`#>n~kQL+91QEDR^<`aJMStY~b%Ayh_9W z#jnuXD$DNMLIZY9qs6wPrK9`B<$HHZW~BsTCWRPmlK<@?2HUtylDI_S{4)6QP`moo zbj>m8$DfhEyg&-kr%Lsw58Q>a?b~B(T}6aNc6lH7Rt(cv$1(BI>{1T3v>|!o6vS9& zP@UqDU~SYnD3JL3Gkppw43)@C1hE$#mDd9-K*r#zT}BP)h-!+kwZ^C;35xTn{$vVK zD-<6`(ZWKaBT*>;(g56zfDHMyuUg+Z3`zQe@lCUmD`SM}dO*oMf z?iR%dtUUZMsvy~8v=zsdUM@#k$(L(iQ5vDo5Ux-M#B74_OXRJ3RZ$}y^H22^D&{HC z6`U0TYc8*ZFdVBss`xZHni+8~oMT@OrKM%(5%>6 zvwdUHmeEJxZ+*iL;yNZi#FFeIF68-w?m)W(o1<=dnpfD9_P1L_VHA!;ic9AH8)T6umMLgBUe>2E$%>9Fw! z+H1xuV*R}Jl*2i6H9#`)>?1bk#WNB@R2+Ilwp!2E)U)@-TlZpRQ<{y%ctMnNO@By4 z7aN7SEzGA{u<@X8Qhn+9t4E!jB#X=yX4rccb86)_Oo?w~+PAS@qlUf1@k92LsYOd+ zw9wEyjBsA!toS3h+Vibx^NBvow<)a;v`h7;d!NiBx|pKv9N|P_mr#qcRo4t2d$ZW( z0zwNs3qY@;I`hRRa{AvdNDF%0%5doWE&|{G<`+bF{J3A0)yMH^D#>ZV57jLf4&tGBs$J2i*-lj#eQl|0HI42 z5NIk^o=a*P2Qr&b#D;BjSuh*d6Vob!)QbY_>q1zTE}}&%QwR{RLvG^~S!2QDJ=@2} zFKK58!_ck-mhK}&dF4}$&QqQb)IOm55V$61jFb*IB}?l_rlIOi&O61&C>^L_oe1`S zNAP8Acn_^#v<}k?=J6N1k$RB}Zr%DbH?8bK_)7U>`xVHhushpWnu)F^~g=n$-wIy7x8;}W|dy$6uuu#usM zW)&9P3}!y=Ek*IRkDqr}6-1zfs!U^<(i@t-?K2lnpN`#)sLZGz)1>=r4>V(%Qduu@ zu=r_?dQn_cP4Su=?|RC3ec5Y^Xf7ZwLnh~JT!Gz(n{PloM^U5nhGXK3=_A4R%*$%= z+yMLQmqc{Vb>0&uK?5Hjiis7?Pm4+pg3-LPmO6I_P2!zue{+ta8)yUf$bKGi%i&%) z+S|ArJ|9=lQV@!29?uK_$^~M2QPvSU7|_X=kLH9o*?uxYQ}|UV7m}dkH)@%v!~RWa z_!?Fn8Ge2#@|@h6YO~=$RUOrGJkGCQd2sqd`1JljVe){ZK_?BQ@1Oy<_?Ip!s!X5C z6gsvwo>ZmEYKcj`CKJsHxi^5G?=NYA20wu}?t*)QA32hC zB-ZZkTh0o-%?o%tq~1WJo9a9kOo~Ecz1a$u+i8Mx(thp)zFhc<8*+Qe>~y4Y$8|{o zUeXP;TnYK*i{#pa_ot)N`4!$1`(zy|$$W<)Jd_l~h(;Cjd=J=uiqL#Pe?a#nG>~;x z4(UBZ@EU*qHXEc#AHiT!FBwvFM+gu@s(=OJ$%Bq@lYrOLkC$I*N!D9kvL zG2#E=Y>`BXHJ{w|lViav9;jn!$F0S#r(i+}hg_NDe)ZW=G;1&62JuTRe*sc}XA3Tf~mxY2DQZ>+z|9IKNT` zrINc2(12p)*o$Fm-LPaf9yj^Rnvdn9q{1HUkz`~$Y2E)eNpM`L=6!ZX8@)~S8kJ;X zFES8(A3`c_Qd7E3%bbzY6z8tStSz6qY&PFlrA+7UkUT!*fyK|il>5sT!>{X(T6 z#S}{a;jH>eQEhzSiuz+z9BMn91x+foO7Xl5r4x@ndhC40apC&mxjikI>bUU*rmyhf z!ALO>CKlpk4i`Q{%xS-(QO4~f1dlxL_%X=PNajBOy=B_bD<%Fy0ad*emL(o@ z#hxBIY98q(pAFHzf6j1Om8o~!P2F8FYdbmj7Bu;wxYyxazg%?1|+ zY(28Gj6G^)8H!`YMsr9_OPcA0P166dBO#Klk*U8SGipvhant+SI$n= zqA176jHn2*LhqlrO*lIxZMR?y(&ZRsUf*0FtO^5Oi3^?^b9IoZ;rdU^H!q(LwWCi~ z!QuveNgjZwbi?Zp5?>M+JVA|W-S7cw;@X6=+!7*Xh zhw`<@&kP<(shsBWrz-E2O|TwVk(0{KDP^vXBm=(s^huA1a+>J zAMc78>76N_NJRk+AK6Yi5E%^{6SorfkWShNUP1#iPm#Gv%T}+7K-ueyBChz@7!~N8 z!F_K#CwM)3y@moSz2PtSFIXHV@s8-~5nGYYmV_~CO|2T|MvsCheQi8!%1zTUYy0je zbr&bNY*6nK@ar>fA8o!tzPESKx7S;;V`M*{lMmtvL~EdXMYPkms>AIQscsFsZEJK; zTkBL zKLYR12kyVb{!9^D;bHDpNrr=bip_BB!SyusJ9pOD+7Ho)gn?g`H{UvDyRZ@o8EEt0huEdv;6 zcXS8NZuNo{ceTW-Qq9yQmV98dNo-4@b?r?JkcDC|SzbclDmdnhj^}cHBrf6o8BoHnIH9z)YnbQws^5JwX4RQGiZMq_2t_^7(IHB(Q_KY0gtOD(=+(WwS zNui4iKVTsq5_x}gaZ60C-Inx%QwWD5d z-u3Esk*k-qZy#vBm{lbsykYWd)ksV0%)Nd7N4z%KOGrm|g@Q^fGtY`W1b418DuJFx zq4V1TP#vye8q9V|%hS7DFTL)!!H|?CV3iIWX6D-KaPGTJq&C}@IwCW)l4+scq3KdR zrmW7b`IOlssXSUf%?zAY>9+4Gk0}YX4WP(b4<~!ryV+NM__BpFH(iP)nKXD!^*klMQN5n5yv`b!o}X)Iu{ws&Xy#>P535N#`P$(tKVLwKubX;A;0sPWQNERt{A2`przR08h0H(MS{wX*TLl@8 z&rn~r5-|7o?NKTD)@;ohlBg_80$t;H2oeFO-gFbsDT)EU@k%!dh_le>hq5@l*hyd zCnCLmRa1=ylfge;(t;}2Ok*~Nv|E*kiMH(bQ%CmWL#xXf=GMJ-uGhc4k(c8{v=zH| z=-Jn|&pkRLOq#yYd6@j59M4{!3m6$SU9Ivv3TnaJRIct-z2KKvkwxu{^?Q56cA}1( z!h{n0T!b~q+lCP)id_BlCHNduVtF{%4 zPIkJx+R1N_`WMW4*|Bt1N8Um};!K;u;lsJkJoqY<(FY42L!nCa>zQm`i0W@9yG>t1 z7U_kBCORur1&9n%ltdO#HM=I-0hrVe$I0D#1=~p?=o6i?J6ySbIT$EUIpKCu?YL zDMi9t_@;^a1*t;@&#rMf8IPh3XEJO{^tXI!^9_$Mi6+Sj{3X}sCDzy2TtT>Q3DuEl zf*jriul1qyfr7p6YCl`Pq~4FP4X-jx)p4my$+Jd0gI(P}Dc_M!VLLW`q|TzJE5>gf zG86|k?bHUu-wbY8k}Nu(0?WKE*fZvBX!43ZzOIebT&_FQ&NB|4Ws4Hz;!lYx?QD2>9IqrD>)lk|w)h=fZ)a=|`)-U(N3-2~%Hu_w5mj`|{Z>D`| zUFe;07o0K191)l(M}TV|!tqhHRYA8CMJqG?b6%c#rb+p+HU%+k)xK2ESsa{)8shUk;%<^pwN7)#Mfim+%4(*E)ydB@u=h}XUQ zU}zzii2P-lEDIm>yWwhH+5)Y*{evuEAM>__x?$2C#%xV`J-d`v(2U3NIV(?vx0q+} zBup|1=nN(mA%GSPsTU7}BJkjary1ejIi9a1b7(RfNXhH8v%T4L=SX;sb1L2Et;pC^ ze6?b=YS_wHSrf4G5@E$WWRU1tLv-Z?BybiZOWgH82qaEmNj$^YIIcl=Parmc>Xx(= z8?5!eKNhWAOe+;$)2F67D_FLOwGHkhbo&bQi7c}8;%qY<`#E5l zs$X*dX2%dHDmkJ`>#w|x6H`9WXV}G))q~0^^47VO_hiDDPQ5N$O@VhH0+o&9t3RaC z&F+U>u{ds{`^7wQ-gY0y*rUds6}}MJ4zEx;>zS`+MmIi?Wf91};Rw=0C3r;~nBSMd z45y;Ly6aJ>|K)r9;+~6f2vF4g#~Bks$1QL>0RbWl2>$LzQnSQ;7mDI>NDTRp& z4;vLB;z1S4?*|0MHPSlfSU6ui#%!{%nsJWa`X5rFO=W3 zEL63;IY99nQ(?GZ`DlE>A~R2`G!z?}-^WN1f+|5J_so{z??k^H;;(vhffDJq<=wkt z$;dFfKMYs--tb+9bj8%Uq6s?xn8-gjh2BOfPKzs)3RAf&yXRqGH`P46FkG2uu zZ`$%*IIUZSNYHkz+hI9$zL&wOU^w8AfDmoqUT{OB<)@?^YFC@0ZPgZ!^_Wl{5z|c@2F3P$VtU z0`F_6m6FZwyi97!^nLe1Whd21-7MCRrjaMraa~F}uYr-yWBK-{^T?vhd~iz#)TnEaiP$r%G;>HYlUqW_=#%>9D!*YJ+b;f-^3#=5sB zzU;52P~GNroUl|G8TJ_A$rc`HITyfGb!+5{&dKdnK3STSLxhso;8fJ`K{zn@XC=yX zxk+l{TRUzK^{LF!agWV9Xl5%_s31;Lg#lbVXGMt@^H5u;3#C)Qjs5p>UK`J%g#Wzo z=hS3w*CkbMSEMAj>nnvnOvyd4A9ta^d6}@DroZdSu_A zUc*h3yPdSmGtsd1-%eqBYWdj@#ROc4yu@D;vki`BInP+WIlM2mF?9l7g|8&T8CA4KsK|FT8);RHDyLf)!!6PB7GokVgT9h zYYj*ht3=Y+*sJad`WO>~9q@2H&@j5CXSWk`u}iY#QqSK*bzUB^fCg+QhrNyV8sXJv zOl|9EWN!R@M_N)^@7L8a8S|Awtey{A|AZJaTs0!<>oiLEi+XtFOGu&V1O2v;Q{vx# zQW}AGLGOc`k}SzsCPY+j-!iSiW)r@(jn+##z9O7*(;xzn*|#2wVq*=42-zDT9z0lJ0%AQTBCBbjZ}j_LJPa zCsT`cTOQ~$`YZVpFf;)dFBc}R6Bt(a;aV_p$gXz|b+KQrt#~=}VBkSO&GiCDHKBycGbC>WD1hsM$2 zV5LXkxR2gyCi{iJ9!&(D0I&yX)8!yB=JTW=FMLzR)f~QAxK&3r{OyBafGy6n^LX%n zrFB~WP2>0aV%9AIL)LRuU^WjSnSy%pe61CdAW%vQa7Wp8GW$-*dsJrzR=?VmCDPX4 zf1_v!e6Hr5g%Lo!?kGt=50ncPeGA6&9tOsfm$0T=qZ#J_^wZ5hxqrr* zSo|a}bIVaDE#Tl*ojsa@Q9~UgLPKKdP?$gJxmZo~xwvo%X)talny8sq)?lI+WJH3E zSi15MtfvZy9B9bJNE~^+u&tW>{~6wtI9^3eB*8uvf8hIPMD@&1*~HJ@#?Jw4=i~6? z0D}C2{5PV zWKU>bPamg+xPvD_0M$Q=hR*)(wqUT5r=7pMgNGj&toH=<1qf6=w)6cr%)d3kU}pyx zCucu^fP^3sz$f+zL-`*%{|EEJ#oo{PAIQ{aChR8&^?yLLUECe~g1sC7|8~Xa<>4gT zV65}sbhHhhPyhiDaS1UAK?!kwz@F$olR~2Z&@pfcaRBfuC}fq&>_4T9|089juMTi@ zadUWjeLi;&KQ~V&K1Z7X7duZ6U%vnQVfgGEL`C=oY((sBg={1w?1k)XgoW(v1%(71 gg!zTUgl%}A7`#vY!JE%IpDF;cR(j49VGyuDTDa0E$)3E%hymt8PG7!ynWvR*~1KV0Durq03b3J0JypzirfMK z{GkBA4jcfGxmTm}F6=OnyAR;mJ=RbKumKPN#W+?!;Qa`pH_XBp01#yR$FPDb6$1bO zrYlWVCF7ul{i5JZX0xziMfu?sJ{N!U7Y^UD1guc#1b((pLwTW5j#0VMvFyoFTCh0k zq|z5!kwiS+peXh=Z<^d#DMBnWX)&b%9MQdH{ z_R)8x#-wcXADT(bquH3_&=&6Q2GnM){Cf8^fo*ZQ9#qGZ(HY+dP0(8R9_NXuF1JoY zjwqMFBQEGnus^_K{F-6na1l)pB_hF5K?5f7Ph}5(Muv_E13{M71SpC&#vq(|U~2bv z<-CKPBW2VtY%ZK?DH}ShlSskMO@T*Lkk@q5V>rCZEI4FX*HKT<@2379;H1m+{!qXu zY|8%FeYb-#GI!QBug-#{#A-fISWz$1(*xrhJ2dB;~3Z)-%qdrLtUa z(6(^$BcdbbBe^3+i0#2;{#$m-4;hcB7RmnA7LI?!enj6$GoOO8DD7|05bP6M-%m6zQBq~X3y+1JKY;i0 zz)ZCp$k;0ze4cvY`~vZq=uu}Dqo{(Yg8=iNp*>J1cA!TGOC(j zk72El7HVvJgf^U<_(o~Ny#jtr;?=2Txv@-f(ZT4f(<>|_2W7|DRa4*)Evf~<2DL>8 zo(iOiKTC7ncid$sT8o4TZ0mRoEuFbDaWAt}i8+OKwkNn`;%tlOr7r%_}7dpQur%Ha4JYWgfe6#<>$9v)c{;7WE=2x-B00fKT;ftc++{~ zAMsUz=~Uz3S#m|N^=^92W-T~)yM;9fFHVvut*1!jLVB@%f+lt|9#c+V9-LMR%}nB` zLXLmk>(cIO&SK%uU|o8GM!d!kDkNfQNaM<{%`S|q_!`aoZZh?>u{O$PX4#j$-;d#zWLq4rDx%Uza@_Ly5$&b&#+N6NByR$&`)M+b8C65(1lMpY z+~jxvMo=f_az#iqGn%anjY~Xi7bpg>R(EneG{_P!$9G}qtN2QBta$T4GdC{^hq`(> z$f$sSiMoVSwI&#LCFIw0sA}lROnC}|95N-gY5b;4ap&)|_PvqY@X7yiqQwB`fPDJ| z3)P@3;*Q+EP*5`5-9$%}eyLPRq|WWU8wV@%r42|2X(rO>QVNesmqzmCG-rscp3 zj%X_~tTnxT<>M*_&d?HTq#e)8UU&${z=emp(Rv1^D*V&Ai~@bS>d7}E{Yfby0#kE% ztBb1nub)*i@=WzUfYern`mT^YM4;>n<1WyI?DuCntr?W8NJF_VCISf-*nuf+hgkXk?7 z%w&QQZO4iHiQd-CRae5H#H67xos_Ew+EiIe7FoNQca^jlh}$t^SvIyk+ubbawwyEt zspNP3I}oDVtZt6v0{Ijf{g^1h=^~bfJgn$+lEY4J;-TSNo58xgPj1G_Av2UO{bOX#n72@n--$90V zDL;^AK)BqaM)t9JpHC|1*IvP($Xe2$#WuQstlu@lqd)CVW#1B|<=PFRuf%+hd#=A=DAb@4PGNSz$4hqs22HzC9Wi6~u-d26uaf?%?< z!P+bBbb1|SSQlwmsaKkF_?o;Rj(M~`v2hbzmajlvUVNzYDH3a`aWb5mWj+lP4Dk4& zl24H{k?a|>KsDz7IREsQmT!0eN4pAUMN+xPfqJD;?6Ls4MCLIks$vc=aQBRZwzkH~ zvkH7Nwvo96_Ep_efV)Pn%Ja+*e5&vLBdwxQjBN~>$PhDbrai14vcF8;ZMMLf!b0Fu z>}eC|C5`R;bsNzO*tX38m38rFP;i>|HP+>ui6T_nPa>kCEv+wDM?J9~~5_ z(>fbL{mL^YMS|8_R8LPGnZRxQ>^V~XY8O%=)WafOe~l!Q99LuFkxXc5=gC`6i6Vz& zgs}O&OLA6cAbp1|+wN@N6UEM?k+nx}IJr5q1)Q9Q3QxvypQ7luJ+7mWKJ2wWX}@7x z#}dlm$E3O8;yx1%db~_Kd$hu*_K>&iQpS~k`s)^!P7HMj!Cbk(Nq0VUNo>)vo&W(3 z{1~!POwb{o4hs7j9xbGde?0gE`-8YPop0`jLQc_@d(K+&Do{wDQn%x60Gbrt&!Za zimfLYRCjL@-1?OyF3~zo1+~VR6`Zl%%>+jF;`PLea20>#p6lZXGKc1#9U_v|#n(0O zm-0z$kF;EA$@WXk&T!kC{u^gvg*^CB%yvu&Fne=_n+E~XMBGXy6WmY4lP_dG0NgE* zz=Vm1e`{8njQ{1s)R>~vO2c5gP6`8B0YkCHjdqEG2A{3jQey>?T)fc%YpiV|fkau9 zuQamO5o>g+Z{)8Wl3bZf-y>&&gpW%F)L$~JnEtAFzQBB+lPfrMTQ68352XI#e>#(i%vs*VYBlWatd9I^egP>fO1{JANDGzS)t6$I*`MlG{rZXZp*h86z(D+#2$ zRdP_|G_p9QZU^L>uXa1g!OgMLmQG&?_iXs;h;bmbj7F57B0G_4;wHCOx*Lie0GcJd zk$M@@b^(;#Lb(P_PNz>fFAN$ zc1mX*U}M%hsL|PV7B!PnHv_AWf@EU{V{ku<#{=>mxgaug+F-;(var2V0re)ZwJrI^!FpUS&VgBnNikOwjDpAjh$Swowt ze^gq2%wDBIq1#>Pn-E6PE)445lZ)D=&Rr7BGfP|_+IN3A+iDNxJ}tSN#rLQfw{TI-N2 zC{Ts?kKf$7z|=e3xBEf{DFTb#zd|>tUj01Lk{JEUmrQvbJT2hh(S?iY)3IgV6}J8C^|_c1nSOsZ|6Np8BudDA8P-4hJX@^_K&ky3l^AC)zUl|Ior zo{~M#d3T%!qch6rfPG&TSjOw>->T7SG}d~#!J1Poekj`uz$73WN{6O!x!ydKy)Cm#vRdqYpVHPP|lmwxq?8ABQUR$LLXi5kP9BPd$&q z5r_6(fHrqs*+-(Ka&(@b4o6*YAB>oYuY7+GP>9FSeBdemY3-YSB16Rh9Dwc9`}8~< ziF;qpk2{b6Os6VqJN!9*q%b^!A&*5y35$Pm<+0qhC2=0D# zgww2@`-S6?Tkb74@f+%Ds^0SJ(Y~#&3kYt6VZqEPa7GpNqn?cdlLD=h=g>QR-J4j!D zU|c5ZL8z^jKDVm?w48_s!R8Wzf8_B+*|lO?F&&zkvW<^v<9=yr;+ayIM7=Z%6jH)@ zIU|oLtoN9!@s!9IyJY=q87ZjE^!p6NH`VpF}^VtsAN zSdJ086mpiYE}Ge9pO;$-w^Y(uU|y&?P_?Kzi{g`is!|rZa8k+lky*7d*W`1`<7TYW z%rKfuC#R=n(`T($mI5Lcv1JEql$OfUZ?*@Fh_ zGPLAfox{p9Uu{b9?8B#@sZ+jW)i9m8zh}%|4k)FZl$gp~1kw0_0`-eNpeQYRNtV)W zS|2x^J_dg;j!sPqe0?Ux5SOR@FtKr6z;Q7nG)J#YJe0D&B;VJD##UgK5A0h;!hsY_fqUuzvPf|547 zo`!+?v3|{t_9=+pXQd>HAW!L|n0?V(!sLrs^7n`VZtie^q>4RL6*4I&$mZj*ZZn++ ztS^En>DH&`t(=Gvxin5FLsLZSNzZ;DTs+1u_ch^48fT!WR-7~r0~WFO$@{8oSK5UY z#5!vYtGhdVNHUc+nA|dhY(vm8@&UQ_K(_R_`QlW})J9iV)_CD(`RKVy^7?NIPGn=X zblK8YuGR`rBwS+(72p*Y;f1FV`*HWELNonAdzZaWr5c$BG5(}7s?_5x&7ba3k5|E* zp5XPe$VB1qq2mFn#R%1!0H?ZNVozpthU@Aztxt<@g=3%Rq;5-^TIK_-dy}jjyj79< zxuDeRcVD}|mR**s+n3aAX!vCM$E`{`f9&Sk&HeBHs8);j>j?UX%wdlWY_nsFl`!)emAP&&{p_f;sz! zTeRhW_!$3`r=r};6rE$?R;zm3q)yYsk^dgfuv9SUHdW>?efWwE@Z5lNcbS{XS4g|p zn<~+9^jt?|O^PVx<&4B=7P`IIV2BdvAQiIgbI4$@IfAO2k zY9;^W=GEdcGi-e*u+(bs1X22>KN#bWJ=)ktpSxWWiGikK4_Fx-7wJw^icJ;nwv>H; zsp#8a)=*ureSRrmEG*AzmNl3TXZ2Z5Bpb3e9W2?@XPnwJxJ&-QenL^pfLv4mLchVT zC5gwNy!cIii@j}M8&scQeTc6RmuSgzJWk)6NLGOvMmiXb-3ca$Eg){Qb}+b*(Ok6C z)SL`uJsMv>}y zuqjZ5eLk|o3jf=Rl|jd;*2Hr^8m;K6A zSz>*)smZpkboOy=lzUL4BJei3M&WK8j|+c=C<}P0iW3K@nDXWzk*ROx(N9NPw0iO7 z4bW?MLyZ-=F0S1f>pgVEm|QzV^o(tOw}#Y_-fBXaI$1hWW+}F%h_u}98%xb!g;Wm@ zU`r@b2q$8hQZkxFxv3Xgyy4`%Na0a=>3s&8&-k7dQ}arX{$>(Y9^_!$abTRziaefCV*OX98Yg%vk{P*@i zEt4Ta!O2Q8Y5;zUR7I)y}~c-~S}tTaF+Pko6Xrry088m+DEY?8Oz~fXU*U7jh@vOVR_9s$+E!TfjII0S7vJK-Y?}A;O2D~{tf5ue zeRQ(Z^L2o5I{#E_B0oEm`A6fN8Fj<*+?vPNuwEvM%QP>s5KUfnIf8&qM58&$U+K{w z1zzEZ7xFk`FuMHQ(d-uYGdbQ0sVqHF2P;N-Tx^qq}-UW?t&!54gMw*27>cOO&D;%!`esZ;dIs0^bK zO8El=J#l_r_Rqi;8-%}L?*wzc{V}N0j1W$1?2?o;=~O&n@->Q)RZ!Sn`OH`FRB?4k zrs#)j46Z3LZ4vx4T1K~74pqiG83o0l^$5a)s|O@`Uw1FZcBg1x7EKjfNt4%96^ zmYBK=elCWhIvlsXXE5oepT-leNJ^r!Ac62ja>LyjL*+-zb(n1Z;oV6?6ZhAHqrQ&2 z0fJs(>2qH&)F*58DFRYL&-*7h*=7s8JY{_+M~kF-?NQPjvXMAa`jZa$>;rz^3hpK zx-Xms3X!hTY&KjBXK)u*lPiAUN`lXEjK}~hk65Mp{x6H1!*k}N?AK8DG+Lh*CC42+ z4H#Qvx{!y$&hZaiqL+gQ7$ufkD(UvTAZ56m`5sp1iA6e&^-X-}D~cU*Q{v5VtXFxM zYR^{RxuW*1og6NFPYM@bzGT!cP2m3$ zitl7NT>n8{;je4w^2HW^opD=NV$A9B*q{~p53BI&%Zu~h5z5g&b?d}sHLgx&nZi2% zuhLq>WyIA7&{UoRXzIQ+$l<4E?&o0Z=O|i090H+SjreGEpz{fLHVFi z87NfRCA09q5j?ycToA$kHvuNb4Z0_&|C7Pj3*i@N>*EN}^sseu)UkDPv3CPW2ucb{ z2}pxPpu%GRN+|*|5S9Qr`}ujx2nhuS1`4|TgTA+Ww4j%d(^CBYy&!=8A4Owle-Aqu z8C5TPe-B4bKN%VQd#Eo!xcaVB=zn1Tl~YE>+0n(x*$*HrEkX|PiMz+p{hQ8zV$56| z{G9)R%+!Gi?ja2S2GMcxaP$lIb_D!uRzlvMPKwQ@y8lB*$M_xv5Ehq`mXsEemVyFy zCH^VqlK-2IkxPgp0IIBL(YA2R*7kcput0O8{9c)xrh4^KaLFDD^{ZGeltm#44L ze{GDAy`zLURM=MB!A{gxTG~O>-d0T1-a$lE#8C_?Dk)|wc+U{LpI_Jg#r!@4KvPXu JwLuvk{U0RvMe6_n literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon-180x180.png b/public/favicons/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..73e3137df818946844504ae3f2a0fa1749185cc0 GIT binary patch literal 9642 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 DH}M6b literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon-57x57.png b/public/favicons/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..576a15190b9baf8155b3853ebb1894a629f57f22 GIT binary patch literal 2812 zcmZ{mdpOg5AIE<>paW7=H15TCGPiAv*%rEK8)I`mg_U8L(>5j~htTb;99k+75iyF$ zF-0YXh|tO*L{bPhTRA;*U(a!N49SK7PSR7_P-@=7yXQ>@wz zdM95aTsNA+L+(iR@J{mxUOZ6sk|9UWP<;{bl!{i|Q#HDJTX}UP-s`?3f6QDjZo~;= zdSGAip1fzxf;hb=7QG%$ts$Yih2tb8UTLa&1RK?|eMT zdr}jsX%O8%t?;>ysqHD#w5ef`Mt+)g=vDnmgH#>MxpyY^H4#d$t^GuHy>1H}awGCX zZC;Ue zX65r#h+gs@mIUEU*NkAkP3mG)f5w@#Gp?!MYYozmtfpGero?|bDo{I^W))WJWg2## zql=PKFGE9~^j%S8JZ9XAGNw_zw$en(MPRBpDL&}!FJQrNAEKZ0#FFA_fY|D2N zcZt524E5n2ekFddg`tHn@5oe0worr>cuKcyke=3fckhTKr{Ub=5VSS%GfxgofO*jK zE4a#igNdbgi?kT-8EyU5!6Q)D^~k^m(*I>>fsBQS)uQND(GgA@8nMcR^({vT$oqoOO-3_lSC`Qn^F{g+S7@Pg6e zkIqp9Cb^~7>zR+@y=HFNHw;52u`$7A&*=-b32u*0ero(s`6^?s9NJHoMdH4zL#=-< zpntgC!oE=vWXxQ!QVbD4Gh|sjJbhxj!}ueK>IT~!r8rqzhYCto@Kq0-`YQ|k6DN(` z%VM}^iZU%zZ%JzS#;d{T?VF^)ZTrdXjEnVp!ub=+E(#;)ZSiN}SYabvp0N`irab9xjxg;kP9ju8HLBFBUJc-}~U%inqPt3*!a+n#RB0dWRxzOrxl7VIWIghZLSVv^Z$N zZY(O|wnb6FI~_sN{kHI>Dpj6oZVY^nP06?Fkc5m`r*wJI8|d1wL^K~m^c#GSyZ=Eg zP2sClQJKyXwZJwfZ#`E-DbiW>%%%2jsl=oiIB!N`fKlVt155W^#Bd#U+}L1oU8Q*t zn~}Z!6RA5s*qJ^msEq&I8BwKq$78dPRH4A@Yf8xs70LhMTn_3Dk0fS~`;8%QTy#+5DX4p$cO8Gtl}AM{nxYS z30a9>a0#f0;H%Eh`*2AmcJKTuu@=dC$Kibc26RH?UiAg@WwDM`&-Ez(n8BC>^?BTn z;;D>VQ%SPdKYU!hTkz~daSJ~duZBLF(RF%wvNAl5u`ZWL2+*|q)U+tR9OJ;t16P;4vQMt{Vg5ik zN`g~SxGd^4cepuwR|ciprM!r3R?qmp7&!mr_2OJ)cy8{7Scm@lRf*-l=AnGa6z7L} z*H>O5Iir)Usqf>_L8ciny@uQHQ$4&giqGsHH?HX43_?jhy!rV4(grPWB&w^N9@x$z zYCXub?;Y-CPi&uDROb6{uvXU!ZL#^mPR3=NQl;LF{EGbHh|fv0gHJ7Br@!GHT;61H z$wiluoOvGpri#&8XB8s(6`l&MjOv(cdA?fV7(#mSetQSj6Y_FzHE|X)tOFqro@lI6 z|3dkIv2bGM%l59H2B8?aeUO)l*}n1b4t8})WtBGc6K|H8-J5ZY3O&`aSG4epJ^d%- zi)3NB69~K9PFZp)mY@|bcISqfb8e35RfaAsnFp3i&q0r87#i0wdQiVly~S~|2I#S- zlvw31B!0breTfhl3gRBA<7&u7#O6UDMOOEYt7dic3At-|FE)1y-CF`!oF$)~vS#ue zJr#w?ag++VPya;_L)OGP{mW@^$8Zn!rvozfovMv=_s~LW(XyaS?B-|@#eS+BiERJ1EZ$(x&QzG literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon-60x60.png b/public/favicons/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2e4678f987b767afea1927822edc4f44733d1 GIT binary patch literal 2899 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 literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon-76x76.png b/public/favicons/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d9e18c4c941e9424ec6f1bf55a965c04e2cd08 GIT binary patch literal 3578 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 Dy+Jia literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon-precomposed.png b/public/favicons/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..b261665444b54c92663f8a4be03ea77e3c5aac84 GIT binary patch literal 9892 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 V%+^|vsN#VOpsA_{tyQ*(`ah8$B)0$n literal 0 HcmV?d00001 diff --git a/public/favicons/apple-icon.png b/public/favicons/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b261665444b54c92663f8a4be03ea77e3c5aac84 GIT binary patch literal 9892 zcmbVybx<6^x9%;Cb3x9V2CdR5cY(|x}4ot~Ccr)N4rUr(J7j}8w201#?wKn)*qs$O|D=^=mQd^Mmq-=@M-yfMa1;BKl_9j_0$;v_SXb|(kHSss zs#{xHt9RRVr#&CU-fi!{ZvTsIM!~K~ z=6rNFLs((Yt_?-Rn29lp6@ksa5P>p>SnjMn5aGI}RshqMqs64LuR*cOZ$ zHrGBDCSDcOo(u*#i_*hBz{fCn+nz`Oim@Yz2zqr;%sH34Fe6wZYzVGRx;CcbCiB{s zUV=fz59kFD#K?ywYsmPqyddSM@0>7zSCp^d6cmfs;luOC?b;1?fF=yzV!U7yHr$`{ zRuX1wlP9O&K-O}-cov45fV}NT@+m}(i~}XJ=vNL=3ps#=X%3Vmd@KlmBdK1DEI$%U z4)av+8F!jCI(a**6WB~tB_}%I)n-D^_ZjOP_yn{I=Y&bZOEV*%qU6<;FxX&I@TbVU zbx*s=P%rUGR%=@^>cw@K?Aa=AjS|oAFxTkAhAn+!K4rsuj9w%$M7A`O<-EC(9d>Zu zMtF(oZBis{zOH#GiwafTs>r~&`%w(gQ^`06Aw|$P8PDQWSITvfGAL3uMhE(&hPj!t zT}omPce0(>4{)O&W8+{CG|&2)Mr=f(b+|@p&st!5ygT~@B;xSxLMtp47>TG*4ll(w z8pC3m|0YoVE!n*PVxQ)IU zGhvvkoHPhq=60;IQSLFhs)AwYJ~$#uPT9V!kp^N~Q&)MJtc$S)i8fR7ovwg&swKi! zm6-|sAJ)M@y(0D@4PN9GDb_;pS7*$o65bnLZpH6I(cA;~?ZCb_eosS`nM<&)uIudV z+>EtppiO86RnPHv+^F@y_l)4f<)Xw1TzP{+iJM=4gHfh69%ImLPh<(8F_4wpl!)8w z2cg3d!Oc>v3Fm-r88?;+m(Qs*%GU3?^OZYnUbi@->y;OKH%&y=dEo1;&W?CQXs} z>!XgyM~5OU=mmhg3QyWy2coA&f(9Zvd(Yt)Zas)=*LKj1yMgci!sA9CT7e|6k@mR( zhfftN#hlZzAQ`uz^%R*k-u5VQ$^;h6qI5pFq?W z!MH+V-Y^bNoHiF>a574npRY-w{CmIS>b!J z9wsyKm2M{@04gtUuluIJX7&AZc+zSWvs@qTEIq7;U=_8XOkNMDB2j`QpQ0n}rH*p6 zVy^D)odZRfnKWib0N(_LL~*{q&4H$8e1PYS$2nx17$J2IK$DX(47tB54 z?+w#*ods)ILIqtNb@3F>gkZ&;EhMz%P6l~wDQqG!rp!IfuYJJRN#?OQFV$1gP)Vt@zx9ZP_a4SWANN9J56${BZEKfsHjb4;>}N8-4EVV6Ne7 zYOb7Lx(DViVXdr^R_{n~4Z8e45`jr7OFy&ckXkW>3Og&?_RWARmQek^ehO*y3Qu7c%iBiJdx>J~1 zpXCP|kI+Z;ltJKmVOv>phG_O9(awJS?|Q#Q)u~x7%elsE1P#|B_HLIFjd|yI5+Jg@ z#wkGbG2==4r(mKP^HvU7N?+N9T-RD54}(9bo^65O7}Z{unFIZ<%7zZWh!w9#c8KWr z3q5)iX-$NhYxW2@hD)}wG`(W97tj+ZpG;;{y=BEhO`An@DTyS8?^l~d&o;IWl0?38 zjhg-SQ35d@n#LQ#nc+TGRz!S5Qxv8Ee_S>E17#gjNVt?hfO4&!enHakLVpxVDzReJ zZfLW?24d^GMVDbeU78aHkN=qLkUr^k_v~1~kv_D6A+uuej zTT~7(+g#+vG(?xQZp_pcm-!(_Jle z4Wqh?QC2=la`q{b$~cXCU|>jSJh@s*N40;4-8d)5gGB?<6TzKjGPeDo44zyHFm)(yk(t9%-c+zzH?3S9j-@MdKZ z`;>8bpKu31V$h-kDqW39<-ik^w`tb`1D=@O{RRXVX7}2T`=kbTjiIQbx zJYSs|h~t%{@efo9(v8A}AM-qIbq znXCvK&ln>t1SWs$0NiRDq#QUITc`99Fq-GmD!1ucQXNGaQ{vG7!Atfm@fZPLQO;WbnCsU}x# zW~*atpB6{0)^a9we=M2WW18lfddgFjZ2Y>!^5fY6{Sn6@5AVTt-7{`f8ZY6sL2j2s z#o*q>if=Z%Mc?ML=+*`o6@%(lv*7PY=TLI_ekW^rR>PaMXTPnwXu5*eLf~k#d;Ih{2R)4^f51h@R?9u|vaepXTETnm(k_Tb zZ@gJw8O#qXoG);*Z1m^tiXJHS-+H1nDXKdF^D>G0%EMt5&l*cJ8?mZl=92~Dv=g;7 zQl$rWjxh}r)P+2PqK~Q1jQtFb;$w_{a}u`UgaIutPd7nR+nYpE~s^WCF>t7lak6Z?Faiaq?ZAIc#&qu6F zApI+Aq2%X}6!g}No)RIGLm$*@nVjRJV{Q9 zf$x~aKd4T!?ZUGD4eOyv*ss9e6&+8v3iE9NXMy9%=35*U#z3+VZaiGtm-tLXp!G&k zOVuFB4wV7#P{b$MHV1vaD;2J?L-(l1!5J$Irls1=mNgzt;y*BndcMnNFe8ag_n9S~ zWLoEPLTA>f4?I+Orj;qk8!?0bY?8G_SM=TNn-9$7mxE)ufflk;LeKp>VhNT$BDdew zRwz<`CY4|*Y-C4$(&_W+41uLLYIxYAL+%2yRvE!Zw0)XsV6;%&2G@zFbf37wBVzvn zPjlG5f{$l>v=cyKHd6TbrdUrZ#7cn$t3hCNTKG@h)a6F?_2?MnmUlXTYK(@~E;quOU)FXH|3Ohr(O zCX&JQMBYqnEwG`AzsXtpxe%9Uk^X%ipT4i(xs51Z|M~cQP|r)0`FVnLe}5Y zq~nvuVS4ZB2yzsxlr9s@NH_jiU1eb zdw&7iL97+u*`96Hv zYGlQ5h-6%PJJ&PdA@NeOU>_?kt>_z5;p{tXxfRS~uh#Pqi&b%e&pdUre{J!6o`Wfy zHatJ8ixF`b{_DvPxJ`vS%uuu-5Crs?#6@j!LG2{ETHT);kgQ}Qt!5jG-{ZWbljj_du*T0Jbo28DgJXvz@>=xh|xBAF*5FX-EKORNK5rmcb(vyXoxX{dN&ext?ycP z^_KU+k-cS=gxY~benks#hnZn&d^+5qI(5!1!Wh%Y&)72!!5G2ds5nOl1aw?t*d1K} z=TsS?9bkVCuF$rQvG}~j49-oMo&}?M@NT!y&$#ShrfCXys=dv%S4E8H45hhONe<%` zlC>8l^=Ew#6Jhj6g>c}$z{Z{Z7CjW@Do^Ko*Hf@O;*;VVw^qU-XlG&F3n0+%ceofApL_QUhM zD3B^*-=|baL%AUFZ`p@5ik}JH?bb?|Umxwvwy#%eE(mwbU9G=k70lD-4#&>OQc~wU zWs&t#fYWqE)ZDuaG|T26E)~h9!CP{KED;g*3D#vK38DrX>S-FKQy$_1S90$QfRRrY zNG9$jcxZpBxu~_X&YG`;v@v3l?yFC(`B%vAtIC`kpj{bmFU9XO2dLis37=E$wV-DH z>Mp-F!?&kM#^?2O2>KK%pbgExLB^Q1=jovfrJ($i!0Z665C zDh!ixE^n)yQ!6^D{(2F{U5~E`m*nQysq`L(29r}8JsX8B{=EmGaT0ER3}Xs7L@*8t z&>O`v6$8Vl7csh%&&Em!>H^RUMcFa-{e&?_Ys{^;f5MPiNK8EsG@bV&AMLoVFEd2D zBe$zZ_-v^O%Iq*Vl0fmbY^fc^zQiJCYxoDB?lB#oKR?}KRP<|uka!$_^bhB%9#tt@ ztDHR!B++Yp{XyMd4F0 zU#U64mI5j}isJ7W72b^ zTS9{*-4=;+vi5QJ0lTXGpLQ`D@cMB0ae~kraUU3t_>Rxz{*DM2Hh{4p_b$KRRknk& z#TDXF{*k6r_nyWmt)kbiyY(51u71Qas#_(y_mFnmWap74P^h+N=bJ^WO-zyXz!L9G z=JlV>-Nd@@vCO^@FB%-xM5>+7+ZJS&4MejlfSlK;0QbN`EhX$WMs?S*x90y0nv(NAAKe9fYJuXwy0Ek=xKafgOU!1e^<7oVBpY_-9#e#Mge$7 z+5BkdCgR5l?)aF-=*2^P4=PsrC6DlSN<7_~YuBt%`Ss1MELxD)NAzQ5iP`&$(!<}X z+W}3}nPSO)XM!a{hp45lZ!7F`D!Y6X(k%>oCoC14j)5Un6c$B3*e#Djh@@GH&hD1u zPpDqkt6kAR;7OmJ0NuFSlbTu4(cAsUoZHi@v7%fb3NLTJ{ zBHocR5?Nzft<^s5`WAE2YL?&rvN&4VLO}78D!zV}OMvRv`qppF$LySGvSFMu8%-$b>AC+b`6+Zh+yGT|-f#;p<$$4U_27aeVG zrge>}?n5v5u+v^$(H(DeZru?jk?`c?agI#({3pG~5rt*6~tQ;&u z*IrqD1C)g;k5Ggu0iw2&VBef~EQ&J~*? z??P`v*4qIG-TI#ViXrNePT()Lr~*)^I;x^;U1*YZZ5g0u`CRDn*-DeiA^A9ANR z+q~%$Ez4?KfBpx?tu2i#+m&)*#d?Iu+LlV%t{K0ZY09sT8IigF{qF;tK5qg^X^;F7 zK(-5hy(Y>7ml|kiho7Ww6lRZ^DI?urM&u5dvrpylPRtQ4JY+iq?I!(jR zpWD0<-z*3Q&TbY`I|vQQ>+jf_5@cooKO;JsR6RNvV})9)2^hHuF0hiq$=$#(#XO|^ zNw@|$l*eg=7hWcwQ?is|zG4w-u)Z-wb0acalr{kJ)$|Yw8qYN*uxVOK4eV_y6=7>C z$zbbon{hf+X_3TORsSlPs&tf;c44en$vg!La47tw)AO875bb?*@_E|U45N*D#@jN9 zhPgGxO)z5MBo&UWd4#7@^!Ed)CN%{IA!yrAhmE;`>{2vq(9C%t5W8CLuv6dgNu|E> zr{}ZM{^eNgITo+{=D{F#VPb6_bdcO67Arz#qYmwro(5`>vwk-e>WCQMw2 z?o`@|H)lMIK#jq<1BL=YX4QYxD`=6P=GbF|4?!<=)ZT^oqf54*Q+vJ_S7VE9M34kq zLLSW^J>0Qe3^Zr2yN6+wk3M!74sELvbL=zzWgV7nlOHn)8lr$%wuv|^s_v#bs6=dM z+>gwING960w`D8z_r-v-(GeHPRbro)E1HMwyzej~l`Buav<0%0syNUhPdfP2YDa~x zY2Lwz?MA9Ni*sx_4vP&A)=S25!Z814b6QsQbHIqn2r@T%3>})FD{4u6pdd3n7uSIx zDe|Cq;rkIJpO%td;bJFWA=T?2zQ*9||G2Kl`7)8OUZpxw&1CQbM!~aB|6;4x1Z9|{ zSw<(*M6O4SHQwI$Hee_mQfWo;t4%R`U&{k!dWH}IO_wuS*xC!{>EKu61inO!<;Cea zMk69w{PSOR@fnK?IemtKx%*_Q@?Im4!ReloTJIO71Jhbb_)AiOI))wFIcqkiLM4m*}FOB8ca~?uYw% zO{5(ZKM5K7-l)8v(lcwPYJtUTs?~n{g9CjH92Nm-iCr;uU7Tal{#@;U6aC_fPXFc| zh*^)DP)_x_!Zt)O1Jf4ef|?j;oE=qu7(*5C8RX6!XZ6+ybwjf|T{Nd0lF~zuET<95 zS;5m9y`rmaclVYe2*Z*RqxHdH83C+-_to?CWI^aZrm#*dq5?KD`%ri!GsBoBo#yAg z&ClZV2eJbMJ)aEr-6^2F@d@&E$4Sy_g^hw^W@yTiH zbC{^4Y4;~D6F&pXJJpmB;RwDv6S0Z7tc$Y z{xFbRt4F_`Xda98xzr*1izl~r--{Ps`rS80SalFq3$ZXBgb#u8m+E}slvK4+brCja zXZ(-1_}%_Gx_+)#X<#jM(6%<(Oy7UKCrCW~l|BgXr}Ga6F}CJRuj7^cPND)Gq{5?S z{NdIvJt68Yz_~7}llduU;RxVH{@UQeEm7A=KttE7qa|YhR6*oN?|h#tH1Do72m74y z-m@|gWlr{j*W7gpT^Gjw<+ch8eQ?=0os@mskvQzZIt_{qpV~e~q-`X(7p(sLKI{+& z&Xmp*&jeqK;HFe$y6<|e=dGv(5Y0~5CqJ(zs(8Ibi2iBUV*Mz$&lmrmK^w%jnWkY8 z#9VR5L{}T1#cic~uo}&HNlZMOmL*mH6hS--XW}w|MJyx8|AO+{v?Gb)+b59Bc9AuOkkh>Z)EwJW!882OQypn zs+4E;MSMLcgDD!Cu;)xavlLysa-@SX;<53+uwP#-&%SGJ+fmJ^Bsp;ExEqgcSkqT$ zEX;o=5>&!aMZ|f8bBK*xd9Mi{XjW=Cy;G>v>0Nc6Tv}?&9?G|3bHqz-^zJPh2%(H1 zdRs|6d3~;zF*UgszjDodO~PFKvLvEf*o1<2qguKk^69<5z`u68{{3rOe}JHx*o;>M~3Qj-d|3TqJv zCEL7OO-ZD9?Ym1fp0UkyzjI(y;yL?()RBIR%*%Q=t~gJ^4t}rRRKBJ#P+@Ksm<4ql zjqFnX?1+Hcn@687B64@-vP8igi zJB^@)^jD}21B5xm?Z61(D$<9>MCDh}e2wE0R#d2VWnh&%C9zWd^9rIxP*42SnTWBP zMR>=Kgzr#p!$tO~1T+Dt2e=2IMgC$F&a<`Wjgyb{tJ8_xI@FE|H zL6?6GLV=KE%G*B9F!|?B#P8mHH6QNFdM9bN06YCn^QJ9)sO^1@z5!UH8Q3$ z)qFY-;thL=>NxMKFV=^Ghv}&rk+7?A0pIhzLsi!xUVb(LYaK z+;Y#hJbT8>>M9P0*v&uQ=pUatz($(6iS$>v(=vR*Rq1~=+5ethY5Dkur=39jp(8OA zL#F6N`t>=$kUTA$*UQg$T)zLm9=(}C-Gg$A^dj6f*qt9v6S4cLn)x}{`Z>zj`#3&i z01+V(A$}ooeqkwNA!(V1OH7DYNJvIVNZKW>;Qvza@N#f@5&XX^Xozt^9u(C6S@89G z;TLG@;|S37uyu0OwRLi_cY{a>ND4^tOG8A2gvI{LqzJ@7SOVhg=jSaWC>R(RDB$uB z{g58e0$x5&OL2P-gaDdUz|G@m0O&J+y zM;9k&KY*yP5RZ}W*aL?8KY0EdW9s7I=llOw`^%L{!94Oh{Bx V%+^|vsN#VOpsA_{tyQ*(`ah8$B)0$n literal 0 HcmV?d00001 diff --git a/public/favicons/browserconfig.xml b/public/favicons/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/public/favicons/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/public/favicons/favicon-16x16.png b/public/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..db753a8c1018c1a05e69a72ac020fa4fe2389934 GIT binary patch literal 1465 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 Y+CfI=yH@$W26X_OrNMsX?C9-(1C9&GB>(^b literal 0 HcmV?d00001 diff --git a/public/favicons/favicon-96x96.png b/public/favicons/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9a186c7d37b1dc82fd51828579d61786531f51 GIT binary patch literal 4592 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 gg!zTUgl%}A7`#vY!JE%IpDF;}G3%#F|$ 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 literal 0 HcmV?d00001 diff --git a/public/favicons/ms-icon-310x310.png b/public/favicons/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e6fdb1902032f6be5e16d69654f982d44dbf53 GIT binary patch literal 20573 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 EFP=@Bk^lez literal 0 HcmV?d00001 diff --git a/public/favicons/ms-icon-70x70.png b/public/favicons/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..691e57c55cecb68a6fccbc7e1dbde0dd540a6ad6 GIT binary patch literal 3329 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 L&geRn|D}HeR*J{N literal 0 HcmV?d00001 diff --git a/public/front/assets/css/libs.bundle.css b/public/front/assets/css/libs.bundle.css new file mode 100644 index 0000000..7814d77 --- /dev/null +++ b/public/front/assets/css/libs.bundle.css @@ -0,0 +1,12 @@ +[data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{-webkit-transform:translateZ(0);transform:translateZ(0);visibility:visible}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}} +/*! Flickity v2.2.2 +https://flickity.metafizzy.co +---------------------------------------------- */.flickity-enabled{position:relative}.flickity-enabled:focus{outline:0}.flickity-viewport{height:100%;overflow:hidden;position:relative}.flickity-slider{height:100%;position:absolute;width:100%}.flickity-enabled.is-draggable{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.flickity-enabled.is-draggable .flickity-viewport{cursor:move;cursor:-webkit-grab;cursor:grab}.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down{cursor:-webkit-grabbing;cursor:grabbing}.flickity-button{background:hsla(0,0%,100%,.75);border:none;color:#333;position:absolute}.flickity-button:hover{background:#fff;cursor:pointer}.flickity-button:focus{box-shadow:0 0 0 5px #19f;outline:0}.flickity-button:active{opacity:.6}.flickity-button:disabled{cursor:auto;opacity:.3;pointer-events:none}.flickity-button-icon{fill:currentColor}.flickity-prev-next-button{border-radius:50%;height:44px;top:50%;transform:translateY(-50%);width:44px}.flickity-prev-next-button.previous{left:10px}.flickity-prev-next-button.next{right:10px}.flickity-rtl .flickity-prev-next-button.previous{left:auto;right:10px}.flickity-rtl .flickity-prev-next-button.next{left:10px;right:auto}.flickity-prev-next-button .flickity-button-icon{height:60%;left:20%;position:absolute;top:20%;width:60%}.flickity-page-dots{bottom:-25px;line-height:1;list-style:none;margin:0;padding:0;position:absolute;text-align:center;width:100%}.flickity-rtl .flickity-page-dots{direction:rtl}.flickity-page-dots .dot{background:#333;border-radius:50%;cursor:pointer;display:inline-block;height:10px;margin:0 8px;opacity:.25;width:10px}.flickity-page-dots .dot.is-selected{opacity:1}.flickity-enabled.is-fade .flickity-slider>*{pointer-events:none;z-index:0}.flickity-enabled.is-fade .flickity-slider>.is-selected{pointer-events:auto;z-index:1}.hljs{background:#1e1e1e;color:#dcdcdc;display:block;overflow-x:auto;padding:.5em}.hljs-keyword,.hljs-link,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212}.hljs-addition,.hljs-deletion{display:inline-block;width:100%}.hljs-deletion{background-color:#600} + +/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{height:1px;left:-100000px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{word-wrap:break-word;box-sizing:border-box;height:100%;line-height:1.42;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap}.ql-editor>*{cursor:text}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre,.ql-editor ul{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;margin:0;padding:0}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\2022"}.ql-editor ul[data-checked=false],.ql-editor ul[data-checked=true]{pointer-events:none}.ql-editor ul[data-checked=false]>li *,.ql-editor ul[data-checked=true]>li *{pointer-events:all}.ql-editor ul[data-checked=false]>li:before,.ql-editor ul[data-checked=true]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\2610"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl:before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-increment:list-0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px} +/*# sourceMappingURL=libs.bundle.css.map*/ \ No newline at end of file diff --git a/public/front/assets/css/libs.bundle.css.map b/public/front/assets/css/libs.bundle.css.map new file mode 100644 index 0000000..8d9a075 --- /dev/null +++ b/public/front/assets/css/libs.bundle.css.map @@ -0,0 +1 @@ +{"version":3,"file":"./css/libs.bundle.css","mappings":"AAAA,qFAAqF,wBAAwB,CAAC,+EAA+E,mBAAmB,CAAC,uGAAuG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,uFAAuF,uBAAuB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,oBAAoB,CAAC,uFAAuF,wBAAwB,CAAC,iFAAiF,mBAAmB,CAAC,yGAAyG,qBAAqB,CAAC,yFAAyF,sBAAsB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,mBAAmB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,sBAAsB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,mBAAmB,CAAC,yFAAyF,yBAAyB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,sBAAsB,CAAC,yFAAyF,wBAAwB,CAAC,mFAAmF,mBAAmB,CAAC,2GAA2G,qBAAqB,CAAC,y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SACF,CAEA,wDACE,mBAAoB,CACpB,SACF,CCLA,MAIE,kBAAmB,CACnB,aAAc,CAJd,aAAc,CACd,eAAgB,CAChB,YAGF,CAQA,+DAFE,aAKF,CAHA,WAEE,yBACF,CAEA,0BAEE,aACF,CAEA,yBAEE,aACF,CAEA,+BAEE,aACF,CAEA,gCAEE,aACF,CAEA,kEAKE,aACF,CAEA,0BAEE,aAAc,CACd,iBACF,CAEA,aACE,aACF,CAEA,wCAGE,aACF,CAEA,uCAEE,aACF,CAEA,8CAGE,aACF,CAEA,cACE,UACF,CAEA,eACE,iBACF,CAEA,aACE,eACF,CAMA,iHAME,aACF,CAEA,eACE,wBAGF,CAEA,8BAJE,oBAAqB,CACrB,UAOF,CAJA,eACE,qBAGF;;AClHA;;;;;EAKE,CACF,cACE,qBAAsB,CACtB,sCAAyC,CACzC,cAAe,CACf,WAAY,CACZ,QAAW,CACX,iBACF,CACA,sCACE,iBACF,CACA,gEACE,mBACF,CACA,cAEE,UAAW,CADX,cAAe,CAEf,iBAAkB,CAClB,iBAAkB,CAClB,OACF,CACA,gBACE,QAAS,CACT,SACF,CACA,WAWE,oBAAqB,CAVrB,qBAAsB,CAEtB,WAAY,CADZ,gBAAiB,CAEjB,YAAa,CACb,eAAgB,CAChB,iBAAkB,CAClB,UAAW,CACX,eAAgB,CAChB,eAAgB,CAChB,oBAEF,CACA,aACE,WACF,CACA,kKAaE,4EAA6E,CAF7E,QAAS,CACT,SAEF,CACA,4BAEE,kBACF,CACA,kCAEE,oBACF,CACA,wBACE,eACF,CACA,mEAEE,mBACF,CACA,6EAEE,kBACF,CACA,uFAEE,UAAW,CACX,cAAe,CACf,kBACF,CACA,2CACE,eACF,CACA,4CACE,eACF,CACA,qBACE,oBAAqB,CACrB,kBAAmB,CACnB,WACF,CACA,4CACE,kBAAmB,CACnB,iBAAmB,CACnB,gBACF,CACA,sCACE,gBAAkB,CAClB,mBACF,CACA,gFAEE,kBACF,CACA,oEAEE,mBACF,CACA,iBAEE,wBAAyB,CADzB,4EAEF,CACA,wBACE,oCACF,CACA,6BACE,wBACF,CACA,oCACE,wCACF,CACA,6BACE,qEACF,CACA,6BACE,wBACF,CACA,oCACE,wCACF,CACA,6BACE,8DACF,CACA,6BACE,wBACF,CACA,oCACE,oCACF,CACA,6BACE,uDACF,CACA,6BACE,wBACF,CACA,oCACE,wCACF,CACA,6BACE,gDACF,CACA,6BACE,wBACF,CACA,oCACE,wCACF,CACA,6BACE,yCACF,CACA,6BACE,wBACF,CACA,oCACE,oCACF,CACA,6BACE,kCACF,CACA,6BACE,wBACF,CACA,oCACE,wCACF,CACA,6BACE,2BACF,CACA,6BACE,wBACF,CACA,oCACE,wCACF,CACA,6BACE,oBACF,CACA,6BACE,wBACF,CACA,oCACE,oCACF,CACA,+CACE,gBACF,CACA,iDACE,kBACF,CACA,wDACE,iBACF,CACA,0DACE,mBACF,CACA,+CACE,gBACF,CACA,iDACE,kBACF,CACA,wDACE,iBACF,CACA,0DACE,mBACF,CACA,+CACE,gBACF,CACA,iDACE,mBACF,CACA,wDACE,iBACF,CACA,0DACE,oBACF,CACA,+CACE,iBACF,CACA,iDACE,mBACF,CACA,wDACE,kBACF,CACA,0DACE,oBACF,CACA,+CACE,iBACF,CACA,iDACE,mBACF,CACA,wDACE,kBACF,CACA,0DACE,oBACF,CACA,+CACE,iBACF,CACA,iDACE,mBACF,CACA,wDACE,kBACF,CACA,0DACE,oBACF,CACA,+CACE,iBACF,CACA,iDACE,mBACF,CACA,wDACE,kBACF,CACA,0DACE,oBACF,CACA,+CACE,iBACF,CACA,iDACE,mBACF,CACA,wDACE,kBACF,CACA,0DACE,oBACF,CACA,+CACE,iBACF,CACA,iDACE,mBACF,CACA,wDACE,kBACF,CACA,0DACE,oBACF,CACA,qBACE,aAAc,CACd,cACF,CACA,qCACE,aACF,CACA,oCACE,iBACF,CACA,wBACE,qBACF,CACA,sBACE,wBACF,CACA,yBACE,qBACF,CACA,yBACE,qBACF,CACA,wBACE,wBACF,CACA,uBACE,qBACF,CACA,yBACE,qBACF,CACA,2BACE,UACF,CACA,yBACE,aACF,CACA,4BACE,UACF,CACA,4BACE,UACF,CACA,2BACE,aACF,CACA,0BACE,UACF,CACA,4BACE,UACF,CACA,0BACE,yCACF,CACA,8BACE,wCACF,CACA,0BACE,eACF,CACA,0BACE,eACF,CACA,yBACE,eACF,CACA,6BACE,aAAc,CACd,kBACF,CACA,4BACE,iBACF,CACA,6BACE,kBACF,CACA,2BACE,gBACF,CACA,2BACE,oBAAsB,CACtB,8BAA+B,CAC/B,iBAAkB,CAClB,SAAU,CACV,mBAAoB,CACpB,iBAAkB,CAClB,UACF","sources":["webpack://landkit/./node_modules/aos/dist/aos.css","webpack://landkit/./node_modules/flickity/dist/flickity.min.css","webpack://landkit/./node_modules/flickity-fade/flickity-fade.css","webpack://landkit/./node_modules/highlight.js/styles/vs2015.css","webpack://landkit/./node_modules/quill/dist/quill.core.css"],"sourcesContent":["[data-aos][data-aos][data-aos-duration=\"50\"],body[data-aos-duration=\"50\"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay=\"50\"],body[data-aos-delay=\"50\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"50\"].aos-animate,body[data-aos-delay=\"50\"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration=\"100\"],body[data-aos-duration=\"100\"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay=\"100\"],body[data-aos-delay=\"100\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"100\"].aos-animate,body[data-aos-delay=\"100\"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration=\"150\"],body[data-aos-duration=\"150\"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay=\"150\"],body[data-aos-delay=\"150\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"150\"].aos-animate,body[data-aos-delay=\"150\"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration=\"200\"],body[data-aos-duration=\"200\"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay=\"200\"],body[data-aos-delay=\"200\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"200\"].aos-animate,body[data-aos-delay=\"200\"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration=\"250\"],body[data-aos-duration=\"250\"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay=\"250\"],body[data-aos-delay=\"250\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"250\"].aos-animate,body[data-aos-delay=\"250\"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration=\"300\"],body[data-aos-duration=\"300\"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay=\"300\"],body[data-aos-delay=\"300\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"300\"].aos-animate,body[data-aos-delay=\"300\"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration=\"350\"],body[data-aos-duration=\"350\"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay=\"350\"],body[data-aos-delay=\"350\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"350\"].aos-animate,body[data-aos-delay=\"350\"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration=\"400\"],body[data-aos-duration=\"400\"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay=\"400\"],body[data-aos-delay=\"400\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"400\"].aos-animate,body[data-aos-delay=\"400\"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration=\"450\"],body[data-aos-duration=\"450\"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay=\"450\"],body[data-aos-delay=\"450\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"450\"].aos-animate,body[data-aos-delay=\"450\"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration=\"500\"],body[data-aos-duration=\"500\"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay=\"500\"],body[data-aos-delay=\"500\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"500\"].aos-animate,body[data-aos-delay=\"500\"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration=\"550\"],body[data-aos-duration=\"550\"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay=\"550\"],body[data-aos-delay=\"550\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"550\"].aos-animate,body[data-aos-delay=\"550\"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration=\"600\"],body[data-aos-duration=\"600\"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay=\"600\"],body[data-aos-delay=\"600\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"600\"].aos-animate,body[data-aos-delay=\"600\"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration=\"650\"],body[data-aos-duration=\"650\"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay=\"650\"],body[data-aos-delay=\"650\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"650\"].aos-animate,body[data-aos-delay=\"650\"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration=\"700\"],body[data-aos-duration=\"700\"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay=\"700\"],body[data-aos-delay=\"700\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"700\"].aos-animate,body[data-aos-delay=\"700\"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration=\"750\"],body[data-aos-duration=\"750\"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay=\"750\"],body[data-aos-delay=\"750\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"750\"].aos-animate,body[data-aos-delay=\"750\"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration=\"800\"],body[data-aos-duration=\"800\"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay=\"800\"],body[data-aos-delay=\"800\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"800\"].aos-animate,body[data-aos-delay=\"800\"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration=\"850\"],body[data-aos-duration=\"850\"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay=\"850\"],body[data-aos-delay=\"850\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"850\"].aos-animate,body[data-aos-delay=\"850\"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration=\"900\"],body[data-aos-duration=\"900\"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay=\"900\"],body[data-aos-delay=\"900\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"900\"].aos-animate,body[data-aos-delay=\"900\"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration=\"950\"],body[data-aos-duration=\"950\"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay=\"950\"],body[data-aos-delay=\"950\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"950\"].aos-animate,body[data-aos-delay=\"950\"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration=\"1000\"],body[data-aos-duration=\"1000\"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay=\"1000\"],body[data-aos-delay=\"1000\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1000\"].aos-animate,body[data-aos-delay=\"1000\"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration=\"1050\"],body[data-aos-duration=\"1050\"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay=\"1050\"],body[data-aos-delay=\"1050\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1050\"].aos-animate,body[data-aos-delay=\"1050\"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration=\"1100\"],body[data-aos-duration=\"1100\"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay=\"1100\"],body[data-aos-delay=\"1100\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1100\"].aos-animate,body[data-aos-delay=\"1100\"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration=\"1150\"],body[data-aos-duration=\"1150\"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay=\"1150\"],body[data-aos-delay=\"1150\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1150\"].aos-animate,body[data-aos-delay=\"1150\"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration=\"1200\"],body[data-aos-duration=\"1200\"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay=\"1200\"],body[data-aos-delay=\"1200\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1200\"].aos-animate,body[data-aos-delay=\"1200\"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration=\"1250\"],body[data-aos-duration=\"1250\"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay=\"1250\"],body[data-aos-delay=\"1250\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1250\"].aos-animate,body[data-aos-delay=\"1250\"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration=\"1300\"],body[data-aos-duration=\"1300\"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay=\"1300\"],body[data-aos-delay=\"1300\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1300\"].aos-animate,body[data-aos-delay=\"1300\"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration=\"1350\"],body[data-aos-duration=\"1350\"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay=\"1350\"],body[data-aos-delay=\"1350\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1350\"].aos-animate,body[data-aos-delay=\"1350\"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration=\"1400\"],body[data-aos-duration=\"1400\"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay=\"1400\"],body[data-aos-delay=\"1400\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1400\"].aos-animate,body[data-aos-delay=\"1400\"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration=\"1450\"],body[data-aos-duration=\"1450\"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay=\"1450\"],body[data-aos-delay=\"1450\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1450\"].aos-animate,body[data-aos-delay=\"1450\"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration=\"1500\"],body[data-aos-duration=\"1500\"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay=\"1500\"],body[data-aos-delay=\"1500\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1500\"].aos-animate,body[data-aos-delay=\"1500\"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration=\"1550\"],body[data-aos-duration=\"1550\"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay=\"1550\"],body[data-aos-delay=\"1550\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1550\"].aos-animate,body[data-aos-delay=\"1550\"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration=\"1600\"],body[data-aos-duration=\"1600\"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay=\"1600\"],body[data-aos-delay=\"1600\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1600\"].aos-animate,body[data-aos-delay=\"1600\"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration=\"1650\"],body[data-aos-duration=\"1650\"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay=\"1650\"],body[data-aos-delay=\"1650\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1650\"].aos-animate,body[data-aos-delay=\"1650\"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration=\"1700\"],body[data-aos-duration=\"1700\"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay=\"1700\"],body[data-aos-delay=\"1700\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1700\"].aos-animate,body[data-aos-delay=\"1700\"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration=\"1750\"],body[data-aos-duration=\"1750\"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay=\"1750\"],body[data-aos-delay=\"1750\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1750\"].aos-animate,body[data-aos-delay=\"1750\"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration=\"1800\"],body[data-aos-duration=\"1800\"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay=\"1800\"],body[data-aos-delay=\"1800\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1800\"].aos-animate,body[data-aos-delay=\"1800\"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration=\"1850\"],body[data-aos-duration=\"1850\"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay=\"1850\"],body[data-aos-delay=\"1850\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1850\"].aos-animate,body[data-aos-delay=\"1850\"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration=\"1900\"],body[data-aos-duration=\"1900\"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay=\"1900\"],body[data-aos-delay=\"1900\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1900\"].aos-animate,body[data-aos-delay=\"1900\"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration=\"1950\"],body[data-aos-duration=\"1950\"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay=\"1950\"],body[data-aos-delay=\"1950\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"1950\"].aos-animate,body[data-aos-delay=\"1950\"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration=\"2000\"],body[data-aos-duration=\"2000\"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay=\"2000\"],body[data-aos-delay=\"2000\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2000\"].aos-animate,body[data-aos-delay=\"2000\"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration=\"2050\"],body[data-aos-duration=\"2050\"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay=\"2050\"],body[data-aos-delay=\"2050\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2050\"].aos-animate,body[data-aos-delay=\"2050\"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration=\"2100\"],body[data-aos-duration=\"2100\"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay=\"2100\"],body[data-aos-delay=\"2100\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2100\"].aos-animate,body[data-aos-delay=\"2100\"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration=\"2150\"],body[data-aos-duration=\"2150\"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay=\"2150\"],body[data-aos-delay=\"2150\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2150\"].aos-animate,body[data-aos-delay=\"2150\"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration=\"2200\"],body[data-aos-duration=\"2200\"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay=\"2200\"],body[data-aos-delay=\"2200\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2200\"].aos-animate,body[data-aos-delay=\"2200\"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration=\"2250\"],body[data-aos-duration=\"2250\"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay=\"2250\"],body[data-aos-delay=\"2250\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2250\"].aos-animate,body[data-aos-delay=\"2250\"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration=\"2300\"],body[data-aos-duration=\"2300\"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay=\"2300\"],body[data-aos-delay=\"2300\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2300\"].aos-animate,body[data-aos-delay=\"2300\"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration=\"2350\"],body[data-aos-duration=\"2350\"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay=\"2350\"],body[data-aos-delay=\"2350\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2350\"].aos-animate,body[data-aos-delay=\"2350\"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration=\"2400\"],body[data-aos-duration=\"2400\"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay=\"2400\"],body[data-aos-delay=\"2400\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2400\"].aos-animate,body[data-aos-delay=\"2400\"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration=\"2450\"],body[data-aos-duration=\"2450\"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay=\"2450\"],body[data-aos-delay=\"2450\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2450\"].aos-animate,body[data-aos-delay=\"2450\"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration=\"2500\"],body[data-aos-duration=\"2500\"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay=\"2500\"],body[data-aos-delay=\"2500\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2500\"].aos-animate,body[data-aos-delay=\"2500\"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration=\"2550\"],body[data-aos-duration=\"2550\"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay=\"2550\"],body[data-aos-delay=\"2550\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2550\"].aos-animate,body[data-aos-delay=\"2550\"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration=\"2600\"],body[data-aos-duration=\"2600\"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay=\"2600\"],body[data-aos-delay=\"2600\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2600\"].aos-animate,body[data-aos-delay=\"2600\"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration=\"2650\"],body[data-aos-duration=\"2650\"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay=\"2650\"],body[data-aos-delay=\"2650\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2650\"].aos-animate,body[data-aos-delay=\"2650\"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration=\"2700\"],body[data-aos-duration=\"2700\"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay=\"2700\"],body[data-aos-delay=\"2700\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2700\"].aos-animate,body[data-aos-delay=\"2700\"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration=\"2750\"],body[data-aos-duration=\"2750\"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay=\"2750\"],body[data-aos-delay=\"2750\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2750\"].aos-animate,body[data-aos-delay=\"2750\"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration=\"2800\"],body[data-aos-duration=\"2800\"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay=\"2800\"],body[data-aos-delay=\"2800\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2800\"].aos-animate,body[data-aos-delay=\"2800\"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration=\"2850\"],body[data-aos-duration=\"2850\"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay=\"2850\"],body[data-aos-delay=\"2850\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2850\"].aos-animate,body[data-aos-delay=\"2850\"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration=\"2900\"],body[data-aos-duration=\"2900\"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay=\"2900\"],body[data-aos-delay=\"2900\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2900\"].aos-animate,body[data-aos-delay=\"2900\"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration=\"2950\"],body[data-aos-duration=\"2950\"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay=\"2950\"],body[data-aos-delay=\"2950\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"2950\"].aos-animate,body[data-aos-delay=\"2950\"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration=\"3000\"],body[data-aos-duration=\"3000\"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay=\"3000\"],body[data-aos-delay=\"3000\"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay=\"3000\"].aos-animate,body[data-aos-delay=\"3000\"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{visibility:visible;-webkit-transform:translateZ(0);transform:translateZ(0)}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}}","/*! Flickity v2.2.2\nhttps://flickity.metafizzy.co\n---------------------------------------------- */\n.flickity-enabled{position:relative}.flickity-enabled:focus{outline:0}.flickity-viewport{overflow:hidden;position:relative;height:100%}.flickity-slider{position:absolute;width:100%;height:100%}.flickity-enabled.is-draggable{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.flickity-enabled.is-draggable .flickity-viewport{cursor:move;cursor:-webkit-grab;cursor:grab}.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down{cursor:-webkit-grabbing;cursor:grabbing}.flickity-button{position:absolute;background:hsla(0,0%,100%,.75);border:none;color:#333}.flickity-button:hover{background:#fff;cursor:pointer}.flickity-button:focus{outline:0;box-shadow:0 0 0 5px #19f}.flickity-button:active{opacity:.6}.flickity-button:disabled{opacity:.3;cursor:auto;pointer-events:none}.flickity-button-icon{fill:currentColor}.flickity-prev-next-button{top:50%;width:44px;height:44px;border-radius:50%;transform:translateY(-50%)}.flickity-prev-next-button.previous{left:10px}.flickity-prev-next-button.next{right:10px}.flickity-rtl .flickity-prev-next-button.previous{left:auto;right:10px}.flickity-rtl .flickity-prev-next-button.next{right:auto;left:10px}.flickity-prev-next-button .flickity-button-icon{position:absolute;left:20%;top:20%;width:60%;height:60%}.flickity-page-dots{position:absolute;width:100%;bottom:-25px;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.flickity-rtl .flickity-page-dots{direction:rtl}.flickity-page-dots .dot{display:inline-block;width:10px;height:10px;margin:0 8px;background:#333;border-radius:50%;opacity:.25;cursor:pointer}.flickity-page-dots .dot.is-selected{opacity:1}","/* flickity-fade */\n\n.flickity-enabled.is-fade .flickity-slider > * {\n pointer-events: none;\n z-index: 0;\n}\n\n.flickity-enabled.is-fade .flickity-slider > .is-selected {\n pointer-events: auto;\n z-index: 1;\n}\n","/*\n * Visual Studio 2015 dark style\n * Author: Nicolas LLOBERA \n */\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #1E1E1E;\n color: #DCDCDC;\n}\n\n.hljs-keyword,\n.hljs-literal,\n.hljs-symbol,\n.hljs-name {\n color: #569CD6;\n}\n.hljs-link {\n color: #569CD6;\n text-decoration: underline;\n}\n\n.hljs-built_in,\n.hljs-type {\n color: #4EC9B0;\n}\n\n.hljs-number,\n.hljs-class {\n color: #B8D7A3;\n}\n\n.hljs-string,\n.hljs-meta-string {\n color: #D69D85;\n}\n\n.hljs-regexp,\n.hljs-template-tag {\n color: #9A5334;\n}\n\n.hljs-subst,\n.hljs-function,\n.hljs-title,\n.hljs-params,\n.hljs-formula {\n color: #DCDCDC;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #57A64A;\n font-style: italic;\n}\n\n.hljs-doctag {\n color: #608B4E;\n}\n\n.hljs-meta,\n.hljs-meta-keyword,\n.hljs-tag {\n color: #9B9B9B;\n}\n\n.hljs-variable,\n.hljs-template-variable {\n color: #BD63C5;\n}\n\n.hljs-attr,\n.hljs-attribute,\n.hljs-builtin-name {\n color: #9CDCFE;\n}\n\n.hljs-section {\n color: gold;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n/*.hljs-code {\n font-family:'Monospace';\n}*/\n\n.hljs-bullet,\n.hljs-selector-tag,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n color: #D7BA7D;\n}\n\n.hljs-addition {\n background-color: #144212;\n display: inline-block;\n width: 100%;\n}\n\n.hljs-deletion {\n background-color: #600;\n display: inline-block;\n width: 100%;\n}\n","/*!\n * Quill Editor v1.3.7\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n.ql-container {\n box-sizing: border-box;\n font-family: Helvetica, Arial, sans-serif;\n font-size: 13px;\n height: 100%;\n margin: 0px;\n position: relative;\n}\n.ql-container.ql-disabled .ql-tooltip {\n visibility: hidden;\n}\n.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {\n pointer-events: none;\n}\n.ql-clipboard {\n left: -100000px;\n height: 1px;\n overflow-y: hidden;\n position: absolute;\n top: 50%;\n}\n.ql-clipboard p {\n margin: 0;\n padding: 0;\n}\n.ql-editor {\n box-sizing: border-box;\n line-height: 1.42;\n height: 100%;\n outline: none;\n overflow-y: auto;\n padding: 12px 15px;\n tab-size: 4;\n -moz-tab-size: 4;\n text-align: left;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n.ql-editor > * {\n cursor: text;\n}\n.ql-editor p,\n.ql-editor ol,\n.ql-editor ul,\n.ql-editor pre,\n.ql-editor blockquote,\n.ql-editor h1,\n.ql-editor h2,\n.ql-editor h3,\n.ql-editor h4,\n.ql-editor h5,\n.ql-editor h6 {\n margin: 0;\n padding: 0;\n counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;\n}\n.ql-editor ol,\n.ql-editor ul {\n padding-left: 1.5em;\n}\n.ql-editor ol > li,\n.ql-editor ul > li {\n list-style-type: none;\n}\n.ql-editor ul > li::before {\n content: '\\2022';\n}\n.ql-editor ul[data-checked=true],\n.ql-editor ul[data-checked=false] {\n pointer-events: none;\n}\n.ql-editor ul[data-checked=true] > li *,\n.ql-editor ul[data-checked=false] > li * {\n pointer-events: all;\n}\n.ql-editor ul[data-checked=true] > li::before,\n.ql-editor ul[data-checked=false] > li::before {\n color: #777;\n cursor: pointer;\n pointer-events: all;\n}\n.ql-editor ul[data-checked=true] > li::before {\n content: '\\2611';\n}\n.ql-editor ul[data-checked=false] > li::before {\n content: '\\2610';\n}\n.ql-editor li::before {\n display: inline-block;\n white-space: nowrap;\n width: 1.2em;\n}\n.ql-editor li:not(.ql-direction-rtl)::before {\n margin-left: -1.5em;\n margin-right: 0.3em;\n text-align: right;\n}\n.ql-editor li.ql-direction-rtl::before {\n margin-left: 0.3em;\n margin-right: -1.5em;\n}\n.ql-editor ol li:not(.ql-direction-rtl),\n.ql-editor ul li:not(.ql-direction-rtl) {\n padding-left: 1.5em;\n}\n.ql-editor ol li.ql-direction-rtl,\n.ql-editor ul li.ql-direction-rtl {\n padding-right: 1.5em;\n}\n.ql-editor ol li {\n counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;\n counter-increment: list-0;\n}\n.ql-editor ol li:before {\n content: counter(list-0, decimal) '. ';\n}\n.ql-editor ol li.ql-indent-1 {\n counter-increment: list-1;\n}\n.ql-editor ol li.ql-indent-1:before {\n content: counter(list-1, lower-alpha) '. ';\n}\n.ql-editor ol li.ql-indent-1 {\n counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;\n}\n.ql-editor ol li.ql-indent-2 {\n counter-increment: list-2;\n}\n.ql-editor ol li.ql-indent-2:before {\n content: counter(list-2, lower-roman) '. ';\n}\n.ql-editor ol li.ql-indent-2 {\n counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;\n}\n.ql-editor ol li.ql-indent-3 {\n counter-increment: list-3;\n}\n.ql-editor ol li.ql-indent-3:before {\n content: counter(list-3, decimal) '. ';\n}\n.ql-editor ol li.ql-indent-3 {\n counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;\n}\n.ql-editor ol li.ql-indent-4 {\n counter-increment: list-4;\n}\n.ql-editor ol li.ql-indent-4:before {\n content: counter(list-4, lower-alpha) '. ';\n}\n.ql-editor ol li.ql-indent-4 {\n counter-reset: list-5 list-6 list-7 list-8 list-9;\n}\n.ql-editor ol li.ql-indent-5 {\n counter-increment: list-5;\n}\n.ql-editor ol li.ql-indent-5:before {\n content: counter(list-5, lower-roman) '. ';\n}\n.ql-editor ol li.ql-indent-5 {\n counter-reset: list-6 list-7 list-8 list-9;\n}\n.ql-editor ol li.ql-indent-6 {\n counter-increment: list-6;\n}\n.ql-editor ol li.ql-indent-6:before {\n content: counter(list-6, decimal) '. ';\n}\n.ql-editor ol li.ql-indent-6 {\n counter-reset: list-7 list-8 list-9;\n}\n.ql-editor ol li.ql-indent-7 {\n counter-increment: list-7;\n}\n.ql-editor ol li.ql-indent-7:before {\n content: counter(list-7, lower-alpha) '. ';\n}\n.ql-editor ol li.ql-indent-7 {\n counter-reset: list-8 list-9;\n}\n.ql-editor ol li.ql-indent-8 {\n counter-increment: list-8;\n}\n.ql-editor ol li.ql-indent-8:before {\n content: counter(list-8, lower-roman) '. ';\n}\n.ql-editor ol li.ql-indent-8 {\n counter-reset: list-9;\n}\n.ql-editor ol li.ql-indent-9 {\n counter-increment: list-9;\n}\n.ql-editor ol li.ql-indent-9:before {\n content: counter(list-9, decimal) '. ';\n}\n.ql-editor .ql-indent-1:not(.ql-direction-rtl) {\n padding-left: 3em;\n}\n.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {\n padding-left: 4.5em;\n}\n.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {\n padding-right: 3em;\n}\n.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {\n padding-right: 4.5em;\n}\n.ql-editor .ql-indent-2:not(.ql-direction-rtl) {\n padding-left: 6em;\n}\n.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {\n padding-left: 7.5em;\n}\n.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {\n padding-right: 6em;\n}\n.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {\n padding-right: 7.5em;\n}\n.ql-editor .ql-indent-3:not(.ql-direction-rtl) {\n padding-left: 9em;\n}\n.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {\n padding-left: 10.5em;\n}\n.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {\n padding-right: 9em;\n}\n.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {\n padding-right: 10.5em;\n}\n.ql-editor .ql-indent-4:not(.ql-direction-rtl) {\n padding-left: 12em;\n}\n.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {\n padding-left: 13.5em;\n}\n.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {\n padding-right: 12em;\n}\n.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {\n padding-right: 13.5em;\n}\n.ql-editor .ql-indent-5:not(.ql-direction-rtl) {\n padding-left: 15em;\n}\n.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {\n padding-left: 16.5em;\n}\n.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {\n padding-right: 15em;\n}\n.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {\n padding-right: 16.5em;\n}\n.ql-editor .ql-indent-6:not(.ql-direction-rtl) {\n padding-left: 18em;\n}\n.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {\n padding-left: 19.5em;\n}\n.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {\n padding-right: 18em;\n}\n.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {\n padding-right: 19.5em;\n}\n.ql-editor .ql-indent-7:not(.ql-direction-rtl) {\n padding-left: 21em;\n}\n.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {\n padding-left: 22.5em;\n}\n.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {\n padding-right: 21em;\n}\n.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {\n padding-right: 22.5em;\n}\n.ql-editor .ql-indent-8:not(.ql-direction-rtl) {\n padding-left: 24em;\n}\n.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {\n padding-left: 25.5em;\n}\n.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {\n padding-right: 24em;\n}\n.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {\n padding-right: 25.5em;\n}\n.ql-editor .ql-indent-9:not(.ql-direction-rtl) {\n padding-left: 27em;\n}\n.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {\n padding-left: 28.5em;\n}\n.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {\n padding-right: 27em;\n}\n.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {\n padding-right: 28.5em;\n}\n.ql-editor .ql-video {\n display: block;\n max-width: 100%;\n}\n.ql-editor .ql-video.ql-align-center {\n margin: 0 auto;\n}\n.ql-editor .ql-video.ql-align-right {\n margin: 0 0 0 auto;\n}\n.ql-editor .ql-bg-black {\n background-color: #000;\n}\n.ql-editor .ql-bg-red {\n background-color: #e60000;\n}\n.ql-editor .ql-bg-orange {\n background-color: #f90;\n}\n.ql-editor .ql-bg-yellow {\n background-color: #ff0;\n}\n.ql-editor .ql-bg-green {\n background-color: #008a00;\n}\n.ql-editor .ql-bg-blue {\n background-color: #06c;\n}\n.ql-editor .ql-bg-purple {\n background-color: #93f;\n}\n.ql-editor .ql-color-white {\n color: #fff;\n}\n.ql-editor .ql-color-red {\n color: #e60000;\n}\n.ql-editor .ql-color-orange {\n color: #f90;\n}\n.ql-editor .ql-color-yellow {\n color: #ff0;\n}\n.ql-editor .ql-color-green {\n color: #008a00;\n}\n.ql-editor .ql-color-blue {\n color: #06c;\n}\n.ql-editor .ql-color-purple {\n color: #93f;\n}\n.ql-editor .ql-font-serif {\n font-family: Georgia, Times New Roman, serif;\n}\n.ql-editor .ql-font-monospace {\n font-family: Monaco, Courier New, monospace;\n}\n.ql-editor .ql-size-small {\n font-size: 0.75em;\n}\n.ql-editor .ql-size-large {\n font-size: 1.5em;\n}\n.ql-editor .ql-size-huge {\n font-size: 2.5em;\n}\n.ql-editor .ql-direction-rtl {\n direction: rtl;\n text-align: inherit;\n}\n.ql-editor .ql-align-center {\n text-align: center;\n}\n.ql-editor .ql-align-justify {\n text-align: justify;\n}\n.ql-editor .ql-align-right {\n text-align: right;\n}\n.ql-editor.ql-blank::before {\n color: rgba(0,0,0,0.6);\n content: attr(data-placeholder);\n font-style: italic;\n left: 15px;\n pointer-events: none;\n position: absolute;\n right: 15px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/public/front/assets/css/theme.bundle.css b/public/front/assets/css/theme.bundle.css new file mode 100644 index 0000000..84ab475 --- /dev/null +++ b/public/front/assets/css/theme.bundle.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.1.1 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-gray:#869ab8;--bs-gray-dark:#384c74;--bs-gray-100:#f9fbfd;--bs-gray-200:#f1f4f8;--bs-gray-300:#d9e2ef;--bs-gray-400:#c6d3e6;--bs-gray-500:#abbcd5;--bs-gray-600:#869ab8;--bs-gray-700:#506690;--bs-gray-800:#384c74;--bs-gray-900:#1b2a4e;--bs-primary:#335eea;--bs-secondary:#506690;--bs-success:#42ba96;--bs-info:#7c69ef;--bs-warning:#fad776;--bs-danger:#df4759;--bs-light:#f9fbfd;--bs-dark:#1b2a4e;--bs-primary-desat:#6c8aec;--bs-black:#161c2d;--bs-white:#fff;--bs-primary-rgb:51,94,234;--bs-secondary-rgb:80,102,144;--bs-success-rgb:66,186,150;--bs-info-rgb:124,105,239;--bs-warning-rgb:250,215,118;--bs-danger-rgb:223,71,89;--bs-light-rgb:249,251,253;--bs-dark-rgb:27,42,78;--bs-primary-desat-rgb:108,138,236;--bs-white-rgb:255,255,255;--bs-black-rgb:22,28,45;--bs-body-color-rgb:22,28,45;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,rgba(255,255,255,0.15),rgba(255,255,255,0));--bs-body-font-family:HKGroteskPro,serif;--bs-body-font-size:1.0625rem;--bs-body-font-weight:400;--bs-body-line-height:1.6;--bs-body-color:#161c2d;--bs-body-bg:#fff}*,:after,:before{box-sizing:border-box}body{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(22,28,45,0);background-color:var(--bs-body-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align)}hr{background-color:currentColor;border:0;color:#f1f4f8;margin:1rem 0;opacity:1}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:2.3125rem}.h2,h2{font-size:1.9375rem}.h3,h3{font-size:1.3125rem}.h4,h4{font-size:1.1875rem}.h5,h5{font-size:1.0625rem}.h6,h6{font-size:.75rem}p{margin-bottom:1rem;margin-top:0}abbr[data-bs-original-title],abbr[title]{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:700}.small,small{font-size:88.2%}.mark,mark{background-color:#fcf8e3;padding:.2em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#335eea;text-decoration:none}a:hover{color:#294bbb;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{direction:ltr;font-family:var(--bs-font-monospace);font-size:1em;unicode-bidi:bidi-override}pre{display:block;font-size:.8125rem;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{word-wrap:break-word;color:#d63384;font-size:.8125rem}a>code{color:inherit}kbd{background-color:#1b2a4e;border-radius:.25rem;color:#fff;font-size:.8125rem;padding:.2rem .4rem}kbd kbd{font-size:1em;font-weight:600;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:#869ab8;padding-bottom:1.5rem;padding-top:1.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.3125rem;font-weight:400}.display-1{font-size:4.375rem;font-weight:400}.display-2{font-size:3.8125rem;font-weight:400}.display-3{font-size:3rem;font-weight:400}.display-4{font-size:2.6875rem;font-weight:400}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:88.2%;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#869ab8;font-size:.75rem;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#fff;border:1px solid #d9e2ef;border-radius:.375rem;box-shadow:0 .125rem .25rem rgba(22,28,45,.075);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:#869ab8;font-size:88.2%}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{margin-left:auto;margin-right:auto;padding-left:var(--bs-gutter-x,1.25rem);padding-right:var(--bs-gutter-x,1.25rem);width:100%}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1040px}}.row{--bs-gutter-x:2.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:.25rem}.g-1,.gy-1{--bs-gutter-y:.25rem}.g-2,.gx-2{--bs-gutter-x:.5rem}.g-2,.gy-2{--bs-gutter-y:.5rem}.g-3,.gx-3{--bs-gutter-x:.75rem}.g-3,.gy-3{--bs-gutter-y:.75rem}.g-4,.gx-4{--bs-gutter-x:1rem}.g-4,.gy-4{--bs-gutter-y:1rem}.g-5,.gx-5{--bs-gutter-x:1.5rem}.g-5,.gy-5{--bs-gutter-y:1.5rem}.g-6,.gx-6{--bs-gutter-x:2rem}.g-6,.gy-6{--bs-gutter-y:2rem}.g-7,.gx-7{--bs-gutter-x:2.5rem}.g-7,.gy-7{--bs-gutter-y:2.5rem}.g-8,.gx-8{--bs-gutter-x:3rem}.g-8,.gy-8{--bs-gutter-y:3rem}.g-9,.gx-9{--bs-gutter-x:4rem}.g-9,.gy-9{--bs-gutter-y:4rem}.g-10,.gx-10{--bs-gutter-x:5rem}.g-10,.gy-10{--bs-gutter-y:5rem}.g-11,.gx-11{--bs-gutter-x:6rem}.g-11,.gy-11{--bs-gutter-y:6rem}.g-12,.gx-12{--bs-gutter-x:8rem}.g-12,.gy-12{--bs-gutter-y:8rem}.g-13,.gx-13{--bs-gutter-x:10rem}.g-13,.gy-13{--bs-gutter-y:10rem}.g-14,.gx-14{--bs-gutter-x:12rem}.g-14,.gy-14{--bs-gutter-y:12rem}.g-15,.gx-15{--bs-gutter-x:16rem}.g-15,.gy-15{--bs-gutter-y:16rem}.g-16,.gx-16{--bs-gutter-x:25rem}.g-16,.gy-16{--bs-gutter-y:25rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:.75rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:.75rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:1.5rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:1.5rem}.g-sm-6,.gx-sm-6{--bs-gutter-x:2rem}.g-sm-6,.gy-sm-6{--bs-gutter-y:2rem}.g-sm-7,.gx-sm-7{--bs-gutter-x:2.5rem}.g-sm-7,.gy-sm-7{--bs-gutter-y:2.5rem}.g-sm-8,.gx-sm-8{--bs-gutter-x:3rem}.g-sm-8,.gy-sm-8{--bs-gutter-y:3rem}.g-sm-9,.gx-sm-9{--bs-gutter-x:4rem}.g-sm-9,.gy-sm-9{--bs-gutter-y:4rem}.g-sm-10,.gx-sm-10{--bs-gutter-x:5rem}.g-sm-10,.gy-sm-10{--bs-gutter-y:5rem}.g-sm-11,.gx-sm-11{--bs-gutter-x:6rem}.g-sm-11,.gy-sm-11{--bs-gutter-y:6rem}.g-sm-12,.gx-sm-12{--bs-gutter-x:8rem}.g-sm-12,.gy-sm-12{--bs-gutter-y:8rem}.g-sm-13,.gx-sm-13{--bs-gutter-x:10rem}.g-sm-13,.gy-sm-13{--bs-gutter-y:10rem}.g-sm-14,.gx-sm-14{--bs-gutter-x:12rem}.g-sm-14,.gy-sm-14{--bs-gutter-y:12rem}.g-sm-15,.gx-sm-15{--bs-gutter-x:16rem}.g-sm-15,.gy-sm-15{--bs-gutter-y:16rem}.g-sm-16,.gx-sm-16{--bs-gutter-x:25rem}.g-sm-16,.gy-sm-16{--bs-gutter-y:25rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:.75rem}.g-md-3,.gy-md-3{--bs-gutter-y:.75rem}.g-md-4,.gx-md-4{--bs-gutter-x:1rem}.g-md-4,.gy-md-4{--bs-gutter-y:1rem}.g-md-5,.gx-md-5{--bs-gutter-x:1.5rem}.g-md-5,.gy-md-5{--bs-gutter-y:1.5rem}.g-md-6,.gx-md-6{--bs-gutter-x:2rem}.g-md-6,.gy-md-6{--bs-gutter-y:2rem}.g-md-7,.gx-md-7{--bs-gutter-x:2.5rem}.g-md-7,.gy-md-7{--bs-gutter-y:2.5rem}.g-md-8,.gx-md-8{--bs-gutter-x:3rem}.g-md-8,.gy-md-8{--bs-gutter-y:3rem}.g-md-9,.gx-md-9{--bs-gutter-x:4rem}.g-md-9,.gy-md-9{--bs-gutter-y:4rem}.g-md-10,.gx-md-10{--bs-gutter-x:5rem}.g-md-10,.gy-md-10{--bs-gutter-y:5rem}.g-md-11,.gx-md-11{--bs-gutter-x:6rem}.g-md-11,.gy-md-11{--bs-gutter-y:6rem}.g-md-12,.gx-md-12{--bs-gutter-x:8rem}.g-md-12,.gy-md-12{--bs-gutter-y:8rem}.g-md-13,.gx-md-13{--bs-gutter-x:10rem}.g-md-13,.gy-md-13{--bs-gutter-y:10rem}.g-md-14,.gx-md-14{--bs-gutter-x:12rem}.g-md-14,.gy-md-14{--bs-gutter-y:12rem}.g-md-15,.gx-md-15{--bs-gutter-x:16rem}.g-md-15,.gy-md-15{--bs-gutter-y:16rem}.g-md-16,.gx-md-16{--bs-gutter-x:25rem}.g-md-16,.gy-md-16{--bs-gutter-y:25rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:.75rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:.75rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:1.5rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:1.5rem}.g-lg-6,.gx-lg-6{--bs-gutter-x:2rem}.g-lg-6,.gy-lg-6{--bs-gutter-y:2rem}.g-lg-7,.gx-lg-7{--bs-gutter-x:2.5rem}.g-lg-7,.gy-lg-7{--bs-gutter-y:2.5rem}.g-lg-8,.gx-lg-8{--bs-gutter-x:3rem}.g-lg-8,.gy-lg-8{--bs-gutter-y:3rem}.g-lg-9,.gx-lg-9{--bs-gutter-x:4rem}.g-lg-9,.gy-lg-9{--bs-gutter-y:4rem}.g-lg-10,.gx-lg-10{--bs-gutter-x:5rem}.g-lg-10,.gy-lg-10{--bs-gutter-y:5rem}.g-lg-11,.gx-lg-11{--bs-gutter-x:6rem}.g-lg-11,.gy-lg-11{--bs-gutter-y:6rem}.g-lg-12,.gx-lg-12{--bs-gutter-x:8rem}.g-lg-12,.gy-lg-12{--bs-gutter-y:8rem}.g-lg-13,.gx-lg-13{--bs-gutter-x:10rem}.g-lg-13,.gy-lg-13{--bs-gutter-y:10rem}.g-lg-14,.gx-lg-14{--bs-gutter-x:12rem}.g-lg-14,.gy-lg-14{--bs-gutter-y:12rem}.g-lg-15,.gx-lg-15{--bs-gutter-x:16rem}.g-lg-15,.gy-lg-15{--bs-gutter-y:16rem}.g-lg-16,.gx-lg-16{--bs-gutter-x:25rem}.g-lg-16,.gy-lg-16{--bs-gutter-y:25rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:.75rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:.75rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:1.5rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:1.5rem}.g-xl-6,.gx-xl-6{--bs-gutter-x:2rem}.g-xl-6,.gy-xl-6{--bs-gutter-y:2rem}.g-xl-7,.gx-xl-7{--bs-gutter-x:2.5rem}.g-xl-7,.gy-xl-7{--bs-gutter-y:2.5rem}.g-xl-8,.gx-xl-8{--bs-gutter-x:3rem}.g-xl-8,.gy-xl-8{--bs-gutter-y:3rem}.g-xl-9,.gx-xl-9{--bs-gutter-x:4rem}.g-xl-9,.gy-xl-9{--bs-gutter-y:4rem}.g-xl-10,.gx-xl-10{--bs-gutter-x:5rem}.g-xl-10,.gy-xl-10{--bs-gutter-y:5rem}.g-xl-11,.gx-xl-11{--bs-gutter-x:6rem}.g-xl-11,.gy-xl-11{--bs-gutter-y:6rem}.g-xl-12,.gx-xl-12{--bs-gutter-x:8rem}.g-xl-12,.gy-xl-12{--bs-gutter-y:8rem}.g-xl-13,.gx-xl-13{--bs-gutter-x:10rem}.g-xl-13,.gy-xl-13{--bs-gutter-y:10rem}.g-xl-14,.gx-xl-14{--bs-gutter-x:12rem}.g-xl-14,.gy-xl-14{--bs-gutter-y:12rem}.g-xl-15,.gx-xl-15{--bs-gutter-x:16rem}.g-xl-15,.gy-xl-15{--bs-gutter-y:16rem}.g-xl-16,.gx-xl-16{--bs-gutter-x:25rem}.g-xl-16,.gy-xl-16{--bs-gutter-y:25rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:.75rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:.75rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:1.5rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:1.5rem}.g-xxl-6,.gx-xxl-6{--bs-gutter-x:2rem}.g-xxl-6,.gy-xxl-6{--bs-gutter-y:2rem}.g-xxl-7,.gx-xxl-7{--bs-gutter-x:2.5rem}.g-xxl-7,.gy-xxl-7{--bs-gutter-y:2.5rem}.g-xxl-8,.gx-xxl-8{--bs-gutter-x:3rem}.g-xxl-8,.gy-xxl-8{--bs-gutter-y:3rem}.g-xxl-9,.gx-xxl-9{--bs-gutter-x:4rem}.g-xxl-9,.gy-xxl-9{--bs-gutter-y:4rem}.g-xxl-10,.gx-xxl-10{--bs-gutter-x:5rem}.g-xxl-10,.gy-xxl-10{--bs-gutter-y:5rem}.g-xxl-11,.gx-xxl-11{--bs-gutter-x:6rem}.g-xxl-11,.gy-xxl-11{--bs-gutter-y:6rem}.g-xxl-12,.gx-xxl-12{--bs-gutter-x:8rem}.g-xxl-12,.gy-xxl-12{--bs-gutter-y:8rem}.g-xxl-13,.gx-xxl-13{--bs-gutter-x:10rem}.g-xxl-13,.gy-xxl-13{--bs-gutter-y:10rem}.g-xxl-14,.gx-xxl-14{--bs-gutter-x:12rem}.g-xxl-14,.gy-xxl-14{--bs-gutter-y:12rem}.g-xxl-15,.gx-xxl-15{--bs-gutter-x:16rem}.g-xxl-15,.gy-xxl-15{--bs-gutter-y:16rem}.g-xxl-16,.gx-xxl-16{--bs-gutter-x:25rem}.g-xxl-16,.gy-xxl-16{--bs-gutter-y:25rem}}.table{--bs-table-bg:#fff;--bs-table-accent-bg:transparent;--bs-table-striped-color:#161c2d;--bs-table-striped-bg:#f9fbfd;--bs-table-active-color:#161c2d;--bs-table-active-bg:#f9fbfd;--bs-table-hover-color:#161c2d;--bs-table-hover-bg:#f9fbfd;border-color:#f1f4f8;color:#161c2d;margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg);padding:1.5rem 2rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#ebeffd;--bs-table-striped-bg:#e1e5f4;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#d6dbec;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#dbe0f0;--bs-table-hover-color:#1b2a4e;border-color:#d6dbec;color:#1b2a4e}.table-secondary{--bs-table-bg:#eef0f4;--bs-table-striped-bg:#e3e6ec;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#d9dce3;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#dee1e8;--bs-table-hover-color:#1b2a4e;border-color:#d9dce3;color:#1b2a4e}.table-success{--bs-table-bg:#ecf8f5;--bs-table-striped-bg:#e2eeed;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#d7e3e4;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#dce9e8;--bs-table-hover-color:#1b2a4e;border-color:#d7e3e4;color:#1b2a4e}.table-info{--bs-table-bg:#f2f0fd;--bs-table-striped-bg:#e7e6f4;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#dddcec;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#e2e1f0;--bs-table-hover-color:#1b2a4e;border-color:#dddcec;color:#1b2a4e}.table-warning{--bs-table-bg:#fffbf1;--bs-table-striped-bg:#f4f1e9;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#e8e6e1;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#eeebe5;--bs-table-hover-color:#1b2a4e;border-color:#e8e6e1;color:#1b2a4e}.table-danger{--bs-table-bg:#fcedee;--bs-table-striped-bg:#f1e3e6;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#e6dade;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#ebdee2;--bs-table-hover-color:#1b2a4e;border-color:#e6dade;color:#1b2a4e}.table-light{--bs-table-bg:#f9fbfd;--bs-table-striped-bg:#eef1f4;--bs-table-striped-color:#1b2a4e;--bs-table-active-bg:#e3e6ec;--bs-table-active-color:#1b2a4e;--bs-table-hover-bg:#e8ebf0;--bs-table-hover-color:#1b2a4e;border-color:#e3e6ec;color:#1b2a4e}.table-dark{--bs-table-bg:#384c74;--bs-table-striped-bg:#42557b;--bs-table-striped-color:#fff;--bs-table-active-bg:#4c5e82;--bs-table-active-color:#fff;--bs-table-hover-bg:#47597e;--bs-table-hover-color:#fff;border-color:#4c5e82;color:#fff}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{font-size:inherit;line-height:1.6;margin-bottom:0;padding-bottom:calc(.8125rem + 1px);padding-top:calc(.8125rem + 1px)}.col-form-label-lg{font-size:1.0625rem;padding-bottom:calc(1.122rem + 1px);padding-top:calc(1.122rem + 1px)}.col-form-label-sm{font-size:1.0625rem;padding-bottom:calc(.5625rem + 1px);padding-top:calc(.5625rem + 1px)}.form-text{color:#869ab8;font-size:88.2%;margin-top:.25rem}.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-clip:padding-box;background-color:#fff;border:1px solid #f1f4f8;border-radius:.375rem;box-shadow:none;color:#161c2d;display:block;font-size:1.0625rem;font-weight:400;line-height:1.6;padding:.8125rem 1.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:#fff;border-color:#335eea;box-shadow:none,none;color:#161c2d;outline:0}.form-control::-webkit-date-and-time-value{height:1.6em}.form-control::-moz-placeholder{color:#869ab8;opacity:1}.form-control:-ms-input-placeholder{color:#869ab8;opacity:1}.form-control::placeholder{color:#869ab8;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#f1f4f8;opacity:1}.form-control::file-selector-button{-webkit-margin-end:1.25rem;background-color:#f9fbfd;border:0 solid;border-color:inherit;border-inline-end-width:1px;border-radius:0;color:#161c2d;margin:-.8125rem -1.25rem;margin-inline-end:1.25rem;padding:.8125rem 1.25rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#edeef0}.form-control::-webkit-file-upload-button{-webkit-margin-end:1.25rem;background-color:#f9fbfd;border:0 solid;border-color:inherit;border-inline-end-width:1px;border-radius:0;color:#161c2d;margin:-.8125rem -1.25rem;margin-inline-end:1.25rem;padding:.8125rem 1.25rem;pointer-events:none;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#edeef0}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:1px 0;color:#161c2d;display:block;line-height:1.6;margin-bottom:0;padding:.8125rem 0;width:100%}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.375rem;font-size:1.0625rem;min-height:calc(1.6em + 1.125rem + 2px);padding:.5625rem 1rem}.form-control-sm::file-selector-button{-webkit-margin-end:1rem;margin:-.5625rem -1rem;margin-inline-end:1rem;padding:.5625rem 1rem}.form-control-sm::-webkit-file-upload-button{-webkit-margin-end:1rem;margin:-.5625rem -1rem;margin-inline-end:1rem;padding:.5625rem 1rem}.form-control-lg{border-radius:.375rem;font-size:1.0625rem;min-height:calc(1.6em + 2.244rem + 2px);padding:1.122rem 1.5rem}.form-control-lg::file-selector-button{-webkit-margin-end:1.5rem;margin:-1.122rem -1.5rem;margin-inline-end:1.5rem;padding:1.122rem 1.5rem}.form-control-lg::-webkit-file-upload-button{-webkit-margin-end:1.5rem;margin:-1.122rem -1.5rem;margin-inline-end:1.5rem;padding:1.122rem 1.5rem}textarea.form-control{min-height:calc(1.6em + 1.625rem + 2px)}textarea.form-control-sm{min-height:calc(1.6em + 1.125rem + 2px)}textarea.form-control-lg{min-height:calc(1.6em + 2.244rem + 2px)}.form-control-color{height:auto;padding:.8125rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border-radius:.375rem;height:1.6em}.form-control-color::-webkit-color-swatch{border-radius:.375rem;height:1.6em}.form-select{-moz-padding-start:calc(1.25rem - 3px);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 9 5' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m1 1 3.25 3.25L7.5 1' stroke='%23C6D3E6' stroke-width='1.083' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 1.25rem center;background-repeat:no-repeat;background-size:1em 1em;border:1px solid #f1f4f8;border-radius:.375rem;box-shadow:none;color:#161c2d;display:block;font-size:1.0625rem;font-weight:400;line-height:1.6;padding:.8125rem 1.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#335eea;box-shadow:none,none;outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:1.25rem}.form-select:disabled{background-color:#f1f4f8}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #161c2d}.form-select-sm{font-size:1.0625rem;padding-bottom:.5625rem;padding-left:1rem;padding-top:.5625rem}.form-select-lg{font-size:1.0625rem;padding-bottom:1.122rem;padding-left:1.5rem;padding-top:1.122rem}.form-check{display:block;margin-bottom:.125rem;min-height:1.7rem;padding-left:1.5rem}.form-check .form-check-input{float:left;margin-left:-1.5rem}.form-check-input{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d9e2ef;background-position:50%;background-repeat:no-repeat;background-size:contain;border:transparent;color-adjust:exact;height:1em;margin-top:.3em;vertical-align:top;width:1em}.form-check-input[type=checkbox]{border-radius:.375rem}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:none}.form-check-input:focus{border-color:transparent;box-shadow:none;outline:0}.form-check-input:checked{background-color:#335eea;border-color:#335eea}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{background-color:#335eea;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3E%3C/svg%3E");border-color:#335eea}.form-check-input:disabled{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-check-label{cursor:pointer}.form-switch{padding-left:3rem}.form-switch .form-check-input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E");background-position:0;border-radius:2.5rem;margin-left:-3rem;transition:background-position .15s ease-in-out;width:2.5rem}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:checked,.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{background-position:100%}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.65;pointer-events:none}.form-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;height:1rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,none}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,none}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#335eea;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(22,28,45,.1);height:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c2cff9}.form-range::-webkit-slider-runnable-track{background-color:#d9e2ef;border-color:transparent;border-radius:1rem;box-shadow:inset 0 1px 2px rgba(22,28,45,.075);color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range::-moz-range-thumb{-moz-appearance:none;appearance:none;background-color:#335eea;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(22,28,45,.1);height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#c2cff9}.form-range::-moz-range-track{background-color:#d9e2ef;border-color:transparent;border-radius:1rem;box-shadow:inset 0 1px 2px rgba(22,28,45,.075);color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#abbcd5}.form-range:disabled::-moz-range-thumb{background-color:#abbcd5}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{border:1px solid transparent;height:100%;left:0;padding:1rem 1.25rem;pointer-events:none;position:absolute;top:0;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem 1.25rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control:-ms-input-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control:not(:-ms-input-placeholder){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:1;transform:translateY(-.5rem)}.form-floating>.form-control:not(:-ms-input-placeholder)~label{opacity:1;transform:translateY(-.5rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:1;transform:translateY(-.5rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:1;transform:translateY(-.5rem)}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{align-items:center;background-color:#fff;border:1px solid #f1f4f8;border-radius:.375rem;color:#869ab8;display:flex;font-size:1.0625rem;font-weight:400;line-height:1.6;padding:.8125rem 1.25rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:.375rem;font-size:1.0625rem;padding:1.122rem 1.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:.375rem;font-size:1.0625rem;padding:.5625rem 1rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:2.5rem}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-bottom-right-radius:0;border-top-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.valid-feedback{color:#42ba96;display:none;font-size:88.2%;margin-top:.25rem;width:100%}.valid-tooltip{background-color:rgba(66,186,150,.9);border-radius:.375rem;color:#fff;display:none;font-size:.9375rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#42ba96}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#42ba96;box-shadow:0 0 0 0 rgba(66,186,150,.25)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#42ba96}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#42ba96;box-shadow:0 0 0 0 rgba(66,186,150,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#42ba96}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#42ba96}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 0 rgba(66,186,150,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#42ba96}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{color:#df4759;display:none;font-size:88.2%;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:rgba(223,71,89,.9);border-radius:.375rem;color:#fff;display:none;font-size:.9375rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#df4759}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#df4759;box-shadow:0 0 0 0 rgba(223,71,89,.25)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#df4759}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#df4759;box-shadow:0 0 0 0 rgba(223,71,89,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#df4759}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#df4759}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 0 rgba(223,71,89,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#df4759}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{background-color:transparent;border:1px solid transparent;border-radius:.375rem;color:#161c2d;cursor:pointer;display:inline-block;font-size:1.0625rem;font-weight:600;line-height:1.6;padding:.8125rem 1.25rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#161c2d;text-decoration:none}.btn-check:focus+.btn,.btn:focus{box-shadow:none;outline:0}.btn-check:active+.btn,.btn-check:checked+.btn,.btn.active,.btn:active{box-shadow:none}.btn-check:active+.btn:focus,.btn-check:checked+.btn:focus,.btn.active:focus,.btn:active:focus{box-shadow:none,none}.btn.disabled,.btn:disabled,fieldset:disabled .btn{box-shadow:none;opacity:.65;pointer-events:none}.btn-primary{background-color:#335eea;border-color:#335eea;box-shadow:none;color:#fff}.btn-check:focus+.btn-primary,.btn-primary:focus,.btn-primary:hover{background-color:#2b50c7;border-color:#294bbb;color:#fff}.btn-check:focus+.btn-primary,.btn-primary:focus{box-shadow:none,0 0 0 0 rgba(82,118,237,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{background-color:#294bbb;border-color:#2647b0;color:#fff}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(82,118,237,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#335eea;border-color:#335eea;color:#fff}.btn-secondary{background-color:#506690;border-color:#506690;box-shadow:none;color:#fff}.btn-check:focus+.btn-secondary,.btn-secondary:focus,.btn-secondary:hover{background-color:#44577a;border-color:#405273;color:#fff}.btn-check:focus+.btn-secondary,.btn-secondary:focus{box-shadow:none,0 0 0 0 rgba(106,125,161,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{background-color:#405273;border-color:#3c4d6c;color:#fff}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(106,125,161,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#506690;border-color:#506690;color:#fff}.btn-success{background-color:#42ba96;border-color:#42ba96;box-shadow:none;color:#fff}.btn-check:focus+.btn-success,.btn-success:focus,.btn-success:hover{background-color:#389e80;border-color:#359578;color:#fff}.btn-check:focus+.btn-success,.btn-success:focus{box-shadow:none,0 0 0 0 rgba(94,196,166,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{background-color:#359578;border-color:#328c71;color:#fff}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(94,196,166,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#42ba96;border-color:#42ba96;color:#fff}.btn-info{background-color:#7c69ef;border-color:#7c69ef;box-shadow:none;color:#fff}.btn-check:focus+.btn-info,.btn-info:focus,.btn-info:hover{background-color:#6959cb;border-color:#6354bf;color:#fff}.btn-check:focus+.btn-info,.btn-info:focus{box-shadow:none,0 0 0 0 rgba(144,128,241,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{background-color:#6354bf;border-color:#5d4fb3;color:#fff}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(144,128,241,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#7c69ef;border-color:#7c69ef;color:#fff}.btn-warning{background-color:#fad776;border-color:#fad776;box-shadow:none;color:#1b2a4e}.btn-check:focus+.btn-warning,.btn-warning:focus,.btn-warning:hover{background-color:#fbdd8b;border-color:#fbdb84;color:#1b2a4e}.btn-check:focus+.btn-warning,.btn-warning:focus{box-shadow:none,0 0 0 0 rgba(217,189,112,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{background-color:#fbdf91;border-color:#fbdb84;color:#1b2a4e}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(217,189,112,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#fad776;border-color:#fad776;color:#1b2a4e}.btn-danger{background-color:#df4759;border-color:#df4759;box-shadow:none;color:#fff}.btn-check:focus+.btn-danger,.btn-danger:focus,.btn-danger:hover{background-color:#be3c4c;border-color:#b23947;color:#fff}.btn-check:focus+.btn-danger,.btn-danger:focus{box-shadow:none,0 0 0 0 rgba(228,99,114,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{background-color:#b23947;border-color:#a73543;color:#fff}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(228,99,114,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#df4759;border-color:#df4759;color:#fff}.btn-light{background-color:#f9fbfd;border-color:#f9fbfd;box-shadow:none;color:#1b2a4e}.btn-check:focus+.btn-light,.btn-light:focus,.btn-light:hover{background-color:#fafcfd;border-color:#fafbfd;color:#1b2a4e}.btn-check:focus+.btn-light,.btn-light:focus{box-shadow:none,0 0 0 0 rgba(216,220,227,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{background-color:#fafcfd;border-color:#fafbfd;color:#1b2a4e}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(216,220,227,.5)}.btn-light.disabled,.btn-light:disabled{background-color:#f9fbfd;border-color:#f9fbfd;color:#1b2a4e}.btn-dark{background-color:#1b2a4e;border-color:#1b2a4e;box-shadow:none;color:#fff}.btn-check:focus+.btn-dark,.btn-dark:focus,.btn-dark:hover{background-color:#172442;border-color:#16223e;color:#fff}.btn-check:focus+.btn-dark,.btn-dark:focus{box-shadow:none,0 0 0 0 rgba(61,74,105,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{background-color:#16223e;border-color:#14203b;color:#fff}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(61,74,105,.5)}.btn-dark.disabled,.btn-dark:disabled{background-color:#1b2a4e;border-color:#1b2a4e;color:#fff}.btn-primary-desat{background-color:#6c8aec;border-color:#6c8aec;box-shadow:none;color:#fff}.btn-primary-desat:hover{background-color:#5c75c9;border-color:#566ebd;color:#fff}.btn-check:focus+.btn-primary-desat,.btn-primary-desat:focus{background-color:#5c75c9;border-color:#566ebd;box-shadow:none,0 0 0 0 rgba(130,156,239,.5);color:#fff}.btn-check:active+.btn-primary-desat,.btn-check:checked+.btn-primary-desat,.btn-primary-desat.active,.btn-primary-desat:active,.show>.btn-primary-desat.dropdown-toggle{background-color:#566ebd;border-color:#5168b1;color:#fff}.btn-check:active+.btn-primary-desat:focus,.btn-check:checked+.btn-primary-desat:focus,.btn-primary-desat.active:focus,.btn-primary-desat:active:focus,.show>.btn-primary-desat.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(130,156,239,.5)}.btn-primary-desat.disabled,.btn-primary-desat:disabled{background-color:#6c8aec;border-color:#6c8aec;color:#fff}.btn-black{background-color:#161c2d;border-color:#161c2d;box-shadow:none;color:#fff}.btn-black:focus,.btn-black:hover,.btn-check:focus+.btn-black{background-color:#131826;border-color:#121624;color:#fff}.btn-black:focus,.btn-check:focus+.btn-black{box-shadow:none,0 0 0 0 rgba(57,62,77,.5)}.btn-black.active,.btn-black:active,.btn-check:active+.btn-black,.btn-check:checked+.btn-black,.show>.btn-black.dropdown-toggle{background-color:#121624;border-color:#111522;color:#fff}.btn-black.active:focus,.btn-black:active:focus,.btn-check:active+.btn-black:focus,.btn-check:checked+.btn-black:focus,.show>.btn-black.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(57,62,77,.5)}.btn-black.disabled,.btn-black:disabled{background-color:#161c2d;border-color:#161c2d;color:#fff}.btn-white{border-color:#fff;box-shadow:none;color:#1b2a4e}.btn-check:focus+.btn-white,.btn-white:focus,.btn-white:hover{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-check:focus+.btn-white,.btn-white:focus{box-shadow:none,0 0 0 0 rgba(221,223,228,.5)}.btn-check:active+.btn-white,.btn-check:checked+.btn-white,.btn-white.active,.btn-white:active,.show>.btn-white.dropdown-toggle{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-check:active+.btn-white:focus,.btn-check:checked+.btn-white:focus,.btn-white.active:focus,.btn-white:active:focus,.show>.btn-white.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(221,223,228,.5)}.btn-white.disabled,.btn-white:disabled{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-outline-primary{border-color:#335eea;color:#335eea}.btn-outline-primary:hover{background-color:#335eea;border-color:#335eea;color:#fff}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 0 rgba(51,94,234,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{background-color:#335eea;border-color:#335eea;color:#fff}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:none,0 0 0 0 rgba(51,94,234,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{background-color:transparent;color:#335eea}.btn-outline-secondary{border-color:#506690;color:#506690}.btn-outline-secondary:hover{background-color:#506690;border-color:#506690;color:#fff}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 0 rgba(80,102,144,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{background-color:#506690;border-color:#506690;color:#fff}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:none,0 0 0 0 rgba(80,102,144,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{background-color:transparent;color:#506690}.btn-outline-success{border-color:#42ba96;color:#42ba96}.btn-outline-success:hover{background-color:#42ba96;border-color:#42ba96;color:#fff}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 0 rgba(66,186,150,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{background-color:#42ba96;border-color:#42ba96;color:#fff}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:none,0 0 0 0 rgba(66,186,150,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{background-color:transparent;color:#42ba96}.btn-outline-info{border-color:#7c69ef;color:#7c69ef}.btn-outline-info:hover{background-color:#7c69ef;border-color:#7c69ef;color:#fff}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 0 rgba(124,105,239,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{background-color:#7c69ef;border-color:#7c69ef;color:#fff}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:none,0 0 0 0 rgba(124,105,239,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{background-color:transparent;color:#7c69ef}.btn-outline-warning{border-color:#fad776;color:#fad776}.btn-outline-warning:hover{background-color:#fad776;border-color:#fad776;color:#1b2a4e}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 0 rgba(250,215,118,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{background-color:#fad776;border-color:#fad776;color:#1b2a4e}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:none,0 0 0 0 rgba(250,215,118,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:transparent;color:#fad776}.btn-outline-danger{border-color:#df4759;color:#df4759}.btn-outline-danger:hover{background-color:#df4759;border-color:#df4759;color:#fff}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 0 rgba(223,71,89,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{background-color:#df4759;border-color:#df4759;color:#fff}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:none,0 0 0 0 rgba(223,71,89,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{background-color:transparent;color:#df4759}.btn-outline-light{border-color:#f9fbfd;color:#f9fbfd}.btn-outline-light:hover{background-color:#f9fbfd;border-color:#f9fbfd;color:#1b2a4e}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 0 rgba(249,251,253,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{background-color:#f9fbfd;border-color:#f9fbfd;color:#1b2a4e}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:none,0 0 0 0 rgba(249,251,253,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{background-color:transparent;color:#f9fbfd}.btn-outline-dark{border-color:#1b2a4e;color:#1b2a4e}.btn-outline-dark:hover{background-color:#1b2a4e;border-color:#1b2a4e;color:#fff}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 0 rgba(27,42,78,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{background-color:#1b2a4e;border-color:#1b2a4e;color:#fff}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:none,0 0 0 0 rgba(27,42,78,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{background-color:transparent;color:#1b2a4e}.btn-outline-primary-desat{border-color:#6c8aec;color:#6c8aec}.btn-outline-primary-desat:hover{background-color:#6c8aec;border-color:#6c8aec;color:#fff}.btn-check:focus+.btn-outline-primary-desat,.btn-outline-primary-desat:focus{box-shadow:0 0 0 0 rgba(108,138,236,.5)}.btn-check:active+.btn-outline-primary-desat,.btn-check:checked+.btn-outline-primary-desat,.btn-outline-primary-desat.active,.btn-outline-primary-desat.dropdown-toggle.show,.btn-outline-primary-desat:active{background-color:#6c8aec;border-color:#6c8aec;color:#fff}.btn-check:active+.btn-outline-primary-desat:focus,.btn-check:checked+.btn-outline-primary-desat:focus,.btn-outline-primary-desat.active:focus,.btn-outline-primary-desat.dropdown-toggle.show:focus,.btn-outline-primary-desat:active:focus{box-shadow:none,0 0 0 0 rgba(108,138,236,.5)}.btn-outline-primary-desat.disabled,.btn-outline-primary-desat:disabled{background-color:transparent;color:#6c8aec}.btn-outline-black{border-color:#161c2d;color:#161c2d}.btn-outline-black:hover{background-color:#161c2d;border-color:#161c2d;color:#fff}.btn-check:focus+.btn-outline-black,.btn-outline-black:focus{box-shadow:0 0 0 0 rgba(22,28,45,.5)}.btn-check:active+.btn-outline-black,.btn-check:checked+.btn-outline-black,.btn-outline-black.active,.btn-outline-black.dropdown-toggle.show,.btn-outline-black:active{background-color:#161c2d;border-color:#161c2d;color:#fff}.btn-check:active+.btn-outline-black:focus,.btn-check:checked+.btn-outline-black:focus,.btn-outline-black.active:focus,.btn-outline-black.dropdown-toggle.show:focus,.btn-outline-black:active:focus{box-shadow:none,0 0 0 0 rgba(22,28,45,.5)}.btn-outline-black.disabled,.btn-outline-black:disabled{background-color:transparent;color:#161c2d}.btn-outline-white{border-color:#fff;color:#fff}.btn-outline-white:hover{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-check:focus+.btn-outline-white,.btn-outline-white:focus{box-shadow:0 0 0 0 rgba(255,255,255,.5)}.btn-check:active+.btn-outline-white,.btn-check:checked+.btn-outline-white,.btn-outline-white.active,.btn-outline-white.dropdown-toggle.show,.btn-outline-white:active{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-check:active+.btn-outline-white:focus,.btn-check:checked+.btn-outline-white:focus,.btn-outline-white.active:focus,.btn-outline-white.dropdown-toggle.show:focus,.btn-outline-white:active:focus{box-shadow:none,0 0 0 0 rgba(255,255,255,.5)}.btn-outline-white.disabled,.btn-outline-white:disabled{background-color:transparent;color:#fff}.btn-link{color:#335eea;font-weight:400;text-decoration:none}.btn-link:hover{color:#294bbb}.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#869ab8}.btn-group-lg>.btn,.btn-lg{border-radius:.375rem;font-size:1.0625rem;padding:1.122rem 1.5rem}.btn-group-sm>.btn,.btn-sm{border-radius:.375rem;font-size:1.0625rem;padding:.5625rem 1rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:0 solid rgba(22,28,45,.15);border-radius:.375rem;box-shadow:0 .5rem 1.5rem rgba(22,28,45,.1);color:#161c2d;display:none;font-size:.9375rem;list-style:none;margin:0;min-width:14rem;padding:1.625rem 1.75rem;position:absolute;text-align:left;z-index:1000}.dropdown-menu[data-bs-popper]{left:0;margin-top:0;top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:0;margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:0;margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:0;margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid rgba(22,28,45,.15);height:0;margin:.5rem 0;overflow:hidden}.dropdown-item{background-color:transparent;border:0;clear:both;color:#506690;display:block;font-weight:400;padding:0 1.75rem;text-align:inherit;white-space:nowrap;width:100%}.dropdown-item.active,.dropdown-item:active,.dropdown-item:focus,.dropdown-item:hover{background-color:none;color:#335eea;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:#abbcd5;pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:#335eea;display:block;font-size:.9375rem;margin-bottom:0;padding:1.625rem 1.75rem;white-space:nowrap}.dropdown-item-text{color:#506690;display:block;padding:0 1.75rem}.dropdown-menu-dark{background-color:#384c74;border-color:rgba(22,28,45,.15);color:#d9e2ef}.dropdown-menu-dark .dropdown-item{color:#d9e2ef}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{background-color:rgba(255,255,255,.15);color:#fff}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{background-color:none;color:#335eea}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#abbcd5}.dropdown-menu-dark .dropdown-divider{border-color:rgba(22,28,45,.15)}.dropdown-menu-dark .dropdown-item-text{color:#d9e2ef}.dropdown-menu-dark .dropdown-header{color:#abbcd5}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.9375rem;padding-right:.9375rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:1.125rem;padding-right:1.125rem}.btn-group.show .dropdown-toggle,.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{color:#335eea;display:block;padding:.5rem 1rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#294bbb;text-decoration:none}.nav-link.disabled{color:#869ab8;cursor:default;pointer-events:none}.nav-tabs{border-bottom:1px solid #d9e2ef}.nav-tabs .nav-link{background:none;border:1px solid transparent;border-top-left-radius:.375rem;border-top-right-radius:.375rem;margin-bottom:-1px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#f1f4f8 #f1f4f8 #d9e2ef;isolation:isolate}.nav-tabs .nav-link.disabled{background-color:transparent;border-color:transparent;color:#869ab8}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:#fff;border-color:#d9e2ef #d9e2ef #fff;color:#506690}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{background:none;border:0;border-radius:.375rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#335eea;color:#fff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:1.25rem 0;position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{font-size:1.5rem;margin-right:0;padding-bottom:.15rem;padding-top:.15rem;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-bottom:.5rem;padding-top:.5rem}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:1px solid transparent;border-radius:.375rem;font-size:1.1875rem;line-height:1;padding:.25rem .75rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 0;outline:0;text-decoration:none}.navbar-toggler-icon{background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:1.5rem;padding-right:1.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler,.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{background-color:transparent;border-left:0;border-right:0;bottom:0;flex-grow:1;position:inherit;transform:none;transition:none;visibility:visible!important;z-index:1000}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{border-bottom:0;border-top:0;height:auto}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:1.5rem;padding-right:1.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler,.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{background-color:transparent;border-left:0;border-right:0;bottom:0;flex-grow:1;position:inherit;transform:none;transition:none;visibility:visible!important;z-index:1000}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{border-bottom:0;border-top:0;height:auto}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:1.5rem;padding-right:1.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler,.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{background-color:transparent;border-left:0;border-right:0;bottom:0;flex-grow:1;position:inherit;transform:none;transition:none;visibility:visible!important;z-index:1000}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{border-bottom:0;border-top:0;height:auto}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:1.5rem;padding-right:1.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler,.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{background-color:transparent;border-left:0;border-right:0;bottom:0;flex-grow:1;position:inherit;transform:none;transition:none;visibility:visible!important;z-index:1000}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{border-bottom:0;border-top:0;height:auto}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:1.5rem;padding-right:1.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler,.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{background-color:transparent;border-left:0;border-right:0;bottom:0;flex-grow:1;position:inherit;transform:none;transition:none;visibility:visible!important;z-index:1000}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{border-bottom:0;border-top:0;height:auto}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:1.5rem;padding-right:1.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler,.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{background-color:transparent;border-left:0;border-right:0;bottom:0;flex-grow:1;position:inherit;transform:none;transition:none;visibility:visible!important;z-index:1000}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{border-bottom:0;border-top:0;height:auto}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:#335eea}.navbar-light .navbar-nav .nav-link{color:#506690}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:#335eea}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(22,28,45,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:#335eea}.navbar-light .navbar-toggler{border-color:transparent;color:#506690}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='%23506690' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:#506690}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:#335eea}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-nav .nav-link,.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#fff}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{border-color:transparent;color:#fff}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text,.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{word-wrap:break-word;background-clip:border-box;background-color:#fff;border:0 solid #f1f4f8;border-radius:.375rem;display:flex;flex-direction:column;min-width:0}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:2rem}.card-title{margin-bottom:1.5rem}.card-subtitle{margin-top:-.75rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{background-color:rgba(22,28,45,.03);border-bottom:0 solid #f1f4f8;margin-bottom:0;padding:1.5rem 2rem}.card-header:first-child{border-radius:.375rem .375rem 0 0}.card-footer{background-color:rgba(22,28,45,.03);border-top:0 solid #f1f4f8;padding:1.5rem 2rem}.card-footer:last-child{border-radius:0 0 .375rem .375rem}.card-header-tabs{border-bottom:0;margin-bottom:-1.5rem}.card-header-pills,.card-header-tabs{margin-left:-1rem;margin-right:-1rem}.card-img-overlay{border-radius:.375rem;bottom:0;left:0;padding:1rem;position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.card-img,.card-img-bottom{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.card-group>.card{margin-bottom:1.25rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{align-items:center;background-color:#fff;border:0;border-radius:0;color:#161c2d;display:flex;font-size:1.0625rem;overflow-anchor:none;padding:1.5rem 2rem;position:relative;text-align:left;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease;width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:#fff;box-shadow:inset 0 -1px 0 #f1f4f8;color:#161c2d}.accordion-button:not(.collapsed):after{transform:rotate(-180deg)}.accordion-button:after,.accordion-button:not(.collapsed):after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23869AB8'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.accordion-button:after{background-repeat:no-repeat;background-size:.85rem;content:"";flex-shrink:0;height:.85rem;margin-left:auto;transition:transform .2s ease-in-out;width:.85rem}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{border-color:#335eea;box-shadow:none;outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid #f1f4f8}.accordion-item:first-of-type{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.375rem - 1px);border-top-right-radius:calc(.375rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:calc(.375rem - 1px);border-bottom-right-radius:calc(.375rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.accordion-body{padding:1.5rem 2rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.breadcrumb{border-radius:0}.breadcrumb{background-color:transparent;display:flex;flex-wrap:wrap;font-size:.9375rem;list-style:none;margin-bottom:0;padding:.75rem 0}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{color:#506690;content:var(--bs-breadcrumb-divider,"/");float:left;padding-right:.5rem}.breadcrumb-item.active{color:#506690}.pagination{display:flex;list-style:none;padding-left:0}.page-link{background-color:#fff;border:1px solid #d9e2ef;color:#335eea;display:block;position:relative;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{border-color:#d9e2ef;text-decoration:none;z-index:2}.page-link:focus,.page-link:hover{background-color:#f1f4f8;color:#294bbb}.page-link:focus{box-shadow:none;outline:0;z-index:3}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{background-color:#335eea;border-color:#335eea;color:#fff;z-index:3}.page-item.disabled .page-link{background-color:#fff;border-color:#d9e2ef;color:#869ab8;pointer-events:none}.page-link{padding:.8125rem 1.25rem}.page-item:first-child .page-link{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.page-item:last-child .page-link{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.pagination-lg .page-link{font-size:1.1875rem;padding:1.122rem 1.5rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.pagination-sm .page-link{font-size:.9375rem;padding:.5625rem 1rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.badge{border-radius:.375rem;color:#fff;display:inline-block;font-size:.75em;font-weight:600;line-height:1;padding:.25rem .75rem;text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{border:1px solid transparent;border-radius:.375rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:600}.alert-dismissible{padding-right:3.75rem}.alert-dismissible .btn-close{padding:.9375rem 1.25rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{color:#14265e}.alert-primary .alert-link{color:#101e4b}.alert-secondary{color:#20293a}.alert-secondary .alert-link{color:#1a212e}.alert-success{color:#1a4a3c}.alert-success .alert-link{color:#153b30}.alert-info{color:#322a60}.alert-info .alert-link{color:#28224d}.alert-warning{color:#64562f}.alert-warning .alert-link{color:#504526}.alert-danger{color:#591c24}.alert-danger .alert-link{color:#47161d}.alert-light{color:#646465}.alert-light .alert-link{color:#505051}.alert-dark{color:#767f95}.alert-dark .alert-link{color:#5e6677}.alert-primary-desat{color:#2b375e}.alert-primary-desat .alert-link{color:#222c4b}.alert-black{color:#737781}.alert-black .alert-link{color:#5c5f67}.alert-white{color:#666}.alert-white .alert-link{color:#525252}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{background-color:#f1f4f8;border-radius:.375rem;box-shadow:inset 0 1px 2px rgba(22,28,45,.075);font-size:.79688rem;height:1rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{background-color:#335eea;color:#fff;flex-direction:column;justify-content:center;text-align:center;transition:width .6s ease;white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 0,transparent 50%,rgba(255,255,255,.15) 0,rgba(255,255,255,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{border-radius:.375rem;display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>li:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:#506690;text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:#f9fbfd;color:#506690;text-decoration:none;z-index:1}.list-group-item-action:active{background-color:#f1f4f8;color:#161c2d}.list-group-item{background-color:#fff;border:1px solid #f1f4f8;color:#1b2a4e;display:block;padding:1.5rem 2rem;position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:#fff;color:#869ab8;pointer-events:none}.list-group-item.active{background-color:#335eea;border-color:#335eea;color:#fff;z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.375rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.375rem}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.375rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.375rem}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.375rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.375rem}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.375rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.375rem}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.375rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.375rem}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.375rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.375rem}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{background-color:#d6dffb;color:#1f388c}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{background-color:#c1c9e2;color:#1f388c}.list-group-item-primary.list-group-item-action.active{background-color:#1f388c;border-color:#1f388c;color:#fff}.list-group-item-secondary{background-color:#dce0e9;color:#303d56}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{background-color:#c6cad2;color:#303d56}.list-group-item-secondary.list-group-item-action.active{background-color:#303d56;border-color:#303d56;color:#fff}.list-group-item-success{background-color:#d9f1ea;color:#28705a}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{background-color:#c3d9d3;color:#28705a}.list-group-item-success.list-group-item-action.active{background-color:#28705a;border-color:#28705a;color:#fff}.list-group-item-info{background-color:#e5e1fc;color:#4a3f8f}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{background-color:#cecbe3;color:#4a3f8f}.list-group-item-info.list-group-item-action.active{background-color:#4a3f8f;border-color:#4a3f8f;color:#fff}.list-group-item-warning{background-color:#fef7e4;color:#968147}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{background-color:#e5decd;color:#968147}.list-group-item-warning.list-group-item-action.active{background-color:#968147;border-color:#968147;color:#fff}.list-group-item-danger{background-color:#f9dade;color:#862b35}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{background-color:#e0c4c8;color:#862b35}.list-group-item-danger.list-group-item-action.active{background-color:#862b35;border-color:#862b35;color:#fff}.list-group-item-light{background-color:#fefeff;color:#959798}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{background-color:#e5e5e6;color:#959798}.list-group-item-light.list-group-item-action.active{background-color:#959798;border-color:#959798;color:#fff}.list-group-item-dark{background-color:#d1d4dc;color:#10192f}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{background-color:#bcbfc6;color:#10192f}.list-group-item-dark.list-group-item-action.active{background-color:#10192f;border-color:#10192f;color:#fff}.list-group-item-primary-desat{background-color:#e2e8fb;color:#41538e}.list-group-item-primary-desat.list-group-item-action:focus,.list-group-item-primary-desat.list-group-item-action:hover{background-color:#cbd1e2;color:#41538e}.list-group-item-primary-desat.list-group-item-action.active{background-color:#41538e;border-color:#41538e;color:#fff}.list-group-item-black{background-color:#d0d2d5;color:#0d111b}.list-group-item-black.list-group-item-action:focus,.list-group-item-black.list-group-item-action:hover{background-color:#bbbdc0;color:#0d111b}.list-group-item-black.list-group-item-action.active{background-color:#0d111b;border-color:#0d111b;color:#fff}.list-group-item-white{background-color:#fff;color:#999}.list-group-item-white.list-group-item-action:focus,.list-group-item-white.list-group-item-action:hover{background-color:#e6e6e6;color:#999}.list-group-item-white.list-group-item-action.active{background-color:#999;border-color:#999;color:#fff}.btn-close{background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23869AB8'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3E%3C/svg%3E") 50%/.5em auto no-repeat;border:0;border-radius:.375rem;box-sizing:content-box;color:#869ab8;height:.5em;opacity:.5;padding:.25em;width:.5em}.btn-close:hover{color:#869ab8;opacity:.75;text-decoration:none}.btn-close:focus{box-shadow:none;opacity:1;outline:0}.btn-close.disabled,.btn-close:disabled{opacity:.25;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{background-clip:padding-box;background-color:rgba(255,255,255,.85);border:1px solid rgba(0,0,0,.1);border-radius:.375rem;box-shadow:0 .5rem 1.5rem rgba(22,28,45,.1);font-size:.875rem;max-width:100%;pointer-events:auto;width:350px}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{max-width:100%;pointer-events:none;width:-webkit-max-content;width:-moz-max-content;width:max-content}.toast-container>:not(:last-child){margin-bottom:1.25rem}.toast-header{align-items:center;background-clip:padding-box;background-color:rgba(255,255,255,.85);border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.375rem - 1px);border-top-right-radius:calc(.375rem - 1px);color:#869ab8;display:flex;padding:.5rem .75rem}.toast-header .btn-close{margin-left:.75rem;margin-right:-.375rem}.toast-body{word-wrap:break-word;padding:.75rem}.modal{display:none;height:100%;left:0;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;width:100%;z-index:1055}.modal-dialog{margin:.5rem;pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - 1rem)}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid rgba(22,28,45,.2);border-radius:.5rem;box-shadow:0 .125rem .25rem rgba(22,28,45,.075);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{background-color:#161c2d;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1050}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.8}.modal-header{align-items:center;border-bottom:1px solid #f1f4f8;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px);display:flex;flex-shrink:0;justify-content:space-between;padding:2.5rem}.modal-header .btn-close{margin:-1.25rem -1.25rem -1.25rem auto;padding:1.25rem}.modal-title{line-height:1.6;margin-bottom:0}.modal-body{flex:1 1 auto;padding:2.5rem;position:relative}.modal-footer{align-items:center;border-bottom-left-radius:calc(.5rem - 1px);border-bottom-right-radius:calc(.5rem - 1px);border-top:1px solid #f1f4f8;display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:2.25rem}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{margin:1.75rem auto;max-width:500px}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-content{box-shadow:0 .5rem 1.5rem rgba(22,28,45,.1)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{word-wrap:break-word;display:block;font-family:HKGroteskPro,serif;font-size:.9375rem;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.6;margin:0;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1080}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{display:block;height:.4rem;position:absolute;width:.8rem}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:#161c2d;border-width:.4rem .4rem 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:.8rem;left:0;width:.4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:#161c2d;border-width:.4rem .4rem .4rem 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:#161c2d;border-width:0 .4rem .4rem;bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:.8rem;right:0;width:.4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:#161c2d;border-width:.4rem 0 .4rem .4rem;left:-1px}.tooltip-inner{background-color:#161c2d;border-radius:.375rem;color:#fff;max-width:200px;padding:.25rem .5rem;text-align:center}.popover{word-wrap:break-word;background-clip:padding-box;background-color:#fff;border:1px solid transparent;border-radius:.375rem;box-shadow:0 1.5rem 4rem rgba(22,28,45,.1);display:block;font-family:HKGroteskPro,serif;font-size:.9375rem;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.6;max-width:380px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.popover .popover-arrow{display:block;height:.625rem;position:absolute;width:1.25rem}.popover .popover-arrow:after,.popover .popover-arrow:before{border-color:transparent;border-style:solid;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.625rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:rgba(0,0,0,.05);border-width:.625rem .625rem 0;bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:#fff;border-width:.625rem .625rem 0;bottom:1px}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:1.25rem;left:calc(-.625rem - 1px);width:.625rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:rgba(0,0,0,.05);border-width:.625rem .625rem .625rem 0;left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:#fff;border-width:.625rem .625rem .625rem 0;left:1px}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.625rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:rgba(0,0,0,.05);border-width:0 .625rem .625rem;top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:#fff;border-width:0 .625rem .625rem;top:1px}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:1px solid transparent;content:"";display:block;left:50%;margin-left:-.625rem;position:absolute;top:0;width:1.25rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:1.25rem;right:calc(-.625rem - 1px);width:.625rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:rgba(0,0,0,.05);border-width:.625rem 0 .625rem .625rem;right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:#fff;border-width:.625rem 0 .625rem .625rem;right:1px}.popover-header{background-color:transparent;border-bottom:1px solid transparent;border-top-left-radius:calc(.375rem - 1px);border-top-right-radius:calc(.375rem - 1px);font-size:1.0625rem;margin-bottom:0;padding:1.5rem 2rem}.popover-header:empty{display:none}.popover-body{color:#869ab8;padding:1.5rem 2rem}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;list-style:none;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#161c2d}.carousel-dark .carousel-caption{color:#161c2d}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite;border:.25em solid;border-radius:50%;border-right:.25em solid transparent;display:inline-block;height:2rem;vertical-align:-.125em;width:2rem}.spinner-border-sm{border-width:.2em;height:1rem;width:1rem}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite;background-color:currentColor;border-radius:50%;display:inline-block;height:2rem;opacity:0;vertical-align:-.125em;width:2rem}.spinner-grow-sm{height:1rem;width:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{background-clip:padding-box;background-color:#fff;bottom:0;box-shadow:0 .125rem .25rem rgba(22,28,45,.075);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:transform .3s ease-in-out;visibility:hidden;z-index:1045}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{background-color:#161c2d;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.8}.offcanvas-header{align-items:center;display:flex;justify-content:space-between;padding:2.5rem}.offcanvas-header .btn-close{margin-bottom:-1.25rem;margin-right:-1.25rem;margin-top:-1.25rem;padding:1.25rem}.offcanvas-title{line-height:1.6;margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:2.5rem}.offcanvas-start{border-right:1px solid rgba(22,28,45,.2);left:0;top:0;transform:translateX(-100%);width:400px}.offcanvas-end{border-left:1px solid rgba(22,28,45,.2);right:0;top:0;transform:translateX(100%);width:400px}.offcanvas-top{border-bottom:1px solid rgba(22,28,45,.2);top:0;transform:translateY(-100%)}.offcanvas-bottom,.offcanvas-top{height:30vh;left:0;max-height:100%;right:0}.offcanvas-bottom{border-top:1px solid rgba(22,28,45,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{background-color:currentColor;cursor:wait;display:inline-block;min-height:1em;opacity:.5;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite;-webkit-mask-image:linear-gradient(130deg,#161c2d 55%,rgba(0,0,0,.8) 75%,#161c2d 95%);mask-image:linear-gradient(130deg,#161c2d 55%,rgba(0,0,0,.8) 75%,#161c2d 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%}@-webkit-keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.link-primary{color:#335eea}.link-primary:focus,.link-primary:hover{color:#294bbb}.link-secondary{color:#506690}.link-secondary:focus,.link-secondary:hover{color:#405273}.link-success{color:#42ba96}.link-success:focus,.link-success:hover{color:#359578}.link-info{color:#7c69ef}.link-info:focus,.link-info:hover{color:#6354bf}.link-warning{color:#fad776}.link-warning:focus,.link-warning:hover{color:#fbdf91}.link-danger{color:#df4759}.link-danger:focus,.link-danger:hover{color:#b23947}.link-light{color:#f9fbfd}.link-light:focus,.link-light:hover{color:#fafcfd}.link-dark{color:#1b2a4e}.link-dark:focus,.link-dark:hover{color:#16223e}.link-primary-desat{color:#6c8aec}.link-primary-desat:focus,.link-primary-desat:hover{color:#566ebd}.link-black{color:#161c2d}.link-black:focus,.link-black:hover{color:#121624}.link-white,.link-white:focus,.link-white:hover{color:#fff}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--bs-aspect-ratio)}.ratio>*{height:100%;left:0;position:absolute;top:0;width:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.85714%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentColor;display:inline-block;min-height:1em;opacity:1;width:1px}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-1{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1.5rem rgba(22,28,45,.1)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(22,28,45,.075)!important}.shadow-lg{box-shadow:0 1.5rem 4rem rgba(22,28,45,.1)!important}.shadow-light{box-shadow:0 .5rem 1.5rem rgba(22,28,45,.05)!important}.shadow-dark{box-shadow:0 .5rem 1.5rem rgba(22,28,45,.15)!important}.shadow-light-lg{box-shadow:0 1.5rem 4rem rgba(22,28,45,.05)!important}.shadow-dark-lg{box-shadow:0 1.5rem 4rem rgba(22,28,45,.15)!important}.shadow-lift{box-shadow:0 1rem 2.5rem rgba(22,28,45,.1),0 .5rem 1rem -.75rem rgba(22,28,45,.1)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.bottom-0{bottom:0!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #f1f4f8!important}.border-0{border:0!important}.border-top{border-top:1px solid #f1f4f8!important}.border-top-0{border-top:0!important}.border-right{border-right:1px solid #f1f4f8!important}.border-right-0{border-right:0!important}.border-bottom{border-bottom:1px solid #f1f4f8!important}.border-bottom-0{border-bottom:0!important}.border-left{border-left:1px solid #f1f4f8!important}.border-left-0{border-left:0!important}.border-primary{border-color:#335eea!important}.border-secondary{border-color:#506690!important}.border-success{border-color:#42ba96!important}.border-info{border-color:#7c69ef!important}.border-warning{border-color:#fad776!important}.border-danger{border-color:#df4759!important}.border-light{border-color:#f9fbfd!important}.border-dark{border-color:#1b2a4e!important}.border-primary-desat{border-color:#6c8aec!important}.border-black{border-color:#161c2d!important}.border-white{border-color:#fff!important}.border-white-10{border-color:rgba(255,255,255,.1)!important}.border-white-20{border-color:rgba(255,255,255,.2)!important}.border-gray-300{border-color:#d9e2ef!important}.border-gray-800{border-color:#384c74!important}.border-gray-800-50{border-color:rgba(56,76,116,.5)!important}.border-gray-900-50{border-color:rgba(27,42,78,.5)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-110{width:110%!important}.w-120{width:120%!important}.w-130{width:130%!important}.w-140{width:140%!important}.w-150{width:150%!important}.w-auto{width:auto!important}.mw-25{max-width:25%!important}.mw-50{max-width:50%!important}.mw-75{max-width:75%!important}.mw-100{max-width:100%!important}.mw-110{max-width:110%!important}.mw-120{max-width:120%!important}.mw-130{max-width:130%!important}.mw-140{max-width:140%!important}.mw-150{max-width:150%!important}.vw-25{width:25vw!important}.vw-50{width:50vw!important}.vw-75{width:75vw!important}.vw-100{width:100vw!important}.vw-110{width:110vw!important}.vw-120{width:120vw!important}.vw-130{width:130vw!important}.vw-140{width:140vw!important}.vw-150{width:150vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-110{height:110%!important}.h-120{height:120%!important}.h-130{height:130%!important}.h-140{height:140%!important}.h-150{height:150%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-25{height:25vh!important}.vh-50{height:50vh!important}.vh-75{height:75vh!important}.vh-100{height:100vh!important}.vh-110{height:110vh!important}.vh-120{height:120vh!important}.vh-130{height:130vh!important}.vh-140{height:140vh!important}.vh-150{height:150vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:.75rem!important}.gap-4{gap:1rem!important}.gap-5{gap:1.5rem!important}.gap-6{gap:2rem!important}.gap-7{gap:2.5rem!important}.gap-8{gap:3rem!important}.gap-9{gap:4rem!important}.gap-10{gap:5rem!important}.gap-11{gap:6rem!important}.gap-12{gap:8rem!important}.gap-13{gap:10rem!important}.gap-14{gap:12rem!important}.gap-15{gap:16rem!important}.gap-16{gap:25rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:.75rem!important}.m-4{margin:1rem!important}.m-5{margin:1.5rem!important}.m-6{margin:2rem!important}.m-7{margin:2.5rem!important}.m-8{margin:3rem!important}.m-9{margin:4rem!important}.m-10{margin:5rem!important}.m-11{margin:6rem!important}.m-12{margin:8rem!important}.m-13{margin:10rem!important}.m-14{margin:12rem!important}.m-15{margin:16rem!important}.m-16{margin:25rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-6{margin-left:2rem!important;margin-right:2rem!important}.mx-7{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-8{margin-left:3rem!important;margin-right:3rem!important}.mx-9{margin-left:4rem!important;margin-right:4rem!important}.mx-10{margin-left:5rem!important;margin-right:5rem!important}.mx-11{margin-left:6rem!important;margin-right:6rem!important}.mx-12{margin-left:8rem!important;margin-right:8rem!important}.mx-13{margin-left:10rem!important;margin-right:10rem!important}.mx-14{margin-left:12rem!important;margin-right:12rem!important}.mx-15{margin-left:16rem!important;margin-right:16rem!important}.mx-16{margin-left:25rem!important;margin-right:25rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-5{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-6{margin-bottom:2rem!important;margin-top:2rem!important}.my-7{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-8{margin-bottom:3rem!important;margin-top:3rem!important}.my-9{margin-bottom:4rem!important;margin-top:4rem!important}.my-10{margin-bottom:5rem!important;margin-top:5rem!important}.my-11{margin-bottom:6rem!important;margin-top:6rem!important}.my-12{margin-bottom:8rem!important;margin-top:8rem!important}.my-13{margin-bottom:10rem!important;margin-top:10rem!important}.my-14{margin-bottom:12rem!important;margin-top:12rem!important}.my-15{margin-bottom:16rem!important;margin-top:16rem!important}.my-16{margin-bottom:25rem!important;margin-top:25rem!important}.my-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:.75rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:1.5rem!important}.mt-6{margin-top:2rem!important}.mt-7{margin-top:2.5rem!important}.mt-8{margin-top:3rem!important}.mt-9{margin-top:4rem!important}.mt-10{margin-top:5rem!important}.mt-11{margin-top:6rem!important}.mt-12{margin-top:8rem!important}.mt-13{margin-top:10rem!important}.mt-14{margin-top:12rem!important}.mt-15{margin-top:16rem!important}.mt-16{margin-top:25rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:.75rem!important}.me-4{margin-right:1rem!important}.me-5{margin-right:1.5rem!important}.me-6{margin-right:2rem!important}.me-7{margin-right:2.5rem!important}.me-8{margin-right:3rem!important}.me-9{margin-right:4rem!important}.me-10{margin-right:5rem!important}.me-11{margin-right:6rem!important}.me-12{margin-right:8rem!important}.me-13{margin-right:10rem!important}.me-14{margin-right:12rem!important}.me-15{margin-right:16rem!important}.me-16{margin-right:25rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:.75rem!important}.mb-4{margin-bottom:1rem!important}.mb-5{margin-bottom:1.5rem!important}.mb-6{margin-bottom:2rem!important}.mb-7{margin-bottom:2.5rem!important}.mb-8{margin-bottom:3rem!important}.mb-9{margin-bottom:4rem!important}.mb-10{margin-bottom:5rem!important}.mb-11{margin-bottom:6rem!important}.mb-12{margin-bottom:8rem!important}.mb-13{margin-bottom:10rem!important}.mb-14{margin-bottom:12rem!important}.mb-15{margin-bottom:16rem!important}.mb-16{margin-bottom:25rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:.75rem!important}.ms-4{margin-left:1rem!important}.ms-5{margin-left:1.5rem!important}.ms-6{margin-left:2rem!important}.ms-7{margin-left:2.5rem!important}.ms-8{margin-left:3rem!important}.ms-9{margin-left:4rem!important}.ms-10{margin-left:5rem!important}.ms-11{margin-left:6rem!important}.ms-12{margin-left:8rem!important}.ms-13{margin-left:10rem!important}.ms-14{margin-left:12rem!important}.ms-15{margin-left:16rem!important}.ms-16{margin-left:25rem!important}.ms-auto{margin-left:auto!important}.m-n1{margin:-.25rem!important}.m-n2{margin:-.5rem!important}.m-n3{margin:-.75rem!important}.m-n4{margin:-1rem!important}.m-n5{margin:-1.5rem!important}.m-n6{margin:-2rem!important}.m-n7{margin:-2.5rem!important}.m-n8{margin:-3rem!important}.m-n9{margin:-4rem!important}.m-n10{margin:-5rem!important}.m-n11{margin:-6rem!important}.m-n12{margin:-8rem!important}.m-n13{margin:-10rem!important}.m-n14{margin:-12rem!important}.m-n15{margin:-16rem!important}.m-n16{margin:-25rem!important}.mx-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-n3{margin-left:-.75rem!important;margin-right:-.75rem!important}.mx-n4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-n5{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-n6{margin-left:-2rem!important;margin-right:-2rem!important}.mx-n7{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.mx-n8{margin-left:-3rem!important;margin-right:-3rem!important}.mx-n9{margin-left:-4rem!important;margin-right:-4rem!important}.mx-n10{margin-left:-5rem!important;margin-right:-5rem!important}.mx-n11{margin-left:-6rem!important;margin-right:-6rem!important}.mx-n12{margin-left:-8rem!important;margin-right:-8rem!important}.mx-n13{margin-left:-10rem!important;margin-right:-10rem!important}.mx-n14{margin-left:-12rem!important;margin-right:-12rem!important}.mx-n15{margin-left:-16rem!important;margin-right:-16rem!important}.mx-n16{margin-left:-25rem!important;margin-right:-25rem!important}.my-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-n3{margin-bottom:-.75rem!important;margin-top:-.75rem!important}.my-n4{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-n5{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-n6{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-n7{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.my-n8{margin-bottom:-3rem!important;margin-top:-3rem!important}.my-n9{margin-bottom:-4rem!important;margin-top:-4rem!important}.my-n10{margin-bottom:-5rem!important;margin-top:-5rem!important}.my-n11{margin-bottom:-6rem!important;margin-top:-6rem!important}.my-n12{margin-bottom:-8rem!important;margin-top:-8rem!important}.my-n13{margin-bottom:-10rem!important;margin-top:-10rem!important}.my-n14{margin-bottom:-12rem!important;margin-top:-12rem!important}.my-n15{margin-bottom:-16rem!important;margin-top:-16rem!important}.my-n16{margin-bottom:-25rem!important;margin-top:-25rem!important}.mt-n1{margin-top:-.25rem!important}.mt-n2{margin-top:-.5rem!important}.mt-n3{margin-top:-.75rem!important}.mt-n4{margin-top:-1rem!important}.mt-n5{margin-top:-1.5rem!important}.mt-n6{margin-top:-2rem!important}.mt-n7{margin-top:-2.5rem!important}.mt-n8{margin-top:-3rem!important}.mt-n9{margin-top:-4rem!important}.mt-n10{margin-top:-5rem!important}.mt-n11{margin-top:-6rem!important}.mt-n12{margin-top:-8rem!important}.mt-n13{margin-top:-10rem!important}.mt-n14{margin-top:-12rem!important}.mt-n15{margin-top:-16rem!important}.mt-n16{margin-top:-25rem!important}.me-n1{margin-right:-.25rem!important}.me-n2{margin-right:-.5rem!important}.me-n3{margin-right:-.75rem!important}.me-n4{margin-right:-1rem!important}.me-n5{margin-right:-1.5rem!important}.me-n6{margin-right:-2rem!important}.me-n7{margin-right:-2.5rem!important}.me-n8{margin-right:-3rem!important}.me-n9{margin-right:-4rem!important}.me-n10{margin-right:-5rem!important}.me-n11{margin-right:-6rem!important}.me-n12{margin-right:-8rem!important}.me-n13{margin-right:-10rem!important}.me-n14{margin-right:-12rem!important}.me-n15{margin-right:-16rem!important}.me-n16{margin-right:-25rem!important}.mb-n1{margin-bottom:-.25rem!important}.mb-n2{margin-bottom:-.5rem!important}.mb-n3{margin-bottom:-.75rem!important}.mb-n4{margin-bottom:-1rem!important}.mb-n5{margin-bottom:-1.5rem!important}.mb-n6{margin-bottom:-2rem!important}.mb-n7{margin-bottom:-2.5rem!important}.mb-n8{margin-bottom:-3rem!important}.mb-n9{margin-bottom:-4rem!important}.mb-n10{margin-bottom:-5rem!important}.mb-n11{margin-bottom:-6rem!important}.mb-n12{margin-bottom:-8rem!important}.mb-n13{margin-bottom:-10rem!important}.mb-n14{margin-bottom:-12rem!important}.mb-n15{margin-bottom:-16rem!important}.mb-n16{margin-bottom:-25rem!important}.ms-n1{margin-left:-.25rem!important}.ms-n2{margin-left:-.5rem!important}.ms-n3{margin-left:-.75rem!important}.ms-n4{margin-left:-1rem!important}.ms-n5{margin-left:-1.5rem!important}.ms-n6{margin-left:-2rem!important}.ms-n7{margin-left:-2.5rem!important}.ms-n8{margin-left:-3rem!important}.ms-n9{margin-left:-4rem!important}.ms-n10{margin-left:-5rem!important}.ms-n11{margin-left:-6rem!important}.ms-n12{margin-left:-8rem!important}.ms-n13{margin-left:-10rem!important}.ms-n14{margin-left:-12rem!important}.ms-n15{margin-left:-16rem!important}.ms-n16{margin-left:-25rem!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-5{padding:1.5rem!important}.p-6{padding:2rem!important}.p-7{padding:2.5rem!important}.p-8{padding:3rem!important}.p-9{padding:4rem!important}.p-10{padding:5rem!important}.p-11{padding:6rem!important}.p-12{padding:8rem!important}.p-13{padding:10rem!important}.p-14{padding:12rem!important}.p-15{padding:16rem!important}.p-16{padding:25rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-6{padding-left:2rem!important;padding-right:2rem!important}.px-7{padding-left:2.5rem!important;padding-right:2.5rem!important}.px-8{padding-left:3rem!important;padding-right:3rem!important}.px-9{padding-left:4rem!important;padding-right:4rem!important}.px-10{padding-left:5rem!important;padding-right:5rem!important}.px-11{padding-left:6rem!important;padding-right:6rem!important}.px-12{padding-left:8rem!important;padding-right:8rem!important}.px-13{padding-left:10rem!important;padding-right:10rem!important}.px-14{padding-left:12rem!important;padding-right:12rem!important}.px-15{padding-left:16rem!important;padding-right:16rem!important}.px-16{padding-left:25rem!important;padding-right:25rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-5{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-6{padding-bottom:2rem!important;padding-top:2rem!important}.py-7{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-8{padding-bottom:3rem!important;padding-top:3rem!important}.py-9{padding-bottom:4rem!important;padding-top:4rem!important}.py-10{padding-bottom:5rem!important;padding-top:5rem!important}.py-11{padding-bottom:6rem!important;padding-top:6rem!important}.py-12{padding-bottom:8rem!important;padding-top:8rem!important}.py-13{padding-bottom:10rem!important;padding-top:10rem!important}.py-14{padding-bottom:12rem!important;padding-top:12rem!important}.py-15{padding-bottom:16rem!important;padding-top:16rem!important}.py-16{padding-bottom:25rem!important;padding-top:25rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:.75rem!important}.pt-4{padding-top:1rem!important}.pt-5{padding-top:1.5rem!important}.pt-6{padding-top:2rem!important}.pt-7{padding-top:2.5rem!important}.pt-8{padding-top:3rem!important}.pt-9{padding-top:4rem!important}.pt-10{padding-top:5rem!important}.pt-11{padding-top:6rem!important}.pt-12{padding-top:8rem!important}.pt-13{padding-top:10rem!important}.pt-14{padding-top:12rem!important}.pt-15{padding-top:16rem!important}.pt-16{padding-top:25rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:.75rem!important}.pe-4{padding-right:1rem!important}.pe-5{padding-right:1.5rem!important}.pe-6{padding-right:2rem!important}.pe-7{padding-right:2.5rem!important}.pe-8{padding-right:3rem!important}.pe-9{padding-right:4rem!important}.pe-10{padding-right:5rem!important}.pe-11{padding-right:6rem!important}.pe-12{padding-right:8rem!important}.pe-13{padding-right:10rem!important}.pe-14{padding-right:12rem!important}.pe-15{padding-right:16rem!important}.pe-16{padding-right:25rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:.75rem!important}.pb-4{padding-bottom:1rem!important}.pb-5{padding-bottom:1.5rem!important}.pb-6{padding-bottom:2rem!important}.pb-7{padding-bottom:2.5rem!important}.pb-8{padding-bottom:3rem!important}.pb-9{padding-bottom:4rem!important}.pb-10{padding-bottom:5rem!important}.pb-11{padding-bottom:6rem!important}.pb-12{padding-bottom:8rem!important}.pb-13{padding-bottom:10rem!important}.pb-14{padding-bottom:12rem!important}.pb-15{padding-bottom:16rem!important}.pb-16{padding-bottom:25rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:.75rem!important}.ps-4{padding-left:1rem!important}.ps-5{padding-left:1.5rem!important}.ps-6{padding-left:2rem!important}.ps-7{padding-left:2.5rem!important}.ps-8{padding-left:3rem!important}.ps-9{padding-left:4rem!important}.ps-10{padding-left:5rem!important}.ps-11{padding-left:6rem!important}.ps-12{padding-left:8rem!important}.ps-13{padding-left:10rem!important}.ps-14{padding-left:12rem!important}.ps-15{padding-left:16rem!important}.ps-16{padding-left:25rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:2.3125rem!important}.fs-2{font-size:1.9375rem!important}.fs-3{font-size:1.3125rem!important}.fs-4{font-size:1.1875rem!important}.fs-5{font-size:1.0625rem!important}.fs-6{font-size:.75rem!important}.fs-sm{font-size:.9375rem!important}.fs-lg{font-size:1.1875rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:600!important}.fw-bolder{font-weight:700!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.3!important}.lh-base{line-height:1.6!important}.lh-lg{line-height:1.3!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{color:#335eea!important}.text-secondary{color:#506690!important}.text-success{color:#42ba96!important}.text-info{color:#7c69ef!important}.text-warning{color:#fad776!important}.text-danger{color:#df4759!important}.text-light{color:#f9fbfd!important}.text-dark{color:#1b2a4e!important}.text-primary-desat{color:#6c8aec!important}.text-black{color:#161c2d!important}.text-white{color:#fff!important}.text-gray-100{color:#f9fbfd!important}.text-gray-200{color:#f1f4f8!important}.text-gray-300{color:#d9e2ef!important}.text-gray-400{color:#c6d3e6!important}.text-gray-500{color:#abbcd5!important}.text-gray-600{color:#869ab8!important}.text-gray-700{color:#506690!important}.text-gray-800{color:#384c74!important}.text-gray-900{color:#1b2a4e!important}.text-body{color:#161c2d!important}.text-muted{color:#869ab8!important}.text-muted-80{color:rgba(134,154,184,.8)!important}.text-black-50{color:rgba(22,28,45,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-white-70{color:rgba(255,255,255,.7)!important}.text-white-75{color:rgba(255,255,255,.75)!important}.text-white-80{color:rgba(255,255,255,.8)!important}.text-reset{color:inherit!important}.text-opacity-25{--bs-text-opacity:.25}.text-opacity-50{--bs-text-opacity:.5}.text-opacity-75{--bs-text-opacity:.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{background-color:#335eea!important}.bg-secondary{background-color:#506690!important}.bg-success{background-color:#42ba96!important}.bg-info{background-color:#7c69ef!important}.bg-warning{background-color:#fad776!important}.bg-danger{background-color:#df4759!important}.bg-light{background-color:#f9fbfd!important}.bg-dark{background-color:#1b2a4e!important}.bg-primary-desat{background-color:#6c8aec!important}.bg-black{background-color:#161c2d!important}.bg-white{background-color:#fff!important}.bg-white-20{background-color:rgba(255,255,255,.2)!important}.bg-gray-200{background-color:#f1f4f8!important}.bg-gray-300{background-color:#d9e2ef!important}.bg-gray-800{background-color:#384c74!important}.bg-gray-900{background-color:#1b2a4e!important}.bg-gray-900-50{background-color:rgba(27,42,78,.5)!important}.bg-opacity-10{--bs-bg-opacity:.1}.bg-opacity-25{--bs-bg-opacity:.25}.bg-opacity-50{--bs-bg-opacity:.5}.bg-opacity-75{--bs-bg-opacity:.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.375rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.25rem!important}.rounded-2{border-radius:.375rem!important}.rounded-3{border-radius:.5rem!important}.rounded-4{border-radius:1rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.375rem!important}.rounded-end,.rounded-top{border-top-right-radius:.375rem!important}.rounded-bottom,.rounded-end{border-bottom-right-radius:.375rem!important}.rounded-bottom,.rounded-start{border-bottom-left-radius:.375rem!important}.rounded-start{border-top-left-radius:.375rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.right-0{right:0!important}.left-0{left:0!important}.letter-spacing-lg{letter-spacing:.08em!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.position-sm-static{position:static!important}.position-sm-relative{position:relative!important}.position-sm-absolute{position:absolute!important}.position-sm-fixed{position:fixed!important}.position-sm-sticky{position:sticky!important}.border-sm{border:1px solid #f1f4f8!important}.border-sm-0{border:0!important}.border-top-sm{border-top:1px solid #f1f4f8!important}.border-top-sm-0{border-top:0!important}.border-right-sm{border-right:1px solid #f1f4f8!important}.border-right-sm-0{border-right:0!important}.border-bottom-sm{border-bottom:1px solid #f1f4f8!important}.border-bottom-sm-0{border-bottom:0!important}.border-left-sm{border-left:1px solid #f1f4f8!important}.border-left-sm-0{border-left:0!important}.w-sm-25{width:25%!important}.w-sm-50{width:50%!important}.w-sm-75{width:75%!important}.w-sm-100{width:100%!important}.w-sm-110{width:110%!important}.w-sm-120{width:120%!important}.w-sm-130{width:130%!important}.w-sm-140{width:140%!important}.w-sm-150{width:150%!important}.w-sm-auto{width:auto!important}.mw-sm-25{max-width:25%!important}.mw-sm-50{max-width:50%!important}.mw-sm-75{max-width:75%!important}.mw-sm-100{max-width:100%!important}.mw-sm-110{max-width:110%!important}.mw-sm-120{max-width:120%!important}.mw-sm-130{max-width:130%!important}.mw-sm-140{max-width:140%!important}.mw-sm-150{max-width:150%!important}.vw-sm-25{width:25vw!important}.vw-sm-50{width:50vw!important}.vw-sm-75{width:75vw!important}.vw-sm-100{width:100vw!important}.vw-sm-110{width:110vw!important}.vw-sm-120{width:120vw!important}.vw-sm-130{width:130vw!important}.vw-sm-140{width:140vw!important}.vw-sm-150{width:150vw!important}.h-sm-25{height:25%!important}.h-sm-50{height:50%!important}.h-sm-75{height:75%!important}.h-sm-100{height:100%!important}.h-sm-110{height:110%!important}.h-sm-120{height:120%!important}.h-sm-130{height:130%!important}.h-sm-140{height:140%!important}.h-sm-150{height:150%!important}.h-sm-auto{height:auto!important}.vh-sm-25{height:25vh!important}.vh-sm-50{height:50vh!important}.vh-sm-75{height:75vh!important}.vh-sm-100{height:100vh!important}.vh-sm-110{height:110vh!important}.vh-sm-120{height:120vh!important}.vh-sm-130{height:130vh!important}.vh-sm-140{height:140vh!important}.vh-sm-150{height:150vh!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:.75rem!important}.gap-sm-4{gap:1rem!important}.gap-sm-5{gap:1.5rem!important}.gap-sm-6{gap:2rem!important}.gap-sm-7{gap:2.5rem!important}.gap-sm-8{gap:3rem!important}.gap-sm-9{gap:4rem!important}.gap-sm-10{gap:5rem!important}.gap-sm-11{gap:6rem!important}.gap-sm-12{gap:8rem!important}.gap-sm-13{gap:10rem!important}.gap-sm-14{gap:12rem!important}.gap-sm-15{gap:16rem!important}.gap-sm-16{gap:25rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:.75rem!important}.m-sm-4{margin:1rem!important}.m-sm-5{margin:1.5rem!important}.m-sm-6{margin:2rem!important}.m-sm-7{margin:2.5rem!important}.m-sm-8{margin:3rem!important}.m-sm-9{margin:4rem!important}.m-sm-10{margin:5rem!important}.m-sm-11{margin:6rem!important}.m-sm-12{margin:8rem!important}.m-sm-13{margin:10rem!important}.m-sm-14{margin:12rem!important}.m-sm-15{margin:16rem!important}.m-sm-16{margin:25rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-sm-4{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-6{margin-left:2rem!important;margin-right:2rem!important}.mx-sm-7{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-sm-8{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-9{margin-left:4rem!important;margin-right:4rem!important}.mx-sm-10{margin-left:5rem!important;margin-right:5rem!important}.mx-sm-11{margin-left:6rem!important;margin-right:6rem!important}.mx-sm-12{margin-left:8rem!important;margin-right:8rem!important}.mx-sm-13{margin-left:10rem!important;margin-right:10rem!important}.mx-sm-14{margin-left:12rem!important;margin-right:12rem!important}.mx-sm-15{margin-left:16rem!important;margin-right:16rem!important}.mx-sm-16{margin-left:25rem!important;margin-right:25rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-sm-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-5{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-6{margin-bottom:2rem!important;margin-top:2rem!important}.my-sm-7{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-sm-8{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-9{margin-bottom:4rem!important;margin-top:4rem!important}.my-sm-10{margin-bottom:5rem!important;margin-top:5rem!important}.my-sm-11{margin-bottom:6rem!important;margin-top:6rem!important}.my-sm-12{margin-bottom:8rem!important;margin-top:8rem!important}.my-sm-13{margin-bottom:10rem!important;margin-top:10rem!important}.my-sm-14{margin-bottom:12rem!important;margin-top:12rem!important}.my-sm-15{margin-bottom:16rem!important;margin-top:16rem!important}.my-sm-16{margin-bottom:25rem!important;margin-top:25rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:.75rem!important}.mt-sm-4{margin-top:1rem!important}.mt-sm-5{margin-top:1.5rem!important}.mt-sm-6{margin-top:2rem!important}.mt-sm-7{margin-top:2.5rem!important}.mt-sm-8{margin-top:3rem!important}.mt-sm-9{margin-top:4rem!important}.mt-sm-10{margin-top:5rem!important}.mt-sm-11{margin-top:6rem!important}.mt-sm-12{margin-top:8rem!important}.mt-sm-13{margin-top:10rem!important}.mt-sm-14{margin-top:12rem!important}.mt-sm-15{margin-top:16rem!important}.mt-sm-16{margin-top:25rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:.75rem!important}.me-sm-4{margin-right:1rem!important}.me-sm-5{margin-right:1.5rem!important}.me-sm-6{margin-right:2rem!important}.me-sm-7{margin-right:2.5rem!important}.me-sm-8{margin-right:3rem!important}.me-sm-9{margin-right:4rem!important}.me-sm-10{margin-right:5rem!important}.me-sm-11{margin-right:6rem!important}.me-sm-12{margin-right:8rem!important}.me-sm-13{margin-right:10rem!important}.me-sm-14{margin-right:12rem!important}.me-sm-15{margin-right:16rem!important}.me-sm-16{margin-right:25rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:.75rem!important}.mb-sm-4{margin-bottom:1rem!important}.mb-sm-5{margin-bottom:1.5rem!important}.mb-sm-6{margin-bottom:2rem!important}.mb-sm-7{margin-bottom:2.5rem!important}.mb-sm-8{margin-bottom:3rem!important}.mb-sm-9{margin-bottom:4rem!important}.mb-sm-10{margin-bottom:5rem!important}.mb-sm-11{margin-bottom:6rem!important}.mb-sm-12{margin-bottom:8rem!important}.mb-sm-13{margin-bottom:10rem!important}.mb-sm-14{margin-bottom:12rem!important}.mb-sm-15{margin-bottom:16rem!important}.mb-sm-16{margin-bottom:25rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:.75rem!important}.ms-sm-4{margin-left:1rem!important}.ms-sm-5{margin-left:1.5rem!important}.ms-sm-6{margin-left:2rem!important}.ms-sm-7{margin-left:2.5rem!important}.ms-sm-8{margin-left:3rem!important}.ms-sm-9{margin-left:4rem!important}.ms-sm-10{margin-left:5rem!important}.ms-sm-11{margin-left:6rem!important}.ms-sm-12{margin-left:8rem!important}.ms-sm-13{margin-left:10rem!important}.ms-sm-14{margin-left:12rem!important}.ms-sm-15{margin-left:16rem!important}.ms-sm-16{margin-left:25rem!important}.ms-sm-auto{margin-left:auto!important}.m-sm-n1{margin:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.m-sm-n3{margin:-.75rem!important}.m-sm-n4{margin:-1rem!important}.m-sm-n5{margin:-1.5rem!important}.m-sm-n6{margin:-2rem!important}.m-sm-n7{margin:-2.5rem!important}.m-sm-n8{margin:-3rem!important}.m-sm-n9{margin:-4rem!important}.m-sm-n10{margin:-5rem!important}.m-sm-n11{margin:-6rem!important}.m-sm-n12{margin:-8rem!important}.m-sm-n13{margin:-10rem!important}.m-sm-n14{margin:-12rem!important}.m-sm-n15{margin:-16rem!important}.m-sm-n16{margin:-25rem!important}.mx-sm-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-sm-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-sm-n3{margin-left:-.75rem!important;margin-right:-.75rem!important}.mx-sm-n4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-sm-n5{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-sm-n6{margin-left:-2rem!important;margin-right:-2rem!important}.mx-sm-n7{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.mx-sm-n8{margin-left:-3rem!important;margin-right:-3rem!important}.mx-sm-n9{margin-left:-4rem!important;margin-right:-4rem!important}.mx-sm-n10{margin-left:-5rem!important;margin-right:-5rem!important}.mx-sm-n11{margin-left:-6rem!important;margin-right:-6rem!important}.mx-sm-n12{margin-left:-8rem!important;margin-right:-8rem!important}.mx-sm-n13{margin-left:-10rem!important;margin-right:-10rem!important}.mx-sm-n14{margin-left:-12rem!important;margin-right:-12rem!important}.mx-sm-n15{margin-left:-16rem!important;margin-right:-16rem!important}.mx-sm-n16{margin-left:-25rem!important;margin-right:-25rem!important}.my-sm-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-sm-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-sm-n3{margin-bottom:-.75rem!important;margin-top:-.75rem!important}.my-sm-n4{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-sm-n5{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-sm-n6{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-sm-n7{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.my-sm-n8{margin-bottom:-3rem!important;margin-top:-3rem!important}.my-sm-n9{margin-bottom:-4rem!important;margin-top:-4rem!important}.my-sm-n10{margin-bottom:-5rem!important;margin-top:-5rem!important}.my-sm-n11{margin-bottom:-6rem!important;margin-top:-6rem!important}.my-sm-n12{margin-bottom:-8rem!important;margin-top:-8rem!important}.my-sm-n13{margin-bottom:-10rem!important;margin-top:-10rem!important}.my-sm-n14{margin-bottom:-12rem!important;margin-top:-12rem!important}.my-sm-n15{margin-bottom:-16rem!important;margin-top:-16rem!important}.my-sm-n16{margin-bottom:-25rem!important;margin-top:-25rem!important}.mt-sm-n1{margin-top:-.25rem!important}.mt-sm-n2{margin-top:-.5rem!important}.mt-sm-n3{margin-top:-.75rem!important}.mt-sm-n4{margin-top:-1rem!important}.mt-sm-n5{margin-top:-1.5rem!important}.mt-sm-n6{margin-top:-2rem!important}.mt-sm-n7{margin-top:-2.5rem!important}.mt-sm-n8{margin-top:-3rem!important}.mt-sm-n9{margin-top:-4rem!important}.mt-sm-n10{margin-top:-5rem!important}.mt-sm-n11{margin-top:-6rem!important}.mt-sm-n12{margin-top:-8rem!important}.mt-sm-n13{margin-top:-10rem!important}.mt-sm-n14{margin-top:-12rem!important}.mt-sm-n15{margin-top:-16rem!important}.mt-sm-n16{margin-top:-25rem!important}.me-sm-n1{margin-right:-.25rem!important}.me-sm-n2{margin-right:-.5rem!important}.me-sm-n3{margin-right:-.75rem!important}.me-sm-n4{margin-right:-1rem!important}.me-sm-n5{margin-right:-1.5rem!important}.me-sm-n6{margin-right:-2rem!important}.me-sm-n7{margin-right:-2.5rem!important}.me-sm-n8{margin-right:-3rem!important}.me-sm-n9{margin-right:-4rem!important}.me-sm-n10{margin-right:-5rem!important}.me-sm-n11{margin-right:-6rem!important}.me-sm-n12{margin-right:-8rem!important}.me-sm-n13{margin-right:-10rem!important}.me-sm-n14{margin-right:-12rem!important}.me-sm-n15{margin-right:-16rem!important}.me-sm-n16{margin-right:-25rem!important}.mb-sm-n1{margin-bottom:-.25rem!important}.mb-sm-n2{margin-bottom:-.5rem!important}.mb-sm-n3{margin-bottom:-.75rem!important}.mb-sm-n4{margin-bottom:-1rem!important}.mb-sm-n5{margin-bottom:-1.5rem!important}.mb-sm-n6{margin-bottom:-2rem!important}.mb-sm-n7{margin-bottom:-2.5rem!important}.mb-sm-n8{margin-bottom:-3rem!important}.mb-sm-n9{margin-bottom:-4rem!important}.mb-sm-n10{margin-bottom:-5rem!important}.mb-sm-n11{margin-bottom:-6rem!important}.mb-sm-n12{margin-bottom:-8rem!important}.mb-sm-n13{margin-bottom:-10rem!important}.mb-sm-n14{margin-bottom:-12rem!important}.mb-sm-n15{margin-bottom:-16rem!important}.mb-sm-n16{margin-bottom:-25rem!important}.ms-sm-n1{margin-left:-.25rem!important}.ms-sm-n2{margin-left:-.5rem!important}.ms-sm-n3{margin-left:-.75rem!important}.ms-sm-n4{margin-left:-1rem!important}.ms-sm-n5{margin-left:-1.5rem!important}.ms-sm-n6{margin-left:-2rem!important}.ms-sm-n7{margin-left:-2.5rem!important}.ms-sm-n8{margin-left:-3rem!important}.ms-sm-n9{margin-left:-4rem!important}.ms-sm-n10{margin-left:-5rem!important}.ms-sm-n11{margin-left:-6rem!important}.ms-sm-n12{margin-left:-8rem!important}.ms-sm-n13{margin-left:-10rem!important}.ms-sm-n14{margin-left:-12rem!important}.ms-sm-n15{margin-left:-16rem!important}.ms-sm-n16{margin-left:-25rem!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:.75rem!important}.p-sm-4{padding:1rem!important}.p-sm-5{padding:1.5rem!important}.p-sm-6{padding:2rem!important}.p-sm-7{padding:2.5rem!important}.p-sm-8{padding:3rem!important}.p-sm-9{padding:4rem!important}.p-sm-10{padding:5rem!important}.p-sm-11{padding:6rem!important}.p-sm-12{padding:8rem!important}.p-sm-13{padding:10rem!important}.p-sm-14{padding:12rem!important}.p-sm-15{padding:16rem!important}.p-sm-16{padding:25rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-sm-4{padding-left:1rem!important;padding-right:1rem!important}.px-sm-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-6{padding-left:2rem!important;padding-right:2rem!important}.px-sm-7{padding-left:2.5rem!important;padding-right:2.5rem!important}.px-sm-8{padding-left:3rem!important;padding-right:3rem!important}.px-sm-9{padding-left:4rem!important;padding-right:4rem!important}.px-sm-10{padding-left:5rem!important;padding-right:5rem!important}.px-sm-11{padding-left:6rem!important;padding-right:6rem!important}.px-sm-12{padding-left:8rem!important;padding-right:8rem!important}.px-sm-13{padding-left:10rem!important;padding-right:10rem!important}.px-sm-14{padding-left:12rem!important;padding-right:12rem!important}.px-sm-15{padding-left:16rem!important;padding-right:16rem!important}.px-sm-16{padding-left:25rem!important;padding-right:25rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-sm-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-5{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-6{padding-bottom:2rem!important;padding-top:2rem!important}.py-sm-7{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-sm-8{padding-bottom:3rem!important;padding-top:3rem!important}.py-sm-9{padding-bottom:4rem!important;padding-top:4rem!important}.py-sm-10{padding-bottom:5rem!important;padding-top:5rem!important}.py-sm-11{padding-bottom:6rem!important;padding-top:6rem!important}.py-sm-12{padding-bottom:8rem!important;padding-top:8rem!important}.py-sm-13{padding-bottom:10rem!important;padding-top:10rem!important}.py-sm-14{padding-bottom:12rem!important;padding-top:12rem!important}.py-sm-15{padding-bottom:16rem!important;padding-top:16rem!important}.py-sm-16{padding-bottom:25rem!important;padding-top:25rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:.75rem!important}.pt-sm-4{padding-top:1rem!important}.pt-sm-5{padding-top:1.5rem!important}.pt-sm-6{padding-top:2rem!important}.pt-sm-7{padding-top:2.5rem!important}.pt-sm-8{padding-top:3rem!important}.pt-sm-9{padding-top:4rem!important}.pt-sm-10{padding-top:5rem!important}.pt-sm-11{padding-top:6rem!important}.pt-sm-12{padding-top:8rem!important}.pt-sm-13{padding-top:10rem!important}.pt-sm-14{padding-top:12rem!important}.pt-sm-15{padding-top:16rem!important}.pt-sm-16{padding-top:25rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:.75rem!important}.pe-sm-4{padding-right:1rem!important}.pe-sm-5{padding-right:1.5rem!important}.pe-sm-6{padding-right:2rem!important}.pe-sm-7{padding-right:2.5rem!important}.pe-sm-8{padding-right:3rem!important}.pe-sm-9{padding-right:4rem!important}.pe-sm-10{padding-right:5rem!important}.pe-sm-11{padding-right:6rem!important}.pe-sm-12{padding-right:8rem!important}.pe-sm-13{padding-right:10rem!important}.pe-sm-14{padding-right:12rem!important}.pe-sm-15{padding-right:16rem!important}.pe-sm-16{padding-right:25rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:.75rem!important}.pb-sm-4{padding-bottom:1rem!important}.pb-sm-5{padding-bottom:1.5rem!important}.pb-sm-6{padding-bottom:2rem!important}.pb-sm-7{padding-bottom:2.5rem!important}.pb-sm-8{padding-bottom:3rem!important}.pb-sm-9{padding-bottom:4rem!important}.pb-sm-10{padding-bottom:5rem!important}.pb-sm-11{padding-bottom:6rem!important}.pb-sm-12{padding-bottom:8rem!important}.pb-sm-13{padding-bottom:10rem!important}.pb-sm-14{padding-bottom:12rem!important}.pb-sm-15{padding-bottom:16rem!important}.pb-sm-16{padding-bottom:25rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:.75rem!important}.ps-sm-4{padding-left:1rem!important}.ps-sm-5{padding-left:1.5rem!important}.ps-sm-6{padding-left:2rem!important}.ps-sm-7{padding-left:2.5rem!important}.ps-sm-8{padding-left:3rem!important}.ps-sm-9{padding-left:4rem!important}.ps-sm-10{padding-left:5rem!important}.ps-sm-11{padding-left:6rem!important}.ps-sm-12{padding-left:8rem!important}.ps-sm-13{padding-left:10rem!important}.ps-sm-14{padding-left:12rem!important}.ps-sm-15{padding-left:16rem!important}.ps-sm-16{padding-left:25rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.position-md-static{position:static!important}.position-md-relative{position:relative!important}.position-md-absolute{position:absolute!important}.position-md-fixed{position:fixed!important}.position-md-sticky{position:sticky!important}.border-md{border:1px solid #f1f4f8!important}.border-md-0{border:0!important}.border-top-md{border-top:1px solid #f1f4f8!important}.border-top-md-0{border-top:0!important}.border-right-md{border-right:1px solid #f1f4f8!important}.border-right-md-0{border-right:0!important}.border-bottom-md{border-bottom:1px solid #f1f4f8!important}.border-bottom-md-0{border-bottom:0!important}.border-left-md{border-left:1px solid #f1f4f8!important}.border-left-md-0{border-left:0!important}.w-md-25{width:25%!important}.w-md-50{width:50%!important}.w-md-75{width:75%!important}.w-md-100{width:100%!important}.w-md-110{width:110%!important}.w-md-120{width:120%!important}.w-md-130{width:130%!important}.w-md-140{width:140%!important}.w-md-150{width:150%!important}.w-md-auto{width:auto!important}.mw-md-25{max-width:25%!important}.mw-md-50{max-width:50%!important}.mw-md-75{max-width:75%!important}.mw-md-100{max-width:100%!important}.mw-md-110{max-width:110%!important}.mw-md-120{max-width:120%!important}.mw-md-130{max-width:130%!important}.mw-md-140{max-width:140%!important}.mw-md-150{max-width:150%!important}.vw-md-25{width:25vw!important}.vw-md-50{width:50vw!important}.vw-md-75{width:75vw!important}.vw-md-100{width:100vw!important}.vw-md-110{width:110vw!important}.vw-md-120{width:120vw!important}.vw-md-130{width:130vw!important}.vw-md-140{width:140vw!important}.vw-md-150{width:150vw!important}.h-md-25{height:25%!important}.h-md-50{height:50%!important}.h-md-75{height:75%!important}.h-md-100{height:100%!important}.h-md-110{height:110%!important}.h-md-120{height:120%!important}.h-md-130{height:130%!important}.h-md-140{height:140%!important}.h-md-150{height:150%!important}.h-md-auto{height:auto!important}.vh-md-25{height:25vh!important}.vh-md-50{height:50vh!important}.vh-md-75{height:75vh!important}.vh-md-100{height:100vh!important}.vh-md-110{height:110vh!important}.vh-md-120{height:120vh!important}.vh-md-130{height:130vh!important}.vh-md-140{height:140vh!important}.vh-md-150{height:150vh!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:.75rem!important}.gap-md-4{gap:1rem!important}.gap-md-5{gap:1.5rem!important}.gap-md-6{gap:2rem!important}.gap-md-7{gap:2.5rem!important}.gap-md-8{gap:3rem!important}.gap-md-9{gap:4rem!important}.gap-md-10{gap:5rem!important}.gap-md-11{gap:6rem!important}.gap-md-12{gap:8rem!important}.gap-md-13{gap:10rem!important}.gap-md-14{gap:12rem!important}.gap-md-15{gap:16rem!important}.gap-md-16{gap:25rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:.75rem!important}.m-md-4{margin:1rem!important}.m-md-5{margin:1.5rem!important}.m-md-6{margin:2rem!important}.m-md-7{margin:2.5rem!important}.m-md-8{margin:3rem!important}.m-md-9{margin:4rem!important}.m-md-10{margin:5rem!important}.m-md-11{margin:6rem!important}.m-md-12{margin:8rem!important}.m-md-13{margin:10rem!important}.m-md-14{margin:12rem!important}.m-md-15{margin:16rem!important}.m-md-16{margin:25rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-md-4{margin-left:1rem!important;margin-right:1rem!important}.mx-md-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-6{margin-left:2rem!important;margin-right:2rem!important}.mx-md-7{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-md-8{margin-left:3rem!important;margin-right:3rem!important}.mx-md-9{margin-left:4rem!important;margin-right:4rem!important}.mx-md-10{margin-left:5rem!important;margin-right:5rem!important}.mx-md-11{margin-left:6rem!important;margin-right:6rem!important}.mx-md-12{margin-left:8rem!important;margin-right:8rem!important}.mx-md-13{margin-left:10rem!important;margin-right:10rem!important}.mx-md-14{margin-left:12rem!important;margin-right:12rem!important}.mx-md-15{margin-left:16rem!important;margin-right:16rem!important}.mx-md-16{margin-left:25rem!important;margin-right:25rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-md-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-5{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-6{margin-bottom:2rem!important;margin-top:2rem!important}.my-md-7{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-md-8{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-9{margin-bottom:4rem!important;margin-top:4rem!important}.my-md-10{margin-bottom:5rem!important;margin-top:5rem!important}.my-md-11{margin-bottom:6rem!important;margin-top:6rem!important}.my-md-12{margin-bottom:8rem!important;margin-top:8rem!important}.my-md-13{margin-bottom:10rem!important;margin-top:10rem!important}.my-md-14{margin-bottom:12rem!important;margin-top:12rem!important}.my-md-15{margin-bottom:16rem!important;margin-top:16rem!important}.my-md-16{margin-bottom:25rem!important;margin-top:25rem!important}.my-md-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:.75rem!important}.mt-md-4{margin-top:1rem!important}.mt-md-5{margin-top:1.5rem!important}.mt-md-6{margin-top:2rem!important}.mt-md-7{margin-top:2.5rem!important}.mt-md-8{margin-top:3rem!important}.mt-md-9{margin-top:4rem!important}.mt-md-10{margin-top:5rem!important}.mt-md-11{margin-top:6rem!important}.mt-md-12{margin-top:8rem!important}.mt-md-13{margin-top:10rem!important}.mt-md-14{margin-top:12rem!important}.mt-md-15{margin-top:16rem!important}.mt-md-16{margin-top:25rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:.75rem!important}.me-md-4{margin-right:1rem!important}.me-md-5{margin-right:1.5rem!important}.me-md-6{margin-right:2rem!important}.me-md-7{margin-right:2.5rem!important}.me-md-8{margin-right:3rem!important}.me-md-9{margin-right:4rem!important}.me-md-10{margin-right:5rem!important}.me-md-11{margin-right:6rem!important}.me-md-12{margin-right:8rem!important}.me-md-13{margin-right:10rem!important}.me-md-14{margin-right:12rem!important}.me-md-15{margin-right:16rem!important}.me-md-16{margin-right:25rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:.75rem!important}.mb-md-4{margin-bottom:1rem!important}.mb-md-5{margin-bottom:1.5rem!important}.mb-md-6{margin-bottom:2rem!important}.mb-md-7{margin-bottom:2.5rem!important}.mb-md-8{margin-bottom:3rem!important}.mb-md-9{margin-bottom:4rem!important}.mb-md-10{margin-bottom:5rem!important}.mb-md-11{margin-bottom:6rem!important}.mb-md-12{margin-bottom:8rem!important}.mb-md-13{margin-bottom:10rem!important}.mb-md-14{margin-bottom:12rem!important}.mb-md-15{margin-bottom:16rem!important}.mb-md-16{margin-bottom:25rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:.75rem!important}.ms-md-4{margin-left:1rem!important}.ms-md-5{margin-left:1.5rem!important}.ms-md-6{margin-left:2rem!important}.ms-md-7{margin-left:2.5rem!important}.ms-md-8{margin-left:3rem!important}.ms-md-9{margin-left:4rem!important}.ms-md-10{margin-left:5rem!important}.ms-md-11{margin-left:6rem!important}.ms-md-12{margin-left:8rem!important}.ms-md-13{margin-left:10rem!important}.ms-md-14{margin-left:12rem!important}.ms-md-15{margin-left:16rem!important}.ms-md-16{margin-left:25rem!important}.ms-md-auto{margin-left:auto!important}.m-md-n1{margin:-.25rem!important}.m-md-n2{margin:-.5rem!important}.m-md-n3{margin:-.75rem!important}.m-md-n4{margin:-1rem!important}.m-md-n5{margin:-1.5rem!important}.m-md-n6{margin:-2rem!important}.m-md-n7{margin:-2.5rem!important}.m-md-n8{margin:-3rem!important}.m-md-n9{margin:-4rem!important}.m-md-n10{margin:-5rem!important}.m-md-n11{margin:-6rem!important}.m-md-n12{margin:-8rem!important}.m-md-n13{margin:-10rem!important}.m-md-n14{margin:-12rem!important}.m-md-n15{margin:-16rem!important}.m-md-n16{margin:-25rem!important}.mx-md-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-md-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-md-n3{margin-left:-.75rem!important;margin-right:-.75rem!important}.mx-md-n4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-md-n5{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-md-n6{margin-left:-2rem!important;margin-right:-2rem!important}.mx-md-n7{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.mx-md-n8{margin-left:-3rem!important;margin-right:-3rem!important}.mx-md-n9{margin-left:-4rem!important;margin-right:-4rem!important}.mx-md-n10{margin-left:-5rem!important;margin-right:-5rem!important}.mx-md-n11{margin-left:-6rem!important;margin-right:-6rem!important}.mx-md-n12{margin-left:-8rem!important;margin-right:-8rem!important}.mx-md-n13{margin-left:-10rem!important;margin-right:-10rem!important}.mx-md-n14{margin-left:-12rem!important;margin-right:-12rem!important}.mx-md-n15{margin-left:-16rem!important;margin-right:-16rem!important}.mx-md-n16{margin-left:-25rem!important;margin-right:-25rem!important}.my-md-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-md-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-md-n3{margin-bottom:-.75rem!important;margin-top:-.75rem!important}.my-md-n4{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-md-n5{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-md-n6{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-md-n7{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.my-md-n8{margin-bottom:-3rem!important;margin-top:-3rem!important}.my-md-n9{margin-bottom:-4rem!important;margin-top:-4rem!important}.my-md-n10{margin-bottom:-5rem!important;margin-top:-5rem!important}.my-md-n11{margin-bottom:-6rem!important;margin-top:-6rem!important}.my-md-n12{margin-bottom:-8rem!important;margin-top:-8rem!important}.my-md-n13{margin-bottom:-10rem!important;margin-top:-10rem!important}.my-md-n14{margin-bottom:-12rem!important;margin-top:-12rem!important}.my-md-n15{margin-bottom:-16rem!important;margin-top:-16rem!important}.my-md-n16{margin-bottom:-25rem!important;margin-top:-25rem!important}.mt-md-n1{margin-top:-.25rem!important}.mt-md-n2{margin-top:-.5rem!important}.mt-md-n3{margin-top:-.75rem!important}.mt-md-n4{margin-top:-1rem!important}.mt-md-n5{margin-top:-1.5rem!important}.mt-md-n6{margin-top:-2rem!important}.mt-md-n7{margin-top:-2.5rem!important}.mt-md-n8{margin-top:-3rem!important}.mt-md-n9{margin-top:-4rem!important}.mt-md-n10{margin-top:-5rem!important}.mt-md-n11{margin-top:-6rem!important}.mt-md-n12{margin-top:-8rem!important}.mt-md-n13{margin-top:-10rem!important}.mt-md-n14{margin-top:-12rem!important}.mt-md-n15{margin-top:-16rem!important}.mt-md-n16{margin-top:-25rem!important}.me-md-n1{margin-right:-.25rem!important}.me-md-n2{margin-right:-.5rem!important}.me-md-n3{margin-right:-.75rem!important}.me-md-n4{margin-right:-1rem!important}.me-md-n5{margin-right:-1.5rem!important}.me-md-n6{margin-right:-2rem!important}.me-md-n7{margin-right:-2.5rem!important}.me-md-n8{margin-right:-3rem!important}.me-md-n9{margin-right:-4rem!important}.me-md-n10{margin-right:-5rem!important}.me-md-n11{margin-right:-6rem!important}.me-md-n12{margin-right:-8rem!important}.me-md-n13{margin-right:-10rem!important}.me-md-n14{margin-right:-12rem!important}.me-md-n15{margin-right:-16rem!important}.me-md-n16{margin-right:-25rem!important}.mb-md-n1{margin-bottom:-.25rem!important}.mb-md-n2{margin-bottom:-.5rem!important}.mb-md-n3{margin-bottom:-.75rem!important}.mb-md-n4{margin-bottom:-1rem!important}.mb-md-n5{margin-bottom:-1.5rem!important}.mb-md-n6{margin-bottom:-2rem!important}.mb-md-n7{margin-bottom:-2.5rem!important}.mb-md-n8{margin-bottom:-3rem!important}.mb-md-n9{margin-bottom:-4rem!important}.mb-md-n10{margin-bottom:-5rem!important}.mb-md-n11{margin-bottom:-6rem!important}.mb-md-n12{margin-bottom:-8rem!important}.mb-md-n13{margin-bottom:-10rem!important}.mb-md-n14{margin-bottom:-12rem!important}.mb-md-n15{margin-bottom:-16rem!important}.mb-md-n16{margin-bottom:-25rem!important}.ms-md-n1{margin-left:-.25rem!important}.ms-md-n2{margin-left:-.5rem!important}.ms-md-n3{margin-left:-.75rem!important}.ms-md-n4{margin-left:-1rem!important}.ms-md-n5{margin-left:-1.5rem!important}.ms-md-n6{margin-left:-2rem!important}.ms-md-n7{margin-left:-2.5rem!important}.ms-md-n8{margin-left:-3rem!important}.ms-md-n9{margin-left:-4rem!important}.ms-md-n10{margin-left:-5rem!important}.ms-md-n11{margin-left:-6rem!important}.ms-md-n12{margin-left:-8rem!important}.ms-md-n13{margin-left:-10rem!important}.ms-md-n14{margin-left:-12rem!important}.ms-md-n15{margin-left:-16rem!important}.ms-md-n16{margin-left:-25rem!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:.75rem!important}.p-md-4{padding:1rem!important}.p-md-5{padding:1.5rem!important}.p-md-6{padding:2rem!important}.p-md-7{padding:2.5rem!important}.p-md-8{padding:3rem!important}.p-md-9{padding:4rem!important}.p-md-10{padding:5rem!important}.p-md-11{padding:6rem!important}.p-md-12{padding:8rem!important}.p-md-13{padding:10rem!important}.p-md-14{padding:12rem!important}.p-md-15{padding:16rem!important}.p-md-16{padding:25rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-md-4{padding-left:1rem!important;padding-right:1rem!important}.px-md-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-6{padding-left:2rem!important;padding-right:2rem!important}.px-md-7{padding-left:2.5rem!important;padding-right:2.5rem!important}.px-md-8{padding-left:3rem!important;padding-right:3rem!important}.px-md-9{padding-left:4rem!important;padding-right:4rem!important}.px-md-10{padding-left:5rem!important;padding-right:5rem!important}.px-md-11{padding-left:6rem!important;padding-right:6rem!important}.px-md-12{padding-left:8rem!important;padding-right:8rem!important}.px-md-13{padding-left:10rem!important;padding-right:10rem!important}.px-md-14{padding-left:12rem!important;padding-right:12rem!important}.px-md-15{padding-left:16rem!important;padding-right:16rem!important}.px-md-16{padding-left:25rem!important;padding-right:25rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-md-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-5{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-6{padding-bottom:2rem!important;padding-top:2rem!important}.py-md-7{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-md-8{padding-bottom:3rem!important;padding-top:3rem!important}.py-md-9{padding-bottom:4rem!important;padding-top:4rem!important}.py-md-10{padding-bottom:5rem!important;padding-top:5rem!important}.py-md-11{padding-bottom:6rem!important;padding-top:6rem!important}.py-md-12{padding-bottom:8rem!important;padding-top:8rem!important}.py-md-13{padding-bottom:10rem!important;padding-top:10rem!important}.py-md-14{padding-bottom:12rem!important;padding-top:12rem!important}.py-md-15{padding-bottom:16rem!important;padding-top:16rem!important}.py-md-16{padding-bottom:25rem!important;padding-top:25rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:.75rem!important}.pt-md-4{padding-top:1rem!important}.pt-md-5{padding-top:1.5rem!important}.pt-md-6{padding-top:2rem!important}.pt-md-7{padding-top:2.5rem!important}.pt-md-8{padding-top:3rem!important}.pt-md-9{padding-top:4rem!important}.pt-md-10{padding-top:5rem!important}.pt-md-11{padding-top:6rem!important}.pt-md-12{padding-top:8rem!important}.pt-md-13{padding-top:10rem!important}.pt-md-14{padding-top:12rem!important}.pt-md-15{padding-top:16rem!important}.pt-md-16{padding-top:25rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:.75rem!important}.pe-md-4{padding-right:1rem!important}.pe-md-5{padding-right:1.5rem!important}.pe-md-6{padding-right:2rem!important}.pe-md-7{padding-right:2.5rem!important}.pe-md-8{padding-right:3rem!important}.pe-md-9{padding-right:4rem!important}.pe-md-10{padding-right:5rem!important}.pe-md-11{padding-right:6rem!important}.pe-md-12{padding-right:8rem!important}.pe-md-13{padding-right:10rem!important}.pe-md-14{padding-right:12rem!important}.pe-md-15{padding-right:16rem!important}.pe-md-16{padding-right:25rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:.75rem!important}.pb-md-4{padding-bottom:1rem!important}.pb-md-5{padding-bottom:1.5rem!important}.pb-md-6{padding-bottom:2rem!important}.pb-md-7{padding-bottom:2.5rem!important}.pb-md-8{padding-bottom:3rem!important}.pb-md-9{padding-bottom:4rem!important}.pb-md-10{padding-bottom:5rem!important}.pb-md-11{padding-bottom:6rem!important}.pb-md-12{padding-bottom:8rem!important}.pb-md-13{padding-bottom:10rem!important}.pb-md-14{padding-bottom:12rem!important}.pb-md-15{padding-bottom:16rem!important}.pb-md-16{padding-bottom:25rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:.75rem!important}.ps-md-4{padding-left:1rem!important}.ps-md-5{padding-left:1.5rem!important}.ps-md-6{padding-left:2rem!important}.ps-md-7{padding-left:2.5rem!important}.ps-md-8{padding-left:3rem!important}.ps-md-9{padding-left:4rem!important}.ps-md-10{padding-left:5rem!important}.ps-md-11{padding-left:6rem!important}.ps-md-12{padding-left:8rem!important}.ps-md-13{padding-left:10rem!important}.ps-md-14{padding-left:12rem!important}.ps-md-15{padding-left:16rem!important}.ps-md-16{padding-left:25rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.position-lg-static{position:static!important}.position-lg-relative{position:relative!important}.position-lg-absolute{position:absolute!important}.position-lg-fixed{position:fixed!important}.position-lg-sticky{position:sticky!important}.border-lg{border:1px solid #f1f4f8!important}.border-lg-0{border:0!important}.border-top-lg{border-top:1px solid #f1f4f8!important}.border-top-lg-0{border-top:0!important}.border-right-lg{border-right:1px solid #f1f4f8!important}.border-right-lg-0{border-right:0!important}.border-bottom-lg{border-bottom:1px solid #f1f4f8!important}.border-bottom-lg-0{border-bottom:0!important}.border-left-lg{border-left:1px solid #f1f4f8!important}.border-left-lg-0{border-left:0!important}.w-lg-25{width:25%!important}.w-lg-50{width:50%!important}.w-lg-75{width:75%!important}.w-lg-100{width:100%!important}.w-lg-110{width:110%!important}.w-lg-120{width:120%!important}.w-lg-130{width:130%!important}.w-lg-140{width:140%!important}.w-lg-150{width:150%!important}.w-lg-auto{width:auto!important}.mw-lg-25{max-width:25%!important}.mw-lg-50{max-width:50%!important}.mw-lg-75{max-width:75%!important}.mw-lg-100{max-width:100%!important}.mw-lg-110{max-width:110%!important}.mw-lg-120{max-width:120%!important}.mw-lg-130{max-width:130%!important}.mw-lg-140{max-width:140%!important}.mw-lg-150{max-width:150%!important}.vw-lg-25{width:25vw!important}.vw-lg-50{width:50vw!important}.vw-lg-75{width:75vw!important}.vw-lg-100{width:100vw!important}.vw-lg-110{width:110vw!important}.vw-lg-120{width:120vw!important}.vw-lg-130{width:130vw!important}.vw-lg-140{width:140vw!important}.vw-lg-150{width:150vw!important}.h-lg-25{height:25%!important}.h-lg-50{height:50%!important}.h-lg-75{height:75%!important}.h-lg-100{height:100%!important}.h-lg-110{height:110%!important}.h-lg-120{height:120%!important}.h-lg-130{height:130%!important}.h-lg-140{height:140%!important}.h-lg-150{height:150%!important}.h-lg-auto{height:auto!important}.vh-lg-25{height:25vh!important}.vh-lg-50{height:50vh!important}.vh-lg-75{height:75vh!important}.vh-lg-100{height:100vh!important}.vh-lg-110{height:110vh!important}.vh-lg-120{height:120vh!important}.vh-lg-130{height:130vh!important}.vh-lg-140{height:140vh!important}.vh-lg-150{height:150vh!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:.75rem!important}.gap-lg-4{gap:1rem!important}.gap-lg-5{gap:1.5rem!important}.gap-lg-6{gap:2rem!important}.gap-lg-7{gap:2.5rem!important}.gap-lg-8{gap:3rem!important}.gap-lg-9{gap:4rem!important}.gap-lg-10{gap:5rem!important}.gap-lg-11{gap:6rem!important}.gap-lg-12{gap:8rem!important}.gap-lg-13{gap:10rem!important}.gap-lg-14{gap:12rem!important}.gap-lg-15{gap:16rem!important}.gap-lg-16{gap:25rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:.75rem!important}.m-lg-4{margin:1rem!important}.m-lg-5{margin:1.5rem!important}.m-lg-6{margin:2rem!important}.m-lg-7{margin:2.5rem!important}.m-lg-8{margin:3rem!important}.m-lg-9{margin:4rem!important}.m-lg-10{margin:5rem!important}.m-lg-11{margin:6rem!important}.m-lg-12{margin:8rem!important}.m-lg-13{margin:10rem!important}.m-lg-14{margin:12rem!important}.m-lg-15{margin:16rem!important}.m-lg-16{margin:25rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-lg-4{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-6{margin-left:2rem!important;margin-right:2rem!important}.mx-lg-7{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-lg-8{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-9{margin-left:4rem!important;margin-right:4rem!important}.mx-lg-10{margin-left:5rem!important;margin-right:5rem!important}.mx-lg-11{margin-left:6rem!important;margin-right:6rem!important}.mx-lg-12{margin-left:8rem!important;margin-right:8rem!important}.mx-lg-13{margin-left:10rem!important;margin-right:10rem!important}.mx-lg-14{margin-left:12rem!important;margin-right:12rem!important}.mx-lg-15{margin-left:16rem!important;margin-right:16rem!important}.mx-lg-16{margin-left:25rem!important;margin-right:25rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-lg-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-5{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-6{margin-bottom:2rem!important;margin-top:2rem!important}.my-lg-7{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-lg-8{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-9{margin-bottom:4rem!important;margin-top:4rem!important}.my-lg-10{margin-bottom:5rem!important;margin-top:5rem!important}.my-lg-11{margin-bottom:6rem!important;margin-top:6rem!important}.my-lg-12{margin-bottom:8rem!important;margin-top:8rem!important}.my-lg-13{margin-bottom:10rem!important;margin-top:10rem!important}.my-lg-14{margin-bottom:12rem!important;margin-top:12rem!important}.my-lg-15{margin-bottom:16rem!important;margin-top:16rem!important}.my-lg-16{margin-bottom:25rem!important;margin-top:25rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:.75rem!important}.mt-lg-4{margin-top:1rem!important}.mt-lg-5{margin-top:1.5rem!important}.mt-lg-6{margin-top:2rem!important}.mt-lg-7{margin-top:2.5rem!important}.mt-lg-8{margin-top:3rem!important}.mt-lg-9{margin-top:4rem!important}.mt-lg-10{margin-top:5rem!important}.mt-lg-11{margin-top:6rem!important}.mt-lg-12{margin-top:8rem!important}.mt-lg-13{margin-top:10rem!important}.mt-lg-14{margin-top:12rem!important}.mt-lg-15{margin-top:16rem!important}.mt-lg-16{margin-top:25rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:.75rem!important}.me-lg-4{margin-right:1rem!important}.me-lg-5{margin-right:1.5rem!important}.me-lg-6{margin-right:2rem!important}.me-lg-7{margin-right:2.5rem!important}.me-lg-8{margin-right:3rem!important}.me-lg-9{margin-right:4rem!important}.me-lg-10{margin-right:5rem!important}.me-lg-11{margin-right:6rem!important}.me-lg-12{margin-right:8rem!important}.me-lg-13{margin-right:10rem!important}.me-lg-14{margin-right:12rem!important}.me-lg-15{margin-right:16rem!important}.me-lg-16{margin-right:25rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:.75rem!important}.mb-lg-4{margin-bottom:1rem!important}.mb-lg-5{margin-bottom:1.5rem!important}.mb-lg-6{margin-bottom:2rem!important}.mb-lg-7{margin-bottom:2.5rem!important}.mb-lg-8{margin-bottom:3rem!important}.mb-lg-9{margin-bottom:4rem!important}.mb-lg-10{margin-bottom:5rem!important}.mb-lg-11{margin-bottom:6rem!important}.mb-lg-12{margin-bottom:8rem!important}.mb-lg-13{margin-bottom:10rem!important}.mb-lg-14{margin-bottom:12rem!important}.mb-lg-15{margin-bottom:16rem!important}.mb-lg-16{margin-bottom:25rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:.75rem!important}.ms-lg-4{margin-left:1rem!important}.ms-lg-5{margin-left:1.5rem!important}.ms-lg-6{margin-left:2rem!important}.ms-lg-7{margin-left:2.5rem!important}.ms-lg-8{margin-left:3rem!important}.ms-lg-9{margin-left:4rem!important}.ms-lg-10{margin-left:5rem!important}.ms-lg-11{margin-left:6rem!important}.ms-lg-12{margin-left:8rem!important}.ms-lg-13{margin-left:10rem!important}.ms-lg-14{margin-left:12rem!important}.ms-lg-15{margin-left:16rem!important}.ms-lg-16{margin-left:25rem!important}.ms-lg-auto{margin-left:auto!important}.m-lg-n1{margin:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.m-lg-n3{margin:-.75rem!important}.m-lg-n4{margin:-1rem!important}.m-lg-n5{margin:-1.5rem!important}.m-lg-n6{margin:-2rem!important}.m-lg-n7{margin:-2.5rem!important}.m-lg-n8{margin:-3rem!important}.m-lg-n9{margin:-4rem!important}.m-lg-n10{margin:-5rem!important}.m-lg-n11{margin:-6rem!important}.m-lg-n12{margin:-8rem!important}.m-lg-n13{margin:-10rem!important}.m-lg-n14{margin:-12rem!important}.m-lg-n15{margin:-16rem!important}.m-lg-n16{margin:-25rem!important}.mx-lg-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-lg-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-lg-n3{margin-left:-.75rem!important;margin-right:-.75rem!important}.mx-lg-n4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-lg-n5{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-lg-n6{margin-left:-2rem!important;margin-right:-2rem!important}.mx-lg-n7{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.mx-lg-n8{margin-left:-3rem!important;margin-right:-3rem!important}.mx-lg-n9{margin-left:-4rem!important;margin-right:-4rem!important}.mx-lg-n10{margin-left:-5rem!important;margin-right:-5rem!important}.mx-lg-n11{margin-left:-6rem!important;margin-right:-6rem!important}.mx-lg-n12{margin-left:-8rem!important;margin-right:-8rem!important}.mx-lg-n13{margin-left:-10rem!important;margin-right:-10rem!important}.mx-lg-n14{margin-left:-12rem!important;margin-right:-12rem!important}.mx-lg-n15{margin-left:-16rem!important;margin-right:-16rem!important}.mx-lg-n16{margin-left:-25rem!important;margin-right:-25rem!important}.my-lg-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-lg-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-lg-n3{margin-bottom:-.75rem!important;margin-top:-.75rem!important}.my-lg-n4{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-lg-n5{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-lg-n6{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-lg-n7{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.my-lg-n8{margin-bottom:-3rem!important;margin-top:-3rem!important}.my-lg-n9{margin-bottom:-4rem!important;margin-top:-4rem!important}.my-lg-n10{margin-bottom:-5rem!important;margin-top:-5rem!important}.my-lg-n11{margin-bottom:-6rem!important;margin-top:-6rem!important}.my-lg-n12{margin-bottom:-8rem!important;margin-top:-8rem!important}.my-lg-n13{margin-bottom:-10rem!important;margin-top:-10rem!important}.my-lg-n14{margin-bottom:-12rem!important;margin-top:-12rem!important}.my-lg-n15{margin-bottom:-16rem!important;margin-top:-16rem!important}.my-lg-n16{margin-bottom:-25rem!important;margin-top:-25rem!important}.mt-lg-n1{margin-top:-.25rem!important}.mt-lg-n2{margin-top:-.5rem!important}.mt-lg-n3{margin-top:-.75rem!important}.mt-lg-n4{margin-top:-1rem!important}.mt-lg-n5{margin-top:-1.5rem!important}.mt-lg-n6{margin-top:-2rem!important}.mt-lg-n7{margin-top:-2.5rem!important}.mt-lg-n8{margin-top:-3rem!important}.mt-lg-n9{margin-top:-4rem!important}.mt-lg-n10{margin-top:-5rem!important}.mt-lg-n11{margin-top:-6rem!important}.mt-lg-n12{margin-top:-8rem!important}.mt-lg-n13{margin-top:-10rem!important}.mt-lg-n14{margin-top:-12rem!important}.mt-lg-n15{margin-top:-16rem!important}.mt-lg-n16{margin-top:-25rem!important}.me-lg-n1{margin-right:-.25rem!important}.me-lg-n2{margin-right:-.5rem!important}.me-lg-n3{margin-right:-.75rem!important}.me-lg-n4{margin-right:-1rem!important}.me-lg-n5{margin-right:-1.5rem!important}.me-lg-n6{margin-right:-2rem!important}.me-lg-n7{margin-right:-2.5rem!important}.me-lg-n8{margin-right:-3rem!important}.me-lg-n9{margin-right:-4rem!important}.me-lg-n10{margin-right:-5rem!important}.me-lg-n11{margin-right:-6rem!important}.me-lg-n12{margin-right:-8rem!important}.me-lg-n13{margin-right:-10rem!important}.me-lg-n14{margin-right:-12rem!important}.me-lg-n15{margin-right:-16rem!important}.me-lg-n16{margin-right:-25rem!important}.mb-lg-n1{margin-bottom:-.25rem!important}.mb-lg-n2{margin-bottom:-.5rem!important}.mb-lg-n3{margin-bottom:-.75rem!important}.mb-lg-n4{margin-bottom:-1rem!important}.mb-lg-n5{margin-bottom:-1.5rem!important}.mb-lg-n6{margin-bottom:-2rem!important}.mb-lg-n7{margin-bottom:-2.5rem!important}.mb-lg-n8{margin-bottom:-3rem!important}.mb-lg-n9{margin-bottom:-4rem!important}.mb-lg-n10{margin-bottom:-5rem!important}.mb-lg-n11{margin-bottom:-6rem!important}.mb-lg-n12{margin-bottom:-8rem!important}.mb-lg-n13{margin-bottom:-10rem!important}.mb-lg-n14{margin-bottom:-12rem!important}.mb-lg-n15{margin-bottom:-16rem!important}.mb-lg-n16{margin-bottom:-25rem!important}.ms-lg-n1{margin-left:-.25rem!important}.ms-lg-n2{margin-left:-.5rem!important}.ms-lg-n3{margin-left:-.75rem!important}.ms-lg-n4{margin-left:-1rem!important}.ms-lg-n5{margin-left:-1.5rem!important}.ms-lg-n6{margin-left:-2rem!important}.ms-lg-n7{margin-left:-2.5rem!important}.ms-lg-n8{margin-left:-3rem!important}.ms-lg-n9{margin-left:-4rem!important}.ms-lg-n10{margin-left:-5rem!important}.ms-lg-n11{margin-left:-6rem!important}.ms-lg-n12{margin-left:-8rem!important}.ms-lg-n13{margin-left:-10rem!important}.ms-lg-n14{margin-left:-12rem!important}.ms-lg-n15{margin-left:-16rem!important}.ms-lg-n16{margin-left:-25rem!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:.75rem!important}.p-lg-4{padding:1rem!important}.p-lg-5{padding:1.5rem!important}.p-lg-6{padding:2rem!important}.p-lg-7{padding:2.5rem!important}.p-lg-8{padding:3rem!important}.p-lg-9{padding:4rem!important}.p-lg-10{padding:5rem!important}.p-lg-11{padding:6rem!important}.p-lg-12{padding:8rem!important}.p-lg-13{padding:10rem!important}.p-lg-14{padding:12rem!important}.p-lg-15{padding:16rem!important}.p-lg-16{padding:25rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-lg-4{padding-left:1rem!important;padding-right:1rem!important}.px-lg-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-6{padding-left:2rem!important;padding-right:2rem!important}.px-lg-7{padding-left:2.5rem!important;padding-right:2.5rem!important}.px-lg-8{padding-left:3rem!important;padding-right:3rem!important}.px-lg-9{padding-left:4rem!important;padding-right:4rem!important}.px-lg-10{padding-left:5rem!important;padding-right:5rem!important}.px-lg-11{padding-left:6rem!important;padding-right:6rem!important}.px-lg-12{padding-left:8rem!important;padding-right:8rem!important}.px-lg-13{padding-left:10rem!important;padding-right:10rem!important}.px-lg-14{padding-left:12rem!important;padding-right:12rem!important}.px-lg-15{padding-left:16rem!important;padding-right:16rem!important}.px-lg-16{padding-left:25rem!important;padding-right:25rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-lg-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-5{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-6{padding-bottom:2rem!important;padding-top:2rem!important}.py-lg-7{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-lg-8{padding-bottom:3rem!important;padding-top:3rem!important}.py-lg-9{padding-bottom:4rem!important;padding-top:4rem!important}.py-lg-10{padding-bottom:5rem!important;padding-top:5rem!important}.py-lg-11{padding-bottom:6rem!important;padding-top:6rem!important}.py-lg-12{padding-bottom:8rem!important;padding-top:8rem!important}.py-lg-13{padding-bottom:10rem!important;padding-top:10rem!important}.py-lg-14{padding-bottom:12rem!important;padding-top:12rem!important}.py-lg-15{padding-bottom:16rem!important;padding-top:16rem!important}.py-lg-16{padding-bottom:25rem!important;padding-top:25rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:.75rem!important}.pt-lg-4{padding-top:1rem!important}.pt-lg-5{padding-top:1.5rem!important}.pt-lg-6{padding-top:2rem!important}.pt-lg-7{padding-top:2.5rem!important}.pt-lg-8{padding-top:3rem!important}.pt-lg-9{padding-top:4rem!important}.pt-lg-10{padding-top:5rem!important}.pt-lg-11{padding-top:6rem!important}.pt-lg-12{padding-top:8rem!important}.pt-lg-13{padding-top:10rem!important}.pt-lg-14{padding-top:12rem!important}.pt-lg-15{padding-top:16rem!important}.pt-lg-16{padding-top:25rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:.75rem!important}.pe-lg-4{padding-right:1rem!important}.pe-lg-5{padding-right:1.5rem!important}.pe-lg-6{padding-right:2rem!important}.pe-lg-7{padding-right:2.5rem!important}.pe-lg-8{padding-right:3rem!important}.pe-lg-9{padding-right:4rem!important}.pe-lg-10{padding-right:5rem!important}.pe-lg-11{padding-right:6rem!important}.pe-lg-12{padding-right:8rem!important}.pe-lg-13{padding-right:10rem!important}.pe-lg-14{padding-right:12rem!important}.pe-lg-15{padding-right:16rem!important}.pe-lg-16{padding-right:25rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:.75rem!important}.pb-lg-4{padding-bottom:1rem!important}.pb-lg-5{padding-bottom:1.5rem!important}.pb-lg-6{padding-bottom:2rem!important}.pb-lg-7{padding-bottom:2.5rem!important}.pb-lg-8{padding-bottom:3rem!important}.pb-lg-9{padding-bottom:4rem!important}.pb-lg-10{padding-bottom:5rem!important}.pb-lg-11{padding-bottom:6rem!important}.pb-lg-12{padding-bottom:8rem!important}.pb-lg-13{padding-bottom:10rem!important}.pb-lg-14{padding-bottom:12rem!important}.pb-lg-15{padding-bottom:16rem!important}.pb-lg-16{padding-bottom:25rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:.75rem!important}.ps-lg-4{padding-left:1rem!important}.ps-lg-5{padding-left:1.5rem!important}.ps-lg-6{padding-left:2rem!important}.ps-lg-7{padding-left:2.5rem!important}.ps-lg-8{padding-left:3rem!important}.ps-lg-9{padding-left:4rem!important}.ps-lg-10{padding-left:5rem!important}.ps-lg-11{padding-left:6rem!important}.ps-lg-12{padding-left:8rem!important}.ps-lg-13{padding-left:10rem!important}.ps-lg-14{padding-left:12rem!important}.ps-lg-15{padding-left:16rem!important}.ps-lg-16{padding-left:25rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.position-xl-static{position:static!important}.position-xl-relative{position:relative!important}.position-xl-absolute{position:absolute!important}.position-xl-fixed{position:fixed!important}.position-xl-sticky{position:sticky!important}.border-xl{border:1px solid #f1f4f8!important}.border-xl-0{border:0!important}.border-top-xl{border-top:1px solid #f1f4f8!important}.border-top-xl-0{border-top:0!important}.border-right-xl{border-right:1px solid #f1f4f8!important}.border-right-xl-0{border-right:0!important}.border-bottom-xl{border-bottom:1px solid #f1f4f8!important}.border-bottom-xl-0{border-bottom:0!important}.border-left-xl{border-left:1px solid #f1f4f8!important}.border-left-xl-0{border-left:0!important}.w-xl-25{width:25%!important}.w-xl-50{width:50%!important}.w-xl-75{width:75%!important}.w-xl-100{width:100%!important}.w-xl-110{width:110%!important}.w-xl-120{width:120%!important}.w-xl-130{width:130%!important}.w-xl-140{width:140%!important}.w-xl-150{width:150%!important}.w-xl-auto{width:auto!important}.mw-xl-25{max-width:25%!important}.mw-xl-50{max-width:50%!important}.mw-xl-75{max-width:75%!important}.mw-xl-100{max-width:100%!important}.mw-xl-110{max-width:110%!important}.mw-xl-120{max-width:120%!important}.mw-xl-130{max-width:130%!important}.mw-xl-140{max-width:140%!important}.mw-xl-150{max-width:150%!important}.vw-xl-25{width:25vw!important}.vw-xl-50{width:50vw!important}.vw-xl-75{width:75vw!important}.vw-xl-100{width:100vw!important}.vw-xl-110{width:110vw!important}.vw-xl-120{width:120vw!important}.vw-xl-130{width:130vw!important}.vw-xl-140{width:140vw!important}.vw-xl-150{width:150vw!important}.h-xl-25{height:25%!important}.h-xl-50{height:50%!important}.h-xl-75{height:75%!important}.h-xl-100{height:100%!important}.h-xl-110{height:110%!important}.h-xl-120{height:120%!important}.h-xl-130{height:130%!important}.h-xl-140{height:140%!important}.h-xl-150{height:150%!important}.h-xl-auto{height:auto!important}.vh-xl-25{height:25vh!important}.vh-xl-50{height:50vh!important}.vh-xl-75{height:75vh!important}.vh-xl-100{height:100vh!important}.vh-xl-110{height:110vh!important}.vh-xl-120{height:120vh!important}.vh-xl-130{height:130vh!important}.vh-xl-140{height:140vh!important}.vh-xl-150{height:150vh!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:.75rem!important}.gap-xl-4{gap:1rem!important}.gap-xl-5{gap:1.5rem!important}.gap-xl-6{gap:2rem!important}.gap-xl-7{gap:2.5rem!important}.gap-xl-8{gap:3rem!important}.gap-xl-9{gap:4rem!important}.gap-xl-10{gap:5rem!important}.gap-xl-11{gap:6rem!important}.gap-xl-12{gap:8rem!important}.gap-xl-13{gap:10rem!important}.gap-xl-14{gap:12rem!important}.gap-xl-15{gap:16rem!important}.gap-xl-16{gap:25rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:.75rem!important}.m-xl-4{margin:1rem!important}.m-xl-5{margin:1.5rem!important}.m-xl-6{margin:2rem!important}.m-xl-7{margin:2.5rem!important}.m-xl-8{margin:3rem!important}.m-xl-9{margin:4rem!important}.m-xl-10{margin:5rem!important}.m-xl-11{margin:6rem!important}.m-xl-12{margin:8rem!important}.m-xl-13{margin:10rem!important}.m-xl-14{margin:12rem!important}.m-xl-15{margin:16rem!important}.m-xl-16{margin:25rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-xl-4{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-6{margin-left:2rem!important;margin-right:2rem!important}.mx-xl-7{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-xl-8{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-9{margin-left:4rem!important;margin-right:4rem!important}.mx-xl-10{margin-left:5rem!important;margin-right:5rem!important}.mx-xl-11{margin-left:6rem!important;margin-right:6rem!important}.mx-xl-12{margin-left:8rem!important;margin-right:8rem!important}.mx-xl-13{margin-left:10rem!important;margin-right:10rem!important}.mx-xl-14{margin-left:12rem!important;margin-right:12rem!important}.mx-xl-15{margin-left:16rem!important;margin-right:16rem!important}.mx-xl-16{margin-left:25rem!important;margin-right:25rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-xl-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-5{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-6{margin-bottom:2rem!important;margin-top:2rem!important}.my-xl-7{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-xl-8{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-9{margin-bottom:4rem!important;margin-top:4rem!important}.my-xl-10{margin-bottom:5rem!important;margin-top:5rem!important}.my-xl-11{margin-bottom:6rem!important;margin-top:6rem!important}.my-xl-12{margin-bottom:8rem!important;margin-top:8rem!important}.my-xl-13{margin-bottom:10rem!important;margin-top:10rem!important}.my-xl-14{margin-bottom:12rem!important;margin-top:12rem!important}.my-xl-15{margin-bottom:16rem!important;margin-top:16rem!important}.my-xl-16{margin-bottom:25rem!important;margin-top:25rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:.75rem!important}.mt-xl-4{margin-top:1rem!important}.mt-xl-5{margin-top:1.5rem!important}.mt-xl-6{margin-top:2rem!important}.mt-xl-7{margin-top:2.5rem!important}.mt-xl-8{margin-top:3rem!important}.mt-xl-9{margin-top:4rem!important}.mt-xl-10{margin-top:5rem!important}.mt-xl-11{margin-top:6rem!important}.mt-xl-12{margin-top:8rem!important}.mt-xl-13{margin-top:10rem!important}.mt-xl-14{margin-top:12rem!important}.mt-xl-15{margin-top:16rem!important}.mt-xl-16{margin-top:25rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:.75rem!important}.me-xl-4{margin-right:1rem!important}.me-xl-5{margin-right:1.5rem!important}.me-xl-6{margin-right:2rem!important}.me-xl-7{margin-right:2.5rem!important}.me-xl-8{margin-right:3rem!important}.me-xl-9{margin-right:4rem!important}.me-xl-10{margin-right:5rem!important}.me-xl-11{margin-right:6rem!important}.me-xl-12{margin-right:8rem!important}.me-xl-13{margin-right:10rem!important}.me-xl-14{margin-right:12rem!important}.me-xl-15{margin-right:16rem!important}.me-xl-16{margin-right:25rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:.75rem!important}.mb-xl-4{margin-bottom:1rem!important}.mb-xl-5{margin-bottom:1.5rem!important}.mb-xl-6{margin-bottom:2rem!important}.mb-xl-7{margin-bottom:2.5rem!important}.mb-xl-8{margin-bottom:3rem!important}.mb-xl-9{margin-bottom:4rem!important}.mb-xl-10{margin-bottom:5rem!important}.mb-xl-11{margin-bottom:6rem!important}.mb-xl-12{margin-bottom:8rem!important}.mb-xl-13{margin-bottom:10rem!important}.mb-xl-14{margin-bottom:12rem!important}.mb-xl-15{margin-bottom:16rem!important}.mb-xl-16{margin-bottom:25rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:.75rem!important}.ms-xl-4{margin-left:1rem!important}.ms-xl-5{margin-left:1.5rem!important}.ms-xl-6{margin-left:2rem!important}.ms-xl-7{margin-left:2.5rem!important}.ms-xl-8{margin-left:3rem!important}.ms-xl-9{margin-left:4rem!important}.ms-xl-10{margin-left:5rem!important}.ms-xl-11{margin-left:6rem!important}.ms-xl-12{margin-left:8rem!important}.ms-xl-13{margin-left:10rem!important}.ms-xl-14{margin-left:12rem!important}.ms-xl-15{margin-left:16rem!important}.ms-xl-16{margin-left:25rem!important}.ms-xl-auto{margin-left:auto!important}.m-xl-n1{margin:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.m-xl-n3{margin:-.75rem!important}.m-xl-n4{margin:-1rem!important}.m-xl-n5{margin:-1.5rem!important}.m-xl-n6{margin:-2rem!important}.m-xl-n7{margin:-2.5rem!important}.m-xl-n8{margin:-3rem!important}.m-xl-n9{margin:-4rem!important}.m-xl-n10{margin:-5rem!important}.m-xl-n11{margin:-6rem!important}.m-xl-n12{margin:-8rem!important}.m-xl-n13{margin:-10rem!important}.m-xl-n14{margin:-12rem!important}.m-xl-n15{margin:-16rem!important}.m-xl-n16{margin:-25rem!important}.mx-xl-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-xl-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-xl-n3{margin-left:-.75rem!important;margin-right:-.75rem!important}.mx-xl-n4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-xl-n5{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-xl-n6{margin-left:-2rem!important;margin-right:-2rem!important}.mx-xl-n7{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.mx-xl-n8{margin-left:-3rem!important;margin-right:-3rem!important}.mx-xl-n9{margin-left:-4rem!important;margin-right:-4rem!important}.mx-xl-n10{margin-left:-5rem!important;margin-right:-5rem!important}.mx-xl-n11{margin-left:-6rem!important;margin-right:-6rem!important}.mx-xl-n12{margin-left:-8rem!important;margin-right:-8rem!important}.mx-xl-n13{margin-left:-10rem!important;margin-right:-10rem!important}.mx-xl-n14{margin-left:-12rem!important;margin-right:-12rem!important}.mx-xl-n15{margin-left:-16rem!important;margin-right:-16rem!important}.mx-xl-n16{margin-left:-25rem!important;margin-right:-25rem!important}.my-xl-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-xl-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-xl-n3{margin-bottom:-.75rem!important;margin-top:-.75rem!important}.my-xl-n4{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-xl-n5{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-xl-n6{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-xl-n7{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.my-xl-n8{margin-bottom:-3rem!important;margin-top:-3rem!important}.my-xl-n9{margin-bottom:-4rem!important;margin-top:-4rem!important}.my-xl-n10{margin-bottom:-5rem!important;margin-top:-5rem!important}.my-xl-n11{margin-bottom:-6rem!important;margin-top:-6rem!important}.my-xl-n12{margin-bottom:-8rem!important;margin-top:-8rem!important}.my-xl-n13{margin-bottom:-10rem!important;margin-top:-10rem!important}.my-xl-n14{margin-bottom:-12rem!important;margin-top:-12rem!important}.my-xl-n15{margin-bottom:-16rem!important;margin-top:-16rem!important}.my-xl-n16{margin-bottom:-25rem!important;margin-top:-25rem!important}.mt-xl-n1{margin-top:-.25rem!important}.mt-xl-n2{margin-top:-.5rem!important}.mt-xl-n3{margin-top:-.75rem!important}.mt-xl-n4{margin-top:-1rem!important}.mt-xl-n5{margin-top:-1.5rem!important}.mt-xl-n6{margin-top:-2rem!important}.mt-xl-n7{margin-top:-2.5rem!important}.mt-xl-n8{margin-top:-3rem!important}.mt-xl-n9{margin-top:-4rem!important}.mt-xl-n10{margin-top:-5rem!important}.mt-xl-n11{margin-top:-6rem!important}.mt-xl-n12{margin-top:-8rem!important}.mt-xl-n13{margin-top:-10rem!important}.mt-xl-n14{margin-top:-12rem!important}.mt-xl-n15{margin-top:-16rem!important}.mt-xl-n16{margin-top:-25rem!important}.me-xl-n1{margin-right:-.25rem!important}.me-xl-n2{margin-right:-.5rem!important}.me-xl-n3{margin-right:-.75rem!important}.me-xl-n4{margin-right:-1rem!important}.me-xl-n5{margin-right:-1.5rem!important}.me-xl-n6{margin-right:-2rem!important}.me-xl-n7{margin-right:-2.5rem!important}.me-xl-n8{margin-right:-3rem!important}.me-xl-n9{margin-right:-4rem!important}.me-xl-n10{margin-right:-5rem!important}.me-xl-n11{margin-right:-6rem!important}.me-xl-n12{margin-right:-8rem!important}.me-xl-n13{margin-right:-10rem!important}.me-xl-n14{margin-right:-12rem!important}.me-xl-n15{margin-right:-16rem!important}.me-xl-n16{margin-right:-25rem!important}.mb-xl-n1{margin-bottom:-.25rem!important}.mb-xl-n2{margin-bottom:-.5rem!important}.mb-xl-n3{margin-bottom:-.75rem!important}.mb-xl-n4{margin-bottom:-1rem!important}.mb-xl-n5{margin-bottom:-1.5rem!important}.mb-xl-n6{margin-bottom:-2rem!important}.mb-xl-n7{margin-bottom:-2.5rem!important}.mb-xl-n8{margin-bottom:-3rem!important}.mb-xl-n9{margin-bottom:-4rem!important}.mb-xl-n10{margin-bottom:-5rem!important}.mb-xl-n11{margin-bottom:-6rem!important}.mb-xl-n12{margin-bottom:-8rem!important}.mb-xl-n13{margin-bottom:-10rem!important}.mb-xl-n14{margin-bottom:-12rem!important}.mb-xl-n15{margin-bottom:-16rem!important}.mb-xl-n16{margin-bottom:-25rem!important}.ms-xl-n1{margin-left:-.25rem!important}.ms-xl-n2{margin-left:-.5rem!important}.ms-xl-n3{margin-left:-.75rem!important}.ms-xl-n4{margin-left:-1rem!important}.ms-xl-n5{margin-left:-1.5rem!important}.ms-xl-n6{margin-left:-2rem!important}.ms-xl-n7{margin-left:-2.5rem!important}.ms-xl-n8{margin-left:-3rem!important}.ms-xl-n9{margin-left:-4rem!important}.ms-xl-n10{margin-left:-5rem!important}.ms-xl-n11{margin-left:-6rem!important}.ms-xl-n12{margin-left:-8rem!important}.ms-xl-n13{margin-left:-10rem!important}.ms-xl-n14{margin-left:-12rem!important}.ms-xl-n15{margin-left:-16rem!important}.ms-xl-n16{margin-left:-25rem!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:.75rem!important}.p-xl-4{padding:1rem!important}.p-xl-5{padding:1.5rem!important}.p-xl-6{padding:2rem!important}.p-xl-7{padding:2.5rem!important}.p-xl-8{padding:3rem!important}.p-xl-9{padding:4rem!important}.p-xl-10{padding:5rem!important}.p-xl-11{padding:6rem!important}.p-xl-12{padding:8rem!important}.p-xl-13{padding:10rem!important}.p-xl-14{padding:12rem!important}.p-xl-15{padding:16rem!important}.p-xl-16{padding:25rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-xl-4{padding-left:1rem!important;padding-right:1rem!important}.px-xl-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-6{padding-left:2rem!important;padding-right:2rem!important}.px-xl-7{padding-left:2.5rem!important;padding-right:2.5rem!important}.px-xl-8{padding-left:3rem!important;padding-right:3rem!important}.px-xl-9{padding-left:4rem!important;padding-right:4rem!important}.px-xl-10{padding-left:5rem!important;padding-right:5rem!important}.px-xl-11{padding-left:6rem!important;padding-right:6rem!important}.px-xl-12{padding-left:8rem!important;padding-right:8rem!important}.px-xl-13{padding-left:10rem!important;padding-right:10rem!important}.px-xl-14{padding-left:12rem!important;padding-right:12rem!important}.px-xl-15{padding-left:16rem!important;padding-right:16rem!important}.px-xl-16{padding-left:25rem!important;padding-right:25rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-xl-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-5{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-6{padding-bottom:2rem!important;padding-top:2rem!important}.py-xl-7{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-xl-8{padding-bottom:3rem!important;padding-top:3rem!important}.py-xl-9{padding-bottom:4rem!important;padding-top:4rem!important}.py-xl-10{padding-bottom:5rem!important;padding-top:5rem!important}.py-xl-11{padding-bottom:6rem!important;padding-top:6rem!important}.py-xl-12{padding-bottom:8rem!important;padding-top:8rem!important}.py-xl-13{padding-bottom:10rem!important;padding-top:10rem!important}.py-xl-14{padding-bottom:12rem!important;padding-top:12rem!important}.py-xl-15{padding-bottom:16rem!important;padding-top:16rem!important}.py-xl-16{padding-bottom:25rem!important;padding-top:25rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:.75rem!important}.pt-xl-4{padding-top:1rem!important}.pt-xl-5{padding-top:1.5rem!important}.pt-xl-6{padding-top:2rem!important}.pt-xl-7{padding-top:2.5rem!important}.pt-xl-8{padding-top:3rem!important}.pt-xl-9{padding-top:4rem!important}.pt-xl-10{padding-top:5rem!important}.pt-xl-11{padding-top:6rem!important}.pt-xl-12{padding-top:8rem!important}.pt-xl-13{padding-top:10rem!important}.pt-xl-14{padding-top:12rem!important}.pt-xl-15{padding-top:16rem!important}.pt-xl-16{padding-top:25rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:.75rem!important}.pe-xl-4{padding-right:1rem!important}.pe-xl-5{padding-right:1.5rem!important}.pe-xl-6{padding-right:2rem!important}.pe-xl-7{padding-right:2.5rem!important}.pe-xl-8{padding-right:3rem!important}.pe-xl-9{padding-right:4rem!important}.pe-xl-10{padding-right:5rem!important}.pe-xl-11{padding-right:6rem!important}.pe-xl-12{padding-right:8rem!important}.pe-xl-13{padding-right:10rem!important}.pe-xl-14{padding-right:12rem!important}.pe-xl-15{padding-right:16rem!important}.pe-xl-16{padding-right:25rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:.75rem!important}.pb-xl-4{padding-bottom:1rem!important}.pb-xl-5{padding-bottom:1.5rem!important}.pb-xl-6{padding-bottom:2rem!important}.pb-xl-7{padding-bottom:2.5rem!important}.pb-xl-8{padding-bottom:3rem!important}.pb-xl-9{padding-bottom:4rem!important}.pb-xl-10{padding-bottom:5rem!important}.pb-xl-11{padding-bottom:6rem!important}.pb-xl-12{padding-bottom:8rem!important}.pb-xl-13{padding-bottom:10rem!important}.pb-xl-14{padding-bottom:12rem!important}.pb-xl-15{padding-bottom:16rem!important}.pb-xl-16{padding-bottom:25rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:.75rem!important}.ps-xl-4{padding-left:1rem!important}.ps-xl-5{padding-left:1.5rem!important}.ps-xl-6{padding-left:2rem!important}.ps-xl-7{padding-left:2.5rem!important}.ps-xl-8{padding-left:3rem!important}.ps-xl-9{padding-left:4rem!important}.ps-xl-10{padding-left:5rem!important}.ps-xl-11{padding-left:6rem!important}.ps-xl-12{padding-left:8rem!important}.ps-xl-13{padding-left:10rem!important}.ps-xl-14{padding-left:12rem!important}.ps-xl-15{padding-left:16rem!important}.ps-xl-16{padding-left:25rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.position-xxl-static{position:static!important}.position-xxl-relative{position:relative!important}.position-xxl-absolute{position:absolute!important}.position-xxl-fixed{position:fixed!important}.position-xxl-sticky{position:sticky!important}.border-xxl{border:1px solid #f1f4f8!important}.border-xxl-0{border:0!important}.border-top-xxl{border-top:1px solid #f1f4f8!important}.border-top-xxl-0{border-top:0!important}.border-right-xxl{border-right:1px solid #f1f4f8!important}.border-right-xxl-0{border-right:0!important}.border-bottom-xxl{border-bottom:1px solid #f1f4f8!important}.border-bottom-xxl-0{border-bottom:0!important}.border-left-xxl{border-left:1px solid #f1f4f8!important}.border-left-xxl-0{border-left:0!important}.w-xxl-25{width:25%!important}.w-xxl-50{width:50%!important}.w-xxl-75{width:75%!important}.w-xxl-100{width:100%!important}.w-xxl-110{width:110%!important}.w-xxl-120{width:120%!important}.w-xxl-130{width:130%!important}.w-xxl-140{width:140%!important}.w-xxl-150{width:150%!important}.w-xxl-auto{width:auto!important}.mw-xxl-25{max-width:25%!important}.mw-xxl-50{max-width:50%!important}.mw-xxl-75{max-width:75%!important}.mw-xxl-100{max-width:100%!important}.mw-xxl-110{max-width:110%!important}.mw-xxl-120{max-width:120%!important}.mw-xxl-130{max-width:130%!important}.mw-xxl-140{max-width:140%!important}.mw-xxl-150{max-width:150%!important}.vw-xxl-25{width:25vw!important}.vw-xxl-50{width:50vw!important}.vw-xxl-75{width:75vw!important}.vw-xxl-100{width:100vw!important}.vw-xxl-110{width:110vw!important}.vw-xxl-120{width:120vw!important}.vw-xxl-130{width:130vw!important}.vw-xxl-140{width:140vw!important}.vw-xxl-150{width:150vw!important}.h-xxl-25{height:25%!important}.h-xxl-50{height:50%!important}.h-xxl-75{height:75%!important}.h-xxl-100{height:100%!important}.h-xxl-110{height:110%!important}.h-xxl-120{height:120%!important}.h-xxl-130{height:130%!important}.h-xxl-140{height:140%!important}.h-xxl-150{height:150%!important}.h-xxl-auto{height:auto!important}.vh-xxl-25{height:25vh!important}.vh-xxl-50{height:50vh!important}.vh-xxl-75{height:75vh!important}.vh-xxl-100{height:100vh!important}.vh-xxl-110{height:110vh!important}.vh-xxl-120{height:120vh!important}.vh-xxl-130{height:130vh!important}.vh-xxl-140{height:140vh!important}.vh-xxl-150{height:150vh!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:.75rem!important}.gap-xxl-4{gap:1rem!important}.gap-xxl-5{gap:1.5rem!important}.gap-xxl-6{gap:2rem!important}.gap-xxl-7{gap:2.5rem!important}.gap-xxl-8{gap:3rem!important}.gap-xxl-9{gap:4rem!important}.gap-xxl-10{gap:5rem!important}.gap-xxl-11{gap:6rem!important}.gap-xxl-12{gap:8rem!important}.gap-xxl-13{gap:10rem!important}.gap-xxl-14{gap:12rem!important}.gap-xxl-15{gap:16rem!important}.gap-xxl-16{gap:25rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:.75rem!important}.m-xxl-4{margin:1rem!important}.m-xxl-5{margin:1.5rem!important}.m-xxl-6{margin:2rem!important}.m-xxl-7{margin:2.5rem!important}.m-xxl-8{margin:3rem!important}.m-xxl-9{margin:4rem!important}.m-xxl-10{margin:5rem!important}.m-xxl-11{margin:6rem!important}.m-xxl-12{margin:8rem!important}.m-xxl-13{margin:10rem!important}.m-xxl-14{margin:12rem!important}.m-xxl-15{margin:16rem!important}.m-xxl-16{margin:25rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-xxl-4{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-6{margin-left:2rem!important;margin-right:2rem!important}.mx-xxl-7{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-xxl-8{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-9{margin-left:4rem!important;margin-right:4rem!important}.mx-xxl-10{margin-left:5rem!important;margin-right:5rem!important}.mx-xxl-11{margin-left:6rem!important;margin-right:6rem!important}.mx-xxl-12{margin-left:8rem!important;margin-right:8rem!important}.mx-xxl-13{margin-left:10rem!important;margin-right:10rem!important}.mx-xxl-14{margin-left:12rem!important;margin-right:12rem!important}.mx-xxl-15{margin-left:16rem!important;margin-right:16rem!important}.mx-xxl-16{margin-left:25rem!important;margin-right:25rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-bottom:0!important;margin-top:0!important}.my-xxl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xxl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xxl-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-xxl-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-xxl-5{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xxl-6{margin-bottom:2rem!important;margin-top:2rem!important}.my-xxl-7{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-xxl-8{margin-bottom:3rem!important;margin-top:3rem!important}.my-xxl-9{margin-bottom:4rem!important;margin-top:4rem!important}.my-xxl-10{margin-bottom:5rem!important;margin-top:5rem!important}.my-xxl-11{margin-bottom:6rem!important;margin-top:6rem!important}.my-xxl-12{margin-bottom:8rem!important;margin-top:8rem!important}.my-xxl-13{margin-bottom:10rem!important;margin-top:10rem!important}.my-xxl-14{margin-bottom:12rem!important;margin-top:12rem!important}.my-xxl-15{margin-bottom:16rem!important;margin-top:16rem!important}.my-xxl-16{margin-bottom:25rem!important;margin-top:25rem!important}.my-xxl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:.75rem!important}.mt-xxl-4{margin-top:1rem!important}.mt-xxl-5{margin-top:1.5rem!important}.mt-xxl-6{margin-top:2rem!important}.mt-xxl-7{margin-top:2.5rem!important}.mt-xxl-8{margin-top:3rem!important}.mt-xxl-9{margin-top:4rem!important}.mt-xxl-10{margin-top:5rem!important}.mt-xxl-11{margin-top:6rem!important}.mt-xxl-12{margin-top:8rem!important}.mt-xxl-13{margin-top:10rem!important}.mt-xxl-14{margin-top:12rem!important}.mt-xxl-15{margin-top:16rem!important}.mt-xxl-16{margin-top:25rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:.75rem!important}.me-xxl-4{margin-right:1rem!important}.me-xxl-5{margin-right:1.5rem!important}.me-xxl-6{margin-right:2rem!important}.me-xxl-7{margin-right:2.5rem!important}.me-xxl-8{margin-right:3rem!important}.me-xxl-9{margin-right:4rem!important}.me-xxl-10{margin-right:5rem!important}.me-xxl-11{margin-right:6rem!important}.me-xxl-12{margin-right:8rem!important}.me-xxl-13{margin-right:10rem!important}.me-xxl-14{margin-right:12rem!important}.me-xxl-15{margin-right:16rem!important}.me-xxl-16{margin-right:25rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:.75rem!important}.mb-xxl-4{margin-bottom:1rem!important}.mb-xxl-5{margin-bottom:1.5rem!important}.mb-xxl-6{margin-bottom:2rem!important}.mb-xxl-7{margin-bottom:2.5rem!important}.mb-xxl-8{margin-bottom:3rem!important}.mb-xxl-9{margin-bottom:4rem!important}.mb-xxl-10{margin-bottom:5rem!important}.mb-xxl-11{margin-bottom:6rem!important}.mb-xxl-12{margin-bottom:8rem!important}.mb-xxl-13{margin-bottom:10rem!important}.mb-xxl-14{margin-bottom:12rem!important}.mb-xxl-15{margin-bottom:16rem!important}.mb-xxl-16{margin-bottom:25rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:.75rem!important}.ms-xxl-4{margin-left:1rem!important}.ms-xxl-5{margin-left:1.5rem!important}.ms-xxl-6{margin-left:2rem!important}.ms-xxl-7{margin-left:2.5rem!important}.ms-xxl-8{margin-left:3rem!important}.ms-xxl-9{margin-left:4rem!important}.ms-xxl-10{margin-left:5rem!important}.ms-xxl-11{margin-left:6rem!important}.ms-xxl-12{margin-left:8rem!important}.ms-xxl-13{margin-left:10rem!important}.ms-xxl-14{margin-left:12rem!important}.ms-xxl-15{margin-left:16rem!important}.ms-xxl-16{margin-left:25rem!important}.ms-xxl-auto{margin-left:auto!important}.m-xxl-n1{margin:-.25rem!important}.m-xxl-n2{margin:-.5rem!important}.m-xxl-n3{margin:-.75rem!important}.m-xxl-n4{margin:-1rem!important}.m-xxl-n5{margin:-1.5rem!important}.m-xxl-n6{margin:-2rem!important}.m-xxl-n7{margin:-2.5rem!important}.m-xxl-n8{margin:-3rem!important}.m-xxl-n9{margin:-4rem!important}.m-xxl-n10{margin:-5rem!important}.m-xxl-n11{margin:-6rem!important}.m-xxl-n12{margin:-8rem!important}.m-xxl-n13{margin:-10rem!important}.m-xxl-n14{margin:-12rem!important}.m-xxl-n15{margin:-16rem!important}.m-xxl-n16{margin:-25rem!important}.mx-xxl-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-xxl-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-xxl-n3{margin-left:-.75rem!important;margin-right:-.75rem!important}.mx-xxl-n4{margin-left:-1rem!important;margin-right:-1rem!important}.mx-xxl-n5{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-xxl-n6{margin-left:-2rem!important;margin-right:-2rem!important}.mx-xxl-n7{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.mx-xxl-n8{margin-left:-3rem!important;margin-right:-3rem!important}.mx-xxl-n9{margin-left:-4rem!important;margin-right:-4rem!important}.mx-xxl-n10{margin-left:-5rem!important;margin-right:-5rem!important}.mx-xxl-n11{margin-left:-6rem!important;margin-right:-6rem!important}.mx-xxl-n12{margin-left:-8rem!important;margin-right:-8rem!important}.mx-xxl-n13{margin-left:-10rem!important;margin-right:-10rem!important}.mx-xxl-n14{margin-left:-12rem!important;margin-right:-12rem!important}.mx-xxl-n15{margin-left:-16rem!important;margin-right:-16rem!important}.mx-xxl-n16{margin-left:-25rem!important;margin-right:-25rem!important}.my-xxl-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-xxl-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-xxl-n3{margin-bottom:-.75rem!important;margin-top:-.75rem!important}.my-xxl-n4{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-xxl-n5{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-xxl-n6{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-xxl-n7{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.my-xxl-n8{margin-bottom:-3rem!important;margin-top:-3rem!important}.my-xxl-n9{margin-bottom:-4rem!important;margin-top:-4rem!important}.my-xxl-n10{margin-bottom:-5rem!important;margin-top:-5rem!important}.my-xxl-n11{margin-bottom:-6rem!important;margin-top:-6rem!important}.my-xxl-n12{margin-bottom:-8rem!important;margin-top:-8rem!important}.my-xxl-n13{margin-bottom:-10rem!important;margin-top:-10rem!important}.my-xxl-n14{margin-bottom:-12rem!important;margin-top:-12rem!important}.my-xxl-n15{margin-bottom:-16rem!important;margin-top:-16rem!important}.my-xxl-n16{margin-bottom:-25rem!important;margin-top:-25rem!important}.mt-xxl-n1{margin-top:-.25rem!important}.mt-xxl-n2{margin-top:-.5rem!important}.mt-xxl-n3{margin-top:-.75rem!important}.mt-xxl-n4{margin-top:-1rem!important}.mt-xxl-n5{margin-top:-1.5rem!important}.mt-xxl-n6{margin-top:-2rem!important}.mt-xxl-n7{margin-top:-2.5rem!important}.mt-xxl-n8{margin-top:-3rem!important}.mt-xxl-n9{margin-top:-4rem!important}.mt-xxl-n10{margin-top:-5rem!important}.mt-xxl-n11{margin-top:-6rem!important}.mt-xxl-n12{margin-top:-8rem!important}.mt-xxl-n13{margin-top:-10rem!important}.mt-xxl-n14{margin-top:-12rem!important}.mt-xxl-n15{margin-top:-16rem!important}.mt-xxl-n16{margin-top:-25rem!important}.me-xxl-n1{margin-right:-.25rem!important}.me-xxl-n2{margin-right:-.5rem!important}.me-xxl-n3{margin-right:-.75rem!important}.me-xxl-n4{margin-right:-1rem!important}.me-xxl-n5{margin-right:-1.5rem!important}.me-xxl-n6{margin-right:-2rem!important}.me-xxl-n7{margin-right:-2.5rem!important}.me-xxl-n8{margin-right:-3rem!important}.me-xxl-n9{margin-right:-4rem!important}.me-xxl-n10{margin-right:-5rem!important}.me-xxl-n11{margin-right:-6rem!important}.me-xxl-n12{margin-right:-8rem!important}.me-xxl-n13{margin-right:-10rem!important}.me-xxl-n14{margin-right:-12rem!important}.me-xxl-n15{margin-right:-16rem!important}.me-xxl-n16{margin-right:-25rem!important}.mb-xxl-n1{margin-bottom:-.25rem!important}.mb-xxl-n2{margin-bottom:-.5rem!important}.mb-xxl-n3{margin-bottom:-.75rem!important}.mb-xxl-n4{margin-bottom:-1rem!important}.mb-xxl-n5{margin-bottom:-1.5rem!important}.mb-xxl-n6{margin-bottom:-2rem!important}.mb-xxl-n7{margin-bottom:-2.5rem!important}.mb-xxl-n8{margin-bottom:-3rem!important}.mb-xxl-n9{margin-bottom:-4rem!important}.mb-xxl-n10{margin-bottom:-5rem!important}.mb-xxl-n11{margin-bottom:-6rem!important}.mb-xxl-n12{margin-bottom:-8rem!important}.mb-xxl-n13{margin-bottom:-10rem!important}.mb-xxl-n14{margin-bottom:-12rem!important}.mb-xxl-n15{margin-bottom:-16rem!important}.mb-xxl-n16{margin-bottom:-25rem!important}.ms-xxl-n1{margin-left:-.25rem!important}.ms-xxl-n2{margin-left:-.5rem!important}.ms-xxl-n3{margin-left:-.75rem!important}.ms-xxl-n4{margin-left:-1rem!important}.ms-xxl-n5{margin-left:-1.5rem!important}.ms-xxl-n6{margin-left:-2rem!important}.ms-xxl-n7{margin-left:-2.5rem!important}.ms-xxl-n8{margin-left:-3rem!important}.ms-xxl-n9{margin-left:-4rem!important}.ms-xxl-n10{margin-left:-5rem!important}.ms-xxl-n11{margin-left:-6rem!important}.ms-xxl-n12{margin-left:-8rem!important}.ms-xxl-n13{margin-left:-10rem!important}.ms-xxl-n14{margin-left:-12rem!important}.ms-xxl-n15{margin-left:-16rem!important}.ms-xxl-n16{margin-left:-25rem!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:.75rem!important}.p-xxl-4{padding:1rem!important}.p-xxl-5{padding:1.5rem!important}.p-xxl-6{padding:2rem!important}.p-xxl-7{padding:2.5rem!important}.p-xxl-8{padding:3rem!important}.p-xxl-9{padding:4rem!important}.p-xxl-10{padding:5rem!important}.p-xxl-11{padding:6rem!important}.p-xxl-12{padding:8rem!important}.p-xxl-13{padding:10rem!important}.p-xxl-14{padding:12rem!important}.p-xxl-15{padding:16rem!important}.p-xxl-16{padding:25rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-xxl-4{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-6{padding-left:2rem!important;padding-right:2rem!important}.px-xxl-7{padding-left:2.5rem!important;padding-right:2.5rem!important}.px-xxl-8{padding-left:3rem!important;padding-right:3rem!important}.px-xxl-9{padding-left:4rem!important;padding-right:4rem!important}.px-xxl-10{padding-left:5rem!important;padding-right:5rem!important}.px-xxl-11{padding-left:6rem!important;padding-right:6rem!important}.px-xxl-12{padding-left:8rem!important;padding-right:8rem!important}.px-xxl-13{padding-left:10rem!important;padding-right:10rem!important}.px-xxl-14{padding-left:12rem!important;padding-right:12rem!important}.px-xxl-15{padding-left:16rem!important;padding-right:16rem!important}.px-xxl-16{padding-left:25rem!important;padding-right:25rem!important}.py-xxl-0{padding-bottom:0!important;padding-top:0!important}.py-xxl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xxl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xxl-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-xxl-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-xxl-5{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xxl-6{padding-bottom:2rem!important;padding-top:2rem!important}.py-xxl-7{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-xxl-8{padding-bottom:3rem!important;padding-top:3rem!important}.py-xxl-9{padding-bottom:4rem!important;padding-top:4rem!important}.py-xxl-10{padding-bottom:5rem!important;padding-top:5rem!important}.py-xxl-11{padding-bottom:6rem!important;padding-top:6rem!important}.py-xxl-12{padding-bottom:8rem!important;padding-top:8rem!important}.py-xxl-13{padding-bottom:10rem!important;padding-top:10rem!important}.py-xxl-14{padding-bottom:12rem!important;padding-top:12rem!important}.py-xxl-15{padding-bottom:16rem!important;padding-top:16rem!important}.py-xxl-16{padding-bottom:25rem!important;padding-top:25rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:.75rem!important}.pt-xxl-4{padding-top:1rem!important}.pt-xxl-5{padding-top:1.5rem!important}.pt-xxl-6{padding-top:2rem!important}.pt-xxl-7{padding-top:2.5rem!important}.pt-xxl-8{padding-top:3rem!important}.pt-xxl-9{padding-top:4rem!important}.pt-xxl-10{padding-top:5rem!important}.pt-xxl-11{padding-top:6rem!important}.pt-xxl-12{padding-top:8rem!important}.pt-xxl-13{padding-top:10rem!important}.pt-xxl-14{padding-top:12rem!important}.pt-xxl-15{padding-top:16rem!important}.pt-xxl-16{padding-top:25rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:.75rem!important}.pe-xxl-4{padding-right:1rem!important}.pe-xxl-5{padding-right:1.5rem!important}.pe-xxl-6{padding-right:2rem!important}.pe-xxl-7{padding-right:2.5rem!important}.pe-xxl-8{padding-right:3rem!important}.pe-xxl-9{padding-right:4rem!important}.pe-xxl-10{padding-right:5rem!important}.pe-xxl-11{padding-right:6rem!important}.pe-xxl-12{padding-right:8rem!important}.pe-xxl-13{padding-right:10rem!important}.pe-xxl-14{padding-right:12rem!important}.pe-xxl-15{padding-right:16rem!important}.pe-xxl-16{padding-right:25rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:.75rem!important}.pb-xxl-4{padding-bottom:1rem!important}.pb-xxl-5{padding-bottom:1.5rem!important}.pb-xxl-6{padding-bottom:2rem!important}.pb-xxl-7{padding-bottom:2.5rem!important}.pb-xxl-8{padding-bottom:3rem!important}.pb-xxl-9{padding-bottom:4rem!important}.pb-xxl-10{padding-bottom:5rem!important}.pb-xxl-11{padding-bottom:6rem!important}.pb-xxl-12{padding-bottom:8rem!important}.pb-xxl-13{padding-bottom:10rem!important}.pb-xxl-14{padding-bottom:12rem!important}.pb-xxl-15{padding-bottom:16rem!important}.pb-xxl-16{padding-bottom:25rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:.75rem!important}.ps-xxl-4{padding-left:1rem!important}.ps-xxl-5{padding-left:1.5rem!important}.ps-xxl-6{padding-left:2rem!important}.ps-xxl-7{padding-left:2.5rem!important}.ps-xxl-8{padding-left:3rem!important}.ps-xxl-9{padding-left:4rem!important}.ps-xxl-10{padding-left:5rem!important}.ps-xxl-11{padding-left:6rem!important}.ps-xxl-12{padding-left:8rem!important}.ps-xxl-13{padding-left:10rem!important}.ps-xxl-14{padding-left:12rem!important}.ps-xxl-15{padding-left:16rem!important}.ps-xxl-16{padding-left:25rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.bg-cover{background:no-repeat 50%/cover}@media (max-width:991.98px){.bg-between{background-image:none!important}}@media (min-width:992px){.bg-between{background-position:0,100%;background-repeat:no-repeat;background-size:auto 70%}}.bg-gradient-light-white{background-image:linear-gradient(180deg,#f9fbfd 0,#fff)}.bg-gradient-dark-black{background-image:linear-gradient(180deg,#1b2a4e 0,#161c2d)}.bg-gradient-multicolor{background-image:conic-gradient(from 52deg at 50% 50%,#8024a0 0deg,#31eec1 33deg,#6924a0 222deg,#d6723b 264deg,#d5498c 295deg,#8024a0 1turn)}.bg-pattern-2{background-image:linear-gradient(180deg,transparent 0,#161c2d),url(../img/patterns/pattern-2.png)}.img-skewed{perspective:1500px;transform-style:preserve-3d}.img-skewed-start{perspective-origin:0}.img-skewed-start .img-skewed-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:rotateY(-35deg) rotateX(15deg)}.img-skewed-end{perspective-origin:100%}.img-skewed-end .img-skewed-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:rotateY(35deg) rotateX(15deg)}.lift{transition:box-shadow .25s ease,transform .25s ease}.lift:focus,.lift:hover{box-shadow:0 1rem 2.5rem rgba(22,28,45,.1),0 .5rem 1rem -.75rem rgba(22,28,45,.1)!important;transform:translate3d(0,-3px,0)}.lift-lg:focus,.lift-lg:hover{box-shadow:0 2rem 5rem rgba(22,28,45,.1),0 .5rem 1rem -.75rem rgba(22,28,45,.05)!important;transform:translate3d(0,-5px,0)}.overlay{position:relative}.overlay:before{border-radius:inherit;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.overlay-primary:before{background-color:#335eea}.overlay-gradient-primary-end:before{background-image:linear-gradient(180deg,transparent,#335eea)}@media (min-width:992px){.overlay-gradient-primary-end:before{background-image:linear-gradient(90deg,transparent,#335eea 50%,#335eea)}}.overlay-gradient-primary-down:before,.overlay-gradient-primary-start:before{background-image:linear-gradient(180deg,transparent,#335eea)}@media (min-width:992px){.overlay-gradient-primary-start:before{background-image:linear-gradient(270deg,transparent,#335eea 50%,#335eea)}}.overlay-secondary:before{background-color:#506690}.overlay-gradient-secondary-end:before{background-image:linear-gradient(180deg,transparent,#506690)}@media (min-width:992px){.overlay-gradient-secondary-end:before{background-image:linear-gradient(90deg,transparent,#506690 50%,#506690)}}.overlay-gradient-secondary-down:before,.overlay-gradient-secondary-start:before{background-image:linear-gradient(180deg,transparent,#506690)}@media (min-width:992px){.overlay-gradient-secondary-start:before{background-image:linear-gradient(270deg,transparent,#506690 50%,#506690)}}.overlay-success:before{background-color:#42ba96}.overlay-gradient-success-end:before{background-image:linear-gradient(180deg,transparent,#42ba96)}@media (min-width:992px){.overlay-gradient-success-end:before{background-image:linear-gradient(90deg,transparent,#42ba96 50%,#42ba96)}}.overlay-gradient-success-down:before,.overlay-gradient-success-start:before{background-image:linear-gradient(180deg,transparent,#42ba96)}@media (min-width:992px){.overlay-gradient-success-start:before{background-image:linear-gradient(270deg,transparent,#42ba96 50%,#42ba96)}}.overlay-info:before{background-color:#7c69ef}.overlay-gradient-info-end:before{background-image:linear-gradient(180deg,transparent,#7c69ef)}@media (min-width:992px){.overlay-gradient-info-end:before{background-image:linear-gradient(90deg,transparent,#7c69ef 50%,#7c69ef)}}.overlay-gradient-info-down:before,.overlay-gradient-info-start:before{background-image:linear-gradient(180deg,transparent,#7c69ef)}@media (min-width:992px){.overlay-gradient-info-start:before{background-image:linear-gradient(270deg,transparent,#7c69ef 50%,#7c69ef)}}.overlay-warning:before{background-color:#fad776}.overlay-gradient-warning-end:before{background-image:linear-gradient(180deg,transparent,#fad776)}@media (min-width:992px){.overlay-gradient-warning-end:before{background-image:linear-gradient(90deg,transparent,#fad776 50%,#fad776)}}.overlay-gradient-warning-down:before,.overlay-gradient-warning-start:before{background-image:linear-gradient(180deg,transparent,#fad776)}@media (min-width:992px){.overlay-gradient-warning-start:before{background-image:linear-gradient(270deg,transparent,#fad776 50%,#fad776)}}.overlay-danger:before{background-color:#df4759}.overlay-gradient-danger-end:before{background-image:linear-gradient(180deg,transparent,#df4759)}@media (min-width:992px){.overlay-gradient-danger-end:before{background-image:linear-gradient(90deg,transparent,#df4759 50%,#df4759)}}.overlay-gradient-danger-down:before,.overlay-gradient-danger-start:before{background-image:linear-gradient(180deg,transparent,#df4759)}@media (min-width:992px){.overlay-gradient-danger-start:before{background-image:linear-gradient(270deg,transparent,#df4759 50%,#df4759)}}.overlay-light:before{background-color:#f9fbfd}.overlay-gradient-light-end:before{background-image:linear-gradient(180deg,transparent,#f9fbfd)}@media (min-width:992px){.overlay-gradient-light-end:before{background-image:linear-gradient(90deg,transparent,#f9fbfd 50%,#f9fbfd)}}.overlay-gradient-light-down:before,.overlay-gradient-light-start:before{background-image:linear-gradient(180deg,transparent,#f9fbfd)}@media (min-width:992px){.overlay-gradient-light-start:before{background-image:linear-gradient(270deg,transparent,#f9fbfd 50%,#f9fbfd)}}.overlay-dark:before{background-color:#1b2a4e}.overlay-gradient-dark-end:before{background-image:linear-gradient(180deg,transparent,#1b2a4e)}@media (min-width:992px){.overlay-gradient-dark-end:before{background-image:linear-gradient(90deg,transparent,#1b2a4e 50%,#1b2a4e)}}.overlay-gradient-dark-down:before,.overlay-gradient-dark-start:before{background-image:linear-gradient(180deg,transparent,#1b2a4e)}@media (min-width:992px){.overlay-gradient-dark-start:before{background-image:linear-gradient(270deg,transparent,#1b2a4e 50%,#1b2a4e)}}.overlay-primary-desat:before{background-color:#6c8aec}.overlay-gradient-primary-desat-end:before{background-image:linear-gradient(180deg,transparent,#6c8aec)}@media (min-width:992px){.overlay-gradient-primary-desat-end:before{background-image:linear-gradient(90deg,transparent,#6c8aec 50%,#6c8aec)}}.overlay-gradient-primary-desat-down:before,.overlay-gradient-primary-desat-start:before{background-image:linear-gradient(180deg,transparent,#6c8aec)}@media (min-width:992px){.overlay-gradient-primary-desat-start:before{background-image:linear-gradient(270deg,transparent,#6c8aec 50%,#6c8aec)}}.overlay-black:before{background-color:#161c2d}.overlay-gradient-black-end:before{background-image:linear-gradient(180deg,transparent,#161c2d)}@media (min-width:992px){.overlay-gradient-black-end:before{background-image:linear-gradient(90deg,transparent,#161c2d 50%,#161c2d)}}.overlay-gradient-black-down:before,.overlay-gradient-black-start:before{background-image:linear-gradient(180deg,transparent,#161c2d)}@media (min-width:992px){.overlay-gradient-black-start:before{background-image:linear-gradient(270deg,transparent,#161c2d 50%,#161c2d)}}.overlay-white:before{background-color:#fff}.overlay-gradient-white-end:before{background-image:linear-gradient(180deg,transparent,#fff)}@media (min-width:992px){.overlay-gradient-white-end:before{background-image:linear-gradient(90deg,transparent,#fff 50%,#fff)}}.overlay-gradient-white-down:before,.overlay-gradient-white-start:before{background-image:linear-gradient(180deg,transparent,#fff)}@media (min-width:992px){.overlay-gradient-white-start:before{background-image:linear-gradient(270deg,transparent,#fff 50%,#fff)}}.overlay-10:before{opacity:.1}.overlay-20:before{opacity:.2}.overlay-30:before{opacity:.3}.overlay-40:before{opacity:.4}.overlay-50:before{opacity:.5}.overlay-60:before{opacity:.6}.overlay-70:before{opacity:.7}.overlay-80:before{opacity:.8}.overlay-90:before{opacity:.9}.center{left:50%;top:50%;transform:translate(-50%,-50%)}.shadow-multicolor{box-shadow:-300px 100px 300px rgba(80,26,232,.2),300px -100px 300px rgba(36,161,252,.2)}@media (min-width:576px){.w-cover{width:calc(100% + 50vw - 270px + 2.5rem)}}@media (min-width:768px){.w-cover{width:calc(100% + 50vw - 360px + 2.5rem)}}@media (min-width:992px){.w-cover{width:calc(100% + 50vw - 480px + 2.5rem)}}@media (min-width:1200px){.w-cover{width:calc(100% + 50vw - 520px + 2.5rem)}}@media (max-width:991.98px){.font-size-lg{font-size:1.0625rem!important}}html{overflow-x:hidden}@media (hover:none){body{overflow-x:hidden}}@font-face{font-family:HKGroteskPro;font-weight:400;src:url(../fonts/HK%20Grotesk%20Pro/HKGroteskPro-Regular.woff2) format("woff2"),url(../fonts/HK%20Grotesk%20Pro/HKGroteskPro-Regular.woff) format("woff")}@font-face{font-family:HKGroteskPro;font-weight:600;src:url(../fonts/HK%20Grotesk%20Pro/HKGroteskPro-Medium.woff2) format("woff2"),url(../fonts/HK%20Grotesk%20Pro/HKGroteskPro-Medium.woff) format("woff")}@font-face{font-family:HKGroteskPro;font-weight:700;src:url(../fonts/HK%20Grotesk%20Pro/HKGroteskPro-Bold.woff2) format("woff2"),url(../fonts/HK%20Grotesk%20Pro/HKGroteskPro-Bold.woff) format("woff")}@font-face{font-family:Feather;font-style:normal;font-weight:400;src:url(../fonts/Feather/Feather.ttf?sdxovp) format("truetype"),url(../fonts/Feather/Feather.woff?sdxovp) format("woff"),url(../fonts/Feather/Feather.svg?sdxovp#Feather) format("svg")}.h1,.h2,h1,h2{margin-bottom:1rem}.h1,.h2,.h3,.h4,h1,h2,h3,h4{letter-spacing:-.01em}.h1,h1{line-height:1.3}@media (max-width:991.98px){.h1,h1{font-size:1.875rem}}.h2,h2{line-height:1.35}@media (max-width:991.98px){.h2,h2{font-size:1.5rem}}.h3,h3{line-height:1.4}@media (max-width:991.98px){.h3,h3{font-size:1.125rem}}.h4,h4{line-height:1.45}@media (max-width:991.98px){.h4,h4{font-size:1.0625rem}}.h5,h5{line-height:1.5}.h6,h6{line-height:1.55}.h6.text-uppercase,.text-uppercase.h6,h6.text-uppercase{letter-spacing:.08em}.display-1,.display-2,.display-3,.display-4{letter-spacing:-.02em}.display-1{line-height:1.2}@media (max-width:991.98px){.display-1{font-size:3.125rem}}.display-2{line-height:1.2}@media (max-width:991.98px){.display-2{font-size:2.5rem}}.display-3{line-height:1.2}@media (max-width:991.98px){.display-3{font-size:2.25rem}}.display-4{line-height:1.2}@media (max-width:991.98px){.display-4{font-size:2rem}.lead{font-size:1.1875rem}}.blockquote-img{max-height:2.5rem;max-width:100%;width:auto}.blockquote-footer{margin-top:0}.blockquote-footer:before{display:none}.list-social-icon{height:auto;max-width:1.25rem}.hr-sm{width:60px}.hr-sm:not([size]){height:2px}.hr-md{width:100px}.hr-md:not([size]){height:2px}code{line-height:1.35}.img-cover{height:auto;margin-left:calc(50% - 50vw);width:100vw}.img-fluid>img,.img-fluid>svg{height:inherit;max-width:inherit}.figure{display:block}.figure-img{margin-bottom:1rem}[class^=container]{padding-left:1.25rem;padding-right:1.25rem;position:relative;z-index:1}[class^=col]{position:relative}.table-align-middle tbody>tr>td,.table-align-middle thead>tr>th{vertical-align:middle}.form-floating>label{color:#869ab8}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{font-size:.75rem}.form-floating>.form-control:not(:-ms-input-placeholder)~label{font-size:.75rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{font-size:.75rem}.form-check{margin-bottom:0}.form-check+.form-check{margin-top:.125rem}.form-check-dark .form-check-input{background-color:rgba(255,255,255,.2)}.form-check-dark .form-check-input:checked{background-color:#fff}.form-switch{min-height:1.375rem}.form-switch>.form-check-input{height:1.375rem}.form-switch>.form-check-label{margin-top:calc(.6875rem - .8em)}.form-check-dark.form-switch .form-check-input,.form-check-dark.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-check-dark.form-switch .form-check-input:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23335EEA'/%3E%3C/svg%3E")}.form-control-xs{font-size:.9375rem;line-height:1.6;min-height:calc(2rem + 2px);padding:.25rem .625rem}.form-control-flush,.form-floating>.form-control-flush{border-left-width:0;border-radius:0;border-right-width:0;border-top-width:0;padding-left:0;padding-right:0}.form-floating>.form-control-flush~label{border-width:0;padding-left:0;padding-right:0}.form-group{margin-bottom:1rem}.form-select-xs{background-position:right .625rem center;background-size:.75em;font-size:.9375rem;height:calc(2rem + 2px);line-height:1.6;padding:.25rem calc(1.25rem + .75em) .25rem .625rem}.input-group-xs .form-control{min-height:calc(2rem + 2px)}.input-group-xs .form-control,.input-group-xs .input-group-text{font-size:.9375rem;line-height:1.6;padding:.25rem .625rem}.btn>img{max-height:1em;width:auto}.btn:not([class*=btn-outline]){border-color:transparent!important}.btn-xs{font-size:.9375rem;padding:.25rem .625rem}.btn-white{background-color:#fff;color:#335eea}.btn-white:focus,.btn-white:hover{background-color:#fff;color:#1c4ce8}.btn-white.active{background-color:#f2f2f2;color:#1c4ce8}.btn-group .btn-white{border-color:#d9e2ef!important;color:#869ab8}.btn-group .btn-white.active{background-color:#f2f2f2;box-shadow:none;color:#768daf}.btn-gray-300-20{background-color:rgba(217,226,239,.2);color:#fff}.btn-gray-300-20.active,.btn-gray-300-20:focus,.btn-gray-300-20:hover{background-color:rgba(217,226,239,.25);color:#fff}.btn-gray-400{background-color:#c6d3e6;color:#fff}.btn-gray-400.active,.btn-gray-400:focus,.btn-gray-400:hover{background-color:#b4c5de;color:#f2f2f2}.btn-gray-400-10{background-color:rgba(198,211,230,.1);color:#fff}.btn-gray-400-10.active,.btn-gray-400-10:focus,.btn-gray-400-10:hover{background-color:rgba(198,211,230,.15);color:#fff}.btn-outline-white{border-color:#d9e2ef;color:#161c2d}.btn-outline-white.active,.btn-outline-white:focus,.btn-outline-white:hover{background-color:#f2f2f2;border-color:#c6d3e6;color:#161c2d}.btn-outline-gray-300{border-color:#d9e2ef;color:#335eea}.btn-outline-gray-300.active,.btn-outline-gray-300:focus,.btn-outline-gray-300:hover{background-color:#335eea;border-color:#335eea;color:#fff}.btn-primary-soft{background-color:rgba(51,94,234,.1);color:#335eea}.btn-primary-soft.active,.btn-primary-soft:focus,.btn-primary-soft:hover{background-color:rgba(51,94,234,.15);color:#335eea}.btn-secondary-soft{background-color:rgba(80,102,144,.1);color:#506690}.btn-secondary-soft.active,.btn-secondary-soft:focus,.btn-secondary-soft:hover{background-color:rgba(80,102,144,.15);color:#506690}.btn-success-soft{background-color:rgba(66,186,150,.1);color:#42ba96}.btn-success-soft.active,.btn-success-soft:focus,.btn-success-soft:hover{background-color:rgba(66,186,150,.15);color:#42ba96}.btn-info-soft{background-color:rgba(124,105,239,.1);color:#7c69ef}.btn-info-soft.active,.btn-info-soft:focus,.btn-info-soft:hover{background-color:rgba(124,105,239,.15);color:#7c69ef}.btn-warning-soft{background-color:rgba(250,215,118,.1);color:#fad776}.btn-warning-soft.active,.btn-warning-soft:focus,.btn-warning-soft:hover{background-color:rgba(250,215,118,.15);color:#fad776}.btn-danger-soft{background-color:rgba(223,71,89,.1);color:#df4759}.btn-danger-soft.active,.btn-danger-soft:focus,.btn-danger-soft:hover{background-color:rgba(223,71,89,.15);color:#df4759}.btn-light-soft{background-color:rgba(249,251,253,.1);color:#f9fbfd}.btn-light-soft.active,.btn-light-soft:focus,.btn-light-soft:hover{background-color:rgba(249,251,253,.15);color:#f9fbfd}.btn-dark-soft{background-color:rgba(27,42,78,.1);color:#1b2a4e}.btn-dark-soft.active,.btn-dark-soft:focus,.btn-dark-soft:hover{background-color:rgba(27,42,78,.15);color:#1b2a4e}.btn-primary-desat-soft{background-color:rgba(108,138,236,.1);color:#6c8aec}.btn-primary-desat-soft.active,.btn-primary-desat-soft:focus,.btn-primary-desat-soft:hover{background-color:rgba(108,138,236,.15);color:#6c8aec}.btn-black-soft{background-color:rgba(22,28,45,.1);color:#161c2d}.btn-black-soft.active,.btn-black-soft:focus,.btn-black-soft:hover{background-color:rgba(22,28,45,.15);color:#161c2d}.btn-white-soft{background-color:rgba(255,255,255,.1);color:#fff}.btn-white-soft.active,.btn-white-soft:focus,.btn-white-soft:hover{background-color:rgba(255,255,255,.15);color:#fff}.btn-pill{border-radius:50rem}.btn-rounded-circle{border-radius:50rem;padding-left:.8125rem;padding-right:.8125rem}.btn-rounded-circle>*{display:block;line-height:1;width:1em}.btn-group-lg>.btn-rounded-circle.btn,.btn-rounded-circle.btn-lg{padding-left:1.122rem;padding-right:1.122rem}.btn-group-sm>.btn-rounded-circle.btn,.btn-rounded-circle.btn-sm{padding-left:.5625rem;padding-right:.5625rem}.btn-rounded-circle.btn-xs{padding-left:.25rem;padding-right:.25rem}.dropdown-menu{padding-left:1.75rem;padding-right:1.75rem}.dropdown-item{margin-left:-1.75rem;margin-right:-1.75rem;min-width:100%;width:auto}.dropdown-item:focus,.dropdown-item:hover{outline:none}.dropdown-item+.dropdown-item{margin-top:.45rem}.dropdown-link{color:inherit}.dropdown-link:hover{text-decoration:inherit}.dropdown-link:focus,.dropdown-link:hover{outline:none}.dropdown-header{font-size:.75rem;font-weight:600;letter-spacing:.08em;line-height:1.55;margin-left:-1.75rem;margin-right:-1.75rem;padding-bottom:.5rem;padding-top:0;text-transform:uppercase}.dropdown-toggle:after{border:none!important;content:"\e92e";font-family:Feather;vertical-align:middle}.dropend>.dropdown-toggle:after{content:"\e930"}.dropdown-menu-xs{min-width:0;padding:1rem 1.25rem}.dropdown-menu-md{min-width:22rem}.dropdown-menu-lg{min-width:35rem}.dropdown-menu-xl{min-width:42rem}.dropdown-menu-lg,.dropdown-menu-xl{padding:2.375rem 2.5rem}.dropdown-menu-lg .dropdown-item,.dropdown-menu-xl .dropdown-header{margin-left:-2.5rem;margin-right:-2.5rem;padding-left:2.5rem;padding-right:2.5rem}.dropend>.dropdown-menu{top:-1.625rem}.navbar{transition:all .2s ease-in-out;transition-property:background-color,color;z-index:1030}@media (max-width:991.98px){.navbar-dark .navbar-nav .nav-item .nav-link{color:#506690}.navbar-dark .navbar-nav .nav-item.active .nav-link,.navbar-dark .navbar-nav .nav-item .nav-link.active,.navbar-dark .navbar-nav .nav-item .nav-link:focus,.navbar-dark .navbar-nav .nav-item .nav-link:hover{color:#335eea}.navbar-dark .navbar-collapse .navbar-toggler{color:#506690}}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl{padding-left:1.25rem!important;padding-right:1.25rem!important}.navbar-brand{font-weight:600}.navbar-brand-img{max-height:2.4rem;width:auto}.navbar-dark .navbar-brand{filter:brightness(0) invert(1)}@media (max-width:991.98px){.navbar-btn{border-top-left-radius:0;border-top-right-radius:0;font-size:1.0625rem;padding:.8125rem 1.25rem;width:100%}}.navbar-nav .nav-link{font-weight:600}.navbar-nav .nav-link:focus,.navbar-nav .nav-link:hover{outline:none}.navbar-dark.fixed-top>.container{position:relative}.navbar-dark.fixed-top>.container:after{border-top:1px solid rgba(255,255,255,.2);bottom:-1.25rem;content:"";left:0;position:absolute;right:0}@media (max-width:991.98px){.navbar-collapse{background-color:#fff;border-radius:.375rem;box-shadow:0 1.5rem 4rem rgba(22,28,45,.15);height:auto;left:1rem;max-height:calc(100% - 2rem)!important;overflow-x:hidden;overflow-y:scroll;position:fixed;top:1rem;width:calc(100% - 2rem)}.navbar-collapse.collapsing,.navbar-collapse.show{transform-origin:top right;transition:all .2s ease-in-out;transition-property:opacity,transform}.navbar-collapse.show{opacity:1;transform:scale(1)}.navbar-collapse.collapsing{opacity:0;transform:scale(.9)}}.navbar .navbar-toggler{margin-left:auto}.navbar-collapse .navbar-toggler{position:absolute;right:1rem;top:1rem;z-index:1}@media (min-width:992px){.navbar-collapse .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-collapse .navbar-nav .nav-item{padding:1.5rem}.navbar-collapse .navbar-nav .nav-item+.nav-item{border-top:1px solid #f1f4f8}.navbar-collapse .navbar-nav .nav-link{padding-bottom:0;padding-top:0}}.navbar-nav .dropdown-menu{box-shadow:none}@media (min-width:992px){.navbar-nav .dropdown-menu{box-shadow:0 1.5rem 4rem rgba(22,28,45,.15)}}@media (max-width:991.98px){.navbar-collapse .navbar-nav .dropdown-menu{min-width:0;padding:0}.navbar-collapse .navbar-nav .dropdown>.dropdown-menu{display:block!important}.navbar-collapse .navbar-nav .dropend>.dropdown-menu{padding-bottom:1rem;padding-left:.5rem;padding-top:1rem}}@media (min-width:992px){.navbar-collapse .navbar-nav .dropend>.dropdown-menu{left:100%;right:auto}}@media (max-width:991.98px){.navbar-collapse .navbar-nav .dropdown-header,.navbar-collapse .navbar-nav .dropdown-item{margin-left:0;margin-right:0;padding-left:0;padding-right:0}}.navbar-nav .dropdown>.dropdown-toggle:after{display:none}@media (max-width:991.98px){.navbar-collapse .navbar-nav .dropdown>.dropdown-toggle{margin-bottom:1.5rem;pointer-events:none}}.navbar-nav .dropend>.dropdown-toggle{display:flex}.navbar-nav .dropend>.dropdown-toggle:after{margin-left:auto}@media (max-width:991.98px){.navbar-collapse .navbar-nav .dropend>.dropdown-toggle:after{content:"\e92e"}.navbar-collapse .navbar-nav .dropend>.dropdown-toggle[aria-expanded=true]:after{transform:rotate(180deg);transform-origin:center center}}.navbar-nav .dropdown-img-start{align-items:center;background:no-repeat 50%/cover;border-bottom-left-radius:.375rem;border-top-left-radius:.375rem;display:none;flex-direction:column;height:100%;justify-content:center;padding:1.625rem 1.75rem}@media (min-width:992px){.navbar-nav .dropdown-img-start{display:flex}}.navbar-nav .dropdown-img-start:before{background-color:rgba(51,94,234,.8);border-radius:inherit;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.navbar-nav .dropdown-img-start *{position:relative}@media (min-width:992px){.navbar-nav .dropdown-menu-lg .dropdown-img-start,.navbar-nav .dropdown-menu-xl .dropdown-img-start{padding:2.375rem 2.5rem}.navbar-nav .dropdown-body{padding:1.625rem 1.75rem}.navbar-nav .dropdown-menu-lg .dropdown-body,.navbar-nav .dropdown-menu-xl .dropdown-body{padding:2.375rem 2.5rem}}.navbar-nav .dropdown-menu .list-group-item{align-items:center;color:inherit;display:flex;padding-bottom:1rem;padding-top:1rem}.navbar-nav .dropdown-menu .list-group-item:hover{text-decoration:none}@media (min-width:992px){.navbar-nav .dropdown-menu{display:none;opacity:0;transition:all .2s ease-in-out;transition-property:opacity,transform}.navbar-nav .dropend>.dropdown-menu{transform:translateY(10px)}.navbar-nav .dropdown>.dropdown-menu{left:50%;transform:translate(-50%,10px)}.navbar-nav .dropdown-menu.showing{display:block}.navbar-nav .dropdown-menu.show{display:block;opacity:1}.navbar-nav .dropend>.dropdown-menu.show{transform:translateY(0)}.navbar-nav .dropdown>.dropdown-menu.show{transform:translate(-50%)}}.card{position:relative;width:100%}.card-header{background-color:transparent;border-bottom:1px solid #f1f4f8}.card-body{display:block;flex-grow:0}.card-footer{background-color:unset}.card-body,.card-footer,.card-img,.card-img-end,.card-img-start,.card-img-top,.card-meta{min-height:1px;position:relative}a.card,a.card-body,a.card-footer,a.card-meta{color:inherit}a.card-body:hover,a.card-footer:hover,a.card-meta:hover,a.card:hover{text-decoration:none}.card-flush{background-color:unset}.card-flush>:not(.card-btn){padding-left:0;padding-right:0}.card-border{position:relative}.card-border:after{border-bottom:calc(.375rem - 2px) solid transparent;border-top-color:inherit;border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-top-style:solid;border-top-width:2px;content:"";position:absolute;right:0;top:0;width:100%}.card-border-lg:after{border-bottom-width:calc(.375rem - 3px);border-top-width:3px}.card-border-xl:after{border-bottom-width:calc(.375rem - 3px);border-top-width:4px}@media (min-width:768px){.card-row .card-body{padding:4rem 2.5rem}.card-row .card-meta{padding-left:2.5rem;padding-right:2.5rem}}.card-img-end{border-radius:.375rem .375rem 0 0}@media (min-width:768px){.card-img-end{border-radius:0 .375rem .375rem 0}}.card-img-start{border-radius:.375rem .375rem 0 0}@media (min-width:768px){.card-img-start{border-radius:.375rem 0 0 .375rem}.card-img-slider{height:100%;width:100%}.card-img-slider *{height:inherit!important;width:inherit!important}}.card-img-overlay{display:flex;flex-direction:column;padding:2rem}.card-img-overlay .card-body{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;margin:auto -2rem -2rem}.card-img-overlay-hover{overflow:hidden}.card-img-overlay-hover .card-body{transform:translateY(110%);transition:all .3s ease}.card-img-overlay-hover:hover .card-body{transform:translateY(0)}@media (min-width:576px) and (max-width:767.98px){.card-group{flex-direction:column!important}.card-group>.card{flex:auto}}.card-meta{align-items:center;display:flex;flex-wrap:wrap;padding:0 2rem 1.5rem}.card-meta-divider{margin:0 0 1.5rem;width:100%}.card-btn:last-child{border-top-left-radius:0;border-top-right-radius:0}.card-zoom{border-radius:inherit;overflow:hidden!important}.card-zoom>[class*=card-img]{transform-origin:center center;transition:all .3s ease}.card:hover>.card-zoom>[class*=card-img]{transform:scale(1.1)}.card-list .list-link{position:relative}.card-list .list-link:before{border-right:2px solid #335eea;bottom:0;content:"";display:none;left:-2rem;position:absolute;top:0}.card-list .active .list-link,.card-list .list-link:hover{color:#161c2d!important}.card-list .active .list-link:before{display:block}@media (max-width:767.98px){.card-bleed{border-radius:0;margin-left:-1.25rem;margin-right:-1.25rem;min-width:100%;width:auto}.card-bleed .card-body,.card-bleed .card-footer,.card-bleed .card-header{border-radius:0;padding-left:1.25rem;padding-right:1.25rem}.card-bleed .card-list .list-link:before{left:-1.25rem}}.accordion-button:not(.collapsed){box-shadow:none}.accordion-button:not([data-bs-toggle=collapse]):after{display:none}.accordion-button:after{margin-left:1rem}.accordion-body{padding-top:0}.breadcrumb-item{font-size:.9375rem}.breadcrumb-item+.breadcrumb-item:before{content:"\e930";font-family:Feather}.breadcrumb-scroll{display:flex;flex-wrap:nowrap;overflow-y:auto}.breadcrumb-scroll .breadcrumb-item{white-space:nowrap}.breadcrumb-scroll::-webkit-scrollbar{display:none}.pagination-sm .page-link{font-size:1.0625rem;line-height:1.6}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.pagination-lg .page-link{font-size:1.0625rem;line-height:1.6}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.badge[href]:hover{text-decoration:none}.badge-lg{padding:.7em 1.15em}.badge-rounded-circle{border-radius:50rem;height:calc(1em + .5rem);padding-left:.25rem;padding-right:.25rem}.badge-rounded-circle>*{display:block;width:1em}.badge-rounded-circle.badge-lg{height:2.4em;padding-left:.7em;padding-right:.7em}.badge-float{position:absolute;z-index:1000}.badge-float-inside{right:1rem;top:1rem}.badge-float-outside{right:-.5rem;top:-.5rem}.badge.bg-white-soft.active{background-color:#fff!important;color:#335eea!important}.badge.bg-white-soft.active:focus,.badge.bg-white-soft.active:hover{background-color:#f2f2f2;color:#335eea}.badge.bg-secondary-soft.active{background-color:#335eea!important;color:#fff!important}.badge.bg-secondary-soft.active:focus,.badge.bg-secondary-soft.active:hover{background-color:#1c4ce8;color:#fff}.badge.bg-primary-soft{background-color:rgba(51,94,234,.1);color:#335eea}.badge.bg-primary-soft[href]:focus,.badge.bg-primary-soft[href]:hover{background-color:rgba(51,94,234,.2);color:#335eea}.badge.bg-secondary-soft{background-color:rgba(80,102,144,.1);color:#506690}.badge.bg-secondary-soft[href]:focus,.badge.bg-secondary-soft[href]:hover{background-color:rgba(80,102,144,.2);color:#506690}.badge.bg-success-soft{background-color:rgba(66,186,150,.1);color:#42ba96}.badge.bg-success-soft[href]:focus,.badge.bg-success-soft[href]:hover{background-color:rgba(66,186,150,.2);color:#42ba96}.badge.bg-info-soft{background-color:rgba(124,105,239,.1);color:#7c69ef}.badge.bg-info-soft[href]:focus,.badge.bg-info-soft[href]:hover{background-color:rgba(124,105,239,.2);color:#7c69ef}.badge.bg-warning-soft{background-color:rgba(250,215,118,.1);color:#fad776}.badge.bg-warning-soft[href]:focus,.badge.bg-warning-soft[href]:hover{background-color:rgba(250,215,118,.2);color:#fad776}.badge.bg-danger-soft{background-color:rgba(223,71,89,.1);color:#df4759}.badge.bg-danger-soft[href]:focus,.badge.bg-danger-soft[href]:hover{background-color:rgba(223,71,89,.2);color:#df4759}.badge.bg-light-soft{background-color:rgba(249,251,253,.1);color:#f9fbfd}.badge.bg-light-soft[href]:focus,.badge.bg-light-soft[href]:hover{background-color:rgba(249,251,253,.2);color:#f9fbfd}.badge.bg-dark-soft{background-color:rgba(27,42,78,.1);color:#1b2a4e}.badge.bg-dark-soft[href]:focus,.badge.bg-dark-soft[href]:hover{background-color:rgba(27,42,78,.2);color:#1b2a4e}.badge.bg-primary-desat-soft{background-color:rgba(108,138,236,.1);color:#6c8aec}.badge.bg-primary-desat-soft[href]:focus,.badge.bg-primary-desat-soft[href]:hover{background-color:rgba(108,138,236,.2);color:#6c8aec}.badge.bg-black-soft{background-color:rgba(22,28,45,.1);color:#161c2d}.badge.bg-black-soft[href]:focus,.badge.bg-black-soft[href]:hover{background-color:rgba(22,28,45,.2);color:#161c2d}.badge.bg-white-soft{background-color:rgba(255,255,255,.1);color:#fff}.badge.bg-white-soft[href]:focus,.badge.bg-white-soft[href]:hover{background-color:rgba(255,255,255,.2);color:#fff}.badge.bg-gray-700-soft{background-color:rgba(80,102,144,.1);color:#506690}.badge.bg-gray-700-soft[href]:focus,.badge.bg-gray-700-soft[href]:hover{background-color:rgba(80,102,144,.2);color:#506690}.badge.bg-gray-600{background-color:#869ab8;color:#fff}.badge.bg-info,.badge.bg-primary,.badge.bg-secondary,.badge.bg-success{color:#fff}.badge.bg-warning{color:#1b2a4e}.badge.bg-danger{color:#fff}.badge.bg-light{color:#1b2a4e}.badge.bg-black,.badge.bg-dark,.badge.bg-primary-desat{color:#fff}.badge.bg-white{color:#1b2a4e}.alert-primary{background-color:#335eea;border-color:#335eea;color:#fff}.alert-primary .alert-link{color:#ccc}.alert-primary .alert-link,.alert-primary .btn-close{color:#fff}.alert-primary hr{background-color:#1c4ce8}.alert-secondary{background-color:#506690;border-color:#506690;color:#fff}.alert-secondary .alert-link{color:#ccc}.alert-secondary .alert-link,.alert-secondary .btn-close{color:#fff}.alert-secondary hr{background-color:#475a80}.alert-success{background-color:#42ba96;border-color:#42ba96;color:#fff}.alert-success .alert-link{color:#ccc}.alert-success .alert-link,.alert-success .btn-close{color:#fff}.alert-success hr{background-color:#3ba787}.alert-info{background-color:#7c69ef;border-color:#7c69ef;color:#fff}.alert-info .alert-link{color:#ccc}.alert-info .alert-link,.alert-info .btn-close{color:#fff}.alert-info hr{background-color:#6852ed}.alert-warning{background-color:#fad776;border-color:#fad776;color:#1b2a4e}.alert-warning .alert-link{color:#16223e}.alert-warning .alert-link,.alert-warning .btn-close{color:#1b2a4e}.alert-warning hr{background-color:#f9d05d}.alert-danger{background-color:#df4759;border-color:#df4759;color:#fff}.alert-danger .alert-link{color:#ccc}.alert-danger .alert-link,.alert-danger .btn-close{color:#fff}.alert-danger hr{background-color:#db3145}.alert-light{background-color:#f9fbfd;border-color:#f9fbfd;color:#1b2a4e}.alert-light .alert-link{color:#16223e}.alert-light .alert-link,.alert-light .btn-close{color:#1b2a4e}.alert-light hr{background-color:#e6eef7}.alert-dark{background-color:#1b2a4e;border-color:#1b2a4e;color:#fff}.alert-dark .alert-link{color:#ccc}.alert-dark .alert-link,.alert-dark .btn-close{color:#fff}.alert-dark hr{background-color:#14203b}.alert-primary-desat{background-color:#6c8aec;border-color:#6c8aec;color:#fff}.alert-primary-desat .alert-link{color:#ccc}.alert-primary-desat .alert-link,.alert-primary-desat .btn-close{color:#fff}.alert-primary-desat hr{background-color:#5578e9}.alert-black{background-color:#161c2d;border-color:#161c2d;color:#fff}.alert-black .alert-link{color:#ccc}.alert-black .alert-link,.alert-black .btn-close{color:#fff}.alert-black hr{background-color:#0e111c}.alert-white{background-color:#fff;border-color:#fff;color:#1b2a4e}.alert-white .alert-link{color:#16223e}.alert-white .alert-link,.alert-white .btn-close{color:#1b2a4e}.alert-white hr{background-color:#f2f2f2}.list-group-flush .list-group-item{padding-left:0;padding-right:0}.list-group-flush .list-group-item:first-child{border-top:0;padding-top:0!important}.list-group-flush .list-group-item:last-child{border-bottom:0;padding-bottom:0!important}.btn-close:focus,.btn-close:hover{outline:none}.modal-open .navbar.fixed-top{padding-right:inherit}.modal .btn-close{position:absolute;right:1.5rem;top:1.5rem;z-index:1000}.popover-header{color:#335eea;font-size:.75rem;margin-bottom:.5rem;padding-bottom:0}.popover-header:not(:empty)~.popover-body{padding-top:0}.avatar{display:inline-block;font-size:.625rem;height:1.875rem;position:relative;width:1.875rem}.avatar:after{background-image:url(../img/masks/avatar-status.svg),url(../img/masks/avatar-group.svg),url(../img/masks/avatar-group-hover.svg),url(../img/masks/avatar-group-hover-last.svg);content:"";height:0;position:absolute;width:0}.avatar-img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.avatar-title{align-items:center;background-color:#abbcd5;color:#fff;display:flex;height:100%;justify-content:center;width:100%}.avatar-offline:before,.avatar-online:before{border-radius:50%;bottom:5%;content:"";height:20%;position:absolute;right:5%;width:20%}.avatar-offline .avatar-img,.avatar-online .avatar-img{-webkit-mask-image:url(../img/masks/avatar-status.svg);mask-image:url(../img/masks/avatar-status.svg);-webkit-mask-size:100% 100%;mask-size:100% 100%}.avatar-online:before{background-color:#42ba96}.avatar-offline:before{background-color:#abbcd5}.avatar-xs{font-size:.33333rem;height:1rem;width:1rem}.avatar-sm{font-size:.5rem;height:1.5rem;width:1.5rem}.avatar-lg,.avatar-xl{font-size:.75rem;height:2.25rem;width:2.25rem}@media (min-width:992px){.avatar-xl{font-size:1.33333rem;height:4rem;width:4rem}}.avatar-xxl{font-size:1.33333rem;height:4rem;width:4rem}@media (min-width:992px){.avatar-xxl{font-size:1.66667rem;height:5rem;width:5rem}}.avatar.avatar-4by3{width:2.5rem}.avatar-xs.avatar-4by3{width:1.33333rem}.avatar-sm.avatar-4by3{width:2rem}.avatar-lg.avatar-4by3{width:3rem}.avatar-xl.avatar-4by3{width:5.33333rem}.avatar-xxl.avatar-4by3{width:6.66667rem}.avatar-group{display:inline-flex}.avatar-group .avatar+.avatar{margin-left:-.46875rem}.avatar-group .avatar-xs+.avatar-xs{margin-left:-.25rem}.avatar-group .avatar-sm+.avatar-sm{margin-left:-.375rem}.avatar-group .avatar-lg+.avatar-lg{margin-left:-.5625rem}.avatar-group .avatar-xl+.avatar-xl{margin-left:-1rem}.avatar-group .avatar-xxl+.avatar-xxl{margin-left:-1.25rem}.avatar-group .avatar:not(:last-child){-webkit-mask-image:url(../img/masks/avatar-group.svg);mask-image:url(../img/masks/avatar-group.svg);-webkit-mask-size:100% 100%;mask-size:100% 100%}.avatar-group .avatar:hover{-webkit-mask-image:none;mask-image:none;z-index:1}.avatar-group .avatar:hover+.avatar{-webkit-mask-image:url(../img/masks/avatar-group-hover.svg);mask-image:url(../img/masks/avatar-group-hover.svg);-webkit-mask-size:100% 100%;mask-size:100% 100%}.avatar-group .avatar:hover+.avatar:last-child{-webkit-mask-image:url(../img/masks/avatar-group-hover-last.svg);mask-image:url(../img/masks/avatar-group-hover-last.svg)}.device,.device>.img-fluid{position:relative}.device:before{background-color:#f9fbfd;content:""}.device-screen,.device:before{-o-object-fit:cover;object-fit:cover;position:absolute}.device-iphonex:before,.device-iphonex>.device-screen{height:80.838323353%;left:16.4021164%;top:7.784431138%;width:66.137566137%}.device-macbook:before,.device-macbook>.device-screen{height:73.076923076%;left:13.38709677%;top:11.53846154%;width:73.548387096%}.device-combo{position:relative}.device-combo>.device{position:absolute}.device-combo-iphonex-iphonex{padding-bottom:130.250482%}.device-combo-iphonex-iphonex>.device-iphonex:first-child{bottom:0;left:0;width:65.5260116%;z-index:1}.device-combo-iphonex-iphonex>.device-iphonex:last-child{right:0;top:0;width:72.8323699%}.device-combo-iphonex-macbook,.device-combo-macbook-iphonex{padding-bottom:62.4260355%}.device-combo-iphonex-macbook>.device-macbook,.device-combo-macbook-iphonex>.device-macbook{width:91.7159763%}.device-combo-iphonex-macbook>.device-iphonex,.device-combo-macbook-iphonex>.device-iphonex{width:27.9585799%;z-index:1}.device-combo-macbook-iphonex>.device-macbook{left:0;top:0}.device-combo-iphonex-macbook>.device-macbook{right:0;top:0}.device-combo-macbook-iphonex>.device-iphonex{bottom:0;right:0}.device-combo-iphonex-macbook>.device-iphonex{bottom:0;left:0}.bg-dark .footer-brand{filter:brightness(0) invert(1)}.icon>svg{height:3rem;width:3rem}.icon[class*=text-]>svg [fill]:not([fill=none]){fill:currentColor!important}.icon-xs>svg{height:1.5rem;width:1.5rem}.icon-sm>svg{height:2.25rem;width:2.25rem}.icon-lg>svg{height:4rem;width:4rem}.icon-xl>svg{height:5rem;width:5rem}.icon-circle{align-items:center;border-radius:50%;display:inline-flex;height:4.1875rem;justify-content:center;width:4.1875rem}.icon-circle>.fe{font-size:1.875rem}.list{list-style-type:none;margin-bottom:0;padding-left:0}.list-item+.list-item{margin-top:.35rem}.list-link{align-items:center;color:#506690;display:flex;flex-wrap:nowrap;font-size:.9375rem}.list-link:focus,.list-link:hover{color:#335eea;text-decoration:none}.screenshot{border-radius:.625rem;box-shadow:25px 60px 125px -25px rgba(80,102,144,.1),16px 40px 75px -40px rgba(0,0,0,.2)}.section-border{position:relative}.section-border:before{border-color:inherit;border-style:solid;border-width:2px 0 0;content:"";left:0;position:absolute;right:0;top:0}.shape{pointer-events:none;position:absolute}.shape>*{display:block}.shape:not([class*=shape-blur]){overflow:hidden}.shape:not([class*=shape-blur])>*{transform:scale(2)}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.shape>svg{display:none}}.shape-top{left:0;right:0;top:0}.shape-top>*{transform-origin:bottom center}.shape-end{bottom:0;left:0;right:0;top:0}.shape-end>*{bottom:inherit;position:inherit;right:inherit;top:inherit;transform-origin:center left}.shape-bottom{bottom:0;left:0;right:0}.shape-bottom>*{transform-origin:top center}.shape-bottom-100{bottom:100%;left:0;right:0}.shape-bottom-100>*{transform-origin:top center}.shape-start{bottom:0;left:0;right:0;top:0}.shape-start>*{bottom:inherit;left:inherit;position:inherit;top:inherit;transform-origin:center right}.shape-fluid-x>*{height:auto;width:100%}.shape-fluid-y>*{height:100%;width:auto}.shape-flip-x{transform:scaleX(-1)}.shape-blur-1{left:0;right:0;top:0}@media (min-width:992px){.shape-blur-1{bottom:0;left:50%;right:auto}}.shape-blur-1>*{height:auto;width:100%}@media (min-width:992px){.shape-blur-1>*{height:100%;width:auto}}.shape-blur-2{left:0;right:0;top:0}@media (min-width:992px){.shape-blur-2{bottom:0;left:auto;right:50%}}.shape-blur-2>*{height:auto;width:100%}@media (min-width:992px){.shape-blur-2>*{float:right;height:100%;width:auto}}.shape-blur-3{left:0;right:0;top:0}.shape-blur-3>*{height:auto;width:100%}.shape-blur-4{bottom:0;left:50%;top:0;transform:translateX(-50%) scale(1.3);width:100%}.shape-blur-4>*{height:100%;margin-left:auto;margin-right:auto;width:auto}@media (min-width:992px){.sidenav{height:calc(100vh - 84px);overflow:auto;position:fixed;top:84px}.sidenav-start{left:0}.sidenav-end{right:0}}[data-aos=img-skewed-item-end],[data-aos=img-skewed-item-start]{-webkit-backface-visibility:hidden;backface-visibility:hidden;opacity:0;transition-property:opacity,transform;will-change:opacity,transform,-webkit-transform}[data-aos=img-skewed-item-end].aos-animate,[data-aos=img-skewed-item-start].aos-animate{opacity:1}[data-aos=img-skewed-item-start]{transform:rotateY(-20deg) rotateX(5deg) translate3d(0,100px,0)}[data-aos=img-skewed-item-start].aos-animate{transform:rotateY(-35deg) rotateX(15deg) translateZ(0)}[data-aos=img-skewed-item-end]{transform:rotateY(20deg) rotateX(5deg) translate3d(0,100px,0)}[data-aos=img-skewed-item-end].aos-animate{transform:rotateY(35deg) rotateX(15deg) translateZ(0)}#bp_container{background:rgba(255,255,255,.873)!important}#bp_container>*{box-shadow:none!important}.bp-x{display:none}.choices{cursor:pointer;position:relative}.choices:focus{outline:none}.choices:after{display:none}.choices>.dropdown-menu{width:100%}.choices>.dropdown-menu [class^=form-control]{margin-bottom:1rem;width:100%}.choices>.dropdown-menu>.dropdown-item.is-highlighted{color:#335eea}.choices>.form-control-xs+.dropdown-menu,.choices>.form-select-xs+.dropdown-menu{min-width:100%;padding:1rem 1.25rem;padding-left:1.25rem;padding-right:1.25rem;width:auto}.choices>.form-control-xs+.dropdown-menu>.dropdown-item,.choices>.form-select-xs+.dropdown-menu>.dropdown-item{margin-left:-1.25rem;margin-right:-1.25rem;padding-left:-1.25rem}.choices>.form-control-lg+.dropdown-menu,.choices>.form-select-lg+.dropdown-menu{padding-left:2.5rem;padding-right:2.5rem}.choices>.form-control-lg+.dropdown-menu>.dropdown-item,.choices>.form-select-lg+.dropdown-menu>.dropdown-item{margin-left:-2.5rem;margin-right:-2.5rem;padding-left:-2.5rem}.choices__placeholder{color:#869ab8;opacity:1}.choices.is-open>.form-control,.choices.is-open>.form-select{border-bottom-left-radius:0;border-bottom-right-radius:0}.choices.is-open>.form-control+.dropdown-menu,.choices.is-open>.form-select+.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.choices__list--multiple+.form-control{background-color:transparent;border-radius:0;border-width:0;display:inline-block;font-size:1.0625rem;min-height:0;padding:0;width:auto}.form-control-lg+.choices__list--multiple+.form-control,.form-control-sm+.choices__list--multiple+.form-control,.form-select-lg+.choices__list--multiple+.form-control,.form-select-sm+.choices__list--multiple+.form-control{font-size:1.0625rem}.choices__list--multiple{display:inline}.choices__list--multiple>.choices__item{background-color:#f9fbfd;border-radius:.25rem;display:inline-block;font-size:.9375rem;margin-right:.2rem;padding-left:.375rem;padding-right:.375rem}.choices__list--multiple>.choices__item>.choices__button{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23161C2D' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% auto;border-width:0;margin-left:.5rem;opacity:.5;outline:none;padding:0;text-indent:-9999px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:.5rem}.choices__list--multiple>.choices__item:hover>.choices__button{opacity:1}.dropzone{display:flex;flex-direction:column;position:relative}.dz-message{background-color:#fff;border:1px dashed #c6d3e6;border-radius:.375rem;color:#869ab8;cursor:pointer;order:-1;padding:5rem 1rem;text-align:center;transition:all .2s ease-in-out;z-index:999}.dz-message:hover{border-color:#869ab8;color:#161c2d}.dz-button{background:none;border:0;color:inherit;font-size:inherit}.dz-drag-hover .dz-message{border-color:#335eea;color:#335eea}.dropzone-multiple .dz-message{padding-bottom:2rem;padding-top:2rem}.dropzone-single.dz-max-files-reached .dz-message{background-color:rgba(22,28,45,.9);color:#fff;opacity:0}.dropzone-single.dz-max-files-reached .dz-message:hover{opacity:1}.dz-preview-cover,.dz-preview-single{border-radius:.375rem;bottom:0;left:0;position:absolute;right:0;top:0}.dz-preview-img{border-radius:.375rem;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.dz-preview-multiple .list-group-item:last-child{border-bottom:0;padding-bottom:0}.fe,[data-dz-size] strong{font-weight:400}.fe{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Feather!important;font-style:normal;font-variant:normal;line-height:1;text-transform:none}.fe-activity:before{content:"\e900"}.fe-airplay:before{content:"\e901"}.fe-alert-circle:before{content:"\e902"}.fe-alert-octagon:before{content:"\e903"}.fe-alert-triangle:before{content:"\e904"}.fe-align-center:before{content:"\e905"}.fe-align-justify:before{content:"\e906"}.fe-align-left:before{content:"\e907"}.fe-align-right:before{content:"\e908"}.fe-anchor:before{content:"\e909"}.fe-aperture:before{content:"\e90a"}.fe-archive:before{content:"\e90b"}.fe-arrow-down:before{content:"\e90c"}.fe-arrow-down-circle:before{content:"\e90d"}.fe-arrow-down-left:before{content:"\e90e"}.fe-arrow-down-right:before{content:"\e90f"}.fe-arrow-left:before{content:"\e910"}.fe-arrow-left-circle:before{content:"\e911"}.fe-arrow-right:before{content:"\e912"}.fe-arrow-right-circle:before{content:"\e913"}.fe-arrow-up:before{content:"\e914"}.fe-arrow-up-circle:before{content:"\e915"}.fe-arrow-up-left:before{content:"\e916"}.fe-arrow-up-right:before{content:"\e917"}.fe-at-sign:before{content:"\e918"}.fe-award:before{content:"\e919"}.fe-bar-chart:before{content:"\e91a"}.fe-bar-chart-2:before{content:"\e91b"}.fe-battery:before{content:"\e91c"}.fe-battery-charging:before{content:"\e91d"}.fe-bell:before{content:"\e91e"}.fe-bell-off:before{content:"\e91f"}.fe-bluetooth:before{content:"\e920"}.fe-bold:before{content:"\e921"}.fe-book:before{content:"\e922"}.fe-book-open:before{content:"\e923"}.fe-bookmark:before{content:"\e924"}.fe-box:before{content:"\e925"}.fe-briefcase:before{content:"\e926"}.fe-calendar:before{content:"\e927"}.fe-camera:before{content:"\e928"}.fe-camera-off:before{content:"\e929"}.fe-cast:before{content:"\e92a"}.fe-check:before{content:"\e92b"}.fe-check-circle:before{content:"\e92c"}.fe-check-square:before{content:"\e92d"}.fe-chevron-down:before{content:"\e92e"}.fe-chevron-left:before{content:"\e92f"}.fe-chevron-right:before{content:"\e930"}.fe-chevron-up:before{content:"\e931"}.fe-chevrons-down:before{content:"\e932"}.fe-chevrons-left:before{content:"\e933"}.fe-chevrons-right:before{content:"\e934"}.fe-chevrons-up:before{content:"\e935"}.fe-chrome:before{content:"\e936"}.fe-circle:before{content:"\e937"}.fe-clipboard:before{content:"\e938"}.fe-clock:before{content:"\e939"}.fe-cloud:before{content:"\e93a"}.fe-cloud-drizzle:before{content:"\e93b"}.fe-cloud-lightning:before{content:"\e93c"}.fe-cloud-off:before{content:"\e93d"}.fe-cloud-rain:before{content:"\e93e"}.fe-cloud-snow:before{content:"\e93f"}.fe-code:before{content:"\e940"}.fe-codepen:before{content:"\e941"}.fe-command:before{content:"\e942"}.fe-compass:before{content:"\e943"}.fe-copy:before{content:"\e944"}.fe-corner-down-left:before{content:"\e945"}.fe-corner-down-right:before{content:"\e946"}.fe-corner-left-down:before{content:"\e947"}.fe-corner-left-up:before{content:"\e948"}.fe-corner-right-down:before{content:"\e949"}.fe-corner-right-up:before{content:"\e94a"}.fe-corner-up-left:before{content:"\e94b"}.fe-corner-up-right:before{content:"\e94c"}.fe-cpu:before{content:"\e94d"}.fe-credit-card:before{content:"\e94e"}.fe-crop:before{content:"\e94f"}.fe-crosshair:before{content:"\e950"}.fe-database:before{content:"\e951"}.fe-delete:before{content:"\e952"}.fe-disc:before{content:"\e953"}.fe-dollar-sign:before{content:"\e954"}.fe-download:before{content:"\e955"}.fe-download-cloud:before{content:"\e956"}.fe-droplet:before{content:"\e957"}.fe-edit:before{content:"\e958"}.fe-edit-2:before{content:"\e959"}.fe-edit-3:before{content:"\e95a"}.fe-external-link:before{content:"\e95b"}.fe-eye:before{content:"\e95c"}.fe-eye-off:before{content:"\e95d"}.fe-facebook:before{content:"\e95e"}.fe-fast-forward:before{content:"\e95f"}.fe-feather:before{content:"\e960"}.fe-file:before{content:"\e961"}.fe-file-minus:before{content:"\e962"}.fe-file-plus:before{content:"\e963"}.fe-file-text:before{content:"\e964"}.fe-film:before{content:"\e965"}.fe-filter:before{content:"\e966"}.fe-flag:before{content:"\e967"}.fe-folder:before{content:"\e968"}.fe-folder-minus:before{content:"\e969"}.fe-folder-plus:before{content:"\e96a"}.fe-gift:before{content:"\e96b"}.fe-git-branch:before{content:"\e96c"}.fe-git-commit:before{content:"\e96d"}.fe-git-merge:before{content:"\e96e"}.fe-git-pull-request:before{content:"\e96f"}.fe-github:before{content:"\e970"}.fe-gitlab:before{content:"\e971"}.fe-globe:before{content:"\e972"}.fe-grid:before{content:"\e973"}.fe-hard-drive:before{content:"\e974"}.fe-hash:before{content:"\e975"}.fe-headphones:before{content:"\e976"}.fe-heart:before{content:"\e977"}.fe-help-circle:before{content:"\e978"}.fe-home:before{content:"\e979"}.fe-image:before{content:"\e97a"}.fe-inbox:before{content:"\e97b"}.fe-info:before{content:"\e97c"}.fe-instagram:before{content:"\e97d"}.fe-italic:before{content:"\e97e"}.fe-layers:before{content:"\e97f"}.fe-layout:before{content:"\e980"}.fe-life-buoy:before{content:"\e981"}.fe-link:before{content:"\e982"}.fe-link-2:before{content:"\e983"}.fe-linkedin:before{content:"\e984"}.fe-list:before{content:"\e985"}.fe-loader:before{content:"\e986"}.fe-lock:before{content:"\e987"}.fe-log-in:before{content:"\e988"}.fe-log-out:before{content:"\e989"}.fe-mail:before{content:"\e98a"}.fe-map:before{content:"\e98b"}.fe-map-pin:before{content:"\e98c"}.fe-maximize:before{content:"\e98d"}.fe-maximize-2:before{content:"\e98e"}.fe-menu:before{content:"\e98f"}.fe-message-circle:before{content:"\e990"}.fe-message-square:before{content:"\e991"}.fe-mic:before{content:"\e992"}.fe-mic-off:before{content:"\e993"}.fe-minimize:before{content:"\e994"}.fe-minimize-2:before{content:"\e995"}.fe-minus:before{content:"\e996"}.fe-minus-circle:before{content:"\e997"}.fe-minus-square:before{content:"\e998"}.fe-monitor:before{content:"\e999"}.fe-moon:before{content:"\e99a"}.fe-more-horizontal:before{content:"\e99b"}.fe-more-vertical:before{content:"\e99c"}.fe-move:before{content:"\e99d"}.fe-music:before{content:"\e99e"}.fe-navigation:before{content:"\e99f"}.fe-navigation-2:before{content:"\e9a0"}.fe-octagon:before{content:"\e9a1"}.fe-package:before{content:"\e9a2"}.fe-paperclip:before{content:"\e9a3"}.fe-pause:before{content:"\e9a4"}.fe-pause-circle:before{content:"\e9a5"}.fe-percent:before{content:"\e9a6"}.fe-phone:before{content:"\e9a7"}.fe-phone-call:before{content:"\e9a8"}.fe-phone-forwarded:before{content:"\e9a9"}.fe-phone-incoming:before{content:"\e9aa"}.fe-phone-missed:before{content:"\e9ab"}.fe-phone-off:before{content:"\e9ac"}.fe-phone-outgoing:before{content:"\e9ad"}.fe-pie-chart:before{content:"\e9ae"}.fe-play:before{content:"\e9af"}.fe-play-circle:before{content:"\e9b0"}.fe-plus:before{content:"\e9b1"}.fe-plus-circle:before{content:"\e9b2"}.fe-plus-square:before{content:"\e9b3"}.fe-pocket:before{content:"\e9b4"}.fe-power:before{content:"\e9b5"}.fe-printer:before{content:"\e9b6"}.fe-radio:before{content:"\e9b7"}.fe-refresh-ccw:before{content:"\e9b8"}.fe-refresh-cw:before{content:"\e9b9"}.fe-repeat:before{content:"\e9ba"}.fe-rewind:before{content:"\e9bb"}.fe-rotate-ccw:before{content:"\e9bc"}.fe-rotate-cw:before{content:"\e9bd"}.fe-rss:before{content:"\e9be"}.fe-save:before{content:"\e9bf"}.fe-scissors:before{content:"\e9c0"}.fe-search:before{content:"\e9c1"}.fe-send:before{content:"\e9c2"}.fe-server:before{content:"\e9c3"}.fe-settings:before{content:"\e9c4"}.fe-share:before{content:"\e9c5"}.fe-share-2:before{content:"\e9c6"}.fe-shield:before{content:"\e9c7"}.fe-shield-off:before{content:"\e9c8"}.fe-shopping-bag:before{content:"\e9c9"}.fe-shopping-cart:before{content:"\e9ca"}.fe-shuffle:before{content:"\e9cb"}.fe-sidebar:before{content:"\e9cc"}.fe-skip-back:before{content:"\e9cd"}.fe-skip-forward:before{content:"\e9ce"}.fe-slack:before{content:"\e9cf"}.fe-slash:before{content:"\e9d0"}.fe-sliders:before{content:"\e9d1"}.fe-smartphone:before{content:"\e9d2"}.fe-speaker:before{content:"\e9d3"}.fe-square:before{content:"\e9d4"}.fe-star:before{content:"\e9d5"}.fe-stop-circle:before{content:"\e9d6"}.fe-sun:before{content:"\e9d7"}.fe-sunrise:before{content:"\e9d8"}.fe-sunset:before{content:"\e9d9"}.fe-tablet:before{content:"\e9da"}.fe-tag:before{content:"\e9db"}.fe-target:before{content:"\e9dc"}.fe-terminal:before{content:"\e9dd"}.fe-thermometer:before{content:"\e9de"}.fe-thumbs-down:before{content:"\e9df"}.fe-thumbs-up:before{content:"\e9e0"}.fe-toggle-left:before{content:"\e9e1"}.fe-toggle-right:before{content:"\e9e2"}.fe-trash:before{content:"\e9e3"}.fe-trash-2:before{content:"\e9e4"}.fe-trending-down:before{content:"\e9e5"}.fe-trending-up:before{content:"\e9e6"}.fe-triangle:before{content:"\e9e7"}.fe-truck:before{content:"\e9e8"}.fe-tv:before{content:"\e9e9"}.fe-twitter:before{content:"\e9ea"}.fe-type:before{content:"\e9eb"}.fe-umbrella:before{content:"\e9ec"}.fe-underline:before{content:"\e9ed"}.fe-unlock:before{content:"\e9ee"}.fe-upload:before{content:"\e9ef"}.fe-upload-cloud:before{content:"\e9f0"}.fe-user:before{content:"\e9f1"}.fe-user-check:before{content:"\e9f2"}.fe-user-minus:before{content:"\e9f3"}.fe-user-plus:before{content:"\e9f4"}.fe-user-x:before{content:"\e9f5"}.fe-users:before{content:"\e9f6"}.fe-video:before{content:"\e9f7"}.fe-video-off:before{content:"\e9f8"}.fe-voicemail:before{content:"\e9f9"}.fe-volume:before{content:"\e9fa"}.fe-volume-1:before{content:"\e9fb"}.fe-volume-2:before{content:"\e9fc"}.fe-volume-x:before{content:"\e9fd"}.fe-watch:before{content:"\e9fe"}.fe-wifi:before{content:"\e9ff"}.fe-wifi-off:before{content:"\ea00"}.fe-wind:before{content:"\ea01"}.fe-x:before{content:"\ea02"}.fe-x-circle:before{content:"\ea03"}.fe-x-square:before{content:"\ea04"}.fe-youtube:before{content:"\ea05"}.fe-zap:before{content:"\ea06"}.fe-zap-off:before{content:"\ea07"}.fe-zoom-in:before{content:"\ea08"}.fe-zoom-out:before{content:"\ea09"}.fe-lg{font-size:1.3125rem}@media (min-width:992px){.fe-lg{font-size:1.125rem}}.flickity-prev-next-button{align-items:center;background-color:#335eea;box-shadow:0 .5rem 1.5rem rgba(22,28,45,.05);color:#fff;display:flex;height:calc(1.6em + 1.625rem + 2px);justify-content:center;width:calc(1.6em + 1.625rem + 2px)}.flickity-prev-next-button:after,.flickity-prev-next-button:before{font-family:Feather}.flickity-prev-next-button:focus,.flickity-prev-next-button:hover{background-color:#335eea;box-shadow:0 .5rem 1.5rem rgba(22,28,45,.1)}.flickity-prev-next-button.previous{left:0;transform:translate(calc(-50% + .625rem),-50%)}@media (min-width:992px){.flickity-prev-next-button.previous{transform:translate(-50%,-50%)}}.flickity-prev-next-button.previous:before{content:"\e910"}.flickity-prev-next-button.next{right:0;transform:translate(calc(50% - .625rem),-50%)}@media (min-width:992px){.flickity-prev-next-button.next{transform:translate(50%,-50%)}}.flickity-prev-next-button.next:before{content:"\e912"}.flickity-button-icon{display:none}.flickity-button-white .flickity-prev-next-button{background-color:#fff;color:#335eea}.flickity-button-bottom .flickity-prev-next-button{bottom:1.5rem;top:auto;transform:none}.flickity-button-bottom .flickity-prev-next-button.previous{left:auto;right:6.375rem}.flickity-button-bottom .flickity-prev-next-button.next{left:auto;right:2.5rem}.flickity-button-inset .flickity-prev-next-button{transform:translateY(-50%)}.flickity-button-inset .flickity-prev-next-button.previous{left:1.5rem}.flickity-button-inset .flickity-prev-next-button.next{right:1.5rem}.flickity-viewport-visible .flickity-viewport{overflow:visible}[data-flickity*='"adaptiveHeight": true'] .flickity-viewport{transition:all .5s ease}.flickity-slider>[class^=col]{padding-left:1.25rem;padding-right:1.25rem}.hljs{background-color:transparent}.ql-container{font-family:HKGroteskPro,serif}.ql-toolbar{background-color:#fff;border:1px solid #f1f4f8;border-radius:.375rem .375rem 0 0;color:#161c2d;padding:.8125rem 1.25rem;position:relative}.ql-toolbar+.ql-container{margin-top:-1px}.ql-toolbar+.ql-container .ql-editor{border-top-left-radius:0;border-top-right-radius:0}.ql-editor{background-clip:padding-box;background-color:#fff;border:1px solid #f1f4f8;border-radius:.375rem;box-shadow:none;color:#161c2d;display:block;font-size:1.0625rem;line-height:1.6;min-height:6.8rem;padding:.8125rem 1.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.ql-editor{transition:none}}.ql-editor::-ms-expand{background-color:transparent;border:0}.ql-editor:focus{border-color:#335eea}.ql-hidden{position:absolute;transform:scale(0)}.ql-editor.ql-blank:before{color:#869ab8;font-style:normal;left:1.25rem;top:.8125rem}.ql-editor:focus:before{display:none}.ql-formats{padding-left:.5rem;padding-right:.5rem}.ql-formats:first-child{padding-left:0}.ql-formats:last-child{padding-right:0}.ql-toolbar button{background:none;border:none;color:#161c2d;cursor:pointer;padding:0 .25rem;transition:all .2s ease-in-out}.ql-toolbar button:hover{color:#335eea}.ql-toolbar button:first-child{margin-left:-.25rem}.ql-toolbar .ql-active{color:#335eea}.ql-toolbar button svg{height:1.1875rem;width:1.1875rem}.ql-toolbar .ql-stroke{stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}.ql-toolbar .ql-thin{stroke-width:1}.ql-toolbar .ql-fill{fill:currentColor}.ql-toolbar input.ql-image{position:absolute;transform:scale(0)}.ql-tooltip{background-color:#fff;border:1px solid transparent;border-radius:.375rem;box-shadow:0 1.5rem 4rem rgba(22,28,45,.1);display:flex;flex-wrap:nowrap;margin-top:.6rem;padding:.8125rem 1.25rem;position:absolute;width:18.5rem}.ql-tooltip:after,.ql-tooltip:before{bottom:100%;content:"";left:50%;position:absolute;transform:translateX(-50%)}.ql-tooltip:before{border-bottom:.6rem solid transparent;border-left:.6rem solid transparent;border-right:.6rem solid transparent}.ql-tooltip:after{border-bottom:.5rem solid #fff;border-left:.5rem solid transparent;border-right:.5rem solid transparent}.ql-container .ql-tooltip:hover{display:flex!important}.ql-tooltip .ql-preview{border-radius:.375rem;font-size:.9375rem;padding:.5625rem 1rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.ql-tooltip .ql-preview{transition:none}}.ql-tooltip.ql-editing .ql-preview{display:none}.ql-tooltip input{background-color:transparent;border:none;color:#161c2d;display:none;font-size:.9375rem;line-height:1.6;padding-bottom:calc(.5625rem + 1px);padding-top:calc(.5625rem + 1px);width:100%}.ql-tooltip input:focus{outline:none}.ql-tooltip.ql-editing input{display:block}.ql-tooltip .ql-action,.ql-tooltip .ql-remove{margin-left:.25rem}.ql-tooltip .ql-action:before,.ql-tooltip .ql-remove:before{border:1px solid transparent;border-radius:.375rem;cursor:pointer;display:inline-block;font-size:.9375rem;font-weight:600;padding:.5625rem 1rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}@media (prefers-reduced-motion:reduce){.ql-tooltip .ql-action:before,.ql-tooltip .ql-remove:before{transition:none}}.ql-tooltip .ql-action:before:focus,.ql-tooltip .ql-action:before:hover,.ql-tooltip .ql-remove:before:focus,.ql-tooltip .ql-remove:before:hover{text-decoration:none}.ql-tooltip .ql-action:before.focus,.ql-tooltip .ql-action:before:focus,.ql-tooltip .ql-remove:before.focus,.ql-tooltip .ql-remove:before:focus{box-shadow:none;outline:0}.ql-tooltip .ql-action:before,.ql-tooltip.ql-editing .ql-action:before{background-color:#335eea;border-color:#335eea;box-shadow:none;color:#fff}.ql-tooltip .ql-action:before:hover,.ql-tooltip.ql-editing .ql-action:before:hover{background-color:#2b50c7;border-color:#294bbb;color:#fff}.btn-check:focus+.ql-tooltip .ql-action:before,.btn-check:focus+.ql-tooltip.ql-editing .ql-action:before,.ql-tooltip .ql-action:before:focus,.ql-tooltip.ql-editing .ql-action:before:focus{background-color:#2b50c7;border-color:#294bbb;box-shadow:none,0 0 0 0 rgba(82,118,237,.5);color:#fff}.btn-check:active+.ql-tooltip .ql-action:before,.btn-check:active+.ql-tooltip.ql-editing .ql-action:before,.btn-check:checked+.ql-tooltip .ql-action:before,.btn-check:checked+.ql-tooltip.ql-editing .ql-action:before,.ql-tooltip .ql-action:before.active,.ql-tooltip .ql-action:before:active,.ql-tooltip.ql-editing .ql-action:before.active,.ql-tooltip.ql-editing .ql-action:before:active,.show>.ql-tooltip .ql-action:before.dropdown-toggle,.show>.ql-tooltip.ql-editing .ql-action:before.dropdown-toggle{background-color:#294bbb;border-color:#2647b0;color:#fff}.btn-check:active+.ql-tooltip .ql-action:before:focus,.btn-check:active+.ql-tooltip.ql-editing .ql-action:before:focus,.btn-check:checked+.ql-tooltip .ql-action:before:focus,.btn-check:checked+.ql-tooltip.ql-editing .ql-action:before:focus,.ql-tooltip .ql-action:before.active:focus,.ql-tooltip .ql-action:before:active:focus,.ql-tooltip.ql-editing .ql-action:before.active:focus,.ql-tooltip.ql-editing .ql-action:before:active:focus,.show>.ql-tooltip .ql-action:before.dropdown-toggle:focus,.show>.ql-tooltip.ql-editing .ql-action:before.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(82,118,237,.5)}.ql-tooltip .ql-action:before.disabled,.ql-tooltip .ql-action:before:disabled,.ql-tooltip.ql-editing .ql-action:before.disabled,.ql-tooltip.ql-editing .ql-action:before:disabled{background-color:#335eea;border-color:#335eea;color:#fff}.ql-tooltip .ql-action:before{content:"Edit"}.ql-tooltip.ql-editing .ql-action:before{content:"Save"}.ql-tooltip .ql-remove:before{background-color:#fff;border-color:#d9e2ef;box-shadow:none;color:#1b2a4e;content:"Remove"}.ql-tooltip .ql-remove:before:hover{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-check:focus+.ql-tooltip .ql-remove:before,.ql-tooltip .ql-remove:before:focus{background-color:#fff;border-color:#fff;box-shadow:none,0 0 0 0 rgba(221,223,228,.5);color:#1b2a4e}.btn-check:active+.ql-tooltip .ql-remove:before,.btn-check:checked+.ql-tooltip .ql-remove:before,.ql-tooltip .ql-remove:before.active,.ql-tooltip .ql-remove:before:active,.show>.ql-tooltip .ql-remove:before.dropdown-toggle{background-color:#fff;border-color:#fff;color:#1b2a4e}.btn-check:active+.ql-tooltip .ql-remove:before:focus,.btn-check:checked+.ql-tooltip .ql-remove:before:focus,.ql-tooltip .ql-remove:before.active:focus,.ql-tooltip .ql-remove:before:active:focus,.show>.ql-tooltip .ql-remove:before.dropdown-toggle:focus{box-shadow:none,0 0 0 0 rgba(221,223,228,.5)}.ql-tooltip .ql-remove:before.disabled,.ql-tooltip .ql-remove:before:disabled{background-color:#fff;border-color:#fff;color:#1b2a4e}.ql-tooltip.ql-editing .ql-remove:before{display:none}.ql-editor blockquote{font-size:1.25rem;margin-bottom:1rem}.ql-editor img{height:auto;max-width:100%}.navbar-brand-img{max-height:3rem}.list-payment-icon{max-width:2.5rem} +/*# sourceMappingURL=theme.bundle.css.map*/ \ No newline at end of file diff --git a/public/front/assets/css/theme.bundle.css.map b/public/front/assets/css/theme.bundle.css.map new file mode 100644 index 0000000..554a4d2 --- /dev/null +++ b/public/front/assets/css/theme.bundle.css.map @@ -0,0 +1 @@ +{"version":3,"file":"./css/theme.bundle.css","mappings":"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,CkBIb,wBlBFgB,CGMd,qBHyIoB,CQ9IlB,eR0TiB,CkB5TrB,alBSa,CkBhBb,aAAc,CnBgSV,mBAvE+B,CmBpNnC,elBmLsB,CkBlLtB,elBsLoB,CkB1LpB,wBlB2R2B,CmBlRvB,qEDVJ,UjB82BgG,CkBh2B5F,uCDhBN,cCiBQ,eAAgB,CD2FvB,CA5GD,yBAqBI,eAAgB,CArBpB,wDAwBM,cAAe,CAxBrB,oBA+BI,qBlBxBW,CkByBX,oBlBba,CQTX,qBUoBF,alBbW,CkBgBX,SlBmQ6B,CkBpSjC,2CA+CI,YAAmE,CA/CvE,gCAoDI,alBvCc,CkByCd,SAAU,CAtDd,oCAoDI,alBvCc,CkByCd,SAAU,CAtDd,2BAoDI,alBvCc,CkByCd,SAAU,CAtDd,+CAgEI,wBlBvDc,CkB0Dd,SAAU,CAnEd,oCA0EI,0BlBoNyB,CoB9R3B,wBpBQgB,CkBwEd,cAAe,CAFf,oBAAqB,CAGrB,2BlBmEc,CkBlEd,eAAgB,CAPhB,alB1DW,CkBwDX,yBlBqNyB,CkBpNzB,yBlBoNyB,CkBtNzB,wBlBsNyB,CkBjNzB,mBAAoB,CCjElB,6HlBqxB6I,CkBjxB7I,uCDhBN,0CCiBQ,uBAAY,CAAZ,eAAgB,CDjBxB,oCCiBQ,eAAgB,CDmErB,CApFH,yEAuFI,wBhBwHiC,CgB/MrC,0CA6FI,0BlBiMyB,CoB9R3B,wBpBQgB,CkB2Fd,cAAe,CAFf,oBAAqB,CAGrB,2BlBgDc,CkB/Cd,eAAgB,CAPhB,alB7EW,CkB2EX,yBlBkMyB,CkBjMzB,yBlBiMyB,CkBnMzB,wBlBmMyB,CkB9LzB,mBAAoB,CCpFlB,qIlBqxBkI,CkBrxBlI,6HlBqxB6I,CkBjxB7I,uCDhBN,0CCiBQ,uBAAY,CAAZ,eAAgB,CDsFrB,CAvGH,+EA0GI,wBhBqGiC,CgBpGlC,wBAeD,4BAA6B,CAE7B,4CAHA,alBxGa,CkBmGb,aAAc,CAId,elBqEoB,CkBtEpB,eAAgB,CADhB,kBAA2B,CAD3B,UAOmC,CATrC,gFAcI,eADA,eACe,CAChB,iBfnHC,sBJkRE,mBAvE+B,CmB7EnC,uChByF8D,CgBxF9D,qBlBUsB,CkBZxB,uCASI,uBlBkJqB,CkBnJrB,sBlBmJyB,CkBlJzB,uBAFA,qBlBoJyB,CkB3J7B,6CAeI,uBlB4IqB,CkB7IrB,sBlB6IyB,CkB5IzB,uBAFA,qBlB8IyB,CkB3I1B,iBf7IC,sBJkRE,mBAvE+B,CmB1DnC,uChBsE8D,CgBrE9D,uBlBTsB,CkBOxB,uCASI,yBlBoIqB,CkBrIrB,wBlBqI2B,CkBpI3B,yBAFA,uBlBsI2B,CkB7I/B,6CAeI,yBlB8HqB,CkB/HrB,wBlB+H2B,CkB9H3B,yBAFA,uBlBgI2B,CkB7H5B,sBAQC,uChB+C4D,CgBjDhE,yBAMI,uChB2C4D,CgBjDhE,yBAUI,uChBuC4D,CgBtC7D,oBAMD,WAAY,CACZ,iBAFA,UlBwF4B,CkBzF9B,mDAMI,cAAe,CANnB,uCfrLI,sBe+LA,YlBtDoB,CkB4CxB,0CfrLI,sBeoMA,YlB3DoB,CkB6DrB,aG/MD,sCnBwP8D,CmBzO9D,uBAAY,CAAZ,oBAAY,CAAZ,gBATA,qBrBLa,CqBMb,wQnBsHgF,CmBpHhF,wCpBg7BqE,CoBj7BrE,2BAA4B,CAE5B,uBrB+V2B,CqB9V3B,wBrBRgB,CGMd,qBHyIoB,CQ9IlB,eR0TiB,CqBzTrB,arBMa,CqBfb,aAAc,CtB+RV,mBAvE+B,CsBjNnC,erBgLsB,CqB/KtB,erBmLoB,CqBzLpB,wBrB0R2B,CmBlRvB,oElBo2B4F,CoB72BhG,UAkBgB,CFLZ,uCEfN,aFgBQ,eAAgB,CEkCvB,CAlDD,mBAuBI,oBrBLa,CQTX,qBaeF,SrB2Q6B,CqBnSjC,0DAoCI,sBADA,qBACsB,CApC1B,sBAyCI,wBrBjCc,CqBRlB,4BA+CI,iBAAkB,CAClB,yBrBhCW,CqBiCZ,gBtB+OG,oBsB1OJ,uBrB+O+B,CqB9O/B,iBrB+O2B,CqBjP3B,oBtBoKmC,CsBhKpC,gBtBuOK,oBsBnOJ,uBrB6O+B,CqB5O/B,mBrB6O6B,CqB/O7B,oBtB6JmC,CsBzJpC,YChEC,aAAc,CAGd,sBAFA,iBrBq3B2E,CqBp3B3E,mBrBs3B+C,CqBz3BjD,8BAOI,UAAW,CACX,mBAA2C,CAC5C,kBAcD,gCAAc,CADd,uBAAgB,CAAhB,oBAAgB,CAAhB,eAAgB,CALhB,wBtBPgB,CsBShB,uBAA2B,CAD3B,2BAA4B,CAE5B,uBAAwB,CACxB,kBtB+TmC,CsB7TnC,mBATA,UrBw2B2C,CqBv2B3C,eAA8D,CAC9D,kBAAmB,CAHnB,SAUmB,CAXrB,iCnBGI,qBHyIoB,CsB5IxB,8BAoBI,iBrBm2ByC,CqBv3B7C,yBAwBI,WtB0SiC,CsBlUrC,wBA4BI,wBtB4SiC,CsB1SjC,gBADA,StB8SoC,CsB3UxC,0BAkCI,wBtB3Ba,CsB4Bb,oBtB5Ba,CsBPjB,yCAyCQ,4PpB8E0E,CoBvHlF,sCAiDQ,oKpBsE0E,CoBvHlF,+CAuDI,wBtBhDa,CsBsDX,uPALF,oBpB+D8E,CoBvHlF,2BAmEI,WAAY,CACZ,WAFA,mBrBo0ByC,CqBt4B7C,2FA4EM,UrB0zBuC,CqBzzBxC,kBAMH,ctBkP+B,CsBjPhC,aAOC,iBtB2PoD,CsB5PtD,+BAMI,oKpBuB8E,CoBtB9E,qBAAgC,CnB9FhC,oBHkVsB,CsBtPtB,iBAA4C,CH/F1C,gDG8FF,YrBqzBkE,CkB/4BhE,uCGsFN,+BHrFQ,eAAgB,CG6GrB,CAxBH,4EAYM,oKpBiB4E,CoB7BlF,uCAgBM,wBpBa4E,CoBN7E,mBAKH,oBAAqB,CACrB,iBrBmxBoC,CqBlxBrC,WAIC,kBAAsB,CACtB,oBAFA,iBAEoB,CAHtB,mDASM,WAAY,CACZ,YAFA,mBrBuoB2B,CqBpoB5B,YC1IH,uBAAY,CAAZ,oBAAY,CAAZ,gBADA,4BAA6B,CAF7B,WrB+N2B,CqB9N3B,SAAU,CAFV,UAIgB,CALlB,kBAQI,SAAU,CARd,wCAY8B,8BvBsRG,CuBlSjC,oCAa8B,8BvBqRG,CuBlSjC,8BAiBI,QAAS,CAjBb,kCA6BI,uBAAY,CAAZ,gBH/BF,wBpBmBe,CuBQb,QtB48BwC,CEx9BxC,kBFy9B2C,CO99BzC,2CROS,CuBOX,WtB48B2C,CsB38B3C,kBAAsE,CJbpE,8GlBk+BkI,CkBl+BlI,sGlBk+BkI,CsBv9BpI,UAQgB,CJfd,uCIdN,kCJeQ,uBAAY,CAAZ,eAAgB,CImBrB,CAlCH,yCHFE,wBlB0MmC,CqBxMrC,2CAyCI,wBvBjCc,CuBkCd,wBAAyB,CpB7BzB,kBFk9BkC,COv9BhC,+Ce+BF,iBAAkB,CAClB,ctBq7BqC,CsBv7BrC,YtBs7BmC,CsBv7BnC,UvBtBW,CuBff,8BAuDI,oBAAY,CAAZ,gBHzDF,wBpBmBe,CuBkCb,QtBk7BwC,CEx9BxC,kBFy9B2C,CO99BzC,2CROS,CuBkCX,WtBi7B2C,CkBx9BzC,2GlBk+BkI,CkBl+BlI,sGlBk+BkI,CsB57BpI,UAOgB,CJzCd,uCIdN,8BJeQ,oBAAY,CAAZ,eAAgB,CI6CrB,CA5DH,qCHFE,wBlB0MmC,CqBxMrC,8BAmEI,wBvB3Dc,CuB4Dd,wBAAyB,CpBvDzB,kBFk9BkC,COv9BhC,+CeyDF,iBAAkB,CAClB,ctB25BqC,CsB75BrC,YtB45BmC,CsB75BnC,UvBhDW,CuBff,qBA0EI,mBAAoB,CA1ExB,2CA6EM,wBvBnEY,CuBVlB,uCAiFM,wBvBvEY,CuBwEb,eCvFH,iBAAkB,CADpB,yDAKI,yBtBqO4D,CsBpO5D,gBvBu/BkC,CuB7/BtC,qBAgBI,4BAA6C,CAH7C,WAAY,CADZ,MAAO,CAEP,oBxBoRyB,CwBnRzB,mBAAoB,CALpB,iBAAkB,CAClB,KAAM,CAMN,oBAAqB,CLDnB,4DlBo/B8E,CkBh/B9E,uCKpBN,qBLqBQ,eAAgB,CKFrB,CAnBH,6BAuBI,oBxB2QyB,CwBlS7B,+CA0BM,iBAAkB,CA1BxB,mDA0BM,iBAAkB,CA1BxB,0CA0BM,iBAAkB,CA1BxB,0DAgCM,uBADA,oBvBk+BmC,CuBjgCzC,yDAgCM,uBADA,oBvBk+BmC,CuBjgCzC,wFAgCM,uBADA,oBvBk+BmC,CuBjgCzC,8CAqCM,uBADA,oBvB69BmC,CuBjgCzC,4BA2CI,uBADA,oBvBu9BqC,CuBjgCzC,gEAkDM,SxB4UyB,CwB3UzB,4BxB4U4C,CwB/XlD,+DAkDM,SxB4UyB,CwB3UzB,4BxB4U4C,CwB/XlD,sIAkDM,SxB4UyB,CwB3UzB,4BxB4U4C,CwB/XlD,oDAyDM,SxBqUyB,CwBpUzB,4BxBqU4C,CwBpU7C,aCnDH,mBAAoB,CAFpB,YAAa,CACb,cAAe,CAFf,iBAAkB,CAIlB,UAAW,CALb,qDAUI,aAAc,CAEd,YAHA,iBAAkB,CAElB,QACY,CAZhB,iEAkBI,SAAU,CAlBd,kBAyBI,iBAAkB,CAClB,SAAU,CA1Bd,wBA6BM,SAAU,CACX,kBAYH,kBAAmB,CAQnB,qBzB3Ca,CyB4Cb,wBzB1CgB,CGMd,sBsBgCF,azBlCgB,CyB4BhB,YAAa,C1BwPT,mBAvE+B,C0B7KnC,ezB4IsB,CyB3ItB,ezB+IoB,CyBlJpB,wBzBmP2B,CyB9O3B,iBAAkB,CAClB,kBzBuGsB,CyBnGvB,kHtBtCG,sBJkRE,mBAvE+B,C0BzJnC,uBzBuFsB,CyBpFvB,kHtBrDG,sBJkRE,mBAvE+B,C0BhJnC,qBzB8EsB,CyB3EvB,0DAIC,oBAAsE,CAWxE,iUtB5DI,6BADA,yBsBwE8B,CAXlC,0ItB9CI,4BADA,wBsBqE8B,CAD9B,gBAC8B,CAF4B,gBCrF1D,cALA,YAAa,C3B2QX,eAvE+B,C2BlMjC,iBzByxB0C,CyB1xB1C,U1BDa,C0BMd,eAaC,oC1BnBa,CGPb,sBuByBA,U1BjCW,C0B2BX,YAAa,C3B+PX,kBAvE+B,C2BrLjC,gBAAiB,CAFjB,cAAe,CACf,oBzB4vC4C,CyBjwC5C,iBAAkB,CAClB,QAAS,CACT,S1BuHoB,C0BtJpB,8HA8CE,aAAc,CA9ChB,0DAoDE,oB1BhCW,C0BpBb,sEA+DI,oB1B3CS,C0B4CT,uC1B5CS,C0BpBb,wDAiFE,oB1B7DW,C0BpBb,oEA8FI,oB1B1ES,C0B2ET,uC1B3ES,C0BpBb,kEAsGE,oB1BlFW,C0BpBb,kFAyGI,wB1BrFS,C0BpBb,8EA6GI,uC1BzFS,C0BpBb,sGAiHI,a1B7FS,C0B8FV,qDAKD,gBAAiB,CAvHnB,sKA+HI,SAAU,CA/Hd,8LAoII,SAAU,CACX,kBA5GH,cALA,YAAa,C3B2QX,eAvE+B,C2BlMjC,iBzByxB0C,CyB1xB1C,U1BEY,C0BGb,iBAaC,mC1BhBY,CGVZ,sBuByBA,U1BjCW,C0B2BX,YAAa,C3B+PX,kBAvE+B,C2BrLjC,gBAAiB,CAFjB,cAAe,CACf,oBzB4vC4C,CyBjwC5C,iBAAkB,CAClB,QAAS,CACT,S1BuHoB,C0BtJpB,8IA8CE,aAAc,CA9ChB,8DAoDE,oB1B7BU,C0BvBZ,0EA+DI,oB1BxCQ,C0ByCR,sC1BzCQ,C0BvBZ,4DAiFE,oB1B1DU,C0BvBZ,wEA8FI,oB1BvEQ,C0BwER,sC1BxEQ,C0BvBZ,sEAsGE,oB1B/EU,C0BvBZ,sFAyGI,wB1BlFQ,C0BvBZ,kFA6GI,sC1BtFQ,C0BvBZ,0GAiHI,a1B1FQ,C0B2FT,uDAKD,gBAAiB,CAvHnB,8KAiII,SAAU,CAjId,sMAoII,SAAU,CACX,KC3HL,4BAA6B,CAC7B,4BAA2C,CxBEzC,qBHyIoB,C2BnJtB,a3BYa,C2BPb,cAA2C,CAT3C,oBAAqB,C5BgSjB,mBAvE+B,C4BvNnC,e3BuLoB,C2BtLpB,e3ByLoB,C4BlEpB,wB5BmK2B,C2BxR3B,iBAAkB,CRMd,8HQDJ,wBAAiB,CAAjB,qBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CAFjB,qB1BwxBiJ,CkBjxB7I,uCQhBN,KRiBQ,eAAgB,CQ6BvB,CA9CD,WAkBI,a3BDW,C2BEX,oBAA6D,CAC9D,iCAKC,gBADA,S3B4Q6B,C2B1Q9B,uEnBhBG,eR6SsB,C2B3R1B,+FnBlBI,oBR6SsB,C2BvT5B,mDnBUM,gBmBiCF,W1B0uB6B,C0B3uB7B,mBAEwB,CACzB,aP7CD,wBpBmBe,C4BDf,oB5BCe,CQTX,gBoBMJ,U5BsSmB,C4B7RlB,oERzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,iDpBfG,2CoBuB0F,CAK7F,0IAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,wKpB9BI,2CoB2CmG,CAKpG,4CAMD,wB5B7Ca,C4BgDb,qBAJA,U5B5Ca,C4BiDd,eRpED,wBpBcgB,C4BIhB,oB5BJgB,CQJZ,gBoBMJ,U5BsSmB,C4B7RlB,0ERzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,qDpBfG,4CoBuB0F,CAK7F,oJAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,kLpB9BI,4CoB2CmG,CAKpG,gDAMD,wB5BlDc,C4BqDd,qBAJA,U5BjDc,C4BsDf,aRpED,wBpBsBe,C4BJf,oB5BIe,CQZX,gBoBMJ,U5BsSmB,C4B7RlB,oERzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,iDpBfG,2CoBuB0F,CAK7F,0IAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,wKpB9BI,2CoB2CmG,CAKpG,4CAMD,wB5B1Ca,C4B6Cb,qBAJA,U5BzCa,C4B8Cd,URpED,wBpBuBY,C4BLZ,oB5BKY,CQbR,gBoBMJ,U5BsSmB,C4B7RlB,2DRzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,2CpBfG,4CoBuB0F,CAK7F,2HAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,yJpB9BI,4CoB2CmG,CAKpG,sCAMD,wB5BzCU,C4B4CV,qBAJA,U5BxCU,C4B6CX,aRpED,wBpBwBe,C4BNf,oB5BMe,CQdX,gBoBMJ,a5BsSmB,C4B7RlB,oERzBD,wBlB0MmC,C0BlLjC,qBAFA,aAW4F,CAR7F,iDpBfG,4CoBuB0F,CAK7F,0IAQC,wB1B4JiC,C0BzJjC,qBAJA,a1B6JiC,C0BlKnC,wKpB9BI,4CoB2CmG,CAKpG,4CAMD,wB5BxCa,C4B2Cb,qBAJA,a5BvCa,C4B4Cd,YRpED,wBpByBc,C4BPd,oB5BOc,CQfV,gBoBMJ,U5BsSmB,C4B7RlB,iERzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,+CpBfG,2CoBuB0F,CAK7F,qIAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,mKpB9BI,2CoB2CmG,CAKpG,0CAMD,wB5BvCY,C4B0CZ,qBAJA,U5BtCY,C4B2Cb,WRpED,wBpBQgB,C4BUhB,oB5BVgB,CQEZ,gBoBMJ,a5BsSmB,C4B7RlB,8DRzBD,wBlB0MmC,C0BlLjC,qBAFA,aAW4F,CAR7F,6CpBfG,4CoBuB0F,CAK7F,gIAQC,wB1B4JiC,C0BzJjC,qBAJA,a1B6JiC,C0BlKnC,8JpB9BI,4CoB2CmG,CAKpG,wCAMD,wB5BxDc,C4B2Dd,qBAJA,a5BvDc,C4B4Df,URpED,wBpBgBgB,C4BEhB,oB5BFgB,CQNZ,gBoBMJ,U5BsSmB,C4B7RlB,2DRzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,2CpBfG,0CoBuB0F,CAK7F,2HAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,yJpB9BI,0CoB2CmG,CAKpG,sCAMD,wB5BhDc,C4BmDd,qBAJA,U5B/Cc,C4BoDf,mBRpED,wBpBqBqB,C4BHrB,oB5BGqB,CQXjB,gBoBMJ,U5BsSmB,C4BjSnB,yBRrBA,wBlB+MmC,C0BvLjC,qBAFA,U1ByLiC,C0BtLlC,6DRzBD,wBlB+MmC,C0BhLjC,oB1BgLiC,CMrM/B,6CoBmBF,UAI4F,CAK7F,wKAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,sMpB9BI,4CoB2CmG,CAKpG,wDAMD,wB5B3CmB,C4B8CnB,qBAJA,U5B1CmB,C4B+CpB,WRpED,wBpBiBa,C4BCb,oB5BDa,CQPT,gBoBMJ,U5BsSmB,C4B7RlB,8DRzBD,wBlB+MmC,C0BvLjC,qBAFA,UAW4F,CAR7F,6CpBfG,yCoBuB0F,CAK7F,gIAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,8JpB9BI,yCoB2CmG,CAKpG,wCAMD,wB5B/CW,C4BkDX,qBAJA,U5B9CW,C4BmDZ,WAlDD,iB5BXa,CQGT,gBoBMJ,a5BsSmB,C4B7RlB,8DRzBD,qBlB0MmC,C0BlLjC,kBAFA,aAW4F,CAR7F,6CpBfG,4CoBuB0F,CAK7F,gIAQC,qB1B4JiC,C0BzJjC,kBAJA,a1B6JiC,C0BlKnC,8JpB9BI,4CoB2CmG,CAKpG,wCAMD,qB5BzDW,C4B4DX,kBAJA,a5BxDW,C4B6DZ,qBAaD,qBADA,a5B7De,C4BgEf,2BAEE,wB5BlEa,C4BmEb,qBAFA,U5BjEa,C4BoEd,iEAIC,qC5BxEa,C4ByEd,iLAQC,wB5BjFa,C4BkFb,qBAFA,U5BhFa,C4B2Ef,+MpBpFI,0CRSW,C4B2FZ,4DAMD,6BADA,aAC6B,CAC9B,uBApCD,qBADA,a5BlEgB,C4BqEhB,6BAEE,wB5BvEc,C4BwEd,qBAFA,U5BtEc,C4ByEf,qEAIC,sC5B7Ec,C4B8Ef,2LAQC,wB5BtFc,C4BuFd,qBAFA,U5BrFc,C4BgFhB,yNpBpFI,2CRIY,C4BgGb,gEAMD,6BADA,aAC6B,CAC9B,qBApCD,qBADA,a5B1De,C4B6Df,2BAEE,wB5B/Da,C4BgEb,qBAFA,U5B9Da,C4BiEd,iEAIC,sC5BrEa,C4BsEd,iLAQC,wB5B9Ea,C4B+Eb,qBAFA,U5B7Ea,C4BwEf,+MpBpFI,2CRYW,C4BwFZ,4DAMD,6BADA,aAC6B,CAC9B,kBApCD,qBADA,a5BzDY,C4B4DZ,wBAEE,wB5B9DU,C4B+DV,qBAFA,U5B7DU,C4BgEX,2DAIC,uC5BpEU,C4BqEX,kKAQC,wB5B7EU,C4B8EV,qBAFA,U5B5EU,C4BuEZ,gMpBpFI,4CRaQ,C4BuFT,sDAMD,6BADA,aAC6B,CAC9B,qBApCD,qBADA,a5BxDe,C4B2Df,2BAEE,wB5B7Da,C4B8Db,qBAFA,a5B5Da,C4B+Dd,iEAIC,uC5BnEa,C4BoEd,iLAQC,wB5B5Ea,C4B6Eb,qBAFA,a5B3Ea,C4BsEf,+MpBpFI,4CRcW,C4BsFZ,4DAMD,6BADA,aAC6B,CAC9B,oBApCD,qBADA,a5BvDc,C4B0Dd,0BAEE,wB5B5DY,C4B6DZ,qBAFA,U5B3DY,C4B8Db,+DAIC,qC5BlEY,C4BmEb,4KAQC,wB5B3EY,C4B4EZ,qBAFA,U5B1EY,C4BqEd,0MpBpFI,0CReU,C4BqFX,0DAMD,6BADA,aAC6B,CAC9B,mBApCD,qBADA,a5BxEgB,C4B2EhB,yBAEE,wB5B7Ec,C4B8Ed,qBAFA,a5B5Ec,C4B+Ef,6DAIC,uC5BnFc,C4BoFf,uKAQC,wB5B5Fc,C4B6Fd,qBAFA,a5B3Fc,C4BsFhB,qMpBpFI,4CRFY,C4BsGb,wDAMD,6BADA,aAC6B,CAC9B,kBApCD,qBADA,a5BhEgB,C4BmEhB,wBAEE,wB5BrEc,C4BsEd,qBAFA,U5BpEc,C4BuEf,2DAIC,oC5B3Ec,C4B4Ef,kKAQC,wB5BpFc,C4BqFd,qBAFA,U5BnFc,C4B8EhB,gMpBpFI,yCRMY,C4B8Fb,sDAMD,6BADA,aAC6B,CAC9B,2BApCD,qBADA,a5B3DqB,C4B8DrB,iCAEE,wB5BhEmB,C4BiEnB,qBAFA,U5B/DmB,C4BkEpB,6EAIC,uC5BtEmB,C4BuEpB,+MAQC,wB5B/EmB,C4BgFnB,qBAFA,U5B9EmB,C4ByErB,6OpBpFI,4CRWiB,C4ByFlB,wEAMD,6BADA,aAC6B,CAC9B,mBApCD,qBADA,a5B/Da,C4BkEb,yBAEE,wB5BpEW,C4BqEX,qBAFA,U5BnEW,C4BsEZ,6DAIC,oC5B1EW,C4B2EZ,uKAQC,wB5BnFW,C4BoFX,qBAFA,U5BlFW,C4B6Eb,qMpBpFI,yCROS,C4B6FV,wDAMD,6BADA,aAC6B,CAC9B,mBApCD,kBADA,U5BzEa,C4B4Eb,yBAEE,qB5B9EW,C4B+EX,kBAFA,a5B7EW,C4BgFZ,6DAIC,uC5BpFW,C4BqFZ,uKAQC,qB5B7FW,C4B8FX,kBAFA,a5B5FW,C4BuFb,qMpBpFI,4CRHS,C4BuGV,wDAMD,6BADA,UAC6B,CAC9B,UD1CD,a3BxDe,C2BuDf,e3B+GsB,C2B7GtB,oB3BoCoB,C2BvCtB,gBAMI,a3BkC6B,C2BxCjC,gCAOI,yB3BiC6B,C2BxCjC,sCAgBI,a3B5Ec,C2B6Ef,2BxB3EC,sBJkRE,mBAvE+B,C6B/FnC,uB5B6BsB,C2BlDvB,2BxBvFG,sBJkRE,mBAvE+B,C6B/FnC,qB5B6BsB,C2B9CvB,MR9FK,8BlByhB2C,CkBrhB3C,uCUpBN,MVqBQ,eAAgB,CUfvB,CAND,iBAII,SAAU,CACX,qBAMC,YAAa,CACd,YAID,QAAS,CACT,eAAgB,CVDZ,2BlB2hBwC,CkBvhBxC,uCULN,YVMQ,eAAgB,CUIvB,CAVD,gCAOI,WAAY,CVNV,2BUKF,O5BuhByC,CkBxhBvC,uCULN,gCVMQ,eAAgB,CUGrB,CCvBH,sCAIE,iBAAkB,CL6FG,iBKzFrB,kBAAmB,CCqBjB,uBA1BF,eAAgB,CAChB,mCAFA,mCAA4C,CAD5C,qBAA8B,CAgC1B,UAAW,CAHX,oBAAqB,CACrB,kB9BqgB0C,C8BpgB1C,qBA5BuC,CAqCxC,6BAiBC,aAAc,CACf,eDhCH,2BAA4B,CAD5B,qB9BhBa,C8BkBb,iC9BRa,CGFX,qBHyIoB,CQ9IlB,4CsBUJ,a9BHa,C8BFb,YAAa,C/BkRT,kBAvE+B,C+BpMnC,eAAgB,CAJhB,QAAS,CAFT,e9ByYwB,C8BxYxB,wB9BuZ+B,C8B3Z/B,iBAAkB,CAQlB,eAAgB,CAPh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ftB,wBAmBQ,cADA,aACc,CAnBtB,mChC3HI,6BADA,yBgCqJkC,CAzBtC,iGA8BY,yBAA0B,CA9BtC,oGAmCY,4BAA6B,CAnCzC,oChC7GI,4BADA,wBgCsJoC,CAxCxC,mGA6CY,wBAAyB,CA7CrC,sGAkDY,2BAA4B,CAC7B,CC9MX,kBAGE,kBAAmB,CAMnB,qBpCFa,CoCGb,QAAS,CjCKP,eiCJsB,CAJxB,apCUa,CoCfb,YAAa,CrC+RT,mBAvE+B,CqC9MnC,oBAAqB,CAPrB,mBpCicwB,CoCrcxB,iBAAkB,CAOlB,eAAgB,CjBIZ,sJiBRJ,UnCiwCgF,CkBrvC5E,uCiBhBN,kBjBiBQ,eAAgB,CiBgCvB,CAjDD,kCAiBI,qBpCVW,CoCWX,kCAFA,apCPc,CoCTlB,wCAsBM,yBnC0vCmD,CmChxCzD,gEAqBM,8SnC0vC6D,CmC/wCnE,wBAkCI,2BAA4B,CAC5B,sBpC0ayB,CoC7azB,UAAW,CAJX,aAAc,CAEd,apC+ayB,CoC9azB,gBAAiB,CjBnBf,qCiBiBF,YnCkvC+D,CkB/vC7D,uCiBhBN,wBjBiBQ,eAAgB,CiBoBrB,CArCH,wBAwCI,SAAU,CAxCd,wBA6CI,oBpC1Ba,CoC4Bb,gBADA,SAAU,CAFV,SpC+ZoC,CoC3ZrC,kBAID,eAAgB,CACjB,gBAGC,qBpCjDa,CoCkDb,wBpChDgB,CoC8ClB,8BjC/BI,8BHgIoB,CG/HpB,+BH+HoB,CoCjGxB,gDjC/BI,0CDsO4D,CCrO5D,2CDqO4D,CkCvMhE,oCAaI,YAAa,CAbjB,6BjChBI,kCADA,kCHkHoB,CoCjGxB,yDjChBI,8CADA,8CDwN4D,CkCvMhE,iDjChBI,kCADA,kCHkHoB,CoCrEnB,gBAKH,mBpC8WwB,CoC7WzB,qCASG,cAAe,CAFnB,iCAOI,aAAc,CjCxFd,gBiCuFA,cAEwB,CAR5B,6CAUoB,YAAa,CAVjC,4CAWmB,eAAgB,CAI9B,+DjChGD,eHygBwB,CoCzavB,YC5GH,4BrCkhByB,CqCxhBzB,YAAa,CACb,cAAe,CtCmSX,kBAvE+B,CsCxNnC,eAAgB,CAFhB,erCohB0B,CqCrhB1B,gBrCyhB0B,CqCnhB3B,kCAKG,kBpC2+CqC,CoC9+CzC,yCAQM,arCDY,CqCEZ,wCAAS,CAHT,UAAW,CACX,mBAEyO,CAT/O,wBAcI,arCPc,CqCQf,YCzBD,YAAa,CjCIb,gBADA,cACgB,CiCFjB,WAOC,qBtCCa,CsCAb,wBtCGgB,CsCNhB,atCee,CsChBf,aAAc,CADd,iBAAkB,CnBUd,6HlBksCoJ,CkB9rCpJ,uCmBfN,WnBgBQ,eAAgB,CmBQvB,CAxBD,iBAcI,qBAFA,oBAA6D,CAF7D,StCDc,CsCTlB,kCAaI,wBtCLc,CsCGd,atCwR6B,CsCnSjC,iBAsBI,gBADA,SrC0qCiC,CqC7qCjC,StCiR6B,CsC5Q9B,wCAKC,gBtCuHc,CsCzHlB,6BlB3BE,wBpBmBe,CsCiBb,qBAFA,UtC3BW,CsC0BX,StCda,CsCQjB,+BAeI,qBtCnCW,CsCoCX,qBAHA,atC3Bc,CsC4Bd,mBtC/Bc,CsCTlB,WCAI,wBvC6RyB,CuC3R1B,kCpC2CC,kCADA,8BH2GoB,CuCnJtB,iCpC2BE,mCADA,+BHyHoB,CuCxJtB,0BxCiSI,oBwChSF,uBxCyNiC,CwCvNlC,iDpC2CC,gCADA,4BH4GqB,CuC/IhB,gDpCsBL,iCADA,6BH0HqB,CuCzJvB,0BxCiSI,mBwChSF,qBxCyNiC,CwCvNlC,iDpC2CC,iCADA,6BH0GqB,CuC7IhB,gDpCsBL,kCADA,8BHwHqB,CuCvIhB,OpCDL,sBqCRF,UxCAa,CwCLb,oBAAqB,CzC+RjB,eAvE+B,CyCrNnC,exCqLoB,CwCpLpB,aAAc,CAHd,qBxC0esB,CwCretB,iBAAkB,CAElB,uBAAwB,CADxB,kBxC+IsB,CwCvJxB,aAeI,YAAa,CACd,YAKD,iBAAkB,CAClB,QAAS,CACV,OCpBC,4BAA6C,CtCW3C,sBsCZF,kBxCg6CkC,CwCj6ClC,sBzC0fuB,CyC3fvB,iBzCuJsB,CyClJvB,eAKC,aAAc,CACf,YAIC,ezC0KoB,CyCzKrB,mBAQC,qBxCi5CkD,CwCl5CpD,8BASI,yBAJA,iBAAkB,CAElB,OAAQ,CADR,KAAM,CAEN,SzC4dqB,CyC1dtB,eCpCD,axC4MmC,CwCxMnC,2BACE,axC4MiC,CwC3MlC,iBAND,axC4MmC,CwCxMnC,6BACE,axC4MiC,CwC3MlC,eAND,axC4MmC,CwCxMnC,2BACE,axC4MiC,CwC3MlC,YAND,axC4MmC,CwCxMnC,wBACE,axC4MiC,CwC3MlC,eAND,axC4MmC,CwCxMnC,2BACE,axC4MiC,CwC3MlC,cAND,axC4MmC,CwCxMnC,0BACE,axC4MiC,CwC3MlC,aAND,axC4MmC,CwCxMnC,yBACE,axC4MiC,CwC3MlC,YAND,axC4MmC,CwCxMnC,wBACE,axC4MiC,CwC3MlC,qBAND,axC4MmC,CwCxMnC,iCACE,axC4MiC,CwC3MlC,aAND,axC4MmC,CwCxMnC,yBACE,axC4MiC,CwC3MlC,aAND,UxC4MmC,CwCxMnC,yBACE,axC4MiC,CwC3MlC,wCCHC,GAAK,0B1Cg7C+B,EyC76CrC,gCCHC,GAAK,0B1Cg7C+B,E0C36CxC,UAKE,wB3CFgB,CGMd,qBHyIoB,CQ9IlB,+CTuRA,mBAvE+B,C4ClNnC,W3CSa,C2CHd,wBAPC,YAAa,CAEb,e1Cg7CgD,C0C36CjD,cAUC,wB3CLe,C2CEf,U3Cda,C2CWb,qBAAsB,CACtB,sBAAuB,CAGvB,iBAAkB,CxBVd,0BwBWJ,kB1Ck6CgD,CkBz6C5C,uCwBAN,cxBCQ,eAAgB,CwBSvB,CAED,sBvBYE,2KAA6I,CuBV7I,yB1Cm5CsC,C0Cl5CvC,uBAIG,yDAA0C,CAA1C,iDAA8D,CAG5D,uCAJJ,uBAKM,sBAAW,CAAX,cAAe,CAGpB,CC1CH,YzCeI,sByCdF,YAAa,CACb,qBAAsB,CAItB,eAAgB,CADhB,c5CmJsB,C4ChJvB,qBAIC,sBADA,oBACsB,CAFxB,+BAMI,kCAAoC,CACpC,yBAA0B,CAC3B,wBAWD,a5CfgB,C4CgBhB,mBAFA,UAEmB,CAHrB,4DAWI,yBAFA,a5CtBc,C4CuBd,oBAAqB,CAFrB,S5C3Bc,C4CmBlB,+BAgBI,yBADA,a5CjCc,C4CmCf,iBAcD,qB5CnDa,C4CoDb,yBAHA,a5CxCgB,C4CsChB,aAAc,CACd,mB5Cgd8B,C4Cld9B,iB5C5CgB,C4C2ClB,6BzC5BI,8ByCsCkC,CzCrClC,+ByCqCkC,CAVtC,4BzCbI,kCADA,kCyC4BqC,CAdzC,oDAqBI,sBAFA,a5C1Dc,C4C2Dd,mB5CjEW,C4C6Cf,wBA4BI,wB5C7Da,C4C8Db,qBAFA,U5CxEW,C4CuEX,S5C3Da,C4CiCjB,kCAiCI,kBAAmB,CAjCvB,yCAqCM,qBADA,e5C4DY,C4C1Db,uBAcC,kBAAmB,CADrB,oDzCjCA,iCHkFoB,CG9FpB,yByCmDsC,CANtC,mDzCjCA,4BAZA,+ByCwD2C,CAX3C,+CAeM,YAAa,CAfnB,yDAoBM,oBADA,oBACoB,CApB1B,gEAwBQ,sBADA,gB5CsBM,CUzFd,yBkC4CA,0BACE,kBAAmB,CADrB,uDzCjCA,iCHkFoB,CG9FpB,yByCmDsC,CANtC,sDzCjCA,4BAZA,+ByCwD2C,CAX3C,kDAeM,YAAa,CAfnB,4DAoBM,oBADA,oBACoB,CApB1B,mEAwBQ,sBADA,gB5CsBM,C4CpBP,ClCrEP,yBkC4CA,0BACE,kBAAmB,CADrB,uDzCjCA,iCHkFoB,CG9FpB,yByCmDsC,CANtC,sDzCjCA,4BAZA,+ByCwD2C,CAX3C,kDAeM,YAAa,CAfnB,4DAoBM,oBADA,oBACoB,CApB1B,mEAwBQ,sBADA,gB5CsBM,C4CpBP,ClCrEP,yBkC4CA,0BACE,kBAAmB,CADrB,uDzCjCA,iCHkFoB,CG9FpB,yByCmDsC,CANtC,sDzCjCA,4BAZA,+ByCwD2C,CAX3C,kDAeM,YAAa,CAfnB,4DAoBM,oBADA,oBACoB,CApB1B,mEAwBQ,sBADA,gB5CsBM,C4CpBP,ClCrEP,0BkC4CA,0BACE,kBAAmB,CADrB,uDzCjCA,iCHkFoB,CG9FpB,yByCmDsC,CANtC,sDzCjCA,4BAZA,+ByCwD2C,CAX3C,kDAeM,YAAa,CAfnB,4DAoBM,oBADA,oBACoB,CApB1B,mEAwBQ,sBADA,gB5CsBM,C4CpBP,ClCrEP,0BkC4CA,2BACE,kBAAmB,CADrB,wDzCjCA,iCHkFoB,CG9FpB,yByCmDsC,CANtC,uDzCjCA,4BAZA,+ByCwD2C,CAX3C,mDAeM,YAAa,CAfnB,6DAoBM,oBADA,oBACoB,CApB1B,oEAwBQ,sBADA,gB5CsBM,C4CpBP,CAaX,kBzC9HI,eyC+HsB,CAD1B,mCAII,oB5CGc,C4CPlB,8CAOM,qBAAsB,CCpJ1B,yBAEE,yBADA,a3CyMiC,C2C1MnC,4GAQM,yBADA,a3CwM6B,C2C/MnC,uDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,2BAEE,yBADA,a3CyMiC,C2C1MnC,gHAQM,yBADA,a3CwM6B,C2C/MnC,yDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,yBAEE,yBADA,a3CyMiC,C2C1MnC,4GAQM,yBADA,a3CwM6B,C2C/MnC,uDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,sBAEE,yBADA,a3CyMiC,C2C1MnC,sGAQM,yBADA,a3CwM6B,C2C/MnC,oDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,yBAEE,yBADA,a3CyMiC,C2C1MnC,4GAQM,yBADA,a3CwM6B,C2C/MnC,uDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,wBAEE,yBADA,a3CyMiC,C2C1MnC,0GAQM,yBADA,a3CwM6B,C2C/MnC,sDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,uBAEE,yBADA,a3CyMiC,C2C1MnC,wGAQM,yBADA,a3CwM6B,C2C/MnC,qDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,sBAEE,yBADA,a3CyMiC,C2C1MnC,sGAQM,yBADA,a3CwM6B,C2C/MnC,oDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,+BAEE,yBADA,a3CyMiC,C2C1MnC,wHAQM,yBADA,a3CwM6B,C2C/MnC,6DAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,uBAEE,yBADA,a3CyMiC,C2C1MnC,wGAQM,yBADA,a3CwM6B,C2C/MnC,qDAaM,wB3CkM6B,C2CjM7B,qBAFA,U3CmM6B,C2C/MnC,uBAEE,sBADA,U3CyMiC,C2C1MnC,wGAQM,yBADA,U3CwM6B,C2C/MnC,qDAaM,qB3CkM6B,C2CjM7B,kBAFA,U3CmM6B,C2ChM9B,WCRL,iYAA0F,CAC1F,QAAS,C3COP,qBHyIo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4E0EA,ehFmduB,CUpfrB,4BNzCF,W4E6EE,gBhFyd0B,CgFvd7B,C5E/EC,W4EkFA,ehF2cuB,CUpfrB,4BNzCF,W4EqFE,iBhFkd2B,CgFhd9B,C5EvFC,W4E0FA,ehFmcuB,CUpfrB,4BNzCF,W4E6FE,chF2cwB,CI/iB5B,M4E8GI,mBhFocyB,CgF5c5B,CAeD,gBACE,iBAAkB,CAClB,cAAe,CACf,UAAW,C5EtDb,mB4E0DE,YAAa,C5E1Df,0B4E6DI,YAAa,CACd,kBAQD,YADA,iBACY,CACb,OAMC,UAAW,CACZ,mBAGC,UAAyB,CAC1B,OAGC,WAAY,CAEb,mBAGC,UAAyB,ClFyH3B,KkFlHE,gBhFugBqB,CgFtgBtB,WCrLC,WAAY,CACZ,6BAFA,WAE6B,CAC9B,8BAOC,eADA,iBACe,C3EQjB,Q2EFE,aAAc,C3EOhB,Y2EHE,kBjF6CW,CiF5CZ,mBCtBC,qBADA,qBAAqC,CAFrC,iBAAkB,CAClB,SAEoC,CACrC,aAGC,iBAAkB,CACnB,gECHG,qBAAsB,C3DX1B,qB4DME,apFWgB,CwBjBlB,gE4DYE,gBpF6KoB,CwBzLtB,+D4DYE,gBpF6KoB,CwBzLtB,sI4DYE,gBpF6KoB,CsBrLtB,Y+DME,eAAgB,CACjB,wBAGC,kBpF+2B+C,CoF92BhD,mCAKC,qCrFTa,CqFUd,2CAGC,qBrFba,CsB+Ff,a+DzEE,mBrFslB+B,CqFrlBhC,+BAGC,erFklB+B,CqFjlBhC,+BAGC,gCAA+E,CAOhF,oGAGC,oKnFoFgF,CmFnFjF,uDAGC,uKnFgFgF,CmF/EjF,iBC7CC,mBADA,etFuLoB,CsFzLpB,2BtF0mByI,CsFzmBzI,sBtFiLsB,CsF9KvB,uDAWC,mBAAoB,CACpB,gBAFA,oBAAqB,CADrB,kBAAmB,CAFnB,cAAe,CACf,eAIgB,CACjB,yCAKC,eAFA,cAAe,CACf,eACe,CAChB,YCzBC,kBvF2X6B,CuF1X9B,gBCMC,yCADA,qBxF2nB4B,CwF5nB5B,kBxF+KsB,CwFlLtB,uBxF0mByI,CwFxmBzI,exFuLoB,CwFxLpB,mDAI2D,CAC5D,8BCPC,2BzFmLsB,CyF/KvB,gEADC,mBADA,ezFwLoB,CyFzLpB,sBzFkLsB,CyFzKvB,SCXC,cAAe,CACf,UAAW,CACZ,+BAGC,kCAAoC,CACrC,QAOC,mBADA,sB1FwKsB,C2B/HtB,W+DjCA,qB1Ffa,C0FgBb,a1FJe,C0FEjB,kCAKI,qB1FnBW,C0FoBX,aAA2B,CAN/B,kBAUI,wBAAoC,CACpC,aAA2B,CAC5B,sBAID,8BAAkC,CAClC,a1FzBgB,C0FuBlB,6BAKI,wBAAoC,CAEpC,gBADA,aACgB,CACjB,iBAID,qC1FtCgB,C0FuChB,U1F1Ca,C0FwCf,sEAKI,sC1F1Cc,C0F2Cd,U1F9CW,C0FoDZ,cAID,wB1FpDgB,C0FqDhB,U1FzDa,C0FuDf,6DAUI,wBAAuC,CACvC,aAAyB,CAC1B,iBAID,qC1FnEgB,C0FoEhB,U1FxEa,C0FsEf,sEAKI,sC1FvEc,C0FwEd,U1F5EW,C2BsDb,mB+DgCA,oB1FnFgB,C0FoFhB,a1F7Ea,C0F2Ef,4EAKI,wBAAoC,CACpC,oB1FvFc,C0FwFd,a1FlFW,C0FyFZ,sBAID,oB1FpGgB,C0FqGhB,a1F5Fe,C0F0FjB,qFAWI,wB1FrGa,C0FsGb,oB1FtGa,C0FuGb,U1FnHW,C0FoHZ,kBCzHD,mC3FiBe,C2FhBf,a3FgBe,C2FXd,yEAFC,oCAAmC,CACnC,a3FYa,C2FNd,oBAXD,oC3FYgB,C2FXhB,a3FWgB,C2FNf,+EAFC,qCAAmC,CACnC,a3FOc,C2FDf,kBAXD,oC3FoBe,C2FnBf,a3FmBe,C2Fdd,yEAFC,qCAAmC,CACnC,a3Fea,C2FTd,eAXD,qC3FqBY,C2FpBZ,a3FoBY,C2FfX,gEAFC,sCAAmC,CACnC,a3FgBU,C2FVX,kBAXD,qC3FsBe,C2FrBf,a3FqBe,C2FhBd,yEAFC,sCAAmC,CACnC,a3FiBa,C2FXd,iBAXD,mC3FuBc,C2FtBd,a3FsBc,C2FjBb,sEAFC,oCAAmC,CACnC,a3FkBY,C2FZb,gBAXD,qC3FMgB,C2FLhB,a3FKgB,C2FAf,mEAFC,sCAAmC,CACnC,a3FCc,C2FKf,eAXD,kC3FcgB,C2FbhB,a3FagB,C2FRf,gEAFC,mCAAmC,CACnC,a3FSc,C2FHf,wBAXD,qC3FmBqB,C2FlBrB,a3FkBqB,C2FbpB,2FAFC,sCAAmC,CACnC,a3FcmB,C2FRpB,gBAXD,kC3Fea,C2Fdb,a3Fca,C2FTZ,mEAFC,mCAAmC,CACnC,a3FUW,C2FJZ,gBAXD,qC3FKa,C2FJb,U3FIa,C2FCZ,mEAFC,sCAAmC,CACnC,U3FAW,C2FMZ,UD8HD,mB1FgBwB,C0FfzB,oBAQC,oBAFA,qB1F2I4B,C0F1I5B,sB1FQwB,C0FNzB,sBAGC,aAAc,CACd,aAAc,CACd,SAAU,CACX,iEAGC,qB1F6I+B,C0F5I/B,sB1F4I+B,C0F3IhC,iEAGC,qB1FmI+B,C0FlI/B,sB1FkI+B,C0FjIhC,2BAGC,mB1F4a6B,C0F3a7B,oB1F2a6B,CyBtfc,emE5F3C,oB5Fsa+B,C4Fra/B,qB5Fqa+B,C8B1SjC,e8DlHE,oB5F4Z+B,C4F3Z/B,sBAFA,cAAe,CADf,U5F8Z+B,C8B1SjC,0C8D9GI,YAAa,CACd,8BAID,iB5FkoB8B,C4FjoB/B,eAMC,aAAc,CADhB,qBAII,uBAAwB,CAJ5B,0CAQI,YAAa,C9DiJjB,iB8DrIE,gB5FuJoB,C4FtJpB,e5F0IoB,C4FvIpB,qBAFA,gB5FygBmB,C4F/gBnB,oB5F6X+B,C4F5X/B,qB5F4X+B,C4F1X/B,oB5FuK4B,C4FxK5B,aAAc,CAKd,wBACqB,C7DzBnB,uB6DkCF,qBAAuB,CACvB,gBAHA,mBAAsB,CACtB,qBAEgB,CACjB,gCAGC,eAAgB,CACjB,kBAMC,W5FulBuB,C4FtlBvB,oB5FilB6B,C4FhlB9B,kBAGC,e5FmlB2B,C4FllB5B,kBAGC,e5FglB2B,C4F/kB5B,kBAGC,e5F6kB2B,C4F5kB5B,oCAIC,uB5F4jBiC,C4F3jBlC,oEAIC,mB5FujBiC,C4FtjBjC,oB5FsjBiC,C4FrjBjC,mB5FqjBiC,C4FpjBjC,oB5FojBiC,C4FnjBlC,wBAMC,a5FiT2B,CkC9Y7B,Q2DVE,8B5FkiB+C,C4FjiB/C,0CAA4C,CAC5C,Y5FmiCsC,CS/9BpC,4BmF9DJ,6CAKM,a7FDY,C6FJlB,8MAcM,a7FLW,C6FTjB,8CAkBM,a7FdY,C6Feb,CAOL,oIAEE,8BAA+C,CAC/C,+BAAgD,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BAA2C,CAC3C,mBlGsdsB,CkGrdtB,oBlGoIwB,CkGvI1B,wBAOI,aAAc,CACd,SAAU,CARd,+BAaI,YAA8C,CAC9C,iBlGmpBqB,CkGlpBrB,kBlGkpBqB,CkGjpBtB,aAOD,iBAAkB,CAClB,YjGy/BsC,CiGx/BvC,oBAIC,WADA,QACW,CACZ,qBAIC,aADA,UACa,CACd,4BAMC,+BAAmC,CACnC,uBAA0B,CAF5B,oEAKI,wBAAoC,CACpC,alG/Ca,CkGgDd,gCAID,kCAAqC,CACrC,oBAA0C,CAF5C,4EAKI,wBAAsC,CACtC,UlGrEW,CkGsEZ,uBC3ED,mCnGiBe,CmGhBf,anGgBe,CmGdf,sEAEE,mCnGYa,CmGXb,anGWa,CmGVd,yBAPD,oCnGYgB,CmGXhB,anGWgB,CmGThB,0EAEE,oCnGOc,CmGNd,anGMc,CmGLf,uBAPD,oCnGoBe,CmGnBf,anGmBe,CmGjBf,sEAEE,oCnGea,CmGdb,anGca,CmGbd,oBAPD,qCnGqBY,CmGpBZ,anGoBY,CmGlBZ,gEAEE,qCnGgBU,CmGfV,anGeU,CmGdX,uBAPD,qCnGsBe,CmGrBf,anGqBe,CmGnBf,sEAEE,qCnGiBa,CmGhBb,anGgBa,CmGfd,sBAPD,mCnGuBc,CmGtBd,anGsBc,CmGpBd,oEAEE,mCnGkBY,CmGjBZ,anGiBY,CmGhBb,qBAPD,qCnGMgB,CmGLhB,anGKgB,CmGHhB,kEAEE,qCnGCc,CmGAd,anGAc,CmGCf,oBAPD,kCnGcgB,CmGbhB,anGagB,CmGXhB,gEAEE,kCnGSc,CmGRd,anGQc,CmGPf,6BAPD,qCnGmBqB,CmGlBrB,anGkBqB,CmGhBrB,kFAEE,qCnGcmB,CmGbnB,anGamB,CmGZpB,qBAPD,kCnGea,CmGdb,anGca,CmGZb,kEAEE,kCnGUW,CmGTX,anGSW,CmGRZ,qBAPD,qCnGKa,CmGJb,UnGIa,CmGFb,kEAEE,qCnGAW,CmGCX,UnGDW,CmGEZ,wBAPD,oCnGYgB,CmGXhB,anGWgB,CmGThB,wEAEE,oCnGOc,CmGNd,anGMc,CmGLf,mBDwFD,wBlGpFgB,CkGqFhB,UlG3Fa,CkGoGb,uEACE,UlGrGW,CkGoGb,kBACE,alG5Fc,CkG2FhB,iBACE,UlGrGW,CkGoGb,gBACE,alG5Fc,CkG2FhB,uDACE,UlGrGW,CkGoGb,gBACE,alG5Fc,CyCgChB,erBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,2BACE,UxC4MiC,CwC3MlC,qD0DMG,UpGHS,CoGDb,kBAQI,wBAAsE,C3DkC1E,iBrBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,6BACE,UxC4MiC,CwC3MlC,yD0DMG,UpGHS,CoGDb,oBAQI,wBAAsE,C3DkC1E,erBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,2BACE,UxC4MiC,CwC3MlC,qD0DMG,UpGHS,CoGDb,kBAQI,wBAAsE,C3DkC1E,YrBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,wBACE,UxC4MiC,CwC3MlC,+C0DMG,UpGHS,CoGDb,eAQI,wBAAsE,C3DkC1E,erBhDA,wBlB0MmC,CwC1MnC,qBAFA,axC4MmC,CwCxMnC,2BACE,axC4MiC,CwC3MlC,qD0DMG,apGMY,CoGVhB,kBAQI,wBAAsE,C3DkC1E,crBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,0BACE,UxC4MiC,CwC3MlC,mD0DMG,UpGHS,CoGDb,iBAQI,wBAAsE,C3DkC1E,arBhDA,wBlB0MmC,CwC1MnC,qBAFA,axC4MmC,CwCxMnC,yBACE,axC4MiC,CwC3MlC,iD0DMG,apGMY,CoGVhB,gBAQI,wBAAsE,C3DkC1E,YrBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,wBACE,UxC4MiC,CwC3MlC,+C0DMG,UpGHS,CoGDb,eAQI,wBAAsE,C3DkC1E,qBrBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,iCACE,UxC4MiC,CwC3MlC,iE0DMG,UpGHS,CoGDb,wBAQI,wBAAsE,C3DkC1E,arBhDA,wBlB0MmC,CwC1MnC,qBAFA,UxC4MmC,CwCxMnC,yBACE,UxC4MiC,CwC3MlC,iD0DMG,UpGHS,CoGDb,gBAQI,wBAAsE,C3DkC1E,arBhDA,qBlB0MmC,CwC1M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6B/FnC,qB5B4K2B,CmB3RvB,8HsG6KJ,UxHwmBiJ,CkBjxB7I,uCsGwKN,wBtGvKQ,eAAgB,CsG2KvB,CAED,mCACE,YAAa,CACd,kBAOC,4BAA6B,CAG7B,WAAY,CACZ,cARA,YAAa,CAKb,kBzHlBsB,CyHmBtB,ezHZoB,CyHSpB,mCAAqE,CADrE,gCAAkE,CADlE,UzHnLa,CyHiLf,wBAYI,YAAa,CACd,6BAID,aAAc,CACf,8CAKC,kBAAmB,CACpB,4DAUC,4BAA2C,CtHrNzC,qBHyIoB,CyH6EtB,cAAe,CAPf,oBAAqB,C1HmEjB,kBAvE+B,C0HKnC,ezHrCoB,C4B/DpB,qB5B4K2B,CyHvE3B,iBAAkB,CtGpNd,8HsGuNJ,wBAAiB,CAAjB,qBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CADjB,qBAAsB,CADtB,kBxHgkBiJ,CkBjxB7I,uCsG4MN,4DtG3MQ,eAAgB,CsGkOvB,CAvBD,gJAeI,oBAAqB,CAfzB,gJAqBI,gBADA,SzHoD6B,CyHlD9B,uErGlPD,wBpBmBe,C4BDf,oB5BCe,CQTX,gBoBMJ,U5BsSmB,C4BjSnB,mFRrBA,wBlB+MmC,C0BvLjC,qBAFA,U1ByLiC,C0BtLlC,4LRzBD,wBlB+MmC,C0BhLjC,oB1BgLiC,CMrM/B,4CoBmBF,UAI4F,CAK7F,qfAQC,wB1BiKiC,C0B9JjC,qBAJA,U1BkKiC,C0BvKnC,ijBpB9BI,2CoB2CmG,CAKpG,kLAMD,wB5B7Ca,C4BgDb,qBAJA,U5B5Ca,C4BiDd,8B6FuLD,cAAe,CAChB,yCAGC,cAAe,CAChB,8BrGhQC,qBpBOa,CyH8Pb,qBjH3PI,eR4Se,C4BtSnB,a5BAgB,CyHoPhB,gBzH1PgB,C4BWhB,oCRrBA,qBlB0MmC,C0BlLjC,kBAFA,a1BoLiC,C0BjLlC,mFRzBD,qBlB0MmC,C0B3KjC,iB1B2KiC,CMhM/B,6CoBmBF,aAI4F,CAK7F,+NAQC,qB1B4JiC,C0BzJjC,kBAJA,a1B6JiC,C0BlKnC,6PpB9BI,4CoB2CmG,CAKpG,8EAMD,qB5BzDW,C4B4DX,kBAJA,a5BxDW,C4B6DZ,yC6FqMD,YAAa,CACd,sBAOC,kBADA,kBzHrC4B,CyHuC7B,eAIC,YADA,cACY,C5BrOd,kB6B/CE,eAAgB,CACjB,mBAGC,gBAAiB","sources":["webpack://landkit/./node_modules/bootstrap/scss/bootstrap.scss","webpack://landkit/./src/scss/theme.scss","webpack://landkit/./node_modules/bootstrap/scss/_root.scss","webpack://landkit/./node_modules/bootstrap/scss/_reboot.scss","webpack://landkit/./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack://landkit/./src/scss/theme/_variables.scss","webpack://landkit/./node_modules/bootstrap/scss/_variables.scss","webpack://landkit/./node_modules/bootstrap/scss/_functions.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack://landkit/./node_modules/bootstrap/scss/_type.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_lists.scss","webpack://landkit/./node_modules/bootstrap/scss/_images.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_image.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_box-shadow.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_container.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://landkit/./node_modules/bootstrap/scss/_containers.scss","webpack://landkit/./node_modules/bootstrap/scss/_grid.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_grid.scss","webpack://landkit/./node_modules/bootstrap/scss/_tables.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_table-variants.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_labels.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_form-text.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_form-control.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_transition.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_form-select.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_form-check.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_form-range.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_floating-labels.scss","webpack://landkit/./node_modules/bootstrap/scss/forms/_input-group.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_forms.scss","webpack://landkit/./node_modules/bootstrap/scss/_buttons.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack://landkit/./node_modules/bootstrap/scss/_transitions.scss","webpack://landkit/./node_modules/bootstrap/scss/_dropdown.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_caret.scss","webpack://landkit/./node_modules/bootstrap/scss/_button-group.scss","webpack://landkit/./node_modules/bootstrap/scss/_nav.scss","webpack://landkit/./node_modules/bootstrap/scss/_navbar.scss","webpack://landkit/./node_modules/bootstrap/scss/_card.scss","webpack://landkit/./node_modules/bootstrap/scss/_accordion.scss","webpack://landkit/./node_modules/bootstrap/scss/_breadcrumb.scss","webpack://landkit/./node_modules/bootstrap/scss/_pagination.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_pagination.scss","webpack://landkit/./node_modules/bootstrap/scss/_badge.scss","webpack://landkit/./node_modules/bootstrap/scss/_alert.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_alert.scss","webpack://landkit/./node_modules/bootstrap/scss/_progress.scss","webpack://landkit/./node_modules/bootstrap/scss/_list-group.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_list-group.scss","webpack://landkit/./node_modules/bootstrap/scss/_close.scss","webpack://landkit/./node_modules/bootstrap/scss/_toasts.scss","webpack://landkit/./node_modules/bootstrap/scss/_modal.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_backdrop.scss","webpack://landkit/./node_modules/bootstrap/scss/_tooltip.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack://landkit/./node_modules/bootstrap/scss/_popover.scss","webpack://landkit/./node_modules/bootstrap/scss/_carousel.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://landkit/./node_modules/bootstrap/scss/_spinners.scss","webpack://landkit/./node_modules/bootstrap/scss/_offcanvas.scss","webpack://landkit/./node_modules/bootstrap/scss/_placeholders.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_colored-links.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_ratio.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_position.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_stacks.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_visually-hidden.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_visually-hidden.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_stretched-link.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_text-truncation.scss","webpack://landkit/./node_modules/bootstrap/scss/helpers/_vr.scss","webpack://landkit/./node_modules/bootstrap/scss/mixins/_utilities.scss","webpack://landkit/./node_modules/bootstrap/scss/utilities/_api.scss","webpack://landkit/./src/scss/theme/utilities/_background.scss","webpack://landkit/./src/scss/theme/utilities/_images.scss","webpack://landkit/./src/scss/theme/utilities/_lift.scss","webpack://landkit/./src/scss/theme/utilities/_overlay.scss","webpack://landkit/./src/scss/theme/mixins/_overlay.scss","webpack://landkit/./src/scss/theme/utilities/_position.scss","webpack://landkit/./src/scss/theme/utilities/_shadows.scss","webpack://landkit/./src/scss/theme/utilities/_sizing.scss","webpack://landkit/./src/scss/theme/utilities/_type.scss","webpack://landkit/./src/scss/theme/_reboot.scss","webpack://landkit/./src/scss/theme/_type.scss","webpack://landkit/./src/scss/theme/_images.scss","webpack://landkit/./src/scss/theme/_grid.scss","webpack://landkit/./src/scss/theme/_tables.scss","webpack://landkit/./src/scss/theme/forms/_floating-labels.scss","webpack://landkit/./src/scss/theme/forms/_form-check.scss","webpack://landkit/./src/scss/theme/forms/_form-control.scss","webpack://landkit/./src/scss/theme/forms/_form-group.scss","webpack://landkit/./src/scss/theme/forms/_form-select.scss","webpack://landkit/./src/scss/theme/forms/_input-group.scss","webpack://landkit/./src/scss/theme/_buttons.scss","webpack://landkit/./src/scss/theme/mixins/_buttons.scss","webpack://landkit/./src/scss/theme/_dropdown.scss","webpack://landkit/./src/scss/theme/_navbar.scss","webpack://landkit/./src/scss/theme/_card.scss","webpack://landkit/./src/scss/theme/_accordion.scss","webpack://landkit/./src/scss/theme/_breadcrumb.scss","webpack://landkit/./src/scss/theme/_pagination.scss","webpack://landkit/./src/scss/theme/_badge.scss","webpack://landkit/./src/scss/theme/mixins/_badge.scss","webpack://landkit/./src/scss/theme/_alert.scss","webpack://landkit/./src/scss/theme/_list-group.scss","webpack://landkit/./src/scss/theme/_close.scss","webpack://landkit/./src/scss/theme/_modal.scss","webpack://landkit/./src/scss/theme/_popover.scss","webpack://landkit/./src/scss/theme/_avatar.scss","webpack://landkit/./src/scss/theme/_device.scss","webpack://landkit/./src/scss/theme/_footer.scss","webpack://landkit/./src/scss/theme/_icon.scss","webpack://landkit/./src/scss/theme/_list.scss","webpack://landkit/./src/scss/theme/_screenshot.scss","webpack://landkit/./src/scss/theme/_section.scss","webpack://landkit/./src/scss/theme/_shapes.scss","webpack://landkit/./src/scss/theme/_sidenav.scss","webpack://landkit/./src/scss/theme/vendor/_aos.scss","webpack://landkit/./src/scss/theme/vendor/_bigpicture.scss","webpack://landkit/./src/scss/theme/vendor/_choices.scss","webpack://landkit/./src/scss/theme/vendor/_dropzone.scss","webpack://landkit/./src/scss/theme/vendor/_feather.scss","webpack://landkit/./src/scss/theme/vendor/_flickity.scss","webpack://landkit/./src/scss/theme/vendor/_highlight.scss","webpack://landkit/./src/scss/theme/vendor/_quill.scss","webpack://landkit/./src/scss/_user.scss"],"sourcesContent":["/*!\n * Bootstrap v5.1.1 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n","/**\n * Custom variables followed by theme variables followed by Bootstrap variables\n * to ensure cascade of styles.\n */\n\n// Bootstrap functions\n@import '~bootstrap/scss/functions';\n\n// Theme functions\n@import 'theme/functions';\n\n// Custom variables\n@import 'user-variables';\n\n// Theme variables\n@import 'theme/variables';\n\n// Bootstrap core\n@import '~bootstrap/scss/bootstrap';\n\n// Theme core\n@import 'theme/theme';\n\n// Custom core\n@import 'user';",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`