+
+
+
+
+
+ Welcome home
+
+
+
+
+
\ No newline at end of file
diff --git a/HiFiViews/test.html b/HiFiViews/test.html
new file mode 100644
index 0000000..e69de29
diff --git a/controllers/auth.js b/controllers/auth.js
new file mode 100644
index 0000000..9636026
--- /dev/null
+++ b/controllers/auth.js
@@ -0,0 +1,71 @@
+const express = require('express'),
+ router = express.Router();
+const session = require('express-session');
+const passport = require('passport');
+const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
+const KEYS = require('../config/keys.json');
+//keeping our secrets out of our main application is a security best practice
+//we can add /config/keys.json to our .gitignore file so that we keep it local/private
+// console.log(KEYS);
+let userProfile; //only used if you want to see user info beyond username
+
+const User = require('../models/user_model');
+
+router.use(session({
+ resave: false,
+ saveUninitialized: true,
+ cookie: {
+ maxAge: 600000 //600 seconds of login time before being logged out
+ },
+ secret: KEYS["session-secret"]
+}));
+router.use(passport.initialize());
+router.use(passport.session());
+
+passport.use(new GoogleStrategy({
+ clientID: KEYS["google-client-id"],
+ clientSecret: KEYS["google-client-secret"],
+ callbackURL: "http://localhost:3000/auth/google/callback"
+ //todo: port==process.env.PORT? :
+},
+ function (accessToken, refreshToken, profile, done) {
+ userProfile = profile; //so we can see & use details form the profile
+ return done(null, userProfile);
+ }
+));
+
+passport.serializeUser(function (user, cb) {
+ cb(null, user);
+});
+passport.deserializeUser(function (obj, cb) {
+ cb(null, obj);
+});
+
+/*
+ This triggers the communication with Google
+*/
+router.get('/auth/google',
+ passport.authenticate('google', {
+ scope: ['email', 'profile']
+ }));
+
+/*
+ This callback is invoked after Google decides on the login results
+*/
+router.get('/auth/google/callback',
+ passport.authenticate('google', {
+ failureRedirect: '/error?code=401'
+ }),
+ function (request, response) {
+ console.log(userProfile);
+ let user = request.user._json.email;
+ User.createUser(user, user.split('.')[0]);//only creates if not in players.json
+ response.redirect('/');
+ });
+
+router.get("/auth/logout", (request, response) => {
+ request.logout();
+ response.redirect('/');
+});
+
+module.exports = router;
diff --git a/controllers/hofprints_controller.js b/controllers/hofprints_controller.js
new file mode 100644
index 0000000..809466d
--- /dev/null
+++ b/controllers/hofprints_controller.js
@@ -0,0 +1,60 @@
+const express = require('express'),
+ router = express.Router();
+const fs = require('fs');
+
+
+function loggedIn(request, response, next) {
+ if (request.user) {
+ next();
+ } else {
+ response.redirect('/login');
+ }
+}
+
+
+router.get('/hofprints', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("hofprints/halloffame", {
+ user:request.user,
+ hofPrints : JSON.parse(fs.readFileSync("data/hofprints.json"))
+ })
+ });
+
+ router.get('/hofprints/hofsubmit', function(request,response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("hofprints/hofSubmit", {
+ user:request.user
+ })
+ });
+
+ router.post('/hofprints', loggedIn, function(request, response){
+ let hofPrints = JSON.parse(fs.readFileSync('data/hofprints.json'));
+ let printName = request.body.printName;
+ let desc = request.body.description;
+ let printer = request.body.printer;
+ let stName = request.body.studentName;
+ let ph = request.body.photo;
+
+ if(ph && stName && desc && printer && printName){
+ newPrint = {
+ "name":printName,
+ "printer":printer,
+ "student":stName,
+ "description":desc,
+ "photo":ph
+ }
+ hofPrints[printName] = newPrint;
+ fs.writeFileSync('data/hofprints.json', JSON.stringify(hofPrints))
+
+ response.status(200);
+ response.setHeader('Content-Type', "text/html");
+ response.render('hofprints/halloffame')
+ response.redirect('/halloffame')
+ } else {
+ alert("Please fill out every field")
+ }
+ })
+
+ module.exports = router;
\ No newline at end of file
diff --git a/controllers/index.js b/controllers/index.js
new file mode 100644
index 0000000..c25b489
--- /dev/null
+++ b/controllers/index.js
@@ -0,0 +1,84 @@
+const express = require('express'),
+ router = express.Router();
+
+const fs = require('fs');
+
+function loggedIn(request, response, next) {
+ if (request.user) {
+ next();
+ } else {
+ response.redirect('/login');
+ }
+}
+
+ router.get('/', function(request, response) {
+ let hofPrints = JSON.parse(fs.readFileSync('data/hofprints.json'));
+ let keys = Object.keys(hofPrints)
+ let randomKey = Math.floor(Math.random()*keys.length);
+ let print = hofPrints[keys[randomKey]]
+ // console.log(print)
+ const date = new Date();
+ console.log(date)
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html');
+ response.render("index", {
+ user: request.user,
+ hofPrint: print,
+ printers: JSON.parse(fs.readFileSync('data/printers.json'))
+
+ })
+ });
+
+ router.get('/guide', function(request, response) {
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("guide", {
+ user: request.user
+ })
+ });
+
+ router.get('/advtips', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("advTips", {
+ user: request.user
+ })
+ })
+
+ router.get('/schedule', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("schedule", {
+ user: request.user
+ })
+ });
+
+
+ router.get('/login', function(request, response) {
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("login", {
+ user: request.user
+ });
+ });
+
+router.get('/error', function(request, response) {
+ const errorCode = request.query.code;
+ if (!errorCode) errorCode = 400;
+ const errors = {
+ '400': "Unknown Client Error",
+ '401': "Invlaid Login",
+ '404': "Resource Not Found",
+ '500': "Server problem"
+ }
+
+ response.status(errorCode);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ user: request.user,
+ "errorCode": errorCode,
+ "details": errors[errorCode]
+ });
+});
+
+module.exports = router
diff --git a/controllers/printers_controller.js b/controllers/printers_controller.js
new file mode 100644
index 0000000..bd9b93b
--- /dev/null
+++ b/controllers/printers_controller.js
@@ -0,0 +1,138 @@
+const express = require('express'),
+ router = express.Router();
+ const fs = require('fs');
+
+ const Printers = require('../models/printer_model')
+
+function loggedIn(request, response, next) {
+ if (request.user) {
+ next();
+ } else {
+ response.redirect('/login');
+ }
+}
+
+
+//used to be printers/allPrinters
+router.get('/printer', function(request, response){
+ let printerList = JSON.parse(fs.readFileSync('data/printers.json'))
+ response.status(200)
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printers/allPrinters", {
+ user: request.user,
+ printers: printerList
+ });
+})
+
+//Used to be /report
+router.get('/printer/report', loggedIn, function(request, response){
+ printerList = JSON.parse(fs.readFileSync('data/printers.json'))
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printers/report", {
+ user: request.user,
+ printers:printerList
+ })
+});
+
+//used to be /report
+router.post('/printer/report', function(request, response){
+ printerList = JSON.parse(fs.readFileSync('data/printers.json'))
+ let name = request.body.printer;
+ console.log("name = " + name);
+ console.log(printerList[name])
+
+ printerList[name]["errors"].push(request.body.errormsg)
+ fs.writeFileSync('data/printers.json', JSON.stringify(printerList))
+
+ let noSpaceName = name.split(' ').join('')
+
+ response.status(200)
+ response.setHeader('Content-Type', "text/html");
+ response.render("printers/printerDetails", {
+ user: request.user,
+ printer : printerList[name]
+ })
+ response.redirect("/printer/"+noSpaceName)
+});
+//used to be /printer/addPrinter
+router.get('/printer/new', loggedIn, function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printers/addPrinter", {
+ user: request.user,
+ user: request.user
+ })
+ });
+
+
+//used to be /printer/addprinter
+router.post('/printer', function(request, response){
+ console.log("New Printer")
+ let printers = JSON.parse(fs.readFileSync("data/printers.json"))
+ let printerName = request.body.printName;
+ let stats = request.body.status;
+ let serv = request.body.service;
+ let pho = request.body.photo;
+ let location = request.body.local;
+ let err = request.body.err;
+ let prints = request.body.prints;
+ let printTime = request.body.printTime;
+
+ if(printerName && stats && serv && pho && location && err && prints){
+ let newPrinter = {
+ "name":printerName,
+ "Status":stats,
+ "errors":[err],
+ "prints":[prints],
+ "printingTime":printTime,
+ "lastService":serv,
+ "photo":pho,
+ "location":location
+ }
+ printers[printerName] = newPrinter;
+ fs.writeFileSync('data/printers.json', JSON.stringify(printers))
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printers/printerDetails", {
+ user: request.user,
+ printer:printerName.split(' ').join(''),
+ })
+ response.redirect("printerDetails/"+printerName)
+ }
+ });
+//used to be printer/printerName
+router.get('/printer/:id', loggedIn, function(request, response){
+ let printers = Printers.getPrinters()
+ console.log("/printer/:id")
+ let printerName = request.params.id;
+ console.log("printerName = "+printerName)
+ console.log("printer = "+printers[printerName])
+ if(printers[printerName]){
+ console.log("This is a real print")
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printers/printerDetails", {
+ user: request.user,
+ printer: printers[printerName]
+ });
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ user: request.user,
+ "errorCode":"404"
+ });
+ }
+ });
+
+
+ router.get('/printers/status', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printers/status", {
+ user: request.user
+ })
+ });
+
+ module.exports = router;
\ No newline at end of file
diff --git a/controllers/prints_controller.js b/controllers/prints_controller.js
new file mode 100644
index 0000000..a19fe07
--- /dev/null
+++ b/controllers/prints_controller.js
@@ -0,0 +1,244 @@
+const express = require('express'),
+ router = express.Router();
+ const fs = require('fs');
+const multer = require('multer');
+const UUID = require('uuid')
+
+ const Prints = require('../models/print_model');
+ const Printers = require('../models/printer_model');
+ const user_model = require('../models/user_model');
+
+function loggedIn(request, response, next) {
+ if (request.user) {
+ next();
+ } else {
+ response.redirect('/login');
+ }
+}
+
+
+let privateStorage = multer.diskStorage({
+ destination: function (req, file, cb) {
+ cb(null, './uploads')
+ },
+ filename: function (req, file, cb) {
+ console.log(file)
+ cb(null, Date.now()+'-'+file.originalname.replace(' ', '-'));
+ }
+});
+let privateUpload = multer({ storage: privateStorage });
+
+let publicStorage = multer.diskStorage({
+ destination: function (req, file, cb) {
+ console.log(req);
+ cb(null, './public/images')
+ },
+ filename: function (req, file, cb) {
+ console.log(file)
+ cb(null, file.originalname.replace(' ', '-'));
+ }
+});
+let publicUpload = multer({ storage: publicStorage });
+
+ //used to be prints/allprints
+router.get('/print', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+
+ let printsJSON = Prints.getPrints();
+ response.render("prints/allPrints", {
+ user: request.user,
+ prints : printsJSON
+ })
+ });
+
+//used to be prints/printcreate
+ router.get('/print/new', loggedIn, function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("prints/printCreate", {
+ user: request.user
+ })
+ });
+
+ //used to be prints/:printname
+ router.get('/prints/:id', function(request, response){
+ let prints = Prints.getPrints()
+ console.log("/prints/:printName")
+ let printName = request.params.id;
+ // console.log(request)
+ console.log("printName = "+printName)
+ // console.log("prints = "+prints[printName]["description"])
+ if(Prints.isPrint(printName)){
+ console.log("it's the if statement")
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("prints/printDetails", {
+ user: request.user,
+ print: prints[printName],
+ });
+
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ user: request.user,
+ "errorCode":"404"
+ });
+ }
+
+ response.status(200);
+
+ });
+
+ //used to be prints/printcreate
+ router.post('/print', function(request,response){
+ let prints = Prints.getPrints();
+ let printName = request.body.printName;
+ console.log(printName);
+ const file = request.file;
+
+ // console.log(prints);
+ console.log("PrintName = "+ printName);
+ console.log("width = "+ request.body.width)
+ console.log(request)
+ // console.log(request.file);
+ if(request.body.printName && request.body.description && request.body.infill && request.body.width && request.body.time && request.body.printer && request.user["_json"]["email"]){
+
+ let newPrint = Prints.printCreate(request.body.printName, request.body.description, request.body.infill, request.body.width, request.body.time, request.body.printer, request.user["_json"]["email"],request.body.photo, request.body.studentName, request.body.date);
+ user_model.addPrint(request.body.printName)
+
+ console.log("trying to create the new print")
+ console.log(Prints.getPrints())
+
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("prints/printDetails", {
+ user: request.user,
+ print : newPrint
+ })
+ response.redirect("/print/"+printName)
+ } else {
+ }
+ });
+
+
+ router.get('/prints/delete/:id', loggedIn, function(request, response){
+ let printName = request.params.id;
+ Prints.deletePrint(printName);
+
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.redirect("/print");
+ })
+
+
+
+ router.get('/prints/edit/:id', loggedIn, function(request, response){
+ let prints = Prints.getPrints()
+
+ let printName = request.params.id;
+
+ let userEmail = request.user["_json"]["email"];
+ // console.log(request);
+
+ if(Prints.isPrint(printName) && user_model.usersPrint(userEmail, printName)){
+ console.log("it's the if statement")
+ console.log("print/:id/edit printName = :" + printName)
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("prints/printEdit", {
+ user: request.user,
+ print: prints[printName],
+ });
+
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ user: request.user,
+ "errorCode":"404"
+ });
+ }
+
+ response.status(200);
+
+ });
+
+ router.post('/print/edit', function(request,response){
+ let prints = Prints.getPrints();
+ let printName = request.body.printName;
+ console.log(printName);
+
+ // console.log(prints);
+ // console.log("PrintName = "+ printName);
+ // console.log(request.body.width)
+ if(request.body.printName && request.body.description && request.body.infill && request.body.width && request.body.time && request.body.printer && request.body.photo && request.body.user["_json"]["email"]){
+ console.log("editing a print");
+ user_model.deletePrint(request.body.oldName);
+ let newPrint = print_model.createPrint(request.body.printName && request.body.description && request.body.infill && request.body.width && request.body.time && request.body.printer && request.body.photo && request.body.user["_json"]["email"]);
+ user_model.addPrint(request.body.printName)
+
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("prints/printDetails", {
+ user: request.user,
+ print : newPrint
+ })
+ response.redirect("/print/"+printName)
+ } else {
+ }
+ });
+
+ // // test Details
+ router.get('/printDetails', function(request, response){
+ response.status(200)
+ response.setHeader('Content-Type', 'text/html')
+ response.render("prints/printDetails", {
+ print: {
+ "name":"tempTower_mini-IK","description":"An automated temp tower from Prusa itself to test the new filament on the minis","link":"https://www.printables.com/model/20652-temp-tower-pla-petg-absasa-for-prusa-mini-mk3s-and","time":"229","infill":"20","width":"0.3","studentName":"Ian_Kopke","printer":"MK3Z", "date":"1/13/23/12:05/red"
+ }
+ })
+ });
+
+
+ router.post('/upload/photo', publicUpload.single('photoFile'), (req, res, next) => {
+ const file = req.file;
+ // console.log(req);
+ if (!file) {
+ const error = {
+ 'httpStatusCode' : 400,
+ 'message':'Please upload a file'
+ }
+ res.send(error);
+ }
+ let prints = Prints.getPrints();
+ let printName = req.body.printName;
+ console.log(printName);
+
+ // console.log(prints);
+ console.log("PrintName = "+ printName);
+ console.log("width = "+ req.body.width)
+ console.log(req)
+ // console.log(req.file);
+ if(req.body.printName && req.body.description && req.body.infill && req.body.width && req.body.time && req.body.printer && req.user["_json"]["email"]){
+
+ let newPrint = Prints.printCreate(req.body.printName, req.body.description, req.body.infill, req.body.width, req.body.time, req.body.printer, req.user["_json"]["email"],req.body.photo, req.body.studentName, req.body.date);
+ user_model.addPrint(req.body.printName)
+ Printers.addPrint(req.body.printer, req.body.printName)
+
+ console.log("trying to create the new print")
+ console.log(Prints.getPrints())
+
+ res.status(200);
+ res.setHeader('Content-Type', 'text/html')
+ res.render("prints/printDetails", {
+ user: req.user,
+ print : newPrint
+ })
+ res.redirect("/print/"+printName)
+ }
+
+ })
+
+ module.exports = router;
\ No newline at end of file
diff --git a/controllers/svg_controller.js b/controllers/svg_controller.js
new file mode 100644
index 0000000..d97f73a
--- /dev/null
+++ b/controllers/svg_controller.js
@@ -0,0 +1,83 @@
+const express = require('express'),
+ router = express.Router();
+ const fs = require('fs');
+ const SVG = require('../models/svg_model');
+
+function loggedIn(request, response, next) {
+ if (request.user) {
+ next();
+ } else {
+ response.redirect('/login');
+ }
+}
+
+router.get('/svg', function(request, response){
+ let allsvgs = SVG.getSvgs()
+ response.status(200)
+ response.setHeader('Content-Type', 'text/html')
+ response.render("svgs/allSvgs", {
+ user: request.user,
+ svgs : allsvgs
+ });
+});
+
+router.get('/svg/new', loggedIn, function (request, response){
+ let allsvgs = SVG.getSvgs()
+ response.status(200)
+ response.setHeader('Content-Type', 'text/html')
+ response.render("svgs/svgNew", {
+ user: request.user
+ });
+});
+
+router.get('/svg/:id', function(request, response){
+ let svgs = SVG.getSvgs()
+ let svgName = request.params.printName;
+
+ if(svgs[svgName]){
+ console.log("it's the if statement")
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("svgs/svgDetails", {
+ user: request.user,
+ svg: svgs[svgName]
+ });
+
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ "errorCode":"404"
+ });
+ }
+ response.status(200);
+})
+
+router.get('/svg/:id/edit', function(request, response){
+ let svgs = SVG.getSvgs()
+ let svgName = request.params.printName;
+
+ if(svgs[svgName]){
+ console.log("it's the if statement")
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("svgs/svgEdit", {
+ user: request.user,
+ svg: svgs[svgName]
+ });
+
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ "errorCode":"404"
+ });
+ }
+ response.status(200);
+})
+
+
+
+
+
+module.exports = router;
\ No newline at end of file
diff --git a/controllers/user_controller.js b/controllers/user_controller.js
new file mode 100644
index 0000000..e69de29
diff --git a/data/hofprints.json b/data/hofprints.json
index e024fd0..a7c5e1d 100644
--- a/data/hofprints.json
+++ b/data/hofprints.json
@@ -1 +1 @@
-{"GOWcog_grub_coin-IK":{"name":"GearsOfWarCoin","printer":"MK3 C","student":"Ian Kopke","description":"This was a christmas present for my brother where I put the logo of the COG and the Locust on opposite sides of a coin. Then I switched colors in the middle to make it cooler","photo":"gearscoin.png"},"Pasta Roller":{"name":"Pasta Roller","printer":"All of them","student":"Ian Kopke","description":"A totally innocent pasta roller. Mr. Rose had me print this.","photo":"pastaRoller.jpg"}}
\ No newline at end of file
+{"GOWcog_grub_coin-IK":{"name":"GearsOfWarCoin","printer":"MK3 C","student":"Ian Kopke","description":"This was a christmas present for my brother where I put the logo of the COG and the Locust on opposite sides of a coin. Then I switched colors in the middle to make it cooler","photo":"gearscoin.png"},"Pasta Roller":{"name":"Pasta Roller","printer":"All of them","student":"Ian Kopke","description":"A totally innocent pasta roller. Mr. Rose had me print this.","photo":"pastaRoller.JPG"}}
\ No newline at end of file
diff --git a/data/printers.json b/data/printers.json
index ac2c070..906a380 100644
--- a/data/printers.json
+++ b/data/printers.json
@@ -1 +1 @@
-{"MK3SA":{"name":"MK3S A","Status":"Ready","errors":["freqeunt bed adhesion errors","Several globs of death","Exploding"],"prints":["temptower-ik"],"printingTime":"307","lastService":"12/8/22","photo":"MK3SApic.jpeg","location":"mk3sAmap.png"},"MK3SB":{"name":"MK3S B","Status":"Free","errors":["Frequent globs"],"prints":["locustTest"],"printingTime":"832","lastService":"12/13/22","photo":"MK3SApic.jpeg","location":"mk3sBmap.png"},"MK3C":{"name":"MK3 C","Status":"Free","errors":["large scale bed adhesion problems","Exploding"],"prints":["AssortedRobotics stuff"],"printingTime":"4300","lastService":"1/4/23","photo":"MK3Cpic.jpeg","location":"mk3Cmap.png"},"MK3SD":{"name":"MK3S D","Status":"Free","errors":["sometimes globbing"],"prints":["boneCharm-IK"],"printingTime":"1576","lastService":"1/4/23","photo":"MK3SDpic.jpeg","location":"mk3sDmap.png"},"Mini1":{"name":"Mini1","Status":"Free","errors":["not sure"],"prints":["unknown"],"printingTime":"61","lastService":"11/12/22","photo":"mini1pic.jpeg","location":"mini1map.png"},"Mini2":{"name":"Mini2","Status":"Free","errors":["globbing","Exploding"],"prints":["archery3ptRing"],"printingTime":"45","lastService":"10/14/21","photo":"mini2pic.jpeg","location":"mini2map.png"},"Mini3":{"name":"Mini3","Status":"Free","errors":["not sure"],"prints":["unknown"],"printingTime":"80","lastService":"1/9/23","photo":"mini3pic.jpeg","location":"mini3map.png"},"Mini4":{"name":"Mini4","Status":"Free","errors":["not sure"],"prints":["unknown"],"printingTime":"62","lastService":"1/7/23","photo":"mini4pic.jpeg","location":"mini4map.png"}}
\ No newline at end of file
+{"MK3SA":{"name":"MK3S A","Status":"Ready","errors":["freqeunt bed adhesion errors","Several globs of death","Exploding"],"prints":["temptower-ik"],"printingTime":"307","lastService":"12/8/22","photo":"MK3SApic.jpeg","location":"mk3sAmap.png"},"MK3SB":{"name":"MK3S B","Status":"Free","errors":["Frequent globs"],"prints":["locustTest","Vader Statue","Vader Statue"],"printingTime":"832","lastService":"12/13/22","photo":"MK3SApic.jpeg","location":"mk3sBmap.png"},"MK3C":{"name":"MK3 C","Status":"Free","errors":["large scale bed adhesion problems","Exploding"],"prints":["AssortedRobotics stuff"],"printingTime":"4300","lastService":"1/4/23","photo":"MK3Cpic.jpeg","location":"mk3Cmap.png"},"MK3SD":{"name":"MK3S D","Status":"Free","errors":["sometimes globbing"],"prints":["boneCharm-IK","Vader Statue"],"printingTime":"1576","lastService":"1/4/23","photo":"MK3SDpic.jpeg","location":"mk3sDmap.png"},"Mini1":{"name":"Mini1","Status":"Free","errors":["not sure"],"prints":["unknown"],"printingTime":"61","lastService":"11/12/22","photo":"mini1pic.jpeg","location":"mini1map.png"},"Mini2":{"name":"Mini2","Status":"Free","errors":["globbing","Exploding"],"prints":["archery3ptRing"],"printingTime":"45","lastService":"10/14/21","photo":"mini2pic.jpeg","location":"mini2map.png"},"Mini3":{"name":"Mini3","Status":"Free","errors":["not sure"],"prints":["unknown"],"printingTime":"80","lastService":"1/9/23","photo":"mini3pic.jpeg","location":"mini3map.png"},"Mini4":{"name":"Mini4","Status":"Free","errors":["not sure"],"prints":["unknown"],"printingTime":"62","lastService":"1/7/23","photo":"mini4pic.jpeg","location":"mini4map.png"}}
\ No newline at end of file
diff --git a/data/prints.json b/data/prints.json
index bf263e7..839adc6 100644
--- a/data/prints.json
+++ b/data/prints.json
@@ -1 +1 @@
-{"tempTower-IK":{"name":"tempTower_mini-IK","description":"An automated temp tower from Prusa itself to test the new filament on the minis","link":"https://www.printables.com/model/20652-temp-tower-pla-petg-absasa-for-prusa-mini-mk3s-and","time":"229","infill":"20","width":"0.3","studentName":"Ian_Kopke","printer":"MK3Z","date":"1/13/23/12:05/red","photo":""},"Benchy":{"name":"Benchy","description":"A benchmark print to see if the printer handles some basic angles and overhang.","link":"https://www.benchy3d.com","time":"102","infill":"15","width":"0.25 mm Draft","studentName":"IanKopke","printer":"Mini 1","photo":"https://www.3dbenchy.com/wp-content/uploads/2015/04/3DBenchy_frontpage_slider_sea_v041-1910x500.jpg"},"AurielBLower3-ik":{"name":"AurielBLower3-ik","description":"Part of the bottom recurve","link":"https://www.thingiverse.com/thing:686895","time":"150","infill":"20","width":"0.30 mm Draft","studentName":"Ian Kopke","printer":"MK3S C","date":"1/27/23/8:15/Yellow","photo":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAQEBIPEBAQEBUQEA8OEBYRFg8QEA8PFREXFhURFRcYHyggGBolGxUVITIhJikrLi4wGB81ODMtNygtLisBCgoKBQUFDgUFDisZExkrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrK//AABEIAJsBRgMBIgACEQEDEQH/xAAcAAEAAQUBAQAAAAAAAAAAAAAAAQIDBAUGBwj/xABAEAACAQMCBAMGAwUDDQAAAAAAAQIDBBESIQUxQVEGYXEHEyKBkaEyUsEUIzPR8GKx0hVCQ1NUY3JzgpOywuH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A9UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJSS3fdL5t4QEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEASQMlE6iXNpZ5ZaWQK8mr47x+3s4Odae+PhhHepN9kv1ZrOO+ObC1hUf7TQqVIbKnCpCUnPs8Zxjr/M8q4zc3N3Xco0nVq1pTaUWoQpwUct6pPEUljdsDacZ8dV7xuM41KFJvEaVOvC2c4/72rpb+UWl6mPS8dXNrGlSt/wBmp0qO0aUFUr7ZbanUlLDzl8t9zieIcOrQqqnUnBvSqmmhUjWUFLlFyhlasYfPk0bvhvhWvUSf7umn1nLMseiz9wPTbP2kwcc1qdvB9oXEan2jF4+rNNxX2tVd4W9tCL6TlL38cZ/KtHTzNTa+A6b/AIlzJ/8ALjGP3bf9xnR9n9rj+JdP/qpf4AMej7UeI53Vs88kqVRP7VGbfh/tFvKk40/d26cs5co1IQjFJy1Sk54isJ8zmuOeB1ThrpSlUUdUpRqpOWFFv4XFbvpjHU13DOAXTWYUVBPG2mFPPrreWB7d4b49Su6ScatOVSKxVjHMXGXVqL309mbjJ4TT8N3uVKMMNbpqpTTXpvsbe14fx1LELiol/auE8fJtgevlNWrGC1SlGK7yaivqzyqfA/EFRb3un1uKi/8AGLM3h/hriFL461/bJrdy9269VLqlKWn75A9BlXc4y9z8T0vTKSxSjLG0m3jUs/lyY3DLqUV7qVRXVTXN1ZuMFCl8WHFRjtBJcotyk+re7XNwr0U4xlc17uTfJtRj81TSTXrk39GTklCnBU4pcklFLPZIDZxrpvC3LpjW1DSu76mQBIAAAAAAAAAAAAAAAAAAAAACDkPEHtEs7OvO2nC5q1KenWqUI6Y6oqS+KcorlJMDsCDzWp7YrVfhtLp+roLP0kyqXtbof7LU/wC5HP2iwPSAec0/azQb3tqqj3Usyz6af1MbjXtVzDTZUMTltruXiFPz0Ry5P5r5genZMe+v6NCOuvVp0Y96kowX1fM+ebrjl3O5VzK6uKk4591KTUZQfJuMI/BDOXtHv1yZtnwLit63NUKkMtJ1buUoNx2f+kzJ83ukB6dxb2kWdLUqSnXcc74dKlt11yXLlyTPIPHvHpcQrKtNxjpjFQpp640+XwqT55abe2+TqaPgi0pty4hfyqtpfu6CVOOVnZyeXJfKJTxW0sKtP9ntOHx8qnxOsn+bX+J/N4A4mFNaVF5ko7R1b6VnOF2WTd2dxUqWkbfGYuUpOSy6kk1DNNdEswj9DJh4QrvrFZ2w2m/sdZwTwrUo01CSjJpy3Wyw3sByFrwKpPaMVH+up2HBPDDhiUpOb7P8P0Oo4dwPTu8PyX8zdUrPHZAaWnaNLCWPTYx7inUX9ZOoVsvMiVrB9AOLqxn3+yIo6tk+XZJHYVLFdv5lH+T12X2A1FGjTfJsvxow6ZNgrDsi5Gzfd/UDXe5zyTKJ8LU9pvbtk28bX+ty5G3QGttOH0qX8OCXnjdmzo08bvmy5GCXJFWAISJJABAAAAAAAAAAAAAAAAAEACMg5Pj/AI9s7XVCLdxUjlaaePdqSznVUe2zWHjP94GB7WeI1aNvRVGo6cpznlxlKEtKSezTXpvtueJ17mdSTcpyqN7t5bWfNvmdB4k4/V4jOU68ZJcqeJaIQjnKUYY3Xdt7mvp8NnpUtOiL3Tllal3XV+oGscZ9El6/1koo0ZuWHKT/AODLfyRuKNvBPdKfk9WPp1+Z1PCaVdpKEfdR8oqK+iA4upb1EvwVUu8oVM/PO32KaUn1efsepQsFJYnKpLvjCRD8L21Tb3Mm315Y+YHCcHttdSM3r/dtTWhZbkpJpemx3VSreXL+KWhPu9/obrh3g+nRgtEpJauu7y13fob204VGPKOfOQHMWHhWiviqaqsue+yNvT4RHOyUVywuiOhharqXfdRXRfqBp7fhsI76U2bKhQW+3XBc9z2z8y7GH6+QEJJbElQAjSSTgAQMEgBgYJAEEgAAAAAAAAAAAAAAAAAAAAAIAFm7uYUoSq1ZxpwgnKcptRjFLq2y5JnlvjzgXFq8tU5U7qlF5hCi/dRh/adKT3fnqk/QDU+NPaU7qTtrWU6VvyqVI5jXuI9Yx/JF8u7zvjdPhq18m4uS0RzusLGF+GKS6bcjOurXTJwqRw4NprlhnReHPANW7gqzkrdPHu3KDq1HDrJJyWnPTuBe4PwanGmq88VakoxqQhzjST3Tl3l68vuZv+R6lxLNRuXZdEZtn4fpWVWUKM51cw01alSScp1FLOIxiklFb93l+R0fDKedkgMHhfhilTw9Kb9EblcPXLCNtbW225lxglySA0dLhq54M2nQUeSM/Wum/py+vIODfPC9N39WBahBOOG8Ya/9v5l3PZfoiYUkv/u7KgKVF9X9CUkiScAQMEgBgAkCCQAAAAAAAAAAAAAAAAAAAAAAAAAABAAhklEwLFxcqJoeL8TjShKrVlpjFZb/AES6vyLXifxFbWnwyl7yq8KNKnhzcnyUvy5+vZM0drw+VepG4v5Rk1vRoR3p0/N/nkBieG/DTvq8765hopzlrp05dY7aZT8sLl19OfVcW4zCMXQtu2J1Ftt1jT/xfTuYt5dzq/u1mnT6rk5Lt6eRhTivwxXkBVZW+rGM429XLG6Ol4dapbtfJbmFwbhjypSzhb46HRwiksLYCIp+S+7Kvdrrv6/y5Ek4AAkAMAEgQCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAeZeL+NcVs7upGlUrSoyaqUv3NOpGMWlmClo6PK55A9LlJJZbSS5t7JFuvcwpx11JwhHnqnKMY49XseG31xfX1SNStC8ryjp0KNOsoQae0owilFPm9WM8t9jMtvC3EakVH3EqcYr4VWnCEY7f5sW24/JID0HifjyypZVNyuJL/AFaxBes5bY81k4fj3j26rfu4P3ClsqdDVKtLl8OvGc81tjkbC28FQSTvLjT3jQ+FS585y9WtkbK2uLCz+G1ox1vZyinUqy9ZvL+4HI8B8MXsqirVI/sy5xdRJ1lnm4w6S85LbPJnc2PD6dJc5Nv8UpNyqT9ZPf5LC8hbRua7y4+7j9/mza0eHqPN5fUDAuE5tQhHGOeP1ZncO4Wlu939kZ9taLosIz4QS2QFNOnhYRcSBOAAJAEEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3UkBWy3Kpgx5KXctzpSxnIF6rUTX4sGur5e0WX9D6oqhSa6gaifA/evNSTwZtnwm3o/hgm+/P7mwVJvoy5G37/YCxhvbl5IvU6HcvxilyKgISJwCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDiSGBTpROCQBToXZBRKgBAJAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z"},"Sid'sPrint":{"name":"Sid'sPrint","description":"This is a tiger Statue","link":"https://www.thingiverse.com/thing:2075825","time":"346","infill":"10","width":"0.30 mm Draft","studentName":"Ian Kopke","printer":"MK3S B","photo":""},"FoosballPlayer":{"name":"FoosballPlayer","description":"A foosball replacement that comes in two parts to be superglued and taped around the pole.","link":"askbenlevy","time":"260","infill":"45","width":"0.20 mm Speed","studentName":"Ben Levy","printer":"MK3S D","photo":"foosball"},"lowPolyFox-IK":{"name":"lowPolyFox-IK","description":"A fox Sitting","link":"https://www.thingiverse.com/thing:937740","time":"32","infill":"15","width":"0.25 mm Draft","studentName":"IanKopke","date":"17/01/2023/12/05","printer":"Mini 2","photo":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTo32sgB08Sa3zBHf4xv63qL1d5nSXBaLm_ew&usqp=CAU"},"Owl Test":{"name":"Owl Test","description":"overhang test","link":"https://www.printables.com/model/105444-owl","time":"180","infill":"15","width":"0.30 mm Draft","studentName":"Ian Kopke","date":"01/01/2023/12/05","printer":"MK3S D","photo":"https://media.printables.com/media/prints/105444/images/1054191_f4640b13-ae49-43b1-a8f5-60c7759c85b9/thumbs/cover/1280x960/png/owl-test-print.webp"}}
\ No newline at end of file
+{"Owl Test":{"name":"Owl Test","description":"overhang test","link":"https://www.printables.com/model/105444-owl","user":"ian.kopke23@trinityschoolnyc.org","time":"180","infill":"15","width":"0.30 mm Draft","studentName":"Ian Kopke","date":"01/01/2023/12/05","printer":"MK3S D","photo":"https://media.printables.com/media/prints/105444/images/1054191_f4640b13-ae49-43b1-a8f5-60c7759c85b9/thumbs/cover/1280x960/png/owl-test-print.webp"},"Benchy":{"name":"Benchy","description":"A benchmark print to see if the printer handles some basic angles and overhang.","link":"https://www.benchy3d.com","user":"ian.kopke23@trinityschoolnyc.org","time":"102","infill":"15","width":"0.25 mm Draft","studentName":"IanKopke","printer":"Mini 1","photo":"https://www.3dbenchy.com/wp-content/uploads/2015/04/3DBenchy_frontpage_slider_sea_v041-1910x500.jpg"},"AurielBLower3-ik":{"name":"AurielBLower3-ik","description":"Part of the bottom recurve","link":"https://www.thingiverse.com/thing:686895","user":"ian.kopke23@trinityschoolnyc.org","time":"150","infill":"20","width":"0.30 mm Draft","studentName":"Ian Kopke","printer":"MK3S C","date":"1/27/23/8:15/Yellow","photo":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAQEBIPEBAQEBUQEA8OEBYRFg8QEA8PFREXFhURFRcYHyggGBolGxUVITIhJikrLi4wGB81ODMtNygtLisBCgoKBQUFDgUFDisZExkrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrK//AABEIAJsBRgMBIgACEQEDEQH/xAAcAAEAAQUBAQAAAAAAAAAAAAAAAQIDBAUGBwj/xABAEAACAQMCBAMGAwUDDQAAAAAAAQIDBBESIQUxQVEGYXEHEyKBkaEyUsEUIzPR8GKx0hVCQ1NUY3JzgpOywuH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A9UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJSS3fdL5t4QEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEASQMlE6iXNpZ5ZaWQK8mr47x+3s4Odae+PhhHepN9kv1ZrOO+ObC1hUf7TQqVIbKnCpCUnPs8Zxjr/M8q4zc3N3Xco0nVq1pTaUWoQpwUct6pPEUljdsDacZ8dV7xuM41KFJvEaVOvC2c4/72rpb+UWl6mPS8dXNrGlSt/wBmp0qO0aUFUr7ZbanUlLDzl8t9zieIcOrQqqnUnBvSqmmhUjWUFLlFyhlasYfPk0bvhvhWvUSf7umn1nLMseiz9wPTbP2kwcc1qdvB9oXEan2jF4+rNNxX2tVd4W9tCL6TlL38cZ/KtHTzNTa+A6b/AIlzJ/8ALjGP3bf9xnR9n9rj+JdP/qpf4AMej7UeI53Vs88kqVRP7VGbfh/tFvKk40/d26cs5co1IQjFJy1Sk54isJ8zmuOeB1ThrpSlUUdUpRqpOWFFv4XFbvpjHU13DOAXTWYUVBPG2mFPPrreWB7d4b49Su6ScatOVSKxVjHMXGXVqL309mbjJ4TT8N3uVKMMNbpqpTTXpvsbe14fx1LELiol/auE8fJtgevlNWrGC1SlGK7yaivqzyqfA/EFRb3un1uKi/8AGLM3h/hriFL461/bJrdy9269VLqlKWn75A9BlXc4y9z8T0vTKSxSjLG0m3jUs/lyY3DLqUV7qVRXVTXN1ZuMFCl8WHFRjtBJcotyk+re7XNwr0U4xlc17uTfJtRj81TSTXrk39GTklCnBU4pcklFLPZIDZxrpvC3LpjW1DSu76mQBIAAAAAAAAAAAAAAAAAAAAACDkPEHtEs7OvO2nC5q1KenWqUI6Y6oqS+KcorlJMDsCDzWp7YrVfhtLp+roLP0kyqXtbof7LU/wC5HP2iwPSAec0/azQb3tqqj3Usyz6af1MbjXtVzDTZUMTltruXiFPz0Ry5P5r5genZMe+v6NCOuvVp0Y96kowX1fM+ebrjl3O5VzK6uKk4591KTUZQfJuMI/BDOXtHv1yZtnwLit63NUKkMtJ1buUoNx2f+kzJ83ukB6dxb2kWdLUqSnXcc74dKlt11yXLlyTPIPHvHpcQrKtNxjpjFQpp640+XwqT55abe2+TqaPgi0pty4hfyqtpfu6CVOOVnZyeXJfKJTxW0sKtP9ntOHx8qnxOsn+bX+J/N4A4mFNaVF5ko7R1b6VnOF2WTd2dxUqWkbfGYuUpOSy6kk1DNNdEswj9DJh4QrvrFZ2w2m/sdZwTwrUo01CSjJpy3Wyw3sByFrwKpPaMVH+up2HBPDDhiUpOb7P8P0Oo4dwPTu8PyX8zdUrPHZAaWnaNLCWPTYx7inUX9ZOoVsvMiVrB9AOLqxn3+yIo6tk+XZJHYVLFdv5lH+T12X2A1FGjTfJsvxow6ZNgrDsi5Gzfd/UDXe5zyTKJ8LU9pvbtk28bX+ty5G3QGttOH0qX8OCXnjdmzo08bvmy5GCXJFWAISJJABAAAAAAAAAAAAAAAAAEACMg5Pj/AI9s7XVCLdxUjlaaePdqSznVUe2zWHjP94GB7WeI1aNvRVGo6cpznlxlKEtKSezTXpvtueJ17mdSTcpyqN7t5bWfNvmdB4k4/V4jOU68ZJcqeJaIQjnKUYY3Xdt7mvp8NnpUtOiL3Tllal3XV+oGscZ9El6/1koo0ZuWHKT/AODLfyRuKNvBPdKfk9WPp1+Z1PCaVdpKEfdR8oqK+iA4upb1EvwVUu8oVM/PO32KaUn1efsepQsFJYnKpLvjCRD8L21Tb3Mm315Y+YHCcHttdSM3r/dtTWhZbkpJpemx3VSreXL+KWhPu9/obrh3g+nRgtEpJauu7y13fob204VGPKOfOQHMWHhWiviqaqsue+yNvT4RHOyUVywuiOhharqXfdRXRfqBp7fhsI76U2bKhQW+3XBc9z2z8y7GH6+QEJJbElQAjSSTgAQMEgBgYJAEEgAAAAAAAAAAAAAAAAAAAAAIAFm7uYUoSq1ZxpwgnKcptRjFLq2y5JnlvjzgXFq8tU5U7qlF5hCi/dRh/adKT3fnqk/QDU+NPaU7qTtrWU6VvyqVI5jXuI9Yx/JF8u7zvjdPhq18m4uS0RzusLGF+GKS6bcjOurXTJwqRw4NprlhnReHPANW7gqzkrdPHu3KDq1HDrJJyWnPTuBe4PwanGmq88VakoxqQhzjST3Tl3l68vuZv+R6lxLNRuXZdEZtn4fpWVWUKM51cw01alSScp1FLOIxiklFb93l+R0fDKedkgMHhfhilTw9Kb9EblcPXLCNtbW225lxglySA0dLhq54M2nQUeSM/Wum/py+vIODfPC9N39WBahBOOG8Ya/9v5l3PZfoiYUkv/u7KgKVF9X9CUkiScAQMEgBgAkCCQAAAAAAAAAAAAAAAAAAAAAAAAAABAAhklEwLFxcqJoeL8TjShKrVlpjFZb/AES6vyLXifxFbWnwyl7yq8KNKnhzcnyUvy5+vZM0drw+VepG4v5Rk1vRoR3p0/N/nkBieG/DTvq8765hopzlrp05dY7aZT8sLl19OfVcW4zCMXQtu2J1Ftt1jT/xfTuYt5dzq/u1mnT6rk5Lt6eRhTivwxXkBVZW+rGM429XLG6Ol4dapbtfJbmFwbhjypSzhb46HRwiksLYCIp+S+7Kvdrrv6/y5Ek4AAkAMAEgQCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAeZeL+NcVs7upGlUrSoyaqUv3NOpGMWlmClo6PK55A9LlJJZbSS5t7JFuvcwpx11JwhHnqnKMY49XseG31xfX1SNStC8ryjp0KNOsoQae0owilFPm9WM8t9jMtvC3EakVH3EqcYr4VWnCEY7f5sW24/JID0HifjyypZVNyuJL/AFaxBes5bY81k4fj3j26rfu4P3ClsqdDVKtLl8OvGc81tjkbC28FQSTvLjT3jQ+FS585y9WtkbK2uLCz+G1ox1vZyinUqy9ZvL+4HI8B8MXsqirVI/sy5xdRJ1lnm4w6S85LbPJnc2PD6dJc5Nv8UpNyqT9ZPf5LC8hbRua7y4+7j9/mza0eHqPN5fUDAuE5tQhHGOeP1ZncO4Wlu939kZ9taLosIz4QS2QFNOnhYRcSBOAAJAEEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3UkBWy3Kpgx5KXctzpSxnIF6rUTX4sGur5e0WX9D6oqhSa6gaifA/evNSTwZtnwm3o/hgm+/P7mwVJvoy5G37/YCxhvbl5IvU6HcvxilyKgISJwCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDiSGBTpROCQBToXZBRKgBAJAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z"},"tempTower-IK":{"name":"tempTower_mini-IK","description":"An automated temp tower from Prusa itself to test the new filament on the minis","link":"https://www.printables.com/model/20652-temp-tower-pla-petg-absasa-for-prusa-mini-mk3s-and","user":"ian.kopke23@trinityschoolnyc.org","time":"229","infill":"20","width":"0.3","studentName":"Ian_Kopke","printer":"MK3Z","date":"1/13/23/12:05/red","photo":""},"Sid'sPrint":{"name":"Sid'sPrint","description":"This is a tiger Statue","link":"https://www.thingiverse.com/thing:2075825","user":"ian.kopke23@trinityschoolnyc.org","time":"346","infill":"10","width":"0.30 mm Draft","studentName":"Ian Kopke","printer":"MK3S B","photo":""},"FoosballPlayer":{"name":"FoosballPlayer","description":"A foosball replacement that comes in two parts to be superglued and taped around the pole.","link":"askbenlevy","user":"benjamin.levy23@trinityschoolnyc.org","time":"260","infill":"45","width":"0.20 mm Speed","studentName":"Ben Levy","printer":"MK3S D","photo":"foosball"},"lowPolyFox-IK":{"name":"lowPolyFox-IK","description":"A fox Sitting","link":"https://www.thingiverse.com/thing:937740","user":"ian.kopke23@trinityschoolnyc.org","time":"32","infill":"15","width":"0.25 mm Draft","studentName":"IanKopke","date":"17/01/2023/12/05","printer":"Mini 2","photo":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTo32sgB08Sa3zBHf4xv63qL1d5nSXBaLm_ew&usqp=CAU"},"Carabiner":{"name":"Carabiner","description":"Just a generic two piece Carabiner I found on thingiverse","time":"34","infill":"15","studentName":"IanKopke","date":"13/04/2023/10/40","printer":"MK3SB","photo":"carabiner.jpg","user":"ian.kopke23@trinityschoolnyc.org"},"CaptainRex":{"name":"CaptainRex","studentName":"IanKopke","description":"A statue of Commander Rex","date":"13/04/2023/10/40","time":"102","printer":"MK3C","infill":"15","width":"0.20","photo":"rexPrint.png"},"Vader Statue":{"name":"Vader Statue","description":"A bust of Vader's torso and head","time":"780","infill":"5","studentName":"IanKopke","date":"4/17/2023/6/05","printer":"MK3SD","photo":"vaderBust.png","user":"ian.kopke23@trinityschoolnyc.org"}}
\ No newline at end of file
diff --git a/data/svgs.json b/data/svgs.json
new file mode 100644
index 0000000..c5eff85
--- /dev/null
+++ b/data/svgs.json
@@ -0,0 +1,20 @@
+{
+ "HacktrinTrophyBases":{
+ "cutName":"HacktrinTrophyBases-IK",
+ "studentName": "IanKopke",
+ "user": "ian.kopke23@trinityschoolnyc.org",
+ "material":"wood",
+ "cutType":"cut",
+ "photo":"trophyBases.png",
+ "strokeWidth":"0.0001"
+ },
+ "HacktrinTrophyEngrave":{
+ "cutName":"HacktrinTrophyEngrave-IK",
+ "studentName": "IanKopke",
+ "user": "ian.kopke23@trinityschoolnyc.org",
+ "material":"wood",
+ "cutType":"etch",
+ "photo":"engraved.jpg",
+ "strokeWidth":"0.01"
+ }
+}
\ No newline at end of file
diff --git a/data/users.json b/data/users.json
new file mode 100644
index 0000000..89d364b
--- /dev/null
+++ b/data/users.json
@@ -0,0 +1 @@
+{"testUser":{"email":"test.user@trinityschoolnyc.org"},"ian.kopke23@trinityschoolnyc.org":{"displayName":"ian","privileges":["user"],"prints":["tempTower-IK","Benchy","AurielBLower3-ik","Sid'sPrint","FoosballPlayer","lowPolyFox-IK","Owl Test"],"SVGs":[],"printHours":0,"dateJoined":"2023-03-09T19:11:45.885Z"}}
\ No newline at end of file
diff --git a/models/hofprint_model.js b/models/hofprint_model.js
new file mode 100644
index 0000000..e69de29
diff --git a/models/print_model.js b/models/print_model.js
new file mode 100644
index 0000000..ae1ec78
--- /dev/null
+++ b/models/print_model.js
@@ -0,0 +1,52 @@
+const fs = require('fs');
+const User = require('../models/user_model');
+
+
+exports.getPrints = function(){
+ return JSON.parse(fs.readFileSync("data/prints.json"));
+}
+
+function localGetPrints(){
+ return JSON.parse(fs.readFileSync("data/prints.json"));
+}
+
+function savePrints(prints){
+ fs.writeFileSync("data/prints.json", JSON.stringify(prints))
+}
+
+
+exports.printCreate = function(printName, description, infill, width, time, printer, user, photo, studentName, date){
+ let prints = localGetPrints();
+ if(printName && description && time && infill && width && time && printer && user && photo){
+ let newPrint = {
+ "name":printName,
+ "description": description,
+ "time": time,
+ "infill": infill,
+ "studentName": studentName,
+ "date": date,
+ "printer": printer,
+ "photo": photo,
+ "user":user
+ };
+
+ prints[printName] = newPrint;
+ fs.writeFileSync("data/prints.json", JSON.stringify(prints))
+ return newPrint;
+ }
+}
+
+exports.deletePrint = function(printName, user){
+ let prints = localGetPrints();
+
+ if(usersprint(user, printName)){
+ delete prints[printName]
+ savePrints(prints);
+ }
+}
+
+exports.isPrint = function(printName){
+ return localGetPrints()[printName];
+}
+
+
diff --git a/models/printer_model.js b/models/printer_model.js
new file mode 100644
index 0000000..0fdf71a
--- /dev/null
+++ b/models/printer_model.js
@@ -0,0 +1,17 @@
+const fs = require('fs');
+
+exports.getPrinters = function(){
+ return JSON.parse(fs.readFileSync("data/printers.json"))
+}
+
+function getLocalPrinters(){
+ return JSON.parse(fs.readFileSync("data/printers.json"))
+}
+
+exports.addPrint = function(printerName, printName){
+ let printers = getLocalPrinters()
+ let printer = printers[printerName];
+ printer["prints"].push(printName);
+ printers[printerName] = printer
+ fs.writeFileSync("data/printers.json", JSON.stringify(printers))
+}
\ No newline at end of file
diff --git a/models/svg_model.js b/models/svg_model.js
new file mode 100644
index 0000000..e4d9b3c
--- /dev/null
+++ b/models/svg_model.js
@@ -0,0 +1,51 @@
+const fs = require('fs');
+const User = require('../models/user_model');
+
+
+exports.getSvgs = function(){
+ return JSON.parse(fs.readFileSync("data/svgs.json"));
+}
+
+exports.saveSvgs = function(prints){
+ fs.writeFileSync("../data/svg.json", JSON.stringify(prints))
+}
+
+exports.usersSvg = function(userName, cutName){
+ svgs = getPrints();
+ return svgs[cutName][user] == userName
+}
+
+exports.svgCreate = function(cutName, description, infill, width, time, printer, user){
+ let svgs = getSvgs();
+ if(cutName && description && photo && material && date && user){
+ let newPrint = {
+ "name":request.body.printName,
+ "description":request.body.description,
+ "link":request.body.link,
+ "time":request.body.time,
+ "width":request.body.width,
+ "studentName":request.body.studentName,
+ "date":request.body.date,
+
+ "photo":request.body.photo,
+ "user":request.user["_json"]["email"]
+ };
+
+ prints[printName] = newPrint;
+ fs.writeFileSync("../data/prints.json", JSON.stringify(prints))
+ return newPrint;
+ }
+}
+
+exports.deleteSvg = function(printName, user){
+ let prints = getSvgs();
+
+ if(usersprint(user, printName)){
+ User.removePrint(printName);
+
+ }
+}
+
+
+
+
diff --git a/models/user_model.js b/models/user_model.js
new file mode 100644
index 0000000..8fa5900
--- /dev/null
+++ b/models/user_model.js
@@ -0,0 +1,126 @@
+const fs = require('fs');
+
+exports.getUsers = function () {
+ let users = JSON.parse(fs.readFileSync(__dirname + '/../data/users.json'));
+ return users;
+}
+
+getlocalUsers = function () {
+ let users = JSON.parse(fs.readFileSync(__dirname + '/../data/users.json'));
+ return users;
+}
+
+exports.isUser = function (userID) {
+ let users = getlocalUsers();
+ if (users[userID] && users[userID]["privileges"].indexOf("user") >= 0) return true;
+ else return false;
+}
+
+exports.makeAdmin = function (userID) {
+ let allUsers = getlocalUsers();
+ if (users[userID] && users[userID]["privileges"].indexOf("admin") < 0) users[userID]["privileges"].push("admin");
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
+
+exports.isAdmin = function (userID) {
+ let users = getlocalUsers();
+ if (users[userID] && users[userID]["privileges"].indexOf("admin") >= 0) return true;
+ else return false;
+}
+
+exports.getUser = function (userID) {
+ let users = getlocalUsers();
+ let prints = users[userID]["prints"];
+ let printHours = 0;
+ for (let i = 0; i, users[userID]["prints"].length; i++) {
+ printHours += prints.printTime(users[userID]["prints"][i]);
+ }
+ users[userID]["printTime"] = printHours;
+ return users[userID];
+}
+
+exports.createUser = function (userID, playerDisplayName) {
+ let allUsers = getlocalUsers();
+ console.log(getlocalUsers());
+ console.log("createUser function Called");
+ if (!allUsers[userID]) {
+ let newPlayer = {
+ "displayName": playerDisplayName,
+ "privileges": ["user"],
+ "prints": [],
+ "SVGs": [],
+ "printHours": 0,
+ "dateJoined": new Date()
+ }
+ allUsers[userID] = newPlayer;
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+ }
+}
+
+exports.updateUser = function (playerName, results) {
+ let allUsers = getlocalUsers();
+
+ /* if(outcome=="player") allUsers[playerName]["win"]++;
+ else if(outcome=="player") allUsers[playerName]["lose"]++;
+ else allUsers[playerName]["tie"]++;
+ */
+
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
+
+exports.removeUser = function (userID) {
+ let allUsers = getlocalUsers();
+ if (allUsers[userID]) delete allUsers[userID];
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
+
+exports.addPrint = function (userID, printID) {
+ let allUsers = getlocalUsers();
+ if (allUsers[userID]) {
+ allUsers[userID].prints.push[printID];
+ allUsers[userID].printHours += Prints.getPrints()[printID][time]/60
+ }
+
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
+
+exports.removePrint = function (userID, printID) {
+ let allUsers = getlocalUsers();
+ if (allUsers[userID]) {
+ let prints = allUsers[userID].prints;
+ prints.splice(prints.indexOf(printID), 1)
+ allUsers[userID].prints = prints;
+ }
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
+
+exports.usersPrint = function(userName, printName){
+ users = getlocalUsers();
+ console.log(users["prints"]);
+ userPrints = users[userName].prints
+
+ for(let i = 0; i < userPrints.length; i++){
+ if(userPrints[i] == printName)
+ return true;
+ }
+ return false;
+}
+
+exports.addSVG = function (userID, svgID) {
+ let allUsers = getlocalUsers();
+ if (allUsers[userID]) {
+ let prints = allUsers[userID].svg;
+ svg.push[svgID];
+ }
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
+
+exports.removeSVG = function (userID, svgID) {
+ let allUsers = getlocalUsers();
+ if (allUsers[userID]) {
+ let svgs = allUsers[userID].SVGs;
+ svgs.splice(svgs.indexOf(svgID), 1)
+ allUsers[userID].SVGs = svgs;
+ }
+ fs.writeFileSync(__dirname + '/../data/users.json', JSON.stringify(allUsers));
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..0452271
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1986 @@
+{
+ "name": "Design Lab 2.0",
+ "version": "2.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "Design Lab 2.0",
+ "version": "2.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "ejs": "^3.1.6",
+ "express": "^4.17.1",
+ "express-session": "^1.17.2",
+ "method-override": "^3.0.0",
+ "multer": "^1.4.4",
+ "passport": "^0.5.2",
+ "passport-google-oauth": "^2.0.0",
+ "uuid": "^8.3.2"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/append-field": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/async": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base64url": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "node_modules/busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==",
+ "dependencies": {
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.x"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/concat-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/concat-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/dicer": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+ "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==",
+ "dependencies": {
+ "readable-stream": "1.1.x",
+ "streamsearch": "0.1.2"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/ejs": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
+ "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.1",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express-session": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
+ "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
+ "dependencies": {
+ "cookie": "0.4.2",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/express-session/node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+ },
+ "node_modules/jake": {
+ "version": "10.8.5",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
+ "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/method-override": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz",
+ "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
+ "dependencies": {
+ "debug": "3.1.0",
+ "methods": "~1.1.2",
+ "parseurl": "~1.3.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/method-override/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/multer": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz",
+ "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==",
+ "deprecated": "Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.",
+ "dependencies": {
+ "append-field": "^1.0.0",
+ "busboy": "^0.2.11",
+ "concat-stream": "^1.5.2",
+ "mkdirp": "^0.5.4",
+ "object-assign": "^4.1.1",
+ "on-finished": "^2.3.0",
+ "type-is": "^1.6.4",
+ "xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/oauth": {
+ "version": "0.9.15",
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+ "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/passport": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz",
+ "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==",
+ "dependencies": {
+ "passport-strategy": "1.x.x",
+ "pause": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/jaredhanson"
+ }
+ },
+ "node_modules/passport-google-oauth": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/passport-google-oauth/-/passport-google-oauth-2.0.0.tgz",
+ "integrity": "sha512-JKxZpBx6wBQXX1/a1s7VmdBgwOugohH+IxCy84aPTZNq/iIPX6u7Mqov1zY7MKRz3niFPol0KJz8zPLBoHKtYA==",
+ "dependencies": {
+ "passport-google-oauth1": "1.x.x",
+ "passport-google-oauth20": "2.x.x"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/passport-google-oauth1": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/passport-google-oauth1/-/passport-google-oauth1-1.0.0.tgz",
+ "integrity": "sha512-qpCEhuflJgYrdg5zZIpAq/K3gTqa1CtHjbubsEsidIdpBPLkEVq6tB1I8kBNcH89RdSiYbnKpCBXAZXX/dtx1Q==",
+ "dependencies": {
+ "passport-oauth1": "1.x.x"
+ }
+ },
+ "node_modules/passport-google-oauth20": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
+ "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
+ "dependencies": {
+ "passport-oauth2": "1.x.x"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/passport-oauth1": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.3.0.tgz",
+ "integrity": "sha512-8T/nX4gwKTw0PjxP1xfD0QhrydQNakzeOpZ6M5Uqdgz9/a/Ag62RmJxnZQ4LkbdXGrRehQHIAHNAu11rCP46Sw==",
+ "dependencies": {
+ "oauth": "0.9.x",
+ "passport-strategy": "1.x.x",
+ "utils-merge": "1.x.x"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/jaredhanson"
+ }
+ },
+ "node_modules/passport-oauth2": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz",
+ "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==",
+ "dependencies": {
+ "base64url": "3.x.x",
+ "oauth": "0.9.x",
+ "passport-strategy": "1.x.x",
+ "uid2": "0.0.x",
+ "utils-merge": "1.x.x"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/jaredhanson"
+ }
+ },
+ "node_modules/passport-strategy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
+ "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "node_modules/pause": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
+ "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "node_modules/uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "dependencies": {
+ "random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/uid2": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
+ "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ }
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "requires": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ }
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "append-field": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "async": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "base64url": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
+ },
+ "body-parser": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "requires": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==",
+ "requires": {
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.x"
+ }
+ },
+ "bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "requires": {
+ "safe-buffer": "5.2.1"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ },
+ "destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
+ },
+ "dicer": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+ "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==",
+ "requires": {
+ "readable-stream": "1.1.x",
+ "streamsearch": "0.1.2"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "ejs": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
+ "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
+ "requires": {
+ "jake": "^10.8.5"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
+ },
+ "express": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "requires": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.1",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ }
+ },
+ "express-session": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
+ "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
+ "requires": {
+ "cookie": "0.4.2",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
+ }
+ }
+ },
+ "filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "requires": {
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "requires": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+ },
+ "jake": {
+ "version": "10.8.5",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
+ "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
+ "requires": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "method-override": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz",
+ "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
+ "requires": {
+ "debug": "3.1.0",
+ "methods": "~1.1.2",
+ "parseurl": "~1.3.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "multer": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz",
+ "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==",
+ "requires": {
+ "append-field": "^1.0.0",
+ "busboy": "^0.2.11",
+ "concat-stream": "^1.5.2",
+ "mkdirp": "^0.5.4",
+ "object-assign": "^4.1.1",
+ "on-finished": "^2.3.0",
+ "type-is": "^1.6.4",
+ "xtend": "^4.0.0"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
+ },
+ "oauth": {
+ "version": "0.9.15",
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+ "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "passport": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz",
+ "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==",
+ "requires": {
+ "passport-strategy": "1.x.x",
+ "pause": "0.0.1"
+ }
+ },
+ "passport-google-oauth": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/passport-google-oauth/-/passport-google-oauth-2.0.0.tgz",
+ "integrity": "sha512-JKxZpBx6wBQXX1/a1s7VmdBgwOugohH+IxCy84aPTZNq/iIPX6u7Mqov1zY7MKRz3niFPol0KJz8zPLBoHKtYA==",
+ "requires": {
+ "passport-google-oauth1": "1.x.x",
+ "passport-google-oauth20": "2.x.x"
+ }
+ },
+ "passport-google-oauth1": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/passport-google-oauth1/-/passport-google-oauth1-1.0.0.tgz",
+ "integrity": "sha512-qpCEhuflJgYrdg5zZIpAq/K3gTqa1CtHjbubsEsidIdpBPLkEVq6tB1I8kBNcH89RdSiYbnKpCBXAZXX/dtx1Q==",
+ "requires": {
+ "passport-oauth1": "1.x.x"
+ }
+ },
+ "passport-google-oauth20": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
+ "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
+ "requires": {
+ "passport-oauth2": "1.x.x"
+ }
+ },
+ "passport-oauth1": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.3.0.tgz",
+ "integrity": "sha512-8T/nX4gwKTw0PjxP1xfD0QhrydQNakzeOpZ6M5Uqdgz9/a/Ag62RmJxnZQ4LkbdXGrRehQHIAHNAu11rCP46Sw==",
+ "requires": {
+ "oauth": "0.9.x",
+ "passport-strategy": "1.x.x",
+ "utils-merge": "1.x.x"
+ }
+ },
+ "passport-oauth2": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz",
+ "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==",
+ "requires": {
+ "base64url": "3.x.x",
+ "oauth": "0.9.x",
+ "passport-strategy": "1.x.x",
+ "uid2": "0.0.x",
+ "utils-merge": "1.x.x"
+ }
+ },
+ "passport-strategy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
+ "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA=="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "pause": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
+ "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "requires": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ },
+ "raw-body": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "requires": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA=="
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "requires": {
+ "random-bytes": "~1.0.0"
+ }
+ },
+ "uid2": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
+ "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ }
+ }
+}
diff --git a/package.json b/package.json
index 03ff6d1..67b5cd0 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
- "name": "express-servers-GET",
- "version": "1.0.0",
- "description": "A basic Paper, Rock, Scissors game with multiple opponents",
+ "name": "Design Lab 2.0",
+ "version": "2.0.0",
+ "description": "A website for the organization of Trinity School's design lab",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
@@ -12,6 +12,11 @@
"dependencies": {
"ejs": "^3.1.6",
"express": "^4.17.1",
- "moment": "^2.29.4"
+ "express-session": "^1.17.2",
+ "method-override": "^3.0.0",
+ "passport": "^0.5.2",
+ "passport-google-oauth": "^2.0.0",
+ "uuid": "^8.3.2",
+ "multer": "^1.4.4"
}
}
diff --git a/public/css/heroes.css b/public/css/heroes.css
new file mode 100644
index 0000000..30666bb
--- /dev/null
+++ b/public/css/heroes.css
@@ -0,0 +1,13 @@
+.b-example-divider {
+ height: 3rem;
+ background-color: rgba(0, 0, 0, .1);
+ border: solid rgba(0, 0, 0, .15);
+ border-width: 1px 0;
+ box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
+}
+
+@media (min-width: 992px) {
+ .rounded-lg-3 {
+ border-radius: .3rem;
+ }
+}
\ No newline at end of file
diff --git a/public/css/offcanvas.css b/public/css/offcanvas.css
new file mode 100644
index 0000000..ff9e9e2
--- /dev/null
+++ b/public/css/offcanvas.css
@@ -0,0 +1,65 @@
+html,
+body {
+ overflow-x: hidden; /* Prevent scroll on narrow devices */
+}
+
+
+
+@media (max-width: 991.98px) {
+ .offcanvas-collapse {
+ position: fixed;
+ top: 56px; /* Height of navbar */
+ bottom: 0;
+ left: 100%;
+ width: 100%;
+ padding-right: 1rem;
+ padding-left: 1rem;
+ overflow-y: auto;
+ visibility: hidden;
+ background-color: #343a40;
+ transition: transform .3s ease-in-out, visibility .3s ease-in-out;
+ }
+ .offcanvas-collapse.open {
+ visibility: visible;
+ transform: translateX(-100%);
+ }
+}
+
+.nav-scroller {
+ position: relative;
+ z-index: 2;
+ height: 2.75rem;
+ overflow-y: hidden;
+}
+
+.nav-scroller .nav {
+ display: flex;
+ flex-wrap: nowrap;
+ padding-bottom: 1rem;
+ margin-top: -1px;
+ overflow-x: auto;
+ color: rgba(255, 255, 255, .75);
+ text-align: center;
+ white-space: nowrap;
+ -webkit-overflow-scrolling: touch;
+}
+
+.nav-underline .nav-link {
+ padding-top: .75rem;
+ padding-bottom: .75rem;
+ font-size: .875rem;
+ color: #6c757d;
+}
+
+.nav-underline .nav-link:hover {
+ color: #007bff;
+}
+
+.nav-underline .active {
+ font-weight: 500;
+ color: #343a40;
+}
+
+.text-white-50 { color: rgba(255, 255, 255, .5); }
+
+.bg-purple { background-color: #6f42c1; }
diff --git a/public/css/sb-admin-2.min.css b/public/css/sb-admin-2.min.css
new file mode 100644
index 0000000..180f691
--- /dev/null
+++ b/public/css/sb-admin-2.min.css
@@ -0,0 +1,11519 @@
+/*!
+ * Start Bootstrap - SB Admin 2 v4.1.3 (https://startbootstrap.com/theme/sb-admin-2)
+ * Copyright 2013-2021 Start Bootstrap
+ * Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin-2/blob/master/LICENSE)
+ */
+/*!
+ * Bootstrap v4.6.0 (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 {
+ --blue: #4e73df;
+ --indigo: #6610f2;
+ --purple: #6f42c1;
+ --pink: #e83e8c;
+ --red: #e74a3b;
+ --orange: #fd7e14;
+ --yellow: #f6c23e;
+ --green: #1cc88a;
+ --teal: #20c9a6;
+ --cyan: #36b9cc;
+ --white: #fff;
+ --gray: #858796;
+ --gray-dark: #5a5c69;
+ --primary: #4e73df;
+ --secondary: #858796;
+ --success: #1cc88a;
+ --info: #36b9cc;
+ --warning: #f6c23e;
+ --danger: #e74a3b;
+ --light: #f8f9fc;
+ --dark: #5a5c69;
+ --breakpoint-xs: 0;
+ --breakpoint-sm: 576px;
+ --breakpoint-md: 768px;
+ --breakpoint-lg: 992px;
+ --breakpoint-xl: 1200px;
+ --font-family-sans-serif: "Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+ --font-family-monospace: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace
+}
+
+*,::after,::before {
+ box-sizing: border-box
+}
+
+html {
+ font-family: sans-serif;
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%;
+ -webkit-tap-highlight-color: transparent
+}
+
+article,aside,figcaption,figure,footer,header,hgroup,main,nav,section {
+ display: block
+}
+
+body {
+ margin: 0;
+ font-family: Nunito,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ /* color: #858796; */
+ text-align: left;
+ background-color: #fff
+}
+
+[tabindex="-1"]:focus:not(:focus-visible) {
+ outline: 0!important
+}
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible
+}
+
+h1,h2,h3,h4,h5,h6 {
+ margin-top: 0;
+ margin-bottom: .5rem
+}
+
+p {
+ margin-top: 0;
+ margin-bottom: 1rem
+}
+
+abbr[data-original-title],abbr[title] {
+ text-decoration: underline;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ cursor: help;
+ border-bottom: 0;
+ -webkit-text-decoration-skip-ink: none;
+ text-decoration-skip-ink: none
+}
+
+address {
+ margin-bottom: 1rem;
+ font-style: normal;
+ line-height: inherit
+}
+
+dl,ol,ul {
+ margin-top: 0;
+ margin-bottom: 1rem
+}
+
+ol ol,ol ul,ul ol,ul ul {
+ margin-bottom: 0
+}
+
+dt {
+ font-weight: 700
+}
+
+dd {
+ margin-bottom: .5rem;
+ margin-left: 0
+}
+
+blockquote {
+ margin: 0 0 1rem
+}
+
+b,strong {
+ font-weight: bolder
+}
+
+small {
+ font-size: 80%
+}
+
+sub,sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline
+}
+
+sub {
+ bottom: -.25em
+}
+
+sup {
+ top: -.5em
+}
+
+a {
+ color: #4e73df;
+ text-decoration: none;
+ background-color: transparent
+}
+
+a:hover {
+ color: #224abe;
+ text-decoration: underline
+}
+
+a:not([href]):not([class]) {
+ color: inherit;
+ text-decoration: none
+}
+
+a:not([href]):not([class]):hover {
+ color: inherit;
+ text-decoration: none
+}
+
+code,kbd,pre,samp {
+ font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
+ font-size: 1em
+}
+
+pre {
+ margin-top: 0;
+ margin-bottom: 1rem;
+ overflow: auto;
+ -ms-overflow-style: scrollbar
+}
+
+figure {
+ margin: 0 0 1rem
+}
+
+img {
+ vertical-align: middle;
+ border-style: none
+}
+
+svg {
+ overflow: hidden;
+ vertical-align: middle
+}
+
+table {
+ border-collapse: collapse
+}
+
+caption {
+ padding-top: .75rem;
+ padding-bottom: .75rem;
+ color: #858796;
+ text-align: left;
+ caption-side: bottom
+}
+
+th {
+ text-align: inherit;
+ text-align: -webkit-match-parent
+}
+
+label {
+ display: inline-block;
+ margin-bottom: .5rem
+}
+
+button {
+ border-radius: 0
+}
+
+button:focus:not(:focus-visible) {
+ outline: 0
+}
+
+button,input,optgroup,select,textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit
+}
+
+button,input {
+ overflow: visible
+}
+
+button,select {
+ text-transform: none
+}
+
+[role=button] {
+ cursor: pointer
+}
+
+select {
+ word-wrap: normal
+}
+
+[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
+}
+
+[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner {
+ padding: 0;
+ border-style: none
+}
+
+input[type=checkbox],input[type=radio] {
+ box-sizing: border-box;
+ padding: 0
+}
+
+textarea {
+ overflow: auto;
+ resize: vertical
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0
+}
+
+legend {
+ display: block;
+ width: 100%;
+ max-width: 100%;
+ padding: 0;
+ margin-bottom: .5rem;
+ font-size: 1.5rem;
+ line-height: inherit;
+ color: inherit;
+ white-space: normal
+}
+
+progress {
+ vertical-align: baseline
+}
+
+[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button {
+ height: auto
+}
+
+[type=search] {
+ outline-offset: -2px;
+ -webkit-appearance: none
+}
+
+[type=search]::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+::-webkit-file-upload-button {
+ font: inherit;
+ -webkit-appearance: button
+}
+
+output {
+ display: inline-block
+}
+
+summary {
+ display: list-item;
+ cursor: pointer
+}
+
+template {
+ display: none
+}
+
+[hidden] {
+ display: none!important
+}
+
+.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6 {
+ margin-bottom: .5rem;
+ font-weight: 400;
+ line-height: 1.2
+}
+
+.h1,h1 {
+ font-size: 2.5rem
+}
+
+.h2,h2 {
+ font-size: 2rem
+}
+
+.h3,h3 {
+ font-size: 1.75rem
+}
+
+.h4,h4 {
+ font-size: 1.5rem
+}
+
+.h5,h5 {
+ font-size: 1.25rem
+}
+
+.h6,h6 {
+ font-size: 1rem
+}
+
+.lead {
+ font-size: 1.25rem;
+ font-weight: 300
+}
+
+.display-1 {
+ font-size: 6rem;
+ font-weight: 300;
+ line-height: 1.2
+}
+
+.display-2 {
+ font-size: 5.5rem;
+ font-weight: 300;
+ line-height: 1.2
+}
+
+.display-3 {
+ font-size: 4.5rem;
+ font-weight: 300;
+ line-height: 1.2
+}
+
+.display-4 {
+ font-size: 3.5rem;
+ font-weight: 300;
+ line-height: 1.2
+}
+
+hr :not(.divid) {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ border: 0;
+ border-top: 1px solid rgba(255, 255, 255, 0.889)
+}
+
+.small,small {
+ font-size: 80%;
+ font-weight: 400
+}
+
+.mark,mark {
+ padding: .2em;
+ background-color: #fcf8e3
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline-item {
+ display: inline-block
+}
+
+.list-inline-item:not(:last-child) {
+ margin-right: .5rem
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase
+}
+
+.blockquote {
+ margin-bottom: 1rem;
+ font-size: 1.25rem
+}
+
+.blockquote-footer {
+ display: block;
+ font-size: 80%;
+ color: #858796
+}
+
+.blockquote-footer::before {
+ content: "\2014\00A0"
+}
+
+.img-fluid {
+ max-width: 100%;
+ height: auto
+}
+
+.img-thumbnail {
+ padding: .25rem;
+ background-color: #fff;
+ border: 1px solid #dddfeb;
+ border-radius: .35rem;
+ max-width: 100%;
+ height: auto
+}
+
+.figure {
+ display: inline-block
+}
+
+.figure-img {
+ margin-bottom: .5rem;
+ line-height: 1
+}
+
+.figure-caption {
+ font-size: 90%;
+ color: #858796
+}
+
+code {
+ font-size: 87.5%;
+ color: #e83e8c;
+ word-wrap: break-word
+}
+
+a>code {
+ color: inherit
+}
+
+kbd {
+ padding: .2rem .4rem;
+ font-size: 87.5%;
+ color: #fff;
+ background-color: #3a3b45;
+ border-radius: .2rem
+}
+
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: 700
+}
+
+pre {
+ display: block;
+ font-size: 87.5%;
+ color: #3a3b45
+}
+
+pre code {
+ font-size: inherit;
+ color: inherit;
+ word-break: normal
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll
+}
+
+.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl {
+ width: 100%;
+ padding-right: .75rem;
+ padding-left: .75rem;
+ margin-right: auto;
+ margin-left: auto
+}
+
+@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:1140px
+ }
+}
+
+.row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-right: -.75rem;
+ margin-left: -.75rem
+}
+
+.no-gutters {
+ margin-right: 0;
+ margin-left: 0
+}
+
+.no-gutters>.col,.no-gutters>[class*=col-] {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto {
+ position: relative;
+ width: 100%;
+ padding-right: .75rem;
+ padding-left: .75rem
+}
+
+.col {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%
+}
+
+.row-cols-1>* {
+ flex: 0 0 100%;
+ max-width: 100%
+}
+
+.row-cols-2>* {
+ flex: 0 0 50%;
+ max-width: 50%
+}
+
+.row-cols-3>* {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+}
+
+.row-cols-4>* {
+ flex: 0 0 25%;
+ max-width: 25%
+}
+
+.row-cols-5>* {
+ flex: 0 0 20%;
+ max-width: 20%
+}
+
+.row-cols-6>* {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+}
+
+.col-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%
+}
+
+.col-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+}
+
+.col-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+}
+
+.col-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+}
+
+.col-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+}
+
+.col-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+}
+
+.col-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+}
+
+.col-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+}
+
+.col-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+}
+
+.col-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+}
+
+.col-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+}
+
+.col-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+}
+
+.col-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+}
+
+.order-first {
+ order: -1
+}
+
+.order-last {
+ order: 13
+}
+
+.order-0 {
+ order: 0
+}
+
+.order-1 {
+ order: 1
+}
+
+.order-2 {
+ order: 2
+}
+
+.order-3 {
+ order: 3
+}
+
+.order-4 {
+ order: 4
+}
+
+.order-5 {
+ order: 5
+}
+
+.order-6 {
+ order: 6
+}
+
+.order-7 {
+ order: 7
+}
+
+.order-8 {
+ order: 8
+}
+
+.order-9 {
+ order: 9
+}
+
+.order-10 {
+ order: 10
+}
+
+.order-11 {
+ order: 11
+}
+
+.order-12 {
+ order: 12
+}
+
+.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%
+}
+
+@media (min-width: 576px) {
+ .col-sm {
+ flex-basis:0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .row-cols-sm-1>* {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .row-cols-sm-2>* {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .row-cols-sm-3>* {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .row-cols-sm-4>* {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .row-cols-sm-5>* {
+ flex: 0 0 20%;
+ max-width: 20%
+ }
+
+ .row-cols-sm-6>* {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-sm-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%
+ }
+
+ .col-sm-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-sm-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-sm-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-sm-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-sm-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-sm-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-sm-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-sm-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-sm-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-sm-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-sm-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-sm-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-sm-first {
+ order: -1
+ }
+
+ .order-sm-last {
+ order: 13
+ }
+
+ .order-sm-0 {
+ order: 0
+ }
+
+ .order-sm-1 {
+ order: 1
+ }
+
+ .order-sm-2 {
+ order: 2
+ }
+
+ .order-sm-3 {
+ order: 3
+ }
+
+ .order-sm-4 {
+ order: 4
+ }
+
+ .order-sm-5 {
+ order: 5
+ }
+
+ .order-sm-6 {
+ order: 6
+ }
+
+ .order-sm-7 {
+ order: 7
+ }
+
+ .order-sm-8 {
+ order: 8
+ }
+
+ .order-sm-9 {
+ order: 9
+ }
+
+ .order-sm-10 {
+ order: 10
+ }
+
+ .order-sm-11 {
+ order: 11
+ }
+
+ .order-sm-12 {
+ order: 12
+ }
+
+ .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%
+ }
+}
+
+@media (min-width: 768px) {
+ .col-md {
+ flex-basis:0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .row-cols-md-1>* {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .row-cols-md-2>* {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .row-cols-md-3>* {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .row-cols-md-4>* {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .row-cols-md-5>* {
+ flex: 0 0 20%;
+ max-width: 20%
+ }
+
+ .row-cols-md-6>* {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-md-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%
+ }
+
+ .col-md-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-md-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-md-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-md-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-md-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-md-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-md-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-md-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-md-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-md-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-md-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-md-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-md-first {
+ order: -1
+ }
+
+ .order-md-last {
+ order: 13
+ }
+
+ .order-md-0 {
+ order: 0
+ }
+
+ .order-md-1 {
+ order: 1
+ }
+
+ .order-md-2 {
+ order: 2
+ }
+
+ .order-md-3 {
+ order: 3
+ }
+
+ .order-md-4 {
+ order: 4
+ }
+
+ .order-md-5 {
+ order: 5
+ }
+
+ .order-md-6 {
+ order: 6
+ }
+
+ .order-md-7 {
+ order: 7
+ }
+
+ .order-md-8 {
+ order: 8
+ }
+
+ .order-md-9 {
+ order: 9
+ }
+
+ .order-md-10 {
+ order: 10
+ }
+
+ .order-md-11 {
+ order: 11
+ }
+
+ .order-md-12 {
+ order: 12
+ }
+
+ .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%
+ }
+}
+
+@media (min-width: 992px) {
+ .col-lg {
+ flex-basis:0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .row-cols-lg-1>* {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .row-cols-lg-2>* {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .row-cols-lg-3>* {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .row-cols-lg-4>* {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .row-cols-lg-5>* {
+ flex: 0 0 20%;
+ max-width: 20%
+ }
+
+ .row-cols-lg-6>* {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-lg-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%
+ }
+
+ .col-lg-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-lg-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-lg-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-lg-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-lg-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-lg-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-lg-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-lg-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-lg-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-lg-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-lg-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-lg-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-lg-first {
+ order: -1
+ }
+
+ .order-lg-last {
+ order: 13
+ }
+
+ .order-lg-0 {
+ order: 0
+ }
+
+ .order-lg-1 {
+ order: 1
+ }
+
+ .order-lg-2 {
+ order: 2
+ }
+
+ .order-lg-3 {
+ order: 3
+ }
+
+ .order-lg-4 {
+ order: 4
+ }
+
+ .order-lg-5 {
+ order: 5
+ }
+
+ .order-lg-6 {
+ order: 6
+ }
+
+ .order-lg-7 {
+ order: 7
+ }
+
+ .order-lg-8 {
+ order: 8
+ }
+
+ .order-lg-9 {
+ order: 9
+ }
+
+ .order-lg-10 {
+ order: 10
+ }
+
+ .order-lg-11 {
+ order: 11
+ }
+
+ .order-lg-12 {
+ order: 12
+ }
+
+ .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%
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-xl {
+ flex-basis:0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .row-cols-xl-1>* {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .row-cols-xl-2>* {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .row-cols-xl-3>* {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .row-cols-xl-4>* {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .row-cols-xl-5>* {
+ flex: 0 0 20%;
+ max-width: 20%
+ }
+
+ .row-cols-xl-6>* {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-xl-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%
+ }
+
+ .col-xl-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-xl-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-xl-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-xl-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-xl-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-xl-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-xl-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-xl-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-xl-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-xl-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-xl-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-xl-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-xl-first {
+ order: -1
+ }
+
+ .order-xl-last {
+ order: 13
+ }
+
+ .order-xl-0 {
+ order: 0
+ }
+
+ .order-xl-1 {
+ order: 1
+ }
+
+ .order-xl-2 {
+ order: 2
+ }
+
+ .order-xl-3 {
+ order: 3
+ }
+
+ .order-xl-4 {
+ order: 4
+ }
+
+ .order-xl-5 {
+ order: 5
+ }
+
+ .order-xl-6 {
+ order: 6
+ }
+
+ .order-xl-7 {
+ order: 7
+ }
+
+ .order-xl-8 {
+ order: 8
+ }
+
+ .order-xl-9 {
+ order: 9
+ }
+
+ .order-xl-10 {
+ order: 10
+ }
+
+ .order-xl-11 {
+ order: 11
+ }
+
+ .order-xl-12 {
+ order: 12
+ }
+
+ .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%
+ }
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 1rem;
+ color: #858796
+}
+
+.table td,.table th {
+ padding: .75rem;
+ vertical-align: top;
+ border-top: 1px solid #e3e6f0
+}
+
+.table thead th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #e3e6f0
+}
+
+.table tbody+tbody {
+ border-top: 2px solid #e3e6f0
+}
+
+.table-sm td,.table-sm th {
+ padding: .3rem
+}
+
+.table-bordered {
+ border: 1px solid #e3e6f0
+}
+
+.table-bordered td,.table-bordered th {
+ border: 1px solid #e3e6f0
+}
+
+.table-bordered thead td,.table-bordered thead th {
+ border-bottom-width: 2px
+}
+
+.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th {
+ border: 0
+}
+
+.table-striped tbody tr:nth-of-type(odd) {
+ background-color: rgba(0,0,0,.05)
+}
+
+.table-hover tbody tr:hover {
+ color: #858796;
+ background-color: rgba(0,0,0,.075)
+}
+
+.table-primary,.table-primary>td,.table-primary>th {
+ background-color: #cdd8f6
+}
+
+.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th {
+ border-color: #a3b6ee
+}
+
+.table-hover .table-primary:hover {
+ background-color: #b7c7f2
+}
+
+.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th {
+ background-color: #b7c7f2
+}
+
+.table-secondary,.table-secondary>td,.table-secondary>th {
+ background-color: #dddde2
+}
+
+.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th {
+ border-color: #c0c1c8
+}
+
+.table-hover .table-secondary:hover {
+ background-color: #cfcfd6
+}
+
+.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th {
+ background-color: #cfcfd6
+}
+
+.table-success,.table-success>td,.table-success>th {
+ background-color: #bff0de
+}
+
+.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th {
+ border-color: #89e2c2
+}
+
+.table-hover .table-success:hover {
+ background-color: #aaebd3
+}
+
+.table-hover .table-success:hover>td,.table-hover .table-success:hover>th {
+ background-color: #aaebd3
+}
+
+.table-info,.table-info>td,.table-info>th {
+ background-color: #c7ebf1
+}
+
+.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th {
+ border-color: #96dbe4
+}
+
+.table-hover .table-info:hover {
+ background-color: #b3e4ec
+}
+
+.table-hover .table-info:hover>td,.table-hover .table-info:hover>th {
+ background-color: #b3e4ec
+}
+
+.table-warning,.table-warning>td,.table-warning>th {
+ background-color: #fceec9
+}
+
+.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th {
+ border-color: #fadf9b
+}
+
+.table-hover .table-warning:hover {
+ background-color: #fbe6b1
+}
+
+.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th {
+ background-color: #fbe6b1
+}
+
+.table-danger,.table-danger>td,.table-danger>th {
+ background-color: #f8ccc8
+}
+
+.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th {
+ border-color: #f3a199
+}
+
+.table-hover .table-danger:hover {
+ background-color: #f5b7b1
+}
+
+.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th {
+ background-color: #f5b7b1
+}
+
+.table-light,.table-light>td,.table-light>th {
+ background-color: #fdfdfe
+}
+
+.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th {
+ border-color: #fbfcfd
+}
+
+.table-hover .table-light:hover {
+ background-color: #ececf6
+}
+
+.table-hover .table-light:hover>td,.table-hover .table-light:hover>th {
+ background-color: #ececf6
+}
+
+.table-dark,.table-dark>td,.table-dark>th {
+ background-color: #d1d1d5
+}
+
+.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th {
+ border-color: #a9aab1
+}
+
+.table-hover .table-dark:hover {
+ background-color: #c4c4c9
+}
+
+.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th {
+ background-color: #c4c4c9
+}
+
+.table-active,.table-active>td,.table-active>th {
+ background-color: rgba(0,0,0,.075)
+}
+
+.table-hover .table-active:hover {
+ background-color: rgba(0,0,0,.075)
+}
+
+.table-hover .table-active:hover>td,.table-hover .table-active:hover>th {
+ background-color: rgba(0,0,0,.075)
+}
+
+.table .thead-dark th {
+ color: #fff;
+ background-color: #5a5c69;
+ border-color: #6c6e7e
+}
+
+.table .thead-light th {
+ color: #6e707e;
+ background-color: #eaecf4;
+ border-color: #e3e6f0
+}
+
+.table-dark {
+ color: #fff;
+ background-color: #5a5c69
+}
+
+.table-dark td,.table-dark th,.table-dark thead th {
+ border-color: #6c6e7e
+}
+
+.table-dark.table-bordered {
+ border: 0
+}
+
+.table-dark.table-striped tbody tr:nth-of-type(odd) {
+ background-color: rgba(255,255,255,.05)
+}
+
+.table-dark.table-hover tbody tr:hover {
+ color: #fff;
+ background-color: rgba(255,255,255,.075)
+}
+
+@media (max-width: 575.98px) {
+ .table-responsive-sm {
+ display:block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive-sm>.table-bordered {
+ border: 0
+ }
+}
+
+@media (max-width: 767.98px) {
+ .table-responsive-md {
+ display:block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive-md>.table-bordered {
+ border: 0
+ }
+}
+
+@media (max-width: 991.98px) {
+ .table-responsive-lg {
+ display:block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive-lg>.table-bordered {
+ border: 0
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .table-responsive-xl {
+ display:block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive-xl>.table-bordered {
+ border: 0
+ }
+}
+
+.table-responsive {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch
+}
+
+.table-responsive>.table-bordered {
+ border: 0
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: calc(1.5em + .75rem + 2px);
+ padding: .375rem .75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #6e707e;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #d1d3e2;
+ border-radius: .35rem;
+ transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .form-control {
+ transition: none
+ }
+}
+
+.form-control::-ms-expand {
+ background-color: transparent;
+ border: 0
+}
+
+.form-control:-moz-focusring {
+ color: transparent;
+ text-shadow: 0 0 0 #6e707e
+}
+
+.form-control:focus {
+ color: #6e707e;
+ background-color: #fff;
+ border-color: #bac8f3;
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #858796;
+ opacity: 1
+}
+
+.form-control::-moz-placeholder {
+ color: #858796;
+ opacity: 1
+}
+
+.form-control:-ms-input-placeholder {
+ color: #858796;
+ opacity: 1
+}
+
+.form-control::-ms-input-placeholder {
+ color: #858796;
+ opacity: 1
+}
+
+.form-control::placeholder {
+ color: #858796;
+ opacity: 1
+}
+
+.form-control:disabled,.form-control[readonly] {
+ background-color: #eaecf4;
+ opacity: 1
+}
+
+input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none
+}
+
+select.form-control:focus::-ms-value {
+ color: #6e707e;
+ background-color: #fff
+}
+
+.form-control-file,.form-control-range {
+ display: block;
+ width: 100%
+}
+
+.col-form-label {
+ padding-top: calc(.375rem + 1px);
+ padding-bottom: calc(.375rem + 1px);
+ margin-bottom: 0;
+ font-size: inherit;
+ line-height: 1.5
+}
+
+.col-form-label-lg {
+ padding-top: calc(.5rem + 1px);
+ padding-bottom: calc(.5rem + 1px);
+ font-size: 1.5rem;
+ line-height: 1.5
+}
+
+.col-form-label-sm {
+ padding-top: calc(.25rem + 1px);
+ padding-bottom: calc(.25rem + 1px);
+ font-size: .875rem;
+ line-height: 1.5
+}
+
+.form-control-plaintext {
+ display: block;
+ width: 100%;
+ padding: .375rem 0;
+ margin-bottom: 0;
+ font-size: 1rem;
+ line-height: 1.5;
+ color: #858796;
+ background-color: transparent;
+ border: solid transparent;
+ border-width: 1px 0
+}
+
+.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.form-control-sm {
+ height: calc(1.5em + .5rem + 2px);
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ line-height: 1.5;
+ border-radius: .2rem
+}
+
+.form-control-lg {
+ height: calc(1.5em + 1rem + 2px);
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: .3rem
+}
+
+select.form-control[multiple],select.form-control[size] {
+ height: auto
+}
+
+textarea.form-control {
+ height: auto
+}
+
+.form-group {
+ margin-bottom: 1rem
+}
+
+.form-text {
+ display: block;
+ margin-top: .25rem
+}
+
+.form-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-right: -5px;
+ margin-left: -5px
+}
+
+.form-row>.col,.form-row>[class*=col-] {
+ padding-right: 5px;
+ padding-left: 5px
+}
+
+.form-check {
+ position: relative;
+ display: block;
+ padding-left: 1.25rem
+}
+
+.form-check-input {
+ position: absolute;
+ margin-top: .3rem;
+ margin-left: -1.25rem
+}
+
+.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label {
+ color: #858796
+}
+
+.form-check-label {
+ margin-bottom: 0
+}
+
+.form-check-inline {
+ display: inline-flex;
+ align-items: center;
+ padding-left: 0;
+ margin-right: .75rem
+}
+
+.form-check-inline .form-check-input {
+ position: static;
+ margin-top: 0;
+ margin-right: .3125rem;
+ margin-left: 0
+}
+
+.valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #1cc88a
+}
+
+.valid-tooltip {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .25rem .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1.5;
+ color: #fff;
+ background-color: rgba(28,200,138,.9);
+ border-radius: .35rem
+}
+
+.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip {
+ left: 5px
+}
+
+.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: #1cc88a;
+ padding-right: calc(1.5em + .75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(.375em + .1875rem) center;
+ background-size: calc(.75em + .375rem) calc(.75em + .375rem)
+}
+
+.form-control.is-valid:focus,.was-validated .form-control:valid:focus {
+ border-color: #1cc88a;
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.25)
+}
+
+.was-validated textarea.form-control:valid,textarea.form-control.is-valid {
+ padding-right: calc(1.5em + .75rem);
+ background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
+}
+
+.custom-select.is-valid,.was-validated .custom-select:valid {
+ border-color: #1cc88a;
+ padding-right: calc(.75em + 2.3125rem);
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat
+}
+
+.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus {
+ border-color: #1cc88a;
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.25)
+}
+
+.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label {
+ color: #1cc88a
+}
+
+.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip {
+ display: block
+}
+
+.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label {
+ color: #1cc88a
+}
+
+.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before {
+ border-color: #1cc88a
+}
+
+.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before {
+ border-color: #34e3a4;
+ background-color: #34e3a4
+}
+
+.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before {
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.25)
+}
+
+.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before {
+ border-color: #1cc88a
+}
+
+.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label {
+ border-color: #1cc88a
+}
+
+.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label {
+ border-color: #1cc88a;
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.25)
+}
+
+.invalid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #e74a3b
+}
+
+.invalid-tooltip {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .25rem .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1.5;
+ color: #fff;
+ background-color: rgba(231,74,59,.9);
+ border-radius: .35rem
+}
+
+.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip {
+ left: 5px
+}
+
+.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: #e74a3b;
+ padding-right: calc(1.5em + .75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(.375em + .1875rem) center;
+ background-size: calc(.75em + .375rem) calc(.75em + .375rem)
+}
+
+.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus {
+ border-color: #e74a3b;
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.25)
+}
+
+.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid {
+ padding-right: calc(1.5em + .75rem);
+ background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
+}
+
+.custom-select.is-invalid,.was-validated .custom-select:invalid {
+ border-color: #e74a3b;
+ padding-right: calc(.75em + 2.3125rem);
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat
+}
+
+.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus {
+ border-color: #e74a3b;
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.25)
+}
+
+.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label {
+ color: #e74a3b
+}
+
+.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip {
+ display: block
+}
+
+.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label {
+ color: #e74a3b
+}
+
+.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before {
+ border-color: #e74a3b
+}
+
+.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before {
+ border-color: #ed7468;
+ background-color: #ed7468
+}
+
+.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before {
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.25)
+}
+
+.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before {
+ border-color: #e74a3b
+}
+
+.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label {
+ border-color: #e74a3b
+}
+
+.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label {
+ border-color: #e74a3b;
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.25)
+}
+
+.form-inline {
+ display: flex;
+ flex-flow: row wrap;
+ align-items: center
+}
+
+.form-inline .form-check {
+ width: 100%
+}
+
+@media (min-width: 576px) {
+ .form-inline label {
+ display:flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 0
+ }
+
+ .form-inline .form-group {
+ display: flex;
+ flex: 0 0 auto;
+ flex-flow: row wrap;
+ align-items: center;
+ margin-bottom: 0
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle
+ }
+
+ .form-inline .form-control-plaintext {
+ display: inline-block
+ }
+
+ .form-inline .custom-select,.form-inline .input-group {
+ width: auto
+ }
+
+ .form-inline .form-check {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: auto;
+ padding-left: 0
+ }
+
+ .form-inline .form-check-input {
+ position: relative;
+ flex-shrink: 0;
+ margin-top: 0;
+ margin-right: .25rem;
+ margin-left: 0
+ }
+
+ .form-inline .custom-control {
+ align-items: center;
+ justify-content: center
+ }
+
+ .form-inline .custom-control-label {
+ margin-bottom: 0
+ }
+}
+
+.btn {
+ display: inline-block;
+ font-weight: 400;
+ color: #858796;
+ text-align: center;
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-color: transparent;
+ border: 1px solid transparent;
+ padding: .375rem .75rem;
+ font-size: 1rem;
+ line-height: 1.5;
+ border-radius: .35rem;
+ 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) {
+ .btn {
+ transition: none
+ }
+}
+
+.btn:hover {
+ color: #858796;
+ text-decoration: none
+}
+
+.btn.focus,.btn:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.btn.disabled,.btn:disabled {
+ opacity: .65
+}
+
+.btn:not(:disabled):not(.disabled) {
+ cursor: pointer
+}
+
+a.btn.disabled,fieldset:disabled a.btn {
+ pointer-events: none
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #4e73df;
+ border-color: #4e73df
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #2e59d9;
+ border-color: #2653d4
+}
+
+.btn-primary.focus,.btn-primary:focus {
+ color: #fff;
+ background-color: #2e59d9;
+ border-color: #2653d4;
+ box-shadow: 0 0 0 .2rem rgba(105,136,228,.5)
+}
+
+.btn-primary.disabled,.btn-primary:disabled {
+ color: #fff;
+ background-color: #4e73df;
+ border-color: #4e73df
+}
+
+.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #2653d4;
+ border-color: #244ec9
+}
+
+.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(105,136,228,.5)
+}
+
+.btn-secondary {
+ color: #fff;
+ background-color: #858796;
+ border-color: #858796
+}
+
+.btn-secondary:hover {
+ color: #fff;
+ background-color: #717384;
+ border-color: #6b6d7d
+}
+
+.btn-secondary.focus,.btn-secondary:focus {
+ color: #fff;
+ background-color: #717384;
+ border-color: #6b6d7d;
+ box-shadow: 0 0 0 .2rem rgba(151,153,166,.5)
+}
+
+.btn-secondary.disabled,.btn-secondary:disabled {
+ color: #fff;
+ background-color: #858796;
+ border-color: #858796
+}
+
+.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #6b6d7d;
+ border-color: #656776
+}
+
+.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(151,153,166,.5)
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #1cc88a;
+ border-color: #1cc88a
+}
+
+.btn-success:hover {
+ color: #fff;
+ background-color: #17a673;
+ border-color: #169b6b
+}
+
+.btn-success.focus,.btn-success:focus {
+ color: #fff;
+ background-color: #17a673;
+ border-color: #169b6b;
+ box-shadow: 0 0 0 .2rem rgba(62,208,156,.5)
+}
+
+.btn-success.disabled,.btn-success:disabled {
+ color: #fff;
+ background-color: #1cc88a;
+ border-color: #1cc88a
+}
+
+.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #169b6b;
+ border-color: #149063
+}
+
+.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(62,208,156,.5)
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #36b9cc;
+ border-color: #36b9cc
+}
+
+.btn-info:hover {
+ color: #fff;
+ background-color: #2c9faf;
+ border-color: #2a96a5
+}
+
+.btn-info.focus,.btn-info:focus {
+ color: #fff;
+ background-color: #2c9faf;
+ border-color: #2a96a5;
+ box-shadow: 0 0 0 .2rem rgba(84,196,212,.5)
+}
+
+.btn-info.disabled,.btn-info:disabled {
+ color: #fff;
+ background-color: #36b9cc;
+ border-color: #36b9cc
+}
+
+.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #2a96a5;
+ border-color: #278c9b
+}
+
+.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(84,196,212,.5)
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f6c23e;
+ border-color: #f6c23e
+}
+
+.btn-warning:hover {
+ color: #fff;
+ background-color: #f4b619;
+ border-color: #f4b30d
+}
+
+.btn-warning.focus,.btn-warning:focus {
+ color: #fff;
+ background-color: #f4b619;
+ border-color: #f4b30d;
+ box-shadow: 0 0 0 .2rem rgba(247,203,91,.5)
+}
+
+.btn-warning.disabled,.btn-warning:disabled {
+ color: #fff;
+ background-color: #f6c23e;
+ border-color: #f6c23e
+}
+
+.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #f4b30d;
+ border-color: #e9aa0b
+}
+
+.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(247,203,91,.5)
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #e74a3b;
+ border-color: #e74a3b
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #e02d1b;
+ border-color: #d52a1a
+}
+
+.btn-danger.focus,.btn-danger:focus {
+ color: #fff;
+ background-color: #e02d1b;
+ border-color: #d52a1a;
+ box-shadow: 0 0 0 .2rem rgba(235,101,88,.5)
+}
+
+.btn-danger.disabled,.btn-danger:disabled {
+ color: #fff;
+ background-color: #e74a3b;
+ border-color: #e74a3b
+}
+
+.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #d52a1a;
+ border-color: #ca2819
+}
+
+.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(235,101,88,.5)
+}
+
+.btn-light {
+ color: #3a3b45;
+ background-color: #f8f9fc;
+ border-color: #f8f9fc
+}
+
+.btn-light:hover {
+ color: #3a3b45;
+ background-color: #dde2f1;
+ border-color: #d4daed
+}
+
+.btn-light.focus,.btn-light:focus {
+ color: #3a3b45;
+ background-color: #dde2f1;
+ border-color: #d4daed;
+ box-shadow: 0 0 0 .2rem rgba(220,221,225,.5)
+}
+
+.btn-light.disabled,.btn-light:disabled {
+ color: #3a3b45;
+ background-color: #f8f9fc;
+ border-color: #f8f9fc
+}
+
+.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle {
+ color: #3a3b45;
+ background-color: #d4daed;
+ border-color: #cbd3e9
+}
+
+.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(220,221,225,.5)
+}
+
+.btn-dark {
+ color: #fff;
+ background-color: #5a5c69;
+ border-color: #5a5c69
+}
+
+.btn-dark:hover {
+ color: #fff;
+ background-color: #484a54;
+ border-color: #42444e
+}
+
+.btn-dark.focus,.btn-dark:focus {
+ color: #fff;
+ background-color: #484a54;
+ border-color: #42444e;
+ box-shadow: 0 0 0 .2rem rgba(115,116,128,.5)
+}
+
+.btn-dark.disabled,.btn-dark:disabled {
+ color: #fff;
+ background-color: #5a5c69;
+ border-color: #5a5c69
+}
+
+.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #42444e;
+ border-color: #3d3e47
+}
+
+.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(115,116,128,.5)
+}
+
+.btn-outline-primary {
+ color: #4e73df;
+ border-color: #4e73df
+}
+
+.btn-outline-primary:hover {
+ color: #fff;
+ background-color: #4e73df;
+ border-color: #4e73df
+}
+
+.btn-outline-primary.focus,.btn-outline-primary:focus {
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.5)
+}
+
+.btn-outline-primary.disabled,.btn-outline-primary:disabled {
+ color: #4e73df;
+ background-color: transparent
+}
+
+.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #4e73df;
+ border-color: #4e73df
+}
+
+.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.5)
+}
+
+.btn-outline-secondary {
+ color: #858796;
+ border-color: #858796
+}
+
+.btn-outline-secondary:hover {
+ color: #fff;
+ background-color: #858796;
+ border-color: #858796
+}
+
+.btn-outline-secondary.focus,.btn-outline-secondary:focus {
+ box-shadow: 0 0 0 .2rem rgba(133,135,150,.5)
+}
+
+.btn-outline-secondary.disabled,.btn-outline-secondary:disabled {
+ color: #858796;
+ background-color: transparent
+}
+
+.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #858796;
+ border-color: #858796
+}
+
+.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(133,135,150,.5)
+}
+
+.btn-outline-success {
+ color: #1cc88a;
+ border-color: #1cc88a
+}
+
+.btn-outline-success:hover {
+ color: #fff;
+ background-color: #1cc88a;
+ border-color: #1cc88a
+}
+
+.btn-outline-success.focus,.btn-outline-success:focus {
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.5)
+}
+
+.btn-outline-success.disabled,.btn-outline-success:disabled {
+ color: #1cc88a;
+ background-color: transparent
+}
+
+.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle {
+ color: #fff;
+ background-color: #1cc88a;
+ border-color: #1cc88a
+}
+
+.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.5)
+}
+
+.btn-outline-info {
+ color: #36b9cc;
+ border-color: #36b9cc
+}
+
+.btn-outline-info:hover {
+ color: #fff;
+ background-color: #36b9cc;
+ border-color: #36b9cc
+}
+
+.btn-outline-info.focus,.btn-outline-info:focus {
+ box-shadow: 0 0 0 .2rem rgba(54,185,204,.5)
+}
+
+.btn-outline-info.disabled,.btn-outline-info:disabled {
+ color: #36b9cc;
+ background-color: transparent
+}
+
+.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle {
+ color: #fff;
+ background-color: #36b9cc;
+ border-color: #36b9cc
+}
+
+.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(54,185,204,.5)
+}
+
+.btn-outline-warning {
+ color: #f6c23e;
+ border-color: #f6c23e
+}
+
+.btn-outline-warning:hover {
+ color: #fff;
+ background-color: #f6c23e;
+ border-color: #f6c23e
+}
+
+.btn-outline-warning.focus,.btn-outline-warning:focus {
+ box-shadow: 0 0 0 .2rem rgba(246,194,62,.5)
+}
+
+.btn-outline-warning.disabled,.btn-outline-warning:disabled {
+ color: #f6c23e;
+ background-color: transparent
+}
+
+.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #f6c23e;
+ border-color: #f6c23e
+}
+
+.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(246,194,62,.5)
+}
+
+.btn-outline-danger {
+ color: #e74a3b;
+ border-color: #e74a3b
+}
+
+.btn-outline-danger:hover {
+ color: #fff;
+ background-color: #e74a3b;
+ border-color: #e74a3b
+}
+
+.btn-outline-danger.focus,.btn-outline-danger:focus {
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.5)
+}
+
+.btn-outline-danger.disabled,.btn-outline-danger:disabled {
+ color: #e74a3b;
+ background-color: transparent
+}
+
+.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #e74a3b;
+ border-color: #e74a3b
+}
+
+.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.5)
+}
+
+.btn-outline-light {
+ color: #f8f9fc;
+ border-color: #f8f9fc
+}
+
+.btn-outline-light:hover {
+ color: #3a3b45;
+ background-color: #f8f9fc;
+ border-color: #f8f9fc
+}
+
+.btn-outline-light.focus,.btn-outline-light:focus {
+ box-shadow: 0 0 0 .2rem rgba(248,249,252,.5)
+}
+
+.btn-outline-light.disabled,.btn-outline-light:disabled {
+ color: #f8f9fc;
+ background-color: transparent
+}
+
+.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle {
+ color: #3a3b45;
+ background-color: #f8f9fc;
+ border-color: #f8f9fc
+}
+
+.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(248,249,252,.5)
+}
+
+.btn-outline-dark {
+ color: #5a5c69;
+ border-color: #5a5c69
+}
+
+.btn-outline-dark:hover {
+ color: #fff;
+ background-color: #5a5c69;
+ border-color: #5a5c69
+}
+
+.btn-outline-dark.focus,.btn-outline-dark:focus {
+ box-shadow: 0 0 0 .2rem rgba(90,92,105,.5)
+}
+
+.btn-outline-dark.disabled,.btn-outline-dark:disabled {
+ color: #5a5c69;
+ background-color: transparent
+}
+
+.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #5a5c69;
+ border-color: #5a5c69
+}
+
+.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(90,92,105,.5)
+}
+
+.btn-link {
+ font-weight: 400;
+ color: #4e73df;
+ text-decoration: none
+}
+
+.btn-link:hover {
+ color: #224abe;
+ text-decoration: underline
+}
+
+.btn-link.focus,.btn-link:focus {
+ text-decoration: underline
+}
+
+.btn-link.disabled,.btn-link:disabled {
+ color: #858796;
+ pointer-events: none
+}
+
+.btn-group-lg>.btn,.btn-lg {
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: .3rem
+}
+
+.btn-group-sm>.btn,.btn-sm {
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ line-height: 1.5;
+ border-radius: .2rem
+}
+
+.btn-block {
+ display: block;
+ width: 100%
+}
+
+.btn-block+.btn-block {
+ margin-top: .5rem
+}
+
+input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block {
+ width: 100%
+}
+
+.fade {
+ transition: opacity .15s linear
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .fade {
+ transition: none
+ }
+}
+
+.fade:not(.show) {
+ opacity: 0
+}
+
+.collapse:not(.show) {
+ display: none
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ transition: height .15s ease
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .collapsing {
+ transition: none
+ }
+}
+
+.dropdown,.dropleft,.dropright,.dropup {
+ position: relative
+}
+
+.dropdown-toggle {
+ white-space: nowrap
+}
+
+.dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid;
+ border-right: .3em solid transparent;
+ border-bottom: 0;
+ border-left: .3em solid transparent
+}
+
+.dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 10rem;
+ padding: .5rem 0;
+ margin: .125rem 0 0;
+ font-size: .85rem;
+ color: #858796;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #e3e6f0;
+ border-radius: .35rem
+}
+
+.dropdown-menu-left {
+ right: auto;
+ left: 0
+}
+
+.dropdown-menu-right {
+ right: 0;
+ left: auto
+}
+
+@media (min-width: 576px) {
+ .dropdown-menu-sm-left {
+ right:auto;
+ left: 0
+ }
+
+ .dropdown-menu-sm-right {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 768px) {
+ .dropdown-menu-md-left {
+ right:auto;
+ left: 0
+ }
+
+ .dropdown-menu-md-right {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 992px) {
+ .dropdown-menu-lg-left {
+ right:auto;
+ left: 0
+ }
+
+ .dropdown-menu-lg-right {
+ right: 0;
+ left: auto
+ }
+}
+
+@media (min-width: 1200px) {
+ .dropdown-menu-xl-left {
+ right:auto;
+ left: 0
+ }
+
+ .dropdown-menu-xl-right {
+ right: 0;
+ left: auto
+ }
+}
+
+.dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-top: 0;
+ margin-bottom: .125rem
+}
+
+.dropup .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: 0;
+ border-right: .3em solid transparent;
+ border-bottom: .3em solid;
+ border-left: .3em solid transparent
+}
+
+.dropup .dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropright .dropdown-menu {
+ top: 0;
+ right: auto;
+ left: 100%;
+ margin-top: 0;
+ margin-left: .125rem
+}
+
+.dropright .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid transparent;
+ border-right: 0;
+ border-bottom: .3em solid transparent;
+ border-left: .3em solid
+}
+
+.dropright .dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropright .dropdown-toggle::after {
+ vertical-align: 0
+}
+
+.dropleft .dropdown-menu {
+ top: 0;
+ right: 100%;
+ left: auto;
+ margin-top: 0;
+ margin-right: .125rem
+}
+
+.dropleft .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: ""
+}
+
+.dropleft .dropdown-toggle::after {
+ display: none
+}
+
+.dropleft .dropdown-toggle::before {
+ display: inline-block;
+ margin-right: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid transparent;
+ border-right: .3em solid;
+ border-bottom: .3em solid transparent
+}
+
+.dropleft .dropdown-toggle:empty::after {
+ margin-left: 0
+}
+
+.dropleft .dropdown-toggle::before {
+ vertical-align: 0
+}
+
+.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top] {
+ right: auto;
+ bottom: auto
+}
+
+.dropdown-divider {
+ height: 0;
+ margin: .5rem 0;
+ overflow: hidden;
+ border-top: 1px solid #eaecf4
+}
+
+.dropdown-item {
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ font-weight: 400;
+ color: #3a3b45;
+ text-align: inherit;
+ white-space: nowrap;
+ background-color: transparent;
+ border: 0
+}
+
+.dropdown-item:focus,.dropdown-item:hover {
+ color: #2e2f37;
+ text-decoration: none;
+ background-color: #eaecf4
+}
+
+.dropdown-item.active,.dropdown-item:active {
+ color: #fff;
+ text-decoration: none;
+ background-color: #4e73df
+}
+
+.dropdown-item.disabled,.dropdown-item:disabled {
+ color: #b7b9cc;
+ pointer-events: none;
+ background-color: transparent
+}
+
+.dropdown-menu.show {
+ display: block
+}
+
+.dropdown-header {
+ display: block;
+ padding: .5rem 1.5rem;
+ margin-bottom: 0;
+ font-size: .875rem;
+ color: #858796;
+ white-space: nowrap
+}
+
+.dropdown-item-text {
+ display: block;
+ padding: .25rem 1.5rem;
+ color: #3a3b45
+}
+
+.btn-group,.btn-group-vertical {
+ position: relative;
+ display: inline-flex;
+ vertical-align: middle
+}
+
+.btn-group-vertical>.btn,.btn-group>.btn {
+ position: relative;
+ flex: 1 1 auto
+}
+
+.btn-group-vertical>.btn:hover,.btn-group>.btn:hover {
+ z-index: 1
+}
+
+.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus {
+ 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-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.dropdown-toggle-split {
+ padding-right: .5625rem;
+ padding-left: .5625rem
+}
+
+.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after {
+ margin-left: 0
+}
+
+.dropleft .dropdown-toggle-split::before {
+ margin-right: 0
+}
+
+.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split {
+ padding-right: .375rem;
+ padding-left: .375rem
+}
+
+.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split {
+ padding-right: .75rem;
+ padding-left: .75rem
+}
+
+.btn-group-vertical {
+ flex-direction: column;
+ align-items: flex-start;
+ 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-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn {
+ margin-bottom: 0
+}
+
+.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio] {
+ position: absolute;
+ clip: rect(0,0,0,0);
+ pointer-events: none
+}
+
+.input-group {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: stretch;
+ width: 100%
+}
+
+.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext {
+ position: relative;
+ flex: 1 1 auto;
+ width: 1%;
+ min-width: 0;
+ margin-bottom: 0
+}
+
+.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control {
+ margin-left: -1px
+}
+
+.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus {
+ z-index: 3
+}
+
+.input-group>.custom-file .custom-file-input:focus {
+ z-index: 4
+}
+
+.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.input-group>.custom-file {
+ display: flex;
+ align-items: center
+}
+
+.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group-append,.input-group-prepend {
+ display: flex
+}
+
+.input-group-append .btn,.input-group-prepend .btn {
+ position: relative;
+ z-index: 2
+}
+
+.input-group-append .btn:focus,.input-group-prepend .btn:focus {
+ z-index: 3
+}
+
+.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text {
+ margin-left: -1px
+}
+
+.input-group-prepend {
+ margin-right: -1px
+}
+
+.input-group-append {
+ margin-left: -1px
+}
+
+.input-group-text {
+ display: flex;
+ align-items: center;
+ padding: .375rem .75rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #6e707e;
+ text-align: center;
+ white-space: nowrap;
+ background-color: #eaecf4;
+ border: 1px solid #d1d3e2;
+ border-radius: .35rem
+}
+
+.input-group-text input[type=checkbox],.input-group-text input[type=radio] {
+ margin-top: 0
+}
+
+.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea) {
+ height: calc(1.5em + 1rem + 2px)
+}
+
+.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text {
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: .3rem
+}
+
+.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea) {
+ height: calc(1.5em + .5rem + 2px)
+}
+
+.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text {
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ line-height: 1.5;
+ border-radius: .2rem
+}
+
+.input-group-lg>.custom-select,.input-group-sm>.custom-select {
+ padding-right: 1.75rem
+}
+
+.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.custom-control {
+ position: relative;
+ z-index: 1;
+ display: block;
+ min-height: 1.5rem;
+ padding-left: 1.5rem;
+ -webkit-print-color-adjust: exact;
+ color-adjust: exact
+}
+
+.custom-control-inline {
+ display: inline-flex;
+ margin-right: 1rem
+}
+
+.custom-control-input {
+ position: absolute;
+ left: 0;
+ z-index: -1;
+ width: 1rem;
+ height: 1.25rem;
+ opacity: 0
+}
+
+.custom-control-input:checked~.custom-control-label::before {
+ color: #fff;
+ border-color: #4e73df;
+ background-color: #4e73df
+}
+
+.custom-control-input:focus~.custom-control-label::before {
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.custom-control-input:focus:not(:checked)~.custom-control-label::before {
+ border-color: #bac8f3
+}
+
+.custom-control-input:not(:disabled):active~.custom-control-label::before {
+ color: #fff;
+ background-color: #e5ebfa;
+ border-color: #e5ebfa
+}
+
+.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label {
+ color: #858796
+}
+
+.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before {
+ background-color: #eaecf4
+}
+
+.custom-control-label {
+ position: relative;
+ margin-bottom: 0;
+ vertical-align: top
+}
+
+.custom-control-label::before {
+ position: absolute;
+ top: .25rem;
+ left: -1.5rem;
+ display: block;
+ width: 1rem;
+ height: 1rem;
+ pointer-events: none;
+ content: "";
+ background-color: #fff;
+ border: #b7b9cc solid 1px
+}
+
+.custom-control-label::after {
+ position: absolute;
+ top: .25rem;
+ left: -1.5rem;
+ display: block;
+ width: 1rem;
+ height: 1rem;
+ content: "";
+ background: 50%/50% 50% no-repeat
+}
+
+.custom-checkbox .custom-control-label::before {
+ border-radius: .35rem
+}
+
+.custom-checkbox .custom-control-input:checked~.custom-control-label::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")
+}
+
+.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before {
+ border-color: #4e73df;
+ background-color: #4e73df
+}
+
+.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")
+}
+
+.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before {
+ background-color: rgba(78,115,223,.5)
+}
+
+.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before {
+ background-color: rgba(78,115,223,.5)
+}
+
+.custom-radio .custom-control-label::before {
+ border-radius: 50%
+}
+
+.custom-radio .custom-control-input:checked~.custom-control-label::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")
+}
+
+.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before {
+ background-color: rgba(78,115,223,.5)
+}
+
+.custom-switch {
+ padding-left: 2.25rem
+}
+
+.custom-switch .custom-control-label::before {
+ left: -2.25rem;
+ width: 1.75rem;
+ pointer-events: all;
+ border-radius: .5rem
+}
+
+.custom-switch .custom-control-label::after {
+ top: calc(.25rem + 2px);
+ left: calc(-2.25rem + 2px);
+ width: calc(1rem - 4px);
+ height: calc(1rem - 4px);
+ background-color: #b7b9cc;
+ border-radius: .5rem;
+ transition: transform .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) {
+ .custom-switch .custom-control-label::after {
+ transition: none
+ }
+}
+
+.custom-switch .custom-control-input:checked~.custom-control-label::after {
+ background-color: #fff;
+ transform: translateX(.75rem)
+}
+
+.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before {
+ background-color: rgba(78,115,223,.5)
+}
+
+.custom-select {
+ display: inline-block;
+ width: 100%;
+ height: calc(1.5em + .75rem + 2px);
+ padding: .375rem 1.75rem .375rem .75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #6e707e;
+ vertical-align: middle;
+ background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;
+ border: 1px solid #d1d3e2;
+ border-radius: .35rem;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none
+}
+
+.custom-select:focus {
+ border-color: #bac8f3;
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.custom-select:focus::-ms-value {
+ color: #6e707e;
+ background-color: #fff
+}
+
+.custom-select[multiple],.custom-select[size]:not([size="1"]) {
+ height: auto;
+ padding-right: .75rem;
+ background-image: none
+}
+
+.custom-select:disabled {
+ color: #858796;
+ background-color: #eaecf4
+}
+
+.custom-select::-ms-expand {
+ display: none
+}
+
+.custom-select:-moz-focusring {
+ color: transparent;
+ text-shadow: 0 0 0 #6e707e
+}
+
+.custom-select-sm {
+ height: calc(1.5em + .5rem + 2px);
+ padding-top: .25rem;
+ padding-bottom: .25rem;
+ padding-left: .5rem;
+ font-size: .875rem
+}
+
+.custom-select-lg {
+ height: calc(1.5em + 1rem + 2px);
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+ padding-left: 1rem;
+ font-size: 1.25rem
+}
+
+.custom-file {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ height: calc(1.5em + .75rem + 2px);
+ margin-bottom: 0
+}
+
+.custom-file-input {
+ position: relative;
+ z-index: 2;
+ width: 100%;
+ height: calc(1.5em + .75rem + 2px);
+ margin: 0;
+ overflow: hidden;
+ opacity: 0
+}
+
+.custom-file-input:focus~.custom-file-label {
+ border-color: #bac8f3;
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label {
+ background-color: #eaecf4
+}
+
+.custom-file-input:lang(en)~.custom-file-label::after {
+ content: "Browse"
+}
+
+.custom-file-input~.custom-file-label[data-browse]::after {
+ content: attr(data-browse)
+}
+
+.custom-file-label {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1;
+ height: calc(1.5em + .75rem + 2px);
+ padding: .375rem .75rem;
+ overflow: hidden;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #6e707e;
+ background-color: #fff;
+ border: 1px solid #d1d3e2;
+ border-radius: .35rem
+}
+
+.custom-file-label::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 3;
+ display: block;
+ height: calc(1.5em + .75rem);
+ padding: .375rem .75rem;
+ line-height: 1.5;
+ color: #6e707e;
+ content: "Browse";
+ background-color: #eaecf4;
+ border-left: inherit;
+ border-radius: 0 .35rem .35rem 0
+}
+
+.custom-range {
+ width: 100%;
+ height: 1.4rem;
+ padding: 0;
+ background-color: transparent;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none
+}
+
+.custom-range:focus {
+ outline: 0
+}
+
+.custom-range:focus::-webkit-slider-thumb {
+ box-shadow: 0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.custom-range:focus::-moz-range-thumb {
+ box-shadow: 0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.custom-range:focus::-ms-thumb {
+ box-shadow: 0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.custom-range::-moz-focus-outer {
+ border: 0
+}
+
+.custom-range::-webkit-slider-thumb {
+ width: 1rem;
+ height: 1rem;
+ margin-top: -.25rem;
+ background-color: #4e73df;
+ border: 0;
+ border-radius: 1rem;
+ -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;
+ -webkit-appearance: none;
+ appearance: none
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .custom-range::-webkit-slider-thumb {
+ -webkit-transition: none;
+ transition: none
+ }
+}
+
+.custom-range::-webkit-slider-thumb:active {
+ background-color: #e5ebfa
+}
+
+.custom-range::-webkit-slider-runnable-track {
+ width: 100%;
+ height: .5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: #dddfeb;
+ border-color: transparent;
+ border-radius: 1rem
+}
+
+.custom-range::-moz-range-thumb {
+ width: 1rem;
+ height: 1rem;
+ background-color: #4e73df;
+ border: 0;
+ border-radius: 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;
+ -moz-appearance: none;
+ appearance: none
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .custom-range::-moz-range-thumb {
+ -moz-transition: none;
+ transition: none
+ }
+}
+
+.custom-range::-moz-range-thumb:active {
+ background-color: #e5ebfa
+}
+
+.custom-range::-moz-range-track {
+ width: 100%;
+ height: .5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: #dddfeb;
+ border-color: transparent;
+ border-radius: 1rem
+}
+
+.custom-range::-ms-thumb {
+ width: 1rem;
+ height: 1rem;
+ margin-top: 0;
+ margin-right: .2rem;
+ margin-left: .2rem;
+ background-color: #4e73df;
+ border: 0;
+ border-radius: 1rem;
+ -ms-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;
+ appearance: none
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .custom-range::-ms-thumb {
+ -ms-transition: none;
+ transition: none
+ }
+}
+
+.custom-range::-ms-thumb:active {
+ background-color: #e5ebfa
+}
+
+.custom-range::-ms-track {
+ width: 100%;
+ height: .5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: transparent;
+ border-color: transparent;
+ border-width: .5rem
+}
+
+.custom-range::-ms-fill-lower {
+ background-color: #dddfeb;
+ border-radius: 1rem
+}
+
+.custom-range::-ms-fill-upper {
+ margin-right: 15px;
+ background-color: #dddfeb;
+ border-radius: 1rem
+}
+
+.custom-range:disabled::-webkit-slider-thumb {
+ background-color: #b7b9cc
+}
+
+.custom-range:disabled::-webkit-slider-runnable-track {
+ cursor: default
+}
+
+.custom-range:disabled::-moz-range-thumb {
+ background-color: #b7b9cc
+}
+
+.custom-range:disabled::-moz-range-track {
+ cursor: default
+}
+
+.custom-range:disabled::-ms-thumb {
+ background-color: #b7b9cc
+}
+
+.custom-control-label::before,.custom-file-label,.custom-select {
+ transition: background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .custom-control-label::before,.custom-file-label,.custom-select {
+ transition: none
+ }
+}
+
+.nav {
+ display: flex;
+ flex-wrap: wrap;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.nav-link {
+ display: block;
+ padding: .5rem 1rem
+}
+
+.nav-link:focus,.nav-link:hover {
+ text-decoration: none
+}
+
+.nav-link.disabled {
+ color: #858796;
+ pointer-events: none;
+ cursor: default
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #dddfeb
+}
+
+.nav-tabs .nav-link {
+ margin-bottom: -1px;
+ border: 1px solid transparent;
+ border-top-left-radius: .35rem;
+ border-top-right-radius: .35rem
+}
+
+.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover {
+ border-color: #eaecf4 #eaecf4 #dddfeb
+}
+
+.nav-tabs .nav-link.disabled {
+ color: #858796;
+ background-color: transparent;
+ border-color: transparent
+}
+
+.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active {
+ color: #6e707e;
+ background-color: #fff;
+ border-color: #dddfeb #dddfeb #fff
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.nav-pills .nav-link {
+ border-radius: .35rem
+}
+
+.nav-pills .nav-link.active,.nav-pills .show>.nav-link {
+ color: #fff;
+ background-color: #4e73df
+}
+
+.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
+}
+
+.tab-content>.tab-pane {
+ display: none
+}
+
+.tab-content>.active {
+ display: block
+}
+
+.navbar {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between;
+ padding: .5rem 1rem
+}
+
+.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between
+}
+
+.navbar-brand {
+ display: inline-block;
+ padding-top: .3125rem;
+ padding-bottom: .3125rem;
+ margin-right: 1rem;
+ font-size: 1.25rem;
+ line-height: inherit;
+ white-space: nowrap
+}
+
+.navbar-brand:focus,.navbar-brand:hover {
+ text-decoration: none
+}
+
+.navbar-nav {
+ display: flex;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.navbar-nav .nav-link {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.navbar-nav .dropdown-menu {
+ position: static;
+ float: none
+}
+
+.navbar-text {
+ display: inline-block;
+ padding-top: .5rem;
+ padding-bottom: .5rem
+}
+
+.navbar-collapse {
+ flex-basis: 100%;
+ flex-grow: 1;
+ align-items: center
+}
+
+.navbar-toggler {
+ padding: .25rem .75rem;
+ font-size: 1.25rem;
+ line-height: 1;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: .35rem
+}
+
+.navbar-toggler:focus,.navbar-toggler:hover {
+ text-decoration: none
+}
+
+.navbar-toggler-icon {
+ display: inline-block;
+ width: 1.5em;
+ height: 1.5em;
+ vertical-align: middle;
+ content: "";
+ background: 50%/100% 100% no-repeat
+}
+
+.navbar-nav-scroll {
+ max-height: 75vh;
+ overflow-y: auto
+}
+
+@media (max-width: 575.98px) {
+ .navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl {
+ padding-right:0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 576px) {
+ .navbar-expand-sm {
+ flex-flow:row 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-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-sm .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-sm .navbar-collapse {
+ display: flex!important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-sm .navbar-toggler {
+ display: none
+ }
+}
+
+@media (max-width: 767.98px) {
+ .navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl {
+ padding-right:0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-expand-md {
+ flex-flow:row 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-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-md .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-md .navbar-collapse {
+ display: flex!important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-md .navbar-toggler {
+ display: none
+ }
+}
+
+@media (max-width: 991.98px) {
+ .navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl {
+ padding-right:0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-expand-lg {
+ flex-flow:row 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-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-lg .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-lg .navbar-collapse {
+ display: flex!important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-lg .navbar-toggler {
+ display: none
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl {
+ padding-right:0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 1200px) {
+ .navbar-expand-xl {
+ flex-flow:row 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-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-xl .navbar-nav-scroll {
+ overflow: visible
+ }
+
+ .navbar-expand-xl .navbar-collapse {
+ display: flex!important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-xl .navbar-toggler {
+ display: none
+ }
+}
+
+.navbar-expand {
+ flex-flow: row nowrap;
+ justify-content: flex-start
+}
+
+.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.navbar-expand .navbar-nav {
+ flex-direction: row
+}
+
+.navbar-expand .navbar-nav .dropdown-menu {
+ position: absolute
+}
+
+.navbar-expand .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+}
+
+.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl {
+ flex-wrap: nowrap
+}
+
+.navbar-expand .navbar-nav-scroll {
+ overflow: visible
+}
+
+.navbar-expand .navbar-collapse {
+ display: flex!important;
+ flex-basis: auto
+}
+
+.navbar-expand .navbar-toggler {
+ display: none
+}
+
+.navbar-light .navbar-brand {
+ color: rgba(0,0,0,.9)
+}
+
+.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover {
+ color: rgba(0,0,0,.9)
+}
+
+.navbar-light .navbar-nav .nav-link {
+ color: rgba(0,0,0,.5)
+}
+
+.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover {
+ color: rgba(0,0,0,.7)
+}
+
+.navbar-light .navbar-nav .nav-link.disabled {
+ color: rgba(0,0,0,.3)
+}
+
+.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link {
+ color: rgba(0,0,0,.9)
+}
+
+.navbar-light .navbar-toggler {
+ color: rgba(0,0,0,.5);
+ border-color: rgba(0,0,0,.1)
+}
+
+.navbar-light .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")
+}
+
+.navbar-light .navbar-text {
+ color: rgba(0,0,0,.5)
+}
+
+.navbar-light .navbar-text a {
+ color: rgba(0,0,0,.9)
+}
+
+.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover {
+ color: rgba(0,0,0,.9)
+}
+
+.navbar-dark .navbar-brand {
+ color: #fff
+}
+
+.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover {
+ color: #fff
+}
+
+.navbar-dark .navbar-nav .nav-link {
+ color: rgba(255,255,255,.5)
+}
+
+.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover {
+ color: rgba(255,255,255,.75)
+}
+
+.navbar-dark .navbar-nav .nav-link.disabled {
+ color: rgba(255,255,255,.25)
+}
+
+.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link {
+ color: #fff
+}
+
+.navbar-dark .navbar-toggler {
+ color: rgba(255,255,255,.5);
+ border-color: rgba(255,255,255,.1)
+}
+
+.navbar-dark .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")
+}
+
+.navbar-dark .navbar-text {
+ color: rgba(255,255,255,.5)
+}
+
+.navbar-dark .navbar-text a {
+ color: #fff
+}
+
+.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover {
+ color: #fff
+}
+
+.card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: border-box;
+ border: 1px solid #e3e6f0;
+ border-radius: .35rem
+}
+
+.card>hr {
+ margin-right: 0;
+ margin-left: 0
+}
+
+.card>.list-group {
+ border-top: inherit;
+ border-bottom: inherit
+}
+
+.card>.list-group:first-child {
+ border-top-width: 0;
+ border-top-left-radius: calc(.35rem - 1px);
+ border-top-right-radius: calc(.35rem - 1px)
+}
+
+.card>.list-group:last-child {
+ border-bottom-width: 0;
+ border-bottom-right-radius: calc(.35rem - 1px);
+ border-bottom-left-radius: calc(.35rem - 1px)
+}
+
+.card>.card-header+.list-group,.card>.list-group+.card-footer {
+ border-top: 0
+}
+
+.card-body {
+ flex: 1 1 auto;
+ min-height: 1px;
+ padding: 1.25rem
+}
+
+.card-title {
+ margin-bottom: .75rem
+}
+
+.card-subtitle {
+ margin-top: -.375rem;
+ margin-bottom: 0
+}
+
+.card-text:last-child {
+ margin-bottom: 0
+}
+
+.card-link:hover {
+ text-decoration: none
+}
+
+.card-link+.card-link {
+ margin-left: 1.25rem
+}
+
+.card-header {
+ padding: .75rem 1.25rem;
+ margin-bottom: 0;
+ background-color: #f8f9fc;
+ border-bottom: 1px solid #e3e6f0
+}
+
+.card-header:first-child {
+ border-radius: calc(.35rem - 1px) calc(.35rem - 1px) 0 0
+}
+
+.card-footer {
+ padding: .75rem 1.25rem;
+ background-color: #f8f9fc;
+ border-top: 1px solid #e3e6f0
+}
+
+.card-footer:last-child {
+ border-radius: 0 0 calc(.35rem - 1px) calc(.35rem - 1px)
+}
+
+.card-header-tabs {
+ margin-right: -.625rem;
+ margin-bottom: -.75rem;
+ margin-left: -.625rem;
+ border-bottom: 0
+}
+
+.card-header-pills {
+ margin-right: -.625rem;
+ margin-left: -.625rem
+}
+
+.card-img-overlay {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1.25rem;
+ border-radius: calc(.35rem - 1px)
+}
+
+.card-img,.card-img-bottom,.card-img-top {
+ flex-shrink: 0;
+ width: 100%
+}
+
+.card-img,.card-img-top {
+ border-top-left-radius: calc(.35rem - 1px);
+ border-top-right-radius: calc(.35rem - 1px)
+}
+
+.card-img,.card-img-bottom {
+ border-bottom-right-radius: calc(.35rem - 1px);
+ border-bottom-left-radius: calc(.35rem - 1px)
+}
+
+.card-deck .card {
+ margin-bottom: .75rem
+}
+
+@media (min-width: 576px) {
+ .card-deck {
+ display:flex;
+ flex-flow: row wrap;
+ margin-right: -.75rem;
+ margin-left: -.75rem
+ }
+
+ .card-deck .card {
+ flex: 1 0 0%;
+ margin-right: .75rem;
+ margin-bottom: 0;
+ margin-left: .75rem
+ }
+}
+
+.card-group>.card {
+ margin-bottom: .75rem
+}
+
+@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 {
+ margin-left: 0;
+ border-left: 0
+ }
+
+ .card-group>.card:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-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-top-left-radius: 0;
+ border-bottom-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
+ }
+}
+
+.card-columns .card {
+ margin-bottom: .75rem
+}
+
+@media (min-width: 576px) {
+ .card-columns {
+ -moz-column-count:3;
+ column-count: 3;
+ -moz-column-gap: 1.25rem;
+ column-gap: 1.25rem;
+ orphans: 1;
+ widows: 1
+ }
+
+ .card-columns .card {
+ display: inline-block;
+ width: 100%
+ }
+}
+
+.accordion {
+ overflow-anchor: none
+}
+
+.accordion>.card {
+ overflow: hidden
+}
+
+.accordion>.card:not(:last-of-type) {
+ border-bottom: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.accordion>.card:not(:first-of-type) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.accordion>.card>.card-header {
+ border-radius: 0;
+ margin-bottom: -1px
+}
+
+.breadcrumb {
+ display: flex;
+ flex-wrap: wrap;
+ padding: .75rem 1rem;
+ margin-bottom: 1rem;
+ list-style: none;
+ background-color: #eaecf4;
+ border-radius: .35rem
+}
+
+.breadcrumb-item+.breadcrumb-item {
+ padding-left: .5rem
+}
+
+.breadcrumb-item+.breadcrumb-item::before {
+ float: left;
+ padding-right: .5rem;
+ color: #858796;
+ content: "/"
+}
+
+.breadcrumb-item+.breadcrumb-item:hover::before {
+ text-decoration: underline
+}
+
+.breadcrumb-item+.breadcrumb-item:hover::before {
+ text-decoration: none
+}
+
+.breadcrumb-item.active {
+ color: #858796
+}
+
+.pagination {
+ display: flex;
+ padding-left: 0;
+ list-style: none;
+ border-radius: .35rem
+}
+
+.page-link {
+ position: relative;
+ display: block;
+ padding: .5rem .75rem;
+ margin-left: -1px;
+ line-height: 1.25;
+ color: #4e73df;
+ background-color: #fff;
+ border: 1px solid #dddfeb
+}
+
+.page-link:hover {
+ z-index: 2;
+ color: #224abe;
+ text-decoration: none;
+ background-color: #eaecf4;
+ border-color: #dddfeb
+}
+
+.page-link:focus {
+ z-index: 3;
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.25)
+}
+
+.page-item:first-child .page-link {
+ margin-left: 0;
+ border-top-left-radius: .35rem;
+ border-bottom-left-radius: .35rem
+}
+
+.page-item:last-child .page-link {
+ border-top-right-radius: .35rem;
+ border-bottom-right-radius: .35rem
+}
+
+.page-item.active .page-link {
+ z-index: 3;
+ color: #fff;
+ background-color: #4e73df;
+ border-color: #4e73df
+}
+
+.page-item.disabled .page-link {
+ color: #858796;
+ pointer-events: none;
+ cursor: auto;
+ background-color: #fff;
+ border-color: #dddfeb
+}
+
+.pagination-lg .page-link {
+ padding: .75rem 1.5rem;
+ font-size: 1.25rem;
+ line-height: 1.5
+}
+
+.pagination-lg .page-item:first-child .page-link {
+ border-top-left-radius: .3rem;
+ border-bottom-left-radius: .3rem
+}
+
+.pagination-lg .page-item:last-child .page-link {
+ border-top-right-radius: .3rem;
+ border-bottom-right-radius: .3rem
+}
+
+.pagination-sm .page-link {
+ padding: .25rem .5rem;
+ font-size: .875rem;
+ line-height: 1.5
+}
+
+.pagination-sm .page-item:first-child .page-link {
+ border-top-left-radius: .2rem;
+ border-bottom-left-radius: .2rem
+}
+
+.pagination-sm .page-item:last-child .page-link {
+ border-top-right-radius: .2rem;
+ border-bottom-right-radius: .2rem
+}
+
+.badge {
+ display: inline-block;
+ padding: .25em .4em;
+ font-size: 75%;
+ font-weight: 700;
+ line-height: 1;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .35rem;
+ 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) {
+ .badge {
+ transition: none
+ }
+}
+
+a.badge:focus,a.badge:hover {
+ text-decoration: none
+}
+
+.badge:empty {
+ display: none
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px
+}
+
+.badge-pill {
+ padding-right: .6em;
+ padding-left: .6em;
+ border-radius: 10rem
+}
+
+.badge-primary {
+ color: #fff;
+ background-color: #4e73df
+}
+
+a.badge-primary:focus,a.badge-primary:hover {
+ color: #fff;
+ background-color: #2653d4
+}
+
+a.badge-primary.focus,a.badge-primary:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(78,115,223,.5)
+}
+
+.badge-secondary {
+ color: #fff;
+ background-color: #858796
+}
+
+a.badge-secondary:focus,a.badge-secondary:hover {
+ color: #fff;
+ background-color: #6b6d7d
+}
+
+a.badge-secondary.focus,a.badge-secondary:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(133,135,150,.5)
+}
+
+.badge-success {
+ color: #fff;
+ background-color: #1cc88a
+}
+
+a.badge-success:focus,a.badge-success:hover {
+ color: #fff;
+ background-color: #169b6b
+}
+
+a.badge-success.focus,a.badge-success:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(28,200,138,.5)
+}
+
+.badge-info {
+ color: #fff;
+ background-color: #36b9cc
+}
+
+a.badge-info:focus,a.badge-info:hover {
+ color: #fff;
+ background-color: #2a96a5
+}
+
+a.badge-info.focus,a.badge-info:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(54,185,204,.5)
+}
+
+.badge-warning {
+ color: #fff;
+ background-color: #f6c23e
+}
+
+a.badge-warning:focus,a.badge-warning:hover {
+ color: #fff;
+ background-color: #f4b30d
+}
+
+a.badge-warning.focus,a.badge-warning:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(246,194,62,.5)
+}
+
+.badge-danger {
+ color: #fff;
+ background-color: #e74a3b
+}
+
+a.badge-danger:focus,a.badge-danger:hover {
+ color: #fff;
+ background-color: #d52a1a
+}
+
+a.badge-danger.focus,a.badge-danger:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(231,74,59,.5)
+}
+
+.badge-light {
+ color: #3a3b45;
+ background-color: #f8f9fc
+}
+
+a.badge-light:focus,a.badge-light:hover {
+ color: #3a3b45;
+ background-color: #d4daed
+}
+
+a.badge-light.focus,a.badge-light:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(248,249,252,.5)
+}
+
+.badge-dark {
+ color: #fff;
+ background-color: #5a5c69
+}
+
+a.badge-dark:focus,a.badge-dark:hover {
+ color: #fff;
+ background-color: #42444e
+}
+
+a.badge-dark.focus,a.badge-dark:focus {
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(90,92,105,.5)
+}
+
+.jumbotron {
+ padding: 2rem 1rem;
+ margin-bottom: 2rem;
+ background-color: #eaecf4;
+ border-radius: .3rem
+}
+
+@media (min-width: 576px) {
+ .jumbotron {
+ padding:4rem 2rem
+ }
+}
+
+.jumbotron-fluid {
+ padding-right: 0;
+ padding-left: 0;
+ border-radius: 0
+}
+
+.alert {
+ position: relative;
+ padding: .75rem 1.25rem;
+ margin-bottom: 1rem;
+ border: 1px solid transparent;
+ border-radius: .35rem
+}
+
+.alert-heading {
+ color: inherit
+}
+
+.alert-link {
+ font-weight: 700
+}
+
+.alert-dismissible {
+ padding-right: 4rem
+}
+
+.alert-dismissible .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ padding: .75rem 1.25rem;
+ color: inherit
+}
+
+.alert-primary {
+ color: #293c74;
+ background-color: #dce3f9;
+ border-color: #cdd8f6
+}
+
+.alert-primary hr {
+ border-top-color: #b7c7f2
+}
+
+.alert-primary .alert-link {
+ color: #1c294e
+}
+
+.alert-secondary {
+ color: #45464e;
+ background-color: #e7e7ea;
+ border-color: #dddde2
+}
+
+.alert-secondary hr {
+ border-top-color: #cfcfd6
+}
+
+.alert-secondary .alert-link {
+ color: #2d2e33
+}
+
+.alert-success {
+ color: #0f6848;
+ background-color: #d2f4e8;
+ border-color: #bff0de
+}
+
+.alert-success hr {
+ border-top-color: #aaebd3
+}
+
+.alert-success .alert-link {
+ color: #093b29
+}
+
+.alert-info {
+ color: #1c606a;
+ background-color: #d7f1f5;
+ border-color: #c7ebf1
+}
+
+.alert-info hr {
+ border-top-color: #b3e4ec
+}
+
+.alert-info .alert-link {
+ color: #113b42
+}
+
+.alert-warning {
+ color: #806520;
+ background-color: #fdf3d8;
+ border-color: #fceec9
+}
+
+.alert-warning hr {
+ border-top-color: #fbe6b1
+}
+
+.alert-warning .alert-link {
+ color: #574516
+}
+
+.alert-danger {
+ color: #78261f;
+ background-color: #fadbd8;
+ border-color: #f8ccc8
+}
+
+.alert-danger hr {
+ border-top-color: #f5b7b1
+}
+
+.alert-danger .alert-link {
+ color: #4f1915
+}
+
+.alert-light {
+ color: #818183;
+ background-color: #fefefe;
+ border-color: #fdfdfe
+}
+
+.alert-light hr {
+ border-top-color: #ececf6
+}
+
+.alert-light .alert-link {
+ color: #686869
+}
+
+.alert-dark {
+ color: #2f3037;
+ background-color: #dedee1;
+ border-color: #d1d1d5
+}
+
+.alert-dark hr {
+ border-top-color: #c4c4c9
+}
+
+.alert-dark .alert-link {
+ color: #18181c
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 1rem 0
+ }
+
+ to {
+ background-position: 0 0
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 1rem 0
+ }
+
+ to {
+ background-position: 0 0
+ }
+}
+
+.progress {
+ display: flex;
+ height: 1rem;
+ overflow: hidden;
+ line-height: 0;
+ font-size: .75rem;
+ background-color: #eaecf4;
+ border-radius: .35rem
+}
+
+.progress-bar {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ background-color: #4e73df;
+ transition: width .6s ease
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .progress-bar {
+ transition: none
+ }
+}
+
+.progress-bar-striped {
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-size: 1rem 1rem
+}
+
+.progress-bar-animated {
+ -webkit-animation: 1s linear infinite progress-bar-stripes;
+ animation: 1s linear infinite progress-bar-stripes
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .progress-bar-animated {
+ -webkit-animation: none;
+ animation: none
+ }
+}
+
+.media {
+ display: flex;
+ align-items: flex-start
+}
+
+.media-body {
+ flex: 1
+}
+
+.list-group {
+ display: flex;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0;
+ border-radius: .35rem
+}
+
+.list-group-item-action {
+ width: 100%;
+ color: #6e707e;
+ text-align: inherit
+}
+
+.list-group-item-action:focus,.list-group-item-action:hover {
+ z-index: 1;
+ color: #6e707e;
+ text-decoration: none;
+ background-color: #f8f9fc
+}
+
+.list-group-item-action:active {
+ color: #858796;
+ background-color: #eaecf4
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: .75rem 1.25rem;
+ background-color: #fff;
+ border: 1px solid rgba(0,0,0,.125)
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: inherit;
+ border-top-right-radius: inherit
+}
+
+.list-group-item:last-child {
+ border-bottom-right-radius: inherit;
+ border-bottom-left-radius: inherit
+}
+
+.list-group-item.disabled,.list-group-item:disabled {
+ color: #858796;
+ pointer-events: none;
+ background-color: #fff
+}
+
+.list-group-item.active {
+ z-index: 2;
+ color: #fff;
+ background-color: #4e73df;
+ border-color: #4e73df
+}
+
+.list-group-item+.list-group-item {
+ border-top-width: 0
+}
+
+.list-group-item+.list-group-item.active {
+ margin-top: -1px;
+ border-top-width: 1px
+}
+
+.list-group-horizontal {
+ flex-direction: row
+}
+
+.list-group-horizontal>.list-group-item:first-child {
+ border-bottom-left-radius: .35rem;
+ border-top-right-radius: 0
+}
+
+.list-group-horizontal>.list-group-item:last-child {
+ border-top-right-radius: .35rem;
+ border-bottom-left-radius: 0
+}
+
+.list-group-horizontal>.list-group-item.active {
+ margin-top: 0
+}
+
+.list-group-horizontal>.list-group-item+.list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+}
+
+.list-group-horizontal>.list-group-item+.list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 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: .35rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-sm>.list-group-item:last-child {
+ border-top-right-radius: .35rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-sm>.list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-sm>.list-group-item+.list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-sm>.list-group-item+.list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 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: .35rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-md>.list-group-item:last-child {
+ border-top-right-radius: .35rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-md>.list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-md>.list-group-item+.list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-md>.list-group-item+.list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 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: .35rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-lg>.list-group-item:last-child {
+ border-top-right-radius: .35rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-lg>.list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-lg>.list-group-item+.list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-lg>.list-group-item+.list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 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: .35rem;
+ border-top-right-radius: 0
+ }
+
+ .list-group-horizontal-xl>.list-group-item:last-child {
+ border-top-right-radius: .35rem;
+ border-bottom-left-radius: 0
+ }
+
+ .list-group-horizontal-xl>.list-group-item.active {
+ margin-top: 0
+ }
+
+ .list-group-horizontal-xl>.list-group-item+.list-group-item {
+ border-top-width: 1px;
+ border-left-width: 0
+ }
+
+ .list-group-horizontal-xl>.list-group-item+.list-group-item.active {
+ margin-left: -1px;
+ border-left-width: 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 {
+ color: #293c74;
+ background-color: #cdd8f6
+}
+
+.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover {
+ color: #293c74;
+ background-color: #b7c7f2
+}
+
+.list-group-item-primary.list-group-item-action.active {
+ color: #fff;
+ background-color: #293c74;
+ border-color: #293c74
+}
+
+.list-group-item-secondary {
+ color: #45464e;
+ background-color: #dddde2
+}
+
+.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover {
+ color: #45464e;
+ background-color: #cfcfd6
+}
+
+.list-group-item-secondary.list-group-item-action.active {
+ color: #fff;
+ background-color: #45464e;
+ border-color: #45464e
+}
+
+.list-group-item-success {
+ color: #0f6848;
+ background-color: #bff0de
+}
+
+.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover {
+ color: #0f6848;
+ background-color: #aaebd3
+}
+
+.list-group-item-success.list-group-item-action.active {
+ color: #fff;
+ background-color: #0f6848;
+ border-color: #0f6848
+}
+
+.list-group-item-info {
+ color: #1c606a;
+ background-color: #c7ebf1
+}
+
+.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover {
+ color: #1c606a;
+ background-color: #b3e4ec
+}
+
+.list-group-item-info.list-group-item-action.active {
+ color: #fff;
+ background-color: #1c606a;
+ border-color: #1c606a
+}
+
+.list-group-item-warning {
+ color: #806520;
+ background-color: #fceec9
+}
+
+.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover {
+ color: #806520;
+ background-color: #fbe6b1
+}
+
+.list-group-item-warning.list-group-item-action.active {
+ color: #fff;
+ background-color: #806520;
+ border-color: #806520
+}
+
+.list-group-item-danger {
+ color: #78261f;
+ background-color: #f8ccc8
+}
+
+.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover {
+ color: #78261f;
+ background-color: #f5b7b1
+}
+
+.list-group-item-danger.list-group-item-action.active {
+ color: #fff;
+ background-color: #78261f;
+ border-color: #78261f
+}
+
+.list-group-item-light {
+ color: #818183;
+ background-color: #fdfdfe
+}
+
+.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover {
+ color: #818183;
+ background-color: #ececf6
+}
+
+.list-group-item-light.list-group-item-action.active {
+ color: #fff;
+ background-color: #818183;
+ border-color: #818183
+}
+
+.list-group-item-dark {
+ color: #2f3037;
+ background-color: #d1d1d5
+}
+
+.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover {
+ color: #2f3037;
+ background-color: #c4c4c9
+}
+
+.list-group-item-dark.list-group-item-action.active {
+ color: #fff;
+ background-color: #2f3037;
+ border-color: #2f3037
+}
+
+.close {
+ float: right;
+ font-size: 1.5rem;
+ font-weight: 700;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ opacity: .5
+}
+
+.close:hover {
+ color: #000;
+ text-decoration: none
+}
+
+.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover {
+ opacity: .75
+}
+
+button.close {
+ padding: 0;
+ background-color: transparent;
+ border: 0
+}
+
+a.close.disabled {
+ pointer-events: none
+}
+
+.toast {
+ flex-basis: 350px;
+ max-width: 350px;
+ font-size: .875rem;
+ background-color: rgba(255,255,255,.85);
+ background-clip: padding-box;
+ border: 1px solid rgba(0,0,0,.1);
+ box-shadow: 0 .25rem .75rem rgba(0,0,0,.1);
+ opacity: 0;
+ border-radius: .25rem
+}
+
+.toast:not(:last-child) {
+ margin-bottom: .75rem
+}
+
+.toast.showing {
+ opacity: 1
+}
+
+.toast.show {
+ display: block;
+ opacity: 1
+}
+
+.toast.hide {
+ display: none
+}
+
+.toast-header {
+ display: flex;
+ align-items: center;
+ padding: .25rem .75rem;
+ color: #858796;
+ background-color: rgba(255,255,255,.85);
+ background-clip: padding-box;
+ border-bottom: 1px solid rgba(0,0,0,.05);
+ border-top-left-radius: calc(.25rem - 1px);
+ border-top-right-radius: calc(.25rem - 1px)
+}
+
+.toast-body {
+ padding: .75rem
+}
+
+.modal-open {
+ overflow: hidden
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ outline: 0
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: .5rem;
+ pointer-events: none
+}
+
+.modal.fade .modal-dialog {
+ transition: transform .3s ease-out;
+ transform: translate(0,-50px)
+}
+
+@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 {
+ display: flex;
+ max-height: calc(100% - 1rem)
+}
+
+.modal-dialog-scrollable .modal-content {
+ max-height: calc(100vh - 1rem);
+ overflow: hidden
+}
+
+.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header {
+ flex-shrink: 0
+}
+
+.modal-dialog-scrollable .modal-body {
+ overflow-y: auto
+}
+
+.modal-dialog-centered {
+ display: flex;
+ align-items: center;
+ min-height: calc(100% - 1rem)
+}
+
+.modal-dialog-centered::before {
+ display: block;
+ height: calc(100vh - 1rem);
+ height: -webkit-min-content;
+ height: -moz-min-content;
+ height: min-content;
+ content: ""
+}
+
+.modal-dialog-centered.modal-dialog-scrollable {
+ flex-direction: column;
+ justify-content: center;
+ height: 100%
+}
+
+.modal-dialog-centered.modal-dialog-scrollable .modal-content {
+ max-height: none
+}
+
+.modal-dialog-centered.modal-dialog-scrollable::before {
+ content: none
+}
+
+.modal-content {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ pointer-events: auto;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0,0,0,.2);
+ border-radius: .3rem;
+ outline: 0
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1040;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000
+}
+
+.modal-backdrop.fade {
+ opacity: 0
+}
+
+.modal-backdrop.show {
+ opacity: .5
+}
+
+.modal-header {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ padding: 1rem 1rem;
+ border-bottom: 1px solid #e3e6f0;
+ border-top-left-radius: calc(.3rem - 1px);
+ border-top-right-radius: calc(.3rem - 1px)
+}
+
+.modal-header .close {
+ padding: 1rem 1rem;
+ margin: -1rem -1rem -1rem auto
+}
+
+.modal-title {
+ margin-bottom: 0;
+ line-height: 1.5
+}
+
+.modal-body {
+ position: relative;
+ flex: 1 1 auto;
+ padding: 1rem
+}
+
+.modal-footer {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: flex-end;
+ padding: .75rem;
+ border-top: 1px solid #e3e6f0;
+ border-bottom-right-radius: calc(.3rem - 1px);
+ border-bottom-left-radius: calc(.3rem - 1px)
+}
+
+.modal-footer>* {
+ margin: .25rem
+}
+
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll
+}
+
+@media (min-width: 576px) {
+ .modal-dialog {
+ max-width:500px;
+ margin: 1.75rem auto
+ }
+
+ .modal-dialog-scrollable {
+ max-height: calc(100% - 3.5rem)
+ }
+
+ .modal-dialog-scrollable .modal-content {
+ max-height: calc(100vh - 3.5rem)
+ }
+
+ .modal-dialog-centered {
+ min-height: calc(100% - 3.5rem)
+ }
+
+ .modal-dialog-centered::before {
+ height: calc(100vh - 3.5rem);
+ height: -webkit-min-content;
+ height: -moz-min-content;
+ height: min-content
+ }
+
+ .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
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ margin: 0;
+ font-family: Nunito,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: .875rem;
+ word-wrap: break-word;
+ opacity: 0
+}
+
+.tooltip.show {
+ opacity: .9
+}
+
+.tooltip .arrow {
+ position: absolute;
+ display: block;
+ width: .8rem;
+ height: .4rem
+}
+
+.tooltip .arrow::before {
+ position: absolute;
+ content: "";
+ border-color: transparent;
+ border-style: solid
+}
+
+.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top {
+ padding: .4rem 0
+}
+
+.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow {
+ bottom: 0
+}
+
+.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before {
+ top: 0;
+ border-width: .4rem .4rem 0;
+ border-top-color: #000
+}
+
+.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right {
+ padding: 0 .4rem
+}
+
+.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow {
+ left: 0;
+ width: .4rem;
+ height: .8rem
+}
+
+.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before {
+ right: 0;
+ border-width: .4rem .4rem .4rem 0;
+ border-right-color: #000
+}
+
+.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom {
+ padding: .4rem 0
+}
+
+.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow {
+ top: 0
+}
+
+.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before {
+ bottom: 0;
+ border-width: 0 .4rem .4rem;
+ border-bottom-color: #000
+}
+
+.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left {
+ padding: 0 .4rem
+}
+
+.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow {
+ right: 0;
+ width: .4rem;
+ height: .8rem
+}
+
+.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before {
+ left: 0;
+ border-width: .4rem 0 .4rem .4rem;
+ border-left-color: #000
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: .25rem .5rem;
+ color: #fff;
+ text-align: center;
+ background-color: #000;
+ border-radius: .35rem
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: block;
+ max-width: 276px;
+ font-family: Nunito,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: .875rem;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0,0,0,.2);
+ border-radius: .3rem
+}
+
+.popover .arrow {
+ position: absolute;
+ display: block;
+ width: 1rem;
+ height: .5rem;
+ margin: 0 .3rem
+}
+
+.popover .arrow::after,.popover .arrow::before {
+ position: absolute;
+ display: block;
+ content: "";
+ border-color: transparent;
+ border-style: solid
+}
+
+.bs-popover-auto[x-placement^=top],.bs-popover-top {
+ margin-bottom: .5rem
+}
+
+.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow {
+ bottom: calc(-.5rem - 1px)
+}
+
+.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before {
+ bottom: 0;
+ border-width: .5rem .5rem 0;
+ border-top-color: rgba(0,0,0,.25)
+}
+
+.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after {
+ bottom: 1px;
+ border-width: .5rem .5rem 0;
+ border-top-color: #fff
+}
+
+.bs-popover-auto[x-placement^=right],.bs-popover-right {
+ margin-left: .5rem
+}
+
+.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow {
+ left: calc(-.5rem - 1px);
+ width: .5rem;
+ height: 1rem;
+ margin: .3rem 0
+}
+
+.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before {
+ left: 0;
+ border-width: .5rem .5rem .5rem 0;
+ border-right-color: rgba(0,0,0,.25)
+}
+
+.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after {
+ left: 1px;
+ border-width: .5rem .5rem .5rem 0;
+ border-right-color: #fff
+}
+
+.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom {
+ margin-top: .5rem
+}
+
+.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow {
+ top: calc(-.5rem - 1px)
+}
+
+.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before {
+ top: 0;
+ border-width: 0 .5rem .5rem .5rem;
+ border-bottom-color: rgba(0,0,0,.25)
+}
+
+.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after {
+ top: 1px;
+ border-width: 0 .5rem .5rem .5rem;
+ border-bottom-color: #fff
+}
+
+.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -.5rem;
+ content: "";
+ border-bottom: 1px solid #f7f7f7
+}
+
+.bs-popover-auto[x-placement^=left],.bs-popover-left {
+ margin-right: .5rem
+}
+
+.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow {
+ right: calc(-.5rem - 1px);
+ width: .5rem;
+ height: 1rem;
+ margin: .3rem 0
+}
+
+.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before {
+ right: 0;
+ border-width: .5rem 0 .5rem .5rem;
+ border-left-color: rgba(0,0,0,.25)
+}
+
+.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after {
+ right: 1px;
+ border-width: .5rem 0 .5rem .5rem;
+ border-left-color: #fff
+}
+
+.popover-header {
+ padding: .5rem .75rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-top-left-radius: calc(.3rem - 1px);
+ border-top-right-radius: calc(.3rem - 1px)
+}
+
+.popover-header:empty {
+ display: none
+}
+
+.popover-body {
+ padding: .5rem .75rem;
+ color: #858796
+}
+
+.carousel {
+ position: relative
+}
+
+.carousel.pointer-event {
+ touch-action: pan-y
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden
+}
+
+.carousel-inner::after {
+ display: block;
+ clear: both;
+ content: ""
+}
+
+.carousel-item {
+ position: relative;
+ display: none;
+ float: left;
+ width: 100%;
+ margin-right: -100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ transition: transform .6s ease-in-out
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .carousel-item {
+ transition: none
+ }
+}
+
+.carousel-item-next,.carousel-item-prev,.carousel-item.active {
+ display: block
+}
+
+.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left) {
+ transform: translateX(100%)
+}
+
+.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right) {
+ transform: translateX(-100%)
+}
+
+.carousel-fade .carousel-item {
+ opacity: 0;
+ transition-property: opacity;
+ transform: none
+}
+
+.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active {
+ z-index: 1;
+ opacity: 1
+}
+
+.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right {
+ z-index: 0;
+ opacity: 0;
+ transition: opacity 0s .6s
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right {
+ transition: none
+ }
+}
+
+.carousel-control-next,.carousel-control-prev {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 15%;
+ color: #fff;
+ text-align: center;
+ opacity: .5;
+ transition: opacity .15s ease
+}
+
+@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;
+ text-decoration: none;
+ outline: 0;
+ opacity: .9
+}
+
+.carousel-control-prev {
+ left: 0
+}
+
+.carousel-control-next {
+ right: 0
+}
+
+.carousel-control-next-icon,.carousel-control-prev-icon {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ background: 50%/100% 100% no-repeat
+}
+
+.carousel-control-prev-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")
+}
+
+.carousel-control-next-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")
+}
+
+.carousel-indicators {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 15;
+ display: flex;
+ justify-content: center;
+ padding-left: 0;
+ margin-right: 15%;
+ margin-left: 15%;
+ list-style: none
+}
+
+.carousel-indicators li {
+ box-sizing: content-box;
+ flex: 0 1 auto;
+ width: 30px;
+ height: 3px;
+ margin-right: 3px;
+ margin-left: 3px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #fff;
+ background-clip: padding-box;
+ border-top: 10px solid transparent;
+ border-bottom: 10px solid transparent;
+ opacity: .5;
+ transition: opacity .6s ease
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .carousel-indicators li {
+ transition: none
+ }
+}
+
+.carousel-indicators .active {
+ opacity: 1
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center
+}
+
+@-webkit-keyframes spinner-border {
+ to {
+ transform: rotate(360deg)
+ }
+}
+
+@keyframes spinner-border {
+ to {
+ transform: rotate(360deg)
+ }
+}
+
+.spinner-border {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ vertical-align: text-bottom;
+ border: .25em solid currentColor;
+ border-right-color: transparent;
+ border-radius: 50%;
+ -webkit-animation: .75s linear infinite spinner-border;
+ animation: .75s linear infinite spinner-border
+}
+
+.spinner-border-sm {
+ width: 1rem;
+ height: 1rem;
+ border-width: .2em
+}
+
+@-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 {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ vertical-align: text-bottom;
+ background-color: currentColor;
+ border-radius: 50%;
+ opacity: 0;
+ -webkit-animation: .75s linear infinite spinner-grow;
+ animation: .75s linear infinite spinner-grow
+}
+
+.spinner-grow-sm {
+ width: 1rem;
+ height: 1rem
+}
+
+@media (prefers-reduced-motion:reduce) {
+ .spinner-border,.spinner-grow {
+ -webkit-animation-duration: 1.5s;
+ animation-duration: 1.5s
+ }
+}
+
+.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
+}
+
+.bg-primary {
+ background-color: #4e73df!important
+}
+
+a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover {
+ background-color: #2653d4!important
+}
+
+.bg-secondary {
+ background-color: #858796!important
+}
+
+a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover {
+ background-color: #6b6d7d!important
+}
+
+.bg-success {
+ background-color: #1cc88a!important
+}
+
+a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover {
+ background-color: #169b6b!important
+}
+
+.bg-info {
+ background-color: #36b9cc!important
+}
+
+a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover {
+ background-color: #2a96a5!important
+}
+
+.bg-warning {
+ background-color: #f6c23e!important
+}
+
+a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover {
+ background-color: #f4b30d!important
+}
+
+.bg-danger {
+ background-color: #e74a3b!important
+}
+
+a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover {
+ background-color: #d52a1a!important
+}
+
+.bg-light {
+ background-color: #f8f9fc!important
+}
+
+a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover {
+ background-color: #d4daed!important
+}
+
+.bg-dark {
+ background-color: #5a5c69
+}
+
+a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover {
+ background-color: #42444e!important
+}
+
+.bg-white {
+ background-color: #fff!important
+}
+
+.bg-transparent {
+ background-color: transparent!important
+}
+
+.border {
+ border: 1px solid #e3e6f0!important
+}
+
+.border-top {
+ border-top: 1px solid #e3e6f0!important
+}
+
+.border-right {
+ border-right: 1px solid #e3e6f0!important
+}
+
+.border-bottom {
+ border-bottom: 1px solid #e3e6f0!important
+}
+
+.border-left {
+ border-left: 1px solid #e3e6f0!important
+}
+
+.border-0 {
+ border: 0!important
+}
+
+.border-top-0 {
+ border-top: 0!important
+}
+
+.border-right-0 {
+ border-right: 0!important
+}
+
+.border-bottom-0 {
+ border-bottom: 0!important
+}
+
+.border-left-0 {
+ border-left: 0!important
+}
+
+.border-primary {
+ border-color: #4e73df!important
+}
+
+.border-secondary {
+ border-color: #858796!important
+}
+
+.border-success {
+ border-color: #1cc88a!important
+}
+
+.border-info {
+ border-color: #36b9cc!important
+}
+
+.border-warning {
+ border-color: #f6c23e!important
+}
+
+.border-danger {
+ border-color: #e74a3b!important
+}
+
+.border-light {
+ border-color: #f8f9fc!important
+}
+
+.border-dark {
+ border-color: #5a5c69!important
+}
+
+.border-white {
+ border-color: #fff!important
+}
+
+.rounded-sm {
+ border-radius: .2rem!important
+}
+
+.rounded {
+ border-radius: .35rem!important
+}
+
+.rounded-top {
+ border-top-left-radius: .35rem!important;
+ border-top-right-radius: .35rem!important
+}
+
+.rounded-right {
+ border-top-right-radius: .35rem!important;
+ border-bottom-right-radius: .35rem!important
+}
+
+.rounded-bottom {
+ border-bottom-right-radius: .35rem!important;
+ border-bottom-left-radius: .35rem!important
+}
+
+.rounded-left {
+ border-top-left-radius: .35rem!important;
+ border-bottom-left-radius: .35rem!important
+}
+
+.rounded-lg {
+ border-radius: .3rem!important
+}
+
+.rounded-circle {
+ border-radius: 50%!important
+}
+
+.rounded-pill {
+ border-radius: 50rem!important
+}
+
+.rounded-0 {
+ border-radius: 0!important
+}
+
+.clearfix::after {
+ display: block;
+ clear: both;
+ content: ""
+}
+
+.d-none {
+ display: none!important
+}
+
+.d-inline {
+ display: inline!important
+}
+
+.d-inline-block {
+ display: inline-block!important
+}
+
+.d-block {
+ display: block!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
+}
+
+@media (min-width: 576px) {
+ .d-sm-none {
+ display:none!important
+ }
+
+ .d-sm-inline {
+ display: inline!important
+ }
+
+ .d-sm-inline-block {
+ display: inline-block!important
+ }
+
+ .d-sm-block {
+ display: block!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
+ }
+}
+
+@media (min-width: 768px) {
+ .d-md-none {
+ display:none!important
+ }
+
+ .d-md-inline {
+ display: inline!important
+ }
+
+ .d-md-inline-block {
+ display: inline-block!important
+ }
+
+ .d-md-block {
+ display: block!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
+ }
+}
+
+@media (min-width: 992px) {
+ .d-lg-none {
+ display:none!important
+ }
+
+ .d-lg-inline {
+ display: inline!important
+ }
+
+ .d-lg-inline-block {
+ display: inline-block!important
+ }
+
+ .d-lg-block {
+ display: block!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
+ }
+}
+
+@media (min-width: 1200px) {
+ .d-xl-none {
+ display:none!important
+ }
+
+ .d-xl-inline {
+ display: inline!important
+ }
+
+ .d-xl-inline-block {
+ display: inline-block!important
+ }
+
+ .d-xl-block {
+ display: block!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
+ }
+}
+
+@media print {
+ .d-print-none {
+ display: none!important
+ }
+
+ .d-print-inline {
+ display: inline!important
+ }
+
+ .d-print-inline-block {
+ display: inline-block!important
+ }
+
+ .d-print-block {
+ display: block!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
+ }
+}
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ width: 100%;
+ padding: 0;
+ overflow: hidden
+}
+
+.embed-responsive::before {
+ display: block;
+ content: ""
+}
+
+.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0
+}
+
+.embed-responsive-21by9::before {
+ padding-top: 42.85714%
+}
+
+.embed-responsive-16by9::before {
+ padding-top: 56.25%
+}
+
+.embed-responsive-4by3::before {
+ padding-top: 75%
+}
+
+.embed-responsive-1by1::before {
+ padding-top: 100%
+}
+
+.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-wrap {
+ flex-wrap: wrap!important
+}
+
+.flex-nowrap {
+ flex-wrap: nowrap!important
+}
+
+.flex-wrap-reverse {
+ flex-wrap: wrap-reverse!important
+}
+
+.flex-fill {
+ flex: 1 1 auto!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
+}
+
+.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
+}
+
+.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
+}
+
+@media (min-width: 576px) {
+ .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-wrap {
+ flex-wrap: wrap!important
+ }
+
+ .flex-sm-nowrap {
+ flex-wrap: nowrap!important
+ }
+
+ .flex-sm-wrap-reverse {
+ flex-wrap: wrap-reverse!important
+ }
+
+ .flex-sm-fill {
+ flex: 1 1 auto!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
+ }
+
+ .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
+ }
+
+ .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
+ }
+}
+
+@media (min-width: 768px) {
+ .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-wrap {
+ flex-wrap: wrap!important
+ }
+
+ .flex-md-nowrap {
+ flex-wrap: nowrap!important
+ }
+
+ .flex-md-wrap-reverse {
+ flex-wrap: wrap-reverse!important
+ }
+
+ .flex-md-fill {
+ flex: 1 1 auto!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
+ }
+
+ .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
+ }
+
+ .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
+ }
+}
+
+@media (min-width: 992px) {
+ .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-wrap {
+ flex-wrap: wrap!important
+ }
+
+ .flex-lg-nowrap {
+ flex-wrap: nowrap!important
+ }
+
+ .flex-lg-wrap-reverse {
+ flex-wrap: wrap-reverse!important
+ }
+
+ .flex-lg-fill {
+ flex: 1 1 auto!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
+ }
+
+ .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
+ }
+
+ .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
+ }
+}
+
+@media (min-width: 1200px) {
+ .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-wrap {
+ flex-wrap: wrap!important
+ }
+
+ .flex-xl-nowrap {
+ flex-wrap: nowrap!important
+ }
+
+ .flex-xl-wrap-reverse {
+ flex-wrap: wrap-reverse!important
+ }
+
+ .flex-xl-fill {
+ flex: 1 1 auto!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
+ }
+
+ .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
+ }
+
+ .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
+ }
+}
+
+.float-left {
+ float: left!important
+}
+
+.float-right {
+ float: right!important
+}
+
+.float-none {
+ float: none!important
+}
+
+@media (min-width: 576px) {
+ .float-sm-left {
+ float:left!important
+ }
+
+ .float-sm-right {
+ float: right!important
+ }
+
+ .float-sm-none {
+ float: none!important
+ }
+}
+
+@media (min-width: 768px) {
+ .float-md-left {
+ float:left!important
+ }
+
+ .float-md-right {
+ float: right!important
+ }
+
+ .float-md-none {
+ float: none!important
+ }
+}
+
+@media (min-width: 992px) {
+ .float-lg-left {
+ float:left!important
+ }
+
+ .float-lg-right {
+ float: right!important
+ }
+
+ .float-lg-none {
+ float: none!important
+ }
+}
+
+@media (min-width: 1200px) {
+ .float-xl-left {
+ float:left!important
+ }
+
+ .float-xl-right {
+ float: right!important
+ }
+
+ .float-xl-none {
+ float: none!important
+ }
+}
+
+.user-select-all {
+ -webkit-user-select: all!important;
+ -moz-user-select: all!important;
+ -ms-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
+}
+
+.overflow-auto {
+ overflow: auto!important
+}
+
+.overflow-hidden {
+ overflow: hidden!important
+}
+
+.position-static {
+ position: static!important
+}
+
+.position-relative {
+ position: relative!important
+}
+
+.position-absolute {
+ position: absolute!important
+}
+
+.position-fixed {
+ position: fixed!important
+}
+
+.position-sticky {
+ position: -webkit-sticky!important;
+ position: sticky!important
+}
+
+.fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1030
+}
+
+.fixed-bottom {
+ position: fixed;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1030
+}
+
+@supports ((position: -webkit-sticky) or (position:sticky)) {
+ .sticky-top {
+ position:-webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ white-space: nowrap;
+ border: 0
+}
+
+.sr-only-focusable:active,.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ overflow: visible;
+ clip: auto;
+ white-space: normal
+}
+
+.shadow-sm {
+ box-shadow: 0 .125rem .25rem 0 rgba(58,59,69,.2)!important
+}
+
+.shadow {
+ box-shadow: 0 .15rem 1.75rem 0 rgba(58,59,69,.15)!important
+}
+
+.shadow-lg {
+ box-shadow: 0 1rem 5rem rgba(0,0,0,.2) !important
+}
+
+.shadow-none {
+ box-shadow: none!important
+}
+
+.w-25 {
+ width: 25%!important
+}
+
+.w-50 {
+ width: 50%!important
+}
+
+.w-75 {
+ width: 75%!important
+}
+
+.w-100 {
+ width: 100%!important
+}
+
+.w-auto {
+ width: auto!important
+}
+
+.h-25 {
+ height: 25%!important
+}
+
+.h-50 {
+ height: 50%!important
+}
+
+.h-75 {
+ height: 75%!important
+}
+
+.h-100 {
+ height: 100%!important
+}
+
+.h-auto {
+ height: auto!important
+}
+
+.mw-100 {
+ max-width: 100%!important
+}
+
+.mh-100 {
+ max-height: 100%!important
+}
+
+.min-vw-100 {
+ min-width: 100vw!important
+}
+
+.min-vh-100 {
+ min-height: 100vh!important
+}
+
+.vw-100 {
+ width: 100vw!important
+}
+
+.vh-100 {
+ height: 100vh!important
+}
+
+.m-0 {
+ margin: 0!important
+}
+
+.mt-0,.my-0 {
+ margin-top: 0!important
+}
+
+.mr-0,.mx-0 {
+ margin-right: 0!important
+}
+
+.mb-0,.my-0 {
+ margin-bottom: 0!important
+}
+
+.ml-0,.mx-0 {
+ margin-left: 0!important
+}
+
+.m-1 {
+ margin: .25rem!important
+}
+
+.mt-1,.my-1 {
+ margin-top: .25rem!important
+}
+
+.mr-1,.mx-1 {
+ margin-right: .25rem!important
+}
+
+.mb-1,.my-1 {
+ margin-bottom: .25rem!important
+}
+
+.ml-1,.mx-1 {
+ margin-left: .25rem!important
+}
+
+.m-2 {
+ margin: .5rem!important
+}
+
+.mt-2,.my-2 {
+ margin-top: .5rem!important
+}
+
+.mr-2,.mx-2 {
+ margin-right: .5rem!important
+}
+
+.mb-2,.my-2 {
+ margin-bottom: .5rem!important
+}
+
+.ml-2,.mx-2 {
+ margin-left: .5rem!important
+}
+
+.m-3 {
+ margin: 1rem!important
+}
+
+.mt-3,.my-3 {
+ margin-top: 1rem!important
+}
+
+.mr-3,.mx-3 {
+ margin-right: 1rem!important
+}
+
+.mb-3,.my-3 {
+ margin-bottom: 1rem!important
+}
+
+.ml-3,.mx-3 {
+ margin-left: 1rem!important
+}
+
+.m-4 {
+ margin: 1.5rem!important
+}
+
+.mt-4,.my-4 {
+ margin-top: 1.5rem!important
+}
+
+.mr-4,.mx-4 {
+ margin-right: 1.5rem!important
+}
+
+.mb-4,.my-4 {
+ margin-bottom: 1.5rem!important
+}
+
+.ml-4,.mx-4 {
+ margin-left: 1.5rem!important
+}
+
+.m-5 {
+ margin: 3rem!important
+}
+
+.mt-5,.my-5 {
+ margin-top: 3rem!important
+}
+
+.mr-5,.mx-5 {
+ margin-right: 3rem!important
+}
+
+.mb-5,.my-5 {
+ margin-bottom: 3rem!important
+}
+
+.ml-5,.mx-5 {
+ margin-left: 3rem!important
+}
+
+.p-0 {
+ padding: 0!important
+}
+
+.pt-0,.py-0 {
+ padding-top: 0!important
+}
+
+.pr-0,.px-0 {
+ padding-right: 0!important
+}
+
+.pb-0,.py-0 {
+ padding-bottom: 0!important
+}
+
+.pl-0,.px-0 {
+ padding-left: 0!important
+}
+
+.p-1 {
+ padding: .25rem!important
+}
+
+.pt-1,.py-1 {
+ padding-top: .25rem!important
+}
+
+.pr-1,.px-1 {
+ padding-right: .25rem!important
+}
+
+.pb-1,.py-1 {
+ padding-bottom: .25rem!important
+}
+
+.pl-1,.px-1 {
+ padding-left: .25rem!important
+}
+
+.p-2 {
+ padding: .5rem!important
+}
+
+.pt-2,.py-2 {
+ padding-top: .5rem!important
+}
+
+.pr-2,.px-2 {
+ padding-right: .5rem!important
+}
+
+.pb-2,.py-2 {
+ padding-bottom: .5rem!important
+}
+
+.pl-2,.px-2 {
+ padding-left: .5rem!important
+}
+
+.p-3 {
+ padding: 1rem!important
+}
+
+.pt-3,.py-3 {
+ padding-top: 1rem!important
+}
+
+.pr-3,.px-3 {
+ padding-right: 1rem!important
+}
+
+.pb-3,.py-3 {
+ padding-bottom: 1rem!important
+}
+
+.pl-3,.px-3 {
+ padding-left: 1rem!important
+}
+
+.p-4 {
+ padding: 1.5rem!important
+}
+
+.pt-4,.py-4 {
+ padding-top: 1.5rem!important
+}
+
+.pr-4,.px-4 {
+ padding-right: 1.5rem!important
+}
+
+.pb-4,.py-4 {
+ padding-bottom: 1.5rem!important
+}
+
+.pl-4,.px-4 {
+ padding-left: 1.5rem!important
+}
+
+.p-5 {
+ padding: 3rem!important
+}
+
+.pt-5,.py-5 {
+ padding-top: 3rem!important
+}
+
+.pr-5,.px-5 {
+ padding-right: 3rem!important
+}
+
+.pb-5,.py-5 {
+ padding-bottom: 3rem!important
+}
+
+.pl-5,.px-5 {
+ padding-left: 3rem!important
+}
+
+.m-n1 {
+ margin: -.25rem!important
+}
+
+.mt-n1,.my-n1 {
+ margin-top: -.25rem!important
+}
+
+.mr-n1,.mx-n1 {
+ margin-right: -.25rem!important
+}
+
+.mb-n1,.my-n1 {
+ margin-bottom: -.25rem!important
+}
+
+.ml-n1,.mx-n1 {
+ margin-left: -.25rem!important
+}
+
+.m-n2 {
+ margin: -.5rem!important
+}
+
+.mt-n2,.my-n2 {
+ margin-top: -.5rem!important
+}
+
+.mr-n2,.mx-n2 {
+ margin-right: -.5rem!important
+}
+
+.mb-n2,.my-n2 {
+ margin-bottom: -.5rem!important
+}
+
+.ml-n2,.mx-n2 {
+ margin-left: -.5rem!important
+}
+
+.m-n3 {
+ margin: -1rem!important
+}
+
+.mt-n3,.my-n3 {
+ margin-top: -1rem!important
+}
+
+.mr-n3,.mx-n3 {
+ margin-right: -1rem!important
+}
+
+.mb-n3,.my-n3 {
+ margin-bottom: -1rem!important
+}
+
+.ml-n3,.mx-n3 {
+ margin-left: -1rem!important
+}
+
+.m-n4 {
+ margin: -1.5rem!important
+}
+
+.mt-n4,.my-n4 {
+ margin-top: -1.5rem!important
+}
+
+.mr-n4,.mx-n4 {
+ margin-right: -1.5rem!important
+}
+
+.mb-n4,.my-n4 {
+ margin-bottom: -1.5rem!important
+}
+
+.ml-n4,.mx-n4 {
+ margin-left: -1.5rem!important
+}
+
+.m-n5 {
+ margin: -3rem!important
+}
+
+.mt-n5,.my-n5 {
+ margin-top: -3rem!important
+}
+
+.mr-n5,.mx-n5 {
+ margin-right: -3rem!important
+}
+
+.mb-n5,.my-n5 {
+ margin-bottom: -3rem!important
+}
+
+.ml-n5,.mx-n5 {
+ margin-left: -3rem!important
+}
+
+.m-auto {
+ margin: auto!important
+}
+
+.mt-auto,.my-auto {
+ margin-top: auto!important
+}
+
+.mr-auto,.mx-auto {
+ margin-right: auto!important
+}
+
+.mb-auto,.my-auto {
+ margin-bottom: auto!important
+}
+
+.ml-auto,.mx-auto {
+ margin-left: auto!important
+}
+
+@media (min-width: 576px) {
+ .m-sm-0 {
+ margin:0!important
+ }
+
+ .mt-sm-0,.my-sm-0 {
+ margin-top: 0!important
+ }
+
+ .mr-sm-0,.mx-sm-0 {
+ margin-right: 0!important
+ }
+
+ .mb-sm-0,.my-sm-0 {
+ margin-bottom: 0!important
+ }
+
+ .ml-sm-0,.mx-sm-0 {
+ margin-left: 0!important
+ }
+
+ .m-sm-1 {
+ margin: .25rem!important
+ }
+
+ .mt-sm-1,.my-sm-1 {
+ margin-top: .25rem!important
+ }
+
+ .mr-sm-1,.mx-sm-1 {
+ margin-right: .25rem!important
+ }
+
+ .mb-sm-1,.my-sm-1 {
+ margin-bottom: .25rem!important
+ }
+
+ .ml-sm-1,.mx-sm-1 {
+ margin-left: .25rem!important
+ }
+
+ .m-sm-2 {
+ margin: .5rem!important
+ }
+
+ .mt-sm-2,.my-sm-2 {
+ margin-top: .5rem!important
+ }
+
+ .mr-sm-2,.mx-sm-2 {
+ margin-right: .5rem!important
+ }
+
+ .mb-sm-2,.my-sm-2 {
+ margin-bottom: .5rem!important
+ }
+
+ .ml-sm-2,.mx-sm-2 {
+ margin-left: .5rem!important
+ }
+
+ .m-sm-3 {
+ margin: 1rem!important
+ }
+
+ .mt-sm-3,.my-sm-3 {
+ margin-top: 1rem!important
+ }
+
+ .mr-sm-3,.mx-sm-3 {
+ margin-right: 1rem!important
+ }
+
+ .mb-sm-3,.my-sm-3 {
+ margin-bottom: 1rem!important
+ }
+
+ .ml-sm-3,.mx-sm-3 {
+ margin-left: 1rem!important
+ }
+
+ .m-sm-4 {
+ margin: 1.5rem!important
+ }
+
+ .mt-sm-4,.my-sm-4 {
+ margin-top: 1.5rem!important
+ }
+
+ .mr-sm-4,.mx-sm-4 {
+ margin-right: 1.5rem!important
+ }
+
+ .mb-sm-4,.my-sm-4 {
+ margin-bottom: 1.5rem!important
+ }
+
+ .ml-sm-4,.mx-sm-4 {
+ margin-left: 1.5rem!important
+ }
+
+ .m-sm-5 {
+ margin: 3rem!important
+ }
+
+ .mt-sm-5,.my-sm-5 {
+ margin-top: 3rem!important
+ }
+
+ .mr-sm-5,.mx-sm-5 {
+ margin-right: 3rem!important
+ }
+
+ .mb-sm-5,.my-sm-5 {
+ margin-bottom: 3rem!important
+ }
+
+ .ml-sm-5,.mx-sm-5 {
+ margin-left: 3rem!important
+ }
+
+ .p-sm-0 {
+ padding: 0!important
+ }
+
+ .pt-sm-0,.py-sm-0 {
+ padding-top: 0!important
+ }
+
+ .pr-sm-0,.px-sm-0 {
+ padding-right: 0!important
+ }
+
+ .pb-sm-0,.py-sm-0 {
+ padding-bottom: 0!important
+ }
+
+ .pl-sm-0,.px-sm-0 {
+ padding-left: 0!important
+ }
+
+ .p-sm-1 {
+ padding: .25rem!important
+ }
+
+ .pt-sm-1,.py-sm-1 {
+ padding-top: .25rem!important
+ }
+
+ .pr-sm-1,.px-sm-1 {
+ padding-right: .25rem!important
+ }
+
+ .pb-sm-1,.py-sm-1 {
+ padding-bottom: .25rem!important
+ }
+
+ .pl-sm-1,.px-sm-1 {
+ padding-left: .25rem!important
+ }
+
+ .p-sm-2 {
+ padding: .5rem!important
+ }
+
+ .pt-sm-2,.py-sm-2 {
+ padding-top: .5rem!important
+ }
+
+ .pr-sm-2,.px-sm-2 {
+ padding-right: .5rem!important
+ }
+
+ .pb-sm-2,.py-sm-2 {
+ padding-bottom: .5rem!important
+ }
+
+ .pl-sm-2,.px-sm-2 {
+ padding-left: .5rem!important
+ }
+
+ .p-sm-3 {
+ padding: 1rem!important
+ }
+
+ .pt-sm-3,.py-sm-3 {
+ padding-top: 1rem!important
+ }
+
+ .pr-sm-3,.px-sm-3 {
+ padding-right: 1rem!important
+ }
+
+ .pb-sm-3,.py-sm-3 {
+ padding-bottom: 1rem!important
+ }
+
+ .pl-sm-3,.px-sm-3 {
+ padding-left: 1rem!important
+ }
+
+ .p-sm-4 {
+ padding: 1.5rem!important
+ }
+
+ .pt-sm-4,.py-sm-4 {
+ padding-top: 1.5rem!important
+ }
+
+ .pr-sm-4,.px-sm-4 {
+ padding-right: 1.5rem!important
+ }
+
+ .pb-sm-4,.py-sm-4 {
+ padding-bottom: 1.5rem!important
+ }
+
+ .pl-sm-4,.px-sm-4 {
+ padding-left: 1.5rem!important
+ }
+
+ .p-sm-5 {
+ padding: 3rem!important
+ }
+
+ .pt-sm-5,.py-sm-5 {
+ padding-top: 3rem!important
+ }
+
+ .pr-sm-5,.px-sm-5 {
+ padding-right: 3rem!important
+ }
+
+ .pb-sm-5,.py-sm-5 {
+ padding-bottom: 3rem!important
+ }
+
+ .pl-sm-5,.px-sm-5 {
+ padding-left: 3rem!important
+ }
+
+ .m-sm-n1 {
+ margin: -.25rem!important
+ }
+
+ .mt-sm-n1,.my-sm-n1 {
+ margin-top: -.25rem!important
+ }
+
+ .mr-sm-n1,.mx-sm-n1 {
+ margin-right: -.25rem!important
+ }
+
+ .mb-sm-n1,.my-sm-n1 {
+ margin-bottom: -.25rem!important
+ }
+
+ .ml-sm-n1,.mx-sm-n1 {
+ margin-left: -.25rem!important
+ }
+
+ .m-sm-n2 {
+ margin: -.5rem!important
+ }
+
+ .mt-sm-n2,.my-sm-n2 {
+ margin-top: -.5rem!important
+ }
+
+ .mr-sm-n2,.mx-sm-n2 {
+ margin-right: -.5rem!important
+ }
+
+ .mb-sm-n2,.my-sm-n2 {
+ margin-bottom: -.5rem!important
+ }
+
+ .ml-sm-n2,.mx-sm-n2 {
+ margin-left: -.5rem!important
+ }
+
+ .m-sm-n3 {
+ margin: -1rem!important
+ }
+
+ .mt-sm-n3,.my-sm-n3 {
+ margin-top: -1rem!important
+ }
+
+ .mr-sm-n3,.mx-sm-n3 {
+ margin-right: -1rem!important
+ }
+
+ .mb-sm-n3,.my-sm-n3 {
+ margin-bottom: -1rem!important
+ }
+
+ .ml-sm-n3,.mx-sm-n3 {
+ margin-left: -1rem!important
+ }
+
+ .m-sm-n4 {
+ margin: -1.5rem!important
+ }
+
+ .mt-sm-n4,.my-sm-n4 {
+ margin-top: -1.5rem!important
+ }
+
+ .mr-sm-n4,.mx-sm-n4 {
+ margin-right: -1.5rem!important
+ }
+
+ .mb-sm-n4,.my-sm-n4 {
+ margin-bottom: -1.5rem!important
+ }
+
+ .ml-sm-n4,.mx-sm-n4 {
+ margin-left: -1.5rem!important
+ }
+
+ .m-sm-n5 {
+ margin: -3rem!important
+ }
+
+ .mt-sm-n5,.my-sm-n5 {
+ margin-top: -3rem!important
+ }
+
+ .mr-sm-n5,.mx-sm-n5 {
+ margin-right: -3rem!important
+ }
+
+ .mb-sm-n5,.my-sm-n5 {
+ margin-bottom: -3rem!important
+ }
+
+ .ml-sm-n5,.mx-sm-n5 {
+ margin-left: -3rem!important
+ }
+
+ .m-sm-auto {
+ margin: auto!important
+ }
+
+ .mt-sm-auto,.my-sm-auto {
+ margin-top: auto!important
+ }
+
+ .mr-sm-auto,.mx-sm-auto {
+ margin-right: auto!important
+ }
+
+ .mb-sm-auto,.my-sm-auto {
+ margin-bottom: auto!important
+ }
+
+ .ml-sm-auto,.mx-sm-auto {
+ margin-left: auto!important
+ }
+}
+
+@media (min-width: 768px) {
+ .m-md-0 {
+ margin:0!important
+ }
+
+ .mt-md-0,.my-md-0 {
+ margin-top: 0!important
+ }
+
+ .mr-md-0,.mx-md-0 {
+ margin-right: 0!important
+ }
+
+ .mb-md-0,.my-md-0 {
+ margin-bottom: 0!important
+ }
+
+ .ml-md-0,.mx-md-0 {
+ margin-left: 0!important
+ }
+
+ .m-md-1 {
+ margin: .25rem!important
+ }
+
+ .mt-md-1,.my-md-1 {
+ margin-top: .25rem!important
+ }
+
+ .mr-md-1,.mx-md-1 {
+ margin-right: .25rem!important
+ }
+
+ .mb-md-1,.my-md-1 {
+ margin-bottom: .25rem!important
+ }
+
+ .ml-md-1,.mx-md-1 {
+ margin-left: .25rem!important
+ }
+
+ .m-md-2 {
+ margin: .5rem!important
+ }
+
+ .mt-md-2,.my-md-2 {
+ margin-top: .5rem!important
+ }
+
+ .mr-md-2,.mx-md-2 {
+ margin-right: .5rem!important
+ }
+
+ .mb-md-2,.my-md-2 {
+ margin-bottom: .5rem!important
+ }
+
+ .ml-md-2,.mx-md-2 {
+ margin-left: .5rem!important
+ }
+
+ .m-md-3 {
+ margin: 1rem!important
+ }
+
+ .mt-md-3,.my-md-3 {
+ margin-top: 1rem!important
+ }
+
+ .mr-md-3,.mx-md-3 {
+ margin-right: 1rem!important
+ }
+
+ .mb-md-3,.my-md-3 {
+ margin-bottom: 1rem!important
+ }
+
+ .ml-md-3,.mx-md-3 {
+ margin-left: 1rem!important
+ }
+
+ .m-md-4 {
+ margin: 1.5rem!important
+ }
+
+ .mt-md-4,.my-md-4 {
+ margin-top: 1.5rem!important
+ }
+
+ .mr-md-4,.mx-md-4 {
+ margin-right: 1.5rem!important
+ }
+
+ .mb-md-4,.my-md-4 {
+ margin-bottom: 1.5rem!important
+ }
+
+ .ml-md-4,.mx-md-4 {
+ margin-left: 1.5rem!important
+ }
+
+ .m-md-5 {
+ margin: 3rem!important
+ }
+
+ .mt-md-5,.my-md-5 {
+ margin-top: 3rem!important
+ }
+
+ .mr-md-5,.mx-md-5 {
+ margin-right: 3rem!important
+ }
+
+ .mb-md-5,.my-md-5 {
+ margin-bottom: 3rem!important
+ }
+
+ .ml-md-5,.mx-md-5 {
+ margin-left: 3rem!important
+ }
+
+ .p-md-0 {
+ padding: 0!important
+ }
+
+ .pt-md-0,.py-md-0 {
+ padding-top: 0!important
+ }
+
+ .pr-md-0,.px-md-0 {
+ padding-right: 0!important
+ }
+
+ .pb-md-0,.py-md-0 {
+ padding-bottom: 0!important
+ }
+
+ .pl-md-0,.px-md-0 {
+ padding-left: 0!important
+ }
+
+ .p-md-1 {
+ padding: .25rem!important
+ }
+
+ .pt-md-1,.py-md-1 {
+ padding-top: .25rem!important
+ }
+
+ .pr-md-1,.px-md-1 {
+ padding-right: .25rem!important
+ }
+
+ .pb-md-1,.py-md-1 {
+ padding-bottom: .25rem!important
+ }
+
+ .pl-md-1,.px-md-1 {
+ padding-left: .25rem!important
+ }
+
+ .p-md-2 {
+ padding: .5rem!important
+ }
+
+ .pt-md-2,.py-md-2 {
+ padding-top: .5rem!important
+ }
+
+ .pr-md-2,.px-md-2 {
+ padding-right: .5rem!important
+ }
+
+ .pb-md-2,.py-md-2 {
+ padding-bottom: .5rem!important
+ }
+
+ .pl-md-2,.px-md-2 {
+ padding-left: .5rem!important
+ }
+
+ .p-md-3 {
+ padding: 1rem!important
+ }
+
+ .pt-md-3,.py-md-3 {
+ padding-top: 1rem!important
+ }
+
+ .pr-md-3,.px-md-3 {
+ padding-right: 1rem!important
+ }
+
+ .pb-md-3,.py-md-3 {
+ padding-bottom: 1rem!important
+ }
+
+ .pl-md-3,.px-md-3 {
+ padding-left: 1rem!important
+ }
+
+ .p-md-4 {
+ padding: 1.5rem!important
+ }
+
+ .pt-md-4,.py-md-4 {
+ padding-top: 1.5rem!important
+ }
+
+ .pr-md-4,.px-md-4 {
+ padding-right: 1.5rem!important
+ }
+
+ .pb-md-4,.py-md-4 {
+ padding-bottom: 1.5rem!important
+ }
+
+ .pl-md-4,.px-md-4 {
+ padding-left: 1.5rem!important
+ }
+
+ .p-md-5 {
+ padding: 3rem!important
+ }
+
+ .pt-md-5,.py-md-5 {
+ padding-top: 3rem!important
+ }
+
+ .pr-md-5,.px-md-5 {
+ padding-right: 3rem!important
+ }
+
+ .pb-md-5,.py-md-5 {
+ padding-bottom: 3rem!important
+ }
+
+ .pl-md-5,.px-md-5 {
+ padding-left: 3rem!important
+ }
+
+ .m-md-n1 {
+ margin: -.25rem!important
+ }
+
+ .mt-md-n1,.my-md-n1 {
+ margin-top: -.25rem!important
+ }
+
+ .mr-md-n1,.mx-md-n1 {
+ margin-right: -.25rem!important
+ }
+
+ .mb-md-n1,.my-md-n1 {
+ margin-bottom: -.25rem!important
+ }
+
+ .ml-md-n1,.mx-md-n1 {
+ margin-left: -.25rem!important
+ }
+
+ .m-md-n2 {
+ margin: -.5rem!important
+ }
+
+ .mt-md-n2,.my-md-n2 {
+ margin-top: -.5rem!important
+ }
+
+ .mr-md-n2,.mx-md-n2 {
+ margin-right: -.5rem!important
+ }
+
+ .mb-md-n2,.my-md-n2 {
+ margin-bottom: -.5rem!important
+ }
+
+ .ml-md-n2,.mx-md-n2 {
+ margin-left: -.5rem!important
+ }
+
+ .m-md-n3 {
+ margin: -1rem!important
+ }
+
+ .mt-md-n3,.my-md-n3 {
+ margin-top: -1rem!important
+ }
+
+ .mr-md-n3,.mx-md-n3 {
+ margin-right: -1rem!important
+ }
+
+ .mb-md-n3,.my-md-n3 {
+ margin-bottom: -1rem!important
+ }
+
+ .ml-md-n3,.mx-md-n3 {
+ margin-left: -1rem!important
+ }
+
+ .m-md-n4 {
+ margin: -1.5rem!important
+ }
+
+ .mt-md-n4,.my-md-n4 {
+ margin-top: -1.5rem!important
+ }
+
+ .mr-md-n4,.mx-md-n4 {
+ margin-right: -1.5rem!important
+ }
+
+ .mb-md-n4,.my-md-n4 {
+ margin-bottom: -1.5rem!important
+ }
+
+ .ml-md-n4,.mx-md-n4 {
+ margin-left: -1.5rem!important
+ }
+
+ .m-md-n5 {
+ margin: -3rem!important
+ }
+
+ .mt-md-n5,.my-md-n5 {
+ margin-top: -3rem!important
+ }
+
+ .mr-md-n5,.mx-md-n5 {
+ margin-right: -3rem!important
+ }
+
+ .mb-md-n5,.my-md-n5 {
+ margin-bottom: -3rem!important
+ }
+
+ .ml-md-n5,.mx-md-n5 {
+ margin-left: -3rem!important
+ }
+
+ .m-md-auto {
+ margin: auto!important
+ }
+
+ .mt-md-auto,.my-md-auto {
+ margin-top: auto!important
+ }
+
+ .mr-md-auto,.mx-md-auto {
+ margin-right: auto!important
+ }
+
+ .mb-md-auto,.my-md-auto {
+ margin-bottom: auto!important
+ }
+
+ .ml-md-auto,.mx-md-auto {
+ margin-left: auto!important
+ }
+}
+
+@media (min-width: 992px) {
+ .m-lg-0 {
+ margin:0!important
+ }
+
+ .mt-lg-0,.my-lg-0 {
+ margin-top: 0!important
+ }
+
+ .mr-lg-0,.mx-lg-0 {
+ margin-right: 0!important
+ }
+
+ .mb-lg-0,.my-lg-0 {
+ margin-bottom: 0!important
+ }
+
+ .ml-lg-0,.mx-lg-0 {
+ margin-left: 0!important
+ }
+
+ .m-lg-1 {
+ margin: .25rem!important
+ }
+
+ .mt-lg-1,.my-lg-1 {
+ margin-top: .25rem!important
+ }
+
+ .mr-lg-1,.mx-lg-1 {
+ margin-right: .25rem!important
+ }
+
+ .mb-lg-1,.my-lg-1 {
+ margin-bottom: .25rem!important
+ }
+
+ .ml-lg-1,.mx-lg-1 {
+ margin-left: .25rem!important
+ }
+
+ .m-lg-2 {
+ margin: .5rem!important
+ }
+
+ .mt-lg-2,.my-lg-2 {
+ margin-top: .5rem!important
+ }
+
+ .mr-lg-2,.mx-lg-2 {
+ margin-right: .5rem!important
+ }
+
+ .mb-lg-2,.my-lg-2 {
+ margin-bottom: .5rem!important
+ }
+
+ .ml-lg-2,.mx-lg-2 {
+ margin-left: .5rem!important
+ }
+
+ .m-lg-3 {
+ margin: 1rem!important
+ }
+
+ .mt-lg-3,.my-lg-3 {
+ margin-top: 1rem!important
+ }
+
+ .mr-lg-3,.mx-lg-3 {
+ margin-right: 1rem!important
+ }
+
+ .mb-lg-3,.my-lg-3 {
+ margin-bottom: 1rem!important
+ }
+
+ .ml-lg-3,.mx-lg-3 {
+ margin-left: 1rem!important
+ }
+
+ .m-lg-4 {
+ margin: 1.5rem!important
+ }
+
+ .mt-lg-4,.my-lg-4 {
+ margin-top: 1.5rem!important
+ }
+
+ .mr-lg-4,.mx-lg-4 {
+ margin-right: 1.5rem!important
+ }
+
+ .mb-lg-4,.my-lg-4 {
+ margin-bottom: 1.5rem!important
+ }
+
+ .ml-lg-4,.mx-lg-4 {
+ margin-left: 1.5rem!important
+ }
+
+ .m-lg-5 {
+ margin: 3rem!important
+ }
+
+ .mt-lg-5,.my-lg-5 {
+ margin-top: 3rem!important
+ }
+
+ .mr-lg-5,.mx-lg-5 {
+ margin-right: 3rem!important
+ }
+
+ .mb-lg-5,.my-lg-5 {
+ margin-bottom: 3rem!important
+ }
+
+ .ml-lg-5,.mx-lg-5 {
+ margin-left: 3rem!important
+ }
+
+ .p-lg-0 {
+ padding: 0!important
+ }
+
+ .pt-lg-0,.py-lg-0 {
+ padding-top: 0!important
+ }
+
+ .pr-lg-0,.px-lg-0 {
+ padding-right: 0!important
+ }
+
+ .pb-lg-0,.py-lg-0 {
+ padding-bottom: 0!important
+ }
+
+ .pl-lg-0,.px-lg-0 {
+ padding-left: 0!important
+ }
+
+ .p-lg-1 {
+ padding: .25rem!important
+ }
+
+ .pt-lg-1,.py-lg-1 {
+ padding-top: .25rem!important
+ }
+
+ .pr-lg-1,.px-lg-1 {
+ padding-right: .25rem!important
+ }
+
+ .pb-lg-1,.py-lg-1 {
+ padding-bottom: .25rem!important
+ }
+
+ .pl-lg-1,.px-lg-1 {
+ padding-left: .25rem!important
+ }
+
+ .p-lg-2 {
+ padding: .5rem!important
+ }
+
+ .pt-lg-2,.py-lg-2 {
+ padding-top: .5rem!important
+ }
+
+ .pr-lg-2,.px-lg-2 {
+ padding-right: .5rem!important
+ }
+
+ .pb-lg-2,.py-lg-2 {
+ padding-bottom: .5rem!important
+ }
+
+ .pl-lg-2,.px-lg-2 {
+ padding-left: .5rem!important
+ }
+
+ .p-lg-3 {
+ padding: 1rem!important
+ }
+
+ .pt-lg-3,.py-lg-3 {
+ padding-top: 1rem!important
+ }
+
+ .pr-lg-3,.px-lg-3 {
+ padding-right: 1rem!important
+ }
+
+ .pb-lg-3,.py-lg-3 {
+ padding-bottom: 1rem!important
+ }
+
+ .pl-lg-3,.px-lg-3 {
+ padding-left: 1rem!important
+ }
+
+ .p-lg-4 {
+ padding: 1.5rem!important
+ }
+
+ .pt-lg-4,.py-lg-4 {
+ padding-top: 1.5rem!important
+ }
+
+ .pr-lg-4,.px-lg-4 {
+ padding-right: 1.5rem!important
+ }
+
+ .pb-lg-4,.py-lg-4 {
+ padding-bottom: 1.5rem!important
+ }
+
+ .pl-lg-4,.px-lg-4 {
+ padding-left: 1.5rem!important
+ }
+
+ .p-lg-5 {
+ padding: 3rem!important
+ }
+
+ .pt-lg-5,.py-lg-5 {
+ padding-top: 3rem!important
+ }
+
+ .pr-lg-5,.px-lg-5 {
+ padding-right: 3rem!important
+ }
+
+ .pb-lg-5,.py-lg-5 {
+ padding-bottom: 3rem!important
+ }
+
+ .pl-lg-5,.px-lg-5 {
+ padding-left: 3rem!important
+ }
+
+ .m-lg-n1 {
+ margin: -.25rem!important
+ }
+
+ .mt-lg-n1,.my-lg-n1 {
+ margin-top: -.25rem!important
+ }
+
+ .mr-lg-n1,.mx-lg-n1 {
+ margin-right: -.25rem!important
+ }
+
+ .mb-lg-n1,.my-lg-n1 {
+ margin-bottom: -.25rem!important
+ }
+
+ .ml-lg-n1,.mx-lg-n1 {
+ margin-left: -.25rem!important
+ }
+
+ .m-lg-n2 {
+ margin: -.5rem!important
+ }
+
+ .mt-lg-n2,.my-lg-n2 {
+ margin-top: -.5rem!important
+ }
+
+ .mr-lg-n2,.mx-lg-n2 {
+ margin-right: -.5rem!important
+ }
+
+ .mb-lg-n2,.my-lg-n2 {
+ margin-bottom: -.5rem!important
+ }
+
+ .ml-lg-n2,.mx-lg-n2 {
+ margin-left: -.5rem!important
+ }
+
+ .m-lg-n3 {
+ margin: -1rem!important
+ }
+
+ .mt-lg-n3,.my-lg-n3 {
+ margin-top: -1rem!important
+ }
+
+ .mr-lg-n3,.mx-lg-n3 {
+ margin-right: -1rem!important
+ }
+
+ .mb-lg-n3,.my-lg-n3 {
+ margin-bottom: -1rem!important
+ }
+
+ .ml-lg-n3,.mx-lg-n3 {
+ margin-left: -1rem!important
+ }
+
+ .m-lg-n4 {
+ margin: -1.5rem!important
+ }
+
+ .mt-lg-n4,.my-lg-n4 {
+ margin-top: -1.5rem!important
+ }
+
+ .mr-lg-n4,.mx-lg-n4 {
+ margin-right: -1.5rem!important
+ }
+
+ .mb-lg-n4,.my-lg-n4 {
+ margin-bottom: -1.5rem!important
+ }
+
+ .ml-lg-n4,.mx-lg-n4 {
+ margin-left: -1.5rem!important
+ }
+
+ .m-lg-n5 {
+ margin: -3rem!important
+ }
+
+ .mt-lg-n5,.my-lg-n5 {
+ margin-top: -3rem!important
+ }
+
+ .mr-lg-n5,.mx-lg-n5 {
+ margin-right: -3rem!important
+ }
+
+ .mb-lg-n5,.my-lg-n5 {
+ margin-bottom: -3rem!important
+ }
+
+ .ml-lg-n5,.mx-lg-n5 {
+ margin-left: -3rem!important
+ }
+
+ .m-lg-auto {
+ margin: auto!important
+ }
+
+ .mt-lg-auto,.my-lg-auto {
+ margin-top: auto!important
+ }
+
+ .mr-lg-auto,.mx-lg-auto {
+ margin-right: auto!important
+ }
+
+ .mb-lg-auto,.my-lg-auto {
+ margin-bottom: auto!important
+ }
+
+ .ml-lg-auto,.mx-lg-auto {
+ margin-left: auto!important
+ }
+}
+
+@media (min-width: 1200px) {
+ .m-xl-0 {
+ margin:0!important
+ }
+
+ .mt-xl-0,.my-xl-0 {
+ margin-top: 0!important
+ }
+
+ .mr-xl-0,.mx-xl-0 {
+ margin-right: 0!important
+ }
+
+ .mb-xl-0,.my-xl-0 {
+ margin-bottom: 0!important
+ }
+
+ .ml-xl-0,.mx-xl-0 {
+ margin-left: 0!important
+ }
+
+ .m-xl-1 {
+ margin: .25rem!important
+ }
+
+ .mt-xl-1,.my-xl-1 {
+ margin-top: .25rem!important
+ }
+
+ .mr-xl-1,.mx-xl-1 {
+ margin-right: .25rem!important
+ }
+
+ .mb-xl-1,.my-xl-1 {
+ margin-bottom: .25rem!important
+ }
+
+ .ml-xl-1,.mx-xl-1 {
+ margin-left: .25rem!important
+ }
+
+ .m-xl-2 {
+ margin: .5rem!important
+ }
+
+ .mt-xl-2,.my-xl-2 {
+ margin-top: .5rem!important
+ }
+
+ .mr-xl-2,.mx-xl-2 {
+ margin-right: .5rem!important
+ }
+
+ .mb-xl-2,.my-xl-2 {
+ margin-bottom: .5rem!important
+ }
+
+ .ml-xl-2,.mx-xl-2 {
+ margin-left: .5rem!important
+ }
+
+ .m-xl-3 {
+ margin: 1rem!important
+ }
+
+ .mt-xl-3,.my-xl-3 {
+ margin-top: 1rem!important
+ }
+
+ .mr-xl-3,.mx-xl-3 {
+ margin-right: 1rem!important
+ }
+
+ .mb-xl-3,.my-xl-3 {
+ margin-bottom: 1rem!important
+ }
+
+ .ml-xl-3,.mx-xl-3 {
+ margin-left: 1rem!important
+ }
+
+ .m-xl-4 {
+ margin: 1.5rem!important
+ }
+
+ .mt-xl-4,.my-xl-4 {
+ margin-top: 1.5rem!important
+ }
+
+ .mr-xl-4,.mx-xl-4 {
+ margin-right: 1.5rem!important
+ }
+
+ .mb-xl-4,.my-xl-4 {
+ margin-bottom: 1.5rem!important
+ }
+
+ .ml-xl-4,.mx-xl-4 {
+ margin-left: 1.5rem!important
+ }
+
+ .m-xl-5 {
+ margin: 3rem!important
+ }
+
+ .mt-xl-5,.my-xl-5 {
+ margin-top: 3rem!important
+ }
+
+ .mr-xl-5,.mx-xl-5 {
+ margin-right: 3rem!important
+ }
+
+ .mb-xl-5,.my-xl-5 {
+ margin-bottom: 3rem!important
+ }
+
+ .ml-xl-5,.mx-xl-5 {
+ margin-left: 3rem!important
+ }
+
+ .p-xl-0 {
+ padding: 0!important
+ }
+
+ .pt-xl-0,.py-xl-0 {
+ padding-top: 0!important
+ }
+
+ .pr-xl-0,.px-xl-0 {
+ padding-right: 0!important
+ }
+
+ .pb-xl-0,.py-xl-0 {
+ padding-bottom: 0!important
+ }
+
+ .pl-xl-0,.px-xl-0 {
+ padding-left: 0!important
+ }
+
+ .p-xl-1 {
+ padding: .25rem!important
+ }
+
+ .pt-xl-1,.py-xl-1 {
+ padding-top: .25rem!important
+ }
+
+ .pr-xl-1,.px-xl-1 {
+ padding-right: .25rem!important
+ }
+
+ .pb-xl-1,.py-xl-1 {
+ padding-bottom: .25rem!important
+ }
+
+ .pl-xl-1,.px-xl-1 {
+ padding-left: .25rem!important
+ }
+
+ .p-xl-2 {
+ padding: .5rem!important
+ }
+
+ .pt-xl-2,.py-xl-2 {
+ padding-top: .5rem!important
+ }
+
+ .pr-xl-2,.px-xl-2 {
+ padding-right: .5rem!important
+ }
+
+ .pb-xl-2,.py-xl-2 {
+ padding-bottom: .5rem!important
+ }
+
+ .pl-xl-2,.px-xl-2 {
+ padding-left: .5rem!important
+ }
+
+ .p-xl-3 {
+ padding: 1rem!important
+ }
+
+ .pt-xl-3,.py-xl-3 {
+ padding-top: 1rem!important
+ }
+
+ .pr-xl-3,.px-xl-3 {
+ padding-right: 1rem!important
+ }
+
+ .pb-xl-3,.py-xl-3 {
+ padding-bottom: 1rem!important
+ }
+
+ .pl-xl-3,.px-xl-3 {
+ padding-left: 1rem!important
+ }
+
+ .p-xl-4 {
+ padding: 1.5rem!important
+ }
+
+ .pt-xl-4,.py-xl-4 {
+ padding-top: 1.5rem!important
+ }
+
+ .pr-xl-4,.px-xl-4 {
+ padding-right: 1.5rem!important
+ }
+
+ .pb-xl-4,.py-xl-4 {
+ padding-bottom: 1.5rem!important
+ }
+
+ .pl-xl-4,.px-xl-4 {
+ padding-left: 1.5rem!important
+ }
+
+ .p-xl-5 {
+ padding: 3rem!important
+ }
+
+ .pt-xl-5,.py-xl-5 {
+ padding-top: 3rem!important
+ }
+
+ .pr-xl-5,.px-xl-5 {
+ padding-right: 3rem!important
+ }
+
+ .pb-xl-5,.py-xl-5 {
+ padding-bottom: 3rem!important
+ }
+
+ .pl-xl-5,.px-xl-5 {
+ padding-left: 3rem!important
+ }
+
+ .m-xl-n1 {
+ margin: -.25rem!important
+ }
+
+ .mt-xl-n1,.my-xl-n1 {
+ margin-top: -.25rem!important
+ }
+
+ .mr-xl-n1,.mx-xl-n1 {
+ margin-right: -.25rem!important
+ }
+
+ .mb-xl-n1,.my-xl-n1 {
+ margin-bottom: -.25rem!important
+ }
+
+ .ml-xl-n1,.mx-xl-n1 {
+ margin-left: -.25rem!important
+ }
+
+ .m-xl-n2 {
+ margin: -.5rem!important
+ }
+
+ .mt-xl-n2,.my-xl-n2 {
+ margin-top: -.5rem!important
+ }
+
+ .mr-xl-n2,.mx-xl-n2 {
+ margin-right: -.5rem!important
+ }
+
+ .mb-xl-n2,.my-xl-n2 {
+ margin-bottom: -.5rem!important
+ }
+
+ .ml-xl-n2,.mx-xl-n2 {
+ margin-left: -.5rem!important
+ }
+
+ .m-xl-n3 {
+ margin: -1rem!important
+ }
+
+ .mt-xl-n3,.my-xl-n3 {
+ margin-top: -1rem!important
+ }
+
+ .mr-xl-n3,.mx-xl-n3 {
+ margin-right: -1rem!important
+ }
+
+ .mb-xl-n3,.my-xl-n3 {
+ margin-bottom: -1rem!important
+ }
+
+ .ml-xl-n3,.mx-xl-n3 {
+ margin-left: -1rem!important
+ }
+
+ .m-xl-n4 {
+ margin: -1.5rem!important
+ }
+
+ .mt-xl-n4,.my-xl-n4 {
+ margin-top: -1.5rem!important
+ }
+
+ .mr-xl-n4,.mx-xl-n4 {
+ margin-right: -1.5rem!important
+ }
+
+ .mb-xl-n4,.my-xl-n4 {
+ margin-bottom: -1.5rem!important
+ }
+
+ .ml-xl-n4,.mx-xl-n4 {
+ margin-left: -1.5rem!important
+ }
+
+ .m-xl-n5 {
+ margin: -3rem!important
+ }
+
+ .mt-xl-n5,.my-xl-n5 {
+ margin-top: -3rem!important
+ }
+
+ .mr-xl-n5,.mx-xl-n5 {
+ margin-right: -3rem!important
+ }
+
+ .mb-xl-n5,.my-xl-n5 {
+ margin-bottom: -3rem!important
+ }
+
+ .ml-xl-n5,.mx-xl-n5 {
+ margin-left: -3rem!important
+ }
+
+ .m-xl-auto {
+ margin: auto!important
+ }
+
+ .mt-xl-auto,.my-xl-auto {
+ margin-top: auto!important
+ }
+
+ .mr-xl-auto,.mx-xl-auto {
+ margin-right: auto!important
+ }
+
+ .mb-xl-auto,.my-xl-auto {
+ margin-bottom: auto!important
+ }
+
+ .ml-xl-auto,.mx-xl-auto {
+ margin-left: auto!important
+ }
+}
+
+.stretched-link::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ pointer-events: auto;
+ content: "";
+ background-color: rgba(0,0,0,0)
+}
+
+.text-monospace {
+ font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important
+}
+
+.text-justify {
+ text-align: justify!important
+}
+
+.text-wrap {
+ white-space: normal!important
+}
+
+.text-nowrap {
+ white-space: nowrap!important
+}
+
+.text-truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+}
+
+.text-left {
+ text-align: left!important
+}
+
+.text-right {
+ text-align: right!important
+}
+
+.text-center {
+ text-align: center!important
+}
+
+@media (min-width: 576px) {
+ .text-sm-left {
+ text-align:left!important
+ }
+
+ .text-sm-right {
+ text-align: right!important
+ }
+
+ .text-sm-center {
+ text-align: center!important
+ }
+}
+
+@media (min-width: 768px) {
+ .text-md-left {
+ text-align:left!important
+ }
+
+ .text-md-right {
+ text-align: right!important
+ }
+
+ .text-md-center {
+ text-align: center!important
+ }
+}
+
+@media (min-width: 992px) {
+ .text-lg-left {
+ text-align:left!important
+ }
+
+ .text-lg-right {
+ text-align: right!important
+ }
+
+ .text-lg-center {
+ text-align: center!important
+ }
+}
+
+@media (min-width: 1200px) {
+ .text-xl-left {
+ text-align:left!important
+ }
+
+ .text-xl-right {
+ text-align: right!important
+ }
+
+ .text-xl-center {
+ text-align: center!important
+ }
+}
+
+.text-lowercase {
+ text-transform: lowercase!important
+}
+
+.dropdown .dropdown-menu .dropdown-header,.sidebar .sidebar-heading,.text-uppercase {
+ text-transform: uppercase!important
+}
+
+.text-capitalize {
+ text-transform: capitalize!important
+}
+
+.font-weight-light {
+ font-weight: 300!important
+}
+
+.font-weight-lighter {
+ font-weight: lighter!important
+}
+
+.font-weight-normal {
+ font-weight: 400!important
+}
+
+.font-weight-bold {
+ font-weight: 700!important
+}
+
+.font-weight-bolder {
+ font-weight: bolder!important
+}
+
+.font-italic {
+ font-style: italic!important
+}
+
+.text-white {
+ color: #fff!important
+}
+
+.text-primary {
+ color: #4e73df!important
+}
+
+a.text-primary:focus,a.text-primary:hover {
+ color: #224abe!important
+}
+
+.text-secondary {
+ color: #858796!important
+}
+
+a.text-secondary:focus,a.text-secondary:hover {
+ color: #60616f!important
+}
+
+.text-success {
+ color: #1cc88a!important
+}
+
+a.text-success:focus,a.text-success:hover {
+ color: #13855c!important
+}
+
+.text-info {
+ color: #36b9cc!important
+}
+
+a.text-info:focus,a.text-info:hover {
+ color: #258391!important
+}
+
+.text-warning {
+ color: #f6c23e!important
+}
+
+a.text-warning:focus,a.text-warning:hover {
+ color: #dda20a!important
+}
+
+.text-danger {
+ color: #e74a3b!important
+}
+
+a.text-danger:focus,a.text-danger:hover {
+ color: #be2617!important
+}
+
+.text-light {
+ color: #f8f9fc!important
+}
+
+a.text-light:focus,a.text-light:hover {
+ color: #c2cbe5!important
+}
+
+.text-dark {
+ color: #5a5c69!important
+}
+
+a.text-dark:focus,a.text-dark:hover {
+ color: #373840!important
+}
+
+.text-body {
+ color: #858796!important
+}
+
+.text-muted {
+ color: #858796!important
+}
+
+.text-black-50 {
+ color: rgba(0,0,0,.5)!important
+}
+
+.text-white-50 {
+ color: rgba(255,255,255,.5)!important
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0
+}
+
+.text-decoration-none {
+ text-decoration: none!important
+}
+
+.text-break {
+ word-break: break-word!important;
+ word-wrap: break-word!important
+}
+
+.text-reset {
+ color: inherit!important
+}
+
+.visible {
+ visibility: visible!important
+}
+
+.invisible {
+ visibility: hidden!important
+}
+
+@media print {
+ *,::after,::before {
+ text-shadow: none!important;
+ box-shadow: none!important
+ }
+
+ a:not(.btn) {
+ text-decoration: underline
+ }
+
+ abbr[title]::after {
+ content: " (" attr(title) ")"
+ }
+
+ pre {
+ white-space: pre-wrap!important
+ }
+
+ blockquote,pre {
+ border: 1px solid #b7b9cc;
+ page-break-inside: avoid
+ }
+
+ thead {
+ display: table-header-group
+ }
+
+ img,tr {
+ page-break-inside: avoid
+ }
+
+ h2,h3,p {
+ orphans: 3;
+ widows: 3
+ }
+
+ h2,h3 {
+ page-break-after: avoid
+ }
+
+ @page {
+ size: a3
+ }
+
+ body {
+ min-width: 992px!important
+ }
+
+ .container {
+ min-width: 992px!important
+ }
+
+ .navbar {
+ display: none
+ }
+
+ .badge {
+ border: 1px solid #000
+ }
+
+ .table {
+ border-collapse: collapse!important
+ }
+
+ .table td,.table th {
+ background-color: #fff!important
+ }
+
+ .table-bordered td,.table-bordered th {
+ border: 1px solid #dddfeb!important
+ }
+
+ .table-dark {
+ color: inherit
+ }
+
+ .table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th {
+ border-color: #e3e6f0
+ }
+
+ .table .thead-dark th {
+ color: inherit;
+ border-color: #e3e6f0
+ }
+}
+
+html {
+ position: relative;
+ min-height: 100%
+}
+
+body {
+ height: 100%
+}
+
+a:focus {
+ outline: 0
+}
+
+#wrapper {
+ display: flex
+}
+
+#wrapper #content-wrapper {
+ background-color: #f8f9fc;
+ width: 100%;
+ overflow-x: hidden
+}
+
+#wrapper #content-wrapper #content {
+ flex: 1 0 auto
+}
+
+.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem
+}
+
+.scroll-to-top {
+ position: fixed;
+ right: 1rem;
+ bottom: 1rem;
+ display: none;
+ width: 2.75rem;
+ height: 2.75rem;
+ text-align: center;
+ color: #fff;
+ background: rgba(90,92,105,.5);
+ line-height: 46px
+}
+
+.scroll-to-top:focus,.scroll-to-top:hover {
+ color: #fff
+}
+
+.scroll-to-top:hover {
+ background: #5a5c69
+}
+
+.scroll-to-top i {
+ font-weight: 800
+}
+
+@-webkit-keyframes growIn {
+ 0% {
+ transform: scale(.9);
+ opacity: 0
+ }
+
+ 100% {
+ transform: scale(1);
+ opacity: 1
+ }
+}
+
+@keyframes growIn {
+ 0% {
+ transform: scale(.9);
+ opacity: 0
+ }
+
+ 100% {
+ transform: scale(1);
+ opacity: 1
+ }
+}
+
+.animated--grow-in,.sidebar .nav-item .collapse {
+ -webkit-animation-name: growIn;
+ animation-name: growIn;
+ -webkit-animation-duration: .2s;
+ animation-duration: .2s;
+ -webkit-animation-timing-function: transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1);
+ animation-timing-function: transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1)
+}
+
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0
+ }
+
+ 100% {
+ opacity: 1
+ }
+}
+
+@keyframes fadeIn {
+ 0% {
+ opacity: 0
+ }
+
+ 100% {
+ opacity: 1
+ }
+}
+
+.animated--fade-in {
+ -webkit-animation-name: fadeIn;
+ animation-name: fadeIn;
+ -webkit-animation-duration: .2s;
+ animation-duration: .2s;
+ -webkit-animation-timing-function: opacity cubic-bezier(0,1,.4,1);
+ animation-timing-function: opacity cubic-bezier(0,1,.4,1)
+}
+
+.bg-gradient-primary {
+ background-color: #4e73df;
+ background-image: linear-gradient(180deg,#4e73df 10%,#224abe 100%);
+ background-size: cover
+}
+
+.bg-gradient-secondary {
+ background-color: #858796;
+ background-image: linear-gradient(180deg,#858796 10%,#60616f 100%);
+ background-size: cover
+}
+
+.bg-gradient-success {
+ background-color: #1cc88a;
+ background-image: linear-gradient(180deg,#1cc88a 10%,#13855c 100%);
+ background-size: cover
+}
+
+.bg-gradient-info {
+ background-color: #36b9cc;
+ background-image: linear-gradient(180deg,#36b9cc 10%,#258391 100%);
+ background-size: cover
+}
+
+.bg-gradient-warning {
+ background-color: #f6c23e;
+ background-image: linear-gradient(180deg,#f6c23e 10%,#dda20a 100%);
+ background-size: cover
+}
+
+.bg-gradient-danger {
+ background-color: #e74a3b;
+ background-image: linear-gradient(180deg,#e74a3b 10%,#be2617 100%);
+ background-size: cover
+}
+
+.bg-gradient-light {
+ background-color: #f8f9fc;
+ background-image: linear-gradient(180deg,#f8f9fc 10%,#c2cbe5 100%);
+ background-size: cover
+}
+
+.bg-gradient-dark {
+ background-color: #5a5c69;
+ background-image: linear-gradient(180deg,#5a5c69 10%,#373840 100%);
+ background-size: cover
+}
+
+.bg-gray-100 {
+ background-color: #f8f9fc!important
+}
+
+.bg-gray-200 {
+ background-color: #eaecf4!important
+}
+
+.bg-gray-300 {
+ background-color: #dddfeb!important
+}
+
+.bg-gray-400 {
+ background-color: #d1d3e2!important
+}
+
+.bg-gray-500 {
+ background-color: #b7b9cc!important
+}
+
+.bg-gray-600 {
+ background-color: #858796!important
+}
+
+.bg-gray-700 {
+ background-color: #6e707e!important
+}
+
+.bg-gray-800 {
+ background-color: #5a5c69!important
+}
+
+.bg-gray-900 {
+ background-color: #3a3b45!important
+}
+
+.o-hidden {
+ overflow: hidden!important
+}
+
+.text-xs {
+ font-size: .7rem
+}
+
+.text-lg {
+ font-size: 1.2rem
+}
+
+.text-gray-100 {
+ color: #f8f9fc!important
+}
+
+.text-gray-200 {
+ color: #eaecf4!important
+}
+
+.text-gray-300 {
+ color: #dddfeb!important
+}
+
+.text-gray-400 {
+ color: #d1d3e2!important
+}
+
+.text-gray-500 {
+ color: #b7b9cc!important
+}
+
+.text-gray-600 {
+ color: #858796!important
+}
+
+.text-gray-700 {
+ color: #6e707e!important
+}
+
+.text-gray-800 {
+ color: #5a5c69!important
+}
+
+.text-gray-900 {
+ color: #3a3b45!important
+}
+
+.icon-circle {
+ height: 2.5rem;
+ width: 2.5rem;
+ border-radius: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center
+}
+
+.border-left-primary {
+ border-left: .25rem solid #4e73df!important
+}
+
+.border-bottom-primary {
+ border-bottom: .25rem solid #4e73df!important
+}
+
+.border-left-secondary {
+ border-left: .25rem solid #858796!important
+}
+
+.border-bottom-secondary {
+ border-bottom: .25rem solid #858796!important
+}
+
+.border-left-success {
+ border-left: .25rem solid #1cc88a!important
+}
+
+.border-bottom-success {
+ border-bottom: .25rem solid #1cc88a!important
+}
+
+.border-left-info {
+ border-left: .25rem solid #36b9cc!important
+}
+
+.border-bottom-info {
+ border-bottom: .25rem solid #36b9cc!important
+}
+
+.border-left-warning {
+ border-left: .25rem solid #f6c23e!important
+}
+
+.border-bottom-warning {
+ border-bottom: .25rem solid #f6c23e!important
+}
+
+.border-left-danger {
+ border-left: .25rem solid #e74a3b!important
+}
+
+.border-bottom-danger {
+ border-bottom: .25rem solid #e74a3b!important
+}
+
+.border-left-light {
+ border-left: .25rem solid #f8f9fc!important
+}
+
+.border-bottom-light {
+ border-bottom: .25rem solid #f8f9fc!important
+}
+
+.border-left-dark {
+ border-left: .25rem solid #5a5c69!important
+}
+
+.border-bottom-dark {
+ border-bottom: .25rem solid #5a5c69!important
+}
+
+.progress-sm {
+ height: .5rem
+}
+
+.rotate-15 {
+ transform: rotate(15deg)
+}
+
+.rotate-n-15 {
+ transform: rotate(-15deg)
+}
+
+.dropdown .dropdown-menu {
+ font-size: .85rem
+}
+
+.dropdown .dropdown-menu .dropdown-header {
+ font-weight: 800;
+ font-size: .65rem;
+ color: #b7b9cc
+}
+
+.dropdown.no-arrow .dropdown-toggle::after {
+ display: none
+}
+
+.sidebar .nav-item.dropdown .dropdown-toggle::after,.topbar .nav-item.dropdown .dropdown-toggle::after {
+ width: 1rem;
+ text-align: center;
+ float: right;
+ vertical-align: 0;
+ border: 0;
+ font-weight: 900;
+ content: '\f105';
+ font-family: 'Font Awesome 5 Free'
+}
+
+.sidebar .nav-item.dropdown.show .dropdown-toggle::after,.topbar .nav-item.dropdown.show .dropdown-toggle::after {
+ content: '\f107'
+}
+
+.sidebar .nav-item .nav-link,.topbar .nav-item .nav-link {
+ position: relative
+}
+
+.sidebar .nav-item .nav-link .badge-counter,.topbar .nav-item .nav-link .badge-counter {
+ position: absolute;
+ transform: scale(.7);
+ transform-origin: top right;
+ right: .25rem;
+ margin-top: -.25rem
+}
+
+.sidebar .nav-item .nav-link .img-profile,.topbar .nav-item .nav-link .img-profile {
+ height: 2rem;
+ width: 2rem
+}
+
+.topbar {
+ height: 4.375rem
+}
+
+.topbar #sidebarToggleTop {
+ height: 2.5rem;
+ width: 2.5rem
+}
+
+.topbar #sidebarToggleTop:hover {
+ background-color: #eaecf4
+}
+
+.topbar #sidebarToggleTop:active {
+ background-color: #dddfeb
+}
+
+.topbar .navbar-search {
+ width: 25rem
+}
+
+.topbar .navbar-search input {
+ font-size: .85rem;
+ height: auto
+}
+
+.topbar .topbar-divider {
+ width: 0;
+ border-right: 1px solid #e3e6f0;
+ height: calc(4.375rem - 2rem);
+ margin: auto 1rem
+}
+
+.topbar .nav-item .nav-link {
+ height: 4.375rem;
+ display: flex;
+ align-items: center;
+ padding: 0 .75rem
+}
+
+.topbar .nav-item .nav-link:focus {
+ outline: 0
+}
+
+.topbar .nav-item:focus {
+ outline: 0
+}
+
+.topbar .dropdown {
+ position: static
+}
+
+.topbar .dropdown .dropdown-menu {
+ width: calc(100% - 1.5rem);
+ right: .75rem
+}
+
+.topbar .dropdown-list {
+ padding: 0;
+ border: none;
+ overflow: hidden
+}
+
+.topbar .dropdown-list .dropdown-header {
+ background-color: #4e73df;
+ border: 1px solid #4e73df;
+ padding-top: .75rem;
+ padding-bottom: .75rem;
+ color: #fff
+}
+
+.topbar .dropdown-list .dropdown-item {
+ white-space: normal;
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+ border-left: 1px solid #e3e6f0;
+ border-right: 1px solid #e3e6f0;
+ border-bottom: 1px solid #e3e6f0;
+ line-height: 1.3rem
+}
+
+.topbar .dropdown-list .dropdown-item .dropdown-list-image {
+ position: relative;
+ height: 2.5rem;
+ width: 2.5rem
+}
+
+.topbar .dropdown-list .dropdown-item .dropdown-list-image img {
+ height: 2.5rem;
+ width: 2.5rem
+}
+
+.topbar .dropdown-list .dropdown-item .dropdown-list-image .status-indicator {
+ background-color: #eaecf4;
+ height: .75rem;
+ width: .75rem;
+ border-radius: 100%;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ border: .125rem solid #fff
+}
+
+.topbar .dropdown-list .dropdown-item .text-truncate {
+ max-width: 10rem
+}
+
+.topbar .dropdown-list .dropdown-item:active {
+ background-color: #eaecf4;
+ color: #3a3b45
+}
+
+@media (min-width: 576px) {
+ .topbar .dropdown {
+ position:relative
+ }
+
+ .topbar .dropdown .dropdown-menu {
+ width: auto;
+ right: 0
+ }
+
+ .topbar .dropdown-list {
+ width: 20rem!important
+ }
+
+ .topbar .dropdown-list .dropdown-item .text-truncate {
+ max-width: 13.375rem
+ }
+}
+
+.topbar.navbar-dark .navbar-nav .nav-item .nav-link {
+ color: rgba(255,255,255,.8)
+}
+
+.topbar.navbar-dark .navbar-nav .nav-item .nav-link:hover {
+ color: #fff
+}
+
+.topbar.navbar-dark .navbar-nav .nav-item .nav-link:active {
+ color: #fff
+}
+
+.topbar.navbar-light .navbar-nav .nav-item .nav-link {
+ color: #d1d3e2
+}
+
+.topbar.navbar-light .navbar-nav .nav-item .nav-link:hover {
+ color: #b7b9cc
+}
+
+.topbar.navbar-light .navbar-nav .nav-item .nav-link:active {
+ color: #858796
+}
+
+.sidebar {
+ width: 6.5rem;
+ min-height: 100vh
+}
+
+.sidebar .nav-item {
+ position: relative
+}
+
+.sidebar .nav-item:last-child {
+ margin-bottom: 1rem
+}
+
+.sidebar .nav-item .nav-link {
+ text-align: center;
+ padding: .75rem 1rem;
+ width: 6.5rem
+}
+
+.sidebar .nav-item .nav-link span {
+ font-size: .65rem;
+ display: block
+}
+
+.sidebar .nav-item.active .nav-link {
+ font-weight: 700
+}
+
+.sidebar .nav-item .collapse {
+ position: absolute;
+ left: calc(6.5rem + 1.5rem / 2);
+ z-index: 1;
+ top: 2px
+}
+
+.sidebar .nav-item .collapse .collapse-inner {
+ border-radius: .35rem;
+ box-shadow: 0 .15rem 1.75rem 0 rgba(58,59,69,.15)
+}
+
+.sidebar .nav-item .collapsing {
+ display: none;
+ transition: none
+}
+
+.sidebar .nav-item .collapse .collapse-inner,.sidebar .nav-item .collapsing .collapse-inner {
+ padding: .5rem 0;
+ min-width: 10rem;
+ font-size: .85rem;
+ margin: 0 0 1rem 0
+}
+
+.sidebar .nav-item .collapse .collapse-inner .collapse-header,.sidebar .nav-item .collapsing .collapse-inner .collapse-header {
+ margin: 0;
+ white-space: nowrap;
+ padding: .5rem 1.5rem;
+ text-transform: uppercase;
+ font-weight: 800;
+ font-size: .65rem;
+ color: #b7b9cc
+}
+
+.sidebar .nav-item .collapse .collapse-inner .collapse-item,.sidebar .nav-item .collapsing .collapse-inner .collapse-item {
+ padding: .5rem 1rem;
+ margin: 0 .5rem;
+ display: block;
+ color: #3a3b45;
+ text-decoration: none;
+ border-radius: .35rem;
+ white-space: nowrap
+}
+
+.sidebar .nav-item .collapse .collapse-inner .collapse-item:hover,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover {
+ background-color: #eaecf4
+}
+
+.sidebar .nav-item .collapse .collapse-inner .collapse-item:active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:active {
+ background-color: #dddfeb
+}
+
+.sidebar .nav-item .collapse .collapse-inner .collapse-item.active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item.active {
+ color: #4e73df;
+ font-weight: 700
+}
+
+.sidebar #sidebarToggle {
+ width: 2.5rem;
+ height: 2.5rem;
+ text-align: center;
+ margin-bottom: 1rem;
+ cursor: pointer
+}
+
+.sidebar #sidebarToggle::after {
+ font-weight: 900;
+ content: '\f104';
+ font-family: 'Font Awesome 5 Free';
+ margin-right: .1rem
+}
+
+.sidebar #sidebarToggle:hover {
+ text-decoration: none
+}
+
+.sidebar #sidebarToggle:focus {
+ outline: 0
+}
+
+.sidebar.toggled {
+ width: 0!important;
+ overflow: hidden
+}
+
+.sidebar.toggled #sidebarToggle::after {
+ content: '\f105';
+ font-family: 'Font Awesome 5 Free';
+ margin-left: .25rem
+}
+
+.sidebar.toggled .sidebar-card {
+ display: none
+}
+
+.sidebar .sidebar-brand {
+ height: 4.375rem;
+ text-decoration: none;
+ font-size: 1rem;
+ font-weight: 800;
+ padding: 1.5rem 1rem;
+ text-align: center;
+ text-transform: uppercase;
+ letter-spacing: .05rem;
+ z-index: 1
+}
+
+.sidebar .sidebar-brand .sidebar-brand-icon i {
+ font-size: 2rem
+}
+
+.sidebar .sidebar-brand .sidebar-brand-text {
+ display: none
+}
+
+.sidebar hr.sidebar-divider {
+ margin: 0 1rem 1rem
+}
+
+.sidebar .sidebar-heading {
+ text-align: center;
+ padding: 0 1rem;
+ font-weight: 800;
+ font-size: .65rem
+}
+
+.sidebar .sidebar-card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ font-size: .875rem;
+ border-radius: .35rem;
+ color: rgba(255,255,255,.8);
+ margin-left: 1rem;
+ margin-right: 1rem;
+ margin-bottom: 1rem;
+ padding: 1rem;
+ background-color: rgba(0,0,0,.1)
+}
+
+.sidebar .sidebar-card .sidebar-card-illustration {
+ height: 3rem;
+ display: block
+}
+
+.sidebar .sidebar-card .sidebar-card-title {
+ font-weight: 700
+}
+
+.sidebar .sidebar-card p {
+ font-size: .75rem;
+ color: rgba(255,255,255,.5)
+}
+
+@media (min-width: 768px) {
+ .sidebar {
+ width:14rem!important
+ }
+
+ .sidebar .nav-item .collapse {
+ position: relative;
+ left: 0;
+ z-index: 1;
+ top: 0;
+ -webkit-animation: none;
+ animation: none
+ }
+
+ .sidebar .nav-item .collapse .collapse-inner {
+ border-radius: 0;
+ box-shadow: none
+ }
+
+ .sidebar .nav-item .collapsing {
+ display: block;
+ transition: height .15s ease
+ }
+
+ .sidebar .nav-item .collapse,.sidebar .nav-item .collapsing {
+ margin: 0 1rem
+ }
+
+ .sidebar .nav-item .nav-link {
+ display: block;
+ width: 100%;
+ text-align: left;
+ padding: 1rem;
+ width: 14rem
+ }
+
+ .sidebar .nav-item .nav-link i {
+ font-size: .85rem;
+ margin-right: .25rem
+ }
+
+ .sidebar .nav-item .nav-link span {
+ font-size: .85rem;
+ display: inline
+ }
+
+ .sidebar .nav-item .nav-link[data-toggle=collapse]::after {
+ width: 1rem;
+ text-align: center;
+ float: right;
+ vertical-align: 0;
+ border: 0;
+ font-weight: 900;
+ content: '\f107';
+ font-family: 'Font Awesome 5 Free'
+ }
+
+ .sidebar .nav-item .nav-link[data-toggle=collapse].collapsed::after {
+ content: '\f105'
+ }
+
+ .sidebar .sidebar-brand .sidebar-brand-icon i {
+ font-size: 2rem
+ }
+
+ .sidebar .sidebar-brand .sidebar-brand-text {
+ display: inline
+ }
+
+ .sidebar .sidebar-heading {
+ text-align: left
+ }
+
+ .sidebar.toggled {
+ overflow: visible;
+ width: 6.5rem!important
+ }
+
+ .sidebar.toggled .nav-item .collapse {
+ position: absolute;
+ left: calc(6.5rem + 1.5rem / 2);
+ z-index: 1;
+ top: 2px;
+ -webkit-animation-name: growIn;
+ animation-name: growIn;
+ -webkit-animation-duration: .2s;
+ animation-duration: .2s;
+ -webkit-animation-timing-function: transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1);
+ animation-timing-function: transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1)
+ }
+
+ .sidebar.toggled .nav-item .collapse .collapse-inner {
+ box-shadow: 0 .15rem 1.75rem 0 rgba(58,59,69,.15);
+ border-radius: .35rem
+ }
+
+ .sidebar.toggled .nav-item .collapsing {
+ display: none;
+ transition: none
+ }
+
+ .sidebar.toggled .nav-item .collapse,.sidebar.toggled .nav-item .collapsing {
+ margin: 0
+ }
+
+ .sidebar.toggled .nav-item:last-child {
+ margin-bottom: 1rem
+ }
+
+ .sidebar.toggled .nav-item .nav-link {
+ text-align: center;
+ padding: .75rem 1rem;
+ width: 6.5rem
+ }
+
+ .sidebar.toggled .nav-item .nav-link span {
+ font-size: .65rem;
+ display: block
+ }
+
+ .sidebar.toggled .nav-item .nav-link i {
+ margin-right: 0
+ }
+
+ .sidebar.toggled .nav-item .nav-link[data-toggle=collapse]::after {
+ display: none
+ }
+
+ .sidebar.toggled .sidebar-brand .sidebar-brand-icon i {
+ font-size: 2rem
+ }
+
+ .sidebar.toggled .sidebar-brand .sidebar-brand-text {
+ display: none
+ }
+
+ .sidebar.toggled .sidebar-heading {
+ text-align: center
+ }
+}
+
+.sidebar-light .sidebar-brand {
+ color: #6e707e
+}
+
+.sidebar-light hr.sidebar-divider {
+ border-top: 1px solid #eaecf4
+}
+
+.sidebar-light .sidebar-heading {
+ color: #b7b9cc
+}
+
+.sidebar-light .nav-item .nav-link {
+ color: #858796
+}
+
+.sidebar-light .nav-item .nav-link i {
+ color: #d1d3e2
+}
+
+.sidebar-light .nav-item .nav-link:active,.sidebar-light .nav-item .nav-link:focus,.sidebar-light .nav-item .nav-link:hover {
+ color: #6e707e
+}
+
+.sidebar-light .nav-item .nav-link:active i,.sidebar-light .nav-item .nav-link:focus i,.sidebar-light .nav-item .nav-link:hover i {
+ color: #6e707e
+}
+
+.sidebar-light .nav-item .nav-link[data-toggle=collapse]::after {
+ color: #b7b9cc
+}
+
+.sidebar-light .nav-item.active .nav-link {
+ color: #6e707e
+}
+
+.sidebar-light .nav-item.active .nav-link i {
+ color: #6e707e
+}
+
+.sidebar-light #sidebarToggle {
+ background-color: #eaecf4
+}
+
+.sidebar-light #sidebarToggle::after {
+ color: #b7b9cc
+}
+
+.sidebar-light #sidebarToggle:hover {
+ background-color: #dddfeb
+}
+
+.sidebar-dark .sidebar-brand {
+ color: #fff
+}
+
+.sidebar-dark hr.sidebar-divider {
+ border-top: 1px solid rgba(255,255,255,.15)
+}
+
+.sidebar-dark .sidebar-heading {
+ color: rgba(255,255,255,.4)
+}
+
+.sidebar-dark .nav-item .nav-link {
+ color: rgba(255,255,255,.8)
+}
+
+.sidebar-dark .nav-item .nav-link i {
+ color: rgba(255,255,255,.3)
+}
+
+.sidebar-dark .nav-item .nav-link:active,.sidebar-dark .nav-item .nav-link:focus,.sidebar-dark .nav-item .nav-link:hover {
+ color: #fff
+}
+
+.sidebar-dark .nav-item .nav-link:active i,.sidebar-dark .nav-item .nav-link:focus i,.sidebar-dark .nav-item .nav-link:hover i {
+ color: #fff
+}
+
+.sidebar-dark .nav-item .nav-link[data-toggle=collapse]::after {
+ color: rgba(255,255,255,.5)
+}
+
+.sidebar-dark .nav-item.active .nav-link {
+ color: #fff
+}
+
+.sidebar-dark .nav-item.active .nav-link i {
+ color: #fff
+}
+
+.sidebar-dark #sidebarToggle {
+ background-color: rgba(255,255,255,.2)
+}
+
+.sidebar-dark #sidebarToggle::after {
+ color: rgba(255,255,255,.5)
+}
+
+.sidebar-dark #sidebarToggle:hover {
+ background-color: rgba(255,255,255,.25)
+}
+
+.sidebar-dark.toggled #sidebarToggle::after {
+ color: rgba(255,255,255,.5)
+}
+
+.btn-circle {
+ border-radius: 100%;
+ height: 2.5rem;
+ width: 2.5rem;
+ font-size: 1rem;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center
+}
+
+.btn-circle.btn-sm,.btn-group-sm>.btn-circle.btn {
+ height: 1.8rem;
+ width: 1.8rem;
+ font-size: .75rem
+}
+
+.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn {
+ height: 3.5rem;
+ width: 3.5rem;
+ font-size: 1.35rem
+}
+
+.btn-icon-split {
+ padding: 0;
+ overflow: hidden;
+ display: inline-flex;
+ align-items: stretch;
+ justify-content: center
+}
+
+.btn-icon-split .icon {
+ background: rgba(0,0,0,.15);
+ display: inline-block;
+ padding: .375rem .75rem
+}
+
+.btn-icon-split .text {
+ display: inline-block;
+ padding: .375rem .75rem
+}
+
+.btn-group-sm>.btn-icon-split.btn .icon,.btn-icon-split.btn-sm .icon {
+ padding: .25rem .5rem
+}
+
+.btn-group-sm>.btn-icon-split.btn .text,.btn-icon-split.btn-sm .text {
+ padding: .25rem .5rem
+}
+
+.btn-group-lg>.btn-icon-split.btn .icon,.btn-icon-split.btn-lg .icon {
+ padding: .5rem 1rem
+}
+
+.btn-group-lg>.btn-icon-split.btn .text,.btn-icon-split.btn-lg .text {
+ padding: .5rem 1rem
+}
+
+.card .card-header .dropdown {
+ line-height: 1
+}
+
+.card .card-header .dropdown .dropdown-menu {
+ line-height: 1.5
+}
+
+.card .card-header[data-toggle=collapse] {
+ text-decoration: none;
+ position: relative;
+ padding: .75rem 3.25rem .75rem 1.25rem
+}
+
+.card .card-header[data-toggle=collapse]::after {
+ position: absolute;
+ right: 0;
+ top: 0;
+ padding-right: 1.725rem;
+ line-height: 51px;
+ font-weight: 900;
+ content: '\f107';
+ font-family: 'Font Awesome 5 Free';
+ color: #d1d3e2
+}
+
+.card .card-header[data-toggle=collapse].collapsed {
+ border-radius: .35rem
+}
+
+.card .card-header[data-toggle=collapse].collapsed::after {
+ content: '\f105'
+}
+
+.chart-area {
+ position: relative;
+ height: 10rem;
+ width: 100%
+}
+
+@media (min-width: 768px) {
+ .chart-area {
+ height:20rem
+ }
+}
+
+.chart-bar {
+ position: relative;
+ height: 10rem;
+ width: 100%
+}
+
+@media (min-width: 768px) {
+ .chart-bar {
+ height:20rem
+ }
+}
+
+.chart-pie {
+ position: relative;
+ height: 15rem;
+ width: 100%
+}
+
+@media (min-width: 768px) {
+ .chart-pie {
+ height:calc(20rem - 43px)!important
+ }
+}
+
+.bg-login-image {
+ background: url(https://source.unsplash.com/K4mSJ7kc0As/600x800);
+ background-position: center;
+ background-size: cover
+}
+
+.bg-register-image {
+ background: url(https://source.unsplash.com/Mv9hjnEUHR4/600x800);
+ background-position: center;
+ background-size: cover
+}
+
+.bg-password-image {
+ background: url(https://source.unsplash.com/oWTW-jNGl9I/600x800);
+ background-position: center;
+ background-size: cover
+}
+
+form.user .custom-checkbox.small label {
+ line-height: 1.5rem
+}
+
+form.user .form-control-user {
+ font-size: .9rem;
+ border-radius: 10rem;
+ padding: 1.5rem 1rem
+}
+
+form.user .btn-user {
+ font-size: .8rem;
+ border-radius: 10rem;
+ padding: .75rem 1rem
+}
+
+.btn-google {
+ color: #fff;
+ background-color: #ea4335;
+ border-color: #fff
+}
+
+.btn-google:hover {
+ color: #fff;
+ background-color: #e12717;
+ border-color: #e6e6e6
+}
+
+.btn-google.focus,.btn-google:focus {
+ color: #fff;
+ background-color: #e12717;
+ border-color: #e6e6e6;
+ box-shadow: 0 0 0 .2rem rgba(255,255,255,.5)
+}
+
+.btn-google.disabled,.btn-google:disabled {
+ color: #fff;
+ background-color: #ea4335;
+ border-color: #fff
+}
+
+.btn-google:not(:disabled):not(.disabled).active,.btn-google:not(:disabled):not(.disabled):active,.show>.btn-google.dropdown-toggle {
+ color: #fff;
+ background-color: #d62516;
+ border-color: #dfdfdf
+}
+
+.btn-google:not(:disabled):not(.disabled).active:focus,.btn-google:not(:disabled):not(.disabled):active:focus,.show>.btn-google.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(255,255,255,.5)
+}
+
+.btn-facebook {
+ color: #fff;
+ background-color: #3b5998;
+ border-color: #fff
+}
+
+.btn-facebook:hover {
+ color: #fff;
+ background-color: #30497c;
+ border-color: #e6e6e6
+}
+
+.btn-facebook.focus,.btn-facebook:focus {
+ color: #fff;
+ background-color: #30497c;
+ border-color: #e6e6e6;
+ box-shadow: 0 0 0 .2rem rgba(255,255,255,.5)
+}
+
+.btn-facebook.disabled,.btn-facebook:disabled {
+ color: #fff;
+ background-color: #3b5998;
+ border-color: #fff
+}
+
+.btn-facebook:not(:disabled):not(.disabled).active,.btn-facebook:not(:disabled):not(.disabled):active,.show>.btn-facebook.dropdown-toggle {
+ color: #fff;
+ background-color: #2d4373;
+ border-color: #dfdfdf
+}
+
+.btn-facebook:not(:disabled):not(.disabled).active:focus,.btn-facebook:not(:disabled):not(.disabled):active:focus,.show>.btn-facebook.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(255,255,255,.5)
+}
+
+.error {
+ color: #5a5c69;
+ font-size: 7rem;
+ position: relative;
+ line-height: 1;
+ width: 12.5rem
+}
+
+@-webkit-keyframes noise-anim {
+ 0% {
+ clip: rect(49px,9999px,40px,0)
+ }
+
+ 5% {
+ clip: rect(75px,9999px,72px,0)
+ }
+
+ 10% {
+ clip: rect(97px,9999px,93px,0)
+ }
+
+ 15% {
+ clip: rect(15px,9999px,9px,0)
+ }
+
+ 20% {
+ clip: rect(14px,9999px,92px,0)
+ }
+
+ 25% {
+ clip: rect(18px,9999px,94px,0)
+ }
+
+ 30% {
+ clip: rect(17px,9999px,20px,0)
+ }
+
+ 35% {
+ clip: rect(71px,9999px,59px,0)
+ }
+
+ 40% {
+ clip: rect(42px,9999px,84px,0)
+ }
+
+ 45% {
+ clip: rect(56px,9999px,25px,0)
+ }
+
+ 50% {
+ clip: rect(46px,9999px,14px,0)
+ }
+
+ 55% {
+ clip: rect(47px,9999px,1px,0)
+ }
+
+ 60% {
+ clip: rect(64px,9999px,58px,0)
+ }
+
+ 65% {
+ clip: rect(89px,9999px,92px,0)
+ }
+
+ 70% {
+ clip: rect(56px,9999px,39px,0)
+ }
+
+ 75% {
+ clip: rect(80px,9999px,71px,0)
+ }
+
+ 80% {
+ clip: rect(8px,9999px,13px,0)
+ }
+
+ 85% {
+ clip: rect(66px,9999px,68px,0)
+ }
+
+ 90% {
+ clip: rect(68px,9999px,4px,0)
+ }
+
+ 95% {
+ clip: rect(56px,9999px,14px,0)
+ }
+
+ 100% {
+ clip: rect(28px,9999px,53px,0)
+ }
+}
+
+@keyframes noise-anim {
+ 0% {
+ clip: rect(49px,9999px,40px,0)
+ }
+
+ 5% {
+ clip: rect(75px,9999px,72px,0)
+ }
+
+ 10% {
+ clip: rect(97px,9999px,93px,0)
+ }
+
+ 15% {
+ clip: rect(15px,9999px,9px,0)
+ }
+
+ 20% {
+ clip: rect(14px,9999px,92px,0)
+ }
+
+ 25% {
+ clip: rect(18px,9999px,94px,0)
+ }
+
+ 30% {
+ clip: rect(17px,9999px,20px,0)
+ }
+
+ 35% {
+ clip: rect(71px,9999px,59px,0)
+ }
+
+ 40% {
+ clip: rect(42px,9999px,84px,0)
+ }
+
+ 45% {
+ clip: rect(56px,9999px,25px,0)
+ }
+
+ 50% {
+ clip: rect(46px,9999px,14px,0)
+ }
+
+ 55% {
+ clip: rect(47px,9999px,1px,0)
+ }
+
+ 60% {
+ clip: rect(64px,9999px,58px,0)
+ }
+
+ 65% {
+ clip: rect(89px,9999px,92px,0)
+ }
+
+ 70% {
+ clip: rect(56px,9999px,39px,0)
+ }
+
+ 75% {
+ clip: rect(80px,9999px,71px,0)
+ }
+
+ 80% {
+ clip: rect(8px,9999px,13px,0)
+ }
+
+ 85% {
+ clip: rect(66px,9999px,68px,0)
+ }
+
+ 90% {
+ clip: rect(68px,9999px,4px,0)
+ }
+
+ 95% {
+ clip: rect(56px,9999px,14px,0)
+ }
+
+ 100% {
+ clip: rect(28px,9999px,53px,0)
+ }
+}
+
+.error:after {
+ content: attr(data-text);
+ position: absolute;
+ left: 2px;
+ text-shadow: -1px 0 #e74a3b;
+ top: 0;
+ color: #5a5c69;
+ background: #f8f9fc;
+ overflow: hidden;
+ clip: rect(0,900px,0,0);
+ animation: noise-anim 2s infinite linear alternate-reverse
+}
+
+@-webkit-keyframes noise-anim-2 {
+ 0% {
+ clip: rect(16px,9999px,10px,0)
+ }
+
+ 5% {
+ clip: rect(22px,9999px,29px,0)
+ }
+
+ 10% {
+ clip: rect(6px,9999px,68px,0)
+ }
+
+ 15% {
+ clip: rect(85px,9999px,95px,0)
+ }
+
+ 20% {
+ clip: rect(65px,9999px,91px,0)
+ }
+
+ 25% {
+ clip: rect(93px,9999px,68px,0)
+ }
+
+ 30% {
+ clip: rect(10px,9999px,27px,0)
+ }
+
+ 35% {
+ clip: rect(37px,9999px,25px,0)
+ }
+
+ 40% {
+ clip: rect(12px,9999px,23px,0)
+ }
+
+ 45% {
+ clip: rect(40px,9999px,18px,0)
+ }
+
+ 50% {
+ clip: rect(19px,9999px,71px,0)
+ }
+
+ 55% {
+ clip: rect(2px,9999px,35px,0)
+ }
+
+ 60% {
+ clip: rect(16px,9999px,69px,0)
+ }
+
+ 65% {
+ clip: rect(8px,9999px,65px,0)
+ }
+
+ 70% {
+ clip: rect(30px,9999px,57px,0)
+ }
+
+ 75% {
+ clip: rect(14px,9999px,4px,0)
+ }
+
+ 80% {
+ clip: rect(39px,9999px,30px,0)
+ }
+
+ 85% {
+ clip: rect(22px,9999px,35px,0)
+ }
+
+ 90% {
+ clip: rect(58px,9999px,71px,0)
+ }
+
+ 95% {
+ clip: rect(34px,9999px,90px,0)
+ }
+
+ 100% {
+ clip: rect(67px,9999px,68px,0)
+ }
+}
+
+@keyframes noise-anim-2 {
+ 0% {
+ clip: rect(16px,9999px,10px,0)
+ }
+
+ 5% {
+ clip: rect(22px,9999px,29px,0)
+ }
+
+ 10% {
+ clip: rect(6px,9999px,68px,0)
+ }
+
+ 15% {
+ clip: rect(85px,9999px,95px,0)
+ }
+
+ 20% {
+ clip: rect(65px,9999px,91px,0)
+ }
+
+ 25% {
+ clip: rect(93px,9999px,68px,0)
+ }
+
+ 30% {
+ clip: rect(10px,9999px,27px,0)
+ }
+
+ 35% {
+ clip: rect(37px,9999px,25px,0)
+ }
+
+ 40% {
+ clip: rect(12px,9999px,23px,0)
+ }
+
+ 45% {
+ clip: rect(40px,9999px,18px,0)
+ }
+
+ 50% {
+ clip: rect(19px,9999px,71px,0)
+ }
+
+ 55% {
+ clip: rect(2px,9999px,35px,0)
+ }
+
+ 60% {
+ clip: rect(16px,9999px,69px,0)
+ }
+
+ 65% {
+ clip: rect(8px,9999px,65px,0)
+ }
+
+ 70% {
+ clip: rect(30px,9999px,57px,0)
+ }
+
+ 75% {
+ clip: rect(14px,9999px,4px,0)
+ }
+
+ 80% {
+ clip: rect(39px,9999px,30px,0)
+ }
+
+ 85% {
+ clip: rect(22px,9999px,35px,0)
+ }
+
+ 90% {
+ clip: rect(58px,9999px,71px,0)
+ }
+
+ 95% {
+ clip: rect(34px,9999px,90px,0)
+ }
+
+ 100% {
+ clip: rect(67px,9999px,68px,0)
+ }
+}
+
+.error:before {
+ content: attr(data-text);
+ position: absolute;
+ left: -2px;
+ text-shadow: 1px 0 #4e73df;
+ top: 0;
+ color: #5a5c69;
+ background: #f8f9fc;
+ overflow: hidden;
+ clip: rect(0,900px,0,0);
+ animation: noise-anim-2 3s infinite linear alternate-reverse
+}
+
+footer.sticky-footer {
+ padding: 2rem 0;
+ flex-shrink: 0
+}
+
+footer.sticky-footer .copyright {
+ line-height: 1;
+ font-size: .8rem
+}
+
+body.sidebar-toggled footer.sticky-footer {
+ width: 100%
+}
diff --git a/public/css/sidebar.css b/public/css/sidebar.css
new file mode 100644
index 0000000..5182ef9
--- /dev/null
+++ b/public/css/sidebar.css
@@ -0,0 +1,90 @@
+body {
+ min-height: 100vh;
+ min-height: -webkit-fill-available;
+ }
+
+ html {
+ height: -webkit-fill-available;
+ }
+
+ main {
+ display: flex;
+ flex-wrap: nowrap;
+ height: 100vh;
+ height: -webkit-fill-available;
+ max-height: 100vh;
+ overflow-x: auto;
+ overflow-y: hidden;
+ }
+
+ .b-example-divider {
+ flex-shrink: 0;
+ width: 1.5rem;
+ height: 100vh;
+ background-color: rgba(0, 0, 0, .1);
+ border: solid rgba(0, 0, 0, .15);
+ border-width: 1px 0;
+ box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
+ }
+
+ .bi {
+ vertical-align: -.125em;
+ pointer-events: none;
+ fill: currentColor;
+ }
+
+ .dropdown-toggle { outline: 0; }
+
+ .nav-flush .nav-link {
+ border-radius: 0;
+ }
+
+ .btn-toggle {
+ display: inline-flex;
+ align-items: center;
+ padding: .25rem .5rem;
+ font-weight: 600;
+ color: rgba(0, 0, 0, .65);
+ background-color: transparent;
+ border: 0;
+ }
+ .btn-toggle:hover,
+ .btn-toggle:focus {
+ color: rgba(0, 0, 0, .85);
+ background-color: #d2f4ea;
+ }
+
+ .btn-toggle::before {
+ width: 1.25em;
+ line-height: 0;
+ content: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e");
+ transition: transform .35s ease;
+ transform-origin: .5em 50%;
+ color: #bebebe;
+ }
+
+ .btn-toggle[aria-expanded="true"] {
+ color: rgba(0, 0, 0, .70);
+ }
+ .btn-toggle[aria-expanded="true"]::before {
+ transform: rotate(90deg);
+ }
+
+ .btn-toggle-nav a {
+ display: inline-flex;
+ padding: .1875rem .5rem;
+ margin-top: .125rem;
+ margin-left: 1.25rem;
+ text-decoration: none;
+ }
+ .btn-toggle-nav a:hover,
+ .btn-toggle-nav a:focus {
+ background-color: #d2f4ea;
+ }
+
+ .scrollarea {
+ overflow-y: auto;
+ }
+
+ .fw-semibold { font-weight: 600; }
+ .lh-tight { line-height: 1.25; }
\ No newline at end of file
diff --git a/public/css/style.css b/public/css/style.css
index 4f30be0..3efa4b5 100644
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -1,108 +1,6 @@
-body {
- background-color: #aaaaaa;
- font-size: 18px;
- color: #3db49c;
- /* color: #bd1010; */
- font-family: 'Raleway', sans-serif;
-}
-
-h1 {
- /* background-color: #00ffdd; */
- font-size: 40px;
- text-align: center;
-}
-
-div:not(.hero) {
- border-radius: 25px;
- /* margin-top: 50px; */
- /* margin-bottom: 50px; */
- margin-right: 50px;
- margin-left: 50px;
- background-color: #192841;
- overflow: auto;
- padding: 10px;
-}
-
-.hero{
- border-radius: 25px;
- background-color:#192841 ;
- /* margin-right: 50px; */
-}
-.hero-background{
- margin-right: 50px;
- margin-left: 50px;
-}
-
-nav {
- border-radius: 25px;
- /* margin-top: 50px; */
- margin-bottom: 50px;
- margin-right: 50px;
- margin-left: 50px;
- /* background-color: #5880c6; */
- overflow: visible;
- padding: 10px;
-}
-.fs-1{
- background-color: #154d79;
-}
-
-button {
- background-color: #00ffdd;
- font-size: 12px;
- border-radius: 6px;
- border: 2px solid #00cccc;
- padding: 7px 12px;
-}
-
-button:hover {
- box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
-}
-
-button:focus {
- outline: none;
-}
-
-table {
- border-collapse: collapse;
- background-color: #4dffe7;
- margin: auto;
- width: 50%;
-}
-
-table, th, td {
- border: 1px solid black;
- padding: 3px;
- text-align: center;
-}
-
-tr:hover {
- background-color: #ccfff8;
-}
-
-a {
- color: #000080;
-}
-
-a:hover {
- color: #00ccb1;
-}
-
-img {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-footer {
- font-size: 50%;
- text-align: center;
-}
-
-
h3 {
- text-align:center;
- color:#272221
+ text-align: center;
+ color: #272221
}
h4 {
@@ -111,11 +9,11 @@ h4 {
}
label {
- color:#3716c9;
+ color: #3716c9;
}
-.linkRule{
- color:#3716c9;
+.linkRule {
+ color: #3716c9;
}
.printertable {
@@ -123,30 +21,34 @@ label {
}
.b-example-divider {
- visibility:hidden;
+ visibility: hidden;
}
.headerText {
- color:#ffffff;
+ color: #ffffff;
}
-.headerText .hover{
- color:#ffffff;
+.headerText .hover {
+ color: #ffffff;
}
.hof {
- color:#000000;
+ color: #000000;
text-align: center;
}
-.pPrint{
+.pPrint {
color: #3716c9;
}
-.reportMessage{
- color:#000000
+.reportMessage {
+ color: #000000
+}
+
+.footer {
+ color: #000080
}
-.footer{
- color:#000080
+.hero {
+ border-radius: 2.0rem;
}
\ No newline at end of file
diff --git a/public/images/1681224308836-carabiner.jpg b/public/images/1681224308836-carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/1681224308836-carabiner.jpg differ
diff --git a/public/images/1681224391097-carabiner.jpg b/public/images/1681224391097-carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/1681224391097-carabiner.jpg differ
diff --git a/public/images/1681224726601-carabiner.jpg b/public/images/1681224726601-carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/1681224726601-carabiner.jpg differ
diff --git a/public/images/1681224749881-carabiner.jpg b/public/images/1681224749881-carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/1681224749881-carabiner.jpg differ
diff --git a/public/images/1681224845944-carabiner.jpg b/public/images/1681224845944-carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/1681224845944-carabiner.jpg differ
diff --git a/public/images/1681224878756-carabiner.jpg b/public/images/1681224878756-carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/1681224878756-carabiner.jpg differ
diff --git a/public/images/carabiner.jpg b/public/images/carabiner.jpg
new file mode 100644
index 0000000..caa4e81
Binary files /dev/null and b/public/images/carabiner.jpg differ
diff --git a/public/images/Mini1pic.jpeg b/public/images/mini1pic.jpeg
similarity index 100%
rename from public/images/Mini1pic.jpeg
rename to public/images/mini1pic.jpeg
diff --git a/public/images/rexPrint.png b/public/images/rexPrint.png
new file mode 100644
index 0000000..874f9db
Binary files /dev/null and b/public/images/rexPrint.png differ
diff --git a/public/images/trophyBases.png b/public/images/trophyBases.png
new file mode 100644
index 0000000..3f3d937
Binary files /dev/null and b/public/images/trophyBases.png differ
diff --git a/public/images/vaderBust.png b/public/images/vaderBust.png
new file mode 100644
index 0000000..d5071af
Binary files /dev/null and b/public/images/vaderBust.png differ
diff --git a/scss/custom.scss b/scss/custom.scss
new file mode 100644
index 0000000..bb9b2fe
--- /dev/null
+++ b/scss/custom.scss
@@ -0,0 +1,24 @@
+// Custom.scss
+// Option B: Include parts of Bootstrap
+
+// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
+@import "../node_modules/bootstrap/scss/functions";
+
+// 2. Include any default variable overrides here
+
+// 3. Include remainder of required Bootstrap stylesheets
+@import "../node_modules/bootstrap/scss/variables";
+@import "../node_modules/bootstrap/scss/mixins";
+
+// 4. Include any optional Bootstrap components as you like
+@import "../node_modules/bootstrap/scss/root";
+@import "../node_modules/bootstrap/scss/reboot";
+@import "../node_modules/bootstrap/scss/type";
+@import "../node_modules/bootstrap/scss/images";
+@import "../node_modules/bootstrap/scss/containers";
+@import "../node_modules/bootstrap/scss/grid";
+
+// 5. Add additional custom code here
+
+
+$bg-gradient-info:( )
\ No newline at end of file
diff --git a/server.js b/server.js
index 3440c42..29a42d6 100644
--- a/server.js
+++ b/server.js
@@ -1,8 +1,8 @@
//..............Include Express..................................//
const express = require('express');
-const fs = require('fs');
+const multer = require('multer');
const ejs = require('ejs');
-const { application } = require('express');
+const methodOverride = require('method-override');
//..............Create an Express server object..................//
const app = express();
@@ -10,304 +10,34 @@ const app = express();
//..............Apply Express middleware to the server object....//
app.use(express.json()); //Used to parse JSON bodies (needed for POST requests)
app.use(express.urlencoded());
+
+app.use(methodOverride('_method'));//middleware for CRUD:UPDATE and DELETE
+
app.use(express.static('public')); //specify location of static assests
app.set('views', __dirname + '/views'); //specify location of templates
app.set('view engine', 'ejs'); //specify templating library
-//.............Define server routes..............................//
-//Express checks routes in the order in which they are defined
-
-
-
-app.get('/', function(request, response) {
- let hofPrints = JSON.parse(fs.readFileSync('data/hofprints.json'));
- let keys = Object.keys(hofPrints)
- let randomKey = Math.floor(Math.random()*keys.length);
- let print = hofPrints[keys[randomKey]]
- console.log(print)
- const date = new Date();
- console.log(date)
-
- response.status(200);
- response.setHeader('Content-Type', 'text/html');
- response.render("index", {
- hofPrint :print,
- printers: JSON.parse(fs.readFileSync('data/printers.json'))
-
- })
-});
-
-app.get('/guide', function(request, response) {
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("guide")
-});
-
-app.get('/advtips', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("advTips")
-})
-
-app.get('/schedule', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("schedule")
-});
-
-app.get('/status', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("status")
-});
-
-app.get('/allprinters', function(request, response){
- let printerList = JSON.parse(fs.readFileSync('data/printers.json'))
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("allPrinters", {
- printers: printerList
- })
-});
-
-
-app.get('/report', function(request, response){
- printerList = JSON.parse(fs.readFileSync('data/printers.json'))
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("report", {
- printers:printerList
- })
-});
-
-app.post('/report', function(request, response){
- printerList = JSON.parse(fs.readFileSync('data/printers.json'))
- let name = request.body.printer;
- console.log("name = " + name);
- console.log(printerList[name])
-
- printerList[name]["errors"].push(request.body.errormsg)
- fs.writeFileSync('data/printers.json', JSON.stringify(printerList))
-
- let noSpaceName = name.split(' ').join('')
-
- response.status(200)
- response.setHeader('Content-Type', "text/html");
- response.render("printerDetails", {
- printer : printerList[name]
- })
- response.redirect("/printer/"+noSpaceName)
-});
-
-app.get('/addprinter', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("addPrinter")
-});
-
-app.post('/addprinter', function(request, response){
- let printers = JSON.parse(fs.readFileSync("data/printers.json"))
- let printerName = request.body.printName;
- let stats = request.body.status;
- let serv = request.body.service;
- let pho = request.body.photo;
- let location = request.body.local;
- let err = request.body.err;
- let prints = request.body.prints;
- let printTime = request.body.printTime;
- if(printerName && stats && serv && pho && location && err && prints){
- let newPrinter = {
- "name":printerName,
- "Status":stats,
- "errors":[err],
- "prints":[prints],
- "printingTime":printTime,
- "lastService":serv,
- "photo":pho,
- "location":location
- }
- printers[printerName] = newPrinter;
- fs.writeFileSync('data/printers.json', JSON.stringify(printers))
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("/printerDetails", {
- printer:printerName.split(' ').join(''),
- })
- response.redirect("printerDetails/"+printerName)
- }
-});
-
-app.get('/printer/:printerName', function(request, response){
- let printers = JSON.parse(fs.readFileSync("data/printers.json"))
- console.log("/printer/:printerName")
- let printerName = request.params.printerName;
- console.log("printerName = "+printerName)
- console.log("printer = "+printers[printerName])
- if(printers[printerName]){
- console.log("This is a real print")
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("printerDetails", {
- printer: printers[printerName]
- });
- } else{
- response.status(404);
- response.setHeader('Content-Type', 'text/html')
- response.render("error", {
- "errorCode":"404"
- });
- }
-});
-
-app.get('/allprints', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("allPrints", {
- prints : JSON.parse(fs.readFileSync("data/prints.json"))
- })
-});
-
-app.get('/halloffame', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("halloffame", {
- hofPrints : JSON.parse(fs.readFileSync("data/hofprints.json"))
- })
-});
-
-app.get('/hofsubmit', function(request,response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("hofSubmit")
-});
-
-app.post('/hofsubmit', function(request, response){
- let hofPrints = JSON.parse(fs.readFileSync('data/hofprints.json'));
- let printName = request.body.printName;
- let desc = request.body.description;
- let printer = request.body.printer;
- let stName = request.body.studentName;
- let ph = request.body.photo;
-
- if(ph && stName && desc && printer && printName){
- newPrint = {
- "name":printName,
- "printer":printer,
- "student":stName,
- "description":desc,
- "photo":ph
- }
- hofPrints[printName] = newPrint;
- fs.writeFileSync('data/hofprints.json', JSON.stringify(hofPrints))
-
- response.status(200);
- response.setHeader('Content-Type', "text/html");
- response.render('halloffame')
- response.redirect('/halloffame')
- } else {
- alert("Please fill out every field")
- }
-})
-
-app.get('/printcreate', function(request, response){
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("printCreate")
-});
-
-app.get('/print/:printName', function(request, response){
- let prints = JSON.parse(fs.readFileSync("data/prints.JSON"))
- console.log("/print/:printName")
- let printName = request.params.printName;
- // console.log("printName = "+printName)
- // console.log("prints = "+prints[printName]["description"])
- if(prints[printName]){
- console.log("it's the if statement")
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("printDetails", {
- print: prints[printName]
- });
- } else{
- response.status(404);
- response.setHeader('Content-Type', 'text/html')
- response.render("error", {
- "errorCode":"404"
- });
- }
- response.status(200);
+app.use(require('./controllers/auth'));
+app.use(require('./controllers/index'));
+app.use(require('./controllers/prints_controller'));
+app.use(require('./controllers/printers_controller'));
+app.use(require('./controllers/svg_controller'));
+app.use(require('./controllers/hofprints_controller'));
+app.use("", function(request, response) {
+ response.redirect('/error?code=400');
});
-app.post('/printcreate', function(request,response){
- let prints = JSON.parse(fs.readFileSync("data/prints.json"));
- let printName = request.body.printName;
- // console.log(prints);
- // console.log("PrintName = "+ printName);
- // console.log(request.body.width)
- if(request.body.printName && request.body.description && request.body.link && request.body.infill && request.body.width && request.body.time && request.body.printer && request.body.photo){
- let newPrint = {
- "name":printName,
- "description":request.body.description,
- "link":request.body.link,
- "time":request.body.time,
- "infill":request.body.infill,
- "width":request.body.width,
- "studentName":request.body.studentName,
- "date":request.body.date,
- "printer":request.body.printer,
- "photo":request.body.photo,
- };
- console.log("newPrint = ");
- console.log(newPrint)
- prints[printName] = newPrint;
- fs.writeFileSync("data/prints.json", JSON.stringify(prints))
- console.log(JSON.parse(fs.readFileSync('data/prints.json')))
-
- response.status(200);
- response.setHeader('Content-Type', 'text/html')
- response.render("printDetails", {
- print : newPrint
- })
- response.redirect("/print/"+printName)
- } else {
- alert("Please fill out all information before saving");
- }
-});
-
-
-// // test Details
-app.get('/printDetails', function(request, response){
- response.status(200)
- response.setHeader('Content-Type', 'text/html')
- response.render("printDetails", {
- print: {
- "name":"tempTower_mini-IK","description":"An automated temp tower from Prusa itself to test the new filament on the minis","link":"https://www.printables.com/model/20652-temp-tower-pla-petg-absasa-for-prusa-mini-mk3s-and","time":"229","infill":"20","width":"0.3","studentName":"Ian_Kopke","printer":"MK3Z", "date":"1/13/23/12:05/red"
- }
- })
-});
-
-
-//------------------- DEMO CODE BELOW ------------------------------
-// Because routes/middleware are applied in order,
-// this will act as a default error route in case of
-// a request fot an invalid route
-app.use("", function(request, response){
- response.status(404);
- response.setHeader('Content-Type', 'text/html')
- response.render("error", {
- "errorCode":"404"
- });
-});
-
//..............Start the server...............................//
const port = process.env.PORT || 3000;
app.listen(port, function() {
console.log('Server started at http://localhost:'+port+'.')
});
+
+
diff --git a/serverOld.js b/serverOld.js
new file mode 100644
index 0000000..939fa3d
--- /dev/null
+++ b/serverOld.js
@@ -0,0 +1,309 @@
+
+//..............Include Express..................................//
+const express = require('express');
+const fs = require('fs');
+const ejs = require('ejs');
+const { application } = require('express');
+
+//..............Create an Express server object..................//
+const app = express();
+
+//..............Apply Express middleware to the server object....//
+app.use(express.json()); //Used to parse JSON bodies (needed for POST requests)
+app.use(express.urlencoded());
+app.use(express.static('public')); //specify location of static assests
+app.set('views', __dirname + '/views'); //specify location of templates
+app.set('view engine', 'ejs'); //specify templating library
+
+//.............Define server routes..............................//
+//Express checks routes in the order in which they are defined
+
+
+
+app.get('/', function(request, response) {
+ let hofPrints = JSON.parse(fs.readFileSync('data/hofprints.json'));
+ let keys = Object.keys(hofPrints)
+ let randomKey = Math.floor(Math.random()*keys.length);
+ let print = hofPrints[keys[randomKey]]
+ console.log(print)
+ const date = new Date();
+ console.log(date)
+
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html');
+ response.render("index", {
+ hofPrint :print,
+ printers: JSON.parse(fs.readFileSync('data/printers.json'))
+
+ })
+});
+
+app.get('/guide', function(request, response) {
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("guide")
+});
+
+app.get('/advtips', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("advTips")
+})
+
+app.get('/schedule', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("schedule")
+});
+
+app.get('/status', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("status")
+});
+
+app.get('/allprinters', function(request, response){
+ let printerList = JSON.parse(fs.readFileSync('data/printers.json'))
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("allPrinters", {
+ printers: printerList
+ })
+});
+
+
+app.get('/report', function(request, response){
+ printerList = JSON.parse(fs.readFileSync('data/printers.json'))
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("report", {
+ printers:printerList
+ })
+});
+
+app.post('/report', function(request, response){
+ printerList = JSON.parse(fs.readFileSync('data/printers.json'))
+ let name = request.body.printer;
+ console.log("name = " + name);
+ console.log(printerList[name])
+
+ printerList[name]["errors"].push(request.body.errormsg)
+ fs.writeFileSync('data/printers.json', JSON.stringify(printerList))
+
+ let noSpaceName = name.split(' ').join('')
+
+ response.status(200)
+ response.setHeader('Content-Type', "text/html");
+ response.render("printerDetails", {
+ printer : printerList[name]
+ })
+ response.redirect("/printer/"+noSpaceName)
+});
+
+app.get('/addprinter', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("addPrinter")
+});
+
+app.post('/addprinter', function(request, response){
+ let printers = JSON.parse(fs.readFileSync("data/printers.json"))
+ let printerName = request.body.printName;
+ let stats = request.body.status;
+ let serv = request.body.service;
+ let pho = request.body.photo;
+ let location = request.body.local;
+ let err = request.body.err;
+ let prints = request.body.prints;
+ let printTime = request.body.printTime;
+
+ if(printerName && stats && serv && pho && location && err && prints){
+ let newPrinter = {
+ "name":printerName,
+ "Status":stats,
+ "errors":[err],
+ "prints":[prints],
+ "printingTime":printTime,
+ "lastService":serv,
+ "photo":pho,
+ "location":location
+ }
+ printers[printerName] = newPrinter;
+ fs.writeFileSync('data/printers.json', JSON.stringify(printers))
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("/printerDetails", {
+ printer:printerName.split(' ').join(''),
+ })
+ response.redirect("printerDetails/"+printerName)
+ }
+});
+
+app.get('/printer/:printerName', function(request, response){
+ let printers = JSON.parse(fs.readFileSync("data/printers.json"))
+ console.log("/printer/:printerName")
+ let printerName = request.params.printerName;
+ console.log("printerName = "+printerName)
+ console.log("printer = "+printers[printerName])
+ if(printers[printerName]){
+ console.log("This is a real print")
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printerDetails", {
+ printer: printers[printerName]
+ });
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ "errorCode":"404"
+ });
+ }
+});
+
+app.get('/allprints', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("allPrints", {
+ prints : JSON.parse(fs.readFileSync("data/prints.json"))
+ })
+});
+
+app.get('/halloffame', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("halloffame", {
+ hofPrints : JSON.parse(fs.readFileSync("data/hofprints.json"))
+ })
+});
+
+app.get('/hofsubmit', function(request,response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("hofSubmit")
+});
+
+app.post('/hofsubmit', function(request, response){
+ let hofPrints = JSON.parse(fs.readFileSync('data/hofprints.json'));
+ let printName = request.body.printName;
+ let desc = request.body.description;
+ let printer = request.body.printer;
+ let stName = request.body.studentName;
+ let ph = request.body.photo;
+
+ if(ph && stName && desc && printer && printName){
+ newPrint = {
+ "name":printName,
+ "printer":printer,
+ "student":stName,
+ "description":desc,
+ "photo":ph
+ }
+ hofPrints[printName] = newPrint;
+ fs.writeFileSync('data/hofprints.json', JSON.stringify(hofPrints))
+
+ response.status(200);
+ response.setHeader('Content-Type', "text/html");
+ response.render('halloffame')
+ response.redirect('/halloffame')
+ } else {
+ alert("Please fill out every field")
+ }
+})
+
+app.get('/printcreate', function(request, response){
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printCreate")
+});
+
+app.get('/print/:printName', function(request, response){
+ let prints = JSON.parse(fs.readFileSync("data/prints.JSON"))
+ console.log("/print/:printName")
+ let printName = request.params.printName;
+ // console.log("printName = "+printName)
+ // console.log("prints = "+prints[printName]["description"])
+ if(prints[printName]){
+ console.log("it's the if statement")
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printDetails", {
+ print: prints[printName]
+ });
+
+ } else{
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ "errorCode":"404"
+ });
+ }
+
+ response.status(200);
+
+
+});
+app.post('/printcreate', function(request,response){
+ let prints = JSON.parse(fs.readFileSync("data/prints.json"));
+ let printName = request.body.printName;
+
+ // console.log(prints);
+ // console.log("PrintName = "+ printName);
+ // console.log(request.body.width)
+ if(request.body.printName && request.body.description && request.body.link && request.body.infill && request.body.width && request.body.time && request.body.printer && request.body.photo){
+ let newPrint = {
+ "name":printName,
+ "description":request.body.description,
+ "link":request.body.link,
+ "time":request.body.time,
+ "infill":request.body.infill,
+ "width":request.body.width,
+ "studentName":request.body.studentName,
+ "date":request.body.date,
+ "printer":request.body.printer,
+ "photo":request.body.photo,
+ };
+ console.log("newPrint = ");
+ console.log(newPrint)
+ prints[printName] = newPrint;
+ fs.writeFileSync("data/prints.json", JSON.stringify(prints))
+ console.log(JSON.parse(fs.readFileSync('data/prints.json')))
+
+ response.status(200);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printDetails", {
+ print : newPrint
+ })
+ response.redirect("/print/"+printName)
+ } else {
+ alert("Please fill out all information before saving");
+ }
+});
+
+
+
+
+// // test Details
+app.get('/printDetails', function(request, response){
+ response.status(200)
+ response.setHeader('Content-Type', 'text/html')
+ response.render("printDetails", {
+ print: {
+ "name":"tempTower_mini-IK","description":"An automated temp tower from Prusa itself to test the new filament on the minis","link":"https://www.printables.com/model/20652-temp-tower-pla-petg-absasa-for-prusa-mini-mk3s-and","time":"229","infill":"20","width":"0.3","studentName":"Ian_Kopke","printer":"MK3Z", "date":"1/13/23/12:05/red"
+ }
+ })
+});
+
+app.use("", function(request, response){
+ response.status(404);
+ response.setHeader('Content-Type', 'text/html')
+ response.render("error", {
+ "errorCode":"404"
+ });
+});
+
+//..............Start the server...............................//
+const port = process.env.PORT || 3000;
+app.listen(port, function() {
+ console.log('Server started at http://localhost:'+port+'.')
+});
diff --git a/views/advTips.ejs b/views/advTips.ejs
index ae67516..49b3289 100644
--- a/views/advTips.ejs
+++ b/views/advTips.ejs
@@ -1,4 +1,8 @@
-<%- include('partials/header', {title:"Adv Tips"})-%>
+<%if(user == null){%>
+ <%- include('partials/header', {title:"Design Lab 2.0"})-%>
+<%}else {%>
+ <%- include('partials/userHeader', {title:"Design Lab 2.0"})-%>
+<%}%>
Welcome to the Adv Tips
<%- include('partials/footer') -%>
\ No newline at end of file
diff --git a/views/allPrinters.ejs b/views/allPrinters.ejs
deleted file mode 100644
index 6e75909..0000000
--- a/views/allPrinters.ejs
+++ /dev/null
@@ -1,33 +0,0 @@
-<%- include('partials/header', {title:"3D Printing Signups!"})-%>
-
Every Printer is stored Here!
-
-<%for(printer in printers){%>
-
-
-
-
- <% if(printers[printer]["photo"].length > 20){ %>
-

" class="d-block mx-lg-auto img-fluid" alt="Technical Difficulties" width="700" height="500" loading="lazy">
- <%} else{ %>
-

" class="d-block mx-lg-auto img-fluid" alt="Technical Difficulties" width="700" height="500" loading="lazy">
- <%}%>
-
-
-
-
<%=printers[printer]["name"]%>
-
<%=printers[printer]["status"]%>
-
Total time of <%=printers[printer]["printingTime"]%> hours
-
Last service was on <%=printers[printer]["lastService"]%>
-
-
-
-
-
-
-<%}%>
-
-
-<%- include('partials/footer') -%>
diff --git a/views/allPrints.ejs b/views/allPrints.ejs
deleted file mode 100644
index e2f3850..0000000
--- a/views/allPrints.ejs
+++ /dev/null
@@ -1,31 +0,0 @@
-<%- include('partials/header', {title:"3D Printing Signups!"})-%>
-
-<%}%>
-
-
-<%- include('partials/footer') -%>
-
diff --git a/views/error.ejs b/views/error.ejs
index 822db45..9bd78dd 100644
--- a/views/error.ejs
+++ b/views/error.ejs
@@ -1,4 +1,8 @@
-<%- include('partials/header', {title:"Error"}) -%>
+<%if(user == null){%>
+ <%- include('partials/header', {title:"Design Lab 2.0"})-%>
+<%}else {%>
+ <%- include('partials/userHeader', {title:"Design Lab 2.0"})-%>
+<%}%>
The resource you requested has not been found.
diff --git a/views/guide.ejs b/views/guide.ejs
index 49c1675..174583b 100644
--- a/views/guide.ejs
+++ b/views/guide.ejs
@@ -1,5 +1,9 @@
-<%- include('partials/header', {title:"Lean how to Print"}) -%>
+<%if(user == null){%>
+ <%- include('partials/header', {title:"Design Lab 2.0"})-%>
+<%}else {%>
+ <%- include('partials/userHeader', {title:"Design Lab 2.0"})-%>
+<%}%>
Hello World
diff --git a/views/halloffame.ejs b/views/halloffame.ejs
deleted file mode 100644
index df65a07..0000000
--- a/views/halloffame.ejs
+++ /dev/null
@@ -1,30 +0,0 @@
-<%- include('partials/header', {title:"Hall of Fame"}) -%>
-
-
-
-<%}%>
-
-<%- include('partials/footer') -%>
diff --git a/views/hofprints/halloffame.ejs b/views/hofprints/halloffame.ejs
new file mode 100644
index 0000000..3e6d76f
--- /dev/null
+++ b/views/hofprints/halloffame.ejs
@@ -0,0 +1,71 @@
+<%if(user == null){%>
+ <%- include('../partials/header', {title:"Design Lab 2.0"})-%>
+<%}else {%>
+ <%- include('../partials/userHeader', {title:"Design Lab 2.0"})-%>
+<%}%>
+
+
+
+ <%let i = 0;%>
+ <%for(print in hofPrints){%>
+ <%if(i%2 == 0){%>
+ <%console.log("i == "+ i)%>
+
+ <%i++%>
+ <%}%>
+
+
+
+ <%- include('../partials/footer') -%>
\ No newline at end of file
diff --git a/views/hofSubmit.ejs b/views/hofprints/hofSubmit.ejs
similarity index 73%
rename from views/hofSubmit.ejs
rename to views/hofprints/hofSubmit.ejs
index 5ef2f4c..6eee6cc 100644
--- a/views/hofSubmit.ejs
+++ b/views/hofprints/hofSubmit.ejs
@@ -1,4 +1,8 @@
-<%- include('partials/header', {title:"Hall of Fame Submission"}) -%>
+<%if(user == null){%>
+ <%- include('../partials/header', {title:"Design Lab 2.0"})-%>
+<%}else {%>
+ <%- include('../partials/userHeader', {title:"Design Lab 2.0"})-%>
+<%}%>
+<%- include('../partials/footer') -%>
\ No newline at end of file
diff --git a/views/index.ejs b/views/index.ejs
index 3e3e4d1..04ed1a7 100644
--- a/views/index.ejs
+++ b/views/index.ejs
@@ -1,90 +1,124 @@
-<%- include('partials/header', {title:"3D Printing Signups!"})-%>
-
+<%if(user == null){%>
+ <%- include('partials/header', {title:"Design Lab 2.0"})-%>
+<%}else {%>
+ <%- include('partials/userHeader', {title:"Design Lab 2.0"})-%>
+<%}%>
+
+ <%if(user == undefined){%>
+
+
+ <%} else {%>
+