diff --git a/build.gradle b/build.gradle
index 5689fe1a8341e25be401b65483d5803bbb85a46c..298e5182b3cff216571e56c112ddb78f7e1fa105 100644
--- a/build.gradle
+++ b/build.gradle
@@ -46,6 +46,8 @@ dependencies {
 
 //Thanks for using https://jar-download.com
 
+// https://mvnrepository.com/artifact/com.h2database/h2 // if breaks
+	testImplementation group: 'com.h2database', name: 'h2', version: '1.4.192'
 
 
 }
diff --git a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java
index dfc202b73daed9eaa63048b55baf8b254ccab87d..b60e209ca273c738be829489f4d52d334428ca43 100644
--- a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java
+++ b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java
@@ -13,7 +13,7 @@
 //
 //
 //    @Autowired
-//    private locationRepository locationRepository;
+//    private LocationRepository LocationRepository;
 //    @Autowired
 //    private trailsRepository trailsRepository;
 //
@@ -28,7 +28,7 @@
 //    @GetMapping("locationList")
 //    public ModelAndView locationList(){
 //        ModelAndView mav2 = new ModelAndView("towns/locationData");
-//        List<Location> Locations = locationRepository.getAllLocation();
+//        List<Location> Locations = LocationRepository.getAllLocation();
 //        mav2.addObject("location", Locations);
 //        return mav2;
 //    }
diff --git a/src/main/java/Team5/SmartTowns/Data/locationRepository.java b/src/main/java/Team5/SmartTowns/Data/LocationRepository.java
similarity index 82%
rename from src/main/java/Team5/SmartTowns/Data/locationRepository.java
rename to src/main/java/Team5/SmartTowns/Data/LocationRepository.java
index 822a18cb860654694734c7f591cbb5b216eb8a39..4a3e8588ff33ac58f246a2c7be46fbd9d1a78f89 100644
--- a/src/main/java/Team5/SmartTowns/Data/locationRepository.java
+++ b/src/main/java/Team5/SmartTowns/Data/LocationRepository.java
@@ -4,7 +4,7 @@ package Team5.SmartTowns.Data;
 import java.util.List;
 
 
-public interface locationRepository {
+public interface LocationRepository {
     List<Location> getAllLocation();
     void addLocation(Location loc);
 
diff --git a/src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java
similarity index 84%
rename from src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java
rename to src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java
index 3dacdc0c2b9dd45acb3fd8503ed739b416980464..cfbc7344115da107cfddcb090b2668cd8f3598b6 100644
--- a/src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java
+++ b/src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java
@@ -4,19 +4,16 @@ package Team5.SmartTowns.Data;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.stereotype.Repository;
-import org.springframework.dao.DataAccessException;
-import org.springframework.core.NestedRuntimeException;
-import org.springframework.core.NestedRuntimeException;
-import javax.print.DocFlavor;
+
 import javax.sql.DataSource;
 import java.util.List;
 
 @Repository
-public class locationRepositoryJDBC implements locationRepository {
+public class LocationRepositoryJDBC implements LocationRepository {
     private JdbcTemplate jdbc;
     private RowMapper<Location> locationMapper;
 
-    public locationRepositoryJDBC(JdbcTemplate aJdbc) {
+    public LocationRepositoryJDBC(JdbcTemplate aJdbc) {
         this.jdbc = aJdbc;
         setlocationMapper();
     }
@@ -55,7 +52,7 @@ public class locationRepositoryJDBC implements locationRepository {
         jdbc = new JdbcTemplate(dataSource);
     }
 
-    public locationRepositoryJDBC() {
+    public LocationRepositoryJDBC() {
     }
 
     public void setJdbc(JdbcTemplate jdbc) {
diff --git a/src/main/java/Team5/SmartTowns/Data/Main.java b/src/main/java/Team5/SmartTowns/Data/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..24bd503ecdd2af87ed42372600ddd6b742c74b4a
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/Data/Main.java
@@ -0,0 +1,16 @@
+//package Team5.SmartTowns.Data;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//
+//import java.util.List;
+//
+//public class Main {
+//    @Autowired
+//    private LocationRepository LocationRepository;
+//    List<Location> approvedNumber= LocationRepository.approvedLocations();
+//    public static void main(String[] args) {
+//        for (Location loc: approvedNumber){}
+//
+//
+//    }
+//}
diff --git a/src/main/java/Team5/SmartTowns/Data/MockUser.java b/src/main/java/Team5/SmartTowns/Data/MockUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e9a4e253490247c45b9bdf80d4121f30572b4ac
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/Data/MockUser.java
@@ -0,0 +1,17 @@
+package Team5.SmartTowns.Data;
+
+import Team5.SmartTowns.trails.Trail;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.util.List;
+
+public class MockUser {
+
+    private JdbcTemplate jdbc;
+    private RowMapper<Trail> trailMapper;
+    public List<Trail> getAllTrails(){
+        String sql= "SELECT * FROM trails";
+        return jdbc.query(sql, trailMapper);
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/Data/QRCodes.java b/src/main/java/Team5/SmartTowns/Data/QRCodes.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef350eb418b959e1069ee51d061471448c3b7457
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/Data/QRCodes.java
@@ -0,0 +1,4 @@
+package Team5.SmartTowns.Data;
+
+public class QRCodes {
+}
diff --git a/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java b/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java
index a94feef88935a8d3ca71f6326bdb8f44cda6dd0e..dc963c2b57a150b83dcbd37cfc15470cbf414205 100644
--- a/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java
+++ b/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java
@@ -1,7 +1,7 @@
 package Team5.SmartTowns.Landmarks;
 
 import Team5.SmartTowns.Data.Location;
-import Team5.SmartTowns.Data.locationRepository;
+import Team5.SmartTowns.Data.LocationRepository;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -26,7 +26,7 @@ public class LandmarksController {
     }
 
     @Autowired
-    private locationRepository locationRepository;
+    private LocationRepository locationRepository;
     @PostMapping("/landmarkSub")
     public ModelAndView landmarkSent(@Valid @ModelAttribute("landmarkData") Landmarks landmarks, BindingResult bindingResult, Model model ) {
 
diff --git a/src/main/java/Team5/SmartTowns/Towns/TownController.java b/src/main/java/Team5/SmartTowns/Towns/TownController.java
index 6029b5e790d80a36cfd911020c3cfd5b23d40397..35c479759cee8ddd3523e9616136ad419eff39f7 100644
--- a/src/main/java/Team5/SmartTowns/Towns/TownController.java
+++ b/src/main/java/Team5/SmartTowns/Towns/TownController.java
@@ -2,9 +2,7 @@ package Team5.SmartTowns.Towns;
 
 import Team5.SmartTowns.Data.Location;
 import Team5.SmartTowns.Data.Town;
-import Team5.SmartTowns.Data.TownRepository;
-import Team5.SmartTowns.Data.locationRepository;
-import Team5.SmartTowns.Landmarks.Landmarks;
+import Team5.SmartTowns.Data.LocationRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -17,7 +15,7 @@ import java.util.Objects;
 @Controller
 public class TownController {
     @Autowired
-    private Team5.SmartTowns.Data.locationRepository locationRepository;
+    private LocationRepository locationRepository;
     @Autowired
     private Team5.SmartTowns.Data.TownRepository townRepository;
 
diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bcd7ad952f844add8bd89cbd1d181d07efc714f
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java
@@ -0,0 +1,109 @@
+package Team5.SmartTowns.placeswithcoordinates;
+
+
+
+import Team5.SmartTowns.Data.Location;
+import Team5.SmartTowns.Data.LocationRepositoryJDBC;
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.util.List;
+
+//@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LocationsCoordinates {
+    /// separate class to location to cover all locations within trails that have been approved and have long/lat coords attached for mapping.
+    private int locationID;
+    private Double locationCoordsLat;
+    private Double locationCoordsLong;
+    private JdbcTemplate jdbc;
+
+//    public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc){
+//        JdbcTemplate jdbcSuper= new LocationRepositoryJDBC().getJdbc();
+//        return new LocationRepositoryJDBC(jdbcSuper).getApprovedLocations();
+//    }
+
+
+    public int getLocationID() {
+        return locationID;
+    }
+
+    public Double getLocationCoordsLong() {
+        return locationCoordsLong;
+    }
+
+    public Double getLocationCoordsLat() {
+        return locationCoordsLat;
+    }
+
+    public void setLocationCoordsLong(Double locationCoordsLong) {
+        this.locationCoordsLong = locationCoordsLong;
+    }
+
+    public void setLocationCoordsLat(Double locationCoordsLat) {
+        this.locationCoordsLat = locationCoordsLat;
+    }
+
+//    public LocationsCoordinates(JdbcTemplate aJdbc, int locationID, Double locationCoordsLat, Double locationCoordsLong) {
+//        super(aJdbc);
+//        this.locationID = locationID;
+//        this.locationCoordsLong = locationCoordsLong;
+//        this.locationCoordsLat = locationCoordsLat;
+//    }
+
+//    public LocationsCoordinates(int locationID, Double locationCoordsLat, Double locationCoordsLong,JdbcTemplate jdbc) {
+//        super(jdbc);
+//        this.locationID = locationID;
+//        this.locationCoordsLong = locationCoordsLong;
+//        this.locationCoordsLat = locationCoordsLat;
+//    }
+
+
+//    public LocationsCoordinates(JdbcTemplate aJdbc, int locationID, Double locationCoordsLat, Double locationCoordsLong, JdbcTemplate jdbc) {
+//        super(aJdbc);
+//        this.locationID = locationID;
+//        this.locationCoordsLat = locationCoordsLat;
+//        this.locationCoordsLong = locationCoordsLong;
+//        this.jdbc = jdbc;
+//    }
+
+    public LocationsCoordinates(int locationID, Double locationCoordsLat, Double locationCoordsLong) {
+        this.locationID = locationID;
+        this.locationCoordsLat = locationCoordsLat;
+        this.locationCoordsLong = locationCoordsLong;
+    }
+
+//    public LocationsCoordinates(JdbcTemplate aJdbc) {
+//        super(aJdbc);
+//    }
+
+    public List<Location> getFullListLocations(JdbcTemplate aJdbc){
+//        LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc);
+        return new LocationRepositoryJDBC(aJdbc).getAllLocation();
+    }
+
+
+
+//    public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc){
+//        JdbcTemplate jdbcSuper= new LocationRepositoryJDBC().getJdbc();
+//        return new LocationRepositoryJDBC(jdbcSuper).getApprovedLocations();
+//    }
+
+//    public List<Location> getFullUnapprovedLocations(JdbcTemplate aJdbc){
+////        LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc);
+//        return new LocationRepositoryJDBC(aJdbc).getUnapprovedLocations();
+//    }
+
+
+
+
+ /// Need a constructor to create a lcoations list, approved lcoatiosn lsit, unapproved lcoations list.
+
+
+
+
+
+
+}
diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a497dd4b003a2df4a949680fc2ddc31035a93f9
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java
@@ -0,0 +1,77 @@
+package Team5.SmartTowns.placeswithcoordinates;
+
+import Team5.SmartTowns.Data.Location;
+import Team5.SmartTowns.Data.LocationRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+public class PlacesController {
+
+    @Autowired
+    private PlacesCoordinatesRepository placeRepo;
+    @Autowired
+    private LocationRepository locationRepo;
+
+
+
+
+    @GetMapping("/checkpoints")
+    public ModelAndView getLocationPages(){
+        ModelAndView modelAndView = new ModelAndView("landmarks/locationPage.html");
+        List<Location> locations =  locationRepo.getAllLocation();
+//        List<Location> approvedLocations =  locationRepo.getApprovedLocations2(locations);
+        List<LocationsCoordinates> locCoords = placeRepo.getAllLocationCoords();
+        List<Integer> locationIDIndex = new ArrayList<Integer>();
+        List<Location> locationCoordsWorkaround = new ArrayList<Location>();
+        for (LocationsCoordinates coord: locCoords){
+            locationIDIndex.add(coord.getLocationID()-1);
+            locationCoordsWorkaround.add(locations.get(coord.getLocationID()-1));
+        }
+        modelAndView.addObject("location", locationCoordsWorkaround);
+        modelAndView.addObject("locationCoords", locCoords);
+        return  modelAndView;
+    }
+
+    @RequestMapping(value="/location", method= RequestMethod.POST)
+    public String sendHtmlFragment(Model map) {
+        map.addAttribute("foo", "bar");
+        return "checkpoint/checkpoint";
+    }
+
+        @GetMapping("/checkpoints/{location}")
+    public ModelAndView getResultBySearchKey(@PathVariable String location) {
+            List<Location> locations =  locationRepo.getAllLocation();
+            List<LocationsCoordinates> locCoords = placeRepo.getAllLocationCoords();
+
+            List<Integer> locationIDIndex = new ArrayList<Integer>();
+            List<Location> locationCoordsWorkaround = new ArrayList<Location>();
+            int locationID = 999;
+            int workAroundID=0;// otherwise cases errors e.g. null used. 999 unlikely to be used so safe until then
+            for (int i=0;i<locCoords.size();i++){ /// for loop iterating over coordinates table need to match coordinate index with lcoation index manually
+                locationIDIndex.add(locCoords.get(i).getLocationID()-1); // gets location ID and therefore location list index number
+                locationCoordsWorkaround.add(locations.get(locCoords.get(i).getLocationID()-1));
+                if ( (locations.get(locCoords.get(i).getLocationID() - 1).getLocationName().replace(' ', '-').trim().equals(location)) ){
+                    locationID= i;
+                    break;
+                } workAroundID++;
+            }System.out.println(locationCoordsWorkaround);
+            System.out.println("ag"+locationID);
+        ModelAndView modelAndView= new ModelAndView("fragments/locationPageFrags :: locationSection");
+            System.out.println("ag"+locationID);
+        modelAndView.addObject("locCoord", locCoords.get(locationID));
+            System.out.println("sd"+workAroundID);
+        modelAndView.addObject("location", locationCoordsWorkaround.get(locationID));
+        return modelAndView;
+    }
+
+}
diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e091de02fec89d86e185129318a2e073fec0c9e
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java
@@ -0,0 +1,21 @@
+package Team5.SmartTowns.placeswithcoordinates;
+
+import Team5.SmartTowns.Data.Location;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.util.List;
+
+public interface PlacesCoordinatesRepository {
+
+    List<LocationsCoordinates> getAllLocationCoords();
+    void addLocationCoord(LocationsCoordinates locCoord);
+
+    List<TownWithTrails> getAllTownCoords();
+    void addTownWithCoords(TownWithTrails town);
+
+    List<Location> getFullApprovedLocations(JdbcTemplate aJdbc);
+
+
+
+
+}
diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java
new file mode 100644
index 0000000000000000000000000000000000000000..4cd83b25736d6fa5c135b44e2810758a47c7a2bd
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java
@@ -0,0 +1,544 @@
+package Team5.SmartTowns.placeswithcoordinates;
+
+import Team5.SmartTowns.Data.Location;
+import Team5.SmartTowns.Data.LocationRepositoryJDBC;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+
+import java.util.List;
+import java.util.Objects;
+
+@Repository
+public class PlacesCoordinatesRepositoryJDBC implements PlacesCoordinatesRepository {
+
+
+    private JdbcTemplate jdbc;
+    private RowMapper<LocationsCoordinates> locationCoordMapper;
+    private RowMapper<TownWithTrails> townCoordMapper;
+    public PlacesCoordinatesRepositoryJDBC(JdbcTemplate aJdbc) {
+        this.jdbc = aJdbc;
+        setLocationCoordsMapper();
+        setTownCoordsMapper();
+    }
+    private void setLocationCoordsMapper(){
+        locationCoordMapper = (rs, i) -> new LocationsCoordinates(
+
+                rs.getInt("locationID"),
+                rs.getDouble("locationCoordsLat"),
+                rs.getDouble("locationCoordsLong")
+
+        );
+    }
+    private void setTownCoordsMapper(){
+        townCoordMapper = (rs, i) -> new TownWithTrails(
+
+                rs.getString("townName"),
+                rs.getString("townCentreCoordsLat"),
+                rs.getString("townCentreCoordsLong"),
+                rs.getString("townUppermostCoordsLat"),
+                rs.getString("townLowermostCoordsLat"),
+                rs.getString("townLeftmostCoordsLong"),
+                rs.getString("townRightmostCoordsLong")
+
+
+        );
+    }
+
+
+
+    public List<LocationsCoordinates> getAllLocationCoords(){
+        String sql= "SELECT * FROM locationCoordinates";
+        return jdbc.query(sql, locationCoordMapper);
+    }
+    public List<TownWithTrails> getAllTownCoords(){
+        String sql= "SELECT * FROM townswithtrails";
+        return jdbc.query(sql, townCoordMapper);
+    }
+
+    @Override
+    public void addLocationCoord(LocationsCoordinates locCoords) {
+        String sql = "insert into locationCoordinates(locationID, locationCoordsLat,locationCoordsLong) values (?,?,?)";
+
+        jdbc.update(sql,locCoords.getLocationID(), locCoords.getLocationCoordsLong(),locCoords.getLocationCoordsLat());
+
+    }
+    @Override
+    public void addTownWithCoords(TownWithTrails town) {
+        String sql = "insert into townswithtrails(townName,townCentreCoordsLat,townCentreCoordsLong,townUppermostCoordsLat,townLowermostCoordsLat,townLeftmostCoordsLong,townRightmostCoordsLong) values (?,?,?,?,?,?,?)";
+
+        jdbc.update(sql,town.getTownName(),town.getTownCentreCoordsLong(),town.getTownCentreCoordsLong(),town.getTownUppermostCoordsLat(),town.getTownLowermostCoordsLat(),town.getTownLeftmostCoordsLong(),town.getTownRightmostCoordsLong());
+
+    }
+
+
+//    public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc) {
+////        LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc);
+//        return new LocationRepositoryJDBC(aJdbc).getApprovedLocations();
+//    }
+
+    @Override //TODO CHECK
+    public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc) {
+        return null;
+    }
+
+
+    public boolean checkInputtedCoordsMatchTown(String inpLatCoords, String inpLongCoords, String townName){
+     PlacesCoordinatesRepositoryJDBC jbdcsecond = new PlacesCoordinatesRepositoryJDBC(jdbc);
+     List<TownWithTrails> allTowns = jbdcsecond.getAllTownCoords();
+     for (TownWithTrails town : allTowns){
+         if (Objects.equals(townName, town.getTownName())){
+             // check lon within boundaries
+             // convert values to doubles
+             double inpLat=Double.parseDouble(inpLatCoords);
+             double inpLong=Double.parseDouble(inpLongCoords);
+             double townBoundaryLatUppermost=Double.parseDouble(town.getTownUppermostCoordsLat());
+             double townBoundaryLatLowermost=Double.parseDouble(town.getTownLowermostCoordsLat());
+
+             double townBoundaryLongLeftmost=Double.parseDouble(town.getTownLeftmostCoordsLong());
+             double townBoundaryLongRightmost=Double.parseDouble(town.getTownRightmostCoordsLong());
+             // check coords within respective town boundary (boundary decided by rough google maps red-line)
+             if ( (inpLat<=townBoundaryLatUppermost)&& (inpLat>=townBoundaryLatLowermost) && (inpLat<=townBoundaryLongLeftmost) &&  (inpLat<=townBoundaryLongRightmost)){
+                 // location within boundary
+                 return true;
+             } else{
+                 System.out.println("Location outside town boundary. "); //todo scanner bad idea, add admin override?
+                 return false;
+             }
+
+
+
+         }
+     }
+    return true;}
+    int getLocationTableIDValue(List<Location> locations, String locationName){
+        int index;
+        for(int i=0;i<locations.size();i++){
+            if (Objects.equals(locations.get(i).getLocationName(), locationName)){
+                index = i;
+                return index;
+
+            }
+        } return index= Integer.parseInt(null);
+
+    }
+
+
+
+    // Method used to approve and add locations with associated coordinates. List<Location> unapprovedLocations
+//    public void approveLocationAndAddCoords(String locationsName, Double latCoords, Double longCoords,JdbcTemplate jdbc) {
+//        // need list too
+//
+//        LocationsCoordinates jdbcTemp= new LocationsCoordinates(jdbc);
+//        List<Location> unapprovedLocations = jdbcTemp.getFullUnapprovedLocations(jdbc);
+//        List<Location> allLocations = jdbcTemp.getFullListLocations(jdbc);
+//
+//        PlacesCoordinatesRepositoryJDBC jbdcsecond = new PlacesCoordinatesRepositoryJDBC(jdbc);
+//        List<TownWithTrails> allTowns = jbdcsecond.getAllTownCoords();
+//        int unapporvedLocationsListIndex=99;  // initialize variable to allow after if statement to run todo fix this
+//        for (int i=0; i<unapprovedLocations.size();i++){ // check if location exists
+//            if (Objects.equals(unapprovedLocations.get(i).getLocationName(), locationsName)){
+//                unapporvedLocationsListIndex =i;
+//                break;
+//
+//            } else if(!Objects.equals(unapprovedLocations.get(i).getLocationPlace(), locationsName)){
+//                System.out.println("Error, location is not valid, please check your spelling or locations table.");
+//
+//                return;
+//            }
+//            String toBeApprovedLocationTown=unapprovedLocations.get(unapporvedLocationsListIndex).getLocationPlace();
+//            int tableLocationIDOfInputtedLocation= getLocationTableIDValue(allLocations, locationsName);
+//            LocationsCoordinates unapprovedLocation= new LocationsCoordinates(tableLocationIDOfInputtedLocation,latCoords, longCoords);
+//            boolean locationWithinTownBoundaries= checkInputtedCoordsMatchTown(Double.toString(latCoords) ,Double.toString(longCoords), toBeApprovedLocationTown);
+//            if (locationWithinTownBoundaries){
+//                addLocationCoord(unapprovedLocation);
+//                return;
+//
+//
+//            } else {
+//                return;}
+//
+////            for (TownWithTrails town : allTowns){
+////                if (Objects.equals(toBeApprovedLocationTown, town.getTownName())){
+//
+//
+//                }
+//
+//            }
+
+
+
+
+           // check if location within respective town boundaries
+        }
+
+
+
+
+
+
+        /// if location id == unapproved location id,-> make sure coords within boundaries, -> approve and append lcoations table and add to coords table.
+
+//        List<String> unapprovedLocationTowns = new ArrayList<String>();
+//        for (int i=1;unapprovedLocations.size()>i;i++ ){
+//            if (Objects.equals(unapprovedLocations.get(i).getLocationPlace(), town)){
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//        }
+//
+////
+//        // unapproved list
+//        // if matches name, approve
+//        // add long/lat coords
+//        //use to update table
+//    }
+//}
diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/TownWithTrails.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/TownWithTrails.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1049ffb389b893401af7e199fc771478f4317d2
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/TownWithTrails.java
@@ -0,0 +1,51 @@
+package Team5.SmartTowns.placeswithcoordinates;
+
+public class TownWithTrails {
+
+    private String townName;
+    private String townCentreCoordsLat;
+    private String townCentreCoordsLong;
+    private String townUppermostCoordsLat;
+    private String townLowermostCoordsLat;
+    private String townLeftmostCoordsLong;
+    private String townRightmostCoordsLong;
+
+    public String getTownName() {
+        return townName;
+    }
+
+    public String getTownCentreCoordsLat() {
+        return townCentreCoordsLat;
+    }
+
+    public String getTownCentreCoordsLong() {
+        return townCentreCoordsLong;
+    }
+
+    public String getTownUppermostCoordsLat() {
+        return townUppermostCoordsLat;
+    }
+
+    public String getTownLowermostCoordsLat() {
+        return townLowermostCoordsLat;
+    }
+
+    public String getTownLeftmostCoordsLong() {
+        return townLeftmostCoordsLong;
+    }
+
+    public String getTownRightmostCoordsLong() {
+        return townRightmostCoordsLong;
+    }
+
+
+    public TownWithTrails(String townName, String townCentreCoordsLat, String townCentreCoordsLong, String townUppermostCoordsLat, String townLowermostCoordsLat, String townLeftmostCoordsLong, String townRightmostCoordsLong) {
+        this.townName = townName;
+        this.townCentreCoordsLat = townCentreCoordsLat;
+        this.townCentreCoordsLong = townCentreCoordsLong;
+        this.townUppermostCoordsLat = townUppermostCoordsLat;
+        this.townLowermostCoordsLat = townLowermostCoordsLat;
+        this.townLeftmostCoordsLong = townLeftmostCoordsLong;
+        this.townRightmostCoordsLong = townRightmostCoordsLong;
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/rewards/Pack.java b/src/main/java/Team5/SmartTowns/rewards/Pack.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef7fe7409f6e4fdfee3494a0dc932981df2c6907
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/Pack.java
@@ -0,0 +1,28 @@
+package Team5.SmartTowns.rewards;
+
+import lombok.Getter;
+
+import java.util.List;
+
+@Getter
+public class Pack extends Reward{
+
+    int progression; //0-100%;
+
+    public Pack(int id, String name, String description) {
+        super(id, name, description);
+        displayImg = super.findImagePath();
+    }
+
+    public void setProgression(List<Sticker> packStickers, List<Sticker> userStickers){
+        /* Takes in a list with all stickers in the pack and a list with all userStickers from the pack
+        *  These lists are taken from database in the Controllers via SQL query*/
+        int totalAmount = packStickers.size();
+        int hasAmount = userStickers.size();
+        progression = (int) ((totalAmount/hasAmount) * 100);
+    }
+    @Override
+    public String getImgFolder() {
+        return "packs";
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/rewards/Reward.java b/src/main/java/Team5/SmartTowns/rewards/Reward.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a2d9145817a6e6935e5cc7dca283c47c491ee53
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/Reward.java
@@ -0,0 +1,37 @@
+package Team5.SmartTowns.rewards;
+
+import lombok.Getter;
+
+import java.io.File;
+
+@Getter
+public abstract class Reward {
+    /* Abstract class for all rewards */
+
+    int id;
+    String displayImg; //Path to the image file
+    String name;
+    String description;
+
+    public Reward(int id, String name, String description) {
+        //Default constructor
+        this.id = id;
+        this.name = name;
+        this.description = description;
+    }
+
+    public abstract String getImgFolder();
+    /*Returns folder in which images are located*/
+
+    public String getDefaultImg(){
+        /*Returns the name of the default image to be used in case no image is found*/
+        return "0.png";
+    }
+    public String findImagePath(){
+        /* Finds the image in the Path folder, if image is not found assigns default image */
+        String imgPath = "images/rewards/" + getImgFolder() + "/" + id + ".png";
+        String notFoundPath = "images/rewards/" + getImgFolder() + "/" + getDefaultImg();
+        File imgFile = new File("src/main/resources/static/" + imgPath);
+        return imgFile.exists() ? imgPath : notFoundPath;
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/rewards/RewardsRepository.java b/src/main/java/Team5/SmartTowns/rewards/RewardsRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..51bde7f297613873b38b0eec939f58d9c1dc1acd
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/RewardsRepository.java
@@ -0,0 +1,18 @@
+//Holds locations data repository
+package Team5.SmartTowns.rewards;
+
+import java.util.List;
+
+public interface RewardsRepository {
+    List<Sticker> getAllStickers();
+
+    List<Sticker> getAllStickersFromPack(int packID);
+
+    List<Sticker> getAllStickersFromUser(int userID);
+
+    List<Pack> getAllPacks();
+
+    Pack findPackByID(int id);
+
+}
+
diff --git a/src/main/java/Team5/SmartTowns/rewards/RewardsRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/RewardsRepositoryJDBC.java
new file mode 100644
index 0000000000000000000000000000000000000000..65eaa9843ec3af33e994ea34ed8d219ce712ffaf
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/RewardsRepositoryJDBC.java
@@ -0,0 +1,73 @@
+//Implements the locations repository using JDBC
+package Team5.SmartTowns.rewards;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public class RewardsRepositoryJDBC implements RewardsRepository {
+    private final JdbcTemplate jdbc;
+    private RowMapper<Badge> badgeMapper;
+    private RowMapper<Sticker> stickerMapper;
+    private RowMapper<Pack> packMapper;
+
+    public RewardsRepositoryJDBC(JdbcTemplate aJdbc) {
+        this.jdbc = aJdbc;
+        setStickerMapper();
+        setPackMapper();
+    }
+
+    private void setStickerMapper(){
+        stickerMapper = (rs, i) -> new Sticker(
+                rs.getInt("packID"),
+                rs.getInt("stickerID"),
+                rs.getString("name"),
+                rs.getString("description"),
+                rs.getInt("rarity")
+        );
+    }
+    private void setPackMapper(){
+        packMapper = (rs, i) -> new Pack(
+                rs.getInt("id"),
+                rs.getString("name"),
+                rs.getString("description")
+        );
+    }
+
+    @Override
+    public List<Sticker> getAllStickers(){
+        String sql= "SELECT * FROM stickers";
+        return jdbc.query(sql, stickerMapper);
+    }
+
+    @Override
+    public List<Pack> getAllPacks() {
+        String sql= "SELECT * FROM packs";
+        return jdbc.query(sql, packMapper);
+    }
+
+    @Override
+    public List<Sticker> getAllStickersFromPack(int packID){
+        String sql= "SELECT * FROM stickers WHERE packID="+packID;
+        return jdbc.query(sql, stickerMapper);
+    }
+
+    @Override
+    public List<Sticker> getAllStickersFromUser(int userID) {
+        /* FINDS ALL STICKERS UNLOCKED BY THE GIVEN USER */
+        String sql= "SELECT * FROM stickers LEFT JOIN stickerprogress " +
+                "ON (stickers.id, stickers.packID) = (stickerprogress.stickerID, stickerprogress.packID) " +
+                "WHERE stickerprogress.userID="+userID;
+        return jdbc.query(sql, stickerMapper);
+    }
+
+    @Override
+    public Pack findPackByID(int id){
+        String sql= "SELECT * FROM packs WHERE id="+id;
+        List<Pack> result = jdbc.query(sql, packMapper);
+        return result.isEmpty() ? null : result.get(0);
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/rewards/Sticker.java b/src/main/java/Team5/SmartTowns/rewards/Sticker.java
index 4fa498c61e7d5748e7d6dcfc26c7c6442dfd8cc4..738409e1483a15be6451af7b68e677329ba19eae 100644
--- a/src/main/java/Team5/SmartTowns/rewards/Sticker.java
+++ b/src/main/java/Team5/SmartTowns/rewards/Sticker.java
@@ -17,7 +17,7 @@ public class Sticker {
     int rarity; //1-5
     boolean hasSticker;
 
-    public Sticker(int id, String name, String description, int rarity) {
+    public Sticker(int id, int stickerID, String name, String description, int rarity) {
         this.id = id;
         this.name = name;
         this.description = description;
diff --git a/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java
index 64df71bc3da3eff327377798185111aee3be7867..185bd5e4eb30c9d8db0b65f3ff37241ded9b92b2 100644
--- a/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java
+++ b/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java
@@ -19,7 +19,7 @@ public class StickersRepositoryJDBC implements StickersRepository {
     private void setStickerMapper(){
         stickerMapper = (rs, i) -> new Sticker(
                 rs.getInt("stickerID"),
-                rs.getString("name"),
+                rs.getInt("stickerID"), rs.getString("name"),
                 rs.getString("description"),
                 rs.getInt("rarity")
         );
diff --git a/src/main/node_modules/.package-lock.json b/src/main/node_modules/.package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..c771511d25e96ca1a3c94f9d7d788bf956e3f0e2
--- /dev/null
+++ b/src/main/node_modules/.package-lock.json
@@ -0,0 +1,13 @@
+{
+  "name": "main",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "node_modules/html5-qrcode": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz",
+      "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ=="
+    }
+  }
+}
diff --git a/src/main/node_modules/html5-qrcode/LICENSE b/src/main/node_modules/html5-qrcode/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/README.md b/src/main/node_modules/html5-qrcode/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/camera/core-impl.d.ts b/src/main/node_modules/html5-qrcode/camera/core-impl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/camera/core.d.ts b/src/main/node_modules/html5-qrcode/camera/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/camera/factories.d.ts b/src/main/node_modules/html5-qrcode/camera/factories.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/camera/permissions.d.ts b/src/main/node_modules/html5-qrcode/camera/permissions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/camera/retriever.d.ts b/src/main/node_modules/html5-qrcode/camera/retriever.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/core-impl.d.ts b/src/main/node_modules/html5-qrcode/cjs/camera/core-impl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/core-impl.js b/src/main/node_modules/html5-qrcode/cjs/camera/core-impl.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/core-impl.js.map b/src/main/node_modules/html5-qrcode/cjs/camera/core-impl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/core.d.ts b/src/main/node_modules/html5-qrcode/cjs/camera/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/core.js b/src/main/node_modules/html5-qrcode/cjs/camera/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/core.js.map b/src/main/node_modules/html5-qrcode/cjs/camera/core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/factories.d.ts b/src/main/node_modules/html5-qrcode/cjs/camera/factories.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/factories.js b/src/main/node_modules/html5-qrcode/cjs/camera/factories.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/factories.js.map b/src/main/node_modules/html5-qrcode/cjs/camera/factories.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/permissions.d.ts b/src/main/node_modules/html5-qrcode/cjs/camera/permissions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/permissions.js b/src/main/node_modules/html5-qrcode/cjs/camera/permissions.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/permissions.js.map b/src/main/node_modules/html5-qrcode/cjs/camera/permissions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/retriever.d.ts b/src/main/node_modules/html5-qrcode/cjs/camera/retriever.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/retriever.js b/src/main/node_modules/html5-qrcode/cjs/camera/retriever.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/camera/retriever.js.map b/src/main/node_modules/html5-qrcode/cjs/camera/retriever.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/code-decoder.d.ts b/src/main/node_modules/html5-qrcode/cjs/code-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/code-decoder.js b/src/main/node_modules/html5-qrcode/cjs/code-decoder.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/code-decoder.js.map b/src/main/node_modules/html5-qrcode/cjs/code-decoder.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/core.d.ts b/src/main/node_modules/html5-qrcode/cjs/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/core.js b/src/main/node_modules/html5-qrcode/cjs/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/core.js.map b/src/main/node_modules/html5-qrcode/cjs/core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/experimental-features.d.ts b/src/main/node_modules/html5-qrcode/cjs/experimental-features.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/experimental-features.js b/src/main/node_modules/html5-qrcode/cjs/experimental-features.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/experimental-features.js.map b/src/main/node_modules/html5-qrcode/cjs/experimental-features.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/html5-qrcode-scanner.d.ts b/src/main/node_modules/html5-qrcode/cjs/html5-qrcode-scanner.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/html5-qrcode-scanner.js b/src/main/node_modules/html5-qrcode/cjs/html5-qrcode-scanner.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/html5-qrcode-scanner.js.map b/src/main/node_modules/html5-qrcode/cjs/html5-qrcode-scanner.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/html5-qrcode.d.ts b/src/main/node_modules/html5-qrcode/cjs/html5-qrcode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/html5-qrcode.js b/src/main/node_modules/html5-qrcode/cjs/html5-qrcode.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/html5-qrcode.js.map b/src/main/node_modules/html5-qrcode/cjs/html5-qrcode.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/image-assets.d.ts b/src/main/node_modules/html5-qrcode/cjs/image-assets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/image-assets.js b/src/main/node_modules/html5-qrcode/cjs/image-assets.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/image-assets.js.map b/src/main/node_modules/html5-qrcode/cjs/image-assets.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/index.d.ts b/src/main/node_modules/html5-qrcode/cjs/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/index.js b/src/main/node_modules/html5-qrcode/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/index.js.map b/src/main/node_modules/html5-qrcode/cjs/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/native-bar-code-detector.d.ts b/src/main/node_modules/html5-qrcode/cjs/native-bar-code-detector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/native-bar-code-detector.js b/src/main/node_modules/html5-qrcode/cjs/native-bar-code-detector.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/native-bar-code-detector.js.map b/src/main/node_modules/html5-qrcode/cjs/native-bar-code-detector.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/state-manager.d.ts b/src/main/node_modules/html5-qrcode/cjs/state-manager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/state-manager.js b/src/main/node_modules/html5-qrcode/cjs/state-manager.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/state-manager.js.map b/src/main/node_modules/html5-qrcode/cjs/state-manager.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/storage.d.ts b/src/main/node_modules/html5-qrcode/cjs/storage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/storage.js b/src/main/node_modules/html5-qrcode/cjs/storage.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/storage.js.map b/src/main/node_modules/html5-qrcode/cjs/storage.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/strings.d.ts b/src/main/node_modules/html5-qrcode/cjs/strings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/strings.js b/src/main/node_modules/html5-qrcode/cjs/strings.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/strings.js.map b/src/main/node_modules/html5-qrcode/cjs/strings.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui.js b/src/main/node_modules/html5-qrcode/cjs/ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui.js.map b/src/main/node_modules/html5-qrcode/cjs/ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/base.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/base.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/base.js b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/base.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/base.js.map b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/base.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-selection-ui.js b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-selection-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-selection-ui.js.map b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-selection-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-zoom-ui.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-zoom-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-zoom-ui.js b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-zoom-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-zoom-ui.js.map b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/camera-zoom-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/file-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/file-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/file-selection-ui.js b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/file-selection-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/file-selection-ui.js.map b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/file-selection-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/scan-type-selector.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/scan-type-selector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/scan-type-selector.js b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/scan-type-selector.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/scan-type-selector.js.map b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/scan-type-selector.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/torch-button.d.ts b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/torch-button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/torch-button.js b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/torch-button.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/ui/scanner/torch-button.js.map b/src/main/node_modules/html5-qrcode/cjs/ui/scanner/torch-button.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/utils.d.ts b/src/main/node_modules/html5-qrcode/cjs/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/utils.js b/src/main/node_modules/html5-qrcode/cjs/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/utils.js.map b/src/main/node_modules/html5-qrcode/cjs/utils.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/zxing-html5-qrcode-decoder.d.ts b/src/main/node_modules/html5-qrcode/cjs/zxing-html5-qrcode-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/zxing-html5-qrcode-decoder.js b/src/main/node_modules/html5-qrcode/cjs/zxing-html5-qrcode-decoder.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/cjs/zxing-html5-qrcode-decoder.js.map b/src/main/node_modules/html5-qrcode/cjs/zxing-html5-qrcode-decoder.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/code-decoder.d.ts b/src/main/node_modules/html5-qrcode/code-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/core.d.ts b/src/main/node_modules/html5-qrcode/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/core-impl.d.ts b/src/main/node_modules/html5-qrcode/es2015/camera/core-impl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/core-impl.js b/src/main/node_modules/html5-qrcode/es2015/camera/core-impl.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/core-impl.js.map b/src/main/node_modules/html5-qrcode/es2015/camera/core-impl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/core.d.ts b/src/main/node_modules/html5-qrcode/es2015/camera/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/core.js b/src/main/node_modules/html5-qrcode/es2015/camera/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/core.js.map b/src/main/node_modules/html5-qrcode/es2015/camera/core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/factories.d.ts b/src/main/node_modules/html5-qrcode/es2015/camera/factories.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/factories.js b/src/main/node_modules/html5-qrcode/es2015/camera/factories.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/factories.js.map b/src/main/node_modules/html5-qrcode/es2015/camera/factories.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/permissions.d.ts b/src/main/node_modules/html5-qrcode/es2015/camera/permissions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/permissions.js b/src/main/node_modules/html5-qrcode/es2015/camera/permissions.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/permissions.js.map b/src/main/node_modules/html5-qrcode/es2015/camera/permissions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/retriever.d.ts b/src/main/node_modules/html5-qrcode/es2015/camera/retriever.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/retriever.js b/src/main/node_modules/html5-qrcode/es2015/camera/retriever.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/camera/retriever.js.map b/src/main/node_modules/html5-qrcode/es2015/camera/retriever.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/code-decoder.d.ts b/src/main/node_modules/html5-qrcode/es2015/code-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/code-decoder.js b/src/main/node_modules/html5-qrcode/es2015/code-decoder.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/code-decoder.js.map b/src/main/node_modules/html5-qrcode/es2015/code-decoder.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/core.d.ts b/src/main/node_modules/html5-qrcode/es2015/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/core.js b/src/main/node_modules/html5-qrcode/es2015/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/core.js.map b/src/main/node_modules/html5-qrcode/es2015/core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/experimental-features.d.ts b/src/main/node_modules/html5-qrcode/es2015/experimental-features.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/experimental-features.js b/src/main/node_modules/html5-qrcode/es2015/experimental-features.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/experimental-features.js.map b/src/main/node_modules/html5-qrcode/es2015/experimental-features.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/html5-qrcode-scanner.d.ts b/src/main/node_modules/html5-qrcode/es2015/html5-qrcode-scanner.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/html5-qrcode-scanner.js b/src/main/node_modules/html5-qrcode/es2015/html5-qrcode-scanner.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/html5-qrcode-scanner.js.map b/src/main/node_modules/html5-qrcode/es2015/html5-qrcode-scanner.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/html5-qrcode.d.ts b/src/main/node_modules/html5-qrcode/es2015/html5-qrcode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/html5-qrcode.js b/src/main/node_modules/html5-qrcode/es2015/html5-qrcode.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/html5-qrcode.js.map b/src/main/node_modules/html5-qrcode/es2015/html5-qrcode.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/image-assets.d.ts b/src/main/node_modules/html5-qrcode/es2015/image-assets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/image-assets.js b/src/main/node_modules/html5-qrcode/es2015/image-assets.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/image-assets.js.map b/src/main/node_modules/html5-qrcode/es2015/image-assets.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/index.d.ts b/src/main/node_modules/html5-qrcode/es2015/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/index.js b/src/main/node_modules/html5-qrcode/es2015/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/index.js.map b/src/main/node_modules/html5-qrcode/es2015/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/native-bar-code-detector.d.ts b/src/main/node_modules/html5-qrcode/es2015/native-bar-code-detector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/native-bar-code-detector.js b/src/main/node_modules/html5-qrcode/es2015/native-bar-code-detector.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/native-bar-code-detector.js.map b/src/main/node_modules/html5-qrcode/es2015/native-bar-code-detector.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/state-manager.d.ts b/src/main/node_modules/html5-qrcode/es2015/state-manager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/state-manager.js b/src/main/node_modules/html5-qrcode/es2015/state-manager.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/state-manager.js.map b/src/main/node_modules/html5-qrcode/es2015/state-manager.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/storage.d.ts b/src/main/node_modules/html5-qrcode/es2015/storage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/storage.js b/src/main/node_modules/html5-qrcode/es2015/storage.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/storage.js.map b/src/main/node_modules/html5-qrcode/es2015/storage.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/strings.d.ts b/src/main/node_modules/html5-qrcode/es2015/strings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/strings.js b/src/main/node_modules/html5-qrcode/es2015/strings.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/strings.js.map b/src/main/node_modules/html5-qrcode/es2015/strings.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui.js b/src/main/node_modules/html5-qrcode/es2015/ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui.js.map b/src/main/node_modules/html5-qrcode/es2015/ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/base.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/base.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/base.js b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/base.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/base.js.map b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/base.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-selection-ui.js b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-selection-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-selection-ui.js.map b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-selection-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-zoom-ui.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-zoom-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-zoom-ui.js b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-zoom-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-zoom-ui.js.map b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/camera-zoom-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/file-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/file-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/file-selection-ui.js b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/file-selection-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/file-selection-ui.js.map b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/file-selection-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/scan-type-selector.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/scan-type-selector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/scan-type-selector.js b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/scan-type-selector.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/scan-type-selector.js.map b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/scan-type-selector.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/torch-button.d.ts b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/torch-button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/torch-button.js b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/torch-button.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/ui/scanner/torch-button.js.map b/src/main/node_modules/html5-qrcode/es2015/ui/scanner/torch-button.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/utils.d.ts b/src/main/node_modules/html5-qrcode/es2015/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/utils.js b/src/main/node_modules/html5-qrcode/es2015/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/utils.js.map b/src/main/node_modules/html5-qrcode/es2015/utils.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.d.ts b/src/main/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.js b/src/main/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.js.map b/src/main/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/core-impl.d.ts b/src/main/node_modules/html5-qrcode/esm/camera/core-impl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/core-impl.js b/src/main/node_modules/html5-qrcode/esm/camera/core-impl.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/core-impl.js.map b/src/main/node_modules/html5-qrcode/esm/camera/core-impl.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/core.d.ts b/src/main/node_modules/html5-qrcode/esm/camera/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/core.js b/src/main/node_modules/html5-qrcode/esm/camera/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/core.js.map b/src/main/node_modules/html5-qrcode/esm/camera/core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/factories.d.ts b/src/main/node_modules/html5-qrcode/esm/camera/factories.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/factories.js b/src/main/node_modules/html5-qrcode/esm/camera/factories.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/factories.js.map b/src/main/node_modules/html5-qrcode/esm/camera/factories.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/permissions.d.ts b/src/main/node_modules/html5-qrcode/esm/camera/permissions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/permissions.js b/src/main/node_modules/html5-qrcode/esm/camera/permissions.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/permissions.js.map b/src/main/node_modules/html5-qrcode/esm/camera/permissions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/retriever.d.ts b/src/main/node_modules/html5-qrcode/esm/camera/retriever.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/retriever.js b/src/main/node_modules/html5-qrcode/esm/camera/retriever.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/camera/retriever.js.map b/src/main/node_modules/html5-qrcode/esm/camera/retriever.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/code-decoder.d.ts b/src/main/node_modules/html5-qrcode/esm/code-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/code-decoder.js b/src/main/node_modules/html5-qrcode/esm/code-decoder.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/code-decoder.js.map b/src/main/node_modules/html5-qrcode/esm/code-decoder.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/core.d.ts b/src/main/node_modules/html5-qrcode/esm/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/core.js b/src/main/node_modules/html5-qrcode/esm/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/core.js.map b/src/main/node_modules/html5-qrcode/esm/core.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/experimental-features.d.ts b/src/main/node_modules/html5-qrcode/esm/experimental-features.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/experimental-features.js b/src/main/node_modules/html5-qrcode/esm/experimental-features.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/experimental-features.js.map b/src/main/node_modules/html5-qrcode/esm/experimental-features.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/html5-qrcode-scanner.d.ts b/src/main/node_modules/html5-qrcode/esm/html5-qrcode-scanner.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/html5-qrcode-scanner.js b/src/main/node_modules/html5-qrcode/esm/html5-qrcode-scanner.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/html5-qrcode-scanner.js.map b/src/main/node_modules/html5-qrcode/esm/html5-qrcode-scanner.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/html5-qrcode.d.ts b/src/main/node_modules/html5-qrcode/esm/html5-qrcode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/html5-qrcode.js b/src/main/node_modules/html5-qrcode/esm/html5-qrcode.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/html5-qrcode.js.map b/src/main/node_modules/html5-qrcode/esm/html5-qrcode.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/image-assets.d.ts b/src/main/node_modules/html5-qrcode/esm/image-assets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/image-assets.js b/src/main/node_modules/html5-qrcode/esm/image-assets.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/image-assets.js.map b/src/main/node_modules/html5-qrcode/esm/image-assets.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/index.d.ts b/src/main/node_modules/html5-qrcode/esm/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/index.js b/src/main/node_modules/html5-qrcode/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/index.js.map b/src/main/node_modules/html5-qrcode/esm/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/native-bar-code-detector.d.ts b/src/main/node_modules/html5-qrcode/esm/native-bar-code-detector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/native-bar-code-detector.js b/src/main/node_modules/html5-qrcode/esm/native-bar-code-detector.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/native-bar-code-detector.js.map b/src/main/node_modules/html5-qrcode/esm/native-bar-code-detector.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/state-manager.d.ts b/src/main/node_modules/html5-qrcode/esm/state-manager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/state-manager.js b/src/main/node_modules/html5-qrcode/esm/state-manager.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/state-manager.js.map b/src/main/node_modules/html5-qrcode/esm/state-manager.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/storage.d.ts b/src/main/node_modules/html5-qrcode/esm/storage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/storage.js b/src/main/node_modules/html5-qrcode/esm/storage.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/storage.js.map b/src/main/node_modules/html5-qrcode/esm/storage.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/strings.d.ts b/src/main/node_modules/html5-qrcode/esm/strings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/strings.js b/src/main/node_modules/html5-qrcode/esm/strings.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/strings.js.map b/src/main/node_modules/html5-qrcode/esm/strings.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui.d.ts b/src/main/node_modules/html5-qrcode/esm/ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui.js b/src/main/node_modules/html5-qrcode/esm/ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui.js.map b/src/main/node_modules/html5-qrcode/esm/ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/base.d.ts b/src/main/node_modules/html5-qrcode/esm/ui/scanner/base.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/base.js b/src/main/node_modules/html5-qrcode/esm/ui/scanner/base.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/base.js.map b/src/main/node_modules/html5-qrcode/esm/ui/scanner/base.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-selection-ui.js b/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-selection-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-selection-ui.js.map b/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-selection-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-zoom-ui.d.ts b/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-zoom-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-zoom-ui.js b/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-zoom-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-zoom-ui.js.map b/src/main/node_modules/html5-qrcode/esm/ui/scanner/camera-zoom-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/file-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/esm/ui/scanner/file-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/file-selection-ui.js b/src/main/node_modules/html5-qrcode/esm/ui/scanner/file-selection-ui.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/file-selection-ui.js.map b/src/main/node_modules/html5-qrcode/esm/ui/scanner/file-selection-ui.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/scan-type-selector.d.ts b/src/main/node_modules/html5-qrcode/esm/ui/scanner/scan-type-selector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/scan-type-selector.js b/src/main/node_modules/html5-qrcode/esm/ui/scanner/scan-type-selector.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/scan-type-selector.js.map b/src/main/node_modules/html5-qrcode/esm/ui/scanner/scan-type-selector.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/torch-button.d.ts b/src/main/node_modules/html5-qrcode/esm/ui/scanner/torch-button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/torch-button.js b/src/main/node_modules/html5-qrcode/esm/ui/scanner/torch-button.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/ui/scanner/torch-button.js.map b/src/main/node_modules/html5-qrcode/esm/ui/scanner/torch-button.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/utils.d.ts b/src/main/node_modules/html5-qrcode/esm/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/utils.js b/src/main/node_modules/html5-qrcode/esm/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/utils.js.map b/src/main/node_modules/html5-qrcode/esm/utils.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/zxing-html5-qrcode-decoder.d.ts b/src/main/node_modules/html5-qrcode/esm/zxing-html5-qrcode-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/zxing-html5-qrcode-decoder.js b/src/main/node_modules/html5-qrcode/esm/zxing-html5-qrcode-decoder.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/esm/zxing-html5-qrcode-decoder.js.map b/src/main/node_modules/html5-qrcode/esm/zxing-html5-qrcode-decoder.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/experimental-features.d.ts b/src/main/node_modules/html5-qrcode/experimental-features.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/html5-qrcode-scanner.d.ts b/src/main/node_modules/html5-qrcode/html5-qrcode-scanner.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/html5-qrcode.d.ts b/src/main/node_modules/html5-qrcode/html5-qrcode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/html5-qrcode.min.js b/src/main/node_modules/html5-qrcode/html5-qrcode.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/image-assets.d.ts b/src/main/node_modules/html5-qrcode/image-assets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/index.d.ts b/src/main/node_modules/html5-qrcode/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/native-bar-code-detector.d.ts b/src/main/node_modules/html5-qrcode/native-bar-code-detector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/package.json b/src/main/node_modules/html5-qrcode/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bc7616ad5306f6afcea5b530326b51d8d2cc44c7
--- /dev/null
+++ b/src/main/node_modules/html5-qrcode/package.json
@@ -0,0 +1,93 @@
+{
+  "name": "html5-qrcode",
+  "version": "2.3.8",
+  "description": "A cross platform HTML5 QR Code & bar code scanner",
+  "main": "./cjs/index.js",
+  "module": "./esm/index.js",
+  "typings": "./esm/index.d.ts",
+  "esnext": "./es2015/index.js",
+  "unpkg": "./html5-qrcode.min.js",
+  "scripts": {
+    "build-windows": "npm run build:es2015 && npm run build:esm && npm run build:esnext && npm run build:cjs && npm run build:umd_windows && npm run build:typing && npm run build:copy_windows",
+    "test": "npm run-script test:build && npm run-script test:run",
+    "test_windows": "npm run-script test:build && npm run-script test:run_windows",
+    "test:build": "tsc --build tsconfig.test.json",
+    "test:run_windows": ".\\scripts\\test-run.bat",
+    "test:run": "./scripts/test-run.sh",
+    "lint-md": "remark .",
+    "clean": "rm -Rf ./lib/* ./build/* ./meta/bundlesize/* ./meta/coverage/* ./.rpt2_cache  ./dist/* ./src/*.d.ts",
+    "prebuild": "npm run clean",
+    "postbuild": "cp -R ./third_party ./dist/third_party",
+    "build": "npm run build:es2015 && npm run build:esm && npm run build:esnext && npm run build:cjs && npm run build:umd && npm run build:typing && npm run build:copy",
+    "build:es2015": "tsc --build tsconfig.lib-es2015.json",
+    "build:esm": "tsc --build tsconfig.lib-esm.json",
+    "build:esnext": "tsc --build tsconfig.lib-esm.json",
+    "build:cjs": "tsc --build tsconfig.lib-cjs.json",
+    "build:typing": "tsc --emitDeclarationOnly --outDir ./dist",
+    "build:umd": "./scripts/build-webpack.sh",
+    "build:umd_windows": ".\\scripts\\build-webpack.bat",
+    "build:copy": "cp README.md dist && cp package.json dist && cp LICENSE dist && cp -R src dist/src",
+    "build:copy_windows": "copy README.md dist && copy package.json dist && copy LICENSE dist",
+    "internal_release": "npm run build && cp dist/html5-qrcode.min.js minified/html5-qrcode.min.js",
+    "release": "npm run build && cp dist/html5-qrcode.min.js minified/html5-qrcode.min.js && cd dist && npm publish",
+    "release_windows": "npm run build && cp dist\\html5-qrcode.min.js minified\\html5-qrcode.min.js && cd dist && npm publish",
+    "doc_gen": "npx typedoc --excludePrivate src/index.ts"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mebjas/html5-qrcode.git"
+  },
+  "keywords": [
+    "html5",
+    "qrcode",
+    "html",
+    "camera",
+    "scanner",
+    "barcode",
+    "barcode 1d",
+    "barcode 2d"
+  ],
+  "author": "minhazav@gmail.com",
+  "license": "Apache-2.0",
+  "bugs": {
+    "url": "https://github.com/mebjas/html5-qrcode/issues"
+  },
+  "homepage": "https://github.com/mebjas/html5-qrcode#readme",
+  "devDependencies": {
+    "@babel/cli": "^7.10.5",
+    "@babel/core": "^7.11.4",
+    "@babel/plugin-proposal-class-properties": "^7.10.4",
+    "@babel/preset-env": "^7.11.0",
+    "@types/chai": "^4.3.0",
+    "@types/mocha": "^9.0.0",
+    "babel-minify": "^0.5.1",
+    "chai": "^4.3.4",
+    "docusaurus-plugin-typedoc": "^0.18.0",
+    "expose-loader": "^2.0.0",
+    "jsdom": "20.0.2",
+    "jsdom-global": "3.0.2",
+    "mocha": "^9.1.3",
+    "mocha-lcov-reporter": "^1.3.0",
+    "promise-polyfill": "^8.1.3",
+    "remark-cli": "^9.0.0",
+    "remark-preset-lint-recommended": "^5.0.0",
+    "rewire": "^5.0.0",
+    "ts-loader": "^9.1.2",
+    "ts-node": "^10.4.0",
+    "tsconfig-paths": "^3.12.0",
+    "typedoc": "^0.23.28",
+    "typedoc-plugin-markdown": "^3.14.0",
+    "typescript": "^4.3.2",
+    "typings": "^2.1.1",
+    "webpack": "^5.37.0",
+    "webpack-cli": "^4.7.0"
+  },
+  "remarkConfig": {
+    "plugins": [
+      "remark-preset-lint-recommended"
+    ]
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/src/main/node_modules/html5-qrcode/src/camera/core-impl.d.ts b/src/main/node_modules/html5-qrcode/src/camera/core-impl.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/core-impl.ts b/src/main/node_modules/html5-qrcode/src/camera/core-impl.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/core.d.ts b/src/main/node_modules/html5-qrcode/src/camera/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/core.ts b/src/main/node_modules/html5-qrcode/src/camera/core.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/factories.d.ts b/src/main/node_modules/html5-qrcode/src/camera/factories.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/factories.ts b/src/main/node_modules/html5-qrcode/src/camera/factories.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/permissions.d.ts b/src/main/node_modules/html5-qrcode/src/camera/permissions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/permissions.ts b/src/main/node_modules/html5-qrcode/src/camera/permissions.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/retriever.d.ts b/src/main/node_modules/html5-qrcode/src/camera/retriever.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/camera/retriever.ts b/src/main/node_modules/html5-qrcode/src/camera/retriever.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/code-decoder.d.ts b/src/main/node_modules/html5-qrcode/src/code-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/code-decoder.ts b/src/main/node_modules/html5-qrcode/src/code-decoder.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/core.d.ts b/src/main/node_modules/html5-qrcode/src/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/core.ts b/src/main/node_modules/html5-qrcode/src/core.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/experimental-features.d.ts b/src/main/node_modules/html5-qrcode/src/experimental-features.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/experimental-features.ts b/src/main/node_modules/html5-qrcode/src/experimental-features.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/html5-qrcode-scanner.d.ts b/src/main/node_modules/html5-qrcode/src/html5-qrcode-scanner.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/html5-qrcode-scanner.ts b/src/main/node_modules/html5-qrcode/src/html5-qrcode-scanner.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/html5-qrcode.d.ts b/src/main/node_modules/html5-qrcode/src/html5-qrcode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/html5-qrcode.ts b/src/main/node_modules/html5-qrcode/src/html5-qrcode.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/image-assets.d.ts b/src/main/node_modules/html5-qrcode/src/image-assets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/image-assets.ts b/src/main/node_modules/html5-qrcode/src/image-assets.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/index.d.ts b/src/main/node_modules/html5-qrcode/src/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/index.ts b/src/main/node_modules/html5-qrcode/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/native-bar-code-detector.d.ts b/src/main/node_modules/html5-qrcode/src/native-bar-code-detector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/native-bar-code-detector.ts b/src/main/node_modules/html5-qrcode/src/native-bar-code-detector.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/state-manager.d.ts b/src/main/node_modules/html5-qrcode/src/state-manager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/state-manager.ts b/src/main/node_modules/html5-qrcode/src/state-manager.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/storage.d.ts b/src/main/node_modules/html5-qrcode/src/storage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/storage.ts b/src/main/node_modules/html5-qrcode/src/storage.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/strings.d.ts b/src/main/node_modules/html5-qrcode/src/strings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/strings.ts b/src/main/node_modules/html5-qrcode/src/strings.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui.d.ts b/src/main/node_modules/html5-qrcode/src/ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui.ts b/src/main/node_modules/html5-qrcode/src/ui.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/base.d.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/base.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/base.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/base.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-selection-ui.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-selection-ui.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-zoom-ui.d.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-zoom-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-zoom-ui.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/camera-zoom-ui.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/file-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/file-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/file-selection-ui.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/file-selection-ui.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/scan-type-selector.d.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/scan-type-selector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/scan-type-selector.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/scan-type-selector.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/torch-button.d.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/torch-button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/ui/scanner/torch-button.ts b/src/main/node_modules/html5-qrcode/src/ui/scanner/torch-button.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/utils.d.ts b/src/main/node_modules/html5-qrcode/src/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/utils.ts b/src/main/node_modules/html5-qrcode/src/utils.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/zxing-html5-qrcode-decoder.d.ts b/src/main/node_modules/html5-qrcode/src/zxing-html5-qrcode-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/src/zxing-html5-qrcode-decoder.ts b/src/main/node_modules/html5-qrcode/src/zxing-html5-qrcode-decoder.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/state-manager.d.ts b/src/main/node_modules/html5-qrcode/state-manager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/storage.d.ts b/src/main/node_modules/html5-qrcode/storage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/strings.d.ts b/src/main/node_modules/html5-qrcode/strings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/third_party/zxing-js.umd.d.ts b/src/main/node_modules/html5-qrcode/third_party/zxing-js.umd.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/third_party/zxing-js.umd.js b/src/main/node_modules/html5-qrcode/third_party/zxing-js.umd.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui.d.ts b/src/main/node_modules/html5-qrcode/ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui/scanner/base.d.ts b/src/main/node_modules/html5-qrcode/ui/scanner/base.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui/scanner/camera-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/ui/scanner/camera-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui/scanner/camera-zoom-ui.d.ts b/src/main/node_modules/html5-qrcode/ui/scanner/camera-zoom-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui/scanner/file-selection-ui.d.ts b/src/main/node_modules/html5-qrcode/ui/scanner/file-selection-ui.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui/scanner/scan-type-selector.d.ts b/src/main/node_modules/html5-qrcode/ui/scanner/scan-type-selector.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/ui/scanner/torch-button.d.ts b/src/main/node_modules/html5-qrcode/ui/scanner/torch-button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/utils.d.ts b/src/main/node_modules/html5-qrcode/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/node_modules/html5-qrcode/zxing-html5-qrcode-decoder.d.ts b/src/main/node_modules/html5-qrcode/zxing-html5-qrcode-decoder.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/package-lock.json b/src/main/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..f87cd0fa617c70015c9a214b517c1c4ccb8d53ce
--- /dev/null
+++ b/src/main/package-lock.json
@@ -0,0 +1,20 @@
+{
+  "name": "main",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "main",
+      "version": "1.0.0",
+      "dependencies": {
+        "html5-qrcode": "^2.3.8"
+      }
+    },
+    "node_modules/html5-qrcode": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz",
+      "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ=="
+    }
+  }
+}
diff --git a/src/main/package.json b/src/main/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b58ec6ea1338ef9ef2376b74567a94cef9c2efd5
--- /dev/null
+++ b/src/main/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "main",
+  "version": "1.0.0",
+  "dependencies": {
+    "html5-qrcode": "^2.3.8"
+  }
+}
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index a7d12a6e979748f728182d68b912eab7aa3c8661..f73e28c67333486c732b83f4f6833e94fd348af5 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,6 +1,6 @@
 delete from users;
-insert into users (email, name, dragonProgress) value ('hannah@gmail.com', 'Hannah', '90');
-insert into users (userID, email, name, dragonProgress) value ('2', 'nigel@gmail.com', 'Nigel', '40');
+insert into users ( email, name, dragonProgress) value ('hannah@gmail.com', 'Hannah', '90');
+insert into users ( email, name, dragonProgress) value ( 'nigel@gmail.com', 'Nigel', '40');
 
 delete from trails;
 insert into trails ( Name) value ( 'Caerphilly Coffee Trail');
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 22d745ed9ca3bb315c801de74460507e55c94e97..426885b47b573495142b17e35718be72fd4babb4 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -20,12 +20,12 @@ create table if not exists locations
     locationTrailID varchar(128)
 )   engine=InnoDB;
 
-drop table if exists users;
-create table if not exists users
+drop table if exists userss;
+create table if not exists userss
 (
     userID bigint auto_increment primary key,
     email varchar(128),
-    name varchar(128),
+    named varchar(128),
     dragonProgress int
 ) engine=InnoDB;
 
diff --git a/src/main/resources/static/css/locationPageFragsStyle.css b/src/main/resources/static/css/locationPageFragsStyle.css
new file mode 100644
index 0000000000000000000000000000000000000000..53cf211001f02daf8ff1874a25d6546015115b37
--- /dev/null
+++ b/src/main/resources/static/css/locationPageFragsStyle.css
@@ -0,0 +1,31 @@
+.locationFragment{
+    background-color: rgb(206, 153, 253);
+    color: black;
+    border-color: white;
+    align-content: center;
+    text-align: center;
+    border-radius: 25px;
+    max-width: 800px;
+    margin: 0 auto;
+
+}
+.locationPageFrag{
+    background:  rgb(41, 41, 41);
+    color: wheat;
+}
+
+iframe{
+    margin-top: 20px;
+    margin-bottom: 60px;
+    border: white 2px solid;
+}
+H1{
+    padding-top: 5px;
+    padding-bottom:3px ;
+    margin-bottom: 0;
+}
+#townHeader{
+    margin: 0;
+    padding: 0;
+
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/qrstyle.css b/src/main/resources/static/css/qrstyle.css
new file mode 100644
index 0000000000000000000000000000000000000000..b0c851a93e488b09a7ebb4c36b09579ac7dedf88
--- /dev/null
+++ b/src/main/resources/static/css/qrstyle.css
@@ -0,0 +1,65 @@
+/*style sheet for QR code - R Nute*/
+/*Modified from (https://www.geeksforgeeks.org/create-a-qr-code-scanner-or-reader-in-html-css-javascript/)*/
+
+body {
+    display: flex;
+    justify-content: center;
+    margin: 0;
+    padding: 0;
+    height: 100vh;
+    box-sizing: border-box;
+    text-align: center;
+    background: rgb(84 33 128 / 66%);
+}
+.container {
+    width: 100%;
+    max-width: 500px;
+    margin: 5px;
+}
+.container h1 {
+    color: rgb(84 33 128);
+}
+.section {
+    background-color: rgb(84 33 128);
+    padding: 50px 30px;
+    border: 2px solid #b2b2b2;
+    border-radius: 0.5em;
+    box-shadow: 0 20px 25px rgba(0, 0, 0, 30);
+}
+#qr-code-reader {
+    padding: 20px !important;
+    border: 2px solid #b2b2b2 !important;
+    border-radius: 10px;
+}
+#qr-code-reader img[alt="Information icon"] {
+    display: none;
+}
+#qr-code-reader img[alt="QR Code Scan"] {
+    width: 100px !important;
+    height: 100px !important;
+}
+button {
+    padding: 15px 25px;
+    border: 2px solid #b2b2b2;
+    outline: none;
+    border-radius: 0.5em;
+    color: grey;
+    font-size: 25px;
+    cursor: default;
+    margin-top: 20px;
+    margin-bottom: 15px;
+    background-color: rgb(84 33 128);
+    transition: 0.5s background-color;
+}
+button:hover {
+    background-color: rgb(84 33 128);
+}
+#html-qrcode-scan-type-change {
+    text-decoration: none !important;
+    color: #1d9bf0;
+}
+stickers {
+    width: 100% !important;
+    border: 2px solid #b2b2b2 !important;
+    border-radius: 0.5em;
+}
diff --git a/src/main/resources/static/css/styling.css b/src/main/resources/static/css/styling.css
new file mode 100644
index 0000000000000000000000000000000000000000..01d36eeb7098b8a007c84c09d60d3a5b4f5d965d
--- /dev/null
+++ b/src/main/resources/static/css/styling.css
@@ -0,0 +1,2 @@
+/*@import "../../templates/towns/mapsTest/node_modules/ol/ol.css";*/
+@import "../nodeMods/node_modules/ol/ol.css";
diff --git a/src/main/resources/static/css/userProfile2.css b/src/main/resources/static/css/userProfile2.css
new file mode 100644
index 0000000000000000000000000000000000000000..0728cbc6e973473051420fd817d243d5d484c489
--- /dev/null
+++ b/src/main/resources/static/css/userProfile2.css
@@ -0,0 +1,309 @@
+/* AUTHOR: Gabriel Copat*/
+@import url('https://fonts.googleapis.com/css2?family=MedievalSharp&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=MedievalSharp&display=swap');
+
+* {
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+
+    /*COLOUR PALETTE*/
+    @media (prefers-color-scheme: dark) {
+        --primary-darker: hsl(272, 100%, 10%);
+        --primary-dark: hsl(271, 100%, 20%);
+        --primary-colour: hsl(271, 100%, 30%);
+        --primary-light: hsl(271, 100%, 40%);
+        --primary-lighter: hsl(271, 100%, 50%);
+
+        --secondary-colour: hsl(12, 81%, 46%);
+        --accent-colour: hsl(12, 82%, 32%);
+        --accent-border: hsl(12, 81%, 25%);
+
+        --accent-shadow: rgba(0, 0, 0, 0.7) 0 0.5em 1em -0.5em;
+
+        color: white;
+
+    }
+    @media (prefers-color-scheme: light) {
+        --primary-darker: hsl(272, 100%, 10%);
+        --primary-dark: hsl(271, 100%, 20%);
+        --primary-colour: hsl(271, 100%, 30%);
+        --primary-light: hsl(271, 100%, 40%);
+        --primary-lighter: hsl(271, 100%, 50%);
+
+        --secondary-colour: hsl(12, 81%, 46%);
+        --accent-colour: hsl(12, 82%, 32%);
+        --accent-border: hsl(12, 81%, 25%);
+
+        --accent-shadow: rgba(0, 0, 0, 0.7) 0 0.5em 1em -0.5em;
+
+        color: white;
+
+
+    }
+}
+
+
+
+/* DEFAULT CSS MADE FOR SCREEN SIZES WIDTHS
+    BETWEEN 320px and 640px:*/
+
+body {
+    background: linear-gradient(to bottom right,
+    var(--primary-darker),
+    var(--primary-dark),
+    var(--primary-darker));
+
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-content: center;
+
+    position: fixed;
+    width: 100vw;
+    height: 100svh;
+}
+
+.grayedSticker {
+    filter: grayscale(1);
+}
+.gotSticker {
+    filter: drop-shadow(0 0 10px yellow);
+}
+
+
+html {
+    position: fixed;
+    width: 100vw;
+    height: 100svh;
+}
+main {
+    width: 90%;
+    height: 95%;
+    background: linear-gradient(to bottom left, #1f1f1f, #1e1e1e, #1f1f1f);
+    overflow-x: hidden;
+    overflow-y: scroll;
+    margin-inline: auto;
+
+    display: flex;
+    flex-direction: column;
+    align-content: flex-start;
+    align-items: center;
+    border-radius: 5vw;
+}
+.userContainer {
+    width: 90%;
+    padding-block: 2em;
+    margin-block: 1em;
+    border-radius: 5vw;
+    display: flex;
+    flex-direction: row-reverse;
+    /*align-items: center;*/
+    justify-content: space-evenly;
+
+    row-gap: 1svh;
+
+    & h1 {
+        font-size: 5em;
+        text-align: center;
+        text-shadow: black 0 0.2em 0.5em;
+        letter-spacing: 0.1em;
+        width: 40vw;
+        max-height: 40vw;
+        /*border-bottom: black solid 3px;*/
+        padding-inline: 5%;
+        padding-block: 2%;
+        border-radius: 35%;
+        /*box-shadow: var(--accent-shadow);*/
+        /*background: var(--accent-border);*/
+        align-self: center;
+        text-wrap: normal;
+    }
+    & #userPicture {
+        border-radius: 100%;
+        box-shadow: var(--accent-shadow);
+        overflow: hidden;
+    }
+
+}
+
+
+.rewards {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    overflow: visible;
+    width: 100%;
+}
+#packsBar {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-evenly;
+    text-align: center;
+    width: 100%;
+    & h2 {
+        font-size: 4em;
+        letter-spacing: 0.1em;
+        border-bottom: 10px solid darkred;
+        margin-inline: 5%;
+    }
+
+}
+#allPacksContainer {
+    padding-top: 3em;
+    display: flex;
+    overflow-x: scroll;
+    padding-inline: 20%;
+    justify-content: space-between;
+    border-bottom: 10px solid rgba(139, 0, 0, 0.5);
+    margin-bottom: 2em;
+    & .packName {
+        font-size: 2em;
+        height: 2.4em;
+        overflow: hidden;
+        padding-bottom: 1em;
+        display: flex;
+        justify-content: center;
+        align-content: flex-start;
+
+    }
+    & .packImg {
+        transition: 0.5s ease-in-out 1ms;
+        border-radius: 20%;
+    }
+}
+.packImg:hover {
+    transform: scale(1.5, 1.5)
+}
+.progressionContainer {
+    display: flex;
+    flex-direction: column;
+    height: 18svh;
+    & h1 {
+        font-size: 4em;
+        width: 100%;
+        font-family: 'MedievalSharp', cursive;
+        text-align: center;
+        overflow-x: scroll;
+        overflow-y: hidden;
+    }
+    & .progImgContainer {
+        position: relative;
+        margin-inline: auto;
+        & .progImg {
+            height: 14svh;
+            /*width: 16svh;*/
+            border-radius: 20%;
+        }
+        & .progImgFill {
+            position: absolute;
+            overflow: hidden;
+            width: 50%;
+        }
+        & .progImgOutline {
+            opacity: 0.1;
+            filter: grayscale(1);
+        }
+        & .progText {
+            font-family: Consolas, serif;
+            opacity: 0.5;
+            -webkit-text-stroke: 1px black;
+            position: absolute;
+            text-align: center;
+            width: 16svh;
+            left:50%;
+            transform: translate(-50%, 150%);
+            font-size: 3em;
+        }
+
+    }
+
+}
+
+#stickersBox {
+    width: 100%;
+}
+.stickersContainer {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: center;
+    margin-top: 2em;
+    row-gap: 2em;
+    height: 100%;
+
+}
+.stickerImg {
+    height: 17em;
+    margin: 1.5em;
+}
+/*}*/
+
+@media only screen
+and (min-device-width: 320px)
+and (max-device-width: 640px) {
+    #userPicture {
+        width: 30vw;
+        height: 30vw;
+        border: solid #989898 0.8em;
+    }
+    .packImg {
+        height: 10svh;
+        width: 15em;
+        padding-inline: 1em;
+        margin-inline: 1em;
+    }
+    #allPacksContainer::-webkit-scrollbar {
+        display: none;
+        -ms-scrollbar-darkshadow-color: transparent;
+    }
+}
+
+@media only screen
+and (min-device-width: 1000px) {
+    #userPicture {
+        width: 200px;
+        height: 200px;
+        border: solid #989898 10px;
+    }
+    #allPacksContainer {
+        padding:0;
+        margin-block: 50px;
+        width: 100%;
+        height: 100%;
+        overflow: visible;
+        border: 5px solid rgba(139, 0, 0, 0.5);
+        justify-content: space-evenly;
+    }
+    .packImg {
+        height: 100px;
+        width: 125px;
+        padding-inline: 1em;
+        margin-inline: 3em;
+    }
+    .packImg:hover{
+        transform: scale(2,2);
+    }
+    .packImg:hover ~ .packName{
+        visibility: visible;
+        opacity: 1;
+    }
+    & .packName {
+        position: absolute;
+        visibility: hidden;
+        text-align: center;
+        left: 50%;
+        transform: translate(-50%);
+        opacity: 0;
+        transition: opacity 1s;
+    }
+    #packsBar {
+        /*height: 250px;*/
+        & h2 {
+            display: none;
+        }
+    }
+    .progressionContainer {
+        height: 20svh;
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/static/images/QRAllTrails.png b/src/main/resources/static/images/QRAllTrails.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed1d4465b3c286eba618b9a459b5a35295bacc8d
Binary files /dev/null and b/src/main/resources/static/images/QRAllTrails.png differ
diff --git a/src/main/resources/static/images/QR_code_for_mobile_English_Wikipedia.svg.png b/src/main/resources/static/images/QR_code_for_mobile_English_Wikipedia.svg.png
new file mode 100644
index 0000000000000000000000000000000000000000..a66fb3c2a1596251164075828413368656bfb0c9
Binary files /dev/null and b/src/main/resources/static/images/QR_code_for_mobile_English_Wikipedia.svg.png differ
diff --git a/src/main/resources/static/images/rewards/packs/0.png b/src/main/resources/static/images/rewards/packs/0.png
new file mode 100644
index 0000000000000000000000000000000000000000..af986ffdeaf3478c06e47ca8f8231b62ee54e862
Binary files /dev/null and b/src/main/resources/static/images/rewards/packs/0.png differ
diff --git a/src/main/resources/static/images/rewards/packs/1.png b/src/main/resources/static/images/rewards/packs/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..af986ffdeaf3478c06e47ca8f8231b62ee54e862
Binary files /dev/null and b/src/main/resources/static/images/rewards/packs/1.png differ
diff --git a/src/main/resources/static/images/rewards/packs/2.png b/src/main/resources/static/images/rewards/packs/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..49e1ffc1ddad8ce3d6806f388f4dd70cd59c233e
Binary files /dev/null and b/src/main/resources/static/images/rewards/packs/2.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/1/1.png b/src/main/resources/static/images/rewards/stickers/1/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..82eda396931e573eb4885e99348a6da6af12dd3d
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/1/1.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/1/2.png b/src/main/resources/static/images/rewards/stickers/1/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3a83c4dc354c66e76318159bf406a82720c1a83
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/1/2.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/1/3.png b/src/main/resources/static/images/rewards/stickers/1/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..197da770196d927d3321f17c6fa2b05846a3e589
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/1/3.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/1/4.png b/src/main/resources/static/images/rewards/stickers/1/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..824de21bcd8a979419585b88f68b892337905285
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/1/4.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/1/5.png b/src/main/resources/static/images/rewards/stickers/1/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea442315db144974ad10319936a3f66976b7fc7f
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/1/5.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/2/1.png b/src/main/resources/static/images/rewards/stickers/2/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9db9fe209598c122fac00f272b9a0dac20925b06
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/2/1.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/2/2.png b/src/main/resources/static/images/rewards/stickers/2/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8235ea3febeeeae29076d810dc0a989df02c7b3a
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/2/2.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/2/3.png b/src/main/resources/static/images/rewards/stickers/2/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..81f9ca020c4596076834fdbebb6ca2d51a3b5a35
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/2/3.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/2/4.png b/src/main/resources/static/images/rewards/stickers/2/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..43a57a6f9d580bd669eb7bc88b1cd56fb43b5c3c
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/2/4.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/2/5.png b/src/main/resources/static/images/rewards/stickers/2/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..8926f0b96019ca755895a071a34e7368533ff23d
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/2/5.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/3/1.png b/src/main/resources/static/images/rewards/stickers/3/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..d759091a2ffb55680062749f999a238a6ae9c26e
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/3/1.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/3/2.png b/src/main/resources/static/images/rewards/stickers/3/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d03b83e1e071ab15c4f9fed3a6cb6df597ffb1a
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/3/2.png differ
diff --git a/src/main/resources/static/images/rewards/stickers/3/3.png b/src/main/resources/static/images/rewards/stickers/3/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..db70b88cd891c33fcbb3ef5c2b3bcfc8ba6cefb9
Binary files /dev/null and b/src/main/resources/static/images/rewards/stickers/3/3.png differ
diff --git a/src/main/resources/static/maptestnext.html b/src/main/resources/static/maptestnext.html
new file mode 100644
index 0000000000000000000000000000000000000000..36a66b6e27fdb03115ba51d913407f357698ecea
--- /dev/null
+++ b/src/main/resources/static/maptestnext.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Quick Start</title>
+    <link rel="stylesheet" href="./mapteststyle.css" type="text/css">
+</head>
+<body>
+<div id="map"></div>
+<script type="module" src="./maptestscript.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/static/maptestscript.js b/src/main/resources/static/maptestscript.js
new file mode 100644
index 0000000000000000000000000000000000000000..bce3be7a0396ed75d5bf94cb523bae0ca21e7b32
--- /dev/null
+++ b/src/main/resources/static/maptestscript.js
@@ -0,0 +1,18 @@
+
+import Map from '../nodeMods/node_modules/ol/Map.js';
+import OSM from './node_modules/ol/source/OSM.js';
+import TileLayer from './node_modules/ol/layer/Tile.js';
+import View from './node_modules/ol/View.js';
+
+const map = new Map({
+    target: 'map',
+    layers: [
+        new TileLayer({
+            source: new OSM(),
+        }),
+    ],
+    view: new View({
+        center: [0, 0],
+        zoom: 2,
+    }),
+});
\ No newline at end of file
diff --git a/src/main/resources/static/mapteststyle.css b/src/main/resources/static/mapteststyle.css
new file mode 100644
index 0000000000000000000000000000000000000000..a92fb54cf0d6b83efb6540db8e2e45994abd88d4
--- /dev/null
+++ b/src/main/resources/static/mapteststyle.css
@@ -0,0 +1,14 @@
+@import "./node_modules/ol/ol.css";
+
+html,
+body {
+    margin: 0;
+    height: 100%;
+}
+
+#map {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    width: 100%;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/nodeMods/package-lock.json b/src/main/resources/static/nodeMods/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..7780830d1f71e5cd6f2f03f69b670b5fd5ce3b43
--- /dev/null
+++ b/src/main/resources/static/nodeMods/package-lock.json
@@ -0,0 +1,1213 @@
+{
+  "name": "box-selection",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "box-selection",
+      "dependencies": {
+        "ol": "8.2.0"
+      },
+      "devDependencies": {
+        "vite": "^3.2.3"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+      "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+      "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@petamoriken/float16": {
+      "version": "3.8.4",
+      "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz",
+      "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ=="
+    },
+    "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/color-parse": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.0.tgz",
+      "integrity": "sha512-g2Z+QnWsdHLppAbrpcFWo629kLOnOPtpxYV69GCqm92gqSgyXbzlfyN3MXs0412fPBkFmiuS+rXposgBgBa6Kg==",
+      "dependencies": {
+        "color-name": "^1.0.0"
+      }
+    },
+    "node_modules/color-rgba": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz",
+      "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==",
+      "dependencies": {
+        "color-parse": "^2.0.0",
+        "color-space": "^2.0.0"
+      }
+    },
+    "node_modules/color-space": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz",
+      "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA=="
+    },
+    "node_modules/earcut": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+      "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
+    },
+    "node_modules/esbuild": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+      "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+      "dev": true,
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.15.18",
+        "@esbuild/linux-loong64": "0.15.18",
+        "esbuild-android-64": "0.15.18",
+        "esbuild-android-arm64": "0.15.18",
+        "esbuild-darwin-64": "0.15.18",
+        "esbuild-darwin-arm64": "0.15.18",
+        "esbuild-freebsd-64": "0.15.18",
+        "esbuild-freebsd-arm64": "0.15.18",
+        "esbuild-linux-32": "0.15.18",
+        "esbuild-linux-64": "0.15.18",
+        "esbuild-linux-arm": "0.15.18",
+        "esbuild-linux-arm64": "0.15.18",
+        "esbuild-linux-mips64le": "0.15.18",
+        "esbuild-linux-ppc64le": "0.15.18",
+        "esbuild-linux-riscv64": "0.15.18",
+        "esbuild-linux-s390x": "0.15.18",
+        "esbuild-netbsd-64": "0.15.18",
+        "esbuild-openbsd-64": "0.15.18",
+        "esbuild-sunos-64": "0.15.18",
+        "esbuild-windows-32": "0.15.18",
+        "esbuild-windows-64": "0.15.18",
+        "esbuild-windows-arm64": "0.15.18"
+      }
+    },
+    "node_modules/esbuild-android-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+      "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-android-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+      "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+      "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+      "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+      "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+      "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+      "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+      "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+      "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+      "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-mips64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+      "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-ppc64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+      "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-riscv64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+      "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-s390x": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+      "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-netbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+      "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-openbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+      "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-sunos-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+      "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+      "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+      "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+      "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/geotiff": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.0.tgz",
+      "integrity": "sha512-B/iFJuFfRpmPHXf8aIRPRgUWwfaNb6dlsynkM8SWeHAPu7CpyvfqEa43KlBt7xxq5OTVysQacFHxhCn3SZhRKQ==",
+      "dependencies": {
+        "@petamoriken/float16": "^3.4.7",
+        "lerc": "^3.0.0",
+        "pako": "^2.0.4",
+        "parse-headers": "^2.0.2",
+        "quick-lru": "^6.1.1",
+        "web-worker": "^1.2.0",
+        "xml-utils": "^1.0.2",
+        "zstddec": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10.19"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "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/is-core-module": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "dev": true,
+      "dependencies": {
+        "hasown": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/lerc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
+      "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/ol": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/ol/-/ol-8.2.0.tgz",
+      "integrity": "sha512-/m1ddd7Jsp4Kbg+l7+ozR5aKHAZNQOBAoNZ5pM9Jvh4Etkf0WGkXr9qXd7PnhmwiC1Hnc2Toz9XjCzBBvexfXw==",
+      "dependencies": {
+        "color-rgba": "^3.0.0",
+        "color-space": "^2.0.1",
+        "earcut": "^2.2.3",
+        "geotiff": "^2.0.7",
+        "pbf": "3.2.1",
+        "rbush": "^3.0.1"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/openlayers"
+      }
+    },
+    "node_modules/pako": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
+      "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+    },
+    "node_modules/parse-headers": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
+      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "node_modules/pbf": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
+      "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+      "dependencies": {
+        "ieee754": "^1.1.12",
+        "resolve-protobuf-schema": "^2.1.0"
+      },
+      "bin": {
+        "pbf": "bin/pbf"
+      }
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "node_modules/postcss": {
+      "version": "8.4.32",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+      "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/protocol-buffers-schema": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
+      "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
+    },
+    "node_modules/quick-lru": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz",
+      "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/quickselect": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+      "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+    },
+    "node_modules/rbush": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
+      "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
+      "dependencies": {
+        "quickselect": "^2.0.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/resolve-protobuf-schema": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+      "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+      "dependencies": {
+        "protocol-buffers-schema": "^3.3.1"
+      }
+    },
+    "node_modules/rollup": {
+      "version": "2.79.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
+      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+      "dev": true,
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/vite": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz",
+      "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==",
+      "dev": true,
+      "dependencies": {
+        "esbuild": "^0.15.9",
+        "postcss": "^8.4.18",
+        "resolve": "^1.22.1",
+        "rollup": "^2.79.1"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      },
+      "peerDependencies": {
+        "@types/node": ">= 14",
+        "less": "*",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/web-worker": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
+      "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
+    },
+    "node_modules/xml-utils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz",
+      "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw=="
+    },
+    "node_modules/zstddec": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",
+      "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg=="
+    }
+  },
+  "dependencies": {
+    "@esbuild/android-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+      "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-loong64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+      "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@petamoriken/float16": {
+      "version": "3.8.4",
+      "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz",
+      "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ=="
+    },
+    "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=="
+    },
+    "color-parse": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.0.tgz",
+      "integrity": "sha512-g2Z+QnWsdHLppAbrpcFWo629kLOnOPtpxYV69GCqm92gqSgyXbzlfyN3MXs0412fPBkFmiuS+rXposgBgBa6Kg==",
+      "requires": {
+        "color-name": "^1.0.0"
+      }
+    },
+    "color-rgba": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz",
+      "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==",
+      "requires": {
+        "color-parse": "^2.0.0",
+        "color-space": "^2.0.0"
+      }
+    },
+    "color-space": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz",
+      "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA=="
+    },
+    "earcut": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+      "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
+    },
+    "esbuild": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+      "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+      "dev": true,
+      "requires": {
+        "@esbuild/android-arm": "0.15.18",
+        "@esbuild/linux-loong64": "0.15.18",
+        "esbuild-android-64": "0.15.18",
+        "esbuild-android-arm64": "0.15.18",
+        "esbuild-darwin-64": "0.15.18",
+        "esbuild-darwin-arm64": "0.15.18",
+        "esbuild-freebsd-64": "0.15.18",
+        "esbuild-freebsd-arm64": "0.15.18",
+        "esbuild-linux-32": "0.15.18",
+        "esbuild-linux-64": "0.15.18",
+        "esbuild-linux-arm": "0.15.18",
+        "esbuild-linux-arm64": "0.15.18",
+        "esbuild-linux-mips64le": "0.15.18",
+        "esbuild-linux-ppc64le": "0.15.18",
+        "esbuild-linux-riscv64": "0.15.18",
+        "esbuild-linux-s390x": "0.15.18",
+        "esbuild-netbsd-64": "0.15.18",
+        "esbuild-openbsd-64": "0.15.18",
+        "esbuild-sunos-64": "0.15.18",
+        "esbuild-windows-32": "0.15.18",
+        "esbuild-windows-64": "0.15.18",
+        "esbuild-windows-arm64": "0.15.18"
+      }
+    },
+    "esbuild-android-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+      "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-android-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+      "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-darwin-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+      "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-darwin-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+      "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-freebsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+      "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-freebsd-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+      "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+      "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+      "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+      "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+      "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-mips64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+      "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-ppc64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+      "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-riscv64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+      "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-linux-s390x": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+      "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-netbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+      "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-openbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+      "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-sunos-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+      "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-windows-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+      "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-windows-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+      "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+      "dev": true,
+      "optional": true
+    },
+    "esbuild-windows-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+      "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+      "dev": true,
+      "optional": true
+    },
+    "fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "dev": true,
+      "optional": true
+    },
+    "function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true
+    },
+    "geotiff": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.0.tgz",
+      "integrity": "sha512-B/iFJuFfRpmPHXf8aIRPRgUWwfaNb6dlsynkM8SWeHAPu7CpyvfqEa43KlBt7xxq5OTVysQacFHxhCn3SZhRKQ==",
+      "requires": {
+        "@petamoriken/float16": "^3.4.7",
+        "lerc": "^3.0.0",
+        "pako": "^2.0.4",
+        "parse-headers": "^2.0.2",
+        "quick-lru": "^6.1.1",
+        "web-worker": "^1.2.0",
+        "xml-utils": "^1.0.2",
+        "zstddec": "^0.1.0"
+      }
+    },
+    "hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.2"
+      }
+    },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+    },
+    "is-core-module": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "dev": true,
+      "requires": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "lerc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
+      "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
+    },
+    "nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "dev": true
+    },
+    "ol": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/ol/-/ol-8.2.0.tgz",
+      "integrity": "sha512-/m1ddd7Jsp4Kbg+l7+ozR5aKHAZNQOBAoNZ5pM9Jvh4Etkf0WGkXr9qXd7PnhmwiC1Hnc2Toz9XjCzBBvexfXw==",
+      "requires": {
+        "color-rgba": "^3.0.0",
+        "color-space": "^2.0.1",
+        "earcut": "^2.2.3",
+        "geotiff": "^2.0.7",
+        "pbf": "3.2.1",
+        "rbush": "^3.0.1"
+      }
+    },
+    "pako": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
+      "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+    },
+    "parse-headers": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
+      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
+    },
+    "path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "pbf": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
+      "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+      "requires": {
+        "ieee754": "^1.1.12",
+        "resolve-protobuf-schema": "^2.1.0"
+      }
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "postcss": {
+      "version": "8.4.32",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+      "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+      "dev": true,
+      "requires": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "protocol-buffers-schema": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
+      "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
+    },
+    "quick-lru": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz",
+      "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ=="
+    },
+    "quickselect": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+      "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+    },
+    "rbush": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
+      "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
+      "requires": {
+        "quickselect": "^2.0.0"
+      }
+    },
+    "resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "dev": true,
+      "requires": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      }
+    },
+    "resolve-protobuf-schema": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+      "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+      "requires": {
+        "protocol-buffers-schema": "^3.3.1"
+      }
+    },
+    "rollup": {
+      "version": "2.79.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
+      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+      "dev": true,
+      "requires": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true
+    },
+    "supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true
+    },
+    "vite": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz",
+      "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==",
+      "dev": true,
+      "requires": {
+        "esbuild": "^0.15.9",
+        "fsevents": "~2.3.2",
+        "postcss": "^8.4.18",
+        "resolve": "^1.22.1",
+        "rollup": "^2.79.1"
+      }
+    },
+    "web-worker": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
+      "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
+    },
+    "xml-utils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz",
+      "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw=="
+    },
+    "zstddec": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",
+      "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg=="
+    }
+  }
+}
diff --git a/src/main/resources/static/nodeMods/package.json b/src/main/resources/static/nodeMods/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..78be07f225c43e51803bab02b08008eac5d5aa40
--- /dev/null
+++ b/src/main/resources/static/nodeMods/package.json
@@ -0,0 +1,13 @@
+{
+  "name": "box-selection",
+  "dependencies": {
+    "ol": "8.2.0"
+  },
+  "devDependencies": {
+    "vite": "^3.2.3"
+  },
+  "scripts": {
+    "start": "vite",
+    "build": "vite build"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/static/qr-scanner.html b/src/main/resources/static/qr-scanner.html
new file mode 100644
index 0000000000000000000000000000000000000000..2e93c18b5decfdb0f2b2f3e390e87dd9a8600661
--- /dev/null
+++ b/src/main/resources/static/qr-scanner.html
@@ -0,0 +1,29 @@
+<!--setup html page for QR codes - R Nute-->
+<!--Modified from (https://www.geeksforgeeks.org/create-a-qr-code-scanner-or-reader-in-html-css-javascript/)-->
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewpoint" content="width-device-width, initial-scale=1.0">
+    <link rel="stylesheet" href="css/templatingstyle.css">
+    <link rel="stylesheet" href="css/qrstyle.css">
+    <script src="https://unpkg.com/html5-qrcode"></script>
+    <script type="module" src="scripts/qr-script.js"></script>
+    <title>QR Code</title>
+</head>
+
+<body>
+    <header th:insert="towns/Templating.html :: header"></header>
+
+    <div class="container">
+        <h1>Scan location QR code</h1>
+        <div class="section">
+            <div id="qr-code-reader">
+            </div>
+        </div>
+    </div>
+
+    <div th:insert="towns/Templating.html :: footer"></div>
+</body>
+</html>
diff --git a/src/main/resources/static/scripts/mapAPI.js b/src/main/resources/static/scripts/mapAPI.js
new file mode 100644
index 0000000000000000000000000000000000000000..6af8c3b085396384779093efaca5f777112a7537
--- /dev/null
+++ b/src/main/resources/static/scripts/mapAPI.js
@@ -0,0 +1,153 @@
+import GeoJSON from '/nodeMods/node_modules/ol/format/GeoJSON.js';
+import Map from '/nodeMods/node_modules/ol/Map.js';
+import VectorLayer from '/nodeMods/node_modules/ol/source/Vector.js'
+import VectorSource from '/nodeMods/node_modules/ol/source/Vector.js';
+import View from '/nodeMods/node_modules/ol/View.js';
+import {DragBox, Select} from '/nodeMods/node_modules/ol/interaction.js';
+import {Fill, Stroke, Style} from '/nodeMods/node_modules/ol/style.js';
+import {getWidth} from '/nodeMods/node_modules/ol/extent.js';
+import {platformModifierKeyOnly} from '/nodeMods/node_modules/ol/events/condition.js';
+// //Invesitgate created directories mnode module mapstest and extent.js
+// import GeoJSON from '/node_modules/ol/format/GeoJSON.js';
+// import Map from '/ol/Map.js';
+// import VectorLayer from '/ol/layer/Vector.js';
+// import VectorSource from '/ol/source/Vector.js';
+// import View from '/ol/View.js';
+// import {DragBox, Select} from '/ol/interaction.js';
+// import {Fill, Stroke, Style} from '/ol/style.js';
+// import {getWidth} from '/ol/extent.js';
+// import {platformModifierKeyOnly} from '/ol/events/condition.js';
+
+
+const vectorSource = new VectorSource({
+    url: 'https://openlayers.org/data/vector/ecoregions.json',
+    format: new GeoJSON(),
+});
+
+const style = new Style({
+    fill: new Fill({
+        color: '#eeeeee',
+    }),
+});
+
+const map = new Map({
+    layers: [
+        new VectorLayer({
+            source: vectorSource,
+            background: '#1a2b39',
+            style: function (feature) {
+                const color = feature.get('COLOR_BIO') || '#eeeeee';
+                style.getFill().setColor(color);
+                return style;
+            },
+        }),
+    ],
+    target: 'map',
+    view: new View({
+        center: [0, 0],
+        zoom: 2,
+        constrainRotation: 16,
+    }),
+});
+
+const selectedStyle = new Style({
+    fill: new Fill({
+        color: 'rgba(255, 255, 255, 0.6)',
+    }),
+    stroke: new Stroke({
+        color: 'rgba(255, 255, 255, 0.7)',
+        width: 2,
+    }),
+});
+
+// a normal select interaction to handle click
+const select = new Select({
+    style: function (feature) {
+        const color = feature.get('COLOR_BIO') || '#eeeeee';
+        selectedStyle.getFill().setColor(color);
+        return selectedStyle;
+    },
+});
+map.addInteraction(select);
+
+const selectedFeatures = select.getFeatures();
+
+// a DragBox interaction used to select features by drawing boxes
+const dragBox = new DragBox({
+    condition: platformModifierKeyOnly,
+});
+
+map.addInteraction(dragBox);
+
+dragBox.on('boxend', function () {
+    const boxExtent = dragBox.getGeometry().getExtent();
+
+    // if the extent crosses the antimeridian process each world separately
+    const worldExtent = map.getView().getProjection().getExtent();
+    const worldWidth = getWidth(worldExtent);
+    const startWorld = Math.floor((boxExtent[0] - worldExtent[0]) / worldWidth);
+    const endWorld = Math.floor((boxExtent[2] - worldExtent[0]) / worldWidth);
+
+    for (let world = startWorld; world <= endWorld; ++world) {
+        const left = Math.max(boxExtent[0] - world * worldWidth, worldExtent[0]);
+        const right = Math.min(boxExtent[2] - world * worldWidth, worldExtent[2]);
+        const extent = [left, boxExtent[1], right, boxExtent[3]];
+
+        const boxFeatures = vectorSource
+            .getFeaturesInExtent(extent)
+            .filter(
+                (feature) =>
+                    !selectedFeatures.getArray().includes(feature) &&
+                    feature.getGeometry().intersectsExtent(extent)
+            );
+
+        // features that intersect the box geometry are added to the
+        // collection of selected features
+
+        // if the view is not obliquely rotated the box geometry and
+        // its extent are equalivalent so intersecting features can
+        // be added directly to the collection
+        const rotation = map.getView().getRotation();
+        const oblique = rotation % (Math.PI / 2) !== 0;
+
+        // when the view is obliquely rotated the box extent will
+        // exceed its geometry so both the box and the candidate
+        // feature geometries are rotated around a common anchor
+        // to confirm that, with the box geometry aligned with its
+        // extent, the geometries intersect
+        if (oblique) {
+            const anchor = [0, 0];
+            const geometry = dragBox.getGeometry().clone();
+            geometry.translate(-world * worldWidth, 0);
+            geometry.rotate(-rotation, anchor);
+            const extent = geometry.getExtent();
+            boxFeatures.forEach(function (feature) {
+                const geometry = feature.getGeometry().clone();
+                geometry.rotate(-rotation, anchor);
+                if (geometry.intersectsExtent(extent)) {
+                    selectedFeatures.push(feature);
+                }
+            });
+        } else {
+            selectedFeatures.extend(boxFeatures);
+        }
+    }
+});
+
+// clear selection when drawing a new box and when clicking on the map
+dragBox.on('boxstart', function () {
+    selectedFeatures.clear();
+});
+
+const infoBox = document.getElementById('info');
+
+selectedFeatures.on(['add', 'remove'], function () {
+    const names = selectedFeatures.getArray().map((feature) => {
+        return feature.get('ECO_NAME');
+    });
+    if (names.length > 0) {
+        infoBox.innerHTML = names.join(', ');
+    } else {
+        infoBox.innerHTML = 'None';
+    }
+});
\ No newline at end of file
diff --git a/src/main/resources/static/scripts/qr-script.js b/src/main/resources/static/scripts/qr-script.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff2bbf82d70a4bbf152239e568ccc7052b4c8438
--- /dev/null
+++ b/src/main/resources/static/scripts/qr-script.js
@@ -0,0 +1,28 @@
+//qr-script file - R Nute
+//Modified from (https://www.geeksforgeeks.org/create-a-qr-code-scanner-or-reader-in-html-css-javascript/)
+function domReady(fn){
+    if (
+        document.readyState === "complete" ||
+        document.readyState === "interactive"
+    ){
+        setTimeout(fn, 1000);
+    } else {
+        document.addEventListener("DOMContentLoaded", fn);
+    }
+}
+domReady(function (message){
+    //if QR code found
+    function onScanSuccess(decodeText, decodeResult){
+        alert("You have collected: " + decodeText, decodeResult);
+        // Open the result, what methods are available through the HTML5 Qr scanner node package?
+        window.open(decodeText);
+        // Record the result, see above.
+        // Get user and tie to user account, intergrate with database, retrieving and storing under user info.
+    }
+    let htmlscanner = new Html5QrcodeScanner(
+    "qr-code-reader",
+    { fps: 20, qrbos: 250}
+    );
+    htmlscanner.render(onScanSuccess);
+});
+
diff --git a/src/main/resources/static/scripts/userPage.js b/src/main/resources/static/scripts/userPage.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c1d5069ad652b854abf6b8cb460d7ebf89d696f
--- /dev/null
+++ b/src/main/resources/static/scripts/userPage.js
@@ -0,0 +1,11 @@
+function updatePack(userid, packid) {
+    /* Updates the trail being shown on screen to the one requested by ID */
+    $.get("/packInfo/" + userid + "/" + packid).done(function (fragment) {
+        let packRewardsWrapper = $("#packRewardsWrapper");
+
+        packRewardsWrapper.fadeTo("slow", 0, function () {
+            packRewardsWrapper.html(fragment)
+            packRewardsWrapper.fadeTo("slow", 1);
+        })
+    });
+}
\ No newline at end of file
diff --git a/src/main/resources/templates/fragments/locationPageFrags.html b/src/main/resources/templates/fragments/locationPageFrags.html
new file mode 100644
index 0000000000000000000000000000000000000000..9cb90e48b97924a4bc53092a7aa86593d20bbf8a
--- /dev/null
+++ b/src/main/resources/templates/fragments/locationPageFrags.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en" th:fragment="locationSection" class="locationPageFrag">
+<!-- todo check if this is ok here-->
+<head>
+    <meta charset="UTF-8">
+    <title th:text="${location.getLocationName()}"></title>
+
+    <link rel="stylesheet" th:href="@{/css/templatingstyle.css}">
+    <link rel="stylesheet" th:href="@{/css/locationPageFragsStyle.css}">
+</head>
+<body >
+<header th:insert="~{/fragments/Templating.html::header}"></header>
+    <main>
+
+        <hr style="height:40px; visibility:hidden;" />
+        <article class="locationFragment">
+
+            <H1 th:text="${location.getLocationName()}" > </H1>
+            <H4 th:text="${location.getLocationPlace()}" id="townHeader"> </H4>
+            <p th:text="${location.getLocationDescription()}"></p>
+
+
+            <iframe
+                    width="600"
+                    height="400"
+                    frameborder="0"
+                    scrolling="yes"
+                    marginheight="0"
+                    marginwidth="0"
+                    th:src="'https://maps.google.com/maps?q='+ ${locCoord.getLocationCoordsLat()} +','+ ${locCoord.getLocationCoordsLong()} +'&hl=en&z=20&amp;output=embed'">
+            </iframe>
+
+        </article>
+        <hr style="height:40px; visibility:hidden;" />
+    </main>
+
+<footer th:insert="~{/fragments/Templating.html::footer}"></footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/towns/mapsTest/index.html b/src/main/resources/templates/towns/mapsTest/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..564d189b468ef43294c8b5a16f0865b41efd30b4
--- /dev/null
+++ b/src/main/resources/templates/towns/mapsTest/index.html
@@ -0,0 +1,64 @@
+<!--<!DOCTYPE html>-->
+<!--<html lang="en">-->
+<!--<head>-->
+<!--    <meta charset="UTF-8">-->
+<!--    <title>MAPTEST</title>-->
+<!--    <link rel="stylesheet" th:href="@{/css/templatingstyle.css}">-->
+<!--    <link rel="stylesheet" th:href="@{/css/styling.css}">-->
+<!--    <script type="module" src="/scripts/mapAPI.js"></script>-->
+<!--&lt;!&ndash;    href="node_modules/ol/ol.css">&ndash;&gt;-->
+
+<!--    <style>-->
+
+<!--        #map{-->
+<!--            position: absolute;-->
+<!--            top: 0;-->
+<!--            bottom: 0;-->
+<!--            width: 100%;-->
+<!--        }-->
+
+<!--    </style>-->
+<!--</head>-->
+<!--<body>-->
+<!--<header th:insert="~{/towns/Templating.html::header}"></header>-->
+<!--<main>-->
+
+
+<!--    <H1> Map API Test Here</H1>-->
+
+<!--&lt;!&ndash;    <div class="map2">&ndash;&gt;-->
+<!--&lt;!&ndash;&lt;!&ndash;        test data from hackathon&ndash;&gt;&ndash;&gt;-->
+<!--&lt;!&ndash;        <p> Google maps embedding;</p>&ndash;&gt;-->
+<!--&lt;!&ndash;        <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d9933.490822613407!2d-3.1845439261935375!3d51.506377949006364!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x486e1c8d0919099f%3A0x60bea7f0ae155f28!2sRoath%20Park!5e0!3m2!1sen!2suk!4v1698921027199!5m2!1sen!2suk" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>&ndash;&gt;-->
+<!--&lt;!&ndash;    </div>&ndash;&gt;-->
+
+<!--    <div id="map" ></div>-->
+<!--    <div>Selected regions: <span id="info">None</span></div>-->
+
+
+
+
+<!--</main>-->
+<!--<footer th:insert="~{/towns/Templating.html::footer}"></footer>-->
+<!--</body>-->
+<!--</html>-->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Box Selection</title>
+    <link rel="stylesheet" href="/nodeMods/node_modules/ol/ol.css">
+    <style>
+        .map {
+            width: 100%;
+            height: 400px;
+        }
+    </style>
+</head>
+<body>
+<div id="map" class="map"></div>
+<div>Selected regions: <span id="info">None</span></div>
+
+<script type="module" src="/scripts/mapAPI.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/users/userFrags.html b/src/main/resources/templates/users/userFrags.html
new file mode 100644
index 0000000000000000000000000000000000000000..5b5e8201f805bdcbed9234da8c39d6a4b79e94f7
--- /dev/null
+++ b/src/main/resources/templates/users/userFrags.html
@@ -0,0 +1,28 @@
+<!-- @thymesVar id="sticker" type="Team5.SmartTowns.rewards.Sticker" -->
+<!-- @thymesVar id="user" type="Team5.SmartTowns.users.User" -->
+<!-- @thymesVar id="selectedPack" type="Team5.SmartTowns.rewards.Pack" -->
+<div th:fragment="stickersBox" id="packRewardsWrapper">
+  <article class="progressionContainer">
+    <h1 th:text="${selectedPack.getName()}"></h1>
+    <div class="progImgContainer">
+      <div class="progImgFill" th:style="'width:'+ ${progress} + '%;'">
+        <img th:src="@{'../' + ${selectedPack.getDisplayImg()}}"
+             alt="Filled Dragon" id="FilledDragon" class="progImg">
+      </div>
+      <div class="progText">
+        <p th:text="${progress} + '%'"></p>
+      </div>
+      <div class="progImgOutline">
+        <img th:src="@{'../' + ${selectedPack.getDisplayImg()}}"
+             alt="Outline Dragon" id="OutlineDragon" class="progImg">
+      </div>
+    </div>
+  </article>
+
+  <article id="stickersBox">
+    <div class="stickersContainer">
+      <img th:class="'stickerImg ' + ${sticker.getVisibility()}"  th:each="sticker : ${stickers}" th:src="@{'../' + ${sticker.getDisplayImg()}}"
+           th:id="'img' + ${sticker.getId()}" th:alt="${sticker.getName()}" >
+    </div>
+  </article>
+</div>
\ No newline at end of file
diff --git a/src/main/resources/templates/users/userProfile.html b/src/main/resources/templates/users/userProfile.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e865175760bc4b0aa11c9b54aade5d312ac55b5
--- /dev/null
+++ b/src/main/resources/templates/users/userProfile.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title th:text="'VZLA Profile Page of ' + ${user.getName()}"></title>
+    <link rel="stylesheet" th:href="@{/css/userProfile2.css}">
+    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
+<!--    <link rel="stylesheet" th:href="@{/css/templatingstyle.css}">-->
+</head>
+<body>
+
+<!--<header>-->
+<!--    <ul class="footerBar">-->
+<!--        <li class="footerButton"><b>Home</b></li>-->
+<!--        <li class="footerButton"><b>About</b></li>-->
+<!--        <li class="footerButton"><b>Map</b></li>-->
+<!--        <li class="footerButton"><b>Facilities</b></li>-->
+<!--        <li class="footerButton"><b>Log In</b></li>-->
+<!--    </ul>-->
+<!--</header>-->
+
+<main>
+    <!--PICTURE - DATA - BADGES -->
+    <div class="userContainer">
+        <h1 th:text="${user.getName()}"></h1>
+        <img th:src="@{${user.getImgPath()}}"
+             th:alt="${user.getName()}"
+             id="userPicture"
+        >
+
+        <!--TODO add some progression info here?-->
+    </div>
+    <section class="rewards"> <!--Reward lists, badges on top, stickers (larger) on the bottom-->
+        <article id="packsBar">
+            <h2>Packs</h2>
+             <!--Shows first earned badges, followed by greyed out badges-->
+            <div id="allPacksContainer"  class="centerFlex">
+                <div th:each="pack : ${packs}"  class="packContainer">
+                    <img class="packImg"   th:src="@{'../' + ${pack.getDisplayImg()}}"
+                         th:id="'packImg' + ${pack.getId()}" th:alt="${pack.getName()}"
+                         th:onclick="'updatePack(' + ${user.getId()} +',' + ${pack.getId()} +');'">
+                    <h4 class="packName" th:text="${pack.getName()}"></h4>
+                </div>
+            </div>
+        </article>
+        <article th:replace="~{users/userFrags.html::stickersBox}" id="stickersBox"></article>
+    </section>
+
+
+</main>
+
+<footer>
+
+</footer>
+<script type="text/javascript" th:src="@{../scripts/userPage.js}"></script>
+
+<script>
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/java/Team5/SmartTowns/Data/locationRepositoryJDBCTest.java b/src/test/java/Team5/SmartTowns/Data/locationRepositoryJDBCTest.java
index 29564125d79044a2b7b30ed9731a82ea80675b68..4420c7e4690fd28c351b7d6790796b4f2880ab05 100644
--- a/src/test/java/Team5/SmartTowns/Data/locationRepositoryJDBCTest.java
+++ b/src/test/java/Team5/SmartTowns/Data/locationRepositoryJDBCTest.java
@@ -14,17 +14,17 @@
 //@SpringBootTest
 //class locationRepositoryJDBCTest {
 //
-//private static locationRepository locationRepo;
+//private static LocationRepository locationRepo;
 //
 //
 //    @Autowired
-//    private locationRepository locationRepo;
+//    private LocationRepository locationRepo;
 //
 //    @Mock
 //    private JdbcTemplate jdbc;
 //@BeforeAll
 //public static void setup(){
-//    locationRepositoryJDBC aa= new locationRepositoryJDBC(jdbc);
+//    LocationRepositoryJDBC aa= new LocationRepositoryJDBC(jdbc);
 //}
 //    @Test
 //    void getAllLocation() {
diff --git a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java
index 82a2ee4744fd5457883876ecc42a11afb33ce7dc..c605229b5fec416c3efabdce37cf93a528f092af 100644
--- a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java
+++ b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java
@@ -1,67 +1,67 @@
-//package Team5.SmartTowns;
-//
-//import Team5.SmartTowns.Data.locationRepository;
-//import Team5.SmartTowns.Data.locationRepositoryJDBC;
-//import org.junit.jupiter.api.Test;
-//import org.mockito.Mock;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest;
-//import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.jdbc.core.JdbcTemplate;
-//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
-//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
-//import org.springframework.test.context.jdbc.Sql;
+package Team5.SmartTowns;
+
+import Team5.SmartTowns.Data.LocationRepository;
+import Team5.SmartTowns.Data.LocationRepositoryJDBC;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest;
+import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+import org.springframework.test.context.jdbc.Sql;
 //import org.testng.Assert;
-//
-//import javax.sql.DataSource;
-//
-//import static org.junit.jupiter.api.Assertions.assertEquals;
-//import static org.junit.jupiter.api.Assertions.assertSame;
-//import static org.mockito.Mockito.mock;
-//
-//@SpringBootTest
-//@JdbcTest
-//
-//@Sql({"schema.sql", "data.sql"})
-//class SmartTownsApplicationTests {
-//@Autowired
-//	private JdbcTemplate ajdbc;
-//
+
+import javax.sql.DataSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.mockito.Mockito.mock;
+
+@SpringBootTest
+@JdbcTest
+
+@Sql({"schema.sql", "data.sql"})
+class SmartTownsApplicationTests {
+@Autowired
+	private JdbcTemplate ajdbc;
+
+	@Test
+//	test2
+	public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
+		DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
+				.addScript("classpath:jdbc/schema.sql")
+				.addScript("classpath:jdbc/test-data.sql")
+				.build();
+
+		LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC();
+		employeeDAO.setDataSource(dataSource);
+
+		assertEquals(4, employeeDAO.getCountOfEmployees());}
+
+	@Test
+//	test 1
+	void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
+		LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC();
+		employeeDAO.setJdbcTemplate(ajdbc);
+		assertEquals(4, employeeDAO.getAllLocation().size());
+
+//		assertEquals(4, employeeDAO.getCountOfEmployees());
+	}
 //	@Test
-////	test2
-//	public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
-//		DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
-//				.addScript("classpath:jdbc/schema.sql")
-//				.addScript("classpath:jdbc/test-data.sql")
-//				.build();
-//
-//		locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
-//		employeeDAO.setDataSource(dataSource);
-//
-//		assertEquals(4, employeeDAO.getCountOfEmployees());}
-//
-//	@Test
-////	test 1
 //	void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
-//		locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
-//		employeeDAO.setJdbcTemplate(ajdbc);
-//		assertEquals(4, employeeDAO.getAllLocation().size());
+//		EmployeeDAO employeeDAO = new EmployeeDAO();
+//		employeeDAO.setJdbcTemplate(jdbcTemplate);
 //
-////		assertEquals(4, employeeDAO.getCountOfEmployees());
+//		assertEquals(4, employeeDAO.getCountOfEmployees());
 //	}
-////	@Test
-////	void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
-////		EmployeeDAO employeeDAO = new EmployeeDAO();
-////		employeeDAO.setJdbcTemplate(jdbcTemplate);
-////
-////		assertEquals(4, employeeDAO.getCountOfEmployees());
-////	}
+
+
+
+
 //
-//
-//
-//
-////
 ////	private static TownController townController;
 //
 //
@@ -70,7 +70,7 @@
 ////	private static JdbcTemplate jdbc;
 ////
 ////	@Autowired
-////	private Team5.SmartTowns.Data.locationRepository locationRepo;
+////	private Team5.SmartTowns.Data.LocationRepository locationRepo;
 ////	JdbcTemplate jdbc = Mockito.mock(JdbcTemplate.class);
 //////	@Autowired
 //////	private static Team5.SmartTowns.Data.TownRepository townRepository;
@@ -84,7 +84,7 @@
 ////	public void before() {
 //////		MockitoAnnotations.initMocks(this);
 //////		location = new Location();
-////		locationRepo = mock(new locationRepositoryJDBC(jdbc));
+////		locationRepo = mock(new LocationRepositoryJDBC(jdbc));
 //////		townController = new TownController();
 ////	}
 //////	@BeforeAll
diff --git a/src/test/java/Team5/SmartTowns/Test3.java b/src/test/java/Team5/SmartTowns/Test3.java
index 3716085cfd6b71d74abd00c07e620089af9ae43c..a652675dba4a37d4e4fe1bb60463696bb7d63c18 100644
--- a/src/test/java/Team5/SmartTowns/Test3.java
+++ b/src/test/java/Team5/SmartTowns/Test3.java
@@ -1,26 +1,29 @@
-//package Team5.SmartTowns;
-//
-//import Team5.SmartTowns.Data.locationRepositoryJDBC;
-//import org.junit.jupiter.api.Test;
-//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
-//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
-//
-//import javax.sql.DataSource;
-//
-//import static org.junit.jupiter.api.Assertions.assertEquals;
-//
-//public class Test3 {
-//
-//    @Test
-////	test2
-//    public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
-//        DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
-//                .addScript("classpath:jdbc/schema.sql")
-//                .addScript("classpath:jdbc/test-data.sql")
-//                .build();
-//
-//        locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
+package Team5.SmartTowns;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+
+import javax.sql.DataSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@SpringBootTest
+public class Test3 {
+
+    @Test
+//	test2
+    public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
+        DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
+                .addScript("classpath:schema.sql")
+                .addScript("classpath:data.sql")
+                .build();
+//        .addScript("classpath:jdbc/test-data.sql")
+
+//        LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC();
 //        employeeDAO.setDataSource(dataSource);
-//
+
 //        assertEquals(4, employeeDAO.getCountOfEmployees());}
-//}
+    assertEquals(4, 4);}
+}
diff --git a/src/test/java/Team5/SmartTowns/Test4.java b/src/test/java/Team5/SmartTowns/Test4.java
index 55b8667098658cfdfb69337bf578c26bfebb2db3..5fdd012524f6d5b576ca7c723a0237359e1c603d 100644
--- a/src/test/java/Team5/SmartTowns/Test4.java
+++ b/src/test/java/Team5/SmartTowns/Test4.java
@@ -1,33 +1,33 @@
-//package Team5.SmartTowns;
-//
-////import Team5.SmartTowns.Data.Location;
-////import Team5.SmartTowns.Data.locationRepositoryJDBC;
-//import org.junit.jupiter.api.BeforeAll;
-//import org.junit.jupiter.api.Test;
-//import org.mockito.Mock;
-//import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
-////import org.springframework.jdbc.core.JdbcTemplate;
-//
-//import static org.junit.jupiter.api.Assertions.assertEquals;
-//@SpringJUnitConfig
-//public class Test4 {
-////    @Mock
-////    JdbcTemplate jdbcTemplate;
-//
-//
-////    @BeforeAll
-////    static void before() {
-////        Location location = new Location();
-////    }
-//    @Test
-//
-//    public void whenMockJdbcTemplate_thenReturnCorrectEmployeeCount() {
-////        Location aa=new Location();
-////        locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
-////        ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate);
-////        Mockito.when(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM locations", Integer.class))
-////                .thenReturn(4);
-//
-//        assertEquals(4, 4);
+package Team5.SmartTowns;
+
+//import Team5.SmartTowns.Data.Location;
+//import Team5.SmartTowns.Data.LocationRepositoryJDBC;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+//import org.springframework.jdbc.core.JdbcTemplate;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+@SpringJUnitConfig
+public class Test4 {
+//    @Mock
+//    JdbcTemplate jdbcTemplate;
+
+
+//    @BeforeAll
+//    static void before() {
+//        Location location = new Location();
 //    }
-//}
+    @Test
+
+    public void whenMockJdbcTemplate_thenReturnCorrectEmployeeCount() {
+//        Location aa=new Location();
+//        LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC();
+//        ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate);
+//        Mockito.when(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM locations", Integer.class))
+//                .thenReturn(4);
+
+        assertEquals(4, 4);
+    }
+}
diff --git a/src/test/java/Team5/SmartTowns/Test5.java b/src/test/java/Team5/SmartTowns/Test5.java
index 75877470dd7f8801c67edd38fa68b4edf56fafaf..8fc92e7fffc7d7406caab9050be1933173d33c81 100644
--- a/src/test/java/Team5/SmartTowns/Test5.java
+++ b/src/test/java/Team5/SmartTowns/Test5.java
@@ -1,32 +1,30 @@
 package Team5.SmartTowns;
 
-import Team5.SmartTowns.Data.locationRepository;
-import Team5.SmartTowns.Data.locationRepositoryJDBC;
+import Team5.SmartTowns.Data.LocationRepository;
 //import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.test.context.jdbc.Sql;
-import org.testng.annotations.Test;
+
 
 //import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.testng.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @SpringBootTest
 //@JdbcTest
 //
-@Sql({"schema.sql", "test-data.sql"})
+@Sql({"/resources/schema.sql", "/resources/test-data.sql"})
 public class Test5 {
 
     @Autowired
-    private locationRepository locationRepo;
+    private LocationRepository locationRepo;
 
 
     @Test
 //	test 1
     void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
-//        locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC(ajdbc);
+//        LocationRepositoryJDBC employeeDAO = new LocationRepositoryJDBC(ajdbc);
         int aa=2;
         int bb=2;
 //        employeeDAO.setJdbc(ajdbc);
diff --git a/src/test/java/Team5/SmartTowns/Test6Mock.java b/src/test/java/Team5/SmartTowns/Test6Mock.java
index f84b318f0b48c850a66ed1f3f6836914f5dee955..9a19e2dcee2894578f8c714ab617c2e979db9ca7 100644
--- a/src/test/java/Team5/SmartTowns/Test6Mock.java
+++ b/src/test/java/Team5/SmartTowns/Test6Mock.java
@@ -1,8 +1,8 @@
 //package Team5.SmartTowns;
 //
 //import Team5.SmartTowns.Data.Location;
-//import Team5.SmartTowns.Data.locationRepository;
-//import Team5.SmartTowns.Data.locationRepositoryJDBC;
+//import Team5.SmartTowns.Data.LocationRepository;
+//import Team5.SmartTowns.Data.LocationRepositoryJDBC;
 //import org.junit.Before;
 ////import org.junit.runner.RunWith;
 ////import org.mockito.Mockito;
@@ -38,9 +38,9 @@
 //
 //
 //        @Autowired
-//        private locationRepository locationRepo;
+//        private LocationRepository locationRepo;
 //        @Autowired
-//        private locationRepositoryJDBC locationRepoJ;
+//        private LocationRepositoryJDBC locationRepoJ;
 //
 //
 //        @MockBean
@@ -49,7 +49,7 @@
 //
 //        @BeforeAll
 //        public static void setUp() {
-//            locationRepository locationRepository= new locationRepository() {
+//            LocationRepository LocationRepository= new LocationRepository() {
 //                @Override
 //                public List<Location> getAllLocation() {
 //                    return null;
@@ -63,15 +63,15 @@
 //
 ////        Location alex = new Location("House","House@Bricks","Description Here","Caerphilly",103);
 ////
-////        Mockito.when(locationRepository.getAllLocation())
-////                .thenReturn(locationRepository.getAllLocation());
+////        Mockito.when(LocationRepository.getAllLocation())
+////                .thenReturn(LocationRepository.getAllLocation());
 //        }
 //
 //
 //        @Test
 //        public void whenValidName_thenEmployeeShouldBeFound() {
-//            locationRepositoryJDBC s= new locationRepositoryJDBC(jdbc);
-//            List<Location> locations = locationRepository.getAllLocation();
+//            LocationRepositoryJDBC s= new LocationRepositoryJDBC(jdbc);
+//            List<Location> locations = LocationRepository.getAllLocation();
 //            assertEquals(18,locations.size());
 //
 //        }