Index: app/Exports/FilesExport.php
===================================================================
--- app/Exports/FilesExport.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Exports/FilesExport.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Exports;
+
+use App\Models\File;
+use App\Models\Folder;
+use App\Models\User;
+use Maatwebsite\Excel\Concerns\FromCollection;
+use Maatwebsite\Excel\Concerns\WithHeadings;
+use Maatwebsite\Excel\Concerns\WithMapping;
+
+class FilesExport implements FromCollection,  WithMapping, WithHeadings
+{
+    /**
+     * @return \Illuminate\Support\Collection
+     */
+    public function collection()
+    {
+        return File::all();
+    }
+
+    public function map($row): array{
+        $fields = [
+            $row->id,
+            $row->name,
+            $row->location,
+            $row->getSize($row->location) . ' MB',
+            $row->Folder::find($row->folder_id)->name . ' - ' . Folder::find($row->folder_id)->arch_id,
+            $row->created_at,
+            $row->updated_at
+        ];
+        return $fields;
+    }
+
+    public function headings(): array
+    {
+        return [
+            'ID',
+            'Name',
+            'Location',
+            'Size',
+            'Folder - Archive ID',
+            'Created at',
+            'Updated at'
+        ];
+    }
+}
Index: app/Exports/FoldersExport.php
===================================================================
--- app/Exports/FoldersExport.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Exports/FoldersExport.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Exports;
+
+use App\Models\Department;
+use App\Models\Folder;
+use Maatwebsite\Excel\Concerns\FromCollection;
+use Maatwebsite\Excel\Concerns\WithHeadings;
+use Maatwebsite\Excel\Concerns\WithMapping;
+
+class FoldersExport implements FromCollection, WithMapping, WithHeadings
+{
+    /**
+    * @return \Illuminate\Support\Collection
+    */
+    public function collection()
+    {
+        return Folder::all();
+    }
+
+    public function map($row): array{
+        $fields = [
+            $row->id,
+            $row->arch_id,
+            $row->name,
+            $row->note,
+            $row->location,
+            $row->User::find($row->user_id)->username,
+            $row->Department::find($row->department_id)->name . ' - ' . Department::find($row->department_id)->code,
+            $row->is_important,
+            $row->created_at,
+            $row->updated_at
+        ];
+        return $fields;
+    }
+
+    public function headings(): array
+    {
+        return [
+            'ID',
+            'Archive ID',
+            'Name',
+            'Note',
+            'Location',
+            'Created by',
+            'Department name - code',
+            'Is important',
+            'Created at',
+            'Updated at'
+        ];
+    }
+}
Index: app/Exports/UsersExport.php
===================================================================
--- app/Exports/UsersExport.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Exports/UsersExport.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Exports;
+
+use App\Models\Role;
+use App\Models\User;
+use Maatwebsite\Excel\Concerns\FromCollection;
+use Maatwebsite\Excel\Concerns\WithHeadings;
+use Maatwebsite\Excel\Concerns\WithMapping;
+
+class UsersExport implements FromCollection, WithMapping, WithHeadings
+{
+    /**
+    * @return \Illuminate\Support\Collection
+    */
+    public function collection()
+    {
+        return User::all();
+    }
+
+    public function map($row): array{
+        $fields = [
+            $row->id,
+            $row->name,
+            $row->surname,
+            $row->username,
+            $row->email,
+            $row->phone_number,
+            $row->is_confirmed,
+            $row->Role::find($row->role_id)->name,
+            $row->where('id', $row->created_by)->pluck('username')->first(),
+            $row->created_at,
+            $row->updated_at
+        ];
+        return $fields;
+    }
+
+    public function headings(): array
+    {
+        return [
+            'ID',
+            'Name',
+            'Surname',
+            'Username',
+            'Email',
+            'Phone number',
+            'Is confirmed',
+            'Role',
+            'Created by',
+            'Created at',
+            'Updated at'
+        ];
+    }
+}
Index: app/Http/Controllers/Dashboard/DepartmentsController.php
===================================================================
--- app/Http/Controllers/Dashboard/DepartmentsController.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Controllers/Dashboard/DepartmentsController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -7,13 +7,12 @@
 use App\Http\Requests\Dashboard\UpdateDepartmentRequest;
 use App\Models\Department;
-use App\Models\Document;
 use App\Models\File;
 use App\Models\User;
+use App\Notifications\NewDepartmentCreated;
 use Carbon\Carbon;
-use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
-use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Notification;
 use Illuminate\Support\Facades\Storage;
-use function Illuminate\Events\queueable;
+use Illuminate\Filesystem\Filesystem;
 
 class DepartmentsController extends Controller
@@ -40,10 +39,13 @@
         $location = 'Departments' . DIRECTORY_SEPARATOR . $request->code;
 
-        if(!Storage::disk('local')->has($location)){
-            Storage::disk('local')->makeDirectory($location);
+        if(!Storage::disk('uploads')->has($location)){
+            Storage::disk('uploads')->makeDirectory($location);
 
         }
-        $department->location = Storage::disk('local')->path('') . $location;
+        $department->location = $location;
         $department->user_id = auth()->id();
+
+        $users = User::all();
+        Notification::send($users, new NewDepartmentCreated("New department created"));
 
         $department->save();
@@ -65,21 +67,25 @@
         $department = Department::findOrFail($id);
 
-        $documents = $department->document;
+        $folders = $department->folder;
         $oldLocation = DIRECTORY_SEPARATOR . 'Departments' . DIRECTORY_SEPARATOR . $department->code;
 
         $department->name = $request->name;
         $department->code = $request->code;
+        $department->updated_at = Carbon::now();
 
         if($department->isDirty('code'))
         {
             $location = 'Departments' . DIRECTORY_SEPARATOR . $request->code;
-            if(!Storage::disk('local')->has($location)){
-                Storage::disk('local')->move($oldLocation, $location);
-                $department->location = Storage::disk('local')->path('') . $location;
+            if(!Storage::disk('uploads')->has($location)){
+                Storage::disk('uploads')->move($oldLocation, $location);
+                $department->location = $location;
             }
 
-            foreach ($documents as $document) {
-                foreach($document->files as $file) {
-                    $file->location = $location . DIRECTORY_SEPARATOR . $document->name . DIRECTORY_SEPARATOR . $file->name;
+            foreach ($folders as $folder) {
+                    $currArchId = explode('/', $folder->arch_id)[1];
+                    $folder->arch_id = $department->code . '/' . $currArchId;
+                    $folder->save();
+                foreach($folder->files as $file) {
+                    $file->location = $location . DIRECTORY_SEPARATOR . $folder->name . DIRECTORY_SEPARATOR . $file->name;
                     $file->save();
                 }
@@ -98,8 +104,8 @@
         $department = Department::find($id);
         //$department->delete();
-        $documents = $department->document()->count();
+        $folders = $department->folder()->count();
 
-        if($documents > 0){
-            Alert::flash($department->name . " has " . $documents . " document/s associated", "error");
+        if($folders > 0){
+            Alert::flash($department->name . " has " . $folders . " document/s associated", "error");
         }
         else {
@@ -111,3 +117,76 @@
         return redirect()->route("dashboard.departments.index");
     }
+
+    public function downloadAll()
+    {
+        $zip_file=Storage::disk('uploads')->path('Departments.zip');
+        $zip = new \ZipArchive();
+        $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
+        $path = Storage::disk('uploads')->path('Departments');
+        $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
+        $flag=false;
+
+        foreach ($files as $file)
+        {
+            if(File::all()->count() > 0) {
+
+                // We're skipping all subfolders
+                if (!$file->isDir()) {
+                    $filePath = $file->getRealPath();
+                    // extracting filename with substr/strlen
+                    $relativePath = substr($filePath, strlen($path) + 1);
+                    $zip->addFile($filePath, $relativePath);
+                }
+            }
+            else
+            {
+                $flag=true;
+            break;
+            }
+        }
+        if(!$flag) {
+            $zip->close();
+            $headers = array('Content-Type' => 'application/octet-stream',);
+            $zip_new_name = Carbon::now()->format('d.m.Y - H:i') . '- Departments.zip';
+            return response()->download($zip_file, $zip_new_name, $headers);
+        }
+        else {
+            Alert::flash("All departments are empty", "warning");
+            return redirect()->route("dashboard.departments.index");
+        }
+    }
+
+    public function downloadDepartment($id)
+    {
+        $department = Department::find($id);
+
+        $FileSystem = new Filesystem();
+        $zip_file = Storage::disk('uploads')->path('Department.zip');
+        $zip = new \ZipArchive();
+        $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
+        $path = Storage::disk('uploads')->path($department->location) . DIRECTORY_SEPARATOR;
+        $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
+
+        $filesInDept = $FileSystem->allFiles($path);
+
+        if(!empty($filesInDept)) {
+        foreach ($files as $file) {
+            if (!$file->isDir()) {
+                $filePath = $file->getRealPath();
+                // extracting filename with substr/strlen
+                $relativePath = substr($filePath, strlen($path) + 1);
+                $zip->addFile($filePath, $relativePath);
+            }
+        }
+        $zip->close();
+        $headers = array('Content-Type' => 'application/octet-stream',);
+            $zip_new_name = Carbon::now()->format('d.m.Y - H:i') . $department->name . '.zip';
+        return response()->download($zip_file, $zip_new_name, $headers);
+        }
+        else{
+            Alert::flash("This department has no files", "warning");
+            return redirect()->route("dashboard.departments.index");
+        }
+
+    }
 }
Index: p/Http/Controllers/Dashboard/DocumentsController.php
===================================================================
--- app/Http/Controllers/Dashboard/DocumentsController.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,310 +1,0 @@
-<?php
-
-namespace App\Http\Controllers\Dashboard;
-
-use App\Helpers\Alert;
-use App\Http\Requests\Dashboard\DocumentRequest;
-use App\Http\Requests\Dashboard\FileRequest;
-use App\Http\Requests\Dashboard\PasswordSettingsRequest;
-use App\Models\Department;
-use App\Models\Document;
-use App\Models\File;
-use App\Services\UploadService;
-use Carbon\Carbon;
-use Illuminate\Http\Request;
-use Illuminate\Http\Response;
-use Illuminate\Support\Facades\Storage;
-use App\Http\Controllers\Controller;
-
-class DocumentsController extends Controller
-{
-    public function index(Request $request)
-    {
-        $queries = explode(" ", $request->search);
-        $result = collect();
-
-        foreach ($queries as $query) {
-            $result->push(Document::where("arch_id", "like", "%{$query}%")->orWhere("name", "like", "%{$query}%")->get());
-        }
-
-        $result = $result->flatten();
-
-        $deptName = "";
-        $deptCode = "";
-
-        if ($request->query('id')) {
-            $deptName = Department::find($request->query('id'))->getOriginal('name');
-            $deptCode = Department::find($request->query('id'))->getOriginal('code');
-            $documentsInDeptSort = Document::with('department')->when($request->has('id'), function ($query) use ($request) {
-                $query->where('department_id', $request->query('id'));
-            });
-
-            if ($request->query('sort') == 'newest') {
-                $documents = $documentsInDeptSort->orderBy('created_at', 'desc')->paginate(16);
-            } else if ($request->query('sort') == 'name') {
-                $documents = $documentsInDeptSort->orderBy('name', 'asc')->paginate(16);
-            } else {
-                $documents = Document::where('department_id', $request->query('id'))->paginate(16);
-            }
-        } else {
-            if ($request->query('sort') == 'newest') {
-                $documents = Document::orderBy('created_at', 'desc')->paginate(16);
-            } else if ($request->query('sort') == 'name') {
-                $documents = Document::orderBy('name', 'asc')->paginate(16);
-            } else if ($request->query('sort') == 'important') {
-                $documents = Document::where('is_important', true)->paginate(16);
-            } else if ($request->query('sort') == 'recent') {
-                $documents = Document::orderBy('created_at', 'desc')->paginate(16);
-            } else if ($request->query('search')) {
-                $result = collect();
-
-                foreach ($queries as $query) {
-                    $result->push(Document::where("arch_id", "like", "%{$query}%")->orWhere("name", "like", "%{$query}%")->get());
-                }
-                $result = $result->flatten();
-                $documents = $result;
-            } else {
-                $documents = Document::paginate(20);
-            }
-        }
-
-        $departments = Department::all();
-
-        $diskTotal = disk_total_space('/');
-        $diskTotalSize = $diskTotal / 1073741824;
-
-        $diskFree = disk_free_space('/');
-        $used = $diskTotal - $diskFree;
-
-        $diskUsedSize = $used / 1073741824;
-        $diskUse1 = round(100 - (($diskUsedSize / $diskTotalSize) * 100));
-        $diskUse = round(100 - ($diskUse1)) . '%';
-
-        return view("dashboard.documents.index")->with([
-            "documents" => $documents,
-            "currentUser" => auth()->user(),
-            "departments" => $departments,
-            "docsCount" => Department::withCount('document')->get(),
-            "totalDocs" => Document::all()->count(),
-            "countImportant" => Document::where('is_important', true)->get()->count(),
-            "diskTotal" => $diskTotal,
-            "diskTotalSize" => $diskTotalSize,
-            "diskUse" => $diskUse,
-            "diskUsedSize" => $diskUsedSize,
-            "deptName" => $deptName,
-            "deptCode" => $deptCode,
-
-        ]);
-
-    }
-
-    public function create()
-    {
-        return view("dashboard.documents.create")->with([
-            "departments" => Department::all()
-        ]);
-    }
-
-    public function store(DocumentRequest $request)
-    {
-        $document = new Document();
-        $user = auth()->user();
-        $department = Department::find($request->department);
-
-        $document->user()->associate($user);
-        $document->department()->associate($department);
-
-        $document->arch_id = $request->arch_id;
-        $document->name = $request->name;
-        $document->description = $request->description;
-
-        $location = 'Departments' . DIRECTORY_SEPARATOR . $document->department->code . DIRECTORY_SEPARATOR . $request->name;
-
-        if (!Storage::disk('local')->has($location)) {
-            Storage::disk('local')->makeDirectory($location);
-        }
-
-        $document->save();
-
-        if ($request->has('file_item')) {
-            foreach ($request->file_item as $file) {
-                $file->storeAs($location . DIRECTORY_SEPARATOR, $file->getClientOriginalName());
-                $newFile = new File();
-                $newFile->name = $file->getClientOriginalName();
-                $newFile->location = $location . DIRECTORY_SEPARATOR . $file->getClientOriginalName();
-                $newFile->document()->associate($document);
-                $newFile->save();
-            }
-        }
-
-        Alert::flash("New document created successfully");
-
-        return redirect()->route("dashboard.documents.index");
-    }
-
-    public function editShow($id)
-    {
-        return view("dashboard.documents.edit")->with([
-            "document" => Document::findOrFail($id),
-            "departments" => Department::all(),
-            "files" => File::where('document_id', $id)->get()
-        ]);
-    }
-
-    public function edit(DocumentRequest $request, $id)
-    {
-        $document = Document::findOrFail($id);
-        $files = File::where('document_id', $id)->get();
-
-        $department = Department::find($request->department);
-
-        $document->department()->associate($department);
-
-        $oldLocation = 'Departments' . DIRECTORY_SEPARATOR . $document->department->code . DIRECTORY_SEPARATOR . $document->name;
-
-        $document->name = $request->name;
-        $document->arch_id = $request->arch_id;
-        $document->description = $request->description;
-
-        $location = 'Departments' . DIRECTORY_SEPARATOR . $document->department->code . DIRECTORY_SEPARATOR . $request->name;
-
-        if ($document->isDirty('name')) {
-            if (!Storage::disk('local')->has($location)) {
-                Storage::disk('local')->move($oldLocation, $location);
-                foreach($files as $file){
-                    $file->location = $location . DIRECTORY_SEPARATOR . $file->name;
-                    $file->save();
-                }
-            }
-        }
-
-        if ($request->has('file_item')) {
-            foreach ($request->file_item as $file) {
-                $fileName = $file->getClientOriginalName();
-                if (Storage::disk('local')->has($location . DIRECTORY_SEPARATOR . $fileName)) {
-                    // $hasFileError = true;
-                    // break;
-                    $NewFileName = time() . $fileName;
-                    $file->storeAs($location . DIRECTORY_SEPARATOR, $NewFileName);
-                    $newFile = new File();
-                    $newFile->name = rand() . $fileName;
-                    $newFile->location = $location . DIRECTORY_SEPARATOR . $NewFileName;
-                    $newFile->document()->associate($document);
-                    $newFile->save();
-                } else {
-                    $file->storeAs($location . DIRECTORY_SEPARATOR, $fileName);
-                    $newFile = new File();
-                    $newFile->name = $fileName;
-                    $newFile->location = $location . DIRECTORY_SEPARATOR . $fileName;
-                    $newFile->document()->associate($document);
-                    $newFile->save();
-                }
-            }
-        }
-
-        $document->save();
-
-//        if($hasFileError) {
-//            Alert::flash('Document with the same name exists', 'error');
-//            return redirect()->route("dashboard.documents.edit", ['id' => $document->id]);
-//        }
-
-
-
-        Alert::flash("Document edited successfully");
-
-        return redirect()->back();
-    }
-
-    public function toggleImportant($id)
-    {
-        $document = Document::find($id);
-        $document->is_important = !$document->is_important;
-        $document->save();
-
-        if ($document->is_important == true)
-            Alert::flash("Document marked as important successfully");
-        else
-            Alert::flash("Document marked as not important successfully");
-
-        return redirect()->back();
-    }
-
-    public function search(Request $request)
-    {
-        $queries = explode(" ", $request->q);
-        $result = collect();
-
-        foreach ($queries as $query) {
-            $result->push(Document::where("arch_id", "like", "%{$query}%")->orWhere("name", "like", "%{$query}%")->get());
-        }
-
-        $result = $result->flatten();
-
-        $departments = Department::all();
-
-        return view("dashboard.documents.search")
-            ->with("searchQuery", $request->q)
-            ->with("results", $result)
-            ->with("departments", $departments)
-            ->with("countImportant", Document::where('is_important', true)->get()->count());
-    }
-
-    public function destroy($id)
-    {
-        $document = Document::find($id);
-        $files = File::where('document_id', $id)->get();
-        if (auth()->user()->hasPermission("delete_all_documents")) {
-           // @dd($files);
-            foreach ($files as $file) {
-                $file->delete();
-            }
-            $document->delete();
-            $location = 'Departments' . DIRECTORY_SEPARATOR . $document->department->code . DIRECTORY_SEPARATOR . $document->name;
-            Storage::disk('local')->deleteDirectory($location);
-            Alert::flash($document->name . " deleted successfully");
-        }
-        return redirect()->route("dashboard.documents.index");
-    }
-
-    public function deleteFile($id)
-    {
-        $file = File::find($id);
-        $file->delete();
-        Storage::disk('local')->delete($file->location);
-
-        Alert::flash($file->name . " deleted successfully");
-
-        return redirect()->back();
-    }
-
-    public function downloadFile($id)
-    {
-        $file = File::find($id);
-        return Storage::download($file->location);
-    }
-
-    public function renameFile(FileRequest $request, $id)
-    {
-        $file = File::find($id);
-        $fileExtension = explode('.', $file->name)[1];
-
-        $file->name = $request->name . '.' . $fileExtension;
-        $newLocation = 'Departments' . DIRECTORY_SEPARATOR . explode(DIRECTORY_SEPARATOR, $file->location)[1] . DIRECTORY_SEPARATOR . explode(DIRECTORY_SEPARATOR, $file->location)[2] . DIRECTORY_SEPARATOR . $file->name;
-
-        if(Storage::disk('local')->has($newLocation)) {
-            Alert::flash("A file with the same name already exists", "error");
-            return redirect()->back();
-        }
-        else {
-            Storage::disk('local')->copy($file->location, $newLocation);
-            Storage::disk('local')->delete($file->location);
-
-        $file->location = $newLocation;
-        $file->save();
-
-        Alert::flash($file->name . " updated successfully");
-        return redirect()->back();
-        }
-    }
-}
Index: app/Http/Controllers/Dashboard/ExportExcelController.php
===================================================================
--- app/Http/Controllers/Dashboard/ExportExcelController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Controllers/Dashboard/ExportExcelController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Controllers\Dashboard;
+
+use App\Exports\FilesExport;
+use App\Exports\FoldersExport;
+use App\Exports\UsersExport;
+use App\Http\Controllers\Controller;
+use Carbon\Carbon;
+use Illuminate\Support\Facades\DB;
+use Maatwebsite\Excel\Concerns\WithHeadings;
+use Maatwebsite\Excel\Facades\Excel;
+
+
+class ExportExcelController extends Controller
+{
+    public function ExportUsers()
+    {
+        return Excel::download(new UsersExport(), Carbon::now()->format('d.m.Y - H:i') . ' - users.xlsx');
+
+    }
+
+    public function ExportFolders()
+    {
+        return Excel::download(new FoldersExport(), Carbon::now()->format('d.m.Y - H:i') . ' - folders.xlsx');
+
+    }
+
+    public function ExportFiles()
+    {
+        return Excel::download(new FilesExport(), Carbon::now()->format('d.m.Y - H:i') . ' - files.xlsx');
+
+    }
+}
Index: app/Http/Controllers/Dashboard/FilesController.php
===================================================================
--- app/Http/Controllers/Dashboard/FilesController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Controllers/Dashboard/FilesController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,105 @@
+<?php
+
+namespace App\Http\Controllers\Dashboard;
+
+use App\Helpers\Alert;
+use App\Http\Controllers\Controller;
+use App\Http\Requests\Dashboard\FileNameRequest;
+use App\Http\Requests\Dashboard\FileRequest;
+use App\Models\FileType;
+use App\Models\Folder;
+use App\Models\File;
+use App\Models\User;
+use App\Notifications\NewFileCreated;
+use Carbon\Carbon;
+use Illuminate\Support\Facades\Notification;
+use Illuminate\Support\Facades\Storage;
+
+class FilesController extends Controller
+{
+    public function index ()
+    {
+        return view("dashboard.files.index")->with([
+            "files" => File::all(),
+            "folders" => Folder::all(),
+            "excelExt" => array("xls", "xlsx", "xls", "csv"),
+            "textExt" => array("txt", "doc", "docx"),
+            "imageExt" => array("png", "jpg", "jpeg"),
+            "fileTypes" => '.' . implode(',.', explode(',', explode(':', FileType::find('1')->mimes)[1]))
+        ]);
+    }
+
+    public function deleteFile($id)
+    {
+        $file = File::find($id);
+        $file->delete();
+        Storage::disk('uploads')->delete($file->location);
+
+        Alert::flash($file->name . " deleted successfully");
+
+        return redirect()->back();
+    }
+
+    public function store(FileRequest $request)
+    {
+        $file = new File();
+
+        $folder = Folder::find($request->folder);
+
+        $location = $folder->location;
+
+        $users = User::all();
+
+        if ($request->has('file_item')) {
+            foreach ($request->file_item as $file) {
+                $fileName = $folder->name . '-' . uniqid() . '.' . $file->getClientOriginalExtension();
+                $file->storeAs($location . DIRECTORY_SEPARATOR, $fileName);
+                $newFile = new File();
+                $newFile->name = $fileName;
+                $newFile->location = $location . DIRECTORY_SEPARATOR . $fileName;
+                $newFile->folder()->associate($folder);
+                $newFile->save();
+            }
+            Notification::send($users, new NewFileCreated("New files added"));
+
+            Alert::flash("New files added successfully");
+
+            return redirect()->route("dashboard.files.index");
+        }
+        else {
+            Alert::flash("No files were uploaded", "error");
+
+            return redirect()->route("dashboard.files.index");
+        }
+    }
+
+    public function downloadFile($id)
+    {
+        $file = File::find($id);
+        return Storage::download($file->location);
+    }
+
+    public function renameFile(FileNameRequest $request, $id)
+    {
+        $file = File::find($id);
+        $fileExtension = explode('.', $file->name)[1];
+
+        $file->name = $request->name . '.' . $fileExtension;
+        $newLocation = 'Departments' . DIRECTORY_SEPARATOR . explode(DIRECTORY_SEPARATOR, $file->location)[1] . DIRECTORY_SEPARATOR . explode(DIRECTORY_SEPARATOR, $file->location)[2] . DIRECTORY_SEPARATOR . $file->name;
+
+        if(Storage::disk('uploads')->has($newLocation)) {
+            Alert::flash("A file with the same name already exists", "error");
+            return redirect()->back();
+        }
+        else {
+            Storage::disk('uploads')->move($file->location, $newLocation);
+
+            $file->location = $newLocation;
+            $file->updated_at = Carbon::now();
+            $file->save();
+
+            Alert::flash($file->name . " updated successfully");
+            return redirect()->back();
+        }
+    }
+}
Index: app/Http/Controllers/Dashboard/FoldersController.php
===================================================================
--- app/Http/Controllers/Dashboard/FoldersController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Controllers/Dashboard/FoldersController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,323 @@
+<?php
+
+namespace App\Http\Controllers\Dashboard;
+
+use App\Helpers\Alert;
+use App\Http\Requests\Dashboard\FolderRequest;
+use App\Http\Requests\Dashboard\FileNameRequest;
+use App\Models\Department;
+use App\Models\FileType;
+use App\Models\Folder;
+use App\Models\File;
+use App\Models\User;
+use App\Notifications\NewFolderCreated;
+use Carbon\Carbon;
+use Illuminate\Filesystem\Filesystem;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Notification;
+use Illuminate\Support\Facades\Storage;
+use App\Http\Controllers\Controller;
+
+class FoldersController extends Controller
+{
+    public function index(Request $request)
+    {
+        $deptName = "";
+        $deptCode = "";
+
+        if ($request->query('id')) {
+            $deptName = Department::find($request->query('id'))->getOriginal('name');
+            $deptCode = Department::find($request->query('id'))->getOriginal('code');
+            $foldersInDeptSort = Folder::with('department')->when($request->has('id'), function ($query) use ($request) {
+                $query->where('department_id', $request->query('id'));
+            });
+
+            if ($request->query('sort') == 'newest') {
+                $folders = $foldersInDeptSort->orderBy('created_at', 'desc')->paginate(12);
+            }
+            else if ($request->query('sort') == 'name') {
+                $folders = $foldersInDeptSort->orderBy('name', 'asc')->paginate(12);
+            }
+            else if($request->query('sort') == 'count'){
+                $total = $foldersInDeptSort->folder->files->count();
+                $folders = $foldersInDeptSort->orderBy($total, 'asc')->paginate(12);
+            }
+            else {
+                $folders = Folder::where('department_id', $request->query('id'))->paginate(12);
+            }
+        } else {
+            if ($request->query('sort') == 'newest') {
+                $folders = Folder::orderBy('created_at', 'desc')->paginate(12);
+            }
+            else if ($request->query('sort') == 'name') {
+                $folders = Folder::orderBy('name', 'asc')->paginate(12);
+            }
+            else if ($request->query('sort') == 'important') {
+                $folders = Folder::where('is_important', true)->paginate(12);
+            }
+            else if ($request->query('sort') == 'recent') {
+                $folders = Folder::orderBy('created_at', 'desc')->paginate(12);
+            } else if ($request->query('search')) {
+
+                $result = collect();
+                $queries = explode(" ", $request->search);
+                foreach ($queries as $query) {
+                    $result->push(Folder::where("arch_id", "like", "%{$query}%")->orWhere("name", "like", "%{$query}%")->get());
+                }
+                $result = $result->flatten();
+                $folders = $result;
+            } else {
+                $folders = Folder::paginate(12);
+            }
+        }
+
+        $departments = Department::all();
+
+        $diskTotal = disk_total_space('/');
+        $diskTotalSize = $diskTotal / 1073741824;
+
+        $diskFree = disk_free_space('/');
+        $used = $diskTotal - $diskFree;
+
+        $diskUsedSize = $used / 1073741824;
+        $diskUse1 = round(100 - (($diskUsedSize / $diskTotalSize) * 100));
+        $diskUse = round(100 - ($diskUse1)) . '%';
+
+        return view("dashboard.folders.index")->with([
+            "folders" => $folders,
+            "currentUser" => auth()->user(),
+            "departments" => $departments,
+            "docsCount" => Department::withCount('folder')->get(),
+            "totalDocs" => Folder::all()->count(),
+            "countImportant" => Folder::where('is_important', true)->get()->count(),
+            "diskTotal" => $diskTotal,
+            "diskTotalSize" => $diskTotalSize,
+            "diskUse" => $diskUse,
+            "diskUsedSize" => $diskUsedSize,
+            "deptName" => $deptName,
+            "deptCode" => $deptCode,
+            "fileTypes" => '.' . implode(',.', explode(',', explode(':', FileType::find('1')->mimes)[1]))
+        ]);
+
+    }
+
+    public function create()
+    {
+        return view("dashboard.folders.create")->with([
+            "departments" => Department::all()
+        ]);
+    }
+
+    public function store(FolderRequest $request)
+    {
+        $folder = new Folder();
+        $user = auth()->user();
+        $department = Department::find($request->department);
+
+        $folder->user()->associate($user);
+        $folder->department()->associate($department);
+
+        $folder->arch_id = $request->arch_id;
+        $folder->name = $request->name;
+        $folder->note = $request->note;
+
+        if($request->has('is_important')){
+            $folder->is_important = true;
+        }else{
+            $folder->is_important = false;
+        }
+
+        $location = $folder->department->location . DIRECTORY_SEPARATOR . $request->name;
+
+        if (!Storage::disk('uploads')->has($location)) {
+            Storage::disk('uploads')->makeDirectory($location);
+        }
+
+        $users = User::all();
+        Notification::send($users, new NewFolderCreated("New folder created"));
+
+        $folder->location = $location;
+
+        $folder->save();
+
+        if ($request->has('file_item')) {
+            foreach ($request->file_item as $file) {
+                $fileName = $folder->name . '-' . uniqid() . '.' . $file->getClientOriginalExtension();
+                $file->storeAs($location . DIRECTORY_SEPARATOR, $fileName);
+                $newFile = new File();
+                $newFile->name = $fileName;
+                $newFile->location = $location . DIRECTORY_SEPARATOR . $fileName;
+                $newFile->folder()->associate($folder);
+                $newFile->save();
+            }
+        }
+
+        Alert::flash("New folder created successfully");
+
+        return redirect()->route("dashboard.folders.index");
+    }
+
+    public function editShow($id)
+    {
+        return view("dashboard.folders.edit")->with([
+            "folder" => Folder::findOrFail($id),
+            "departments" => Department::all(),
+            "files" => File::where('folder_id', $id)->get(),
+            "excelExt" => array("xls", "xlsx", "xls", "csv"),
+            "textExt" => array("txt", "doc", "docx"),
+            "imageExt" => array("png", "jpg", "jpeg"),
+        ]);
+    }
+
+    public function edit(FolderRequest $request, $id)
+    {
+        $folder = Folder::findOrFail($id);
+        $files = File::where('folder_id', $id)->get();
+
+        $department = Department::find($request->department);
+
+        $folder->department()->associate($department);
+
+        $oldLocation = $folder->department->location . DIRECTORY_SEPARATOR . $folder->name;
+
+        $folder->name = $request->name;
+        $folder->arch_id = $request->arch_id;
+        $folder->note = $request->note;
+        $folder->updated_at = Carbon::now();
+
+        $location = $folder->department->location . DIRECTORY_SEPARATOR . $request->name;
+
+        if ($folder->isDirty('name')) {
+            if (!Storage::disk('uploads')->has($location)) {
+                Storage::disk('uploads')->move($oldLocation, $location);
+                foreach($files as $file){
+                    $file->location = $location . DIRECTORY_SEPARATOR . $file->name;
+                    $file->save();
+                }
+            }
+        }
+
+        if ($request->has('file_item')) {
+            foreach ($request->file_item as $file) {
+                $fileName = $folder->name . '-' . uniqid() . '.' . $file->getClientOriginalExtension();
+                    $file->storeAs($location . DIRECTORY_SEPARATOR, $fileName);
+                    $newFile = new File();
+                    $newFile->name = $fileName;
+                    $newFile->location = $location . DIRECTORY_SEPARATOR . $fileName;
+                    $newFile->folder()->associate($folder);
+                    $newFile->save();
+            }
+        }
+
+        $folder->location = $location;
+
+        $folder->save();
+
+
+        Alert::flash("Folder edited successfully");
+
+        return redirect()->back();
+    }
+
+    public function toggleImportant($id)
+    {
+        $folder = Folder::find($id);
+        $folder->is_important = !$folder->is_important;
+        $folder->save();
+
+        if ($folder->is_important == true)
+            Alert::flash("Folder marked as important successfully");
+        else
+            Alert::flash("Folder marked as not important successfully");
+
+        return redirect()->back();
+    }
+
+    public function destroy($id)
+    {
+        $folder = Folder::find($id);
+        $files = File::where('folder_id', $id)->get();
+        if (auth()->user()->hasPermission("delete_all_folders") && !$folder->is_important) {
+
+            foreach ($files as $file) {
+                $file->delete();
+            }
+            $folder->delete();
+            $location = $folder->department->location . DIRECTORY_SEPARATOR . $folder->name;
+            Storage::disk('uploads')->deleteDirectory($location);
+            Alert::flash($folder->name . " deleted successfully");
+        }
+        Alert::flash($folder->name . " is important", "error");
+        return redirect()->route("dashboard.folders.index");
+    }
+
+    public function downloadfolder(Request $request, $id)
+    {
+        $folder = Folder::find($id);
+
+        $FileSystem = new Filesystem();
+        $zip_file = Storage::disk('uploads')->path('Folder.zip');
+        $zip = new \ZipArchive();
+        $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
+        $path = Storage::disk('uploads')->path($folder->department->location . DIRECTORY_SEPARATOR . $folder->name);
+
+        $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
+
+        $filesInDoc = $FileSystem->allFiles($path);
+
+        if(empty(!$filesInDoc)) {
+            foreach ($files as $file) {
+                if (!$file->isDir()) {
+                    $filePath = $file->getRealPath();
+                    // extracting filename with substr/strlen
+                    $relativePath = substr($filePath, strlen($path) + 1);
+                    $zip->addFile($filePath, $relativePath);
+                }
+            }
+            $zip->close();
+            $headers = array('Content-Type' => 'application/octet-stream',);
+            $zip_new_name = Carbon::now()->format('d.m.Y - H:i') . $folder->name . '.zip';
+                return response()->download($zip_file, $zip_new_name, $headers);
+        }
+        else {
+            Alert::flash("This folder has no files", "warning");
+            return redirect()->back();
+        }
+
+    }
+
+    public function files(Request $request, $id)
+    {
+        $folder = Folder::findOrFail($id);
+        $files = File::where('folder_id', $id);
+        $deptId = $folder->department_id;
+        $folders = Folder::where('department_id', $deptId)->get();
+
+        $queries = explode(" ", $request->search);
+
+        if ($request->query('search')) {
+            $result = collect();
+
+            foreach ($queries as $query) {
+                $result->push($files->where("name", "like", "%{$query}%")->get());
+            }
+            $result = $result->flatten();
+            $files = $result;
+        }
+        else {
+            $files = File::where('folder_id', $id)->paginate(10);
+        }
+
+        return view("dashboard.folders.files")->with([
+            "folder" => $folder,
+            "departments" => Department::all(),
+            "files" => $files,
+            "excelExt" => array("xls", "xlsx", "xls", "csv"),
+            "textExt" => array("txt", "doc", "docx"),
+            "imageExt" => array("png", "jpg", "jpeg"),
+            "folders" => $folders,
+            "fileTypes" => '.' . implode(',.', explode(',', explode(':', FileType::find('1')->mimes)[1]))
+        ]);
+    }
+}
+
Index: app/Http/Controllers/Dashboard/IndexController.php
===================================================================
--- app/Http/Controllers/Dashboard/IndexController.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Controllers/Dashboard/IndexController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -4,4 +4,7 @@
 
 use App\Helpers\Alert;
+use App\Models\Department;
+use App\Models\Folder;
+use App\Models\File;
 use App\Models\User;
 use App\Http\Controllers\Controller;
@@ -17,4 +20,7 @@
         return view("dashboard.index")->with([
             "counters" => $counters,
+            "departments" => Department::all(),
+            "folders" => Folder::all(),
+            "files" => File::all()
         ]);
     }
Index: app/Http/Controllers/Dashboard/NotificationsController.php
===================================================================
--- app/Http/Controllers/Dashboard/NotificationsController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Controllers/Dashboard/NotificationsController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,81 @@
+<?php
+
+namespace App\Http\Controllers\Dashboard;
+
+use Carbon\Carbon;
+use App\Http\Controllers\Controller;
+
+class NotificationsController extends Controller
+{
+    public $notifications;
+    private $notificationsLimit = 10;
+
+    public function __construct() {
+        $this->middleware("auth");
+        $this->notifications = null;
+    }
+
+    public function notifications() {
+        return view("dashboard.notifications.index")->with([
+            "notifications" => $this->decode(auth()->user()->notifications, true)
+        ]);
+    }
+
+    public function getNotifications() {
+        return auth()->user()->readNotifications;
+    }
+
+    public function getUnreadNotifications() {
+        return auth()->user()->unreadNotifications;
+    }
+
+    public function markNotificationsAsRead() {
+        return auth()->user()->unreadNotifications->markAsRead();
+    }
+
+    public function showNotifications() {
+
+        $this->notifications = collect();
+
+        if($this->getUnreadNotifications()->count() == 0) {
+            $this->notifications->push($this->getNotifications()->take($this->notificationsLimit));
+            $this->notifications = $this->notifications->flatten();
+            return response()->json($this->decode($this->notifications->reverse()));
+        }
+
+        if($this->getUnreadNotifications()->count() > 10) {
+            $this->notifications->push($this->getUnreadNotifications()->take($this->notificationsLimit));
+        } else {
+            $readNotifications = $this->notificationsLimit - $this->getUnreadNotifications()->count();
+            $this->notifications->push($this->getUnreadNotifications());
+            $this->notifications->push($this->getNotifications()->take($readNotifications));
+        }
+
+        $this->notifications = $this->notifications->flatten();
+
+        return response()->json($this->decode($this->notifications->reverse()));
+    }
+
+    public function decode($notifications, $isShowOnly = false) {
+
+        $response = array();
+        $decoded = json_decode($notifications);
+
+        foreach($decoded as $notification) {
+            $isRead = empty($notification->read_at) ? false : true;
+            array_push($response, [
+                "isRead" => $isRead,
+                // "from" => $notification->data->from,
+                "url" => $notification->data->url,
+                "message" => $notification->data->message,
+                "ago" => Carbon::parse($notification->created_at)->diffForHumans(),
+            ]);
+        }
+
+        if(!$isShowOnly) {
+            $this->markNotificationsAsRead();
+        }
+
+        return $response;
+    }
+}
Index: app/Http/Controllers/Dashboard/SettingsController.php
===================================================================
--- app/Http/Controllers/Dashboard/SettingsController.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Controllers/Dashboard/SettingsController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -5,6 +5,8 @@
 use App\Helpers\Alert;
 use App\Http\Requests\Dashboard\EmailSettingsRequest;
+use App\Http\Requests\Dashboard\FileTypeRequest;
 use App\Http\Requests\Dashboard\PasswordSettingsRequest;
 use App\Http\Requests\Dashboard\UsernameSettingsRequest;
+use App\Models\FileType;
 use App\Models\User;
 use App\Http\Controllers\Controller;
@@ -19,8 +21,11 @@
     public function settings()
     {
+        $fileType = FileType::find("1");
+
         return view("dashboard.settings.index")->with([
             "user" => auth()->user(),
             "adminAndReferents" => User::where("role_id", 1)->orWhere("role_id", 2)->get(),
-            "active_tab" => "account"
+            "active_tab" => "account",
+            "fileType" => $fileType
         ]);
     }
@@ -30,4 +35,5 @@
             $user = auth()->user();
             $user->username = $request->username;
+            $user->updated_at = Carbon::now();
             $user->save();
 
@@ -42,4 +48,5 @@
             $user = auth()->user();
             $user->password = bcrypt($request->password);
+            $user->updated_at = Carbon::now();
             $user->save();
 
@@ -58,4 +65,5 @@
         $user->security_code = $user->generateSecurityCode();
         $user->verify_token = $user->generateVerifyToken();
+        $user->updated_at = Carbon::now();
 
         $user->save();
@@ -69,3 +77,28 @@
     }
 
+
+
+    public function fileTypes(FileTypeRequest $request)
+    {
+        $fileType = FileType::find("1");
+
+        $fileType->mimes = $request->mimes;
+        $fileType->max_size = $request->max_size;
+        $fileType->user_id = auth()->id();
+        $fileType->updated_at = Carbon::now();
+
+        if(auth()->user()->hasPermission("manage_file_types")) {
+            $fileType->save();
+
+            Alert::flash("File validations updated successfully");
+
+            return redirect()->back();
+        }
+        else {
+            Alert::flash("You don't have permission to change file validations", "error");
+
+            return redirect()->back();
+        }
+    }
+
 }
Index: app/Http/Controllers/Dashboard/UsersController.php
===================================================================
--- app/Http/Controllers/Dashboard/UsersController.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Controllers/Dashboard/UsersController.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -24,5 +24,6 @@
     {
         return view("dashboard.users.index")->with([
-            "users" => User::all()
+            "users" => User::all(),
+            "roles" => Role::all(),
         ]);
     }
@@ -62,4 +63,6 @@
             $user->avatar = $avatarName;
         }
+
+        $user->created_by = auth()->user()->id;
         $user->save();
 
@@ -88,5 +91,5 @@
         $user->phone_number = $request->phone_number;
         $user->role_id = $request->userRole;
-        $user->updated_at = $request->Carbon::now();;
+        $user->updated_at = Carbon::now();
 
         if ($request->hasFile("avatar")) {
Index: p/Http/Requests/Dashboard/DocumentRequest.php
===================================================================
--- app/Http/Requests/Dashboard/DocumentRequest.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,72 +1,0 @@
-<?php
-
-namespace App\Http\Requests\Dashboard;
-
-use App\Models\Department;
-use App\Models\Document;
-use Illuminate\Foundation\Http\FormRequest;
-
-class DocumentRequest extends FormRequest
-{
-    /**
-     * Determine if the user is authorized to make this request.
-     *
-     * @return bool
-     */
-    public function authorize()
-    {
-        if ($this->isMethod("patch")) {
-            $document = Document::find($this->route("id"));
-            return auth()->user()->hasPermission("edit_all_documents") || ($document->user->id == auth()->user()->id);
-        }
-
-        return true;
-    }
-
-    /**
-     * Get the validation rules that apply to the request.
-     *
-     * @return array
-     */
-    public function rules()
-    {
-        $rules = [
-            "arch_id" => [
-                "required",
-                function ($attribute, $value, $fail) {
-                    $arch_id = $this->request->get('arch_id');
-                    $deptId = explode('/', $arch_id)[0];
-                    $archNum = explode('/', $arch_id)[1];
-
-                    if (empty($archNum)) {
-                        $fail("Please enter documents Archive ID");
-                    }
-
-                    if ($deptId !== Department::find($this->request->get('department'))->code) {
-                        $fail("Document Archive ID field format is invalid");
-                    }
-                }
-            ],
-            "name" => "required|min:10|max:255",
-            "department" => "required|integer|exists:departments,id",
-            "description" => "required|min:30",
-        ];
-
-        if ($this->isMethod("patch")) {
-            $fileRules = [
-                "file_item.*" => "mimes:jpg,jpeg,png,pdf|max:4096"
-            ];
-        } else {
-            $fileRules = [
-                "file_item.*" => "mimes:jpg,jpeg,png,pdf|max:4096"
-            ];
-        }
-
-        $rules = array_merge(
-            $rules,
-            $fileRules,
-        );
-
-        return $rules;
-    }
-}
Index: app/Http/Requests/Dashboard/FileNameRequest.php
===================================================================
--- app/Http/Requests/Dashboard/FileNameRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Requests/Dashboard/FileNameRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests\Dashboard;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class FileNameRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            "name" => ['required', 'max:255', 'regex:/^[^.\/|]+$/', 'unique:files,name,$this->id,id']
+        ];
+    }
+}
Index: app/Http/Requests/Dashboard/FileRequest.php
===================================================================
--- app/Http/Requests/Dashboard/FileRequest.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Requests/Dashboard/FileRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -3,4 +3,7 @@
 namespace App\Http\Requests\Dashboard;
 
+use App\Helpers\Alert;
+use App\Models\FileType;
+use App\Rules\UploadCount;
 use Illuminate\Foundation\Http\FormRequest;
 
@@ -24,7 +27,29 @@
     public function rules()
     {
-        return [
-            "name" => "required|max:255|regex:/^[^.]+$/",
-        ];
+        $rules = [
+            "folder" => "required|integer|exists:folders,id",
+            ];
+
+        $mimes = FileType::find("1")->mimes;
+        $maxSize = FileType::find("1")->max_size;
+
+        if ($this->isMethod("patch")) {
+            $fileRules = [
+                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
+            ];
+        }
+
+        else {
+            $fileRules = [
+                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
+            ];
+        }
+
+        $rules = array_merge(
+            $rules,
+            $fileRules,
+        );
+
+        return $rules;
     }
 }
Index: app/Http/Requests/Dashboard/FileTypeRequest.php
===================================================================
--- app/Http/Requests/Dashboard/FileTypeRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Requests/Dashboard/FileTypeRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Http\Requests\Dashboard;
+
+use Illuminate\Foundation\Http\FormRequest;
+use League\Flysystem\Util\MimeType;
+use League\MimeTypeDetection\MimeTypeDetector;
+
+class FileTypeRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            "mimes" => [
+                "required",
+//                function ($attribute, $value, $fail) {
+//
+//                    try {
+//                        $mimeType = mimes;
+//                        @dd($mimeType);
+//                        $mimetypes = $guesser->guess($pubdir . $avatar);
+////                        if ($mimetypes == null) {
+////                            $validator->errors()->add('avatar', 'No valid Mime/Type');
+////                            return $validator;
+////                        }
+////                    }
+////
+////$mime= explode ('/', $mimetypes);
+////if ($mime[0] != 'image') {
+////    $validator->errors()->add('avatar', 'Not a valid image');
+////}
+//
+//                        if (empty($archNum)) {
+//                            $fail("Please enter folders Archive ID");
+//                        }
+//
+//                        if ($deptId !== Department::find($this->request->get('department'))->code) {
+//                            $fail("Folder Archive ID field format is invalid");
+//                        }
+//                    } catch (\Exception $e) {
+//                        $fail("Please enter folders Archive ID");
+//                    }
+//                }
+            ],
+            "max_size" => "required|integer",
+        ];
+    }
+}
Index: app/Http/Requests/Dashboard/FolderRequest.php
===================================================================
--- app/Http/Requests/Dashboard/FolderRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Http/Requests/Dashboard/FolderRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,84 @@
+<?php
+
+namespace App\Http\Requests\Dashboard;
+
+use App\Models\Department;
+use App\Models\FileType;
+use App\Models\Folder;
+use Illuminate\Foundation\Http\FormRequest;
+
+class FolderRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        if ($this->isMethod("patch")) {
+            $folder = Folder::find($this->route("id"));
+            return auth()->user()->hasPermission("edit_all_folders") || ($folder->user->id == auth()->user()->id);
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $rules = [
+            "arch_id" => [
+                "required",
+                "unique:folders,arch_id,$this->id,id",
+                function ($attribute, $value, $fail) {
+
+                    try {
+                        $arch_id = $this->request->get('arch_id');
+
+                        $deptId = explode('/', $arch_id)[0];
+                        $archNum = explode('/', $arch_id)[1];
+
+                        if (empty($archNum)) {
+                            $fail("Please enter folders Archive ID");
+                        }
+
+                        if ($deptId !== Department::find($this->request->get('department'))->code) {
+                            $fail("Folder Archive ID field format is invalid");
+                        }
+                    } catch (\Exception $e) {
+                        $fail("Please enter folders Archive ID");
+                    }
+                }
+            ],
+            "name" => "required|min:2|max:30",
+            "department" => "required|integer|exists:departments,id",
+        ];
+
+        $mimes = FileType::find("1")->mimes;
+        $maxSize = FileType::find("1")->max_size;
+
+        if ($this->isMethod("patch")) {
+            $fileRules = [
+                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
+            ];
+        }
+
+        else {
+            $fileRules = [
+                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
+            ];
+        }
+
+        $rules = array_merge(
+            $rules,
+            $fileRules,
+        );
+
+        return $rules;
+    }
+}
Index: app/Http/Requests/Dashboard/NewUserRequest.php
===================================================================
--- app/Http/Requests/Dashboard/NewUserRequest.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Requests/Dashboard/NewUserRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -29,7 +29,7 @@
             "phone_number" => "required|unique:users,phone_number",
             "email" => "required|string|email|max:50|unique:users,email",
-            "username" => "required|min:5|max:30|unique:users,username",
+            "username" => "required|alpha_dash|min:5|unique:users,username",
             "userRole" => "required|exists:roles,id",
-            "avatar" => "mimes:jpeg,png,gif|max:5000",
+            "avatar" => "image|max:5000",
         ];
     }
Index: app/Http/Requests/Dashboard/UpdateUserRequest.php
===================================================================
--- app/Http/Requests/Dashboard/UpdateUserRequest.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Http/Requests/Dashboard/UpdateUserRequest.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -29,5 +29,5 @@
             "phone_number" => "required|unique:users,phone_number,$this->id,id",
             "email" => "required|string|email|max:50|unique:users,email,$this->id,id",
-            "username" => "required|min:5|unique:users,username,$this->id,id",
+            "username" => "required|alpha_dash|min:5|unique:users,username,$this->id,id",
             "userRole" => "required|exists:roles,id",
             "avatar" => "mimes:jpeg,png,gif|max:5000",
Index: app/Models/Department.php
===================================================================
--- app/Models/Department.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Models/Department.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -25,6 +25,6 @@
     }
 
-    public function document(){
-        return $this->hasMany(Document::class);
+    public function folder(){
+        return $this->hasMany(Folder::class);
     }
 }
Index: p/Models/Document.php
===================================================================
--- app/Models/Document.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Factories\HasFactory;
-use Illuminate\Database\Eloquent\Model;
-
-class Document extends Model
-{
-    use HasFactory;
-    protected $table = "documents";
-
-    protected $fillable = ["arch_id", "name", "description", "user_id", "department_id", "is_important"];
-
-
-    public function user() {
-        return $this->belongsTo(User::class);
-    }
-
-    public function department() {
-        return $this->belongsTo(Department::class);
-    }
-
-    public function files()
-    {
-        return $this->hasMany(File::class);
-    }
-}
Index: app/Models/File.php
===================================================================
--- app/Models/File.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Models/File.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -11,12 +11,12 @@
     protected $fillable = ["name", "location", "document_id"];
 
-    public function document()
+    public function folder()
     {
-        return $this->belongsTo(Document::class);
+        return $this->belongsTo(Folder::class);
     }
 
     public function getSize($location)
     {
-        $fileSize = Storage::disk('local')->size($location) / 1024 / 1024;
+        $fileSize = Storage::disk('uploads')->size($location) / 1024 / 1024;
         $fileSize = round($fileSize, 2);
         return $fileSize;
Index: app/Models/FileType.php
===================================================================
--- app/Models/FileType.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Models/FileType.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class FileType extends Model
+{
+    use HasFactory;
+
+    protected $table = "file_types";
+
+    protected $fillable = ["mimes", "max_size", "user_id"];
+}
Index: app/Models/Folder.php
===================================================================
--- app/Models/Folder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Models/Folder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Folder extends Model
+{
+    use HasFactory;
+    protected $table = "folders";
+
+    protected $fillable = ["arch_id", "name", "description", "location", "user_id", "department_id", "is_important"];
+
+
+    public function user() {
+        return $this->belongsTo(User::class);
+    }
+
+    public function department() {
+        return $this->belongsTo(Department::class);
+    }
+
+    public function files()
+    {
+        return $this->hasMany(File::class);
+    }
+}
Index: app/Models/User.php
===================================================================
--- app/Models/User.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ app/Models/User.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -24,7 +24,7 @@
         "surname",
         "username",
+        "phone_number",
+        "email",
         "password",
-        "email",
-        "phone_number",
         "avatar",
         "role_id"
Index: app/Notifications/NewDepartmentCreated.php
===================================================================
--- app/Notifications/NewDepartmentCreated.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Notifications/NewDepartmentCreated.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Notifications;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Notifications\Notification;
+use Illuminate\Notifications\Messages\MailMessage;
+
+class NewDepartmentCreated extends Notification
+{
+    use Queueable;
+
+    protected $text;
+
+    /**
+     * Create a new notification instance.
+     *
+     * @return void
+     */
+    public function __construct($text)
+    {
+        $this->text = $text;
+    }
+
+    /**
+     * Get the notification's delivery channels.
+     *
+     * @param  mixed  $notifiable
+     * @return array
+     */
+    public function via($notifiable)
+    {
+        return ['database'];
+    }
+
+    /**
+     * Get the mail representation of the notification.
+     *
+     * @param  mixed  $notifiable
+     * @return \Illuminate\Notifications\Messages\MailMessage
+     */
+    public function toMail($notifiable)
+    {
+        return (new MailMessage)
+            ->line('The introduction to the notification.')
+            ->action('Notification Action', url('/'))
+            ->line('Thank you for using our application!');
+    }
+
+    /**
+     * Get the array representation of the notification.
+     *
+     * @param  mixed  $notifiable
+     * @return array
+     */
+    public function toArray($notifiable)
+    {
+        return [
+            "url" => "/dashboard/departments",
+            "message" => $this->text
+        ];
+    }
+}
Index: p/Notifications/NewDocumentCreated.php
===================================================================
--- app/Notifications/NewDocumentCreated.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,63 +1,0 @@
-<?php
-
-namespace App\Notifications;
-
-use Illuminate\Bus\Queueable;
-use Illuminate\Notifications\Notification;
-use Illuminate\Notifications\Messages\MailMessage;
-
-class NewDocumentCreated extends Notification
-{
-    use Queueable;
-
-    protected $text;
-
-    /**
-     * Create a new notification instance.
-     *
-     * @return void
-     */
-    public function __construct($text)
-    {
-        $this->text = $text;
-    }
-
-    /**
-     * Get the notification's delivery channels.
-     *
-     * @param  mixed  $notifiable
-     * @return array
-     */
-    public function via($notifiable)
-    {
-        return ['database'];
-    }
-
-    /**
-     * Get the mail representation of the notification.
-     *
-     * @param  mixed  $notifiable
-     * @return \Illuminate\Notifications\Messages\MailMessage
-     */
-    public function toMail($notifiable)
-    {
-        return (new MailMessage)
-            ->line('The introduction to the notification.')
-            ->action('Notification Action', url('/'))
-            ->line('Thank you for using our application!');
-    }
-
-    /**
-     * Get the array representation of the notification.
-     *
-     * @param  mixed  $notifiable
-     * @return array
-     */
-    public function toArray($notifiable)
-    {
-        return [
-            "url" => "/dashboard/documents",
-            "message" => $this->text
-        ];
-    }
-}
Index: app/Notifications/NewFileCreated.php
===================================================================
--- app/Notifications/NewFileCreated.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Notifications/NewFileCreated.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Notifications;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Notifications\Notification;
+use Illuminate\Notifications\Messages\MailMessage;
+
+class NewFileCreated extends Notification
+{
+    use Queueable;
+
+    protected $text;
+
+    /**
+     * Create a new notification instance.
+     *
+     * @return void
+     */
+    public function __construct($text)
+    {
+        $this->text = $text;
+    }
+
+    /**
+     * Get the notification's delivery channels.
+     *
+     * @param  mixed  $notifiable
+     * @return array
+     */
+    public function via($notifiable)
+    {
+        return ['database'];
+    }
+
+    /**
+     * Get the mail representation of the notification.
+     *
+     * @param  mixed  $notifiable
+     * @return \Illuminate\Notifications\Messages\MailMessage
+     */
+    public function toMail($notifiable)
+    {
+        return (new MailMessage)
+            ->line('The introduction to the notification.')
+            ->action('Notification Action', url('/'))
+            ->line('Thank you for using our application!');
+    }
+
+    /**
+     * Get the array representation of the notification.
+     *
+     * @param  mixed  $notifiable
+     * @return array
+     */
+    public function toArray($notifiable)
+    {
+        return [
+            "url" => "/dashboard/files",
+            "message" => $this->text
+        ];
+    }
+}
Index: app/Notifications/NewFolderCreated.php
===================================================================
--- app/Notifications/NewFolderCreated.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ app/Notifications/NewFolderCreated.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Notifications;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Notifications\Notification;
+use Illuminate\Notifications\Messages\MailMessage;
+
+class NewFolderCreated extends Notification
+{
+    use Queueable;
+
+    protected $text;
+
+    /**
+     * Create a new notification instance.
+     *
+     * @return void
+     */
+    public function __construct($text)
+    {
+        $this->text = $text;
+    }
+
+    /**
+     * Get the notification's delivery channels.
+     *
+     * @param  mixed  $notifiable
+     * @return array
+     */
+    public function via($notifiable)
+    {
+        return ['database'];
+    }
+
+    /**
+     * Get the mail representation of the notification.
+     *
+     * @param  mixed  $notifiable
+     * @return \Illuminate\Notifications\Messages\MailMessage
+     */
+    public function toMail($notifiable)
+    {
+        return (new MailMessage)
+            ->line('The introduction to the notification.')
+            ->action('Notification Action', url('/'))
+            ->line('Thank you for using our application!');
+    }
+
+    /**
+     * Get the array representation of the notification.
+     *
+     * @param  mixed  $notifiable
+     * @return array
+     */
+    public function toArray($notifiable)
+    {
+        return [
+            "url" => "/dashboard/folders",
+            "message" => $this->text
+        ];
+    }
+}
Index: composer.json
===================================================================
--- composer.json	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ composer.json	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -7,9 +7,11 @@
     "require": {
         "php": "^7.3|^8.0",
+        "ext-zip": "*",
         "fruitcake/laravel-cors": "^2.0",
         "guzzlehttp/guzzle": "^7.0.1",
         "laravel/framework": "^8.54",
         "laravel/sanctum": "^2.11",
-        "laravel/tinker": "^2.5"
+        "laravel/tinker": "^2.5",
+        "maatwebsite/excel": "^3.1"
     },
     "require-dev": {
Index: composer.lock
===================================================================
--- composer.lock	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ composer.lock	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -5,5 +5,5 @@
         "This file is @generated automatically"
     ],
-    "content-hash": "6cadd819a6415b190ae2704ced6e6c8b",
+    "content-hash": "ad81200ef5dc73a474fc579fe47523bc",
     "packages": [
         {
@@ -503,4 +503,58 @@
         },
         {
+            "name": "ezyang/htmlpurifier",
+            "version": "v4.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ezyang/htmlpurifier.git",
+                "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
+                "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2"
+            },
+            "require-dev": {
+                "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "HTMLPurifier": "library/"
+                },
+                "files": [
+                    "library/HTMLPurifier.composer.php"
+                ],
+                "exclude-from-classmap": [
+                    "/library/HTMLPurifier/Language/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Edward Z. Yang",
+                    "email": "admin@htmlpurifier.org",
+                    "homepage": "http://ezyang.com"
+                }
+            ],
+            "description": "Standards compliant HTML filter written in PHP",
+            "homepage": "http://htmlpurifier.org/",
+            "keywords": [
+                "html"
+            ],
+            "support": {
+                "issues": "https://github.com/ezyang/htmlpurifier/issues",
+                "source": "https://github.com/ezyang/htmlpurifier/tree/master"
+            },
+            "time": "2020-06-29T00:56:53+00:00"
+        },
+        {
             "name": "fruitcake/laravel-cors",
             "version": "v2.0.4",
@@ -965,14 +1019,14 @@
         {
             "name": "laravel/framework",
-            "version": "v8.64.0",
+            "version": "v8.65.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "3337c029e1bb31d9712d27437cc27010ba302c9e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/3337c029e1bb31d9712d27437cc27010ba302c9e",
-                "reference": "3337c029e1bb31d9712d27437cc27010ba302c9e",
+                "reference": "6db59afadca28dfdb2f719e7d79f93885ede17e4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/6db59afadca28dfdb2f719e7d79f93885ede17e4",
+                "reference": "6db59afadca28dfdb2f719e7d79f93885ede17e4",
                 "shasum": ""
             },
@@ -1132,18 +1186,18 @@
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2021-10-12T13:43:13+00:00"
+            "time": "2021-10-19T13:59:41+00:00"
         },
         {
             "name": "laravel/sanctum",
-            "version": "v2.11.4",
+            "version": "v2.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/sanctum.git",
-                "reference": "2cc0c0f79eb92578f606f6130fafd31b18229db1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/sanctum/zipball/2cc0c0f79eb92578f606f6130fafd31b18229db1",
-                "reference": "2cc0c0f79eb92578f606f6130fafd31b18229db1",
+                "reference": "0b8664bb065f080e93c209f1ae1b78b5a9e13f15"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/sanctum/zipball/0b8664bb065f080e93c209f1ae1b78b5a9e13f15",
+                "reference": "0b8664bb065f080e93c209f1ae1b78b5a9e13f15",
                 "shasum": ""
             },
@@ -1196,5 +1250,5 @@
                 "source": "https://github.com/laravel/sanctum"
             },
-            "time": "2021-10-13T13:38:15+00:00"
+            "time": "2021-10-19T15:33:22+00:00"
         },
         {
@@ -1669,4 +1723,322 @@
         },
         {
+            "name": "maatwebsite/excel",
+            "version": "3.1.33",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Maatwebsite/Laravel-Excel.git",
+                "reference": "b2de5ba92c5c1ad9415f0eb7c72838fb3eaaa5b8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/b2de5ba92c5c1ad9415f0eb7c72838fb3eaaa5b8",
+                "reference": "b2de5ba92c5c1ad9415f0eb7c72838fb3eaaa5b8",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "illuminate/support": "5.8.*|^6.0|^7.0|^8.0",
+                "php": "^7.0|^8.0",
+                "phpoffice/phpspreadsheet": "^1.18"
+            },
+            "require-dev": {
+                "orchestra/testbench": "^6.0",
+                "predis/predis": "^1.1"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Maatwebsite\\Excel\\ExcelServiceProvider"
+                    ],
+                    "aliases": {
+                        "Excel": "Maatwebsite\\Excel\\Facades\\Excel"
+                    }
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Maatwebsite\\Excel\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Patrick Brouwers",
+                    "email": "patrick@maatwebsite.nl"
+                }
+            ],
+            "description": "Supercharged Excel exports and imports in Laravel",
+            "keywords": [
+                "PHPExcel",
+                "batch",
+                "csv",
+                "excel",
+                "export",
+                "import",
+                "laravel",
+                "php",
+                "phpspreadsheet"
+            ],
+            "support": {
+                "issues": "https://github.com/Maatwebsite/Laravel-Excel/issues",
+                "source": "https://github.com/Maatwebsite/Laravel-Excel/tree/3.1.33"
+            },
+            "funding": [
+                {
+                    "url": "https://laravel-excel.com/commercial-support",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/patrickbrouwers",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-08-12T15:52:25+00:00"
+        },
+        {
+            "name": "maennchen/zipstream-php",
+            "version": "2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/maennchen/ZipStream-PHP.git",
+                "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58",
+                "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58",
+                "shasum": ""
+            },
+            "require": {
+                "myclabs/php-enum": "^1.5",
+                "php": ">= 7.1",
+                "psr/http-message": "^1.0",
+                "symfony/polyfill-mbstring": "^1.0"
+            },
+            "require-dev": {
+                "ext-zip": "*",
+                "guzzlehttp/guzzle": ">= 6.3",
+                "mikey179/vfsstream": "^1.6",
+                "phpunit/phpunit": ">= 7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ZipStream\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paul Duncan",
+                    "email": "pabs@pablotron.org"
+                },
+                {
+                    "name": "Jonatan Männchen",
+                    "email": "jonatan@maennchen.ch"
+                },
+                {
+                    "name": "Jesse Donat",
+                    "email": "donatj@gmail.com"
+                },
+                {
+                    "name": "András Kolesár",
+                    "email": "kolesar@kolesar.hu"
+                }
+            ],
+            "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+            "keywords": [
+                "stream",
+                "zip"
+            ],
+            "support": {
+                "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+                "source": "https://github.com/maennchen/ZipStream-PHP/tree/master"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/zipstream",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2020-05-30T13:11:16+00:00"
+        },
+        {
+            "name": "markbaker/complex",
+            "version": "2.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPComplex.git",
+                "reference": "6f724d7e04606fd8adaa4e3bb381c3e9db09c946"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/6f724d7e04606fd8adaa4e3bb381c3e9db09c946",
+                "reference": "6f724d7e04606fd8adaa4e3bb381c3e9db09c946",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Complex\\": "classes/src/"
+                },
+                "files": [
+                    "classes/src/functions/abs.php",
+                    "classes/src/functions/acos.php",
+                    "classes/src/functions/acosh.php",
+                    "classes/src/functions/acot.php",
+                    "classes/src/functions/acoth.php",
+                    "classes/src/functions/acsc.php",
+                    "classes/src/functions/acsch.php",
+                    "classes/src/functions/argument.php",
+                    "classes/src/functions/asec.php",
+                    "classes/src/functions/asech.php",
+                    "classes/src/functions/asin.php",
+                    "classes/src/functions/asinh.php",
+                    "classes/src/functions/atan.php",
+                    "classes/src/functions/atanh.php",
+                    "classes/src/functions/conjugate.php",
+                    "classes/src/functions/cos.php",
+                    "classes/src/functions/cosh.php",
+                    "classes/src/functions/cot.php",
+                    "classes/src/functions/coth.php",
+                    "classes/src/functions/csc.php",
+                    "classes/src/functions/csch.php",
+                    "classes/src/functions/exp.php",
+                    "classes/src/functions/inverse.php",
+                    "classes/src/functions/ln.php",
+                    "classes/src/functions/log2.php",
+                    "classes/src/functions/log10.php",
+                    "classes/src/functions/negative.php",
+                    "classes/src/functions/pow.php",
+                    "classes/src/functions/rho.php",
+                    "classes/src/functions/sec.php",
+                    "classes/src/functions/sech.php",
+                    "classes/src/functions/sin.php",
+                    "classes/src/functions/sinh.php",
+                    "classes/src/functions/sqrt.php",
+                    "classes/src/functions/tan.php",
+                    "classes/src/functions/tanh.php",
+                    "classes/src/functions/theta.php",
+                    "classes/src/operations/add.php",
+                    "classes/src/operations/subtract.php",
+                    "classes/src/operations/multiply.php",
+                    "classes/src/operations/divideby.php",
+                    "classes/src/operations/divideinto.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "mark@lange.demon.co.uk"
+                }
+            ],
+            "description": "PHP Class for working with complex numbers",
+            "homepage": "https://github.com/MarkBaker/PHPComplex",
+            "keywords": [
+                "complex",
+                "mathematics"
+            ],
+            "support": {
+                "issues": "https://github.com/MarkBaker/PHPComplex/issues",
+                "source": "https://github.com/MarkBaker/PHPComplex/tree/2.0.3"
+            },
+            "time": "2021-06-02T09:44:11+00:00"
+        },
+        {
+            "name": "markbaker/matrix",
+            "version": "2.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPMatrix.git",
+                "reference": "174395a901b5ba0925f1d790fa91bab531074b61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/174395a901b5ba0925f1d790fa91bab531074b61",
+                "reference": "174395a901b5ba0925f1d790fa91bab531074b61",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpdocumentor/phpdocumentor": "2.*",
+                "phploc/phploc": "^4.0",
+                "phpmd/phpmd": "2.*",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+                "sebastian/phpcpd": "^4.0",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Matrix\\": "classes/src/"
+                },
+                "files": [
+                    "classes/src/Functions/adjoint.php",
+                    "classes/src/Functions/antidiagonal.php",
+                    "classes/src/Functions/cofactors.php",
+                    "classes/src/Functions/determinant.php",
+                    "classes/src/Functions/diagonal.php",
+                    "classes/src/Functions/identity.php",
+                    "classes/src/Functions/inverse.php",
+                    "classes/src/Functions/minors.php",
+                    "classes/src/Functions/trace.php",
+                    "classes/src/Functions/transpose.php",
+                    "classes/src/Operations/add.php",
+                    "classes/src/Operations/directsum.php",
+                    "classes/src/Operations/subtract.php",
+                    "classes/src/Operations/multiply.php",
+                    "classes/src/Operations/divideby.php",
+                    "classes/src/Operations/divideinto.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "mark@demon-angel.eu"
+                }
+            ],
+            "description": "PHP Class for working with matrices",
+            "homepage": "https://github.com/MarkBaker/PHPMatrix",
+            "keywords": [
+                "mathematics",
+                "matrix",
+                "vector"
+            ],
+            "support": {
+                "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
+                "source": "https://github.com/MarkBaker/PHPMatrix/tree/2.1.3"
+            },
+            "time": "2021-05-25T15:42:17+00:00"
+        },
+        {
             "name": "monolog/monolog",
             "version": "2.3.5",
@@ -1768,4 +2140,64 @@
         },
         {
+            "name": "myclabs/php-enum",
+            "version": "1.8.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/php-enum.git",
+                "reference": "b942d263c641ddb5190929ff840c68f78713e937"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937",
+                "reference": "b942d263c641ddb5190929ff840c68f78713e937",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": "^7.3 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5",
+                "squizlabs/php_codesniffer": "1.*",
+                "vimeo/psalm": "^4.6.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MyCLabs\\Enum\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP Enum contributors",
+                    "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
+                }
+            ],
+            "description": "PHP Enum implementation",
+            "homepage": "http://github.com/myclabs/php-enum",
+            "keywords": [
+                "enum"
+            ],
+            "support": {
+                "issues": "https://github.com/myclabs/php-enum/issues",
+                "source": "https://github.com/myclabs/php-enum/tree/1.8.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/mnapoli",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-07-05T08:18:36+00:00"
+        },
+        {
             "name": "nesbot/carbon",
             "version": "2.53.1",
@@ -2128,4 +2560,108 @@
             },
             "time": "2021-04-09T13:42:10+00:00"
+        },
+        {
+            "name": "phpoffice/phpspreadsheet",
+            "version": "1.18.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+                "reference": "418cd304e8e6b417ea79c3b29126a25dc4b1170c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/418cd304e8e6b417ea79c3b29126a25dc4b1170c",
+                "reference": "418cd304e8e6b417ea79c3b29126a25dc4b1170c",
+                "shasum": ""
+            },
+            "require": {
+                "ext-ctype": "*",
+                "ext-dom": "*",
+                "ext-fileinfo": "*",
+                "ext-gd": "*",
+                "ext-iconv": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-simplexml": "*",
+                "ext-xml": "*",
+                "ext-xmlreader": "*",
+                "ext-xmlwriter": "*",
+                "ext-zip": "*",
+                "ext-zlib": "*",
+                "ezyang/htmlpurifier": "^4.13",
+                "maennchen/zipstream-php": "^2.1",
+                "markbaker/complex": "^2.0",
+                "markbaker/matrix": "^2.0",
+                "php": "^7.2 || ^8.0",
+                "psr/http-client": "^1.0",
+                "psr/http-factory": "^1.0",
+                "psr/simple-cache": "^1.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
+                "dompdf/dompdf": "^1.0",
+                "friendsofphp/php-cs-fixer": "^2.18",
+                "jpgraph/jpgraph": "^4.0",
+                "mpdf/mpdf": "^8.0",
+                "phpcompatibility/php-compatibility": "^9.3",
+                "phpstan/phpstan": "^0.12.82",
+                "phpstan/phpstan-phpunit": "^0.12.18",
+                "phpunit/phpunit": "^8.5",
+                "squizlabs/php_codesniffer": "^3.5",
+                "tecnickcom/tcpdf": "^6.3"
+            },
+            "suggest": {
+                "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
+                "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+                "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+                "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Maarten Balliauw",
+                    "homepage": "https://blog.maartenballiauw.be"
+                },
+                {
+                    "name": "Mark Baker",
+                    "homepage": "https://markbakeruk.net"
+                },
+                {
+                    "name": "Franck Lefevre",
+                    "homepage": "https://rootslabs.net"
+                },
+                {
+                    "name": "Erik Tilt"
+                },
+                {
+                    "name": "Adrien Crivelli"
+                }
+            ],
+            "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+            "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+            "keywords": [
+                "OpenXML",
+                "excel",
+                "gnumeric",
+                "ods",
+                "php",
+                "spreadsheet",
+                "xls",
+                "xlsx"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
+                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.18.0"
+            },
+            "time": "2021-05-31T18:21:15+00:00"
         },
         {
@@ -7956,5 +8492,6 @@
     "prefer-lowest": false,
     "platform": {
-        "php": "^7.3|^8.0"
+        "php": "^7.3|^8.0",
+        "ext-zip": "*"
     },
     "platform-dev": [],
Index: config/app.php
===================================================================
--- config/app.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ config/app.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -162,4 +162,5 @@
         Illuminate\Validation\ValidationServiceProvider::class,
         Illuminate\View\ViewServiceProvider::class,
+        Maatwebsite\Excel\ExcelServiceProvider::class,
 
         /*
@@ -229,4 +230,5 @@
         'Validator' => Illuminate\Support\Facades\Validator::class,
         'View' => Illuminate\Support\Facades\View::class,
+        'Excel' => Maatwebsite\Excel\Facades\Excel::class,
 
     ],
Index: config/filesystems.php
===================================================================
--- config/filesystems.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ config/filesystems.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -33,5 +33,5 @@
         'local' => [
             'driver' => 'local',
-            'root' => storage_path('app'),
+            'root' => public_path() . DIRECTORY_SEPARATOR . 'uploads',
             'permissions' => [
                 'file' => [
@@ -48,5 +48,5 @@
         'image-uploads' => [
             'driver' => 'local',
-            'root'   => public_path() . '/assets/images/uploads',
+            'root'   => public_path() . DIRECTORY_SEPARATOR .'assets' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'uploads'
         ],
 
Index: database/factories/DepartmentFactory.php
===================================================================
--- database/factories/DepartmentFactory.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/factories/DepartmentFactory.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -24,10 +24,10 @@
     public function definition()
     {
-        $location = $this->faker->unique()->numberBetween('1', '9');
-        Storage::disk('local')->makeDirectory('Departments/' . $location);
+        $location = $this->faker->unique()->numberBetween(1, 15);
+        Storage::disk('uploads')->makeDirectory('Departments/' . $location);
         return [
             'name' => "Department" . $this->faker->unique()->firstName(),
             'code' => $location,
-            'location' => Storage::disk('local')->path('') . 'Departments' . DIRECTORY_SEPARATOR . $location,
+            'location' => 'Departments' . DIRECTORY_SEPARATOR . $location,
             'user_id' => $this->faker->numberBetween('1', '2'),
             'created_at' => Carbon::now()
Index: tabase/factories/DocumentFactory.php
===================================================================
--- database/factories/DocumentFactory.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,43 +1,0 @@
-<?php
-
-namespace Database\Factories;
-
-use App\Models\Department;
-use App\Models\Document;
-use Carbon\Carbon;
-use Illuminate\Database\Eloquent\Factories\Factory;
-use Illuminate\Support\Facades\Storage;
-
-class DocumentFactory extends Factory
-{
-    /**
-     * The name of the factory's corresponding model.
-     *
-     * @var string
-     */
-    protected $model = Document::class;
-
-    /**
-     * Define the model's default state.
-     *
-     * @return array
-     */
-    public function definition()
-    {
-
-        $deptID = "5";
-        $name = $this->faker->unique()->firstName();
-        Storage::disk('local')->makeDirectory('Departments' . DIRECTORY_SEPARATOR . $deptID . DIRECTORY_SEPARATOR . $name);
-
-        return [
-            'arch_id' => $deptID . "/" . $this->faker->unique()->randomNumber(),
-            'name' => $name,
-            'description' => $this->faker->realText(),
-            'user_id' => $this->faker->numberBetween('1', '2'),
-            'department_id' => $deptID,
-            'is_important' => $this->faker->boolean,
-            'created_at' => $this->faker->dateTime()
-        ];
-
-    }
-}
Index: database/factories/FolderFactory.php
===================================================================
--- database/factories/FolderFactory.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ database/factories/FolderFactory.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,47 @@
+<?php
+
+namespace Database\Factories;
+
+use App\Models\Department;
+use App\Models\Folder;
+use Carbon\Carbon;
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Facades\Storage;
+
+class FolderFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = Folder::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+
+        $deptId = $this->faker->numberBetween('1', '15');
+        $deptCode = Department::find($deptId)->code;
+        $name = $this->faker->unique()->firstName();
+
+        $location = 'Departments' . DIRECTORY_SEPARATOR . $deptCode . DIRECTORY_SEPARATOR . $name;
+        Storage::disk('uploads')->makeDirectory($location);
+
+
+        return [
+            'arch_id' => $deptCode . "/" . $this->faker->unique()->randomNumber(),
+            'name' => $name,
+            'note' => $this->faker->realText(),
+            'location' => $location,
+            'user_id' => $this->faker->numberBetween('1', '2'),
+            'department_id' => $deptId,
+            'is_important' => $this->faker->boolean,
+            'created_at' => $this->faker->dateTime()
+        ];
+    }
+}
Index: database/migrations/2021_09_27_171107_create_users_table.php
===================================================================
--- database/migrations/2021_09_27_171107_create_users_table.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/migrations/2021_09_27_171107_create_users_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -20,5 +20,4 @@
             $table->string('surname');
             $table->string('username')->unique();
-            $table->string('password');
             $table->string('email')->unique();
             $table->string('phone_number')->unique();
@@ -30,7 +29,8 @@
             $table->boolean('is_confirmed')->default(false);
             $table->boolean('is_forgot_password')->default(false);
+            $table->integer("created_by")->unsigned();
             $table->integer('security_code')->nullable();
             $table->string('verify_token')->nullable();
-            $table->integer("created_by")->unsigned();
+            $table->string('password');
             $table->rememberToken();
             $table->timestamps();
Index: tabase/migrations/2021_10_06_103305_create_documents_table.php
===================================================================
--- database/migrations/2021_10_06_103305_create_documents_table.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,40 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-class CreateDocumentsTable extends Migration
-{
-    /**
-     * Run the migrations.
-     *
-     * @return void
-     */
-    public function up()
-    {
-        Schema::create('documents', function (Blueprint $table) {
-            $table->bigIncrements('id');
-            $table->string("arch_id")->unique();
-            $table->string("name");
-            $table->text("description");
-            $table->integer("user_id")->unsigned();
-            $table->integer("department_id")->unsigned();
-            $table->boolean("is_important")->default(true);
-            $table->timestamps();
-
-            $table->foreign("user_id")->references("id")->on("users")->onDelete("cascade")->onUpdate("cascade");
-            $table->foreign("department_id")->references("id")->on("departments")->onDelete("cascade")->onUpdate("cascade");
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     *
-     * @return void
-     */
-    public function down()
-    {
-        Schema::dropIfExists('documents');
-    }
-}
Index: database/migrations/2021_10_06_103305_create_folders_table.php
===================================================================
--- database/migrations/2021_10_06_103305_create_folders_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ database/migrations/2021_10_06_103305_create_folders_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,41 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateFoldersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('folders', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string("arch_id")->unique();
+            $table->string("name");
+            $table->text("note")->nullable();
+            $table->string("location");
+            $table->integer("user_id")->unsigned();
+            $table->integer("department_id")->unsigned();
+            $table->boolean("is_important")->default(false);
+            $table->timestamps();
+
+            $table->foreign("user_id")->references("id")->on("users")->onDelete("cascade")->onUpdate("cascade");
+            $table->foreign("department_id")->references("id")->on("departments")->onDelete("cascade")->onUpdate("cascade");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('folders');
+    }
+}
Index: database/migrations/2021_10_10_103309_create_files_table.php
===================================================================
--- database/migrations/2021_10_10_103309_create_files_table.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/migrations/2021_10_10_103309_create_files_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -16,8 +16,8 @@
         Schema::create('files', function (Blueprint $table) {
             $table->bigIncrements('id');
-            $table->bigInteger('document_id')->unsigned();
+            $table->bigInteger('folder_id')->unsigned();
             $table->string("name");
             $table->string("location");
-            $table->foreign("document_id")->references("id")->on("documents");
+            $table->foreign("folder_id")->references("id")->on("folders");
             $table->timestamps();
         });
Index: database/migrations/2021_10_21_091521_create_notifications_table.php
===================================================================
--- database/migrations/2021_10_21_091521_create_notifications_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ database/migrations/2021_10_21_091521_create_notifications_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateNotificationsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('notifications', function (Blueprint $table) {
+            $table->uuid('id')->primary();
+            $table->string('type');
+            $table->morphs('notifiable');
+            $table->text('data');
+            $table->timestamp('read_at')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('notifications');
+    }
+}
Index: database/migrations/2021_10_21_144552_create_file_types_table.php
===================================================================
--- database/migrations/2021_10_21_144552_create_file_types_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ database/migrations/2021_10_21_144552_create_file_types_table.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateFileTypesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('file_types', function (Blueprint $table) {
+            $table->increments('id');
+            $table->string("mimes")->default('mimes:');
+            $table->integer("max_size");
+            $table->integer("user_id")->unsigned();
+            $table->timestamps();
+
+            $table->foreign("user_id")->references("id")->on("users")->onDelete("cascade")->onUpdate("cascade");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('file_types');
+    }
+}
Index: database/seeders/DatabaseSeeder.php
===================================================================
--- database/seeders/DatabaseSeeder.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/seeders/DatabaseSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -19,5 +19,6 @@
         $this->call(UsersTableSeeder::class);
         $this->call(DepartmentsTableSeeder::class);
-        //$this->call(DocumentsTableSeeder::class);
+        $this->call(FileTypeSeeder::class);
+        $this->call(FoldersTableSeeder::class);
     }
 }
Index: database/seeders/DepartmentsTableSeeder.php
===================================================================
--- database/seeders/DepartmentsTableSeeder.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/seeders/DepartmentsTableSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -16,5 +16,5 @@
     public function run()
     {
-        Department::factory()->count(8)->create();
+        Department::factory()->count(15)->create();
     }
 }
Index: tabase/seeders/DocumentsTableSeeder.php
===================================================================
--- database/seeders/DocumentsTableSeeder.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,110 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\Document;
-use Carbon\Carbon;
-use Illuminate\Database\Seeder;
-
-class DocumentsTableSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     *
-     * @return void
-     */
-    public function run()
-    {
-//        \DB::table('documents')->insert([
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR150",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document tests",
-//                "arch_id" => "HR1505",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "2",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR15033",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document testasd",
-//                "arch_id" => "HR150124",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "3",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR1501421",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR150213",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR150ad",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "2",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR150234",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "3",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR15012321",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR15021312",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//            [
-//                "name" => "Document test",
-//                "arch_id" => "HR15312430",
-//                "description" => "hahahah ah aha hshdash dhawud hwa",
-//                "user_id" => "1",
-//                "department_id" => "1",
-//                "created_at" => Carbon::now()->format('Y-m-d H:i:s'),
-//            ],
-//        ]);
-        Document::factory()->count(10)->create();
-    }
-}
Index: database/seeders/FileTypeSeeder.php
===================================================================
--- database/seeders/FileTypeSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ database/seeders/FileTypeSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,24 @@
+<?php
+
+namespace Database\Seeders;
+
+use Carbon\Carbon;
+use Illuminate\Database\Seeder;
+
+class FileTypeSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        \DB::table("file_types")->insert([
+            "mimes" => "mimes:jpg,jpeg,png,pdf,docx,xls,xlsx,txt,ppt,pptx",
+            "max_size" => "5000",
+            "user_id" => "1",
+            "created_at" => Carbon::now()
+        ]);
+    }
+}
Index: database/seeders/FoldersTableSeeder.php
===================================================================
--- database/seeders/FoldersTableSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ database/seeders/FoldersTableSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,20 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\Folder;
+use Carbon\Carbon;
+use Illuminate\Database\Seeder;
+
+class FoldersTableSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        Folder::factory()->count(300)->create();
+    }
+}
Index: database/seeders/PermissionsTableSeeder.php
===================================================================
--- database/seeders/PermissionsTableSeeder.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/seeders/PermissionsTableSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -20,12 +20,13 @@
             ["name" => "manage_all_users"], 		// Access all users to manage
             ["name" => "manage_all_departments"], 	// Access all departments to manage
-            ["name" => "manage_all_documents"], 	// Access all documents to manage
+            ["name" => "manage_all_folders"], 	    // Access all folders to manage
             ["name" => "view_all_departments"], 	// Access all departments to view
-            ["name" => "view_all_documents"], 	    // Access all documents to view
-            ["name" => "edit_all_documents"], 		// Edit all documents
-            ["name" => "edit_document"], 		    // Edit your document/s
-            ["name" => "delete_all_documents"], 	// Delete all document/s
-            ["name" => "delete_document"], 	        // Delete your document/s
-            ["name" => "manage_file_types"], 	// Access all file_types to manage
+            ["name" => "view_all_folders"], 	    // Access all folders to view
+            ["name" => "edit_all_folders"], 		// Edit all folders
+            ["name" => "edit_folder"], 		        // Edit your folder/s
+            ["name" => "delete_all_folders"], 	    // Delete all folder/s
+            ["name" => "delete_folder"], 	        // Delete your folder/s
+            ["name" => "manage_all_files"], 	    // Access all files
+            ["name" => "manage_file_types"], 	    // Access file types
         ]);
     }
Index: database/seeders/RolesPermissionsTableSeeder.php
===================================================================
--- database/seeders/RolesPermissionsTableSeeder.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/seeders/RolesPermissionsTableSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -27,4 +27,5 @@
             ["role_id" => 1, "permission_id" => 10],
             ["role_id" => 1, "permission_id" => 11],
+            ["role_id" => 1, "permission_id" => 12],
 
             // Referent
Index: database/seeders/RolesTableSeeder.php
===================================================================
--- database/seeders/RolesTableSeeder.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ database/seeders/RolesTableSeeder.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -15,7 +15,7 @@
     {
         \DB::table('roles')->insert([
-            ["name" => "Admin"], // Have access to all users(managing users), departments, documents etc
-            ["name" => "Referent"], // Have access to manage and view all departments, documents etc
-            ["name" => "Viewer"], // Have access to view all departments, documents etc
+            ["name" => "Admin"], // Have access to all users(managing users), departments, folders etc
+            ["name" => "Referent"], // Have access to manage and view all departments, folders etc
+            ["name" => "Viewer"], // Have access to view all departments, folders etc
         ]);
     }
Index: public/assets/js/app.js
===================================================================
--- public/assets/js/app.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/assets/js/app.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -914,11 +914,19 @@
     });
 
-    $(".edit_document_deparment").change(function() {
+    $(".edit_folder_deparment").change(function() {
         var archId = $("input[name='arch_id']");
         var currentText = archId.val().split("/")[1];
         var selectedId = $(this).find('option:selected').data('dept-code');
+
         if(currentText)
             archId.val(selectedId + "/" + currentText);
         else
+            archId.val(selectedId + "/");
+    });
+
+    $(".new_folder_deparment").change(function() {
+        var archId = $("input[name='arch_id']");
+        var selectedId = $(this).find('option:selected').data('dept-code');
+
             archId.val(selectedId + "/");
     });
@@ -1007,4 +1015,57 @@
     });
 
+    function notifications() {
+
+        var url = "/dashboard/get-notifications";
+        var _token = $("meta[name='csrf-token']").attr("content");
+
+        $.ajax({
+            url: url,
+            type: "post",
+            dataType: "json",
+            data: {
+                _token : _token,
+            },
+            success: function(response) {
+
+                $(".dropdown-notifications a:not(:last)").remove();
+                $(".dropdown-notifications-unread .nav-unread").hide();
+
+                var l = response.length;
+
+                if(hasNew(response)) {
+                    $(".dropdown-notifications .unreadNotificationsInfo").hide();
+                    $(".dropdown-notifications-unread .nav-unread").show();
+                }
+
+                if(l == 0) {
+                    $(".dropdown-notifications .unreadNotificationsInfo").show();
+                }
+
+                if(l > 0) {
+                    $(".dropdown-notifications .unreadNotificationsInfo").hide();
+                }
+
+                for(var i=0; i<l; i++) {
+
+                    var style = response[i].isRead ? "" : "background: #efefef; color: black;";
+
+                    var notificationItem = `
+						<a href="` + response[i].url + `" class="dropdown-item d-flex" style="` + style + `;">
+							<div>
+								` + response[i].message + `
+								<div class="small text-muted">` + response[i].ago + `</div>
+							</div>
+						</a>`;
+
+                    $(".dropdown-notifications").prepend(notificationItem);
+                }
+            },
+            error: function(response) {
+                console.log(response);
+            }
+        });
+    }
+
     $(document).on('click', '#btn-layout-builder', function () {
 
Index: public/assets/js/examples/pages/user-list.js
===================================================================
--- public/assets/js/examples/pages/user-list.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/assets/js/examples/pages/user-list.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -14,5 +14,5 @@
             {
                 "orderable": false,
-                "targets": [0, 6]
+                "targets": [0, 2]
             }
         ],
Index: public/vendors/charts/apex/apexcharts.amd.js
===================================================================
--- public/vendors/charts/apex/apexcharts.amd.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/charts/apex/apexcharts.amd.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -29808,5 +29808,5 @@
 
         // If the target is an svg element, use that element as the main wrapper.
-        // This allows svg.js to work with svg documents as well.
+        // This allows svg.js to work with svg folders as well.
         if (element.nodeName == 'svg') {
           this.constructor.call(this, element);
@@ -32507,5 +32507,5 @@
 	if (options.transform && obj.css) {
 	    result = typeof options.transform === 'function'
-		 ? options.transform(obj.css) 
+		 ? options.transform(obj.css)
 		 : options.transform.default(obj.css);
 
Index: public/vendors/charts/apex/apexcharts.common.js
===================================================================
--- public/vendors/charts/apex/apexcharts.common.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/charts/apex/apexcharts.common.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -23306,5 +23306,5 @@
         // ensure the presence of a dom element
         element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper.
-        // This allows svg.js to work with svg documents as well.
+        // This allows svg.js to work with svg folders as well.
 
         if (element.nodeName == 'svg') {
@@ -26211,5 +26211,5 @@
       return this.p.matrixTransform(this.m)
   };
-  
+
   // gets elements bounding box with special handling of groups, nested and use
   DragHandler.prototype.getBBox = function(){
@@ -26218,5 +26218,5 @@
 
     if(this.el instanceof SVG.Nested) box = this.el.rbox();
-    
+
     if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) {
       box.x = this.el.x();
@@ -26236,5 +26236,5 @@
       }
     }
-  
+
     var _this = this;
 
@@ -26251,11 +26251,11 @@
 
     var box = this.getBBox();
-    
+
     var anchorOffset;
-    
+
     // fix text-anchor in text-element (#37)
     if(this.el instanceof SVG.Text){
       anchorOffset = this.el.node.getComputedTextLength();
-        
+
       switch(this.el.attr('text-anchor')){
         case 'middle':
@@ -26267,5 +26267,5 @@
       }
     }
-    
+
     this.startPoints = {
       // We take absolute coordinates since we are just using a delta here
@@ -26274,5 +26274,5 @@
       transform: this.el.transform()
     };
-    
+
     // add drag and end events to window
     SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); });
@@ -26301,5 +26301,5 @@
       , gx  = p.x - this.startPoints.point.x
       , gy  = p.y - this.startPoints.point.y;
-      
+
     var event = new CustomEvent('dragmove', {
         detail: {
@@ -26311,7 +26311,7 @@
       , cancelable: true
     });
-      
+
     this.el.fire(event);
-    
+
     if(event.defaultPrevented) return p
 
@@ -26353,5 +26353,5 @@
       else if (c.maxY != null && y > c.maxY - box.height)
         y = c.maxY - box.height;
-        
+
       if(this.el instanceof SVG.G)
         this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true);
@@ -26359,5 +26359,5 @@
         this.el.move(x, y);
     }
-    
+
     // so we can use it in the end-method, too
     return p
Index: public/vendors/charts/apex/apexcharts.esm.js
===================================================================
--- public/vendors/charts/apex/apexcharts.esm.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/charts/apex/apexcharts.esm.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -23304,5 +23304,5 @@
         // ensure the presence of a dom element
         element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper.
-        // This allows svg.js to work with svg documents as well.
+        // This allows svg.js to work with svg folders as well.
 
         if (element.nodeName == 'svg') {
@@ -26209,5 +26209,5 @@
       return this.p.matrixTransform(this.m)
   };
-  
+
   // gets elements bounding box with special handling of groups, nested and use
   DragHandler.prototype.getBBox = function(){
@@ -26216,5 +26216,5 @@
 
     if(this.el instanceof SVG.Nested) box = this.el.rbox();
-    
+
     if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) {
       box.x = this.el.x();
@@ -26234,5 +26234,5 @@
       }
     }
-  
+
     var _this = this;
 
@@ -26249,11 +26249,11 @@
 
     var box = this.getBBox();
-    
+
     var anchorOffset;
-    
+
     // fix text-anchor in text-element (#37)
     if(this.el instanceof SVG.Text){
       anchorOffset = this.el.node.getComputedTextLength();
-        
+
       switch(this.el.attr('text-anchor')){
         case 'middle':
@@ -26265,5 +26265,5 @@
       }
     }
-    
+
     this.startPoints = {
       // We take absolute coordinates since we are just using a delta here
@@ -26272,5 +26272,5 @@
       transform: this.el.transform()
     };
-    
+
     // add drag and end events to window
     SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); });
@@ -26299,5 +26299,5 @@
       , gx  = p.x - this.startPoints.point.x
       , gy  = p.y - this.startPoints.point.y;
-      
+
     var event = new CustomEvent('dragmove', {
         detail: {
@@ -26309,7 +26309,7 @@
       , cancelable: true
     });
-      
+
     this.el.fire(event);
-    
+
     if(event.defaultPrevented) return p
 
@@ -26351,5 +26351,5 @@
       else if (c.maxY != null && y > c.maxY - box.height)
         y = c.maxY - box.height;
-        
+
       if(this.el instanceof SVG.G)
         this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true);
@@ -26357,5 +26357,5 @@
         this.el.move(x, y);
     }
-    
+
     // so we can use it in the end-method, too
     return p
Index: public/vendors/charts/apex/apexcharts.js
===================================================================
--- public/vendors/charts/apex/apexcharts.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/charts/apex/apexcharts.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -23310,5 +23310,5 @@
           // ensure the presence of a dom element
           element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper.
-          // This allows svg.js to work with svg documents as well.
+          // This allows svg.js to work with svg folders as well.
 
           if (element.nodeName == 'svg') {
@@ -26215,5 +26215,5 @@
         return this.p.matrixTransform(this.m)
     };
-    
+
     // gets elements bounding box with special handling of groups, nested and use
     DragHandler.prototype.getBBox = function(){
@@ -26222,5 +26222,5 @@
 
       if(this.el instanceof SVG.Nested) box = this.el.rbox();
-      
+
       if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) {
         box.x = this.el.x();
@@ -26240,5 +26240,5 @@
         }
       }
-    
+
       var _this = this;
 
@@ -26255,11 +26255,11 @@
 
       var box = this.getBBox();
-      
+
       var anchorOffset;
-      
+
       // fix text-anchor in text-element (#37)
       if(this.el instanceof SVG.Text){
         anchorOffset = this.el.node.getComputedTextLength();
-          
+
         switch(this.el.attr('text-anchor')){
           case 'middle':
@@ -26271,5 +26271,5 @@
         }
       }
-      
+
       this.startPoints = {
         // We take absolute coordinates since we are just using a delta here
@@ -26278,5 +26278,5 @@
         transform: this.el.transform()
       };
-      
+
       // add drag and end events to window
       SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); });
@@ -26305,5 +26305,5 @@
         , gx  = p.x - this.startPoints.point.x
         , gy  = p.y - this.startPoints.point.y;
-        
+
       var event = new CustomEvent('dragmove', {
           detail: {
@@ -26315,7 +26315,7 @@
         , cancelable: true
       });
-        
+
       this.el.fire(event);
-      
+
       if(event.defaultPrevented) return p
 
@@ -26357,5 +26357,5 @@
         else if (c.maxY != null && y > c.maxY - box.height)
           y = c.maxY - box.height;
-          
+
         if(this.el instanceof SVG.G)
           this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true);
@@ -26363,5 +26363,5 @@
           this.el.move(x, y);
       }
-      
+
       // so we can use it in the end-method, too
       return p
Index: public/vendors/dataTable/Buttons-1.6.1/js/buttons.flash.js
===================================================================
--- public/vendors/dataTable/Buttons-1.6.1/js/buttons.flash.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/dataTable/Buttons-1.6.1/js/buttons.flash.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -760,5 +760,5 @@
 
 /**
- * Convert XML documents in an object to strings
+ * Convert XML folders in an object to strings
  * @param  {object} obj XLSX document object
  */
@@ -1397,5 +1397,5 @@
 
 	extension: '.xlsx',
-	
+
 	createEmptyCells: false
 } );
Index: public/vendors/dataTable/FixedHeader-3.1.6/js/dataTables.fixedHeader.js
===================================================================
--- public/vendors/dataTable/FixedHeader-3.1.6/js/dataTables.fixedHeader.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/dataTable/FixedHeader-3.1.6/js/dataTables.fixedHeader.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -174,7 +174,7 @@
 		return this.s.enable;
 	},
-	
-	/**
-	 * Set header offset 
+
+	/**
+	 * Set header offset
 	 *
 	 * @param  {int} new value for headerOffset
@@ -189,5 +189,5 @@
 		return this.c.headerOffset;
 	},
-	
+
 	/**
 	 * Set footer offset
@@ -205,5 +205,5 @@
 	},
 
-	
+
 	/**
 	 * Recalculate the position of the fixed elements and force them into place
@@ -228,5 +228,5 @@
 	 * Constructor
 	 */
-	
+
 	/**
 	 * FixedHeader constructor - adding the required event listeners and
@@ -389,5 +389,5 @@
 	 *
 	 * @param  {string} item       The `header` or `footer`
-	 * @param  {int}    scrollLeft Document scrollLeft
+	 * @param  {int}    scrollLeft Folder scrollLeft
 	 * @private
 	 */
@@ -413,5 +413,5 @@
 	 * * `below` - (Header only) Fixed to the bottom of the table body
 	 * * `above` - (Footer only) Fixed to the top of the table body
-	 * 
+	 *
 	 * @param  {string}  mode        Mode that the item should be shown in
 	 * @param  {string}  item        'header' or 'footer'
@@ -432,5 +432,5 @@
 			document.activeElement :
 			null;
-		
+
 		if ( focus ) {
 			focus.blur();
Index: public/vendors/dataTable/RowReorder-1.2.6/js/dataTables.rowReorder.js
===================================================================
--- public/vendors/dataTable/RowReorder-1.2.6/js/dataTables.rowReorder.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/dataTable/RowReorder-1.2.6/js/dataTables.rowReorder.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -66,5 +66,5 @@
  * * `new $.fn.dataTable.RowReorder( table, opts )` after DataTables
  *   initialisation.
- * 
+ *
  *  @class
  *  @param {object} settings DataTables settings object for the host table
@@ -121,5 +121,5 @@
 		windowHeight: 0,
 
-		/** @type {integer} Document outer height cached value */
+		/** @type {integer} Folder outer height cached value */
 		documentOuterHeight: 0,
 
@@ -211,5 +211,5 @@
 	 * Private methods
 	 */
-	
+
 	/**
 	 * Cache the measurements that RowReorder needs in the mouse move handler
@@ -526,5 +526,5 @@
 			}
 		}
-		
+
 		// Create event args
 		var eventArgs = [ fullDiff, {
@@ -535,5 +535,5 @@
 			originalEvent: e
 		} ];
-		
+
 		// Emit event
 		this._emitEvent( 'row-reorder', eventArgs );
Index: public/vendors/dataTable/SearchPanes-1.0.1/js/dataTables.searchPanes.js
===================================================================
--- public/vendors/dataTable/SearchPanes-1.0.1/js/dataTables.searchPanes.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/dataTable/SearchPanes-1.0.1/js/dataTables.searchPanes.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -1303,5 +1303,5 @@
          */
         SearchPanes.prototype.clearSelections = function () {
-            // Load in all of the searchBoxes in the documents
+            // Load in all of the searchBoxes in the folders
             var searches = this.dom.container.find(this.classes.search);
             // For each searchBox set the input text to be empty and then trigger
Index: public/vendors/dataTable/datatables.js
===================================================================
--- public/vendors/dataTable/datatables.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/dataTable/datatables.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -5740,5 +5740,5 @@
 
   //
-  // Setup limits is not necessary because in js we should not preallocate memory 
+  // Setup limits is not necessary because in js we should not preallocate memory
   // for inflate use constant limit in 65536 bytes
   //
@@ -16100,5 +16100,5 @@
     var res = encoder.write(str);
     var trail = encoder.end();
-    
+
     return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;
 }
@@ -16140,5 +16140,5 @@
     if (!iconv.encodings)
         iconv.encodings = __webpack_require__(171); // Lazy load all encoding definitions.
-    
+
     // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.
     var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, "");
@@ -16164,5 +16164,5 @@
                 if (!codecOptions.encodingName)
                     codecOptions.encodingName = enc;
-                
+
                 enc = codecDef.type;
                 break;
@@ -16654,5 +16654,5 @@
   UnicodeTrie = __webpack_require__(43);
 
-  
+
 
   base64 = __webpack_require__(131);
@@ -16828,8 +16828,8 @@
   this.tag = 0;
   this.bitcount = 0;
-  
+
   this.dest = dest;
   this.destLen = 0;
-  
+
   this.ltree = new Tree();  /* dynamic length/symbol tree */
   this.dtree = new Tree();  /* dynamic distance tree */
@@ -16973,5 +16973,5 @@
     d.bitcount += 8;
   }
-  
+
   var sum = 0, cur = 0, len = 0;
   var tag = d.tag;
@@ -16986,5 +16986,5 @@
     cur -= t.table[len];
   } while (cur >= 0);
-  
+
   d.tag = tag;
   d.bitcount -= len;
@@ -17097,5 +17097,5 @@
   var length, invlength;
   var i;
-  
+
   /* unread from bitbuffer */
   while (d.bitcount > 8) {
@@ -17170,5 +17170,5 @@
       return d.dest.subarray(0, d.destLen);
   }
-  
+
   return d.dest;
 }
@@ -20677,15 +20677,15 @@
     return 16;
   }
-  
+
   n = br.readBits(3);
   if (n > 0) {
     return 17 + n;
   }
-  
+
   n = br.readBits(3);
   if (n > 0) {
     return 8 + n;
   }
-  
+
   return 17;
 }
@@ -20712,30 +20712,30 @@
 
 function DecodeMetaBlockLength(br) {
-  var out = new MetaBlockLength;  
+  var out = new MetaBlockLength;
   var size_nibbles;
   var size_bytes;
   var i;
-  
+
   out.input_end = br.readBits(1);
   if (out.input_end && br.readBits(1)) {
     return out;
   }
-  
+
   size_nibbles = br.readBits(2) + 4;
   if (size_nibbles === 7) {
     out.is_metadata = true;
-    
+
     if (br.readBits(1) !== 0)
       throw new Error('Invalid reserved bit');
-    
+
     size_bytes = br.readBits(2);
     if (size_bytes === 0)
       return out;
-    
+
     for (i = 0; i < size_bytes; i++) {
       var next_byte = br.readBits(8);
       if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)
         throw new Error('Invalid size byte');
-      
+
       out.meta_block_length |= next_byte << (i * 8);
     }
@@ -20745,15 +20745,15 @@
       if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)
         throw new Error('Invalid size nibble');
-      
+
       out.meta_block_length |= next_nibble << (i * 4);
     }
   }
-  
+
   ++out.meta_block_length;
-  
+
   if (!out.input_end && !out.is_metadata) {
     out.is_uncompressed = br.readBits(1);
   }
-  
+
   return out;
 }
@@ -20762,5 +20762,5 @@
 function ReadSymbol(table, index, br) {
   var start_index = index;
-  
+
   var nbits;
   br.fillBitWindow();
@@ -20782,9 +20782,9 @@
   var repeat_code_len = 0;
   var space = 32768;
-  
+
   var table = [];
   for (var i = 0; i < 32; i++)
     table.push(new HuffmanCode(0, 0));
-  
+
   BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);
 
@@ -20792,5 +20792,5 @@
     var p = 0;
     var code_len;
-    
+
     br.readMoreInput();
     br.fillBitWindow();
@@ -20827,10 +20827,10 @@
         throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');
       }
-      
+
       for (var x = 0; x < repeat_delta; x++)
         code_lengths[symbol + x] = repeat_code_len;
-      
+
       symbol += repeat_delta;
-      
+
       if (repeat_code_len !== 0) {
         space -= repeat_delta << (15 - repeat_code_len);
@@ -20841,5 +20841,5 @@
     throw new Error("[ReadHuffmanCodeLengths] space = " + space);
   }
-  
+
   for (; symbol < num_symbols; symbol++)
     code_lengths[symbol] = 0;
@@ -20850,7 +20850,7 @@
   var simple_code_or_skip;
   var code_lengths = new Uint8Array(alphabet_size);
-  
+
   br.readMoreInput();
-  
+
   /* simple_code_or_skip is used as follows:
      1 for simple code;
@@ -20888,5 +20888,5 @@
           throw new Error('[ReadHuffmanCode] invalid symbols');
         }
-        
+
         code_lengths[symbols[1]] = 1;
         break;
@@ -20900,5 +20900,5 @@
           throw new Error('[ReadHuffmanCode] invalid symbols');
         }
-        
+
         if (br.readBits(1)) {
           code_lengths[symbols[2]] = 3;
@@ -20916,7 +20916,7 @@
     /* Static Huffman code for the code length code lengths */
     var huff = [
-      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), 
+      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
       new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),
-      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), 
+      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
       new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)
     ];
@@ -20935,17 +20935,17 @@
       }
     }
-    
+
     if (!(num_codes === 1 || space === 0))
       throw new Error('[ReadHuffmanCode] invalid num_codes or space');
-    
+
     ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);
   }
-  
+
   table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);
-  
+
   if (table_size === 0) {
     throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");
   }
-  
+
   return table_size;
 }
@@ -20995,5 +20995,5 @@
   this.alphabet_size = alphabet_size;
   this.num_htrees = num_htrees;
-  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);  
+  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);
   this.htrees = new Uint32Array(num_htrees);
 }
@@ -21016,5 +21016,5 @@
   var table;
   var i;
-  
+
   br.readMoreInput();
   var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;
@@ -21029,12 +21029,12 @@
     max_run_length_prefix = br.readBits(4) + 1;
   }
-  
+
   table = [];
   for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {
     table[i] = new HuffmanCode(0, 0);
   }
-  
+
   ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);
-  
+
   for (i = 0; i < context_map_size;) {
     var code;
@@ -21062,5 +21062,5 @@
     InverseMoveToFrontTransform(context_map, context_map_size);
   }
-  
+
   return out;
 }
@@ -21123,5 +21123,5 @@
     for (var x = 0; x < tail; x++)
       ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
-    
+
     nbytes -= tail;
     rb_pos += tail;
@@ -21132,5 +21132,5 @@
   for (var x = 0; x < nbytes; x++)
     ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
-  
+
   rb_pos += nbytes;
   len -= nbytes;
@@ -21140,5 +21140,5 @@
   if (rb_pos >= rb_size) {
     output.write(ringbuffer, rb_size);
-    rb_pos -= rb_size;    
+    rb_pos -= rb_size;
     for (var x = 0; x < rb_pos; x++)
       ringbuffer[x] = ringbuffer[rb_size + x];
@@ -21188,18 +21188,18 @@
 function BrotliDecompressBuffer(buffer, output_size) {
   var input = new BrotliInput(buffer);
-  
+
   if (output_size == null) {
     output_size = BrotliDecompressedSize(buffer);
   }
-  
+
   var output_buffer = new Uint8Array(output_size);
   var output = new BrotliOutput(output_buffer);
-  
+
   BrotliDecompress(input, output);
-  
+
   if (output.pos < output.buffer.length) {
     output.buffer = output.buffer.subarray(0, output.pos);
   }
-  
+
   return output.buffer;
 }
@@ -21288,5 +21288,5 @@
 
     br.readMoreInput();
-    
+
     var _out = DecodeMetaBlockLength(br);
     meta_block_remaining_len = _out.meta_block_length;
@@ -21296,11 +21296,11 @@
       tmp.set( output.buffer );
       output.buffer = tmp;
-    }    
+    }
     input_end = _out.input_end;
     is_uncompressed = _out.is_uncompressed;
-    
+
     if (_out.is_metadata) {
       JumpToByteBoundary(br);
-      
+
       for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {
         br.readMoreInput();
@@ -21308,12 +21308,12 @@
         br.readBits(8);
       }
-      
+
       continue;
     }
-    
+
     if (meta_block_remaining_len === 0) {
       continue;
     }
-    
+
     if (is_uncompressed) {
       br.bit_pos_ = (br.bit_pos_ + 7) & ~7;
@@ -21323,5 +21323,5 @@
       continue;
     }
-    
+
     for (i = 0; i < 3; ++i) {
       num_block_types[i] = DecodeVarLenUint8(br) + 1;
@@ -21333,7 +21333,7 @@
       }
     }
-    
+
     br.readMoreInput();
-    
+
     distance_postfix_bits = br.readBits(2);
     num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);
@@ -21346,13 +21346,13 @@
        context_modes[i] = (br.readBits(2) << 1);
     }
-    
+
     var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);
     num_literal_htrees = _o1.num_htrees;
     context_map = _o1.context_map;
-    
+
     var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);
     num_dist_htrees = _o2.num_htrees;
     dist_context_map = _o2.context_map;
-    
+
     hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);
     hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);
@@ -21384,5 +21384,5 @@
 
       br.readMoreInput();
-      
+
       if (block_length[1] === 0) {
         DecodeBlockType(num_block_types[1],
@@ -21440,5 +21440,5 @@
       if (distance_code < 0) {
         var context;
-        
+
         br.readMoreInput();
         if (block_length[2] === 0) {
@@ -21502,5 +21502,5 @@
             if (copy_dst >= ringbuffer_end) {
               output.write(ringbuffer, ringbuffer_size);
-              
+
               for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)
                 ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];
@@ -21567,8 +21567,8 @@
     count = this.buffer.length - this.pos;
   }
-  
+
   for (var p = 0; p < count; p++)
     buf[i + p] = this.buffer[this.pos + p];
-  
+
   this.pos += count;
   return count;
@@ -21585,5 +21585,5 @@
   if (this.pos + count > this.buffer.length)
     throw new Error('Output buffer is not large enough');
-  
+
   this.buffer.set(buf.subarray(0, count), this.pos);
   this.pos += count;
@@ -21717,5 +21717,5 @@
     }
   }
-  
+
   table_bits = root_bits;
   table_size = 1 << table_bits;
@@ -21727,5 +21727,5 @@
       root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);
     }
-    
+
     return total_size;
   }
@@ -21760,5 +21760,5 @@
     }
   }
-  
+
   return total_size;
 }
@@ -21772,5 +21772,5 @@
 
 /*
-PDFImage - embeds images in PDF documents
+PDFImage - embeds images in PDF folders
 By Devon Govett
  */
@@ -22307,5 +22307,5 @@
  * var docDefinition = {
  * 	info: {
- *		title: 'awesome Document',
+ *		title: 'awesome Folder',
  *		author: 'john doe',
  *		subject: 'subject of document',
@@ -34686,5 +34686,5 @@
       this._font = null;
       this._registeredFonts = {};
-      
+
     },
     font: function(src, family, size) {
@@ -35185,5 +35185,5 @@
 
 // ISO (deprecated)
-[], { // windows                                        
+[], { // windows
   0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn',
   0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si',
@@ -42587,5 +42587,5 @@
  *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.
  *
- * This logic is based on the following documents:
+ * This logic is based on the following folders:
  *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm
  *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf
@@ -49958,5 +49958,5 @@
 ];
 
-// Put all encoding/alias/codec definitions to single object and export it. 
+// Put all encoding/alias/codec definitions to single object and export it.
 for (var i = 0; i < modules.length; i++) {
     var module = modules[i];
@@ -50110,5 +50110,5 @@
 
 InternalDecoderCesu8.prototype.write = function(buf) {
-    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, 
+    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes,
         res = '';
     for (var i = 0; i < buf.length; i++) {
@@ -50284,5 +50284,5 @@
         this.initialBytes.push(buf);
         this.initialBytesLen += buf.length;
-        
+
         if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)
             return '';
@@ -50380,6 +50380,6 @@
     // Non-direct chars are encoded as "+<base64>-"; single "+" char is encoded as "+-".
     return new Buffer(str.replace(nonDirectChars, function(chunk) {
-        return "+" + (chunk === '+' ? '' : 
-            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) 
+        return "+" + (chunk === '+' ? '' :
+            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, ''))
             + "-";
     }.bind(this)));
@@ -50403,5 +50403,5 @@
     base64Chars[i] = base64Regex.test(String.fromCharCode(i));
 
-var plusChar = '+'.charCodeAt(0), 
+var plusChar = '+'.charCodeAt(0),
     minusChar = '-'.charCodeAt(0),
     andChar = '&'.charCodeAt(0);
@@ -50652,5 +50652,5 @@
 
 // Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that
-// correspond to encoded bytes (if 128 - then lower half is ASCII). 
+// correspond to encoded bytes (if 128 - then lower half is ASCII).
 
 exports._sbcs = SBCSCodec;
@@ -50658,9 +50658,9 @@
     if (!codecOptions)
         throw new Error("SBCS codec is called without the data.")
-    
+
     // Prepare char buffer for decoding.
     if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))
         throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)");
-    
+
     if (codecOptions.chars.length === 128) {
         var asciiString = "";
@@ -50671,5 +50671,5 @@
 
     this.decodeBuf = new Buffer(codecOptions.chars, 'ucs2');
-    
+
     // Encoding buffer.
     var encodeBuf = new Buffer(65536);
@@ -50694,5 +50694,5 @@
     for (var i = 0; i < str.length; i++)
         buf[i] = this.encodeBuf[str.charCodeAt(i)];
-    
+
     return buf;
 }
@@ -51427,5 +51427,5 @@
     this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.
 
-    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. 
+    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here.
     this.decodeTableSeq = [];
 
@@ -51436,5 +51436,5 @@
     this.defaultCharUnicode = iconv.defaultCharUnicode;
 
-    
+
     // Encode tables: Unicode -> DBCS.
 
@@ -51445,5 +51445,5 @@
     //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.
     this.encodeTable = [];
-    
+
     // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of
     // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key
@@ -51463,5 +51463,5 @@
                     skipEncodeChars[j] = true;
         }
-        
+
     // Use decode trie to recursively fill out encode tables.
     this._fillEncodeTable(0, 0, skipEncodeChars);
@@ -51500,5 +51500,5 @@
         for (var i = 0x30; i <= 0x39; i++)
             fourthByteNode[i] = GB18030_CODE
-    }        
+    }
 }
 
@@ -51565,5 +51565,5 @@
                     writeTable[curAddr++] = code; // Basic char
             }
-        } 
+        }
         else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character.
             var charCode = writeTable[curAddr - 1] + 1;
@@ -51596,5 +51596,5 @@
 
 DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
-    
+
     // Get the root of character tree according to first character of the sequence.
     var uCode = seq[0];
@@ -51657,5 +51657,5 @@
     this.leadSurrogate = -1;
     this.seqObj = undefined;
-    
+
     // Static data
     this.encodeTable = codec.encodeTable;
@@ -51666,5 +51666,5 @@
 
 DBCSEncoder.prototype.write = function(str) {
-    var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)), 
+    var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)),
         leadSurrogate = this.leadSurrogate,
         seqObj = this.seqObj, nextChar = -1,
@@ -51679,5 +51679,5 @@
         else {
             var uCode = nextChar;
-            nextChar = -1;    
+            nextChar = -1;
         }
 
@@ -51701,5 +51701,5 @@
                     uCode = UNASSIGNED;
                 }
-                
+
             }
         }
@@ -51742,5 +51742,5 @@
             if (subtable !== undefined)
                 dbcsCode = subtable[uCode & 0xFF];
-            
+
             if (dbcsCode <= SEQ_START) { // Sequence start
                 seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];
@@ -51765,5 +51765,5 @@
         if (dbcsCode === UNASSIGNED)
             dbcsCode = this.defaultCharSingleByte;
-        
+
         if (dbcsCode < 0x100) {
             newBuf[j++] = dbcsCode;
@@ -51812,5 +51812,5 @@
         this.leadSurrogate = -1;
     }
-    
+
     return newBuf.slice(0, j);
 }
@@ -51836,5 +51836,5 @@
 DBCSDecoder.prototype.write = function(buf) {
     var newBuf = new Buffer(buf.length*2),
-        nodeIdx = this.nodeIdx, 
+        nodeIdx = this.nodeIdx,
         prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,
         seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.
@@ -51843,5 +51843,5 @@
     if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.
         prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);
-    
+
     for (var i = 0, j = 0; i < buf.length; i++) {
         var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];
@@ -51850,5 +51850,5 @@
         var uCode = this.decodeTables[nodeIdx][curByte];
 
-        if (uCode >= 0) { 
+        if (uCode >= 0) {
             // Normal character, just use it.
         }
@@ -51882,5 +51882,5 @@
 
         // Write the character to buffer, handling higher planes using surrogate pair.
-        if (uCode > 0xFFFF) { 
+        if (uCode > 0xFFFF) {
             uCode -= 0x10000;
             var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);
@@ -51952,9 +51952,9 @@
 
 module.exports = {
-    
+
     // == Japanese/ShiftJIS ====================================================
     // All japanese encodings are based on JIS X set of standards:
     // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
-    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. 
+    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.
     //              Has several variations in 1978, 1983, 1990 and 1997.
     // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
@@ -51974,5 +51974,5 @@
     //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
     //               Used as-is in ISO2022 family.
-    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, 
+    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,
     //                0201-1976 Roman, 0208-1978, 0208-1983.
     //  * ISO2022-JP-1: Adds esc seq for 0212-1990.
@@ -52086,5 +52086,5 @@
     //  * Big5-2003 (Taiwan standard) almost superset of cp950.
     //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
-    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. 
+    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.
     //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
     //    Plus, it has 4 combining sequences.
@@ -52097,5 +52097,5 @@
     //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
     //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
-    // 
+    //
     // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
     // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
@@ -52166,5 +52166,5 @@
 // == Exports ==================================================================
 module.exports = function(iconv) {
-    
+
     // Additional Public API.
     iconv.encodeStream = function encodeStream(encoding, options) {
@@ -52261,5 +52261,5 @@
     try {
         var res = this.conv.end();
-        if (res && res.length) this.push(res, this.encoding);                
+        if (res && res.length) this.push(res, this.encoding);
         done();
     }
@@ -52309,5 +52309,5 @@
 
         var nodeNativeEncodings = {
-            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, 
+            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true,
             'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,
         };
@@ -56164,5 +56164,5 @@
   this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);
   this.input_ = input;    /* input callback */
-  
+
   this.reset();
 }
@@ -56178,5 +56178,5 @@
   this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */
   this.eos_ = 0;          /* input stream is finished */
-  
+
   this.readMoreInput();
   for (var i = 0; i < 4; i++) {
@@ -56184,5 +56184,5 @@
     ++this.pos_;
   }
-  
+
   return this.bit_end_pos_ > 0;
 };
@@ -56212,5 +56212,5 @@
       throw new Error('Unexpected end of input');
     }
-    
+
     if (bytes_read < BROTLI_READ_SIZE) {
       this.eos_ = 1;
@@ -56219,5 +56219,5 @@
         this.buf_[dst + bytes_read + p] = 0;
     }
-    
+
     if (dst === 0) {
       /* Copy the head of the ringbuffer to the slack region. */
@@ -56229,5 +56229,5 @@
       this.buf_ptr_ = 0;
     }
-    
+
     this.bit_end_pos_ += bytes_read << 3;
   }
@@ -56235,5 +56235,5 @@
 
 /* Guarantees that there are at least 24 bits in the buffer. */
-BrotliBitReader.prototype.fillBitWindow = function() {    
+BrotliBitReader.prototype.fillBitWindow = function() {
   while (this.bit_pos_ >= 8) {
     this.val_ >>>= 8;
@@ -56250,5 +56250,5 @@
     this.fillBitWindow();
   }
-  
+
   var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);
   this.bit_pos_ += n_bits;
@@ -56267,8 +56267,8 @@
 
 /**
- * The normal dictionary-data.js is quite large, which makes it 
- * unsuitable for browser usage. In order to make it smaller, 
+ * The normal dictionary-data.js is quite large, which makes it
+ * unsuitable for browser usage. In order to make it smaller,
  * we read dictionary.bin, which is a compressed version of
- * the dictionary, and on initial load, Brotli decompresses 
+ * the dictionary, and on initial load, Brotli decompresses
  * it's own dictionary. 😜
  */
@@ -56781,8 +56781,8 @@
   this.transform = transform;
   this.suffix = new Uint8Array(suffix.length);
-  
+
   for (var i = 0; i < prefix.length; i++)
     this.prefix[i] = prefix.charCodeAt(i);
-  
+
   for (var i = 0; i < suffix.length; i++)
     this.suffix[i] = suffix.charCodeAt(i);
@@ -56923,5 +56923,5 @@
     return 1;
   }
-  
+
   /* An overly simplified uppercasing model for utf-8. */
   if (p[i] < 0xe0) {
@@ -56929,5 +56929,5 @@
     return 2;
   }
-  
+
   /* An arbitrary transform for three byte characters. */
   p[i + 2] ^= 5;
@@ -56943,27 +56943,27 @@
   var start_idx = idx;
   var uppercase;
-  
+
   if (skip > len) {
     skip = len;
   }
-  
+
   var prefix_pos = 0;
   while (prefix_pos < prefix.length) {
     dst[idx++] = prefix[prefix_pos++];
   }
-  
+
   word += skip;
   len -= skip;
-  
+
   if (t <= kOmitLast9) {
     len -= t;
   }
-  
+
   for (i = 0; i < len; i++) {
     dst[idx++] = BrotliDictionary.dictionary[word + i];
   }
-  
+
   uppercase = idx - len;
-  
+
   if (t === kUppercaseFirst) {
     ToUpperCase(dst, uppercase);
@@ -56975,10 +56975,10 @@
     }
   }
-  
+
   var suffix_pos = 0;
   while (suffix_pos < suffix.length) {
     dst[idx++] = suffix[suffix_pos++];
   }
-  
+
   return idx - start_idx;
 }
@@ -58713,18 +58713,18 @@
 # MIT LICENSE
 # Copyright (c) 2011 Devon Govett
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy of this 
-# software and associated documentation files (the "Software"), to deal in the Software 
-# without restriction, including without limitation the rights to use, copy, modify, merge, 
-# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy of this
+# software and associated documentation files (the "Software"), to deal in the Software
+# without restriction, including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
 # to whom the Software is furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in all copies or 
+#
+# The above copyright notice and this permission notice shall be included in all copies or
 # substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
-# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
@@ -59800,6 +59800,6 @@
 			return this.api(true).$( sSelector, oOpts );
 		};
-		
-		
+
+
 		/**
 		 * Almost identical to $ in operation, but in this case returns the data for the matched
@@ -59854,6 +59854,6 @@
 			return this.api(true).rows( sSelector, oOpts ).data();
 		};
-		
-		
+
+
 		/**
 		 * Create a DataTables Api instance, with the currently selected tables for
@@ -59873,6 +59873,6 @@
 				new _Api( this );
 		};
-		
-		
+
+
 		/**
 		 * Add a single new row or multiple rows of data to the table. Please note
@@ -59916,18 +59916,18 @@
 		{
 			var api = this.api( true );
-		
+
 			/* Check if we want to add multiple rows or not */
 			var rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?
 				api.rows.add( data ) :
 				api.row.add( data );
-		
+
 			if ( redraw === undefined || redraw ) {
 				api.draw();
 			}
-		
+
 			return rows.flatten().toArray();
 		};
-		
-		
+
+
 		/**
 		 * This function will make DataTables recalculate the column sizes, based on the data
@@ -59956,5 +59956,5 @@
 			var settings = api.settings()[0];
 			var scroll = settings.oScroll;
-		
+
 			if ( bRedraw === undefined || bRedraw ) {
 				api.draw( false );
@@ -59965,6 +59965,6 @@
 			}
 		};
-		
-		
+
+
 		/**
 		 * Quickly and simply clear a table
@@ -59984,11 +59984,11 @@
 		{
 			var api = this.api( true ).clear();
-		
+
 			if ( bRedraw === undefined || bRedraw ) {
 				api.draw();
 			}
 		};
-		
-		
+
+
 		/**
 		 * The exact opposite of 'opening' a row, this function will close any rows which
@@ -60019,6 +60019,6 @@
 			this.api( true ).row( nTr ).child.hide();
 		};
-		
-		
+
+
 		/**
 		 * Remove a row for the table
@@ -60045,19 +60045,19 @@
 			var settings = rows.settings()[0];
 			var data = settings.aoData[ rows[0][0] ];
-		
+
 			rows.remove();
-		
+
 			if ( callback ) {
 				callback.call( this, settings, data );
 			}
-		
+
 			if ( redraw === undefined || redraw ) {
 				api.draw();
 			}
-		
+
 			return data;
 		};
-		
-		
+
+
 		/**
 		 * Restore the table to it's original state in the DOM by removing all of DataTables
@@ -60078,6 +60078,6 @@
 			this.api( true ).destroy( remove );
 		};
-		
-		
+
+
 		/**
 		 * Redraw the table
@@ -60100,6 +60100,6 @@
 			this.api( true ).draw( complete );
 		};
-		
-		
+
+
 		/**
 		 * Filter the input based on data
@@ -60124,5 +60124,5 @@
 		{
 			var api = this.api( true );
-		
+
 			if ( iColumn === null || iColumn === undefined ) {
 				api.search( sInput, bRegex, bSmart, bCaseInsensitive );
@@ -60131,9 +60131,9 @@
 				api.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );
 			}
-		
+
 			api.draw();
 		};
-		
-		
+
+
 		/**
 		 * Get the data for the whole table, an individual row or an individual cell based on the
@@ -60176,17 +60176,17 @@
 		{
 			var api = this.api( true );
-		
+
 			if ( src !== undefined ) {
 				var type = src.nodeName ? src.nodeName.toLowerCase() : '';
-		
+
 				return col !== undefined || type == 'td' || type == 'th' ?
 					api.cell( src, col ).data() :
 					api.row( src ).data() || null;
 			}
-		
+
 			return api.data().toArray();
 		};
-		
-		
+
+
 		/**
 		 * Get an array of the TR nodes that are used in the table's body. Note that you will
@@ -60210,11 +60210,11 @@
 		{
 			var api = this.api( true );
-		
+
 			return iRow !== undefined ?
 				api.row( iRow ).node() :
 				api.rows().nodes().flatten().toArray();
 		};
-		
-		
+
+
 		/**
 		 * Get the array indexes of a particular cell from it's DOM element
@@ -60249,5 +60249,5 @@
 			var api = this.api( true );
 			var nodeName = node.nodeName.toUpperCase();
-		
+
 			if ( nodeName == 'TR' ) {
 				return api.row( node ).index();
@@ -60255,5 +60255,5 @@
 			else if ( nodeName == 'TD' || nodeName == 'TH' ) {
 				var cell = api.cell( node ).index();
-		
+
 				return [
 					cell.row,
@@ -60264,6 +60264,6 @@
 			return null;
 		};
-		
-		
+
+
 		/**
 		 * Check to see if a row is 'open' or not.
@@ -60293,6 +60293,6 @@
 			return this.api( true ).row( nTr ).child.isShown();
 		};
-		
-		
+
+
 		/**
 		 * This function will place a new row directly after a row which is currently
@@ -60333,6 +60333,6 @@
 				.child()[0];
 		};
-		
-		
+
+
 		/**
 		 * Change the pagination - provides the internal logic for pagination in a simple API
@@ -60354,11 +60354,11 @@
 		{
 			var api = this.api( true ).page( mAction );
-		
+
 			if ( bRedraw === undefined || bRedraw ) {
 				api.draw(false);
 			}
 		};
-		
-		
+
+
 		/**
 		 * Show a particular column
@@ -60380,11 +60380,11 @@
 		{
 			var api = this.api( true ).column( iCol ).visible( bShow );
-		
+
 			if ( bRedraw === undefined || bRedraw ) {
 				api.columns.adjust().draw();
 			}
 		};
-		
-		
+
+
 		/**
 		 * Get the settings for a particular table for external manipulation
@@ -60407,6 +60407,6 @@
 			return _fnSettingsFromNode( this[_ext.iApiIndex] );
 		};
-		
-		
+
+
 		/**
 		 * Sort the table by a particular column
@@ -60428,6 +60428,6 @@
 			this.api( true ).order( aaSort ).draw();
 		};
-		
-		
+
+
 		/**
 		 * Attach a sort listener to an element for a given column
@@ -60450,6 +60450,6 @@
 			this.api( true ).order.listener( nNode, iColumn, fnCallback );
 		};
-		
-		
+
+
 		/**
 		 * Update a table cell or row - this method will accept either a single value to
@@ -60477,5 +60477,5 @@
 		{
 			var api = this.api( true );
-		
+
 			if ( iColumn === undefined || iColumn === null ) {
 				api.row( mRow ).data( mData );
@@ -60484,9 +60484,9 @@
 				api.cell( mRow, iColumn ).data( mData );
 			}
-		
+
 			if ( bAction === undefined || bAction ) {
 				api.columns.adjust();
 			}
-		
+
 			if ( bRedraw === undefined || bRedraw ) {
 				api.draw();
@@ -60494,6 +60494,6 @@
 			return 0;
 		};
-		
-		
+
+
 		/**
 		 * Provide a common method for plug-ins to check the version of DataTables being used, in order
@@ -60514,5 +60514,5 @@
 		 */
 		this.fnVersionCheck = _ext.fnVersionCheck;
-		
+
 
 		var _that = this;
@@ -60547,6 +60547,6 @@
 			var defaults = DataTable.defaults;
 			var $this = $(this);
-			
-			
+
+
 			/* Sanity check */
 			if ( this.nodeName.toLowerCase() != 'table' )
@@ -60555,18 +60555,18 @@
 				return;
 			}
-			
+
 			/* Backwards compatibility for the defaults */
 			_fnCompatOpts( defaults );
 			_fnCompatCols( defaults.column );
-			
+
 			/* Convert the camel-case defaults to Hungarian */
 			_fnCamelToHungarian( defaults, defaults, true );
 			_fnCamelToHungarian( defaults.column, defaults.column, true );
-			
+
 			/* Setting up the initialisation object */
 			_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );
-			
-			
-			
+
+
+
 			/* Check to see if we are re-initialising a table */
 			var allSettings = DataTable.settings;
@@ -60574,5 +60574,5 @@
 			{
 				var s = allSettings[i];
-			
+
 				/* Base check on table node */
 				if (
@@ -60583,5 +60583,5 @@
 					var bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;
 					var bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;
-			
+
 					if ( emptyInit || bRetrieve )
 					{
@@ -60599,5 +60599,5 @@
 					}
 				}
-			
+
 				/* If the element we are initialising has the same ID as a table which was previously
 				 * initialised, but the table nodes don't match (from before) then we destroy the old
@@ -60611,5 +60611,5 @@
 				}
 			}
-			
+
 			/* Ensure the table has an ID - required for accessibility */
 			if ( sId === null || sId === "" )
@@ -60618,5 +60618,5 @@
 				this.id = sId;
 			}
-			
+
 			/* Create the settings object for this table and set some of the default parameters */
 			var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
@@ -60628,15 +60628,15 @@
 			oSettings.oApi   = _that.internal;
 			oSettings.oInit  = oInit;
-			
+
 			allSettings.push( oSettings );
-			
+
 			// Need to add the instance after the instance after the settings object has been added
 			// to the settings array, so we can self reference the table instance if more than one
 			oSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();
-			
+
 			// Backwards compatibility, before we apply all the defaults
 			_fnCompatOpts( oInit );
 			_fnLanguageCompat( oInit.oLanguage );
-			
+
 			// If the length menu is given, but the init display length is not, use the length menu
 			if ( oInit.aLengthMenu && ! oInit.iDisplayLength )
@@ -60645,10 +60645,10 @@
 					oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
 			}
-			
+
 			// Apply the defaults and init options to make a single init object will all
 			// options defined from defaults and instance options.
 			oInit = _fnExtend( $.extend( true, {}, defaults ), oInit );
-			
-			
+
+
 			// Map the initialisation options onto the settings object
 			_fnMap( oSettings.oFeatures, oInit, [
@@ -60698,5 +60698,5 @@
 			] );
 			_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-			
+
 			/* Callback functions which are array driven */
 			_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );
@@ -60711,16 +60711,16 @@
 			_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );
 			_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );
-			
+
 			oSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );
-			
+
 			/* Browser support detection */
 			_fnBrowserDetect( oSettings );
-			
+
 			var oClasses = oSettings.oClasses;
-			
+
 			$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );
 			$this.addClass( oClasses.sTable );
-			
-			
+
+
 			if ( oSettings.iInitDisplayStart === undefined )
 			{
@@ -60729,5 +60729,5 @@
 				oSettings._iDisplayStart = oInit.iDisplayStart;
 			}
-			
+
 			if ( oInit.iDeferLoading !== null )
 			{
@@ -60737,9 +60737,9 @@
 				oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
 			}
-			
+
 			/* Language definitions */
 			var oLanguage = oSettings.oLanguage;
 			$.extend( true, oLanguage, oInit.oLanguage );
-			
+
 			if ( oLanguage.sUrl )
 			{
@@ -60764,5 +60764,5 @@
 				bInitHandedOff = true;
 			}
-			
+
 			/*
 			 * Stripes
@@ -60775,5 +60775,5 @@
 				];
 			}
-			
+
 			/* Remove row stripe classes if they are already on the table row */
 			var stripeClasses = oSettings.asStripeClasses;
@@ -60785,5 +60785,5 @@
 				oSettings.asDestroyStripes = stripeClasses.slice();
 			}
-			
+
 			/*
 			 * Columns
@@ -60798,5 +60798,5 @@
 				anThs = _fnGetUniqueThs( oSettings );
 			}
-			
+
 			/* If not given a column array, generate one with nulls */
 			if ( oInit.aoColumns === null )
@@ -60812,5 +60812,5 @@
 				aoColumnsInit = oInit.aoColumns;
 			}
-			
+
 			/* Add the columns */
 			for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
@@ -60818,10 +60818,10 @@
 				_fnAddColumn( oSettings, anThs ? anThs[i] : null );
 			}
-			
+
 			/* Apply the column definitions */
 			_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
 				_fnColumnOptions( oSettings, iCol, oDef );
 			} );
-			
+
 			/* HTML5 attribute detection - build an mData object automatically if the
 			 * attributes are found
@@ -60831,12 +60831,12 @@
 					return cell.getAttribute( 'data-'+name ) !== null ? name : null;
 				};
-			
+
 				$( rowOne[0] ).children('th, td').each( function (i, cell) {
 					var col = oSettings.aoColumns[i];
-			
+
 					if ( col.mData === i ) {
 						var sort = a( cell, 'sort' ) || a( cell, 'order' );
 						var filter = a( cell, 'filter' ) || a( cell, 'search' );
-			
+
 						if ( sort !== null || filter !== null ) {
 							col.mData = {
@@ -60846,5 +60846,5 @@
 								filter: filter !== null ? i+'.@data-'+filter : undefined
 							};
-			
+
 							_fnColumnOptions( oSettings, i );
 						}
@@ -60852,5 +60852,5 @@
 				} );
 			}
-			
+
 			var features = oSettings.oFeatures;
 			var loadedInit = function () {
@@ -60859,5 +60859,5 @@
 				 * @todo For modularisation (1.11) this needs to do into a sort start up handler
 				 */
-			
+
 				// If aaSorting is not defined, then we use the first indicator in asSorting
 				// in case that has been altered, so the default sort reflects that option
@@ -60868,10 +60868,10 @@
 					}
 				}
-			
+
 				/* Do a first pass on the sorting classes (allows any size changes to be taken into
 				 * account, and also will apply sorting disabled classes if disabled
 				 */
 				_fnSortingClasses( oSettings );
-			
+
 				if ( features.bSort ) {
 					_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
@@ -60879,9 +60879,9 @@
 							var aSort = _fnSortFlatten( oSettings );
 							var sortedColumns = {};
-			
+
 							$.each( aSort, function (i, val) {
 								sortedColumns[ val.src ] = val.dir;
 							} );
-			
+
 							_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );
 							_fnSortAria( oSettings );
@@ -60889,5 +60889,5 @@
 					} );
 				}
-			
+
 				_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
 					if ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {
@@ -60895,16 +60895,16 @@
 					}
 				}, 'sc' );
-			
-			
+
+
 				/*
 				 * Final init
 				 * Cache the header, body and footer as required, creating them if needed
 				 */
-			
+
 				// Work around for Webkit bug 83867 - store the caption-side before removing from doc
 				var captions = $this.children('caption').each( function () {
 					this._captionSide = $(this).css('caption-side');
 				} );
-			
+
 				var thead = $this.children('thead');
 				if ( thead.length === 0 ) {
@@ -60912,5 +60912,5 @@
 				}
 				oSettings.nTHead = thead[0];
-			
+
 				var tbody = $this.children('tbody');
 				if ( tbody.length === 0 ) {
@@ -60918,5 +60918,5 @@
 				}
 				oSettings.nTBody = tbody[0];
-			
+
 				var tfoot = $this.children('tfoot');
 				if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) {
@@ -60925,5 +60925,5 @@
 					tfoot = $('<tfoot/>').appendTo($this);
 				}
-			
+
 				if ( tfoot.length === 0 || tfoot.children().length === 0 ) {
 					$this.addClass( oClasses.sNoFooter );
@@ -60933,5 +60933,5 @@
 					_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
 				}
-			
+
 				/* Check if there is data passing into the constructor */
 				if ( oInit.aaData ) {
@@ -60947,11 +60947,11 @@
 					_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );
 				}
-			
+
 				/* Copy the data index array */
 				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
+
 				/* Initialisation complete - table can be drawn */
 				oSettings.bInitialised = true;
-			
+
 				/* Check if we need to initialise the table (it might not have been handed off to the
 				 * language processor)
@@ -60961,5 +60961,5 @@
 				}
 			};
-			
+
 			/* Must be done after everything which can be overridden by the state saving! */
 			if ( oInit.bStateSave )
@@ -60972,5 +60972,5 @@
 				loadedInit();
 			}
-			
+
 		} );
 		_that = null;
@@ -60978,5 +60978,5 @@
 	};
 
-	
+
 	/*
 	 * It is useful to have variables which are scoped locally so only the
@@ -60987,6 +60987,6 @@
 	 * clashing of variable names and that they can easily referenced for reuse.
 	 */
-	
-	
+
+
 	// Defined else where
 	//  _selector_run
@@ -60994,21 +60994,21 @@
 	//  _selector_first
 	//  _selector_row_indexes
-	
+
 	var _ext; // DataTable.ext
 	var _Api; // DataTable.Api
 	var _api_register; // DataTable.Api.register
 	var _api_registerPlural; // DataTable.Api.registerPlural
-	
+
 	var _re_dic = {};
 	var _re_new_lines = /[\r\n\u2028]/g;
 	var _re_html = /<.*?>/g;
-	
+
 	// This is not strict ISO8601 - Date.parse() is quite lax, although
 	// implementations differ between browsers.
 	var _re_date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/;
-	
+
 	// Escape regular expression special characters
 	var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' );
-	
+
 	// http://en.wikipedia.org/wiki/Foreign_exchange_market
 	// - \u20BD - Russian ruble.
@@ -61024,16 +61024,16 @@
 	//   standards as thousands separators.
 	var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;
-	
-	
+
+
 	var _empty = function ( d ) {
 		return !d || d === true || d === '-' ? true : false;
 	};
-	
-	
+
+
 	var _intVal = function ( s ) {
 		var integer = parseInt( s, 10 );
 		return !isNaN(integer) && isFinite(s) ? integer : null;
 	};
-	
+
 	// Convert from a formatted number with characters other than `.` as the
 	// decimal place, to a Javascript number
@@ -61047,9 +61047,9 @@
 			num;
 	};
-	
-	
+
+
 	var _isNumber = function ( d, decimalPoint, formatted ) {
 		var strType = typeof d === 'string';
-	
+
 		// If empty return immediately so there must be a number if it is a
 		// formatted string (this stops the string "k", or "kr", etc being detected
@@ -61058,28 +61058,28 @@
 			return true;
 		}
-	
+
 		if ( decimalPoint && strType ) {
 			d = _numToDecimal( d, decimalPoint );
 		}
-	
+
 		if ( formatted && strType ) {
 			d = d.replace( _re_formatted_numeric, '' );
 		}
-	
+
 		return !isNaN( parseFloat(d) ) && isFinite( d );
 	};
-	
-	
+
+
 	// A string without HTML in it can be considered to be HTML still
 	var _isHtml = function ( d ) {
 		return _empty( d ) || typeof d === 'string';
 	};
-	
-	
+
+
 	var _htmlNumeric = function ( d, decimalPoint, formatted ) {
 		if ( _empty( d ) ) {
 			return true;
 		}
-	
+
 		var html = _isHtml( d );
 		return ! html ?
@@ -61089,10 +61089,10 @@
 				null;
 	};
-	
-	
+
+
 	var _pluck = function ( a, prop, prop2 ) {
 		var out = [];
 		var i=0, ien=a.length;
-	
+
 		// Could have the test in the loop for slightly smaller code, but speed
 		// is essential here
@@ -61111,9 +61111,9 @@
 			}
 		}
-	
+
 		return out;
 	};
-	
-	
+
+
 	// Basically the same as _pluck, but rather than looping over `a` we use `order`
 	// as the indexes to pick from `a`
@@ -61122,5 +61122,5 @@
 		var out = [];
 		var i=0, ien=order.length;
-	
+
 		// Could have the test in the loop for slightly smaller code, but speed
 		// is essential here
@@ -61137,14 +61137,14 @@
 			}
 		}
-	
+
 		return out;
 	};
-	
-	
+
+
 	var _range = function ( len, start )
 	{
 		var out = [];
 		var end;
-	
+
 		if ( start === undefined ) {
 			start = 0;
@@ -61155,17 +61155,17 @@
 			start = len;
 		}
-	
+
 		for ( var i=start ; i<end ; i++ ) {
 			out.push( i );
 		}
-	
+
 		return out;
 	};
-	
-	
+
+
 	var _removeEmpty = function ( a )
 	{
 		var out = [];
-	
+
 		for ( var i=0, ien=a.length ; i<ien ; i++ ) {
 			if ( a[i] ) { // careful - will remove all falsy values!
@@ -61173,14 +61173,14 @@
 			}
 		}
-	
+
 		return out;
 	};
-	
-	
+
+
 	var _stripHtml = function ( d ) {
 		return d.replace( _re_html, '' );
 	};
-	
-	
+
+
 	/**
 	 * Determine if all values in the array are unique. This means we can short
@@ -61196,20 +61196,20 @@
 			return true;
 		}
-	
+
 		var sorted = src.slice().sort();
 		var last = sorted[0];
-	
+
 		for ( var i=1, ien=sorted.length ; i<ien ; i++ ) {
 			if ( sorted[i] === last ) {
 				return false;
 			}
-	
+
 			last = sorted[i];
 		}
-	
+
 		return true;
 	};
-	
-	
+
+
 	/**
 	 * Find the unique elements in a source array.
@@ -61224,5 +61224,5 @@
 			return src.slice();
 		}
-	
+
 		// A faster unique method is to use object keys to identify used values,
 		// but this doesn't work with arrays or objects, which we must also
@@ -61234,8 +61234,8 @@
 			i, ien=src.length,
 			j, k=0;
-	
+
 		again: for ( i=0 ; i<ien ; i++ ) {
 			val = src[i];
-	
+
 			for ( j=0 ; j<k ; j++ ) {
 				if ( out[j] === val ) {
@@ -61243,16 +61243,16 @@
 				}
 			}
-	
+
 			out.push( val );
 			k++;
 		}
-	
+
 		return out;
 	};
-	
-	
+
+
 	/**
 	 * DataTables utility methods
-	 * 
+	 *
 	 * This namespace provides helper methods that DataTables uses internally to
 	 * create a DataTable, but which are not exclusively used only for DataTables.
@@ -61276,5 +61276,5 @@
 				last,
 				timer;
-	
+
 			return function () {
 				var
@@ -61282,8 +61282,8 @@
 					now  = +new Date(),
 					args = arguments;
-	
+
 				if ( last && now < last + frequency ) {
 					clearTimeout( timer );
-	
+
 					timer = setTimeout( function () {
 						last = undefined;
@@ -61297,6 +61297,6 @@
 			};
 		},
-	
-	
+
+
 		/**
 		 * Escape a string such that it can be used in a regular expression
@@ -61309,7 +61309,7 @@
 		}
 	};
-	
-	
-	
+
+
+
 	/**
 	 * Create a mapping object that allows camel case parameters to be looked up
@@ -61326,13 +61326,13 @@
 			newKey,
 			map = {};
-	
+
 		$.each( o, function (key, val) {
 			match = key.match(/^([^A-Z]+?)([A-Z])/);
-	
+
 			if ( match && hungarian.indexOf(match[1]+' ') !== -1 )
 			{
 				newKey = key.replace( match[0], match[2].toLowerCase() );
 				map[ newKey ] = key;
-	
+
 				if ( match[1] === 'o' )
 				{
@@ -61341,9 +61341,9 @@
 			}
 		} );
-	
+
 		o._hungarianMap = map;
 	}
-	
-	
+
+
 	/**
 	 * Convert from camel case parameters to Hungarian, based on a Hungarian map
@@ -61362,10 +61362,10 @@
 			_fnHungarianMap( src );
 		}
-	
+
 		var hungarianKey;
-	
+
 		$.each( user, function (key, val) {
 			hungarianKey = src._hungarianMap[ key ];
-	
+
 			if ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )
 			{
@@ -61378,5 +61378,5 @@
 					}
 					$.extend( true, user[hungarianKey], user[key] );
-	
+
 					_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );
 				}
@@ -61387,6 +61387,6 @@
 		} );
 	}
-	
-	
+
+
 	/**
 	 * Language compatibility - when certain options are given, and others aren't, we
@@ -61401,5 +61401,5 @@
 		// this is called after the mapping of camelCase to Hungarian
 		var defaults = DataTable.defaults.oLanguage;
-	
+
 		// Default mapping
 		var defaultDecimal = defaults.sDecimal;
@@ -61407,8 +61407,8 @@
 			_addNumericSort( defaultDecimal );
 		}
-	
+
 		if ( lang ) {
 			var zeroRecords = lang.sZeroRecords;
-	
+
 			// Backwards compatibility - if there is no sEmptyTable given, then use the same as
 			// sZeroRecords - assuming that is given.
@@ -61418,5 +61418,5 @@
 				_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );
 			}
-	
+
 			// Likewise with loading records
 			if ( ! lang.sLoadingRecords && zeroRecords &&
@@ -61425,10 +61425,10 @@
 				_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );
 			}
-	
+
 			// Old parameter name of the thousands separator mapped onto the new
 			if ( lang.sInfoThousands ) {
 				lang.sThousands = lang.sInfoThousands;
 			}
-	
+
 			var decimal = lang.sDecimal;
 			if ( decimal && defaultDecimal !== decimal ) {
@@ -61437,6 +61437,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Map one parameter onto another
@@ -61450,6 +61450,6 @@
 		}
 	};
-	
-	
+
+
 	/**
 	 * Provide backwards compatibility for the main DT options. Note that the new
@@ -61470,5 +61470,5 @@
 		_fnCompatMap( init, 'pageLength',    'iDisplayLength' );
 		_fnCompatMap( init, 'searching',     'bFilter' );
-	
+
 		// Boolean initialisation of x-scrolling
 		if ( typeof init.sScrollX === 'boolean' ) {
@@ -61478,9 +61478,9 @@
 			init.scrollX = init.scrollX ? '100%' : '';
 		}
-	
+
 		// Column search objects are in an array, so it needs to be converted
 		// element by element
 		var searchCols = init.aoSearchCols;
-	
+
 		if ( searchCols ) {
 			for ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {
@@ -61491,6 +61491,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Provide backwards compatibility for column options. Note that the new options
@@ -61505,5 +61505,5 @@
 		_fnCompatMap( init, 'orderSequence', 'asSorting' );
 		_fnCompatMap( init, 'orderDataType', 'sortDataType' );
-	
+
 		// orderData can be given as an integer
 		var dataSort = init.aDataSort;
@@ -61512,6 +61512,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Browser feature detection for capabilities, quirks
@@ -61527,5 +61527,5 @@
 			var browser = {};
 			DataTable.__browser = browser;
-	
+
 			// Scrolling feature / quirks detection
 			var n = $('<div/>')
@@ -61556,8 +61556,8 @@
 				)
 				.appendTo( 'body' );
-	
+
 			var outer = n.children();
 			var inner = outer.children();
-	
+
 			// Numbers below, in order, are:
 			// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
@@ -61569,28 +61569,28 @@
 			// Evergreen Mac with scrollbars:     85  85 100  85
 			// Evergreen Mac without scrollbars: 100 100 100 100
-	
+
 			// Get scrollbar width
 			browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
-	
+
 			// IE6/7 will oversize a width 100% element inside a scrolling element, to
 			// include the width of the scrollbar, while other browsers ensure the inner
 			// element is contained without forcing scrolling
 			browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
-	
+
 			// In rtl text layout, some browsers (most, but not all) will place the
 			// scrollbar on the left, rather than the right.
 			browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
-	
+
 			// IE8- don't provide height and width for getBoundingClientRect
 			browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
-	
+
 			n.remove();
 		}
-	
+
 		$.extend( settings.oBrowser, DataTable.__browser );
 		settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
 	}
-	
-	
+
+
 	/**
 	 * Array.prototype reduce[Right] method, used for browsers which don't support
@@ -61605,26 +61605,26 @@
 			value,
 			isSet = false;
-	
+
 		if ( init !== undefined ) {
 			value = init;
 			isSet = true;
 		}
-	
+
 		while ( i !== end ) {
 			if ( ! that.hasOwnProperty(i) ) {
 				continue;
 			}
-	
+
 			value = isSet ?
 				fn( value, that[i], i, that ) :
 				that[i];
-	
+
 			isSet = true;
 			i += inc;
 		}
-	
+
 		return value;
 	}
-	
+
 	/**
 	 * Add a column to the list used for the table with default values
@@ -61646,5 +61646,5 @@
 		} );
 		oSettings.aoColumns.push( oCol );
-	
+
 		// Add search object for column specific search. Note that the `searchCols[ iCol ]`
 		// passed into extend can be undefined. This allows the user to give a default
@@ -61652,10 +61652,10 @@
 		var searchCols = oSettings.aoPreSearchCols;
 		searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );
-	
+
 		// Use the default column options function to initialise classes etc
 		_fnColumnOptions( oSettings, iCol, $(nTh).data() );
 	}
-	
-	
+
+
 	/**
 	 * Apply options for a column
@@ -61670,5 +61670,5 @@
 		var oClasses = oSettings.oClasses;
 		var th = $(oCol.nTh);
-	
+
 		// Try to get width information from the DOM. We can't get it from CSS
 		// as we'd need to parse the CSS stylesheet. `width` option can override
@@ -61676,5 +61676,5 @@
 			// Width attribute
 			oCol.sWidthOrig = th.attr('width') || null;
-	
+
 			// Style attribute
 			var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/);
@@ -61683,5 +61683,5 @@
 			}
 		}
-	
+
 		/* User specified column options */
 		if ( oOptions !== undefined && oOptions !== null )
@@ -61689,8 +61689,8 @@
 			// Backwards compatibility
 			_fnCompatCols( oOptions );
-	
+
 			// Map camel case parameters to their Hungarian counterparts
 			_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );
-	
+
 			/* Backwards compatibility for mDataProp */
 			if ( oOptions.mDataProp !== undefined && !oOptions.mData )
@@ -61698,10 +61698,10 @@
 				oOptions.mData = oOptions.mDataProp;
 			}
-	
+
 			if ( oOptions.sType )
 			{
 				oCol._sManualType = oOptions.sType;
 			}
-	
+
 			// `class` is a reserved word in Javascript, so we need to provide
 			// the ability to use a valid name for the camel case input
@@ -61713,8 +61713,8 @@
 				th.addClass( oOptions.sClass );
 			}
-	
+
 			$.extend( oCol, oOptions );
 			_fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-	
+
 			/* iDataSort to be applied (backwards compatibility), but aDataSort will take
 			 * priority if defined
@@ -61726,10 +61726,10 @@
 			_fnMap( oCol, oOptions, "aDataSort" );
 		}
-	
+
 		/* Cache the data get and set functions for speed */
 		var mDataSrc = oCol.mData;
 		var mData = _fnGetObjectDataFn( mDataSrc );
 		var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
-	
+
 		var attrTest = function( src ) {
 			return typeof src === 'string' && src.indexOf('@') !== -1;
@@ -61739,8 +61739,8 @@
 		);
 		oCol._setter = null;
-	
+
 		oCol.fnGetData = function (rowData, type, meta) {
 			var innerData = mData( rowData, type, undefined, meta );
-	
+
 			return mRender && type ?
 				mRender( innerData, type, rowData, meta ) :
@@ -61750,5 +61750,5 @@
 			return _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );
 		};
-	
+
 		// Indicate if DataTables should read DOM data as an object or array
 		// Used in _fnGetRowElements
@@ -61756,5 +61756,5 @@
 			oSettings._rowReadObject = true;
 		}
-	
+
 		/* Feature sorting overrides column specific when off */
 		if ( !oSettings.oFeatures.bSort )
@@ -61763,5 +61763,5 @@
 			th.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called
 		}
-	
+
 		/* Check that the class assignment is correct for sorting */
 		var bAsc = $.inArray('asc', oCol.asSorting) !== -1;
@@ -61788,6 +61788,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Adjust the table column widths for new data. Note: you would probably want to
@@ -61802,5 +61802,5 @@
 		{
 			var columns = settings.aoColumns;
-	
+
 			_fnCalculateColumnWidths( settings );
 			for ( var i=0 , iLen=columns.length ; i<iLen ; i++ )
@@ -61809,5 +61809,5 @@
 			}
 		}
-	
+
 		var scroll = settings.oScroll;
 		if ( scroll.sY !== '' || scroll.sX !== '')
@@ -61815,9 +61815,9 @@
 			_fnScrollDraw( settings );
 		}
-	
+
 		_fnCallbackFire( settings, null, 'column-sizing', [settings] );
 	}
-	
-	
+
+
 	/**
 	 * Covert the index of a visible column to the index in the data array (take account
@@ -61831,11 +61831,11 @@
 	{
 		var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-	
+
 		return typeof aiVis[iMatch] === 'number' ?
 			aiVis[iMatch] :
 			null;
 	}
-	
-	
+
+
 	/**
 	 * Covert the index of an index in the data array and convert it to the visible
@@ -61850,9 +61850,9 @@
 		var aiVis = _fnGetColumns( oSettings, 'bVisible' );
 		var iPos = $.inArray( iMatch, aiVis );
-	
+
 		return iPos !== -1 ? iPos : null;
 	}
-	
-	
+
+
 	/**
 	 * Get the number of visible columns
@@ -61864,5 +61864,5 @@
 	{
 		var vis = 0;
-	
+
 		// No reduce in IE8, use a loop for now
 		$.each( oSettings.aoColumns, function ( i, col ) {
@@ -61871,9 +61871,9 @@
 			}
 		} );
-	
+
 		return vis;
 	}
-	
-	
+
+
 	/**
 	 * Get an array of column indexes that match a given property
@@ -61887,5 +61887,5 @@
 	{
 		var a = [];
-	
+
 		$.map( oSettings.aoColumns, function(val, i) {
 			if ( val[sParam] ) {
@@ -61893,9 +61893,9 @@
 			}
 		} );
-	
+
 		return a;
 	}
-	
-	
+
+
 	/**
 	 * Calculate the 'type' of a column
@@ -61910,10 +61910,10 @@
 		var i, ien, j, jen, k, ken;
 		var col, cell, detectedType, cache;
-	
-		// For each column, spin over the 
+
+		// For each column, spin over the
 		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
 			col = columns[i];
 			cache = [];
-	
+
 			if ( ! col.sType && col._sManualType ) {
 				col.sType = col._sManualType;
@@ -61927,7 +61927,7 @@
 							cache[k] = _fnGetCellData( settings, k, i, 'type' );
 						}
-	
+
 						detectedType = types[j]( cache[k], settings );
-	
+
 						// If null, then this type can't apply to this column, so
 						// rather than testing all cells, break out. There is an
@@ -61938,5 +61938,5 @@
 							break;
 						}
-	
+
 						// Only a single match is needed for html type since it is
 						// bottom of the pile and very similar to string
@@ -61945,5 +61945,5 @@
 						}
 					}
-	
+
 					// Type is valid for all data points in the column - use this
 					// type
@@ -61953,5 +61953,5 @@
 					}
 				}
-	
+
 				// Fall back - if no type was detected, always use string
 				if ( ! col.sType ) {
@@ -61961,6 +61961,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Take the column definitions and static columns arrays and calculate how
@@ -61978,5 +61978,5 @@
 		var i, iLen, j, jLen, k, kLen, def;
 		var columns = oSettings.aoColumns;
-	
+
 		// Column definitions with aTargets
 		if ( aoColDefs )
@@ -61986,15 +61986,15 @@
 			{
 				def = aoColDefs[i];
-	
+
 				/* Each definition can target multiple columns, as it is an array */
 				var aTargets = def.targets !== undefined ?
 					def.targets :
 					def.aTargets;
-	
+
 				if ( ! $.isArray( aTargets ) )
 				{
 					aTargets = [ aTargets ];
 				}
-	
+
 				for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
 				{
@@ -62006,5 +62006,5 @@
 							_fnAddColumn( oSettings );
 						}
-	
+
 						/* Integer, basic index */
 						fn( aTargets[j], def );
@@ -62030,5 +62030,5 @@
 			}
 		}
-	
+
 		// Statically defined columns array
 		if ( aoCols )
@@ -62040,5 +62040,5 @@
 		}
 	}
-	
+
 	/**
 	 * Add a data array to the table, creating DOM node etc. This is the parallel to
@@ -62062,12 +62062,12 @@
 			idx: iRow
 		} );
-	
+
 		oData._aData = aDataIn;
 		oSettings.aoData.push( oData );
-	
+
 		/* Create the cells */
 		var nTd, sThisType;
 		var columns = oSettings.aoColumns;
-	
+
 		// Invalidate the column types as the new data needs to be revalidated
 		for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
@@ -62075,13 +62075,13 @@
 			columns[i].sType = null;
 		}
-	
+
 		/* Add to the display array */
 		oSettings.aiDisplayMaster.push( iRow );
-	
+
 		var id = oSettings.rowIdFn( aDataIn );
 		if ( id !== undefined ) {
 			oSettings.aIds[ id ] = oData;
 		}
-	
+
 		/* Create the DOM information, or register it if already present */
 		if ( nTr || ! oSettings.oFeatures.bDeferRender )
@@ -62089,9 +62089,9 @@
 			_fnCreateTr( oSettings, iRow, nTr, anTds );
 		}
-	
+
 		return iRow;
 	}
-	
-	
+
+
 	/**
 	 * Add one or more TR elements to the table. Generally we'd expect to
@@ -62107,10 +62107,10 @@
 	{
 		var row;
-	
+
 		// Allow an individual node to be passed in
 		if ( ! (trs instanceof $) ) {
 			trs = $(trs);
 		}
-	
+
 		return trs.map( function (i, el) {
 			row = _fnGetRowElements( settings, el );
@@ -62118,6 +62118,6 @@
 		} );
 	}
-	
-	
+
+
 	/**
 	 * Take a TR element and convert it to an index in aoData
@@ -62131,6 +62131,6 @@
 		return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
 	}
-	
-	
+
+
 	/**
 	 * Take a TD element and convert it into a column data index (not the visible index)
@@ -62145,6 +62145,6 @@
 		return $.inArray( n, oSettings.aoData[ iRow ].anCells );
 	}
-	
-	
+
+
 	/**
 	 * Get the data for a given cell from the internal cache, taking into account data mapping
@@ -62167,5 +62167,5 @@
 			col:      colIdx
 		} );
-	
+
 		if ( cellData === undefined ) {
 			if ( settings.iDrawError != draw && defaultContent === null ) {
@@ -62177,5 +62177,5 @@
 			return defaultContent;
 		}
-	
+
 		// When the data source is null and a specific data type is requested (i.e.
 		// not the original data), we can use default column data
@@ -62188,5 +62188,5 @@
 			return cellData.call( rowData );
 		}
-	
+
 		if ( cellData === null && type == 'display' ) {
 			return '';
@@ -62194,6 +62194,6 @@
 		return cellData;
 	}
-	
-	
+
+
 	/**
 	 * Set the value for a specific cell, into the internal data cache
@@ -62208,5 +62208,5 @@
 		var col     = settings.aoColumns[colIdx];
 		var rowData = settings.aoData[rowIdx]._aData;
-	
+
 		col.fnSetData( rowData, val, {
 			settings: settings,
@@ -62215,10 +62215,10 @@
 		}  );
 	}
-	
-	
+
+
 	// Private variable that is used to match action syntax in the data property object
 	var __reArray = /\[.*?\]$/;
 	var __reFn = /\(\)$/;
-	
+
 	/**
 	 * Split string on periods, taking into account escaped periods
@@ -62232,6 +62232,6 @@
 		} );
 	}
-	
-	
+
+
 	/**
 	 * Return a function that can be used to get data from a source object, taking
@@ -62252,5 +62252,5 @@
 				}
 			} );
-	
+
 			return function (data, type, row, meta) {
 				var t = o[type] || o._;
@@ -62284,9 +62284,9 @@
 			var fetchData = function (data, type, src) {
 				var arrayNotation, funcNotation, out, innerSrc;
-	
+
 				if ( src !== "" )
 				{
 					var a = _fnSplitObjNotation( src );
-	
+
 					for ( var i=0, iLen=a.length ; i<iLen ; i++ )
 					{
@@ -62294,10 +62294,10 @@
 						arrayNotation = a[i].match(__reArray);
 						funcNotation = a[i].match(__reFn);
-	
+
 						if ( arrayNotation )
 						{
 							// Array notation
 							a[i] = a[i].replace(__reArray, '');
-	
+
 							// Condition allows simply [] to be passed in
 							if ( a[i] !== "" ) {
@@ -62305,9 +62305,9 @@
 							}
 							out = [];
-	
+
 							// Get the remainder of the nested object to get
 							a.splice( 0, i+1 );
 							innerSrc = a.join('.');
-	
+
 							// Traverse each entry in the array getting the properties requested
 							if ( $.isArray( data ) ) {
@@ -62316,10 +62316,10 @@
 								}
 							}
-	
+
 							// If a string is given in between the array notation indicators, that
 							// is used to join the strings together, otherwise an array is returned
 							var join = arrayNotation[0].substring(1, arrayNotation[0].length-1);
 							data = (join==="") ? out : out.join(join);
-	
+
 							// The inner call to fetchData has already traversed through the remainder
 							// of the source requested, so we exit from the loop
@@ -62333,5 +62333,5 @@
 							continue;
 						}
-	
+
 						if ( data === null || data[ a[i] ] === undefined )
 						{
@@ -62341,8 +62341,8 @@
 					}
 				}
-	
+
 				return data;
 			};
-	
+
 			return function (data, type) { // row and meta also passed, but not used
 				return fetchData( data, type, mSource );
@@ -62357,6 +62357,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Return a function that can be used to set data from a source object, taking
@@ -62396,5 +62396,5 @@
 				var aLast = a[a.length-1];
 				var arrayNotation, funcNotation, o, innerSrc;
-	
+
 				for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
 				{
@@ -62402,15 +62402,15 @@
 					arrayNotation = a[i].match(__reArray);
 					funcNotation = a[i].match(__reFn);
-	
+
 					if ( arrayNotation )
 					{
 						a[i] = a[i].replace(__reArray, '');
 						data[ a[i] ] = [];
-	
+
 						// Get the remainder of the nested object to set so we can recurse
 						b = a.slice();
 						b.splice( 0, i+1 );
 						innerSrc = b.join('.');
-	
+
 						// Traverse each entry in the array setting the properties requested
 						if ( $.isArray( val ) )
@@ -62430,5 +62430,5 @@
 							data[ a[i] ] = val;
 						}
-	
+
 						// The inner call to setData has already traversed through the remainder
 						// of the source and has set the data, thus we can exit here
@@ -62441,5 +62441,5 @@
 						data = data[ a[i] ]( val );
 					}
-	
+
 					// If the nested object doesn't currently exist - since we are
 					// trying to set the value - create it
@@ -62450,5 +62450,5 @@
 					data = data[ a[i] ];
 				}
-	
+
 				// Last item in the input - i.e, the actual set
 				if ( aLast.match(__reFn ) )
@@ -62464,5 +62464,5 @@
 				}
 			};
-	
+
 			return function (data, val) { // meta is also passed in, but not used
 				return setData( data, val, mSource );
@@ -62477,6 +62477,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Return an array with the full table data
@@ -62489,6 +62489,6 @@
 		return _pluck( settings.aoData, '_aData' );
 	}
-	
-	
+
+
 	/**
 	 * Nuke the table
@@ -62503,6 +62503,6 @@
 		settings.aIds = {};
 	}
-	
-	
+
+
 	 /**
 	 * Take an array of integers (index array) and remove a target integer (value - not
@@ -62515,5 +62515,5 @@
 	{
 		var iTargetIndex = -1;
-	
+
 		for ( var i=0, iLen=a.length ; i<iLen ; i++ )
 		{
@@ -62527,5 +62527,5 @@
 			}
 		}
-	
+
 		if ( iTargetIndex != -1 && splice === undefined )
 		{
@@ -62533,6 +62533,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Mark cached data as invalid such that a re-read of the data will occur when
@@ -62562,8 +62562,8 @@
 				cell.removeChild( cell.firstChild );
 			}
-	
+
 			cell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );
 		};
-	
+
 		// Are we reading last data from DOM or the data object?
 		if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
@@ -62577,5 +62577,5 @@
 			// Reading from data object, update the DOM
 			var cells = row.anCells;
-	
+
 			if ( cells ) {
 				if ( colIdx !== undefined ) {
@@ -62589,10 +62589,10 @@
 			}
 		}
-	
+
 		// For both row and cell invalidation, the cached data for sorting and
 		// filtering is nulled out
 		row._aSortData = null;
 		row._aFilterData = null;
-	
+
 		// Invalidate the type for a specific column (if given) or all columns since
 		// the data might have changed
@@ -62605,11 +62605,11 @@
 				cols[i].sType = null;
 			}
-	
+
 			// Update DataTables special `DT_*` attributes for the row
 			_fnRowAttributes( settings, row );
 		}
 	}
-	
-	
+
+
 	/**
 	 * Build a data source object from an HTML row, reading the contents of the
@@ -62637,5 +62637,5 @@
 			columns = settings.aoColumns,
 			objectRead = settings._rowReadObject;
-	
+
 		// Allow the data object to be passed in, or construct
 		d = d !== undefined ?
@@ -62644,9 +62644,9 @@
 				{} :
 				[];
-	
+
 		var attr = function ( str, td  ) {
 			if ( typeof str === 'string' ) {
 				var idx = str.indexOf('@');
-	
+
 				if ( idx !== -1 ) {
 					var attr = str.substring( idx+1 );
@@ -62656,5 +62656,5 @@
 			}
 		};
-	
+
 		// Read data from a cell and store into the data object
 		var cellProcess = function ( cell ) {
@@ -62662,9 +62662,9 @@
 				col = columns[i];
 				contents = $.trim(cell.innerHTML);
-	
+
 				if ( col && col._bAttrSrc ) {
 					var setter = _fnSetObjectDataFn( col.mData._ );
 					setter( d, contents );
-	
+
 					attr( col.mData.sort, cell );
 					attr( col.mData.type, cell );
@@ -62686,18 +62686,18 @@
 				}
 			}
-	
+
 			i++;
 		};
-	
+
 		if ( td ) {
 			// `tr` element was passed in
 			while ( td ) {
 				name = td.nodeName.toUpperCase();
-	
+
 				if ( name == "TD" || name == "TH" ) {
 					cellProcess( td );
 					tds.push( td );
 				}
-	
+
 				td = td.nextSibling;
 			}
@@ -62706,21 +62706,21 @@
 			// Existing row object passed in
 			tds = row.anCells;
-	
+
 			for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
 				cellProcess( tds[j] );
 			}
 		}
-	
+
 		// Read the ID from the DOM if present
 		var rowNode = row.firstChild ? row : row.nTr;
-	
+
 		if ( rowNode ) {
 			var id = rowNode.getAttribute( 'id' );
-	
+
 			if ( id ) {
 				_fnSetObjectDataFn( settings.rowId )( d, id );
 			}
 		}
-	
+
 		return {
 			data: d,
@@ -62746,20 +62746,20 @@
 			nTr, nTd, oCol,
 			i, iLen, create;
-	
+
 		if ( row.nTr === null )
 		{
 			nTr = nTrIn || document.createElement('tr');
-	
+
 			row.nTr = nTr;
 			row.anCells = cells;
-	
+
 			/* Use a private property on the node to allow reserve mapping from the node
 			 * to the aoData array for fast look up
 			 */
 			nTr._DT_RowIndex = iRow;
-	
+
 			/* Special parameters can be given by the data source to be used on the row */
 			_fnRowAttributes( oSettings, row );
-	
+
 			/* Process each column */
 			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
@@ -62767,5 +62767,5 @@
 				oCol = oSettings.aoColumns[i];
 				create = nTrIn ? false : true;
-	
+
 				nTd = create ? document.createElement( oCol.sCellType ) : anTds[i];
 				nTd._DT_CellIndex = {
@@ -62773,7 +62773,7 @@
 					column: i
 				};
-				
+
 				cells.push( nTd );
-	
+
 				// Need to create the HTML if new, or if a rendering function is defined
 				if ( create || ((!nTrIn || oCol.mRender || oCol.mData !== i) &&
@@ -62782,5 +62782,5 @@
 					nTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );
 				}
-	
+
 				/* Add user defined class */
 				if ( oCol.sClass )
@@ -62788,5 +62788,5 @@
 					nTd.className += ' '+oCol.sClass;
 				}
-	
+
 				// Visibility - add or remove as required
 				if ( oCol.bVisible && ! nTrIn )
@@ -62798,5 +62798,5 @@
 					nTd.parentNode.removeChild( nTd );
 				}
-	
+
 				if ( oCol.fnCreatedCell )
 				{
@@ -62806,14 +62806,14 @@
 				}
 			}
-	
+
 			_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );
 		}
-	
+
 		// Remove once webkit bug 131819 and Chromium bug 365619 have been resolved
 		// and deployed
 		row.nTr.setAttribute( 'role', 'row' );
 	}
-	
-	
+
+
 	/**
 	 * Add attributes to a row based on the special `DT_*` parameters in a data
@@ -62827,12 +62827,12 @@
 		var tr = row.nTr;
 		var data = row._aData;
-	
+
 		if ( tr ) {
 			var id = settings.rowIdFn( data );
-	
+
 			if ( id ) {
 				tr.id = id;
 			}
-	
+
 			if ( data.DT_RowClass ) {
 				// Remove any classes added by DT_RowClass before
@@ -62841,14 +62841,14 @@
 					_unique( row.__rowc.concat( a ) ) :
 					a;
-	
+
 				$(tr)
 					.removeClass( row.__rowc.join(' ') )
 					.addClass( data.DT_RowClass );
 			}
-	
+
 			if ( data.DT_RowAttr ) {
 				$(tr).attr( data.DT_RowAttr );
 			}
-	
+
 			if ( data.DT_RowData ) {
 				$(tr).data( data.DT_RowData );
@@ -62856,6 +62856,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Create the HTML header for the table
@@ -62871,50 +62871,50 @@
 		var classes = oSettings.oClasses;
 		var columns = oSettings.aoColumns;
-	
+
 		if ( createHeader ) {
 			row = $('<tr/>').appendTo( thead );
 		}
-	
+
 		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
 			column = columns[i];
 			cell = $( column.nTh ).addClass( column.sClass );
-	
+
 			if ( createHeader ) {
 				cell.appendTo( row );
 			}
-	
+
 			// 1.11 move into sorting
 			if ( oSettings.oFeatures.bSort ) {
 				cell.addClass( column.sSortingClass );
-	
+
 				if ( column.bSortable !== false ) {
 					cell
 						.attr( 'tabindex', oSettings.iTabIndex )
 						.attr( 'aria-controls', oSettings.sTableId );
-	
+
 					_fnSortAttachListener( oSettings, column.nTh, i );
 				}
 			}
-	
+
 			if ( column.sTitle != cell[0].innerHTML ) {
 				cell.html( column.sTitle );
 			}
-	
+
 			_fnRenderer( oSettings, 'header' )(
 				oSettings, cell, column, classes
 			);
 		}
-	
+
 		if ( createHeader ) {
 			_fnDetectHeader( oSettings.aoHeader, thead );
 		}
-		
+
 		/* ARIA role for the rows */
 	 	$(thead).find('>tr').attr('role', 'row');
-	
+
 		/* Deal with the footer - add classes if required */
 		$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );
 		$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );
-	
+
 		// Cache the footer cells. Note that we only take the cells from the first
 		// row in the footer. If there is more than one row the user wants to
@@ -62923,9 +62923,9 @@
 		if ( tfoot !== null ) {
 			var cells = oSettings.aoFooter[0];
-	
+
 			for ( i=0, ien=cells.length ; i<ien ; i++ ) {
 				column = columns[i];
 				column.nTf = cells[i].cell;
-	
+
 				if ( column.sClass ) {
 					$(column.nTf).addClass( column.sClass );
@@ -62934,6 +62934,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Draw the header (or footer) element based on the column visibility states. The
@@ -62956,15 +62956,15 @@
 		var iColumns = oSettings.aoColumns.length;
 		var iRowspan, iColspan;
-	
+
 		if ( ! aoSource )
 		{
 			return;
 		}
-	
+
 		if (  bIncludeHidden === undefined )
 		{
 			bIncludeHidden = false;
 		}
-	
+
 		/* Make a copy of the master layout array, but without the visible columns in it */
 		for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
@@ -62972,5 +62972,5 @@
 			aoLocal[i] = aoSource[i].slice();
 			aoLocal[i].nTr = aoSource[i].nTr;
-	
+
 			/* Remove any columns which are currently hidden */
 			for ( j=iColumns-1 ; j>=0 ; j-- )
@@ -62981,13 +62981,13 @@
 				}
 			}
-	
+
 			/* Prep the applied array - it needs an element for each row */
 			aApplied.push( [] );
 		}
-	
+
 		for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
 		{
 			nLocalTr = aoLocal[i].nTr;
-	
+
 			/* All cells are going to be replaced, so empty out the row */
 			if ( nLocalTr )
@@ -62998,10 +62998,10 @@
 				}
 			}
-	
+
 			for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
 			{
 				iRowspan = 1;
 				iColspan = 1;
-	
+
 				/* Check to see if there is already a cell (row/colspan) covering our target
 				 * insert point. If there is, then there is nothing to do.
@@ -63011,5 +63011,5 @@
 					nLocalTr.appendChild( aoLocal[i][j].cell );
 					aApplied[i][j] = 1;
-	
+
 					/* Expand the cell to cover as many rows as needed */
 					while ( aoLocal[i+iRowspan] !== undefined &&
@@ -63019,5 +63019,5 @@
 						iRowspan++;
 					}
-	
+
 					/* Expand the cell to cover as many columns as needed */
 					while ( aoLocal[i][j+iColspan] !== undefined &&
@@ -63031,5 +63031,5 @@
 						iColspan++;
 					}
-	
+
 					/* Do the actual expansion in the DOM */
 					$(aoLocal[i][j].cell)
@@ -63040,6 +63040,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Insert the required TR nodes into the table for display
@@ -63056,5 +63056,5 @@
 			return;
 		}
-	
+
 		var i, iLen, n;
 		var anRows = [];
@@ -63067,7 +63067,7 @@
 		var bServerSide = _fnDataSource( oSettings ) == 'ssp';
 		var aiDisplay = oSettings.aiDisplay;
-	
+
 		oSettings.bDrawing = true;
-	
+
 		/* Check and see if we have an initial draw position from state saving */
 		if ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )
@@ -63078,11 +63078,11 @@
 					0 :
 					iInitDisplayStart;
-	
+
 			oSettings.iInitDisplayStart = -1;
 		}
-	
+
 		var iDisplayStart = oSettings._iDisplayStart;
 		var iDisplayEnd = oSettings.fnDisplayEnd();
-	
+
 		/* Server-side processing draw intercept */
 		if ( oSettings.bDeferLoading )
@@ -63100,10 +63100,10 @@
 			return;
 		}
-	
+
 		if ( aiDisplay.length !== 0 )
 		{
 			var iStart = bServerSide ? 0 : iDisplayStart;
 			var iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;
-	
+
 			for ( var j=iStart ; j<iEnd ; j++ )
 			{
@@ -63114,7 +63114,7 @@
 					_fnCreateTr( oSettings, iDataIndex );
 				}
-	
+
 				var nRow = aoData.nTr;
-	
+
 				/* Remove the old striping classes and then add the new one */
 				if ( iStripes !== 0 )
@@ -63127,5 +63127,5 @@
 					}
 				}
-	
+
 				// Row callback functions - might want to manipulate the row
 				// iRowCount and j are not currently documented. Are they at all
@@ -63133,5 +63133,5 @@
 				_fnCallbackFire( oSettings, 'aoRowCallback', null,
 					[nRow, aoData._aData, iRowCount, j, iDataIndex] );
-	
+
 				anRows.push( nRow );
 				iRowCount++;
@@ -63150,5 +63150,5 @@
 				sZero = oLang.sEmptyTable;
 			}
-	
+
 			anRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )
 				.append( $('<td />', {
@@ -63158,20 +63158,20 @@
 				} ).html( sZero ) )[0];
 		}
-	
+
 		/* Header and footer callbacks */
 		_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],
 			_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-	
+
 		_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],
 			_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-	
+
 		var body = $(oSettings.nTBody);
-	
+
 		body.children().detach();
 		body.append( $(anRows) );
-	
+
 		/* Call all required callback functions for the end of a draw */
 		_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-	
+
 		/* Draw is complete, sorting and filtering must be as well */
 		oSettings.bSorted = false;
@@ -63179,6 +63179,6 @@
 		oSettings.bDrawing = false;
 	}
-	
-	
+
+
 	/**
 	 * Redraw the table - taking account of the various features which are enabled
@@ -63194,9 +63194,9 @@
 			sort     = features.bSort,
 			filter   = features.bFilter;
-	
+
 		if ( sort ) {
 			_fnSort( settings );
 		}
-	
+
 		if ( filter ) {
 			_fnFilterComplete( settings, settings.oPreviousSearch );
@@ -63206,19 +63206,19 @@
 			settings.aiDisplay = settings.aiDisplayMaster.slice();
 		}
-	
+
 		if ( holdPosition !== true ) {
 			settings._iDisplayStart = 0;
 		}
-	
+
 		// Let any modules know about the draw hold position state (used by
 		// scrolling internally)
 		settings._drawHold = holdPosition;
-	
+
 		_fnDraw( settings );
-	
+
 		settings._drawHold = false;
 	}
-	
-	
+
+
 	/**
 	 * Add the options to the page HTML for the table
@@ -63232,5 +63232,5 @@
 		var holding = $('<div/>').insertBefore( table ); // Holding element for speed
 		var features = oSettings.oFeatures;
-	
+
 		// All DataTables are wrapped in a div
 		var insert = $('<div/>', {
@@ -63238,9 +63238,9 @@
 			'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)
 		} );
-	
+
 		oSettings.nHolding = holding[0];
 		oSettings.nTableWrapper = insert[0];
 		oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-	
+
 		/* Loop over the user set positioning and place the elements as needed */
 		var aDom = oSettings.sDom.split('');
@@ -63250,10 +63250,10 @@
 			featureNode = null;
 			cOption = aDom[i];
-	
+
 			if ( cOption == '<' )
 			{
 				/* New container div */
 				nNewNode = $('<div/>')[0];
-	
+
 				/* Check to see if we should append an id and/or a class name to the container */
 				cNext = aDom[i+1];
@@ -63267,5 +63267,5 @@
 						j++;
 					}
-	
+
 					/* Replace jQuery UI constants @todo depreciated */
 					if ( sAttr == "H" )
@@ -63277,5 +63277,5 @@
 						sAttr = classes.sJUIFooter;
 					}
-	
+
 					/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
 					 * breaks the string into parts and applies them as needed
@@ -63295,8 +63295,8 @@
 						nNewNode.className = sAttr;
 					}
-	
+
 					i += j; /* Move along the position array */
 				}
-	
+
 				insert.append( nNewNode );
 				insert = $(nNewNode);
@@ -63351,26 +63351,26 @@
 				}
 			}
-	
+
 			/* Add to the 2D features array */
 			if ( featureNode )
 			{
 				var aanFeatures = oSettings.aanFeatures;
-	
+
 				if ( ! aanFeatures[cOption] )
 				{
 					aanFeatures[cOption] = [];
 				}
-	
+
 				aanFeatures[cOption].push( featureNode );
 				insert.append( featureNode );
 			}
 		}
-	
+
 		/* Built our DOM structure - replace the holding div with what we want */
 		holding.replaceWith( insert );
 		oSettings.nHolding = null;
 	}
-	
-	
+
+
 	/**
 	 * Use the DOM source to create up an array of header cells. The idea here is to
@@ -63395,7 +63395,7 @@
 			return j;
 		};
-	
+
 		aLayout.splice( 0, aLayout.length );
-	
+
 		/* We know how many rows there are in the layout - so prep it */
 		for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
@@ -63403,5 +63403,5 @@
 			aLayout.push( [] );
 		}
-	
+
 		/* Calculate a layout array */
 		for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
@@ -63409,5 +63409,5 @@
 			nTr = nTrs[i];
 			iColumn = 0;
-	
+
 			/* For every cell in the row... */
 			nCell = nTr.firstChild;
@@ -63421,13 +63421,13 @@
 					iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
 					iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-	
+
 					/* There might be colspan cells already in this row, so shift our target
 					 * accordingly
 					 */
 					iColShifted = fnShiftCol( aLayout, i, iColumn );
-	
+
 					/* Cache calculation for unique columns */
 					bUnique = iColspan === 1 ? true : false;
-	
+
 					/* If there is col / rowspan, copy the information into the layout grid */
 					for ( l=0 ; l<iColspan ; l++ )
@@ -63447,6 +63447,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Get an array of unique th elements, one for each column
@@ -63469,5 +63469,5 @@
 			}
 		}
-	
+
 		for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
 		{
@@ -63481,8 +63481,8 @@
 			}
 		}
-	
+
 		return aReturn;
 	}
-	
+
 	/**
 	 * Create an Ajax call based on the table's settings, taking into account that
@@ -63498,5 +63498,5 @@
 		// Compatibility with 1.9-, allow fnServerData and event to manipulate
 		_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );
-	
+
 		// Convert to object based for 1.10+ if using the old array scheme which can
 		// come from server-side processing or serverParams
@@ -63504,12 +63504,12 @@
 			var tmp = {};
 			var rbracket = /(.*?)\[\]$/;
-	
+
 			$.each( data, function (key, val) {
 				var match = val.name.match(rbracket);
-	
+
 				if ( match ) {
 					// Support for arrays
 					var name = match[0];
-	
+
 					if ( ! tmp[ name ] ) {
 						tmp[ name ] = [];
@@ -63523,5 +63523,5 @@
 			data = tmp;
 		}
-	
+
 		var ajaxData;
 		var ajax = oSettings.ajax;
@@ -63531,23 +63531,23 @@
 			fn( json );
 		};
-	
+
 		if ( $.isPlainObject( ajax ) && ajax.data )
 		{
 			ajaxData = ajax.data;
-	
+
 			var newData = typeof ajaxData === 'function' ?
 				ajaxData( data, oSettings ) :  // fn can manipulate data or return
 				ajaxData;                      // an object object or array to merge
-	
+
 			// If the function returned something, use that alone
 			data = typeof ajaxData === 'function' && newData ?
 				newData :
 				$.extend( true, data, newData );
-	
+
 			// Remove the data property as we've resolved it already and don't want
 			// jQuery to do it again (it is restored at the end of the function)
 			delete ajax.data;
 		}
-	
+
 		var baseAjax = {
 			"data": data,
@@ -63557,5 +63557,5 @@
 					_fnLog( oSettings, 0, error );
 				}
-	
+
 				oSettings.json = json;
 				callback( json );
@@ -63566,5 +63566,5 @@
 			"error": function (xhr, error, thrown) {
 				var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );
-	
+
 				if ( $.inArray( true, ret ) === -1 ) {
 					if ( error == "parsererror" ) {
@@ -63575,15 +63575,15 @@
 					}
 				}
-	
+
 				_fnProcessingDisplay( oSettings, false );
 			}
 		};
-	
+
 		// Store the data submitted for the API
 		oSettings.oAjaxData = data;
-	
+
 		// Allow plug-ins and external processes to modify the data
 		_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );
-	
+
 		if ( oSettings.fnServerData )
 		{
@@ -63614,11 +63614,11 @@
 			// Object to extend the base settings
 			oSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );
-	
+
 			// Restore for next time around
 			ajax.data = ajaxData;
 		}
 	}
-	
-	
+
+
 	/**
 	 * Update the table using an Ajax call
@@ -63632,5 +63632,5 @@
 			settings.iDraw++;
 			_fnProcessingDisplay( settings, true );
-	
+
 			_fnBuildAjax(
 				settings,
@@ -63640,11 +63640,11 @@
 				}
 			);
-	
+
 			return false;
 		}
 		return true;
 	}
-	
-	
+
+
 	/**
 	 * Build up the parameters in an object needed for a server-side processing
@@ -63672,9 +63672,9 @@
 				settings._iDisplayLength :
 				-1;
-	
+
 		var param = function ( name, value ) {
 			data.push( { 'name': name, 'value': value } );
 		};
-	
+
 		// DataTables 1.9- compatible method
 		param( 'sEcho',          settings.iDraw );
@@ -63683,5 +63683,5 @@
 		param( 'iDisplayStart',  displayStart );
 		param( 'iDisplayLength', displayLength );
-	
+
 		// DataTables 1.10+ method
 		var d = {
@@ -63696,10 +63696,10 @@
 			}
 		};
-	
+
 		for ( i=0 ; i<columnCount ; i++ ) {
 			column = columns[i];
 			columnSearch = preColSearch[i];
 			dataProp = typeof column.mData=="function" ? 'function' : column.mData ;
-	
+
 			d.columns.push( {
 				data:       dataProp,
@@ -63712,7 +63712,7 @@
 				}
 			} );
-	
+
 			param( "mDataProp_"+i, dataProp );
-	
+
 			if ( features.bFilter ) {
 				param( 'sSearch_'+i,     columnSearch.sSearch );
@@ -63720,26 +63720,26 @@
 				param( 'bSearchable_'+i, column.bSearchable );
 			}
-	
+
 			if ( features.bSort ) {
 				param( 'bSortable_'+i, column.bSortable );
 			}
 		}
-	
+
 		if ( features.bFilter ) {
 			param( 'sSearch', preSearch.sSearch );
 			param( 'bRegex', preSearch.bRegex );
 		}
-	
+
 		if ( features.bSort ) {
 			$.each( sort, function ( i, val ) {
 				d.order.push( { column: val.col, dir: val.dir } );
-	
+
 				param( 'iSortCol_'+i, val.col );
 				param( 'sSortDir_'+i, val.dir );
 			} );
-	
+
 			param( 'iSortingCols', sort.length );
 		}
-	
+
 		// If the legacy.ajax parameter is null, then we automatically decide which
 		// form to use, based on sAjaxSource
@@ -63748,11 +63748,11 @@
 			return settings.sAjaxSource ? data : d;
 		}
-	
+
 		// Otherwise, if legacy has been specified then we use that to decide on the
 		// form
 		return legacy ? data : d;
 	}
-	
-	
+
+
 	/**
 	 * Data the data from the server (nuking the old) and redraw the table
@@ -63773,10 +63773,10 @@
 			return json[old] !== undefined ? json[old] : json[modern];
 		};
-	
+
 		var data = _fnAjaxDataSrc( settings, json );
 		var draw            = compat( 'sEcho',                'draw' );
 		var recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );
 		var recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );
-	
+
 		if ( draw ) {
 			// Protect against out of sequence returns
@@ -63786,26 +63786,26 @@
 			settings.iDraw = draw * 1;
 		}
-	
+
 		_fnClearTable( settings );
 		settings._iRecordsTotal   = parseInt(recordsTotal, 10);
 		settings._iRecordsDisplay = parseInt(recordsFiltered, 10);
-	
+
 		for ( var i=0, ien=data.length ; i<ien ; i++ ) {
 			_fnAddData( settings, data[i] );
 		}
 		settings.aiDisplay = settings.aiDisplayMaster.slice();
-	
+
 		settings.bAjaxDataGet = false;
 		_fnDraw( settings );
-	
+
 		if ( ! settings._bInitComplete ) {
 			_fnInitComplete( settings, json );
 		}
-	
+
 		settings.bAjaxDataGet = true;
 		_fnProcessingDisplay( settings, false );
 	}
-	
-	
+
+
 	/**
 	 * Get the data from the JSON data source to use for drawing a table. Using
@@ -63821,5 +63821,5 @@
 			oSettings.ajax.dataSrc :
 			oSettings.sAjaxDataProp; // Compatibility with 1.9-.
-	
+
 		// Compatibility with 1.9-. In order to read from aaData, check if the
 		// default has been changed, if not, check for aaData
@@ -63827,10 +63827,10 @@
 			return json.aaData || json[dataSrc];
 		}
-	
+
 		return dataSrc !== "" ?
 			_fnGetObjectDataFn( dataSrc )( json ) :
 			json;
 	}
-	
+
 	/**
 	 * Generate the node required for filtering text
@@ -63847,10 +63847,10 @@
 		var features = settings.aanFeatures;
 		var input = '<input type="search" class="'+classes.sFilterInput+'"/>';
-	
+
 		var str = language.sSearch;
 		str = str.match(/_INPUT_/) ?
 			str.replace('_INPUT_', input) :
 			str+input;
-	
+
 		var filter = $('<div/>', {
 				'id': ! features.f ? tableId+'_filter' : null,
@@ -63858,10 +63858,10 @@
 			} )
 			.append( $('<label/>' ).append( str ) );
-	
+
 		var searchFn = function() {
 			/* Update all other filter input elements for the new display */
 			var n = features.f;
 			var val = !this.value ? "" : this.value; // mental IE8 fix :-(
-	
+
 			/* Now do the filter */
 			if ( val != previousSearch.sSearch ) {
@@ -63872,5 +63872,5 @@
 					"bCaseInsensitive": previousSearch.bCaseInsensitive
 				} );
-	
+
 				// Need to redraw, without resorting
 				settings._iDisplayStart = 0;
@@ -63878,5 +63878,5 @@
 			}
 		};
-	
+
 		var searchDelay = settings.searchDelay !== null ?
 			settings.searchDelay :
@@ -63884,5 +63884,5 @@
 				400 :
 				0;
-	
+
 		var jqFilter = $('input', filter)
 			.val( previousSearch.sSearch )
@@ -63901,5 +63901,5 @@
 			} )
 			.attr('aria-controls', tableId);
-	
+
 		// Update the input elements whenever the table is filtered
 		$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {
@@ -63915,9 +63915,9 @@
 			}
 		} );
-	
+
 		return filter[0];
 	}
-	
-	
+
+
 	/**
 	 * Filter the table using both the global filter and column based filtering
@@ -63942,9 +63942,9 @@
 			return o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;
 		};
-	
+
 		// Resolve any column types that are unknown due to addition or invalidation
 		// @todo As per sort - can this be moved into an event handler?
 		_fnColumnTypes( oSettings );
-	
+
 		/* In server-side processing all filtering is done by the server, so no point hanging around here */
 		if ( _fnDataSource( oSettings ) != 'ssp' )
@@ -63953,5 +63953,5 @@
 			_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );
 			fnSaveFilter( oInput );
-	
+
 			/* Now do the individual column filter */
 			for ( var i=0 ; i<aoPrevSearch.length ; i++ )
@@ -63960,5 +63960,5 @@
 					aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
 			}
-	
+
 			/* Custom filtering */
 			_fnFilterCustom( oSettings );
@@ -63968,11 +63968,11 @@
 			fnSaveFilter( oInput );
 		}
-	
+
 		/* Tell the draw function we have been filtering */
 		oSettings.bFiltered = true;
 		_fnCallbackFire( oSettings, null, 'search', [oSettings] );
 	}
-	
-	
+
+
 	/**
 	 * Apply custom filtering functions
@@ -63985,18 +63985,18 @@
 		var displayRows = settings.aiDisplay;
 		var row, rowIdx;
-	
+
 		for ( var i=0, ien=filters.length ; i<ien ; i++ ) {
 			var rows = [];
-	
+
 			// Loop over each row and see if it should be included
 			for ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {
 				rowIdx = displayRows[ j ];
 				row = settings.aoData[ rowIdx ];
-	
+
 				if ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {
 					rows.push( rowIdx );
 				}
 			}
-	
+
 			// So the array reference doesn't break set the results into the
 			// existing array
@@ -64005,6 +64005,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Filter the table on a per-column basis
@@ -64022,22 +64022,22 @@
 			return;
 		}
-	
+
 		var data;
 		var out = [];
 		var display = settings.aiDisplay;
 		var rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );
-	
+
 		for ( var i=0 ; i<display.length ; i++ ) {
 			data = settings.aoData[ display[i] ]._aFilterData[ colIdx ];
-	
+
 			if ( rpSearch.test( data ) ) {
 				out.push( display[i] );
 			}
 		}
-	
+
 		settings.aiDisplay = out;
 	}
-	
-	
+
+
 	/**
 	 * Filter the data table based on user input and draw the table
@@ -64057,13 +64057,13 @@
 		var display, invalidated, i;
 		var filtered = [];
-	
+
 		// Need to take account of custom filtering functions - always filter
 		if ( DataTable.ext.search.length !== 0 ) {
 			force = true;
 		}
-	
+
 		// Check if any of the rows were invalidated
 		invalidated = _fnFilterData( settings );
-	
+
 		// If the input is blank - we just want the full data set
 		if ( input.length <= 0 ) {
@@ -64082,8 +64082,8 @@
 				settings.aiDisplay = displayMaster.slice();
 			}
-	
+
 			// Search the display array
 			display = settings.aiDisplay;
-	
+
 			for ( i=0 ; i<display.length ; i++ ) {
 				if ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {
@@ -64091,10 +64091,10 @@
 				}
 			}
-	
+
 			settings.aiDisplay = filtered;
 		}
 	}
-	
-	
+
+
 	/**
 	 * Build a regular expression object suitable for searching a table
@@ -64111,5 +64111,5 @@
 			search :
 			_fnEscapeRegex( search );
-		
+
 		if ( smart ) {
 			/* For smart filtering we want to allow the search to work regardless of
@@ -64117,5 +64117,5 @@
 			 * order is important - a la google. So this is what we want to
 			 * generate:
-			 * 
+			 *
 			 * ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
 			 */
@@ -64125,15 +64125,15 @@
 					word = m ? m[1] : word;
 				}
-	
+
 				return word.replace('"', '');
 			} );
-	
+
 			search = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';
 		}
-	
+
 		return new RegExp( search, caseInsensitive ? 'i' : '' );
 	}
-	
-	
+
+
 	/**
 	 * Escape a string such that it can be used in a regular expression
@@ -64143,8 +64143,8 @@
 	 */
 	var _fnEscapeRegex = DataTable.util.escapeRegex;
-	
+
 	var __filter_div = $('<div>')[0];
 	var __filter_div_textContent = __filter_div.textContent !== undefined;
-	
+
 	// Update the filtering data for each row if needed (by invalidation or first run)
 	function _fnFilterData ( settings )
@@ -64155,21 +64155,21 @@
 		var fomatters = DataTable.ext.type.search;
 		var wasInvalidated = false;
-	
+
 		for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
 			row = settings.aoData[i];
-	
+
 			if ( ! row._aFilterData ) {
 				filterData = [];
-	
+
 				for ( j=0, jen=columns.length ; j<jen ; j++ ) {
 					column = columns[j];
-	
+
 					if ( column.bSearchable ) {
 						cellData = _fnGetCellData( settings, i, j, 'filter' );
-	
+
 						if ( fomatters[ column.sType ] ) {
 							cellData = fomatters[ column.sType ]( cellData );
 						}
-	
+
 						// Search in DataTables 1.10 is string based. In 1.11 this
 						// should be altered to also allow strict type checking.
@@ -64177,5 +64177,5 @@
 							cellData = '';
 						}
-	
+
 						if ( typeof cellData !== 'string' && cellData.toString ) {
 							cellData = cellData.toString();
@@ -64185,5 +64185,5 @@
 						cellData = '';
 					}
-	
+
 					// If it looks like there is an HTML entity in the string,
 					// attempt to decode it so sorting works as expected. Note that
@@ -64196,12 +64196,12 @@
 							__filter_div.innerText;
 					}
-	
+
 					if ( cellData.replace ) {
 						cellData = cellData.replace(/[\r\n\u2028]/g, '');
 					}
-	
+
 					filterData.push( cellData );
 				}
-	
+
 				row._aFilterData = filterData;
 				row._sFilterRow = filterData.join('  ');
@@ -64209,9 +64209,9 @@
 			}
 		}
-	
+
 		return wasInvalidated;
 	}
-	
-	
+
+
 	/**
 	 * Convert from the internal Hungarian notation to camelCase for external
@@ -64230,7 +64230,7 @@
 		};
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Convert from camelCase notation to the internal Hungarian. We could use the
@@ -64249,5 +64249,5 @@
 		};
 	}
-	
+
 	/**
 	 * Generate the node required for the info display
@@ -64265,5 +64265,5 @@
 				'id': ! nodes ? tid+'_info' : null
 			} );
-	
+
 		if ( ! nodes ) {
 			// Update display on each draw
@@ -64272,17 +64272,17 @@
 				"sName": "information"
 			} );
-	
+
 			n
 				.attr( 'role', 'status' )
 				.attr( 'aria-live', 'polite' );
-	
+
 			// Table is described by our info div
 			$(settings.nTable).attr( 'aria-describedby', tid+'_info' );
 		}
-	
+
 		return n[0];
 	}
-	
-	
+
+
 	/**
 	 * Update the information elements in the display
@@ -64297,5 +64297,5 @@
 			return;
 		}
-	
+
 		var
 			lang  = settings.oLanguage,
@@ -64307,14 +64307,14 @@
 				lang.sInfo :
 				lang.sInfoEmpty;
-	
+
 		if ( total !== max ) {
 			/* Record set after filtering */
 			out += ' ' + lang.sInfoFiltered;
 		}
-	
+
 		// Convert the macros
 		out += lang.sInfoPostFix;
 		out = _fnInfoMacros( settings, out );
-	
+
 		var callback = lang.fnInfoCallback;
 		if ( callback !== null ) {
@@ -64323,9 +64323,9 @@
 			);
 		}
-	
+
 		$(nodes).html( out );
 	}
-	
-	
+
+
 	function _fnInfoMacros ( settings, str )
 	{
@@ -64338,5 +64338,5 @@
 			vis        = settings.fnRecordsDisplay(),
 			all        = len === -1;
-	
+
 		return str.
 			replace(/_START_/g, formatter.call( settings, start ) ).
@@ -64347,7 +64347,7 @@
 			replace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Draw the table for the first time, adding all required features
@@ -64361,5 +64361,5 @@
 		var features = settings.oFeatures;
 		var deferLoading = settings.bDeferLoading; // value modified by the draw
-	
+
 		/* Ensure that the table data is fully initialised */
 		if ( ! settings.bInitialised ) {
@@ -64367,31 +64367,31 @@
 			return;
 		}
-	
+
 		/* Show the display HTML options */
 		_fnAddOptionsHtml( settings );
-	
+
 		/* Build and draw the header / footer for the table */
 		_fnBuildHead( settings );
 		_fnDrawHead( settings, settings.aoHeader );
 		_fnDrawHead( settings, settings.aoFooter );
-	
+
 		/* Okay to show that something is going on now */
 		_fnProcessingDisplay( settings, true );
-	
+
 		/* Calculate sizes for columns */
 		if ( features.bAutoWidth ) {
 			_fnCalculateColumnWidths( settings );
 		}
-	
+
 		for ( i=0, iLen=columns.length ; i<iLen ; i++ ) {
 			column = columns[i];
-	
+
 			if ( column.sWidth ) {
 				column.nTh.style.width = _fnStringToCss( column.sWidth );
 			}
 		}
-	
+
 		_fnCallbackFire( settings, null, 'preInit', [settings] );
-	
+
 		// If there is default sorting required - let's do it. The sort function
 		// will do the drawing for us. Otherwise we draw the table regardless of the
@@ -64399,5 +64399,5 @@
 		// data (show 'loading' message possibly)
 		_fnReDraw( settings );
-	
+
 		// Server-side processing init complete is done by _fnAjaxUpdateDraw
 		var dataSrc = _fnDataSource( settings );
@@ -64407,17 +64407,17 @@
 				_fnBuildAjax( settings, [], function(json) {
 					var aData = _fnAjaxDataSrc( settings, json );
-	
+
 					// Got the data - add it to the table
 					for ( i=0 ; i<aData.length ; i++ ) {
 						_fnAddData( settings, aData[i] );
 					}
-	
+
 					// Reset the init display for cookie saving. We've already done
 					// a filter, and therefore cleared it before. So we need to make
 					// it appear 'fresh'
 					settings.iInitDisplayStart = iAjaxStart;
-	
+
 					_fnReDraw( settings );
-	
+
 					_fnProcessingDisplay( settings, false );
 					_fnInitComplete( settings, json );
@@ -64430,6 +64430,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Draw the table for the first time, adding all required features
@@ -64442,5 +64442,5 @@
 	{
 		settings._bInitComplete = true;
-	
+
 		// When data was added after the initialisation (data or Ajax) we need to
 		// calculate the column sizing
@@ -64448,22 +64448,22 @@
 			_fnAdjustColumnSizing( settings );
 		}
-	
+
 		_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );
 		_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );
 	}
-	
-	
+
+
 	function _fnLengthChange ( settings, val )
 	{
 		var len = parseInt( val, 10 );
 		settings._iDisplayLength = len;
-	
+
 		_fnLengthOverflow( settings );
-	
+
 		// Fire length change event
 		_fnCallbackFire( settings, null, 'length', [settings, len] );
 	}
-	
-	
+
+
 	/**
 	 * Generate the node required for user display length changing
@@ -64481,5 +64481,5 @@
 			lengths  = d2 ? menu[0] : menu,
 			language = d2 ? menu[1] : menu;
-	
+
 		var select = $('<select/>', {
 			'name':          tableId+'_length',
@@ -64487,5 +64487,5 @@
 			'class':         classes.sLengthSelect
 		} );
-	
+
 		for ( var i=0, ien=lengths.length ; i<ien ; i++ ) {
 			select[0][ i ] = new Option(
@@ -64496,14 +64496,14 @@
 			);
 		}
-	
+
 		var div = $('<div><label/></div>').addClass( classes.sLength );
 		if ( ! settings.aanFeatures.l ) {
 			div[0].id = tableId+'_length';
 		}
-	
+
 		div.children().append(
 			settings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )
 		);
-	
+
 		// Can't use `select` variable as user might provide their own and the
 		// reference is broken by the use of outerHTML
@@ -64514,5 +64514,5 @@
 				_fnDraw( settings );
 			} );
-	
+
 		// Update node value whenever anything changes the table's length
 		$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {
@@ -64521,15 +64521,15 @@
 			}
 		} );
-	
+
 		return div[0];
 	}
-	
-	
-	
+
+
+
 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 	 * Note that most of the paging logic is done in
 	 * DataTable.ext.pager
 	 */
-	
+
 	/**
 	 * Generate the node required for default pagination
@@ -64549,14 +64549,14 @@
 			node = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],
 			features = settings.aanFeatures;
-	
+
 		if ( ! modern ) {
 			plugin.fnInit( settings, node, redraw );
 		}
-	
+
 		/* Add a draw callback for the pagination on first instance, to update the paging display */
 		if ( ! features.p )
 		{
 			node.id = settings.sTableId+'_paginate';
-	
+
 			settings.aoDrawCallback.push( {
 				"fn": function( settings ) {
@@ -64571,5 +64571,5 @@
 							buttons = plugin(page, pages),
 							i, ien;
-	
+
 						for ( i=0, ien=features.p.length ; i<ien ; i++ ) {
 							_fnRenderer( settings, 'pageButton' )(
@@ -64585,9 +64585,9 @@
 			} );
 		}
-	
+
 		return node;
 	}
-	
-	
+
+
 	/**
 	 * Alter the display settings to change the page
@@ -64605,5 +64605,5 @@
 			len       = settings._iDisplayLength,
 			records   = settings.fnRecordsDisplay();
-	
+
 		if ( records === 0 || len === -1 )
 		{
@@ -64613,5 +64613,5 @@
 		{
 			start = action * len;
-	
+
 			if ( start > records )
 			{
@@ -64628,5 +64628,5 @@
 				start - len :
 				0;
-	
+
 			if ( start < 0 )
 			{
@@ -64649,21 +64649,21 @@
 			_fnLog( settings, 0, "Unknown paging action: "+action, 5 );
 		}
-	
+
 		var changed = settings._iDisplayStart !== start;
 		settings._iDisplayStart = start;
-	
+
 		if ( changed ) {
 			_fnCallbackFire( settings, null, 'page', [settings] );
-	
+
 			if ( redraw ) {
 				_fnDraw( settings );
 			}
 		}
-	
+
 		return changed;
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Generate the node required for the processing node
@@ -64681,6 +64681,6 @@
 			.insertBefore( settings.nTable )[0];
 	}
-	
-	
+
+
 	/**
 	 * Display or hide the processing indicator
@@ -64694,8 +64694,8 @@
 			$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );
 		}
-	
+
 		_fnCallbackFire( settings, null, 'processing', [settings, show] );
 	}
-	
+
 	/**
 	 * Add any control elements for the table - specifically scrolling
@@ -64707,15 +64707,15 @@
 	{
 		var table = $(settings.nTable);
-	
+
 		// Add the ARIA grid role to the table
 		table.attr( 'role', 'grid' );
-	
+
 		// Scrolling from here on in
 		var scroll = settings.oScroll;
-	
+
 		if ( scroll.sX === '' && scroll.sY === '' ) {
 			return settings.nTable;
 		}
-	
+
 		var scrollX = scroll.sX;
 		var scrollY = scroll.sY;
@@ -64730,9 +64730,9 @@
 			return !s ? null : _fnStringToCss( s );
 		};
-	
+
 		if ( ! footer.length ) {
 			footer = null;
 		}
-	
+
 		/*
 		 * The HTML structure that we want to generate in this function is:
@@ -64786,5 +64786,5 @@
 					.append( table )
 			);
-	
+
 		if ( footer ) {
 			scroller.append(
@@ -64809,17 +64809,17 @@
 			);
 		}
-	
+
 		var children = scroller.children();
 		var scrollHead = children[0];
 		var scrollBody = children[1];
 		var scrollFoot = footer ? children[2] : null;
-	
+
 		// When the body is scrolled, then we also want to scroll the headers
 		if ( scrollX ) {
 			$(scrollBody).on( 'scroll.DT', function (e) {
 				var scrollLeft = this.scrollLeft;
-	
+
 				scrollHead.scrollLeft = scrollLeft;
-	
+
 				if ( footer ) {
 					scrollFoot.scrollLeft = scrollLeft;
@@ -64827,14 +64827,14 @@
 			} );
 		}
-	
+
 		$(scrollBody).css(
-			scrollY && scroll.bCollapse ? 'max-height' : 'height', 
+			scrollY && scroll.bCollapse ? 'max-height' : 'height',
 			scrollY
 		);
-	
+
 		settings.nScrollHead = scrollHead;
 		settings.nScrollBody = scrollBody;
 		settings.nScrollFoot = scrollFoot;
-	
+
 		// On redraw - align columns
 		settings.aoDrawCallback.push( {
@@ -64842,10 +64842,10 @@
 			"sName": "scrolling"
 		} );
-	
+
 		return scroller[0];
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Update the header, footer and body tables for resizing - i.e. column
@@ -64905,10 +64905,10 @@
 				style.height = 0;
 			};
-	
+
 		// If the scrollbar visibility has changed from the last draw, we need to
 		// adjust the column sizes as the table width will have changed to account
 		// for the scrollbar
 		var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;
-		
+
 		if ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {
 			settings.scrollBarVis = scrollBarVis;
@@ -64919,12 +64919,12 @@
 			settings.scrollBarVis = scrollBarVis;
 		}
-	
+
 		/*
 		 * 1. Re-create the table inside the scrolling div
 		 */
-	
+
 		// Remove the old minimised thead and tfoot elements in the inner table
 		table.children('thead, tfoot').remove();
-	
+
 		if ( footer ) {
 			footerCopy = footer.clone().prependTo( table );
@@ -64932,5 +64932,5 @@
 			footerSrcEls = footerCopy.find('tr');
 		}
-	
+
 		// Clone the current header and footer elements and then place it into the inner table
 		headerCopy = header.clone().prependTo( table );
@@ -64938,10 +64938,10 @@
 		headerSrcEls = headerCopy.find('tr');
 		headerCopy.find('th, td').removeAttr('tabindex');
-	
-	
+
+
 		/*
 		 * 2. Take live measurements from the DOM - do not alter the DOM itself!
 		 */
-	
+
 		// Remove old sizing and apply the calculated column widths
 		// Get the unique column headers in the newly created (cloned) header. We want to apply the
@@ -64952,10 +64952,10 @@
 			divHeader[0].style.width = '100%';
 		}
-	
+
 		$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {
 			idx = _fnVisibleToColumnIndex( settings, i );
 			el.style.width = settings.aoColumns[idx].sWidth;
 		} );
-	
+
 		if ( footer ) {
 			_fnApplyToChildren( function(n) {
@@ -64963,5 +64963,5 @@
 			}, footerSrcEls );
 		}
-	
+
 		// Size the table as a whole
 		sanityWidth = table.outerWidth();
@@ -64969,5 +64969,5 @@
 			// No x scrolling
 			tableStyle.width = "100%";
-	
+
 			// IE7 will make the width of the table when 100% include the scrollbar
 			// - which is shouldn't. When there is a scrollbar we need to take this
@@ -64978,5 +64978,5 @@
 				tableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);
 			}
-	
+
 			// Recalculate the sanity width
 			sanityWidth = table.outerWidth();
@@ -64985,15 +64985,15 @@
 			// legacy x scroll inner has been given - use it
 			tableStyle.width = _fnStringToCss(scrollXInner);
-	
+
 			// Recalculate the sanity width
 			sanityWidth = table.outerWidth();
 		}
-	
+
 		// Hidden header should have zero height, so remove padding and borders. Then
 		// set the width based on the real headers
-	
+
 		// Apply all styles in one pass
 		_fnApplyToChildren( zeroOut, headerSrcEls );
-	
+
 		// Read all widths in next pass
 		_fnApplyToChildren( function(nSizer) {
@@ -65001,5 +65001,5 @@
 			headerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
 		}, headerSrcEls );
-	
+
 		// Apply all widths in final pass
 		_fnApplyToChildren( function(nToSize, i) {
@@ -65010,29 +65010,29 @@
 			}
 		}, headerTrgEls );
-	
+
 		$(headerSrcEls).height(0);
-	
+
 		/* Same again with the footer if we have one */
 		if ( footer )
 		{
 			_fnApplyToChildren( zeroOut, footerSrcEls );
-	
+
 			_fnApplyToChildren( function(nSizer) {
 				footerContent.push( nSizer.innerHTML );
 				footerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
 			}, footerSrcEls );
-	
+
 			_fnApplyToChildren( function(nToSize, i) {
 				nToSize.style.width = footerWidths[i];
 			}, footerTrgEls );
-	
+
 			$(footerSrcEls).height(0);
 		}
-	
-	
+
+
 		/*
 		 * 3. Apply the measurements
 		 */
-	
+
 		// "Hide" the header and footer that we used for the sizing. We need to keep
 		// the content of the cell so that the width applied to the header and body
@@ -65045,5 +65045,5 @@
 			nSizer.style.width = headerWidths[i];
 		}, headerSrcEls );
-	
+
 		if ( footer )
 		{
@@ -65055,5 +65055,5 @@
 			}, footerSrcEls );
 		}
-	
+
 		// Sanity check that the table is of a sensible width. If not then we are going to get
 		// misalignment - try to prevent this by not allowing the table to shrink below its min width
@@ -65065,5 +65065,5 @@
 					sanityWidth+barWidth :
 					sanityWidth;
-	
+
 			// IE6/7 are a law unto themselves...
 			if ( ie67 && (divBodyEl.scrollHeight >
@@ -65072,5 +65072,5 @@
 				tableStyle.width = _fnStringToCss( correction-barWidth );
 			}
-	
+
 			// And give the user a warning that we've stopped the table getting too small
 			if ( scrollX === "" || scrollXInner !== "" ) {
@@ -65082,14 +65082,14 @@
 			correction = '100%';
 		}
-	
+
 		// Apply to the container elements
 		divBodyStyle.width = _fnStringToCss( correction );
 		divHeaderStyle.width = _fnStringToCss( correction );
-	
+
 		if ( footer ) {
 			settings.nScrollFoot.style.width = _fnStringToCss( correction );
 		}
-	
-	
+
+
 		/*
 		 * 4. Clean up
@@ -65104,10 +65104,10 @@
 			}
 		}
-	
+
 		/* Finally set the width's of the header and footer tables */
 		var iOuterWidth = table.outerWidth();
 		divHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );
 		divHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );
-	
+
 		// Figure out if there are scrollbar present - if so then we need a the header and footer to
 		// provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
@@ -65115,5 +65115,5 @@
 		var padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );
 		divHeaderInnerStyle[ padding ] = bScrolling ? barWidth+"px" : "0px";
-	
+
 		if ( footer ) {
 			divFooterTable[0].style.width = _fnStringToCss( iOuterWidth );
@@ -65121,11 +65121,11 @@
 			divFooterInner[0].style[padding] = bScrolling ? barWidth+"px" : "0px";
 		}
-	
+
 		// Correct DOM ordering for colgroup - comes before the thead
 		table.children('colgroup').insertBefore( table.children('thead') );
-	
+
 		/* Adjust the position of the header in case we loose the y-scrollbar */
 		divBody.trigger('scroll');
-	
+
 		// If sorting or filtering has occurred, jump the scrolling back to the top
 		// only if we aren't holding the position
@@ -65134,7 +65134,7 @@
 		}
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Apply a given function to the display child nodes of an element array (typically
@@ -65149,9 +65149,9 @@
 		var index=0, i=0, iLen=an1.length;
 		var nNode1, nNode2;
-	
+
 		while ( i < iLen ) {
 			nNode1 = an1[i].firstChild;
 			nNode2 = an2 ? an2[i].firstChild : null;
-	
+
 			while ( nNode1 ) {
 				if ( nNode1.nodeType === 1 ) {
@@ -65162,21 +65162,21 @@
 						fn( nNode1, index );
 					}
-	
+
 					index++;
 				}
-	
+
 				nNode1 = nNode1.nextSibling;
 				nNode2 = an2 ? nNode2.nextSibling : null;
 			}
-	
+
 			i++;
 		}
 	}
-	
-	
-	
+
+
+
 	var __re_html_remove = /<.*?>/g;
-	
-	
+
+
 	/**
 	 * Calculate the width of columns for the table
@@ -65202,21 +65202,21 @@
 			browser = oSettings.oBrowser,
 			ie67 = browser.bScrollOversize;
-	
+
 		var styleWidth = table.style.width;
 		if ( styleWidth && styleWidth.indexOf('%') !== -1 ) {
 			tableWidthAttr = styleWidth;
 		}
-	
+
 		/* Convert any user input sizes into pixel sizes */
 		for ( i=0 ; i<visibleColumns.length ; i++ ) {
 			column = columns[ visibleColumns[i] ];
-	
+
 			if ( column.sWidth !== null ) {
 				column.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );
-	
+
 				userInputs = true;
 			}
 		}
-	
+
 		/* If the number of columns in the DOM equals the number that we have to
 		 * process in DataTables, then we can use the offsets that are created by
@@ -65230,5 +65230,5 @@
 			for ( i=0 ; i<columnCount ; i++ ) {
 				var colIdx = _fnVisibleToColumnIndex( oSettings, i );
-	
+
 				if ( colIdx !== null ) {
 					columns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );
@@ -65245,9 +65245,9 @@
 				.css( 'visibility', 'hidden' )
 				.removeAttr( 'id' );
-	
+
 			// Clean up the table body
 			tmpTable.find('tbody tr').remove();
 			var tr = $('<tr/>').appendTo( tmpTable.find('tbody') );
-	
+
 			// Clone the table header and footer - we can't use the header / footer
 			// from the cloned table, since if scrolling is active, the table's
@@ -65257,18 +65257,18 @@
 				.append( $(oSettings.nTHead).clone() )
 				.append( $(oSettings.nTFoot).clone() );
-	
+
 			// Remove any assigned widths from the footer (from scrolling)
 			tmpTable.find('tfoot th, tfoot td').css('width', '');
-	
+
 			// Apply custom sizing to the cloned header
 			headerCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );
-	
+
 			for ( i=0 ; i<visibleColumns.length ; i++ ) {
 				column = columns[ visibleColumns[i] ];
-	
+
 				headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?
 					_fnStringToCss( column.sWidthOrig ) :
 					'';
-	
+
 				// For scrollX we need to force the column width otherwise the
 				// browser will collapse it. If this width is smaller than the
@@ -65284,5 +65284,5 @@
 				}
 			}
-	
+
 			// Find the widest cell for each column and put it into the table
 			if ( oSettings.aoData.length ) {
@@ -65290,5 +65290,5 @@
 					columnIdx = visibleColumns[i];
 					column = columns[ columnIdx ];
-	
+
 					$( _fnGetWidestNode( oSettings, columnIdx ) )
 						.clone( false )
@@ -65297,9 +65297,9 @@
 				}
 			}
-	
+
 			// Tidy the temporary table - remove name attributes so there aren't
 			// duplicated in the dom (radio elements for example)
 			$('[name]', tmpTable).removeAttr('name');
-	
+
 			// Table has been built, attach to the document so we can work with it.
 			// A holding element is used, positioned at the top of the container
@@ -65320,6 +65320,6 @@
 				.append( tmpTable )
 				.appendTo( tableContainer );
-	
-			// When scrolling (X or Y) we want to set the width of the table as 
+
+			// When scrolling (X or Y) we want to set the width of the table as
 			// appropriate. However, when not scrolling leave the table width as it
 			// is. This results in slightly different, but I think correct behaviour
@@ -65330,5 +65330,5 @@
 				tmpTable.css( 'width', 'auto' );
 				tmpTable.removeAttr('width');
-	
+
 				// If there is no width attribute or style, then allow the table to
 				// collapse
@@ -65343,5 +65343,5 @@
 				tmpTable.width( tableWidthAttr );
 			}
-	
+
 			// Get the width of each column in the constructed table - we need to
 			// know the inner width (so it can be assigned to the other table's
@@ -65354,5 +65354,5 @@
 				var cell = $(headerCells[i]);
 				var border = cell.outerWidth() - cell.width();
-	
+
 				// Use getBounding... where possible (not IE8-) because it can give
 				// sub-pixel accuracy, which we then want to round up!
@@ -65360,19 +65360,19 @@
 					Math.ceil( headerCells[i].getBoundingClientRect().width ) :
 					cell.outerWidth();
-	
+
 				// Total is tracked to remove any sub-pixel errors as the outerWidth
 				// of the table might not equal the total given here (IE!).
 				total += bounding;
-	
+
 				// Width for each column to use
 				columns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );
 			}
-	
+
 			table.style.width = _fnStringToCss( total );
-	
+
 			// Finished with the table - ditch it
 			holder.remove();
 		}
-	
+
 		// If there is a width attr, we want to attach an event listener which
 		// allows the table sizing to automatically adjust when the window is
@@ -65382,5 +65382,5 @@
 			table.style.width = _fnStringToCss( tableWidthAttr );
 		}
-	
+
 		if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
 			var bindResize = function () {
@@ -65389,5 +65389,5 @@
 				} ) );
 			};
-	
+
 			// IE6/7 will crash if we bind a resize event handler on page load.
 			// To be removed in 1.11 which drops IE6/7 support
@@ -65398,10 +65398,10 @@
 				bindResize();
 			}
-	
+
 			oSettings._reszEvt = true;
 		}
 	}
-	
-	
+
+
 	/**
 	 * Throttle the calls to a function. Arguments and context are maintained for
@@ -65413,6 +65413,6 @@
 	 */
 	var _fnThrottle = DataTable.util.throttle;
-	
-	
+
+
 	/**
 	 * Convert a CSS unit width to pixels (e.g. 2em)
@@ -65427,16 +65427,16 @@
 			return 0;
 		}
-	
+
 		var n = $('<div/>')
 			.css( 'width', _fnStringToCss( width ) )
 			.appendTo( parent || document.body );
-	
+
 		var val = n[0].offsetWidth;
 		n.remove();
-	
+
 		return val;
 	}
-	
-	
+
+
 	/**
 	 * Get the widest node
@@ -65452,5 +65452,5 @@
 			return null;
 		}
-	
+
 		var data = settings.aoData[ idx ];
 		return ! data.nTr ? // Might not have been created when deferred rendering
@@ -65458,6 +65458,6 @@
 			data.anCells[ colIdx ];
 	}
-	
-	
+
+
 	/**
 	 * Get the maximum strlen for each data column
@@ -65470,10 +65470,10 @@
 	{
 		var s, max=-1, maxIdx = -1;
-	
+
 		for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
 			s = _fnGetCellData( settings, i, colIdx, 'display' )+'';
 			s = s.replace( __re_html_remove, '' );
 			s = s.replace( /&nbsp;/g, ' ' );
-	
+
 			if ( s.length > max ) {
 				max = s.length;
@@ -65481,9 +65481,9 @@
 			}
 		}
-	
+
 		return maxIdx;
 	}
-	
-	
+
+
 	/**
 	 * Append a CSS unit (only if required) to a string
@@ -65497,5 +65497,5 @@
 			return '0px';
 		}
-	
+
 		if ( typeof s == 'number' ) {
 			return s < 0 ?
@@ -65503,5 +65503,5 @@
 				s+'px';
 		}
-	
+
 		// Check it has a unit character already
 		return s.match(/\d$/) ?
@@ -65509,7 +65509,7 @@
 			s;
 	}
-	
-	
-	
+
+
+
 	function _fnSortFlatten ( settings )
 	{
@@ -65533,5 +65533,5 @@
 				}
 			};
-	
+
 		// Build the sort array, with pre-fix and post-fix options if they have been
 		// specified
@@ -65539,29 +65539,29 @@
 			add( fixed );
 		}
-	
+
 		if ( fixedObj && fixed.pre ) {
 			add( fixed.pre );
 		}
-	
+
 		add( settings.aaSorting );
-	
+
 		if (fixedObj && fixed.post ) {
 			add( fixed.post );
 		}
-	
+
 		for ( i=0 ; i<nestedSort.length ; i++ )
 		{
 			srcCol = nestedSort[i][0];
 			aDataSort = aoColumns[ srcCol ].aDataSort;
-	
+
 			for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
 			{
 				iCol = aDataSort[k];
 				sType = aoColumns[ iCol ].sType || 'string';
-	
+
 				if ( nestedSort[i]._idx === undefined ) {
 					nestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );
 				}
-	
+
 				aSort.push( {
 					src:       srcCol,
@@ -65574,8 +65574,8 @@
 			}
 		}
-	
+
 		return aSort;
 	}
-	
+
 	/**
 	 * Change the order of the table
@@ -65598,24 +65598,24 @@
 			displayMaster = oSettings.aiDisplayMaster,
 			aSort;
-	
+
 		// Resolve any column types that are unknown due to addition or invalidation
 		// @todo Can this be moved into a 'data-ready' handler which is called when
 		//   data is going to be used in the table?
 		_fnColumnTypes( oSettings );
-	
+
 		aSort = _fnSortFlatten( oSettings );
-	
+
 		for ( i=0, ien=aSort.length ; i<ien ; i++ ) {
 			sortCol = aSort[i];
-	
+
 			// Track if we can use the fast sort algorithm
 			if ( sortCol.formatter ) {
 				formatters++;
 			}
-	
+
 			// Load the data needed for the sort, for each cell
 			_fnSortData( oSettings, sortCol.col );
 		}
-	
+
 		/* No sorting required if server-side or no sorting array */
 		if ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )
@@ -65626,5 +65626,5 @@
 				aiOrig[ displayMaster[i] ] = i;
 			}
-	
+
 			/* Do the sort - here we want multi-column sorting based on a given data source (column)
 			 * and sorting function (from oSort) in a certain direction. It's reasonably complex to
@@ -65656,11 +65656,11 @@
 						dataA = aoData[a]._aSortData,
 						dataB = aoData[b]._aSortData;
-	
+
 					for ( k=0 ; k<len ; k++ ) {
 						sort = aSort[k];
-	
+
 						x = dataA[ sort.col ];
 						y = dataB[ sort.col ];
-	
+
 						test = x<y ? -1 : x>y ? 1 : 0;
 						if ( test !== 0 ) {
@@ -65668,5 +65668,5 @@
 						}
 					}
-	
+
 					x = aiOrig[a];
 					y = aiOrig[b];
@@ -65684,11 +65684,11 @@
 						dataA = aoData[a]._aSortData,
 						dataB = aoData[b]._aSortData;
-	
+
 					for ( k=0 ; k<len ; k++ ) {
 						sort = aSort[k];
-	
+
 						x = dataA[ sort.col ];
 						y = dataB[ sort.col ];
-	
+
 						fn = oExtSort[ sort.type+"-"+sort.dir ] || oExtSort[ "string-"+sort.dir ];
 						test = fn( x, y );
@@ -65697,5 +65697,5 @@
 						}
 					}
-	
+
 					x = aiOrig[a];
 					y = aiOrig[b];
@@ -65704,10 +65704,10 @@
 			}
 		}
-	
+
 		/* Tell the draw function that we have sorted the data */
 		oSettings.bSorted = true;
 	}
-	
-	
+
+
 	function _fnSortAria ( settings )
 	{
@@ -65717,5 +65717,5 @@
 		var aSort = _fnSortFlatten( settings );
 		var oAria = settings.oLanguage.oAria;
-	
+
 		// ARIA attributes - need to loop all columns, to update all (removing old
 		// attributes as needed)
@@ -65726,9 +65726,9 @@
 			var sTitle = col.sTitle.replace( /<.*?>/g, "" );
 			var th = col.nTh;
-	
+
 			// IE7 is throwing an error when setting these properties with jQuery's
 			// attr() and removeAttr() methods...
 			th.removeAttribute('aria-sort');
-	
+
 			/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
 			if ( col.bSortable ) {
@@ -65740,5 +65740,5 @@
 					nextSort = asSorting[0];
 				}
-	
+
 				label = sTitle + ( nextSort === "asc" ?
 					oAria.sSortAscending :
@@ -65749,10 +65749,10 @@
 				label = sTitle;
 			}
-	
+
 			th.setAttribute('aria-label', label);
 		}
 	}
-	
-	
+
+
 	/**
 	 * Function to run on user sort request
@@ -65776,5 +65776,5 @@
 				idx = $.inArray( a[1], asSorting );
 			}
-	
+
 			return idx+1 < asSorting.length ?
 				idx+1 :
@@ -65783,23 +65783,23 @@
 					0;
 		};
-	
+
 		// Convert to 2D array if needed
 		if ( typeof sorting[0] === 'number' ) {
 			sorting = settings.aaSorting = [ sorting ];
 		}
-	
+
 		// If appending the sort then we are multi-column sorting
 		if ( append && settings.oFeatures.bSortMulti ) {
 			// Are we already doing some kind of sort on this column?
 			var sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );
-	
+
 			if ( sortIdx !== -1 ) {
 				// Yes, modify the sort
 				nextSortIdx = next( sorting[sortIdx], true );
-	
+
 				if ( nextSortIdx === null && sorting.length === 1 ) {
 					nextSortIdx = 0; // can't remove sorting completely
 				}
-	
+
 				if ( nextSortIdx === null ) {
 					sorting.splice( sortIdx, 1 );
@@ -65819,5 +65819,5 @@
 			// Single column - already sorting on this column, modify the sort
 			nextSortIdx = next( sorting[0] );
-	
+
 			sorting.length = 1;
 			sorting[0][1] = asSorting[ nextSortIdx ];
@@ -65830,8 +65830,8 @@
 			sorting[0]._idx = 0;
 		}
-	
+
 		// Run the sort by calling a full redraw
 		_fnReDraw( settings );
-	
+
 		// callback used for async user interaction
 		if ( typeof callback == 'function' ) {
@@ -65839,6 +65839,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Attach a sort handler (click) to a node
@@ -65852,5 +65852,5 @@
 	{
 		var col = settings.aoColumns[ colIdx ];
-	
+
 		_fnBindAction( attachTo, {}, function (e) {
 			/* If the column is not sortable - don't to anything */
@@ -65858,13 +65858,13 @@
 				return;
 			}
-	
+
 			// If processing is enabled use a timeout to allow the processing
 			// display to be shown - otherwise to it synchronously
 			if ( settings.oFeatures.bProcessing ) {
 				_fnProcessingDisplay( settings, true );
-	
+
 				setTimeout( function() {
 					_fnSortListener( settings, colIdx, e.shiftKey, callback );
-	
+
 					// In server-side processing, the draw callback will remove the
 					// processing display
@@ -65879,6 +65879,6 @@
 		} );
 	}
-	
-	
+
+
 	/**
 	 * Set the sorting classes on table's body, Note: it is safe to call this function
@@ -65894,28 +65894,28 @@
 		var features = settings.oFeatures;
 		var i, ien, colIdx;
-	
+
 		if ( features.bSort && features.bSortClasses ) {
 			// Remove old sorting classes
 			for ( i=0, ien=oldSort.length ; i<ien ; i++ ) {
 				colIdx = oldSort[i].src;
-	
+
 				// Remove column sorting
 				$( _pluck( settings.aoData, 'anCells', colIdx ) )
 					.removeClass( sortClass + (i<2 ? i+1 : 3) );
 			}
-	
+
 			// Add new column sorting
 			for ( i=0, ien=sort.length ; i<ien ; i++ ) {
 				colIdx = sort[i].src;
-	
+
 				$( _pluck( settings.aoData, 'anCells', colIdx ) )
 					.addClass( sortClass + (i<2 ? i+1 : 3) );
 			}
 		}
-	
+
 		settings.aLastSort = sort;
 	}
-	
-	
+
+
 	// Get the data to sort a column, be it from cache, fresh (populating the
 	// cache), or from a sort formatter
@@ -65926,5 +65926,5 @@
 		var customSort = DataTable.ext.order[ column.sSortDataType ];
 		var customData;
-	
+
 		if ( customSort ) {
 			customData = customSort.call( settings.oInstance, settings, idx,
@@ -65932,21 +65932,21 @@
 			);
 		}
-	
+
 		// Use / populate cache
 		var row, cellData;
 		var formatter = DataTable.ext.type.order[ column.sType+"-pre" ];
-	
+
 		for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
 			row = settings.aoData[i];
-	
+
 			if ( ! row._aSortData ) {
 				row._aSortData = [];
 			}
-	
+
 			if ( ! row._aSortData[idx] || customSort ) {
 				cellData = customSort ?
 					customData[i] : // If there was a custom sort function, use data from there
 					_fnGetCellData( settings, i, idx, 'sort' );
-	
+
 				row._aSortData[ idx ] = formatter ?
 					formatter( cellData ) :
@@ -65955,7 +65955,7 @@
 		}
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Save the state of a table
@@ -65969,5 +65969,5 @@
 			return;
 		}
-	
+
 		/* Store the interesting variables */
 		var state = {
@@ -65984,12 +65984,12 @@
 			} )
 		};
-	
+
 		_fnCallbackFire( settings, "aoStateSaveParams", 'stateSaveParams', [settings, state] );
-	
+
 		settings.oSavedState = state;
 		settings.fnStateSaveCallback.call( settings.oInstance, settings, state );
 	}
-	
-	
+
+
 	/**
 	 * Attempt to load a saved table state
@@ -66008,5 +66008,5 @@
 				return;
 			}
-	
+
 			// Allow custom and plug-in manipulation functions to alter the saved data set and
 			// cancelling of loading by returning false
@@ -66016,5 +66016,5 @@
 				return;
 			}
-	
+
 			// Reject old data
 			var duration = settings.iStateDuration;
@@ -66023,5 +66023,5 @@
 				return;
 			}
-	
+
 			// Number of columns have changed - all bets are off, no restore of settings
 			if ( s.columns && columns.length !== s.columns.length ) {
@@ -66029,8 +66029,8 @@
 				return;
 			}
-	
+
 			// Store the saved state so it might be accessed at any time
 			settings.oLoadedState = $.extend( true, {}, s );
-	
+
 			// Restore key features - todo - for 1.11 this needs to be done by
 			// subscribed events
@@ -66042,5 +66042,5 @@
 				settings._iDisplayLength   = s.length;
 			}
-	
+
 			// Order
 			if ( s.order !== undefined ) {
@@ -66053,10 +66053,10 @@
 				} );
 			}
-	
+
 			// Search
 			if ( s.search !== undefined ) {
 				$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );
 			}
-	
+
 			// Columns
 			//
@@ -66064,10 +66064,10 @@
 				for ( i=0, ien=s.columns.length ; i<ien ; i++ ) {
 					var col = s.columns[i];
-	
+
 					// Visibility
 					if ( col.visible !== undefined ) {
 						columns[i].bVisible = col.visible;
 					}
-	
+
 					// Search
 					if ( col.search !== undefined ) {
@@ -66076,16 +66076,16 @@
 				}
 			}
-	
+
 			_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );
 			callback();
 		};
-	
+
 		if ( ! settings.oFeatures.bStateSave ) {
 			callback();
 			return;
 		}
-	
+
 		var state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );
-	
+
 		if ( state !== undefined ) {
 			loaded( state );
@@ -66093,6 +66093,6 @@
 		// otherwise, wait for the loaded callback to be executed
 	}
-	
-	
+
+
 	/**
 	 * Return the settings object for a particular table
@@ -66105,11 +66105,11 @@
 		var settings = DataTable.settings;
 		var idx = $.inArray( table, _pluck( settings, 'nTable' ) );
-	
+
 		return idx !== -1 ?
 			settings[ idx ] :
 			null;
 	}
-	
-	
+
+
 	/**
 	 * Log an error message
@@ -66124,19 +66124,19 @@
 		msg = 'DataTables warning: '+
 			(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
-	
+
 		if ( tn ) {
 			msg += '. For more information about this error, please see '+
 			'http://datatables.net/tn/'+tn;
 		}
-	
+
 		if ( ! level  ) {
 			// Backwards compatibility pre 1.10
 			var ext = DataTable.ext;
 			var type = ext.sErrMode || ext.errMode;
-	
+
 			if ( settings ) {
 				_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
 			}
-	
+
 			if ( type == 'alert' ) {
 				alert( msg );
@@ -66153,6 +66153,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * See if a property is defined on one object, if so assign it to the other object
@@ -66174,18 +66174,18 @@
 				}
 			} );
-	
+
 			return;
 		}
-	
+
 		if ( mappedName === undefined ) {
 			mappedName = name;
 		}
-	
+
 		if ( src[name] !== undefined ) {
 			ret[mappedName] = src[name];
 		}
 	}
-	
-	
+
+
 	/**
 	 * Extend objects - very similar to jQuery.extend, but deep copy objects, and
@@ -66208,9 +66208,9 @@
 	{
 		var val;
-	
+
 		for ( var prop in extender ) {
 			if ( extender.hasOwnProperty(prop) ) {
 				val = extender[prop];
-	
+
 				if ( $.isPlainObject( val ) ) {
 					if ( ! $.isPlainObject( out[prop] ) ) {
@@ -66227,9 +66227,9 @@
 			}
 		}
-	
+
 		return out;
 	}
-	
-	
+
+
 	/**
 	 * Bind an event handers to allow a click or return key to activate the callback.
@@ -66259,6 +66259,6 @@
 				} );
 	}
-	
-	
+
+
 	/**
 	 * Register a callback function. Easily allows a callback function to be added to
@@ -66280,6 +66280,6 @@
 		}
 	}
-	
-	
+
+
 	/**
 	 * Fire callback functions and trigger events. Note that the loop over the
@@ -66299,5 +66299,5 @@
 	{
 		var ret = [];
-	
+
 		if ( callbackArr ) {
 			ret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {
@@ -66305,17 +66305,17 @@
 			} );
 		}
-	
+
 		if ( eventName !== null ) {
 			var e = $.Event( eventName+'.dt' );
-	
+
 			$(settings.nTable).trigger( e, args );
-	
+
 			ret.push( e.result );
 		}
-	
+
 		return ret;
 	}
-	
-	
+
+
 	function _fnLengthOverflow ( settings )
 	{
@@ -66324,5 +66324,5 @@
 			end = settings.fnDisplayEnd(),
 			len = settings._iDisplayLength;
-	
+
 		/* If we have space to show extra rows (backing up from the end point - then do so */
 		if ( start >= end )
@@ -66330,22 +66330,22 @@
 			start = end - len;
 		}
-	
+
 		// Keep the start record on the current page
 		start -= (start % len);
-	
+
 		if ( len === -1 || start < 0 )
 		{
 			start = 0;
 		}
-	
+
 		settings._iDisplayStart = start;
 	}
-	
-	
+
+
 	function _fnRenderer( settings, type )
 	{
 		var renderer = settings.renderer;
 		var host = DataTable.ext.renderer[type];
-	
+
 		if ( $.isPlainObject( renderer ) && renderer[type] ) {
 			// Specific renderer for this type. If available use it, otherwise use
@@ -66358,10 +66358,10 @@
 			return host[renderer] || host._;
 		}
-	
+
 		// Use the default
 		return host._;
 	}
-	
-	
+
+
 	/**
 	 * Detect the data source being used for the table. Used to simplify the code
@@ -66382,8 +66382,8 @@
 		return 'dom';
 	}
-	
-
-	
-	
+
+
+
+
 	/**
 	 * Computed structure of the DataTables API, defined by the options passed to
@@ -66423,6 +66423,6 @@
 	 */
 	var __apiStruct = [];
-	
-	
+
+
 	/**
 	 * `Array.prototype` reference.
@@ -66432,6 +66432,6 @@
 	 */
 	var __arrayProto = Array.prototype;
-	
-	
+
+
 	/**
 	 * Abstraction for `context` parameter of the `Api` constructor to allow it to
@@ -66461,5 +66461,5 @@
 			return el.nTable;
 		} );
-	
+
 		if ( ! mixed ) {
 			return [];
@@ -66485,5 +66485,5 @@
 			jq = mixed;
 		}
-	
+
 		if ( jq ) {
 			return jq.map( function(i) {
@@ -66493,6 +66493,6 @@
 		}
 	};
-	
-	
+
+
 	/**
 	 * DataTables API class - used to control and interface with  one or more
@@ -66554,5 +66554,5 @@
 			return new _Api( context, data );
 		}
-	
+
 		var settings = [];
 		var ctxSettings = function ( o ) {
@@ -66562,5 +66562,5 @@
 			}
 		};
-	
+
 		if ( $.isArray( context ) ) {
 			for ( var i=0, ien=context.length ; i<ien ; i++ ) {
@@ -66571,13 +66571,13 @@
 			ctxSettings( context );
 		}
-	
+
 		// Remove duplicates
 		this.context = _unique( settings );
-	
+
 		// Initial data
 		if ( data ) {
 			$.merge( this, data );
 		}
-	
+
 		// selector
 		this.selector = {
@@ -66586,10 +66586,10 @@
 			opts: null
 		};
-	
+
 		_Api.extend( this, this, __apiStruct );
 	};
-	
+
 	DataTable.Api = _Api;
-	
+
 	// Don't destroy the existing prototype, just extend it. Required for jQuery 2's
 	// isPlainObject.
@@ -66599,18 +66599,18 @@
 			return this.count() !== 0;
 		},
-	
-	
+
+
 		concat:  __arrayProto.concat,
-	
-	
+
+
 		context: [], // array of table settings objects
-	
-	
+
+
 		count: function ()
 		{
 			return this.flatten().length;
 		},
-	
-	
+
+
 		each: function ( fn )
 		{
@@ -66618,23 +66618,23 @@
 				fn.call( this, this[i], i, this );
 			}
-	
+
 			return this;
 		},
-	
-	
+
+
 		eq: function ( idx )
 		{
 			var ctx = this.context;
-	
+
 			return ctx.length > idx ?
 				new _Api( ctx[idx], this[idx] ) :
 				null;
 		},
-	
-	
+
+
 		filter: function ( fn )
 		{
 			var a = [];
-	
+
 			if ( __arrayProto.filter ) {
 				a = __arrayProto.filter.call( this, fn, this );
@@ -66648,9 +66648,9 @@
 				}
 			}
-	
+
 			return new _Api( this.context, a );
 		},
-	
-	
+
+
 		flatten: function ()
 		{
@@ -66658,9 +66658,9 @@
 			return new _Api( this.context, a.concat.apply( a, this.toArray() ) );
 		},
-	
-	
+
+
 		join:    __arrayProto.join,
-	
-	
+
+
 		indexOf: __arrayProto.indexOf || function (obj, start)
 		{
@@ -66672,5 +66672,5 @@
 			return -1;
 		},
-	
+
 		iterator: function ( flatten, type, fn, alwaysNew ) {
 			var
@@ -66680,5 +66680,5 @@
 				rows, items, item,
 				selector = this.selector;
-	
+
 			// Argument shifting
 			if ( typeof flatten === 'string' ) {
@@ -66688,11 +66688,11 @@
 				flatten = false;
 			}
-	
+
 			for ( i=0, ien=context.length ; i<ien ; i++ ) {
 				var apiInst = new _Api( context[i] );
-	
+
 				if ( type === 'table' ) {
 					ret = fn.call( apiInst, context[i], i );
-	
+
 					if ( ret !== undefined ) {
 						a.push( ret );
@@ -66702,5 +66702,5 @@
 					// this has same length as context - one entry for each table
 					ret = fn.call( apiInst, context[i], this[i], i );
-	
+
 					if ( ret !== undefined ) {
 						a.push( ret );
@@ -66711,12 +66711,12 @@
 					// 'this' is an array of column indexes for each context
 					items = this[i];
-	
+
 					if ( type === 'column-rows' ) {
 						rows = _selector_row_indexes( context[i], selector.opts );
 					}
-	
+
 					for ( j=0, jen=items.length ; j<jen ; j++ ) {
 						item = items[j];
-	
+
 						if ( type === 'cell' ) {
 							ret = fn.call( apiInst, context[i], item.row, item.column, i, j );
@@ -66725,5 +66725,5 @@
 							ret = fn.call( apiInst, context[i], item, i, j, rows );
 						}
-	
+
 						if ( ret !== undefined ) {
 							a.push( ret );
@@ -66732,5 +66732,5 @@
 				}
 			}
-	
+
 			if ( a.length || alwaysNew ) {
 				var api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );
@@ -66743,6 +66743,6 @@
 			return this;
 		},
-	
-	
+
+
 		lastIndexOf: __arrayProto.lastIndexOf || function (obj, start)
 		{
@@ -66750,13 +66750,13 @@
 			return this.indexOf.apply( this.toArray.reverse(), arguments );
 		},
-	
-	
+
+
 		length:  0,
-	
-	
+
+
 		map: function ( fn )
 		{
 			var a = [];
-	
+
 			if ( __arrayProto.map ) {
 				a = __arrayProto.map.call( this, fn, this );
@@ -66768,9 +66768,9 @@
 				}
 			}
-	
+
 			return new _Api( this.context, a );
 		},
-	
-	
+
+
 		pluck: function ( prop )
 		{
@@ -66779,11 +66779,11 @@
 			} );
 		},
-	
+
 		pop:     __arrayProto.pop,
-	
-	
+
+
 		push:    __arrayProto.push,
-	
-	
+
+
 		// Does not return an API instance
 		reduce: __arrayProto.reduce || function ( fn, init )
@@ -66791,61 +66791,61 @@
 			return _fnReduce( this, fn, init, 0, this.length, 1 );
 		},
-	
-	
+
+
 		reduceRight: __arrayProto.reduceRight || function ( fn, init )
 		{
 			return _fnReduce( this, fn, init, this.length-1, -1, -1 );
 		},
-	
-	
+
+
 		reverse: __arrayProto.reverse,
-	
-	
+
+
 		// Object with rows, columns and opts
 		selector: null,
-	
-	
+
+
 		shift:   __arrayProto.shift,
-	
-	
+
+
 		slice: function () {
 			return new _Api( this.context, this );
 		},
-	
-	
+
+
 		sort:    __arrayProto.sort, // ? name - order?
-	
-	
+
+
 		splice:  __arrayProto.splice,
-	
-	
+
+
 		toArray: function ()
 		{
 			return __arrayProto.slice.call( this );
 		},
-	
-	
+
+
 		to$: function ()
 		{
 			return $( this );
 		},
-	
-	
+
+
 		toJQuery: function ()
 		{
 			return $( this );
 		},
-	
-	
+
+
 		unique: function ()
 		{
 			return new _Api( this.context, _unique(this) );
 		},
-	
-	
+
+
 		unshift: __arrayProto.unshift
 	} );
-	
-	
+
+
 	_Api.extend = function ( scope, obj, ext )
 	{
@@ -66854,5 +66854,5 @@
 			return;
 		}
-	
+
 		var
 			i, ien,
@@ -66861,5 +66861,5 @@
 				return function () {
 					var ret = fn.apply( scope, arguments );
-	
+
 					// Method extension
 					_Api.extend( ret, ret, struc.methodExt );
@@ -66867,8 +66867,8 @@
 				};
 			};
-	
+
 		for ( i=0, ien=ext.length ; i<ien ; i++ ) {
 			struct = ext[i];
-	
+
 			// Value
 			obj[ struct.name ] = struct.type === 'function' ?
@@ -66877,13 +66877,13 @@
 					{} :
 					struct.val;
-	
+
 			obj[ struct.name ].__dt_wrapper = true;
-	
+
 			// Property extension
 			_Api.extend( scope, obj[ struct.name ], struct.propExt );
 		}
 	};
-	
-	
+
+
 	// @todo - Is there need for an augment function?
 	// _Api.augment = function ( inst, name )
@@ -66891,9 +66891,9 @@
 	// 	// Find src object in the structure from the name
 	// 	var parts = name.split('.');
-	
+
 	// 	_Api.extend( inst, obj );
 	// };
-	
-	
+
+
 	//     [
 	//       {
@@ -66918,5 +66918,5 @@
 	//       }
 	//     ]
-	
+
 	_Api.register = _api_register = function ( name, val )
 	{
@@ -66927,5 +66927,5 @@
 			return;
 		}
-	
+
 		var
 			i, ien,
@@ -66933,5 +66933,5 @@
 			struct = __apiStruct,
 			key, method;
-	
+
 		var find = function ( src, name ) {
 			for ( var i=0, ien=src.length ; i<ien ; i++ ) {
@@ -66942,5 +66942,5 @@
 			return null;
 		};
-	
+
 		for ( i=0, ien=heir.length ; i<ien ; i++ ) {
 			method = heir[i].indexOf('()') !== -1;
@@ -66948,5 +66948,5 @@
 				heir[i].replace('()', '') :
 				heir[i];
-	
+
 			var src = find( struct, key );
 			if ( ! src ) {
@@ -66960,5 +66960,5 @@
 				struct.push( src );
 			}
-	
+
 			if ( i === ien-1 ) {
 				src.val = val;
@@ -66976,11 +66976,11 @@
 		}
 	};
-	
+
 	_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {
 		_Api.register( pluralName, val );
-	
+
 		_Api.register( singularName, function () {
 			var ret = val.apply( this, arguments );
-	
+
 			if ( ret === this ) {
 				// Returned item is the API instance that was passed in, return it
@@ -66996,11 +66996,11 @@
 					undefined;
 			}
-	
+
 			// Non-API return - just fire it back
 			return ret;
 		} );
 	};
-	
-	
+
+
 	/**
 	 * Selector for HTML tables. Apply the given selector to the give array of
@@ -67018,10 +67018,10 @@
 			return [ a[ selector ] ];
 		}
-	
+
 		// Perform a jQuery selector on the table nodes
 		var nodes = $.map( a, function (el, i) {
 			return el.nTable;
 		} );
-	
+
 		return $(nodes)
 			.filter( selector )
@@ -67033,7 +67033,7 @@
 			.toArray();
 	};
-	
-	
-	
+
+
+
 	/**
 	 * Context selector for the API's context (i.e. the tables the API instance
@@ -67053,10 +67053,10 @@
 			this;
 	} );
-	
-	
+
+
 	_api_register( 'table()', function ( selector ) {
 		var tables = this.tables( selector );
 		var ctx = tables.context;
-	
+
 		// Truncate to the first matched table
 		return ctx.length ?
@@ -67064,6 +67064,6 @@
 			tables;
 	} );
-	
-	
+
+
 	_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {
 		return this.iterator( 'table', function ( ctx ) {
@@ -67071,6 +67071,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'tables().body()', 'table().body()' , function () {
 		return this.iterator( 'table', function ( ctx ) {
@@ -67078,6 +67078,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'tables().header()', 'table().header()' , function () {
 		return this.iterator( 'table', function ( ctx ) {
@@ -67085,6 +67085,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {
 		return this.iterator( 'table', function ( ctx ) {
@@ -67092,6 +67092,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'tables().containers()', 'table().container()' , function () {
 		return this.iterator( 'table', function ( ctx ) {
@@ -67099,7 +67099,7 @@
 		}, 1 );
 	} );
-	
-	
-	
+
+
+
 	/**
 	 * Redraw the tables in the current context.
@@ -67116,12 +67116,12 @@
 						true;
 				}
-	
+
 				_fnReDraw( settings, paging===false );
 			}
 		} );
 	} );
-	
-	
-	
+
+
+
 	/**
 	 * Get the current page index.
@@ -67147,5 +67147,5 @@
 			return this.page.info().page; // not an expensive call
 		}
-	
+
 		// else, have an action to take on all tables
 		return this.iterator( 'table', function ( settings ) {
@@ -67153,6 +67153,6 @@
 		} );
 	} );
-	
-	
+
+
 	/**
 	 * Paging information for the first table in the current context.
@@ -67177,5 +67177,5 @@
 			return undefined;
 		}
-	
+
 		var
 			settings   = this.context[0],
@@ -67184,5 +67184,5 @@
 			visRecords = settings.fnRecordsDisplay(),
 			all        = len === -1;
-	
+
 		return {
 			"page":           all ? 0 : Math.floor( start / len ),
@@ -67196,6 +67196,6 @@
 		};
 	} );
-	
-	
+
+
 	/**
 	 * Get the current page length.
@@ -67218,5 +67218,5 @@
 				undefined;
 		}
-	
+
 		// else, set the page length
 		return this.iterator( 'table', function ( settings ) {
@@ -67224,17 +67224,17 @@
 		} );
 	} );
-	
-	
-	
+
+
+
 	var __reload = function ( settings, holdPosition, callback ) {
 		// Use the draw event to trigger a callback
 		if ( callback ) {
 			var api = new _Api( settings );
-	
+
 			api.one( 'draw', function () {
 				callback( api.ajax.json() );
 			} );
 		}
-	
+
 		if ( _fnDataSource( settings ) == 'ssp' ) {
 			_fnReDraw( settings, holdPosition );
@@ -67242,5 +67242,5 @@
 		else {
 			_fnProcessingDisplay( settings, true );
-	
+
 			// Cancel an existing request
 			var xhr = settings.jqXHR;
@@ -67248,14 +67248,14 @@
 				xhr.abort();
 			}
-	
+
 			// Trigger xhr
 			_fnBuildAjax( settings, [], function( json ) {
 				_fnClearTable( settings );
-	
+
 				var data = _fnAjaxDataSrc( settings, json );
 				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
 					_fnAddData( settings, data[i] );
 				}
-	
+
 				_fnReDraw( settings, holdPosition );
 				_fnProcessingDisplay( settings, false );
@@ -67263,6 +67263,6 @@
 		}
 	};
-	
-	
+
+
 	/**
 	 * Get the JSON response from the last Ajax request that DataTables made to the
@@ -67274,13 +67274,13 @@
 	_api_register( 'ajax.json()', function () {
 		var ctx = this.context;
-	
+
 		if ( ctx.length > 0 ) {
 			return ctx[0].json;
 		}
-	
+
 		// else return undefined;
 	} );
-	
-	
+
+
 	/**
 	 * Get the data submitted in the last Ajax request
@@ -67288,13 +67288,13 @@
 	_api_register( 'ajax.params()', function () {
 		var ctx = this.context;
-	
+
 		if ( ctx.length > 0 ) {
 			return ctx[0].oAjaxData;
 		}
-	
+
 		// else return undefined;
 	} );
-	
-	
+
+
 	/**
 	 * Reload tables from the Ajax data source. Note that this function will
@@ -67311,6 +67311,6 @@
 		} );
 	} );
-	
-	
+
+
 	/**
 	 * Get the current Ajax URL. Note that this returns the URL from the first
@@ -67327,5 +67327,5 @@
 	_api_register( 'ajax.url()', function ( url ) {
 		var ctx = this.context;
-	
+
 		if ( url === undefined ) {
 			// get
@@ -67334,5 +67334,5 @@
 			}
 			ctx = ctx[0];
-	
+
 			return ctx.ajax ?
 				$.isPlainObject( ctx.ajax ) ?
@@ -67341,5 +67341,5 @@
 				ctx.sAjaxSource;
 		}
-	
+
 		// set
 		return this.iterator( 'table', function ( settings ) {
@@ -67355,6 +67355,6 @@
 		} );
 	} );
-	
-	
+
+
 	/**
 	 * Load data from the newly set Ajax URL. Note that this method is only
@@ -67373,8 +67373,8 @@
 		} );
 	} );
-	
-	
-	
-	
+
+
+
+
 	var _selector_run = function ( type, selector, selectFn, settings, opts )
 	{
@@ -67383,5 +67383,5 @@
 			a, i, ien, j, jen,
 			selectorType = typeof selector;
-	
+
 		// Can't just check for isArray here, as an API or jQuery instance might be
 		// given with their array like look
@@ -67389,5 +67389,5 @@
 			selector = [ selector ];
 		}
-	
+
 		for ( i=0, ien=selector.length ; i<ien ; i++ ) {
 			// Only split on simple strings - complex expressions will be jQuery selectors
@@ -67395,8 +67395,8 @@
 				selector[i].split(',') :
 				[ selector[i] ];
-	
+
 			for ( j=0, jen=a.length ; j<jen ; j++ ) {
 				res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
-	
+
 				if ( res && res.length ) {
 					out = out.concat( res );
@@ -67404,5 +67404,5 @@
 			}
 		}
-	
+
 		// selector extensions
 		var ext = _ext.selector[ type ];
@@ -67412,9 +67412,9 @@
 			}
 		}
-	
+
 		return _unique( out );
 	};
-	
-	
+
+
 	var _selector_opts = function ( opts )
 	{
@@ -67422,5 +67422,5 @@
 			opts = {};
 		}
-	
+
 		// Backwards compatibility for 1.9- which used the terminology filter rather
 		// than search
@@ -67428,5 +67428,5 @@
 			opts.search = opts.filter;
 		}
-	
+
 		return $.extend( {
 			search: 'none',
@@ -67435,6 +67435,6 @@
 		}, opts );
 	};
-	
-	
+
+
 	var _selector_first = function ( inst )
 	{
@@ -67448,15 +67448,15 @@
 				inst.length = 1;
 				inst.context = [ inst.context[i] ];
-	
+
 				return inst;
 			}
 		}
-	
+
 		// Not found - return an empty instance
 		inst.length = 0;
 		return inst;
 	};
-	
-	
+
+
 	var _selector_row_indexes = function ( settings, opts )
 	{
@@ -67465,10 +67465,10 @@
 			displayFiltered = settings.aiDisplay,
 			displayMaster = settings.aiDisplayMaster;
-	
+
 		var
 			search = opts.search,  // none, applied, removed
 			order  = opts.order,   // applied, current, index (original - compatibility with 1.9)
 			page   = opts.page;    // all, current
-	
+
 		if ( _fnDataSource( settings ) == 'ssp' ) {
 			// In server-side processing mode, most options are irrelevant since
@@ -67498,9 +67498,9 @@
 				// O(n+m) solution by creating a hash map
 				var displayFilteredMap = {};
-	
+
 				for ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {
 					displayFilteredMap[displayFiltered[i]] = null;
 				}
-	
+
 				a = $.map( displayMaster, function (el) {
 					return ! displayFilteredMap.hasOwnProperty(el) ?
@@ -67517,5 +67517,5 @@
 				else { // applied | removed
 					tmp = $.inArray( i, displayFiltered );
-	
+
 					if ((tmp === -1 && search == 'removed') ||
 						(tmp >= 0   && search == 'applied') )
@@ -67526,9 +67526,9 @@
 			}
 		}
-	
+
 		return a;
 	};
-	
-	
+
+
 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 	 * Rows
@@ -67548,5 +67548,5 @@
 			var i, ien;
 			var aoData = settings.aoData;
-	
+
 			// Short cut - selector is a number and no options provided (default is
 			// all records, so no need to check if the index is in there, since it
@@ -67555,9 +67555,9 @@
 				return [ selInt ];
 			}
-	
+
 			if ( ! rows ) {
 				rows = _selector_row_indexes( settings, opts );
 			}
-	
+
 			if ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {
 				// Selector - integer
@@ -67568,5 +67568,5 @@
 				return rows;
 			}
-	
+
 			// Selector - function
 			if ( typeof sel === 'function' ) {
@@ -67576,10 +67576,10 @@
 				} );
 			}
-	
+
 			// Selector - node
 			if ( sel.nodeName ) {
 				var rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup
 				var cellIdx = sel._DT_CellIndex;
-	
+
 				if ( rowIdx !== undefined ) {
 					// Make sure that the row is actually still present in the table
@@ -67600,5 +67600,5 @@
 				}
 			}
-	
+
 			// ID selector. Want to always be able to select rows by id, regardless
 			// of if the tr element has been created or not, so can't rely upon
@@ -67616,14 +67616,14 @@
 					return [ rowObj.idx ];
 				}
-	
+
 				// need to fall through to jQuery in case there is DOM id that
 				// matches
 			}
-			
+
 			// Get nodes in the order from the `rows` array with null values removed
 			var nodes = _removeEmpty(
 				_pluck_order( settings.aoData, rows, 'nTr' )
 			);
-	
+
 			// Selector - jQuery selector string, array of nodes or jQuery object/
 			// As jQuery's .filter() allows jQuery objects to be passed in filter,
@@ -67636,9 +67636,9 @@
 				.toArray();
 		};
-	
+
 		return _selector_run( 'row', selector, run, settings, opts );
 	};
-	
-	
+
+
 	_api_register( 'rows()', function ( selector, opts ) {
 		// argument shifting
@@ -67650,18 +67650,18 @@
 			selector = '';
 		}
-	
+
 		opts = _selector_opts( opts );
-	
+
 		var inst = this.iterator( 'table', function ( settings ) {
 			return __row_selector( settings, selector, opts );
 		}, 1 );
-	
+
 		// Want argument shifting here and in __row_selector?
 		inst.selector.rows = selector;
 		inst.selector.opts = opts;
-	
+
 		return inst;
 	} );
-	
+
 	_api_register( 'rows().nodes()', function () {
 		return this.iterator( 'row', function ( settings, row ) {
@@ -67669,5 +67669,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_register( 'rows().data()', function () {
 		return this.iterator( true, 'rows', function ( settings, rows ) {
@@ -67675,5 +67675,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {
 		return this.iterator( 'row', function ( settings, row ) {
@@ -67682,5 +67682,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {
 		return this.iterator( 'row', function ( settings, row ) {
@@ -67688,5 +67688,5 @@
 		} );
 	} );
-	
+
 	_api_registerPlural( 'rows().indexes()', 'row().index()', function () {
 		return this.iterator( 'row', function ( settings, row ) {
@@ -67694,9 +67694,9 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {
 		var a = [];
 		var context = this.context;
-	
+
 		// `iterator` will drop undefined values, but in this case we want them
 		for ( var i=0, ien=context.length ; i<ien ; i++ ) {
@@ -67706,11 +67706,11 @@
 			}
 		}
-	
+
 		return new _Api( context, a );
 	} );
-	
+
 	_api_registerPlural( 'rows().remove()', 'row().remove()', function () {
 		var that = this;
-	
+
 		this.iterator( 'row', function ( settings, row, thatIdx ) {
 			var data = settings.aoData;
@@ -67718,17 +67718,17 @@
 			var i, ien, j, jen;
 			var loopRow, loopCells;
-	
+
 			data.splice( row, 1 );
-	
+
 			// Update the cached indexes
 			for ( i=0, ien=data.length ; i<ien ; i++ ) {
 				loopRow = data[i];
 				loopCells = loopRow.anCells;
-	
+
 				// Rows
 				if ( loopRow.nTr !== null ) {
 					loopRow.nTr._DT_RowIndex = i;
 				}
-	
+
 				// Cells
 				if ( loopCells !== null ) {
@@ -67738,18 +67738,18 @@
 				}
 			}
-	
+
 			// Delete from the display arrays
 			_fnDeleteIndex( settings.aiDisplayMaster, row );
 			_fnDeleteIndex( settings.aiDisplay, row );
 			_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes
-	
+
 			// For server-side processing tables - subtract the deleted row from the count
 			if ( settings._iRecordsDisplay > 0 ) {
 				settings._iRecordsDisplay--;
 			}
-	
+
 			// Check for an 'overflow' they case for displaying the table
 			_fnLengthOverflow( settings );
-	
+
 			// Remove the row's ID reference if there is one
 			var id = settings.rowIdFn( rowData._aData );
@@ -67758,5 +67758,5 @@
 			}
 		} );
-	
+
 		this.iterator( 'table', function ( settings ) {
 			for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
@@ -67764,17 +67764,17 @@
 			}
 		} );
-	
+
 		return this;
 	} );
-	
-	
+
+
 	_api_register( 'rows.add()', function ( rows ) {
 		var newRows = this.iterator( 'table', function ( settings ) {
 				var row, i, ien;
 				var out = [];
-	
+
 				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
 					row = rows[i];
-	
+
 					if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
 						out.push( _fnAddTr( settings, row )[0] );
@@ -67784,20 +67784,20 @@
 					}
 				}
-	
+
 				return out;
 			}, 1 );
-	
+
 		// Return an Api.rows() extended instance, so rows().nodes() etc can be used
 		var modRows = this.rows( -1 );
 		modRows.pop();
 		$.merge( modRows, newRows );
-	
+
 		return modRows;
 	} );
-	
-	
-	
-	
-	
+
+
+
+
+
 	/**
 	 *
@@ -67806,9 +67806,9 @@
 		return _selector_first( this.rows( selector, opts ) );
 	} );
-	
-	
+
+
 	_api_register( 'row().data()', function ( data ) {
 		var ctx = this.context;
-	
+
 		if ( data === undefined ) {
 			// Get
@@ -67817,30 +67817,30 @@
 				undefined;
 		}
-	
+
 		// Set
 		var row = ctx[0].aoData[ this[0] ];
 		row._aData = data;
-	
+
 		// If the DOM has an id, and the data source is an array
 		if ( $.isArray( data ) && row.nTr.id ) {
 			_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );
 		}
-	
+
 		// Automatically invalidate
 		_fnInvalidate( ctx[0], this[0], 'data' );
-	
+
 		return this;
 	} );
-	
-	
+
+
 	_api_register( 'row().node()', function () {
 		var ctx = this.context;
-	
+
 		return ctx.length && this.length ?
 			ctx[0].aoData[ this[0] ].nTr || null :
 			null;
 	} );
-	
-	
+
+
 	_api_register( 'row.add()', function ( row ) {
 		// Allow a jQuery object to be passed in - only a single row is added from
@@ -67849,5 +67849,5 @@
 			row = row[0];
 		}
-	
+
 		var rows = this.iterator( 'table', function ( settings ) {
 			if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
@@ -67856,11 +67856,11 @@
 			return _fnAddData( settings, row );
 		} );
-	
+
 		// Return an Api.rows() extended instance, with the newly added row selected
 		return this.row( rows[0] );
 	} );
-	
-	
-	
+
+
+
 	var __details_add = function ( ctx, row, data, klass )
 	{
@@ -67875,5 +67875,5 @@
 				return;
 			}
-	
+
 			// If we get a TR element, then just add it directly - up to the dev
 			// to add the correct number of columns etc
@@ -67888,17 +67888,17 @@
 					.html( r )
 					[0].colSpan = _fnVisbleColumns( ctx );
-	
+
 				rows.push( created[0] );
 			}
 		};
-	
+
 		addRow( data, klass );
-	
+
 		if ( row._details ) {
 			row._details.detach();
 		}
-	
+
 		row._details = $(rows);
-	
+
 		// If the children were already shown, that state should be retained
 		if ( row._detailsShow ) {
@@ -67906,16 +67906,16 @@
 		}
 	};
-	
-	
+
+
 	var __details_remove = function ( api, idx )
 	{
 		var ctx = api.context;
-	
+
 		if ( ctx.length ) {
 			var row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];
-	
+
 			if ( row && row._details ) {
 				row._details.remove();
-	
+
 				row._detailsShow = undefined;
 				row._details = undefined;
@@ -67923,15 +67923,15 @@
 		}
 	};
-	
-	
+
+
 	var __details_display = function ( api, show ) {
 		var ctx = api.context;
-	
+
 		if ( ctx.length && api.length ) {
 			var row = ctx[0].aoData[ api[0] ];
-	
+
 			if ( row._details ) {
 				row._detailsShow = show;
-	
+
 				if ( show ) {
 					row._details.insertAfter( row.nTr );
@@ -67940,11 +67940,11 @@
 					row._details.detach();
 				}
-	
+
 				__details_events( ctx[0] );
 			}
 		}
 	};
-	
-	
+
+
 	var __details_events = function ( settings )
 	{
@@ -67955,7 +67955,7 @@
 		var destroyEvent = 'destroy'+namespace;
 		var data = settings.aoData;
-	
+
 		api.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );
-	
+
 		if ( _pluck( data, '_details' ).length > 0 ) {
 			// On each draw, insert the required elements into the document
@@ -67964,9 +67964,9 @@
 					return;
 				}
-	
+
 				api.rows( {page:'current'} ).eq(0).each( function (idx) {
 					// Internal data grab
 					var row = data[ idx ];
-	
+
 					if ( row._detailsShow ) {
 						row._details.insertAfter( row.nTr );
@@ -67974,5 +67974,5 @@
 				} );
 			} );
-	
+
 			// Column visibility change - update the colspan
 			api.on( colvisEvent, function ( e, ctx, idx, vis ) {
@@ -67980,12 +67980,12 @@
 					return;
 				}
-	
+
 				// Update the colspan for the details rows (note, only if it already has
 				// a colspan)
 				var row, visible = _fnVisbleColumns( ctx );
-	
+
 				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
 					row = data[i];
-	
+
 					if ( row._details ) {
 						row._details.children('td[colspan]').attr('colspan', visible );
@@ -67993,5 +67993,5 @@
 				}
 			} );
-	
+
 			// Table destroyed - nuke any child rows
 			api.on( destroyEvent, function ( e, ctx ) {
@@ -67999,5 +67999,5 @@
 					return;
 				}
-	
+
 				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
 					if ( data[i]._details ) {
@@ -68008,10 +68008,10 @@
 		}
 	};
-	
+
 	// Strings for the method names to help minification
 	var _emp = '';
 	var _child_obj = _emp+'row().child';
 	var _child_mth = _child_obj+'()';
-	
+
 	// data can be:
 	//  tr
@@ -68020,5 +68020,5 @@
 	_api_register( _child_mth, function ( data, klass ) {
 		var ctx = this.context;
-	
+
 		if ( data === undefined ) {
 			// get
@@ -68039,9 +68039,9 @@
 			__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );
 		}
-	
+
 		return this;
 	} );
-	
-	
+
+
 	_api_register( [
 		_child_obj+'.show()',
@@ -68051,6 +68051,6 @@
 		return this;
 	} );
-	
-	
+
+
 	_api_register( [
 		_child_obj+'.hide()',
@@ -68060,6 +68060,6 @@
 		return this;
 	} );
-	
-	
+
+
 	_api_register( [
 		_child_obj+'.remove()',
@@ -68069,9 +68069,9 @@
 		return this;
 	} );
-	
-	
+
+
 	_api_register( _child_obj+'.isShown()', function () {
 		var ctx = this.context;
-	
+
 		if ( ctx.length && this.length ) {
 			// _detailsShown as false or undefined will fall through to return false
@@ -68080,7 +68080,7 @@
 		return false;
 	} );
-	
-	
-	
+
+
+
 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 	 * Columns
@@ -68093,11 +68093,11 @@
 	 *
 	 */
-	
+
 	// can be an array of these items, comma separated list, or an array of comma
 	// separated lists
-	
+
 	var __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;
-	
-	
+
+
 	// r1 and r2 are redundant - but it means that the parameters match for the
 	// iterator callback in columns().data()
@@ -68109,6 +68109,6 @@
 		return a;
 	};
-	
-	
+
+
 	var __column_selector = function ( settings, selector, opts )
 	{
@@ -68117,13 +68117,13 @@
 			names = _pluck( columns, 'sName' ),
 			nodes = _pluck( columns, 'nTh' );
-	
+
 		var run = function ( s ) {
 			var selInt = _intVal( s );
-	
+
 			// Selector - all
 			if ( s === '' ) {
 				return _range( columns.length );
 			}
-	
+
 			// Selector - index
 			if ( selInt !== null ) {
@@ -68133,9 +68133,9 @@
 				];
 			}
-	
+
 			// Selector = function
 			if ( typeof s === 'function' ) {
 				var rows = _selector_row_indexes( settings, opts );
-	
+
 				return $.map( columns, function (col, idx) {
 					return s(
@@ -68146,10 +68146,10 @@
 				} );
 			}
-	
+
 			// jQuery or string selector
 			var match = typeof s === 'string' ?
 				s.match( __re_column_selector ) :
 				'';
-	
+
 			if ( match ) {
 				switch( match[2] ) {
@@ -68167,5 +68167,5 @@
 						// Counting from the left
 						return [ _fnVisibleToColumnIndex( settings, idx ) ];
-	
+
 					case 'name':
 						// match by name. `names` is column index complete and in order
@@ -68173,15 +68173,15 @@
 							return name === match[1] ? i : null;
 						} );
-	
+
 					default:
 						return [];
 				}
 			}
-	
+
 			// Cell in the table body
 			if ( s.nodeName && s._DT_CellIndex ) {
 				return [ s._DT_CellIndex.column ];
 			}
-	
+
 			// jQuery selector on the TH elements for the columns
 			var jqResult = $( nodes )
@@ -68191,9 +68191,9 @@
 				} )
 				.toArray();
-	
+
 			if ( jqResult.length || ! s.nodeName ) {
 				return jqResult;
 			}
-	
+
 			// Otherwise a node which might have a `dt-column` data attribute, or be
 			// a child or such an element
@@ -68203,9 +68203,9 @@
 				[];
 		};
-	
+
 		return _selector_run( 'column', selector, run, settings, opts );
 	};
-	
-	
+
+
 	var __setColumnVis = function ( settings, column, vis ) {
 		var
@@ -68214,10 +68214,10 @@
 			data = settings.aoData,
 			row, cells, i, ien, tr;
-	
+
 		// Get
 		if ( vis === undefined ) {
 			return col.bVisible;
 		}
-	
+
 		// Set
 		// No change
@@ -68225,14 +68225,14 @@
 			return;
 		}
-	
+
 		if ( vis ) {
 			// Insert column
 			// Need to decide if we should use appendChild or insertBefore
 			var insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );
-	
+
 			for ( i=0, ien=data.length ; i<ien ; i++ ) {
 				tr = data[i].nTr;
 				cells = data[i].anCells;
-	
+
 				if ( tr ) {
 					// insertBefore can act like appendChild if 2nd arg is null
@@ -68245,10 +68245,10 @@
 			$( _pluck( settings.aoData, 'anCells', column ) ).detach();
 		}
-	
+
 		// Common actions
 		col.bVisible = vis;
 	};
-	
-	
+
+
 	_api_register( 'columns()', function ( selector, opts ) {
 		// argument shifting
@@ -68260,18 +68260,18 @@
 			selector = '';
 		}
-	
+
 		opts = _selector_opts( opts );
-	
+
 		var inst = this.iterator( 'table', function ( settings ) {
 			return __column_selector( settings, selector, opts );
 		}, 1 );
-	
+
 		// Want argument shifting here and in _row_selector?
 		inst.selector.cols = selector;
 		inst.selector.opts = opts;
-	
+
 		return inst;
 	} );
-	
+
 	_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {
 		return this.iterator( 'column', function ( settings, column ) {
@@ -68279,5 +68279,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {
 		return this.iterator( 'column', function ( settings, column ) {
@@ -68285,9 +68285,9 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'columns().data()', 'column().data()', function () {
 		return this.iterator( 'column-rows', __columnData, 1 );
 	} );
-	
+
 	_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {
 		return this.iterator( 'column', function ( settings, column ) {
@@ -68295,5 +68295,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {
 		return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
@@ -68303,5 +68303,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {
 		return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
@@ -68309,5 +68309,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {
 		var that = this;
@@ -68318,5 +68318,5 @@
 			__setColumnVis( settings, column, vis );
 		} );
-	
+
 		// Group the column visibility changes
 		if ( vis !== undefined ) {
@@ -68325,5 +68325,5 @@
 				_fnDrawHead( settings, settings.aoHeader );
 				_fnDrawHead( settings, settings.aoFooter );
-		
+
 				// Update colspan for no records display. Child rows and extensions will use their own
 				// listeners to do this - only need to update the empty table item here
@@ -68331,12 +68331,12 @@
 					$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));
 				}
-		
+
 				_fnSaveState( settings );
-	
+
 				// Second loop once the first is done for events
 				that.iterator( 'column', function ( settings, column ) {
 					_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );
 				} );
-	
+
 				if ( calc === undefined || calc ) {
 					that.columns.adjust();
@@ -68344,8 +68344,8 @@
 			});
 		}
-	
+
 		return ret;
 	} );
-	
+
 	_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {
 		return this.iterator( 'column', function ( settings, column ) {
@@ -68355,5 +68355,5 @@
 		}, 1 );
 	} );
-	
+
 	_api_register( 'columns.adjust()', function () {
 		return this.iterator( 'table', function ( settings ) {
@@ -68361,9 +68361,9 @@
 		}, 1 );
 	} );
-	
+
 	_api_register( 'column.index()', function ( type, idx ) {
 		if ( this.context.length !== 0 ) {
 			var ctx = this.context[0];
-	
+
 			if ( type === 'fromVisible' || type === 'toData' ) {
 				return _fnVisibleToColumnIndex( ctx, idx );
@@ -68374,11 +68374,11 @@
 		}
 	} );
-	
+
 	_api_register( 'column()', function ( selector, opts ) {
 		return _selector_first( this.columns( selector, opts ) );
 	} );
-	
-	
-	
+
+
+
 	var __cell_selector = function ( settings, selector, opts )
 	{
@@ -68390,15 +68390,15 @@
 		var columns = settings.aoColumns.length;
 		var a, i, ien, j, o, host;
-	
+
 		var run = function ( s ) {
 			var fnSelector = typeof s === 'function';
-	
+
 			if ( s === null || s === undefined || fnSelector ) {
 				// All cells and function selectors
 				a = [];
-	
+
 				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
 					row = rows[i];
-	
+
 					for ( j=0 ; j<columns ; j++ ) {
 						o = {
@@ -68406,9 +68406,9 @@
 							column: j
 						};
-	
+
 						if ( fnSelector ) {
 							// Selector - function
 							host = data[ row ];
-	
+
 							if ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {
 								a.push( o );
@@ -68421,8 +68421,8 @@
 					}
 				}
-	
+
 				return a;
 			}
-			
+
 			// Selector - index
 			if ( $.isPlainObject( s ) ) {
@@ -68432,5 +68432,5 @@
 					[];
 			}
-	
+
 			// Selector - jQuery filtered cells
 			var jqResult = allCells
@@ -68443,9 +68443,9 @@
 				} )
 				.toArray();
-	
+
 			if ( jqResult.length || ! s.nodeName ) {
 				return jqResult;
 			}
-	
+
 			// Otherwise the selector is a node, and there is one last option - the
 			// element might be a child of an element which has dt-row and dt-column
@@ -68459,11 +68459,11 @@
 				[];
 		};
-	
+
 		return _selector_run( 'cell', selector, run, settings, opts );
 	};
-	
-	
-	
-	
+
+
+
+
 	_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {
 		// Argument shifting
@@ -68485,5 +68485,5 @@
 			columnSelector = null;
 		}
-	
+
 		// Cell selector
 		if ( columnSelector === null || columnSelector === undefined ) {
@@ -68492,5 +68492,5 @@
 			} );
 		}
-	
+
 		// The default built in options need to apply to row and columns
 		var internalOpts = opts ? {
@@ -68499,13 +68499,13 @@
 			search: opts.search
 		} : {};
-	
+
 		// Row + column selector
 		var columns = this.columns( columnSelector, internalOpts );
 		var rows = this.rows( rowSelector, internalOpts );
 		var i, ien, j, jen;
-	
+
 		var cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {
 			var a = [];
-	
+
 			for ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {
 				for ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {
@@ -68516,8 +68516,8 @@
 				}
 			}
-	
+
 			return a;
 		}, 1 );
-	
+
 		// There is currently only one extension which uses a cell selector extension
 		// It is a _major_ performance drag to run this if it isn't needed, so this is
@@ -68526,5 +68526,5 @@
 			this.cells( cellsNoOpts, opts ) :
 			cellsNoOpts;
-	
+
 		$.extend( cells.selector, {
 			cols: columnSelector,
@@ -68532,13 +68532,13 @@
 			opts: opts
 		} );
-	
+
 		return cells;
 	} );
-	
-	
+
+
 	_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {
 		return this.iterator( 'cell', function ( settings, row, column ) {
 			var data = settings.aoData[ row ];
-	
+
 			return data && data.anCells ?
 				data.anCells[ column ] :
@@ -68546,6 +68546,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_register( 'cells().data()', function () {
 		return this.iterator( 'cell', function ( settings, row, column ) {
@@ -68553,15 +68553,15 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {
 		type = type === 'search' ? '_aFilterData' : '_aSortData';
-	
+
 		return this.iterator( 'cell', function ( settings, row, column ) {
 			return settings.aoData[ row ][ type ][ column ];
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {
 		return this.iterator( 'cell', function ( settings, row, column ) {
@@ -68569,6 +68569,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {
 		return this.iterator( 'cell', function ( settings, row, column ) {
@@ -68580,6 +68580,6 @@
 		}, 1 );
 	} );
-	
-	
+
+
 	_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {
 		return this.iterator( 'cell', function ( settings, row, column ) {
@@ -68587,16 +68587,16 @@
 		} );
 	} );
-	
-	
-	
+
+
+
 	_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {
 		return _selector_first( this.cells( rowSelector, columnSelector, opts ) );
 	} );
-	
-	
+
+
 	_api_register( 'cell().data()', function ( data ) {
 		var ctx = this.context;
 		var cell = this[0];
-	
+
 		if ( data === undefined ) {
 			// Get
@@ -68605,14 +68605,14 @@
 				undefined;
 		}
-	
+
 		// Set
 		_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );
 		_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );
-	
+
 		return this;
 	} );
-	
-	
-	
+
+
+
 	/**
 	 * Get current ordering (sorting) that has been applied to the table.
@@ -68645,5 +68645,5 @@
 	_api_register( 'order()', function ( order, dir ) {
 		var ctx = this.context;
-	
+
 		if ( order === undefined ) {
 			// get
@@ -68652,5 +68652,5 @@
 				undefined;
 		}
-	
+
 		// set
 		if ( typeof order === 'number' ) {
@@ -68663,11 +68663,11 @@
 		}
 		// otherwise a 2D array was passed in
-	
+
 		return this.iterator( 'table', function ( settings ) {
 			settings.aaSorting = order.slice();
 		} );
 	} );
-	
-	
+
+
 	/**
 	 * Attach a sort listener to an element for a given column
@@ -68685,6 +68685,6 @@
 		} );
 	} );
-	
-	
+
+
 	_api_register( 'order.fixed()', function ( set ) {
 		if ( ! set ) {
@@ -68693,16 +68693,16 @@
 				ctx[0].aaSortingFixed :
 				undefined;
-	
+
 			return $.isArray( fixed ) ?
 				{ pre: fixed } :
 				fixed;
 		}
-	
+
 		return this.iterator( 'table', function ( settings ) {
 			settings.aaSortingFixed = $.extend( true, {}, set );
 		} );
 	} );
-	
-	
+
+
 	// Order by the selected column(s)
 	_api_register( [
@@ -68711,21 +68711,21 @@
 	], function ( dir ) {
 		var that = this;
-	
+
 		return this.iterator( 'table', function ( settings, i ) {
 			var sort = [];
-	
+
 			$.each( that[i], function (j, col) {
 				sort.push( [ col, dir ] );
 			} );
-	
+
 			settings.aaSorting = sort;
 		} );
 	} );
-	
-	
-	
+
+
+
 	_api_register( 'search()', function ( input, regex, smart, caseInsen ) {
 		var ctx = this.context;
-	
+
 		if ( input === undefined ) {
 			// get
@@ -68734,5 +68734,5 @@
 				undefined;
 		}
-	
+
 		// set
 		return this.iterator( 'table', function ( settings ) {
@@ -68740,5 +68740,5 @@
 				return;
 			}
-	
+
 			_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {
 				"sSearch": input+"",
@@ -68749,6 +68749,6 @@
 		} );
 	} );
-	
-	
+
+
 	_api_registerPlural(
 		'columns().search()',
@@ -68757,15 +68757,15 @@
 			return this.iterator( 'column', function ( settings, column ) {
 				var preSearch = settings.aoPreSearchCols;
-	
+
 				if ( input === undefined ) {
 					// get
 					return preSearch[ column ].sSearch;
 				}
-	
+
 				// set
 				if ( ! settings.oFeatures.bFilter ) {
 					return;
 				}
-	
+
 				$.extend( preSearch[ column ], {
 					"sSearch": input+"",
@@ -68774,14 +68774,14 @@
 					"bCaseInsensitive": caseInsen === null ? true : caseInsen
 				} );
-	
+
 				_fnFilterComplete( settings, settings.oPreviousSearch, 1 );
 			} );
 		}
 	);
-	
+
 	/*
 	 * State API methods
 	 */
-	
+
 	_api_register( 'state()', function () {
 		return this.context.length ?
@@ -68789,6 +68789,6 @@
 			null;
 	} );
-	
-	
+
+
 	_api_register( 'state.clear()', function () {
 		return this.iterator( 'table', function ( settings ) {
@@ -68797,6 +68797,6 @@
 		} );
 	} );
-	
-	
+
+
 	_api_register( 'state.loaded()', function () {
 		return this.context.length ?
@@ -68804,6 +68804,6 @@
 			null;
 	} );
-	
-	
+
+
 	_api_register( 'state.save()', function () {
 		return this.iterator( 'table', function ( settings ) {
@@ -68811,7 +68811,7 @@
 		} );
 	} );
-	
-	
-	
+
+
+
 	/**
 	 * Provide a common method for plug-ins to check the version of DataTables being
@@ -68834,22 +68834,22 @@
 		var aThat = version.split('.');
 		var iThis, iThat;
-	
+
 		for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {
 			iThis = parseInt( aThis[i], 10 ) || 0;
 			iThat = parseInt( aThat[i], 10 ) || 0;
-	
+
 			// Parts are the same, keep comparing
 			if (iThis === iThat) {
 				continue;
 			}
-	
+
 			// Parts are different, return immediately
 			return iThis > iThat;
 		}
-	
+
 		return true;
 	};
-	
-	
+
+
 	/**
 	 * Check if a `<table>` node is a DataTable table already or not.
@@ -68871,22 +68871,22 @@
 		var t = $(table).get(0);
 		var is = false;
-	
+
 		if ( table instanceof DataTable.Api ) {
 			return true;
 		}
-	
+
 		$.each( DataTable.settings, function (i, o) {
 			var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
 			var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;
-	
+
 			if ( o.nTable === t || head === t || foot === t ) {
 				is = true;
 			}
 		} );
-	
+
 		return is;
 	};
-	
-	
+
+
 	/**
 	 * Get all DataTable tables that have been initialised - optionally you can
@@ -68908,10 +68908,10 @@
 	{
 		var api = false;
-	
+
 		if ( $.isPlainObject( visible ) ) {
 			api = visible.api;
 			visible = visible.visible;
 		}
-	
+
 		var a = $.map( DataTable.settings, function (o) {
 			if ( !visible || (visible && $(o.nTable).is(':visible')) ) {
@@ -68919,11 +68919,11 @@
 			}
 		} );
-	
+
 		return api ?
 			new _Api( a ) :
 			a;
 	};
-	
-	
+
+
 	/**
 	 * Convert from camel case parameters to Hungarian notation. This is made public
@@ -68940,7 +68940,7 @@
 	 */
 	DataTable.camelToHungarian = _fnCamelToHungarian;
-	
-	
-	
+
+
+
 	/**
 	 *
@@ -68950,5 +68950,5 @@
 			rows   = this.rows( opts ).nodes(), // Get all rows
 			jqRows = $(rows);
-	
+
 		return $( [].concat(
 			jqRows.filter( selector ).toArray(),
@@ -68956,11 +68956,11 @@
 		) );
 	} );
-	
-	
+
+
 	// jQuery functions to operate on the tables
 	$.each( [ 'on', 'one', 'off' ], function (i, key) {
 		_api_register( key+'()', function ( /* event, handler */ ) {
 			var args = Array.prototype.slice.call(arguments);
-	
+
 			// Add the `dt` namespace automatically if it isn't already present
 			args[0] = $.map( args[0].split( /\s/ ), function ( e ) {
@@ -68969,5 +68969,5 @@
 					e;
 				} ).join( ' ' );
-	
+
 			var inst = $( this.tables().nodes() );
 			inst[key].apply( inst, args );
@@ -68975,6 +68975,6 @@
 		} );
 	} );
-	
-	
+
+
 	_api_register( 'clear()', function () {
 		return this.iterator( 'table', function ( settings ) {
@@ -68982,17 +68982,17 @@
 		} );
 	} );
-	
-	
+
+
 	_api_register( 'settings()', function () {
 		return new _Api( this.context, this.context );
 	} );
-	
-	
+
+
 	_api_register( 'init()', function () {
 		var ctx = this.context;
 		return ctx.length ? ctx[0].oInit : null;
 	} );
-	
-	
+
+
 	_api_register( 'data()', function () {
 		return this.iterator( 'table', function ( settings ) {
@@ -69000,9 +69000,9 @@
 		} ).flatten();
 	} );
-	
-	
+
+
 	_api_register( 'destroy()', function ( remove ) {
 		remove = remove || false;
-	
+
 		return this.iterator( 'table', function ( settings ) {
 			var orig      = settings.nTableWrapper.parentNode;
@@ -69017,17 +69017,17 @@
 			var rows      = $.map( settings.aoData, function (r) { return r.nTr; } );
 			var i, ien;
-	
+
 			// Flag to note that the table is currently being destroyed - no action
 			// should be taken
 			settings.bDestroying = true;
-	
+
 			// Fire off the destroy callbacks for plug-ins etc
 			_fnCallbackFire( settings, "aoDestroyCallback", "destroy", [settings] );
-	
+
 			// If not being removed from the document, make all columns visible
 			if ( ! remove ) {
 				new _Api( settings ).columns().visible( true );
 			}
-	
+
 			// Blitz all `DT` namespaced events (these are internal events, the
 			// lowercase, `dt` events are user subscribed and they are responsible
@@ -69035,5 +69035,5 @@
 			jqWrapper.off('.DT').find(':not(tbody *)').off('.DT');
 			$(window).off('.DT-'+settings.sInstance);
-	
+
 			// When scrolling we had to break the table up - restore it
 			if ( table != thead.parentNode ) {
@@ -69041,34 +69041,34 @@
 				jqTable.append( thead );
 			}
-	
+
 			if ( tfoot && table != tfoot.parentNode ) {
 				jqTable.children('tfoot').detach();
 				jqTable.append( tfoot );
 			}
-	
+
 			settings.aaSorting = [];
 			settings.aaSortingFixed = [];
 			_fnSortingClasses( settings );
-	
+
 			$( rows ).removeClass( settings.asStripeClasses.join(' ') );
-	
+
 			$('th, td', thead).removeClass( classes.sSortable+' '+
 				classes.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone
 			);
-	
+
 			// Add the TR elements back into the table in their original order
 			jqTbody.children().detach();
 			jqTbody.append( rows );
-	
+
 			// Remove the DataTables generated nodes, events and classes
 			var removedMethod = remove ? 'remove' : 'detach';
 			jqTable[ removedMethod ]();
 			jqWrapper[ removedMethod ]();
-	
+
 			// If we need to reattach the table to the document
 			if ( ! remove && orig ) {
 				// insertBefore acts like appendChild if !arg[1]
 				orig.insertBefore( table, settings.nTableReinsertBefore );
-	
+
 				// Restore the width of the original table - was read from the style property,
 				// so we can restore directly to that
@@ -69076,10 +69076,10 @@
 					.css( 'width', settings.sDestroyWidth )
 					.removeClass( classes.sTable );
-	
+
 				// If the were originally stripe classes - then we add them back here.
 				// Note this is not fool proof (for example if not all rows had stripe
 				// classes - but it's a good effort without getting carried away
 				ien = settings.asDestroyStripes.length;
-	
+
 				if ( ien ) {
 					jqTbody.children().each( function (i) {
@@ -69088,5 +69088,5 @@
 				}
 			}
-	
+
 			/* Remove the settings object from the settings array */
 			var idx = $.inArray( settings, DataTable.settings );
@@ -69096,6 +69096,6 @@
 		} );
 	} );
-	
-	
+
+
 	// Add the `every()` method for rows, columns and cells in a compact form
 	$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {
@@ -69103,5 +69103,5 @@
 			var opts = this.selector.opts;
 			var api = this;
-	
+
 			return this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {
 				// Rows and columns:
@@ -69126,6 +69126,6 @@
 		} );
 	} );
-	
-	
+
+
 	// i18n method for extensions to be able to use the language object from the
 	// DataTable
@@ -69133,9 +69133,9 @@
 		var ctx = this.context[0];
 		var resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );
-	
+
 		if ( resolved === undefined ) {
 			resolved = def;
 		}
-	
+
 		if ( plural !== undefined && $.isPlainObject( resolved ) ) {
 			resolved = resolved[ plural ] !== undefined ?
@@ -69143,5 +69143,5 @@
 				resolved._;
 		}
-	
+
 		return resolved.replace( '%d', plural ); // nb: plural might be undefined,
 	} );
@@ -69177,7 +69177,7 @@
 	 */
 	DataTable.models = {};
-	
-	
-	
+
+
+
 	/**
 	 * Template object for the way in which DataTables holds information about
@@ -69192,5 +69192,5 @@
 		 */
 		"bCaseInsensitive": true,
-	
+
 		/**
 		 * Applied search term
@@ -69199,5 +69199,5 @@
 		 */
 		"sSearch": "",
-	
+
 		/**
 		 * Flag to indicate if the search term should be interpreted as a
@@ -69208,5 +69208,5 @@
 		 */
 		"bRegex": false,
-	
+
 		/**
 		 * Flag to indicate if DataTables is to use its smart filtering or not.
@@ -69216,8 +69216,8 @@
 		"bSmart": true
 	};
-	
-	
-	
-	
+
+
+
+
 	/**
 	 * Template object for the way in which DataTables holds information about
@@ -69233,5 +69233,5 @@
 		 */
 		"nTr": null,
-	
+
 		/**
 		 * Array of TD elements for each row. This is null until the row has been
@@ -69241,5 +69241,5 @@
 		 */
 		"anCells": null,
-	
+
 		/**
 		 * Data object from the original data source for the row. This is either
@@ -69252,5 +69252,5 @@
 		 */
 		"_aData": [],
-	
+
 		/**
 		 * Sorting data cache - this array is ostensibly the same length as the
@@ -69266,5 +69266,5 @@
 		 */
 		"_aSortData": null,
-	
+
 		/**
 		 * Per cell filtering data cache. As per the sort data cache, used to
@@ -69275,5 +69275,5 @@
 		 */
 		"_aFilterData": null,
-	
+
 		/**
 		 * Filtering data cache. This is the same as the cell filtering cache, but
@@ -69286,5 +69286,5 @@
 		 */
 		"_sFilterRow": null,
-	
+
 		/**
 		 * Cache of the class name that DataTables has applied to the row, so we
@@ -69296,5 +69296,5 @@
 		 */
 		"_sRowStripe": "",
-	
+
 		/**
 		 * Denote if the original data source was from the DOM, or the data source
@@ -69307,5 +69307,5 @@
 		 */
 		"src": null,
-	
+
 		/**
 		 * Index in the aoData array. This saves an indexOf lookup when we have the
@@ -69317,6 +69317,6 @@
 		"idx": -1
 	};
-	
-	
+
+
 	/**
 	 * Template object for the column information object in DataTables. This object
@@ -69338,5 +69338,5 @@
 		 */
 		"idx": null,
-	
+
 		/**
 		 * A list of the columns that sorting should occur on when this column
@@ -69349,5 +69349,5 @@
 		 */
 		"aDataSort": null,
-	
+
 		/**
 		 * Define the sorting directions that are applied to the column, in sequence
@@ -69359,5 +69359,5 @@
 		 */
 		"asSorting": null,
-	
+
 		/**
 		 * Flag to indicate if the column is searchable, and thus should be included
@@ -69366,5 +69366,5 @@
 		 */
 		"bSearchable": null,
-	
+
 		/**
 		 * Flag to indicate if the column is sortable or not.
@@ -69372,5 +69372,5 @@
 		 */
 		"bSortable": null,
-	
+
 		/**
 		 * Flag to indicate if the column is currently visible in the table or not
@@ -69378,5 +69378,5 @@
 		 */
 		"bVisible": null,
-	
+
 		/**
 		 * Store for manual type assignment using the `column.type` option. This
@@ -69387,5 +69387,5 @@
 		 */
 		"_sManualType": null,
-	
+
 		/**
 		 * Flag to indicate if HTML5 data attributes should be used as the data
@@ -69396,5 +69396,5 @@
 		 */
 		"_bAttrSrc": false,
-	
+
 		/**
 		 * Developer definable function that is called whenever a cell is created (Ajax source,
@@ -69410,5 +69410,5 @@
 		 */
 		"fnCreatedCell": null,
-	
+
 		/**
 		 * Function to get data from a cell in a column. You should <b>never</b>
@@ -69426,5 +69426,5 @@
 		 */
 		"fnGetData": null,
-	
+
 		/**
 		 * Function to set data for a cell in the column. You should <b>never</b>
@@ -69439,5 +69439,5 @@
 		 */
 		"fnSetData": null,
-	
+
 		/**
 		 * Property to read the value for the cells in the column from the data
@@ -69448,5 +69448,5 @@
 		 */
 		"mData": null,
-	
+
 		/**
 		 * Partner property to mData which is used (only when defined) to get
@@ -69458,5 +69458,5 @@
 		 */
 		"mRender": null,
-	
+
 		/**
 		 * Unique header TH/TD element for this column - this is what the sorting
@@ -69466,5 +69466,5 @@
 		 */
 		"nTh": null,
-	
+
 		/**
 		 * Unique footer TH/TD element for this column (if there is one). Not used
@@ -69475,5 +69475,5 @@
 		 */
 		"nTf": null,
-	
+
 		/**
 		 * The class to apply to all TD elements in the table's TBODY for the column
@@ -69482,5 +69482,5 @@
 		 */
 		"sClass": null,
-	
+
 		/**
 		 * When DataTables calculates the column widths to assign to each column,
@@ -69495,5 +69495,5 @@
 		 */
 		"sContentPadding": null,
-	
+
 		/**
 		 * Allows a default value to be given for a column's data, and will be used
@@ -69504,5 +69504,5 @@
 		 */
 		"sDefaultContent": null,
-	
+
 		/**
 		 * Name for the column, allowing reference to the column by name as well as
@@ -69511,5 +69511,5 @@
 		 */
 		"sName": null,
-	
+
 		/**
 		 * Custom sorting data type - defines which of the available plug-ins in
@@ -69519,5 +69519,5 @@
 		 */
 		"sSortDataType": 'std',
-	
+
 		/**
 		 * Class to be applied to the header element when sorting on this column
@@ -69526,5 +69526,5 @@
 		 */
 		"sSortingClass": null,
-	
+
 		/**
 		 * Class to be applied to the header element when sorting on this column -
@@ -69534,5 +69534,5 @@
 		 */
 		"sSortingClassJUI": null,
-	
+
 		/**
 		 * Title of the column - what is seen in the TH element (nTh).
@@ -69540,5 +69540,5 @@
 		 */
 		"sTitle": null,
-	
+
 		/**
 		 * Column sorting and filtering type
@@ -69547,5 +69547,5 @@
 		 */
 		"sType": null,
-	
+
 		/**
 		 * Width of the column
@@ -69554,5 +69554,5 @@
 		 */
 		"sWidth": null,
-	
+
 		/**
 		 * Width of the column when it was first "encountered"
@@ -69562,6 +69562,6 @@
 		"sWidthOrig": null
 	};
-	
-	
+
+
 	/*
 	 * Developer note: The properties of the object below are given in Hungarian
@@ -69579,5 +69579,5 @@
 	 * installs (therefore is on-hold until v2).
 	 */
-	
+
 	/**
 	 * Initialisation options that can be given to DataTables at initialisation
@@ -69646,6 +69646,6 @@
 		 */
 		"aaData": null,
-	
-	
+
+
 		/**
 		 * If ordering is enabled, then DataTables will perform a first pass sort on
@@ -69676,6 +69676,6 @@
 		 */
 		"aaSorting": [[0,'asc']],
-	
-	
+
+
 		/**
 		 * This parameter is basically identical to the `sorting` parameter, but
@@ -69699,6 +69699,6 @@
 		 */
 		"aaSortingFixed": [],
-	
-	
+
+
 		/**
 		 * DataTables can be instructed to load data to display in the table from a
@@ -69856,6 +69856,6 @@
 		 */
 		"ajax": null,
-	
-	
+
+
 		/**
 		 * This parameter allows you to readily specify the entries in the length drop
@@ -69882,6 +69882,6 @@
 		 */
 		"aLengthMenu": [ 10, 25, 50, 100 ],
-	
-	
+
+
 		/**
 		 * The `columns` option in the initialisation parameter allows you to define
@@ -69897,5 +69897,5 @@
 		 */
 		"aoColumns": null,
-	
+
 		/**
 		 * Very similar to `columns`, `columnDefs` allows you to target a specific
@@ -69918,6 +69918,6 @@
 		 */
 		"aoColumnDefs": null,
-	
-	
+
+
 		/**
 		 * Basically the same as `search`, this parameter defines the individual column
@@ -69945,6 +69945,6 @@
 		 */
 		"aoSearchCols": [],
-	
-	
+
+
 		/**
 		 * An array of CSS classes that should be applied to displayed rows. This
@@ -69966,6 +69966,6 @@
 		 */
 		"asStripeClasses": null,
-	
-	
+
+
 		/**
 		 * Enable or disable automatic column width calculation. This can be disabled
@@ -69986,6 +69986,6 @@
 		 */
 		"bAutoWidth": true,
-	
-	
+
+
 		/**
 		 * Deferred rendering can provide DataTables with a huge speed boost when you
@@ -70009,6 +70009,6 @@
 		 */
 		"bDeferRender": false,
-	
-	
+
+
 		/**
 		 * Replace a DataTable which matches the given selector and replace it with
@@ -70037,6 +70037,6 @@
 		 */
 		"bDestroy": false,
-	
-	
+
+
 		/**
 		 * Enable or disable filtering of data. Filtering in DataTables is "smart" in
@@ -70061,6 +70061,6 @@
 		 */
 		"bFilter": true,
-	
-	
+
+
 		/**
 		 * Enable or disable the table information display. This shows information
@@ -70081,6 +70081,6 @@
 		 */
 		"bInfo": true,
-	
-	
+
+
 		/**
 		 * Allows the end user to select the size of a formatted page from a select
@@ -70100,6 +70100,6 @@
 		 */
 		"bLengthChange": true,
-	
-	
+
+
 		/**
 		 * Enable or disable pagination.
@@ -70118,6 +70118,6 @@
 		 */
 		"bPaginate": true,
-	
-	
+
+
 		/**
 		 * Enable or disable the display of a 'processing' indicator when the table is
@@ -70139,6 +70139,6 @@
 		 */
 		"bProcessing": false,
-	
-	
+
+
 		/**
 		 * Retrieve the DataTables object for the given selector. Note that if the
@@ -70177,6 +70177,6 @@
 		 */
 		"bRetrieve": false,
-	
-	
+
+
 		/**
 		 * When vertical (y) scrolling is enabled, DataTables will force the height of
@@ -70201,6 +70201,6 @@
 		 */
 		"bScrollCollapse": false,
-	
-	
+
+
 		/**
 		 * Configure DataTables to use server-side processing. Note that the
@@ -70223,6 +70223,6 @@
 		 */
 		"bServerSide": false,
-	
-	
+
+
 		/**
 		 * Enable or disable sorting of columns. Sorting of individual columns can be
@@ -70242,6 +70242,6 @@
 		 */
 		"bSort": true,
-	
-	
+
+
 		/**
 		 * Enable or display DataTables' ability to sort multiple columns at the
@@ -70262,6 +70262,6 @@
 		 */
 		"bSortMulti": true,
-	
-	
+
+
 		/**
 		 * Allows control over whether DataTables should use the top (true) unique
@@ -70282,6 +70282,6 @@
 		 */
 		"bSortCellsTop": false,
-	
-	
+
+
 		/**
 		 * Enable or disable the addition of the classes `sorting\_1`, `sorting\_2` and
@@ -70304,6 +70304,6 @@
 		 */
 		"bSortClasses": true,
-	
-	
+
+
 		/**
 		 * Enable or disable state saving. When enabled HTML5 `localStorage` will be
@@ -70329,6 +70329,6 @@
 		 */
 		"bStateSave": false,
-	
-	
+
+
 		/**
 		 * This function is called when a TR element is created (and all TD child
@@ -70357,6 +70357,6 @@
 		 */
 		"fnCreatedRow": null,
-	
-	
+
+
 		/**
 		 * This function is called on every 'draw' event, and allows you to
@@ -70378,6 +70378,6 @@
 		 */
 		"fnDrawCallback": null,
-	
-	
+
+
 		/**
 		 * Identical to fnHeaderCallback() but for the table footer this function
@@ -70406,6 +70406,6 @@
 		 */
 		"fnFooterCallback": null,
-	
-	
+
+
 		/**
 		 * When rendering large numbers in the information element for the table
@@ -70441,6 +70441,6 @@
 			);
 		},
-	
-	
+
+
 		/**
 		 * This function is called on every 'draw' event, and allows you to
@@ -70470,6 +70470,6 @@
 		 */
 		"fnHeaderCallback": null,
-	
-	
+
+
 		/**
 		 * The information element can be used to convey information about the current
@@ -70500,6 +70500,6 @@
 		 */
 		"fnInfoCallback": null,
-	
-	
+
+
 		/**
 		 * Called when the table has been initialised. Normally DataTables will
@@ -70525,6 +70525,6 @@
 		 */
 		"fnInitComplete": null,
-	
-	
+
+
 		/**
 		 * Called at the very start of each table draw and can be used to cancel the
@@ -70551,6 +70551,6 @@
 		 */
 		"fnPreDrawCallback": null,
-	
-	
+
+
 		/**
 		 * This function allows you to 'post process' each row after it have been
@@ -70580,6 +70580,6 @@
 		 */
 		"fnRowCallback": null,
-	
-	
+
+
 		/**
 		 * __Deprecated__ The functionality provided by this parameter has now been
@@ -70606,6 +70606,6 @@
 		 */
 		"fnServerData": null,
-	
-	
+
+
 		/**
 		 * __Deprecated__ The functionality provided by this parameter has now been
@@ -70633,6 +70633,6 @@
 		 */
 		"fnServerParams": null,
-	
-	
+
+
 		/**
 		 * Load the table state. With this function you can define from where, and how, the
@@ -70674,6 +70674,6 @@
 			} catch (e) {}
 		},
-	
-	
+
+
 		/**
 		 * Callback which allows modification of the saved state prior to loading that state.
@@ -70712,6 +70712,6 @@
 		 */
 		"fnStateLoadParams": null,
-	
-	
+
+
 		/**
 		 * Callback that is called when the state has been loaded from the state saving method
@@ -70736,6 +70736,6 @@
 		 */
 		"fnStateLoaded": null,
-	
-	
+
+
 		/**
 		 * Save the table state. This function allows you to define where and how the state
@@ -70775,6 +70775,6 @@
 			} catch (e) {}
 		},
-	
-	
+
+
 		/**
 		 * Callback which allows modification of the state to be saved. Called when the table
@@ -70802,6 +70802,6 @@
 		 */
 		"fnStateSaveParams": null,
-	
-	
+
+
 		/**
 		 * Duration for which the saved state information is considered valid. After this period
@@ -70822,6 +70822,6 @@
 		 */
 		"iStateDuration": 7200,
-	
-	
+
+
 		/**
 		 * When enabled DataTables will not make a request to the server for the first
@@ -70866,6 +70866,6 @@
 		 */
 		"iDeferLoading": null,
-	
-	
+
+
 		/**
 		 * Number of rows to display on a single page when using pagination. If
@@ -70886,6 +70886,6 @@
 		 */
 		"iDisplayLength": 10,
-	
-	
+
+
 		/**
 		 * Define the starting point for data display when using DataTables with
@@ -70907,6 +70907,6 @@
 		 */
 		"iDisplayStart": 0,
-	
-	
+
+
 		/**
 		 * By default DataTables allows keyboard navigation of the table (sorting, paging,
@@ -70930,6 +70930,6 @@
 		 */
 		"iTabIndex": 0,
-	
-	
+
+
 		/**
 		 * Classes that DataTables assigns to the various components and features
@@ -70941,6 +70941,6 @@
 		 */
 		"oClasses": {},
-	
-	
+
+
 		/**
 		 * All strings that DataTables uses in the user interface that it creates
@@ -70981,5 +70981,5 @@
 				 */
 				"sSortAscending": ": activate to sort column ascending",
-	
+
 				/**
 				 * ARIA label that is added to the table headers when the column may be
@@ -71005,5 +71005,5 @@
 				"sSortDescending": ": activate to sort column descending"
 			},
-	
+
 			/**
 			 * Pagination string used by DataTables for the built-in pagination
@@ -71034,6 +71034,6 @@
 				 */
 				"sFirst": "First",
-	
-	
+
+
 				/**
 				 * Text to use when using the 'full_numbers' type of pagination for the
@@ -71057,6 +71057,6 @@
 				 */
 				"sLast": "Last",
-	
-	
+
+
 				/**
 				 * Text to use for the 'next' pagination button (to take the user to the
@@ -71080,6 +71080,6 @@
 				 */
 				"sNext": "Next",
-	
-	
+
+
 				/**
 				 * Text to use for the 'previous' pagination button (to take the user to
@@ -71104,5 +71104,5 @@
 				"sPrevious": "Previous"
 			},
-	
+
 			/**
 			 * This string is shown in preference to `zeroRecords` when the table is
@@ -71126,6 +71126,6 @@
 			 */
 			"sEmptyTable": "No data available in table",
-	
-	
+
+
 			/**
 			 * This string gives information to the end user about the information
@@ -71158,6 +71158,6 @@
 			 */
 			"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-	
-	
+
+
 			/**
 			 * Display information string for when the table is empty. Typically the
@@ -71179,6 +71179,6 @@
 			 */
 			"sInfoEmpty": "Showing 0 to 0 of 0 entries",
-	
-	
+
+
 			/**
 			 * When a user filters the information in a table, this string is appended
@@ -71201,6 +71201,6 @@
 			 */
 			"sInfoFiltered": "(filtered from _MAX_ total entries)",
-	
-	
+
+
 			/**
 			 * If can be useful to append extra information to the info string at times,
@@ -71224,6 +71224,6 @@
 			 */
 			"sInfoPostFix": "",
-	
-	
+
+
 			/**
 			 * This decimal place operator is a little different from the other
@@ -71239,5 +71239,5 @@
 			 * decimal place characters.
 			 *  @type string
-			 *  @default 
+			 *  @default
 			 *
 			 *  @dtopt Language
@@ -71255,6 +71255,6 @@
 			 */
 			"sDecimal": "",
-	
-	
+
+
 			/**
 			 * DataTables has a build in number formatter (`formatNumber`) which is
@@ -71278,6 +71278,6 @@
 			 */
 			"sThousands": ",",
-	
-	
+
+
 			/**
 			 * Detail the action that will be taken when the drop down menu for the
@@ -71319,6 +71319,6 @@
 			 */
 			"sLengthMenu": "Show _MENU_ entries",
-	
-	
+
+
 			/**
 			 * When using Ajax sourced data and during the first draw when DataTables is
@@ -71343,6 +71343,6 @@
 			 */
 			"sLoadingRecords": "Loading...",
-	
-	
+
+
 			/**
 			 * Text which is displayed when the table is processing a user action
@@ -71364,6 +71364,6 @@
 			 */
 			"sProcessing": "Processing...",
-	
-	
+
+
 			/**
 			 * Details the actions that will be taken when the user types into the
@@ -71399,10 +71399,10 @@
 			 */
 			"sSearch": "Search:",
-	
-	
+
+
 			/**
 			 * Assign a `placeholder` attribute to the search `input` element
 			 *  @type string
-			 *  @default 
+			 *  @default
 			 *
 			 *  @dtopt Language
@@ -71410,6 +71410,6 @@
 			 */
 			"sSearchPlaceholder": "",
-	
-	
+
+
 			/**
 			 * All of the language information can be stored in a file on the
@@ -71435,6 +71435,6 @@
 			 */
 			"sUrl": "",
-	
-	
+
+
 			/**
 			 * Text shown inside the table records when the is no information to be
@@ -71458,6 +71458,6 @@
 			"sZeroRecords": "No matching records found"
 		},
-	
-	
+
+
 		/**
 		 * This parameter allows you to have define the global filtering state at
@@ -71482,6 +71482,6 @@
 		 */
 		"oSearch": $.extend( {}, DataTable.models.oSearch ),
-	
-	
+
+
 		/**
 		 * __Deprecated__ The functionality provided by this parameter has now been
@@ -71503,6 +71503,6 @@
 		 */
 		"sAjaxDataProp": "data",
-	
-	
+
+
 		/**
 		 * __Deprecated__ The functionality provided by this parameter has now been
@@ -71522,6 +71522,6 @@
 		 */
 		"sAjaxSource": null,
-	
-	
+
+
 		/**
 		 * This initialisation variable allows you to specify exactly where in the
@@ -71576,6 +71576,6 @@
 		 */
 		"sDom": "lfrtip",
-	
-	
+
+
 		/**
 		 * Search delay option. This will throttle full table searches that use the
@@ -71596,6 +71596,6 @@
 		 */
 		"searchDelay": null,
-	
-	
+
+
 		/**
 		 * DataTables features six different built-in options for the buttons to
@@ -71608,5 +71608,5 @@
 		 * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers
 		 * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers
-		 *  
+		 *
 		 * Further methods can be added using {@link DataTable.ext.oPagination}.
 		 *  @type string
@@ -71624,6 +71624,6 @@
 		 */
 		"sPaginationType": "simple_numbers",
-	
-	
+
+
 		/**
 		 * Enable horizontal scrolling. When a table is too wide to fit into a
@@ -71649,6 +71649,6 @@
 		 */
 		"sScrollX": "",
-	
-	
+
+
 		/**
 		 * This property can be used to force a DataTable to use more width than it
@@ -71673,6 +71673,6 @@
 		 */
 		"sScrollXInner": "",
-	
-	
+
+
 		/**
 		 * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
@@ -71697,6 +71697,6 @@
 		 */
 		"sScrollY": "",
-	
-	
+
+
 		/**
 		 * __Deprecated__ The functionality provided by this parameter has now been
@@ -71715,6 +71715,6 @@
 		 */
 		"sServerMethod": "GET",
-	
-	
+
+
 		/**
 		 * DataTables makes use of renderers when displaying HTML elements for
@@ -71733,6 +71733,6 @@
 		 */
 		"renderer": null,
-	
-	
+
+
 		/**
 		 * Set the data property name that DataTables should use to get a row's id
@@ -71745,14 +71745,14 @@
 		"rowId": "DT_RowId"
 	};
-	
+
 	_fnHungarianMap( DataTable.defaults );
-	
-	
-	
+
+
+
 	/*
 	 * Developer note - See note in model.defaults.js about the use of Hungarian
 	 * notation and camel case.
 	 */
-	
+
 	/**
 	 * Column options that can be given to DataTables at initialisation time.
@@ -71800,6 +71800,6 @@
 		"aDataSort": null,
 		"iDataSort": -1,
-	
-	
+
+
 		/**
 		 * You can control the default ordering direction, and even alter the
@@ -71839,6 +71839,6 @@
 		 */
 		"asSorting": [ 'asc', 'desc' ],
-	
-	
+
+
 		/**
 		 * Enable or disable filtering on the data in this column.
@@ -71872,6 +71872,6 @@
 		 */
 		"bSearchable": true,
-	
-	
+
+
 		/**
 		 * Enable or disable ordering on this column.
@@ -71905,6 +71905,6 @@
 		 */
 		"bSortable": true,
-	
-	
+
+
 		/**
 		 * Enable or disable the display of this column.
@@ -71938,6 +71938,6 @@
 		 */
 		"bVisible": true,
-	
-	
+
+
 		/**
 		 * Developer definable function that is called whenever a cell is created (Ajax source,
@@ -71970,6 +71970,6 @@
 		 */
 		"fnCreatedCell": null,
-	
-	
+
+
 		/**
 		 * This parameter has been replaced by `data` in DataTables to ensure naming
@@ -71979,6 +71979,6 @@
 		 *  @name DataTable.defaults.column.dataProp
 		 */
-	
-	
+
+
 		/**
 		 * This property can be used to read data from any data source property,
@@ -72151,6 +72151,6 @@
 		 */
 		"mData": null,
-	
-	
+
+
 		/**
 		 * This property is the rendering partner to `data` and it is suggested that
@@ -72273,6 +72273,6 @@
 		 */
 		"mRender": null,
-	
-	
+
+
 		/**
 		 * Change the cell type created for the column - either TD cells or TH cells. This
@@ -72297,6 +72297,6 @@
 		 */
 		"sCellType": "td",
-	
-	
+
+
 		/**
 		 * Class to give to each cell in this column.
@@ -72332,5 +72332,5 @@
 		 */
 		"sClass": "",
-	
+
 		/**
 		 * When DataTables calculates the column widths to assign to each column,
@@ -72365,6 +72365,6 @@
 		 */
 		"sContentPadding": "",
-	
-	
+
+
 		/**
 		 * Allows a default value to be given for a column's data, and will be used
@@ -72408,6 +72408,6 @@
 		 */
 		"sDefaultContent": null,
-	
-	
+
+
 		/**
 		 * This parameter is only used in DataTables' server-side processing. It can
@@ -72452,6 +72452,6 @@
 		 */
 		"sName": "",
-	
-	
+
+
 		/**
 		 * Defines a data source type for the ordering which can be used to read
@@ -72494,6 +72494,6 @@
 		 */
 		"sSortDataType": "std",
-	
-	
+
+
 		/**
 		 * The title of this column.
@@ -72530,6 +72530,6 @@
 		 */
 		"sTitle": null,
-	
-	
+
+
 		/**
 		 * The type allows you to specify how the data for this column will be
@@ -72571,6 +72571,6 @@
 		 */
 		"sType": null,
-	
-	
+
+
 		/**
 		 * Defining the width of the column, this parameter may take any CSS value
@@ -72610,9 +72610,9 @@
 		"sWidth": null
 	};
-	
+
 	_fnHungarianMap( DataTable.defaults.column );
-	
-	
-	
+
+
+
 	/**
 	 * DataTables settings object - this holds all the information needed for a
@@ -72643,5 +72643,5 @@
 		 */
 		"oFeatures": {
-	
+
 			/**
 			 * Flag to say if DataTables should automatically try to calculate the
@@ -72652,5 +72652,5 @@
 			 */
 			"bAutoWidth": null,
-	
+
 			/**
 			 * Delay the creation of TR and TD elements until they are actually
@@ -72663,5 +72663,5 @@
 			 */
 			"bDeferRender": null,
-	
+
 			/**
 			 * Enable filtering on the table or not. Note that if this is disabled
@@ -72673,5 +72673,5 @@
 			 */
 			"bFilter": null,
-	
+
 			/**
 			 * Table information element (the 'Showing x of y records' div) enable
@@ -72682,5 +72682,5 @@
 			 */
 			"bInfo": null,
-	
+
 			/**
 			 * Present a user control allowing the end user to change the page size
@@ -72691,5 +72691,5 @@
 			 */
 			"bLengthChange": null,
-	
+
 			/**
 			 * Pagination enabled or not. Note that if this is disabled then length
@@ -72700,5 +72700,5 @@
 			 */
 			"bPaginate": null,
-	
+
 			/**
 			 * Processing indicator enable flag whenever DataTables is enacting a
@@ -72709,5 +72709,5 @@
 			 */
 			"bProcessing": null,
-	
+
 			/**
 			 * Server-side processing enabled flag - when enabled DataTables will
@@ -72719,5 +72719,5 @@
 			 */
 			"bServerSide": null,
-	
+
 			/**
 			 * Sorting enablement flag.
@@ -72727,5 +72727,5 @@
 			 */
 			"bSort": null,
-	
+
 			/**
 			 * Multi-column sorting
@@ -72735,5 +72735,5 @@
 			 */
 			"bSortMulti": null,
-	
+
 			/**
 			 * Apply a class to the columns which are being sorted to provide a
@@ -72745,5 +72745,5 @@
 			 */
 			"bSortClasses": null,
-	
+
 			/**
 			 * State saving enablement flag.
@@ -72754,6 +72754,6 @@
 			"bStateSave": null
 		},
-	
-	
+
+
 		/**
 		 * Scrolling settings for a table.
@@ -72769,5 +72769,5 @@
 			 */
 			"bCollapse": null,
-	
+
 			/**
 			 * Width of the scrollbar for the web-browser's platform. Calculated
@@ -72777,5 +72777,5 @@
 			 */
 			"iBarWidth": 0,
-	
+
 			/**
 			 * Viewport width for horizontal scrolling. Horizontal scrolling is
@@ -72786,5 +72786,5 @@
 			 */
 			"sX": null,
-	
+
 			/**
 			 * Width to expand the table to when using x-scrolling. Typically you
@@ -72796,5 +72796,5 @@
 			 */
 			"sXInner": null,
-	
+
 			/**
 			 * Viewport height for vertical scrolling. Vertical scrolling is disabled
@@ -72806,5 +72806,5 @@
 			"sY": null
 		},
-	
+
 		/**
 		 * Language information for the table.
@@ -72821,5 +72821,5 @@
 			"fnInfoCallback": null
 		},
-	
+
 		/**
 		 * Browser support parameters
@@ -72834,5 +72834,5 @@
 			 */
 			"bScrollOversize": false,
-	
+
 			/**
 			 * Determine if the vertical scrollbar is on the right or left of the
@@ -72843,5 +72843,5 @@
 			 */
 			"bScrollbarLeft": false,
-	
+
 			/**
 			 * Flag for if `getBoundingClientRect` is fully supported or not
@@ -72850,5 +72850,5 @@
 			 */
 			"bBounding": false,
-	
+
 			/**
 			 * Browser scrollbar width
@@ -72858,9 +72858,9 @@
 			"barWidth": 0
 		},
-	
-	
+
+
 		"ajax": null,
-	
-	
+
+
 		/**
 		 * Array referencing the nodes which are used for the features. The
@@ -72878,5 +72878,5 @@
 		 */
 		"aanFeatures": [],
-	
+
 		/**
 		 * Store data information - see {@link DataTable.models.oRow} for detailed
@@ -72886,5 +72886,5 @@
 		 */
 		"aoData": [],
-	
+
 		/**
 		 * Array of indexes which are in the current display (after filtering etc)
@@ -72893,5 +72893,5 @@
 		 */
 		"aiDisplay": [],
-	
+
 		/**
 		 * Array of indexes for display - no filtering
@@ -72900,5 +72900,5 @@
 		 */
 		"aiDisplayMaster": [],
-	
+
 		/**
 		 * Map of row ids to data indexes
@@ -72907,5 +72907,5 @@
 		 */
 		"aIds": {},
-	
+
 		/**
 		 * Store information about each column that is in use
@@ -72914,5 +72914,5 @@
 		 */
 		"aoColumns": [],
-	
+
 		/**
 		 * Store information about the table's header
@@ -72921,5 +72921,5 @@
 		 */
 		"aoHeader": [],
-	
+
 		/**
 		 * Store information about the table's footer
@@ -72928,5 +72928,5 @@
 		 */
 		"aoFooter": [],
-	
+
 		/**
 		 * Store the applied global search information in case we want to force a
@@ -72938,5 +72938,5 @@
 		 */
 		"oPreviousSearch": {},
-	
+
 		/**
 		 * Store the applied search for each column - see
@@ -72947,5 +72947,5 @@
 		 */
 		"aoPreSearchCols": [],
-	
+
 		/**
 		 * Sorting that is applied to the table. Note that the inner arrays are
@@ -72961,5 +72961,5 @@
 		 */
 		"aaSorting": null,
-	
+
 		/**
 		 * Sorting that is always applied to the table (i.e. prefixed in front of
@@ -72971,5 +72971,5 @@
 		 */
 		"aaSortingFixed": [],
-	
+
 		/**
 		 * Classes to use for the striping of a table.
@@ -72980,5 +72980,5 @@
 		 */
 		"asStripeClasses": null,
-	
+
 		/**
 		 * If restoring a table - we should restore its striping classes as well
@@ -72987,5 +72987,5 @@
 		 */
 		"asDestroyStripes": [],
-	
+
 		/**
 		 * If restoring a table - we should restore its width
@@ -72994,5 +72994,5 @@
 		 */
 		"sDestroyWidth": 0,
-	
+
 		/**
 		 * Callback functions array for every time a row is inserted (i.e. on a draw).
@@ -73001,5 +73001,5 @@
 		 */
 		"aoRowCallback": [],
-	
+
 		/**
 		 * Callback functions for the header on each draw.
@@ -73008,5 +73008,5 @@
 		 */
 		"aoHeaderCallback": [],
-	
+
 		/**
 		 * Callback function for the footer on each draw.
@@ -73015,5 +73015,5 @@
 		 */
 		"aoFooterCallback": [],
-	
+
 		/**
 		 * Array of callback functions for draw callback functions
@@ -73022,5 +73022,5 @@
 		 */
 		"aoDrawCallback": [],
-	
+
 		/**
 		 * Array of callback functions for row created function
@@ -73029,5 +73029,5 @@
 		 */
 		"aoRowCreatedCallback": [],
-	
+
 		/**
 		 * Callback functions for just before the table is redrawn. A return of
@@ -73037,5 +73037,5 @@
 		 */
 		"aoPreDrawCallback": [],
-	
+
 		/**
 		 * Callback functions for when the table has been initialised.
@@ -73044,6 +73044,6 @@
 		 */
 		"aoInitComplete": [],
-	
-	
+
+
 		/**
 		 * Callbacks for modifying the settings to be stored for state saving, prior to
@@ -73053,5 +73053,5 @@
 		 */
 		"aoStateSaveParams": [],
-	
+
 		/**
 		 * Callbacks for modifying the settings that have been stored for state saving
@@ -73061,5 +73061,5 @@
 		 */
 		"aoStateLoadParams": [],
-	
+
 		/**
 		 * Callbacks for operating on the settings object once the saved state has been
@@ -73069,5 +73069,5 @@
 		 */
 		"aoStateLoaded": [],
-	
+
 		/**
 		 * Cache the table ID for quick access
@@ -73076,5 +73076,5 @@
 		 */
 		"sTableId": "",
-	
+
 		/**
 		 * The TABLE node for the main table
@@ -73083,5 +73083,5 @@
 		 */
 		"nTable": null,
-	
+
 		/**
 		 * Permanent ref to the thead element
@@ -73090,5 +73090,5 @@
 		 */
 		"nTHead": null,
-	
+
 		/**
 		 * Permanent ref to the tfoot element - if it exists
@@ -73097,5 +73097,5 @@
 		 */
 		"nTFoot": null,
-	
+
 		/**
 		 * Permanent ref to the tbody element
@@ -73104,5 +73104,5 @@
 		 */
 		"nTBody": null,
-	
+
 		/**
 		 * Cache the wrapper node (contains all DataTables controlled elements)
@@ -73111,5 +73111,5 @@
 		 */
 		"nTableWrapper": null,
-	
+
 		/**
 		 * Indicate if when using server-side processing the loading of data
@@ -73121,5 +73121,5 @@
 		 */
 		"bDeferLoading": false,
-	
+
 		/**
 		 * Indicate if all required information has been read in
@@ -73128,5 +73128,5 @@
 		 */
 		"bInitialised": false,
-	
+
 		/**
 		 * Information about open rows. Each object in the array has the parameters
@@ -73136,5 +73136,5 @@
 		 */
 		"aoOpenRows": [],
-	
+
 		/**
 		 * Dictate the positioning of DataTables' control elements - see
@@ -73146,5 +73146,5 @@
 		 */
 		"sDom": null,
-	
+
 		/**
 		 * Search delay (in mS)
@@ -73153,5 +73153,5 @@
 		 */
 		"searchDelay": null,
-	
+
 		/**
 		 * Which type of pagination should be used.
@@ -73162,5 +73162,5 @@
 		 */
 		"sPaginationType": "two_button",
-	
+
 		/**
 		 * The state duration (for `stateSave`) in seconds.
@@ -73171,5 +73171,5 @@
 		 */
 		"iStateDuration": 0,
-	
+
 		/**
 		 * Array of callback functions for state saving. Each array element is an
@@ -73186,5 +73186,5 @@
 		 */
 		"aoStateSave": [],
-	
+
 		/**
 		 * Array of callback functions for state loading. Each array element is an
@@ -73199,5 +73199,5 @@
 		 */
 		"aoStateLoad": [],
-	
+
 		/**
 		 * State that was saved. Useful for back reference
@@ -73206,5 +73206,5 @@
 		 */
 		"oSavedState": null,
-	
+
 		/**
 		 * State that was loaded. Useful for back reference
@@ -73213,5 +73213,5 @@
 		 */
 		"oLoadedState": null,
-	
+
 		/**
 		 * Source url for AJAX data for the table.
@@ -73222,5 +73222,5 @@
 		 */
 		"sAjaxSource": null,
-	
+
 		/**
 		 * Property from a given object from which to read the table data from. This
@@ -73232,5 +73232,5 @@
 		 */
 		"sAjaxDataProp": null,
-	
+
 		/**
 		 * Note if draw should be blocked while getting data
@@ -73239,5 +73239,5 @@
 		 */
 		"bAjaxDataGet": true,
-	
+
 		/**
 		 * The last jQuery XHR object that was used for server-side data gathering.
@@ -73248,5 +73248,5 @@
 		 */
 		"jqXHR": null,
-	
+
 		/**
 		 * JSON returned from the server in the last Ajax request
@@ -73255,5 +73255,5 @@
 		 */
 		"json": undefined,
-	
+
 		/**
 		 * Data submitted as part of the last Ajax request
@@ -73262,5 +73262,5 @@
 		 */
 		"oAjaxData": undefined,
-	
+
 		/**
 		 * Function to get the server-side data.
@@ -73270,5 +73270,5 @@
 		 */
 		"fnServerData": null,
-	
+
 		/**
 		 * Functions which are called prior to sending an Ajax request so extra
@@ -73278,5 +73278,5 @@
 		 */
 		"aoServerParams": [],
-	
+
 		/**
 		 * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
@@ -73287,5 +73287,5 @@
 		 */
 		"sServerMethod": null,
-	
+
 		/**
 		 * Format numbers for display.
@@ -73295,5 +73295,5 @@
 		 */
 		"fnFormatNumber": null,
-	
+
 		/**
 		 * List of options that can be used for the user selectable length menu.
@@ -73304,5 +73304,5 @@
 		 */
 		"aLengthMenu": null,
-	
+
 		/**
 		 * Counter for the draws that the table does. Also used as a tracker for
@@ -73312,5 +73312,5 @@
 		 */
 		"iDraw": 0,
-	
+
 		/**
 		 * Indicate if a redraw is being done - useful for Ajax
@@ -73319,5 +73319,5 @@
 		 */
 		"bDrawing": false,
-	
+
 		/**
 		 * Draw index (iDraw) of the last error when parsing the returned data
@@ -73326,5 +73326,5 @@
 		 */
 		"iDrawError": -1,
-	
+
 		/**
 		 * Paging display length
@@ -73333,5 +73333,5 @@
 		 */
 		"_iDisplayLength": 10,
-	
+
 		/**
 		 * Paging start point - aiDisplay index
@@ -73340,5 +73340,5 @@
 		 */
 		"_iDisplayStart": 0,
-	
+
 		/**
 		 * Server-side processing - number of records in the result set
@@ -73351,5 +73351,5 @@
 		 */
 		"_iRecordsTotal": 0,
-	
+
 		/**
 		 * Server-side processing - number of records in the current display set
@@ -73362,5 +73362,5 @@
 		 */
 		"_iRecordsDisplay": 0,
-	
+
 		/**
 		 * The classes to use for the table
@@ -73369,5 +73369,5 @@
 		 */
 		"oClasses": {},
-	
+
 		/**
 		 * Flag attached to the settings object so you can check in the draw
@@ -73379,5 +73379,5 @@
 		 */
 		"bFiltered": false,
-	
+
 		/**
 		 * Flag attached to the settings object so you can check in the draw
@@ -73389,5 +73389,5 @@
 		 */
 		"bSorted": false,
-	
+
 		/**
 		 * Indicate that if multiple rows are in the header and there is more than
@@ -73399,5 +73399,5 @@
 		 */
 		"bSortCellsTop": null,
-	
+
 		/**
 		 * Initialisation object that is used for the table
@@ -73406,5 +73406,5 @@
 		 */
 		"oInit": null,
-	
+
 		/**
 		 * Destroy callback functions - for plug-ins to attach themselves to the
@@ -73414,6 +73414,6 @@
 		 */
 		"aoDestroyCallback": [],
-	
-	
+
+
 		/**
 		 * Get the number of records in the current record set, before filtering
@@ -73426,5 +73426,5 @@
 				this.aiDisplayMaster.length;
 		},
-	
+
 		/**
 		 * Get the number of records in the current record set, after filtering
@@ -73437,5 +73437,5 @@
 				this.aiDisplay.length;
 		},
-	
+
 		/**
 		 * Get the display end point - aiDisplay index
@@ -73451,5 +73451,5 @@
 				features = this.oFeatures,
 				paginate = features.bPaginate;
-	
+
 			if ( features.bServerSide ) {
 				return paginate === false || len === -1 ?
@@ -73463,5 +73463,5 @@
 			}
 		},
-	
+
 		/**
 		 * The DataTables object for this table
@@ -73470,5 +73470,5 @@
 		 */
 		"oInstance": null,
-	
+
 		/**
 		 * Unique identifier for each instance of the DataTables object. If there
@@ -73479,5 +73479,5 @@
 		 */
 		"sInstance": null,
-	
+
 		/**
 		 * tabindex attribute value that is added to DataTables control elements, allowing
@@ -73485,15 +73485,15 @@
 		 */
 		"iTabIndex": 0,
-	
+
 		/**
 		 * DIV container for the footer scrolling table if scrolling
 		 */
 		"nScrollHead": null,
-	
+
 		/**
 		 * DIV container for the footer scrolling table if scrolling
 		 */
 		"nScrollFoot": null,
-	
+
 		/**
 		 * Last applied sort
@@ -73502,5 +73502,5 @@
 		 */
 		"aLastSort": [],
-	
+
 		/**
 		 * Stored plug-in instances
@@ -73509,5 +73509,5 @@
 		 */
 		"oPlugins": {},
-	
+
 		/**
 		 * Function used to get a row's id from the row's data
@@ -73516,5 +73516,5 @@
 		 */
 		"rowIdFn": null,
-	
+
 		/**
 		 * Data location where to store a row's id
@@ -73535,9 +73535,9 @@
 	 *  @extends DataTable.models.ext
 	 */
-	
-	
+
+
 	/**
 	 * DataTables extensions
-	 * 
+	 *
 	 * This namespace acts as a collection area for plug-ins that can be used to
 	 * extend DataTables capabilities. Indeed many of the build in methods
@@ -73560,6 +73560,6 @@
 		 */
 		buttons: {},
-	
-	
+
+
 		/**
 		 * Element class names
@@ -73569,6 +73569,6 @@
 		 */
 		classes: {},
-	
-	
+
+
 		/**
 		 * DataTables build type (expanded by the download builder)
@@ -73577,9 +73577,9 @@
 		 */
 		build:"bs4/jszip-2.5.0/pdfmake-0.1.36/dt-1.10.20/af-2.3.4/b-1.6.1/b-colvis-1.6.1/b-flash-1.6.1/b-html5-1.6.1/b-print-1.6.1/cr-1.5.2/fc-3.3.0/fh-3.1.6/kt-2.5.1/r-2.2.3/rg-1.1.1/rr-1.2.6/sc-2.0.1/sp-1.0.1/sl-1.3.1",
-	
-	
+
+
 		/**
 		 * Error reporting.
-		 * 
+		 *
 		 * How should DataTables report an error. Can take the value 'alert',
 		 * 'throw', 'none' or a function.
@@ -73589,16 +73589,16 @@
 		 */
 		errMode: "alert",
-	
-	
+
+
 		/**
 		 * Feature plug-ins.
-		 * 
+		 *
 		 * This is an array of objects which describe the feature plug-ins that are
 		 * available to DataTables. These feature plug-ins are then available for
 		 * use through the `dom` initialisation option.
-		 * 
+		 *
 		 * Each feature plug-in is described by an object which must have the
 		 * following properties:
-		 * 
+		 *
 		 * * `fnInit` - function that is used to initialise the plug-in,
 		 * * `cFeature` - a character so the feature can be enabled by the `dom`
@@ -73611,5 +73611,5 @@
 		 *
 		 * And the following return is expected:
-		 * 
+		 *
 		 * * {node|null} The element which contains your feature. Note that the
 		 *   return may also be void if your plug-in does not require to inject any
@@ -73629,9 +73629,9 @@
 		 */
 		feature: [],
-	
-	
+
+
 		/**
 		 * Row searching.
-		 * 
+		 *
 		 * This method of searching is complimentary to the default type based
 		 * searching, and a lot more comprehensive as it allows you complete control
@@ -73690,6 +73690,6 @@
 		 */
 		search: [],
-	
-	
+
+
 		/**
 		 * Selector extensions
@@ -73721,9 +73721,9 @@
 			row: []
 		},
-	
-	
+
+
 		/**
 		 * Internal functions, exposed for used in plug-ins.
-		 * 
+		 *
 		 * Please note that you should not need to use the internal methods for
 		 * anything other than a plug-in (and even then, try to avoid if possible).
@@ -73734,6 +73734,6 @@
 		 */
 		internal: {},
-	
-	
+
+
 		/**
 		 * Legacy configuration options. Enable and disable legacy options that
@@ -73752,9 +73752,9 @@
 			ajax: null
 		},
-	
-	
+
+
 		/**
 		 * Pagination plug-in methods.
-		 * 
+		 *
 		 * Each entry in this object is a function and defines which buttons should
 		 * be shown by the pagination rendering method that is used for the table:
@@ -73800,24 +73800,24 @@
 		 */
 		pager: {},
-	
-	
+
+
 		renderer: {
 			pageButton: {},
 			header: {}
 		},
-	
-	
+
+
 		/**
 		 * Ordering plug-ins - custom data source
-		 * 
+		 *
 		 * The extension options for ordering of data available here is complimentary
 		 * to the default type based ordering that DataTables typically uses. It
 		 * allows much greater control over the the data that is being used to
 		 * order a column, but is necessarily therefore more complex.
-		 * 
+		 *
 		 * This type of ordering is useful if you want to do ordering based on data
 		 * live from the DOM (for example the contents of an 'input' element) rather
 		 * than just the static string that DataTables knows of.
-		 * 
+		 *
 		 * The way these plug-ins work is that you create an array of the values you
 		 * wish to be ordering for the column in question and then return that
@@ -73849,6 +73849,6 @@
 		 */
 		order: {},
-	
-	
+
+
 		/**
 		 * Type based plug-ins.
@@ -73903,6 +73903,6 @@
 			 */
 			detect: [],
-	
-	
+
+
 			/**
 			 * Type based search formatting.
@@ -73914,5 +73914,5 @@
 			 * Note that is a search is not defined for a column of a given type,
 			 * no search formatting will be performed.
-			 * 
+			 *
 			 * Pre-processing of searching data plug-ins - When you assign the sType
 			 * for a column (or have it automatically detected for you by DataTables
@@ -73942,6 +73942,6 @@
 			 */
 			search: {},
-	
-	
+
+
 			/**
 			 * Type based ordering.
@@ -73984,5 +73984,5 @@
 			 *   >0 if the first parameter should be sorted height than the second
 			 *   parameter.
-			 * 
+			 *
 			 *  @type object
 			 *  @default {}
@@ -74010,5 +74010,5 @@
 			order: {}
 		},
-	
+
 		/**
 		 * Unique DataTables instance counter
@@ -74018,6 +74018,6 @@
 		 */
 		_unique: 0,
-	
-	
+
+
 		//
 		// Depreciated
@@ -74026,5 +74026,5 @@
 		// version
 		//
-	
+
 		/**
 		 * Version check function.
@@ -74033,6 +74033,6 @@
 		 */
 		fnVersionCheck: DataTable.fnVersionCheck,
-	
-	
+
+
 		/**
 		 * Index for what 'this' index API functions should use
@@ -74041,6 +74041,6 @@
 		 */
 		iApiIndex: 0,
-	
-	
+
+
 		/**
 		 * jQuery UI class container
@@ -74049,6 +74049,6 @@
 		 */
 		oJUIClasses: {},
-	
-	
+
+
 		/**
 		 * Software version
@@ -74058,6 +74058,6 @@
 		sVersion: DataTable.version
 	};
-	
-	
+
+
 	//
 	// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts
@@ -74074,22 +74074,22 @@
 		oPagination:  _ext.pager
 	} );
-	
-	
+
+
 	$.extend( DataTable.ext.classes, {
 		"sTable": "dataTable",
 		"sNoFooter": "no-footer",
-	
+
 		/* Paging buttons */
 		"sPageButton": "paginate_button",
 		"sPageButtonActive": "current",
 		"sPageButtonDisabled": "disabled",
-	
+
 		/* Striping classes */
 		"sStripeOdd": "odd",
 		"sStripeEven": "even",
-	
+
 		/* Empty row */
 		"sRowEmpty": "dataTables_empty",
-	
+
 		/* Features */
 		"sWrapper": "dataTables_wrapper",
@@ -74099,5 +74099,5 @@
 		"sLength": "dataTables_length",
 		"sProcessing": "dataTables_processing",
-	
+
 		/* Sorting */
 		"sSortAsc": "sorting_asc",
@@ -74108,11 +74108,11 @@
 		"sSortableNone": "sorting_disabled",
 		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
-	
+
 		/* Filtering */
 		"sFilterInput": "",
-	
+
 		/* Page length */
 		"sLengthSelect": "",
-	
+
 		/* Scrolling */
 		"sScrollWrapper": "dataTables_scroll",
@@ -74122,9 +74122,9 @@
 		"sScrollFoot": "dataTables_scrollFoot",
 		"sScrollFootInner": "dataTables_scrollFootInner",
-	
+
 		/* Misc */
 		"sHeaderTH": "",
 		"sFooterTH": "",
-	
+
 		// Deprecated
 		"sSortJUIAsc": "",
@@ -74138,8 +74138,8 @@
 		"sJUIFooter": ""
 	} );
-	
-	
+
+
 	var extPagination = DataTable.ext.pager;
-	
+
 	function _numbers ( page, pages ) {
 		var
@@ -74148,5 +74148,5 @@
 			half = Math.floor( buttons / 2 ),
 			i = 1;
-	
+
 		if ( pages <= buttons ) {
 			numbers = _range( 0, pages );
@@ -74169,43 +74169,43 @@
 			numbers.splice( 0, 0, 0 );
 		}
-	
+
 		numbers.DT_el = 'span';
 		return numbers;
 	}
-	
-	
+
+
 	$.extend( extPagination, {
 		simple: function ( page, pages ) {
 			return [ 'previous', 'next' ];
 		},
-	
+
 		full: function ( page, pages ) {
 			return [  'first', 'previous', 'next', 'last' ];
 		},
-	
+
 		numbers: function ( page, pages ) {
 			return [ _numbers(page, pages) ];
 		},
-	
+
 		simple_numbers: function ( page, pages ) {
 			return [ 'previous', _numbers(page, pages), 'next' ];
 		},
-	
+
 		full_numbers: function ( page, pages ) {
 			return [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];
 		},
-		
+
 		first_last_numbers: function (page, pages) {
 	 		return ['first', _numbers(page, pages), 'last'];
 	 	},
-	
+
 		// For testing and plug-ins to use
 		_numbers: _numbers,
-	
+
 		// Number of number buttons (including ellipsis) to show. _Must be odd!_
 		numbers_length: 7
 	} );
-	
-	
+
+
 	$.extend( true, DataTable.ext.renderer, {
 		pageButton: {
@@ -74215,5 +74215,5 @@
 				var aria = settings.oLanguage.oAria.paginate || {};
 				var btnDisplay, btnClass, counter=0;
-	
+
 				var attach = function( container, buttons ) {
 					var i, ien, node, button, tabIndex;
@@ -74222,8 +74222,8 @@
 						_fnPageChange( settings, e.data.action, true );
 					};
-	
+
 					for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
 						button = buttons[i];
-	
+
 						if ( $.isArray( button ) ) {
 							var inner = $( '<'+(button.DT_el || 'div')+'/>' )
@@ -74235,13 +74235,13 @@
 							btnClass = button;
 							tabIndex = settings.iTabIndex;
-	
+
 							switch ( button ) {
 								case 'ellipsis':
 									container.append('<span class="ellipsis">&#x2026;</span>');
 									break;
-	
+
 								case 'first':
 									btnDisplay = lang.sFirst;
-	
+
 									if ( page === 0 ) {
 										tabIndex = -1;
@@ -74249,8 +74249,8 @@
 									}
 									break;
-	
+
 								case 'previous':
 									btnDisplay = lang.sPrevious;
-	
+
 									if ( page === 0 ) {
 										tabIndex = -1;
@@ -74258,8 +74258,8 @@
 									}
 									break;
-	
+
 								case 'next':
 									btnDisplay = lang.sNext;
-	
+
 									if ( page === pages-1 ) {
 										tabIndex = -1;
@@ -74267,8 +74267,8 @@
 									}
 									break;
-	
+
 								case 'last':
 									btnDisplay = lang.sLast;
-	
+
 									if ( page === pages-1 ) {
 										tabIndex = -1;
@@ -74276,5 +74276,5 @@
 									}
 									break;
-	
+
 								default:
 									btnDisplay = button + 1;
@@ -74283,5 +74283,5 @@
 									break;
 							}
-	
+
 							if ( btnDisplay !== null ) {
 								node = $('<a>', {
@@ -74297,9 +74297,9 @@
 									.html( btnDisplay )
 									.appendTo( container );
-	
+
 								_fnBindAction(
 									node, {action: button}, clickHandler
 								);
-	
+
 								counter++;
 							}
@@ -74307,10 +74307,10 @@
 					}
 				};
-	
+
 				// IE9 throws an 'unknown error' if document.activeElement is used
 				// inside an iframe or frame. Try / catch the error. Not good for
 				// accessibility, but neither are frames.
 				var activeEl;
-	
+
 				try {
 					// Because this approach is destroying and recreating the paging
@@ -74321,7 +74321,7 @@
 				}
 				catch (e) {}
-	
+
 				attach( $(host).empty(), buttons );
-	
+
 				if ( activeEl !== undefined ) {
 					$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
@@ -74330,7 +74330,7 @@
 		}
 	} );
-	
-	
-	
+
+
+
 	// Built in type detection. See model.ext.aTypes for information about
 	// what is required from this methods.
@@ -74343,5 +74343,5 @@
 			return _isNumber( d, decimal ) ? 'num'+decimal : null;
 		},
-	
+
 		// Dates (only those recognised by the browser's Date.parse)
 		function ( d, settings )
@@ -74356,5 +74356,5 @@
 			return (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;
 		},
-	
+
 		// Formatted numbers
 		function ( d, settings )
@@ -74363,5 +74363,5 @@
 			return _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;
 		},
-	
+
 		// HTML numeric
 		function ( d, settings )
@@ -74370,5 +74370,5 @@
 			return _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;
 		},
-	
+
 		// HTML numeric, formatted
 		function ( d, settings )
@@ -74377,5 +74377,5 @@
 			return _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;
 		},
-	
+
 		// HTML (this is strict checking - there must be html)
 		function ( d, settings )
@@ -74385,15 +74385,15 @@
 		}
 	] );
-	
-	
-	
+
+
+
 	// Filter formatting functions. See model.ext.ofnSearch for information about
 	// what is required from these methods.
-	// 
+	//
 	// Note that additional search methods are added for the html numbers and
 	// html formatted numbers by `_addNumericSort()` when we know what the decimal
 	// place is
-	
-	
+
+
 	$.extend( DataTable.ext.type.search, {
 		html: function ( data ) {
@@ -74406,5 +74406,5 @@
 					'';
 		},
-	
+
 		string: function ( data ) {
 			return _empty(data) ?
@@ -74415,12 +74415,12 @@
 		}
 	} );
-	
-	
-	
+
+
+
 	var __numericReplace = function ( d, decimalPlace, re1, re2 ) {
 		if ( d !== 0 && (!d || d === '-') ) {
 			return -Infinity;
 		}
-	
+
 		// If a decimal place other than `.` is used, it needs to be given to the
 		// function so we can detect it and replace with a `.` which is the only
@@ -74429,19 +74429,19 @@
 			d = _numToDecimal( d, decimalPlace );
 		}
-	
+
 		if ( d.replace ) {
 			if ( re1 ) {
 				d = d.replace( re1, '' );
 			}
-	
+
 			if ( re2 ) {
 				d = d.replace( re2, '' );
 			}
 		}
-	
+
 		return d * 1;
 	};
-	
-	
+
+
 	// Add the numeric 'deformatting' functions for sorting and search. This is done
 	// in a function to provide an easy ability for the language options to add
@@ -74454,15 +74454,15 @@
 					return __numericReplace( d, decimalPlace );
 				},
-	
+
 				// Formatted numbers
 				"num-fmt": function ( d ) {
 					return __numericReplace( d, decimalPlace, _re_formatted_numeric );
 				},
-	
+
 				// HTML numeric
 				"html-num": function ( d ) {
 					return __numericReplace( d, decimalPlace, _re_html );
 				},
-	
+
 				// HTML numeric, formatted
 				"html-num-fmt": function ( d ) {
@@ -74473,5 +74473,5 @@
 				// Add the ordering method
 				_ext.type.order[ key+decimalPlace+'-pre' ] = fn;
-	
+
 				// For HTML types add a search formatter that will strip the HTML
 				if ( key.match(/^html\-/) ) {
@@ -74481,6 +74481,6 @@
 		);
 	}
-	
-	
+
+
 	// Default sort methods
 	$.extend( _ext.type.order, {
@@ -74490,5 +74490,5 @@
 			return isNaN(ts) ? -Infinity : ts;
 		},
-	
+
 		// html
 		"html-pre": function ( a ) {
@@ -74499,5 +74499,5 @@
 					a+'';
 		},
-	
+
 		// string
 		"string-pre": function ( a ) {
@@ -74512,5 +74512,5 @@
 						a.toString();
 		},
-	
+
 		// string-asc and -desc are retained only for compatibility with the old
 		// sort methods
@@ -74518,15 +74518,15 @@
 			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
 		},
-	
+
 		"string-desc": function ( x, y ) {
 			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
 		}
 	} );
-	
-	
+
+
 	// Numeric sorting types - order doesn't matter here
 	_addNumericSort( '' );
-	
-	
+
+
 	$.extend( true, DataTable.ext.renderer, {
 		header: {
@@ -74541,7 +74541,7 @@
 						return;               // table, not a nested one
 					}
-	
+
 					var colIdx = column.idx;
-	
+
 					cell
 						.removeClass(
@@ -74557,5 +74557,5 @@
 				} );
 			},
-	
+
 			jqueryui: function ( settings, cell, column, classes ) {
 				$('<div/>')
@@ -74566,5 +74566,5 @@
 					)
 					.appendTo( cell );
-	
+
 				// Attach a sort listener to update on sort
 				$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
@@ -74572,7 +74572,7 @@
 						return;
 					}
-	
+
 					var colIdx = column.idx;
-	
+
 					cell
 						.removeClass( classes.sSortAsc +" "+classes.sSortDesc )
@@ -74582,5 +74582,5 @@
 								column.sSortingClass
 						);
-	
+
 					cell
 						.find( 'span.'+classes.sSortIcon )
@@ -74601,5 +74601,5 @@
 		}
 	} );
-	
+
 	/*
 	 * Public helper functions. These aren't used internally by DataTables, or
@@ -74608,5 +74608,5 @@
 	 * to make working with DataTables a little bit easier.
 	 */
-	
+
 	var __htmlEscapeEntities = function ( d ) {
 		return typeof d === 'string' ?
@@ -74614,5 +74614,5 @@
 			d;
 	};
-	
+
 	/**
 	 * Helpers for `columns.render`.
@@ -74648,8 +74648,8 @@
 						return d;
 					}
-	
+
 					var negative = d < 0 ? '-' : '';
 					var flo = parseFloat( d );
-	
+
 					// If NaN then there isn't much formatting that we can do - just
 					// return immediately, escaping any HTML (this was supposed to
@@ -74658,13 +74658,13 @@
 						return __htmlEscapeEntities( d );
 					}
-	
+
 					flo = flo.toFixed( precision );
 					d = Math.abs( flo );
-	
+
 					var intPart = parseInt( d, 10 );
 					var floatPart = precision ?
 						decimal+(d - intPart).toFixed( precision ).substring( 2 ):
 						'';
-	
+
 					return negative + (prefix||'') +
 						intPart.toString().replace(
@@ -74676,5 +74676,5 @@
 			};
 		},
-	
+
 		text: function () {
 			return {
@@ -74684,12 +74684,12 @@
 		}
 	};
-	
-	
+
+
 	/*
 	 * This is really a good bit rubbish this method of exposing the internal methods
 	 * publicly... - To be fixed in 2.0 using methods on the prototype
 	 */
-	
-	
+
+
 	/**
 	 * Create a wrapper function for exporting an internal functions to an external API.
@@ -74707,6 +74707,6 @@
 		};
 	}
-	
-	
+
+
 	/**
 	 * Reference to internal functions for use by plug-in developers. Note that
@@ -74810,5 +74810,5 @@
 		                                // added to prevent errors
 	} );
-	
+
 
 	// jQuery access
@@ -75160,5 +75160,5 @@
 
 	// IE9 throws an 'unknown error' if document.activeElement is used
-	// inside an iframe or frame. 
+	// inside an iframe or frame.
 	var activeEl;
 
@@ -75241,5 +75241,5 @@
 var _instance = 0;
 
-/** 
+/**
  * AutoFill provides Excel like auto-fill features for a DataTable
  *
@@ -75870,5 +75870,5 @@
 	 */
 	_mousemove: function ( e )
-	{	
+	{
 		var that = this;
 		var dt = this.s.dt;
@@ -75976,5 +75976,5 @@
 
 		this._actionSelector( selected );
-		
+
 		// Stop shiftScroll
 		clearInterval( this.s.scrollInterval );
@@ -75986,5 +75986,5 @@
 	 * Create an array with a range of numbers defined by the start and end
 	 * parameters passed in (inclusive!).
-	 * 
+	 *
 	 * @param  {integer} start Start
 	 * @param  {integer} end   End
@@ -76287,5 +76287,5 @@
 /**
  * AutoFill version
- * 
+ *
  * @static
  * @type      String
@@ -76296,5 +76296,5 @@
 /**
  * AutoFill defaults
- * 
+ *
  * @namespace
  */
@@ -76328,5 +76328,5 @@
 /**
  * Classes used by AutoFill that are configurable
- * 
+ *
  * @namespace
  */
@@ -76506,7 +76506,7 @@
 	// If there is no config set it to an empty object
 	if ( typeof( config ) === 'undefined' ) {
-		config = {};	
+		config = {};
 	}
-	
+
 	// Allow a boolean true for defaults
 	if ( config === true ) {
@@ -76655,5 +76655,5 @@
 		var buttons = this.s.buttons.slice();
 		var i, ien;
-		
+
 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
 			this.remove( buttons[i].node );
@@ -77006,5 +77006,5 @@
 
 			$(dt.table().node()).triggerHandler( 'buttons-action.dt', [
-				dt.button( button ), dt, button, config 
+				dt.button( button ), dt, button, config
 			] );
 		};
@@ -77476,5 +77476,5 @@
 
 			// Right alignment is enabled on a class, e.g. bootstrap:
-			// $.fn.dataTable.Buttons.defaults.dom.collection.className += " dropdown-menu-right"; 
+			// $.fn.dataTable.Buttons.defaults.dom.collection.className += " dropdown-menu-right";
 			if ( display.hasClass( options.rightAlignClassName ) || options.align === 'button-right' ) {
 				display.css( 'left', hostPosition.left + hostNode.outerWidth() - collectionWidth );
@@ -77551,5 +77551,5 @@
  * Show / hide a background layer behind a collection
  * @param  {boolean} Flag to indicate if the background should be shown or
- *   hidden 
+ *   hidden
  * @param  {string} Class to assign to the background
  * @static
@@ -77634,5 +77634,5 @@
 		}
 	};
-	
+
 	process( group );
 
@@ -78362,5 +78362,5 @@
 		} ).toArray() :
 		null;
-	
+
 	// If Select is available on this table, and any rows are selected, limit the export
 	// to the selected rows. If no rows are selected, all rows will be exported. Specify
@@ -79501,5 +79501,5 @@
 
 /**
- * Convert XML documents in an object to strings
+ * Convert XML folders in an object to strings
  * @param  {object} obj XLSX document object
  */
@@ -80138,5 +80138,5 @@
 
 	extension: '.xlsx',
-	
+
 	createEmptyCells: false
 } );
@@ -81377,5 +81377,5 @@
 			$('row:last c', rels).attr( 's', '2' ); // bold
 		}
-	
+
 		dataStartRow = rowPos;
 
@@ -81383,5 +81383,5 @@
 			addRow( data.body[n], rowPos );
 		}
-	
+
 		dataEndRow = rowPos;
 
@@ -83779,5 +83779,5 @@
 	 * tables and get the index position for the data in the main table.
 	 *  @param {node} node TR, TH or TD element to get the information about
-	 *  @returns {int} If nNode is given as a TR, then a single index is 
+	 *  @returns {int} If nNode is given as a TR, then a single index is
 	 *    returned, or if given as a cell, an array of [row index, column index
 	 *    (visible), column index (all)] is given.
@@ -85200,7 +85200,7 @@
 		return this.s.enable;
 	},
-	
+
 	/**
-	 * Set header offset 
+	 * Set header offset
 	 *
 	 * @param  {int} new value for headerOffset
@@ -85215,5 +85215,5 @@
 		return this.c.headerOffset;
 	},
-	
+
 	/**
 	 * Set footer offset
@@ -85231,5 +85231,5 @@
 	},
 
-	
+
 	/**
 	 * Recalculate the position of the fixed elements and force them into place
@@ -85254,5 +85254,5 @@
 	 * Constructor
 	 */
-	
+
 	/**
 	 * FixedHeader constructor - adding the required event listeners and
@@ -85415,5 +85415,5 @@
 	 *
 	 * @param  {string} item       The `header` or `footer`
-	 * @param  {int}    scrollLeft Document scrollLeft
+	 * @param  {int}    scrollLeft Folder scrollLeft
 	 * @private
 	 */
@@ -85439,5 +85439,5 @@
 	 * * `below` - (Header only) Fixed to the bottom of the table body
 	 * * `above` - (Footer only) Fixed to the top of the table body
-	 * 
+	 *
 	 * @param  {string}  mode        Mode that the item should be shown in
 	 * @param  {string}  item        'header' or 'footer'
@@ -85458,5 +85458,5 @@
 			document.activeElement :
 			null;
-		
+
 		if ( focus ) {
 			focus.blur();
@@ -86404,5 +86404,5 @@
 				.indexes()
 				.indexOf( index.row );
-			
+
 			// Don't focus rows that were filtered out.
 			if ( row < 0 ) {
@@ -87766,5 +87766,5 @@
 			}
 		}
-		
+
 		// Show the columns for that break point
 		var columnsVis = this._columnsVisiblity( breakpoint );
@@ -87897,5 +87897,5 @@
 			$(clonedTable).addClass( 'dtr-inline collapsed' );
 		}
-		
+
 		// It is unsafe to insert elements with the same name into the DOM
 		// multiple times. For example, cloning and inserting a checked radio
@@ -87906,5 +87906,5 @@
 		// our container element, bypassing the height and width (Scroller)
 		$( clonedTable ).css( 'position', 'relative' )
-		
+
 		var inserted = $('<div/>')
 			.css( {
@@ -88635,5 +88635,5 @@
 				group = that.c.emptyDataGroup;
 			}
-			
+
 			if ( last === undefined || group !== last ) {
 				data.push( {
@@ -88667,5 +88667,5 @@
 		var dt = this.s.dt;
 		var display;
-	
+
 		for ( var i=0, ien=groups.length ; i<ien ; i++ ) {
 			var group = groups[i];
@@ -88710,5 +88710,5 @@
 	{
 		var row;
-		
+
 		if ( display === null || display === '' ) {
 			display = this.c.emptyDataGroup;
@@ -88718,5 +88718,5 @@
 			return null;
 		}
-		
+
 		if ( typeof display === 'object' && display.nodeName && display.nodeName.toLowerCase() === 'tr') {
 			row = $(display);
@@ -88935,5 +88935,5 @@
  * * `new $.fn.dataTable.RowReorder( table, opts )` after DataTables
  *   initialisation.
- * 
+ *
  *  @class
  *  @param {object} settings DataTables settings object for the host table
@@ -88990,5 +88990,5 @@
 		windowHeight: 0,
 
-		/** @type {integer} Document outer height cached value */
+		/** @type {integer} Folder outer height cached value */
 		documentOuterHeight: 0,
 
@@ -89080,5 +89080,5 @@
 	 * Private methods
 	 */
-	
+
 	/**
 	 * Cache the measurements that RowReorder needs in the mouse move handler
@@ -89395,5 +89395,5 @@
 			}
 		}
-		
+
 		// Create event args
 		var eventArgs = [ fullDiff, {
@@ -89404,5 +89404,5 @@
 			originalEvent: e
 		} ];
-		
+
 		// Emit event
 		this._emitEvent( 'row-reorder', eventArgs );
@@ -89773,5 +89773,5 @@
  *  @global
  *  @param {object} dt DataTables settings object or API instance
- *  @param {object} [opts={}] Configuration object for FixedColumns. Options 
+ *  @param {object} [opts={}] Configuration object for FixedColumns. Options
  *    are defined by {@link Scroller.defaults}
  *
@@ -90011,5 +90011,5 @@
 	pageInfo: function()
 	{
-		var 
+		var
 			dt = this.s.dt,
 			iScrollTop = this.dom.scroller.scrollTop,
@@ -90324,5 +90324,5 @@
             }
 		}
-	
+
 		$('div.'+dt.oClasses.sScrollBody, container).append( nTable );
 
@@ -90453,5 +90453,5 @@
 	 *
 	 *  @param {string} dir Domain transform direction, `virtualToPhysical` or
-	 *    `physicalToVirtual` 
+	 *    `physicalToVirtual`
 	 *  @returns {number} Calculated transform
 	 *  @private
@@ -92294,5 +92294,5 @@
          */
         SearchPanes.prototype.clearSelections = function () {
-            // Load in all of the searchBoxes in the documents
+            // Load in all of the searchBoxes in the folders
             var searches = this.dom.container.find(this.classes.search);
             // For each searchBox set the input text to be empty and then trigger
@@ -93064,5 +93064,5 @@
 			blurable = opts.blurable;
 		}
-		
+
 		if ( opts.toggleable !== undefined ) {
 			toggleable = opts.toggleable;
@@ -93161,5 +93161,5 @@
 ```
 {
-	items:string       - Can be `rows`, `columns` or `cells`. Defines what item 
+	items:string       - Can be `rows`, `columns` or `cells`. Defines what item
 	                     will be selected if the user is allowed to activate row
 	                     selection using the mouse.
@@ -93200,5 +93200,5 @@
  * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1
  * should also be selected (and not 1-3, 1-4. etc)
- * 
+ *
  * @param  {DataTable.Api} dt   DataTable
  * @param  {object}        idx  Cell index to select to
@@ -93217,5 +93217,5 @@
 			start = tmp;
 		}
-		
+
 		var record = false;
 		return dt.columns( ':visible' ).indexes().filter( function (i) {
@@ -93223,5 +93223,5 @@
 				record = true;
 			}
-			
+
 			if ( i === end ) { // not else if, as start might === end
 				record = false;
@@ -93248,5 +93248,5 @@
 				record = true;
 			}
-			
+
 			if ( i === end ) {
 				record = false;
@@ -93444,5 +93444,5 @@
  * Update the information element of the DataTable showing information about the
  * items selected. This is done by adding tags to the existing text
- * 
+ *
  * @param {DataTable.Api} api DataTable to update
  * @private
@@ -93508,5 +93508,5 @@
 	// was selected before the element was created. This will happen with the
 	// `deferRender` option enabled.
-	// 
+	//
 	// This method of attaching to `aoRowCreatedCallback` is a hack until
 	// DataTables has proper events for row manipulation If you are reviewing
@@ -93633,5 +93633,5 @@
 	if ( force || ctx._select.style === 'single' ) {
 		var api = new DataTable.Api( ctx );
-		
+
 		api.rows( { selected: true } ).deselect();
 		api.columns( { selected: true } ).deselect();
@@ -93655,5 +93655,5 @@
 	var toggleable = dt.select.toggleable();
 	var isSelected = dt[type]( idx, { selected: true } ).any();
-	
+
 	if ( isSelected && ! toggleable ) {
 		return;
@@ -93851,5 +93851,5 @@
 		var dt = new DataTable.Api( ctx );
 		disableMouseSelection( dt );
-		
+
 		if ( style !== 'api' ) {
 			enableMouseSelection( dt );
Index: public/vendors/dataTable/pdfmake-0.1.36/pdfmake.js
===================================================================
--- public/vendors/dataTable/pdfmake-0.1.36/pdfmake.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ public/vendors/dataTable/pdfmake-0.1.36/pdfmake.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -6932,5 +6932,5 @@
     var res = encoder.write(str);
     var trail = encoder.end();
-    
+
     return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;
 }
@@ -6972,5 +6972,5 @@
     if (!iconv.encodings)
         iconv.encodings = __webpack_require__(171); // Lazy load all encoding definitions.
-    
+
     // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.
     var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, "");
@@ -6996,5 +6996,5 @@
                 if (!codecOptions.encodingName)
                     codecOptions.encodingName = enc;
-                
+
                 enc = codecDef.type;
                 break;
@@ -7486,5 +7486,5 @@
   UnicodeTrie = __webpack_require__(43);
 
-  
+
 
   base64 = __webpack_require__(131);
@@ -7660,8 +7660,8 @@
   this.tag = 0;
   this.bitcount = 0;
-  
+
   this.dest = dest;
   this.destLen = 0;
-  
+
   this.ltree = new Tree();  /* dynamic length/symbol tree */
   this.dtree = new Tree();  /* dynamic distance tree */
@@ -7805,5 +7805,5 @@
     d.bitcount += 8;
   }
-  
+
   var sum = 0, cur = 0, len = 0;
   var tag = d.tag;
@@ -7818,5 +7818,5 @@
     cur -= t.table[len];
   } while (cur >= 0);
-  
+
   d.tag = tag;
   d.bitcount -= len;
@@ -7929,5 +7929,5 @@
   var length, invlength;
   var i;
-  
+
   /* unread from bitbuffer */
   while (d.bitcount > 8) {
@@ -8002,5 +8002,5 @@
       return d.dest.subarray(0, d.destLen);
   }
-  
+
   return d.dest;
 }
@@ -11509,15 +11509,15 @@
     return 16;
   }
-  
+
   n = br.readBits(3);
   if (n > 0) {
     return 17 + n;
   }
-  
+
   n = br.readBits(3);
   if (n > 0) {
     return 8 + n;
   }
-  
+
   return 17;
 }
@@ -11544,30 +11544,30 @@
 
 function DecodeMetaBlockLength(br) {
-  var out = new MetaBlockLength;  
+  var out = new MetaBlockLength;
   var size_nibbles;
   var size_bytes;
   var i;
-  
+
   out.input_end = br.readBits(1);
   if (out.input_end && br.readBits(1)) {
     return out;
   }
-  
+
   size_nibbles = br.readBits(2) + 4;
   if (size_nibbles === 7) {
     out.is_metadata = true;
-    
+
     if (br.readBits(1) !== 0)
       throw new Error('Invalid reserved bit');
-    
+
     size_bytes = br.readBits(2);
     if (size_bytes === 0)
       return out;
-    
+
     for (i = 0; i < size_bytes; i++) {
       var next_byte = br.readBits(8);
       if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)
         throw new Error('Invalid size byte');
-      
+
       out.meta_block_length |= next_byte << (i * 8);
     }
@@ -11577,15 +11577,15 @@
       if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)
         throw new Error('Invalid size nibble');
-      
+
       out.meta_block_length |= next_nibble << (i * 4);
     }
   }
-  
+
   ++out.meta_block_length;
-  
+
   if (!out.input_end && !out.is_metadata) {
     out.is_uncompressed = br.readBits(1);
   }
-  
+
   return out;
 }
@@ -11594,5 +11594,5 @@
 function ReadSymbol(table, index, br) {
   var start_index = index;
-  
+
   var nbits;
   br.fillBitWindow();
@@ -11614,9 +11614,9 @@
   var repeat_code_len = 0;
   var space = 32768;
-  
+
   var table = [];
   for (var i = 0; i < 32; i++)
     table.push(new HuffmanCode(0, 0));
-  
+
   BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);
 
@@ -11624,5 +11624,5 @@
     var p = 0;
     var code_len;
-    
+
     br.readMoreInput();
     br.fillBitWindow();
@@ -11659,10 +11659,10 @@
         throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');
       }
-      
+
       for (var x = 0; x < repeat_delta; x++)
         code_lengths[symbol + x] = repeat_code_len;
-      
+
       symbol += repeat_delta;
-      
+
       if (repeat_code_len !== 0) {
         space -= repeat_delta << (15 - repeat_code_len);
@@ -11673,5 +11673,5 @@
     throw new Error("[ReadHuffmanCodeLengths] space = " + space);
   }
-  
+
   for (; symbol < num_symbols; symbol++)
     code_lengths[symbol] = 0;
@@ -11682,7 +11682,7 @@
   var simple_code_or_skip;
   var code_lengths = new Uint8Array(alphabet_size);
-  
+
   br.readMoreInput();
-  
+
   /* simple_code_or_skip is used as follows:
      1 for simple code;
@@ -11720,5 +11720,5 @@
           throw new Error('[ReadHuffmanCode] invalid symbols');
         }
-        
+
         code_lengths[symbols[1]] = 1;
         break;
@@ -11732,5 +11732,5 @@
           throw new Error('[ReadHuffmanCode] invalid symbols');
         }
-        
+
         if (br.readBits(1)) {
           code_lengths[symbols[2]] = 3;
@@ -11748,7 +11748,7 @@
     /* Static Huffman code for the code length code lengths */
     var huff = [
-      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), 
+      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
       new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),
-      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), 
+      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
       new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)
     ];
@@ -11767,17 +11767,17 @@
       }
     }
-    
+
     if (!(num_codes === 1 || space === 0))
       throw new Error('[ReadHuffmanCode] invalid num_codes or space');
-    
+
     ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);
   }
-  
+
   table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);
-  
+
   if (table_size === 0) {
     throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");
   }
-  
+
   return table_size;
 }
@@ -11827,5 +11827,5 @@
   this.alphabet_size = alphabet_size;
   this.num_htrees = num_htrees;
-  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);  
+  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);
   this.htrees = new Uint32Array(num_htrees);
 }
@@ -11848,5 +11848,5 @@
   var table;
   var i;
-  
+
   br.readMoreInput();
   var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;
@@ -11861,12 +11861,12 @@
     max_run_length_prefix = br.readBits(4) + 1;
   }
-  
+
   table = [];
   for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {
     table[i] = new HuffmanCode(0, 0);
   }
-  
+
   ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);
-  
+
   for (i = 0; i < context_map_size;) {
     var code;
@@ -11894,5 +11894,5 @@
     InverseMoveToFrontTransform(context_map, context_map_size);
   }
-  
+
   return out;
 }
@@ -11955,5 +11955,5 @@
     for (var x = 0; x < tail; x++)
       ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
-    
+
     nbytes -= tail;
     rb_pos += tail;
@@ -11964,5 +11964,5 @@
   for (var x = 0; x < nbytes; x++)
     ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
-  
+
   rb_pos += nbytes;
   len -= nbytes;
@@ -11972,5 +11972,5 @@
   if (rb_pos >= rb_size) {
     output.write(ringbuffer, rb_size);
-    rb_pos -= rb_size;    
+    rb_pos -= rb_size;
     for (var x = 0; x < rb_pos; x++)
       ringbuffer[x] = ringbuffer[rb_size + x];
@@ -12020,18 +12020,18 @@
 function BrotliDecompressBuffer(buffer, output_size) {
   var input = new BrotliInput(buffer);
-  
+
   if (output_size == null) {
     output_size = BrotliDecompressedSize(buffer);
   }
-  
+
   var output_buffer = new Uint8Array(output_size);
   var output = new BrotliOutput(output_buffer);
-  
+
   BrotliDecompress(input, output);
-  
+
   if (output.pos < output.buffer.length) {
     output.buffer = output.buffer.subarray(0, output.pos);
   }
-  
+
   return output.buffer;
 }
@@ -12120,5 +12120,5 @@
 
     br.readMoreInput();
-    
+
     var _out = DecodeMetaBlockLength(br);
     meta_block_remaining_len = _out.meta_block_length;
@@ -12128,11 +12128,11 @@
       tmp.set( output.buffer );
       output.buffer = tmp;
-    }    
+    }
     input_end = _out.input_end;
     is_uncompressed = _out.is_uncompressed;
-    
+
     if (_out.is_metadata) {
       JumpToByteBoundary(br);
-      
+
       for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {
         br.readMoreInput();
@@ -12140,12 +12140,12 @@
         br.readBits(8);
       }
-      
+
       continue;
     }
-    
+
     if (meta_block_remaining_len === 0) {
       continue;
     }
-    
+
     if (is_uncompressed) {
       br.bit_pos_ = (br.bit_pos_ + 7) & ~7;
@@ -12155,5 +12155,5 @@
       continue;
     }
-    
+
     for (i = 0; i < 3; ++i) {
       num_block_types[i] = DecodeVarLenUint8(br) + 1;
@@ -12165,7 +12165,7 @@
       }
     }
-    
+
     br.readMoreInput();
-    
+
     distance_postfix_bits = br.readBits(2);
     num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);
@@ -12178,13 +12178,13 @@
        context_modes[i] = (br.readBits(2) << 1);
     }
-    
+
     var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);
     num_literal_htrees = _o1.num_htrees;
     context_map = _o1.context_map;
-    
+
     var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);
     num_dist_htrees = _o2.num_htrees;
     dist_context_map = _o2.context_map;
-    
+
     hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);
     hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);
@@ -12216,5 +12216,5 @@
 
       br.readMoreInput();
-      
+
       if (block_length[1] === 0) {
         DecodeBlockType(num_block_types[1],
@@ -12272,5 +12272,5 @@
       if (distance_code < 0) {
         var context;
-        
+
         br.readMoreInput();
         if (block_length[2] === 0) {
@@ -12334,5 +12334,5 @@
             if (copy_dst >= ringbuffer_end) {
               output.write(ringbuffer, ringbuffer_size);
-              
+
               for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)
                 ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];
@@ -12399,8 +12399,8 @@
     count = this.buffer.length - this.pos;
   }
-  
+
   for (var p = 0; p < count; p++)
     buf[i + p] = this.buffer[this.pos + p];
-  
+
   this.pos += count;
   return count;
@@ -12417,5 +12417,5 @@
   if (this.pos + count > this.buffer.length)
     throw new Error('Output buffer is not large enough');
-  
+
   this.buffer.set(buf.subarray(0, count), this.pos);
   this.pos += count;
@@ -12549,5 +12549,5 @@
     }
   }
-  
+
   table_bits = root_bits;
   table_size = 1 << table_bits;
@@ -12559,5 +12559,5 @@
       root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);
     }
-    
+
     return total_size;
   }
@@ -12592,5 +12592,5 @@
     }
   }
-  
+
   return total_size;
 }
@@ -12604,5 +12604,5 @@
 
 /*
-PDFImage - embeds images in PDF documents
+PDFImage - embeds images in PDF folders
 By Devon Govett
  */
@@ -13139,5 +13139,5 @@
  * var docDefinition = {
  * 	info: {
- *		title: 'awesome Document',
+ *		title: 'awesome Folder',
  *		author: 'john doe',
  *		subject: 'subject of document',
@@ -25518,5 +25518,5 @@
       this._font = null;
       this._registeredFonts = {};
-      
+
     },
     font: function(src, family, size) {
@@ -26017,5 +26017,5 @@
 
 // ISO (deprecated)
-[], { // windows                                        
+[], { // windows
   0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn',
   0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si',
@@ -33419,5 +33419,5 @@
  *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.
  *
- * This logic is based on the following documents:
+ * This logic is based on the following folders:
  *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm
  *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf
@@ -40790,5 +40790,5 @@
 ];
 
-// Put all encoding/alias/codec definitions to single object and export it. 
+// Put all encoding/alias/codec definitions to single object and export it.
 for (var i = 0; i < modules.length; i++) {
     var module = modules[i];
@@ -40942,5 +40942,5 @@
 
 InternalDecoderCesu8.prototype.write = function(buf) {
-    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, 
+    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes,
         res = '';
     for (var i = 0; i < buf.length; i++) {
@@ -41116,5 +41116,5 @@
         this.initialBytes.push(buf);
         this.initialBytesLen += buf.length;
-        
+
         if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)
             return '';
@@ -41212,6 +41212,6 @@
     // Non-direct chars are encoded as "+<base64>-"; single "+" char is encoded as "+-".
     return new Buffer(str.replace(nonDirectChars, function(chunk) {
-        return "+" + (chunk === '+' ? '' : 
-            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) 
+        return "+" + (chunk === '+' ? '' :
+            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, ''))
             + "-";
     }.bind(this)));
@@ -41235,5 +41235,5 @@
     base64Chars[i] = base64Regex.test(String.fromCharCode(i));
 
-var plusChar = '+'.charCodeAt(0), 
+var plusChar = '+'.charCodeAt(0),
     minusChar = '-'.charCodeAt(0),
     andChar = '&'.charCodeAt(0);
@@ -41484,5 +41484,5 @@
 
 // Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that
-// correspond to encoded bytes (if 128 - then lower half is ASCII). 
+// correspond to encoded bytes (if 128 - then lower half is ASCII).
 
 exports._sbcs = SBCSCodec;
@@ -41490,9 +41490,9 @@
     if (!codecOptions)
         throw new Error("SBCS codec is called without the data.")
-    
+
     // Prepare char buffer for decoding.
     if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))
         throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)");
-    
+
     if (codecOptions.chars.length === 128) {
         var asciiString = "";
@@ -41503,5 +41503,5 @@
 
     this.decodeBuf = new Buffer(codecOptions.chars, 'ucs2');
-    
+
     // Encoding buffer.
     var encodeBuf = new Buffer(65536);
@@ -41526,5 +41526,5 @@
     for (var i = 0; i < str.length; i++)
         buf[i] = this.encodeBuf[str.charCodeAt(i)];
-    
+
     return buf;
 }
@@ -42259,5 +42259,5 @@
     this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.
 
-    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. 
+    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here.
     this.decodeTableSeq = [];
 
@@ -42268,5 +42268,5 @@
     this.defaultCharUnicode = iconv.defaultCharUnicode;
 
-    
+
     // Encode tables: Unicode -> DBCS.
 
@@ -42277,5 +42277,5 @@
     //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.
     this.encodeTable = [];
-    
+
     // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of
     // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key
@@ -42295,5 +42295,5 @@
                     skipEncodeChars[j] = true;
         }
-        
+
     // Use decode trie to recursively fill out encode tables.
     this._fillEncodeTable(0, 0, skipEncodeChars);
@@ -42332,5 +42332,5 @@
         for (var i = 0x30; i <= 0x39; i++)
             fourthByteNode[i] = GB18030_CODE
-    }        
+    }
 }
 
@@ -42397,5 +42397,5 @@
                     writeTable[curAddr++] = code; // Basic char
             }
-        } 
+        }
         else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character.
             var charCode = writeTable[curAddr - 1] + 1;
@@ -42428,5 +42428,5 @@
 
 DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
-    
+
     // Get the root of character tree according to first character of the sequence.
     var uCode = seq[0];
@@ -42489,5 +42489,5 @@
     this.leadSurrogate = -1;
     this.seqObj = undefined;
-    
+
     // Static data
     this.encodeTable = codec.encodeTable;
@@ -42498,5 +42498,5 @@
 
 DBCSEncoder.prototype.write = function(str) {
-    var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)), 
+    var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)),
         leadSurrogate = this.leadSurrogate,
         seqObj = this.seqObj, nextChar = -1,
@@ -42511,5 +42511,5 @@
         else {
             var uCode = nextChar;
-            nextChar = -1;    
+            nextChar = -1;
         }
 
@@ -42533,5 +42533,5 @@
                     uCode = UNASSIGNED;
                 }
-                
+
             }
         }
@@ -42574,5 +42574,5 @@
             if (subtable !== undefined)
                 dbcsCode = subtable[uCode & 0xFF];
-            
+
             if (dbcsCode <= SEQ_START) { // Sequence start
                 seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];
@@ -42597,5 +42597,5 @@
         if (dbcsCode === UNASSIGNED)
             dbcsCode = this.defaultCharSingleByte;
-        
+
         if (dbcsCode < 0x100) {
             newBuf[j++] = dbcsCode;
@@ -42644,5 +42644,5 @@
         this.leadSurrogate = -1;
     }
-    
+
     return newBuf.slice(0, j);
 }
@@ -42668,5 +42668,5 @@
 DBCSDecoder.prototype.write = function(buf) {
     var newBuf = new Buffer(buf.length*2),
-        nodeIdx = this.nodeIdx, 
+        nodeIdx = this.nodeIdx,
         prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,
         seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.
@@ -42675,5 +42675,5 @@
     if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.
         prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);
-    
+
     for (var i = 0, j = 0; i < buf.length; i++) {
         var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];
@@ -42682,5 +42682,5 @@
         var uCode = this.decodeTables[nodeIdx][curByte];
 
-        if (uCode >= 0) { 
+        if (uCode >= 0) {
             // Normal character, just use it.
         }
@@ -42714,5 +42714,5 @@
 
         // Write the character to buffer, handling higher planes using surrogate pair.
-        if (uCode > 0xFFFF) { 
+        if (uCode > 0xFFFF) {
             uCode -= 0x10000;
             var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);
@@ -42784,9 +42784,9 @@
 
 module.exports = {
-    
+
     // == Japanese/ShiftJIS ====================================================
     // All japanese encodings are based on JIS X set of standards:
     // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
-    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. 
+    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.
     //              Has several variations in 1978, 1983, 1990 and 1997.
     // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
@@ -42806,5 +42806,5 @@
     //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
     //               Used as-is in ISO2022 family.
-    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, 
+    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,
     //                0201-1976 Roman, 0208-1978, 0208-1983.
     //  * ISO2022-JP-1: Adds esc seq for 0212-1990.
@@ -42918,5 +42918,5 @@
     //  * Big5-2003 (Taiwan standard) almost superset of cp950.
     //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
-    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. 
+    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.
     //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
     //    Plus, it has 4 combining sequences.
@@ -42929,5 +42929,5 @@
     //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
     //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
-    // 
+    //
     // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
     // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
@@ -42998,5 +42998,5 @@
 // == Exports ==================================================================
 module.exports = function(iconv) {
-    
+
     // Additional Public API.
     iconv.encodeStream = function encodeStream(encoding, options) {
@@ -43093,5 +43093,5 @@
     try {
         var res = this.conv.end();
-        if (res && res.length) this.push(res, this.encoding);                
+        if (res && res.length) this.push(res, this.encoding);
         done();
     }
@@ -43141,5 +43141,5 @@
 
         var nodeNativeEncodings = {
-            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, 
+            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true,
             'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,
         };
@@ -46996,5 +46996,5 @@
   this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);
   this.input_ = input;    /* input callback */
-  
+
   this.reset();
 }
@@ -47010,5 +47010,5 @@
   this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */
   this.eos_ = 0;          /* input stream is finished */
-  
+
   this.readMoreInput();
   for (var i = 0; i < 4; i++) {
@@ -47016,5 +47016,5 @@
     ++this.pos_;
   }
-  
+
   return this.bit_end_pos_ > 0;
 };
@@ -47044,5 +47044,5 @@
       throw new Error('Unexpected end of input');
     }
-    
+
     if (bytes_read < BROTLI_READ_SIZE) {
       this.eos_ = 1;
@@ -47051,5 +47051,5 @@
         this.buf_[dst + bytes_read + p] = 0;
     }
-    
+
     if (dst === 0) {
       /* Copy the head of the ringbuffer to the slack region. */
@@ -47061,5 +47061,5 @@
       this.buf_ptr_ = 0;
     }
-    
+
     this.bit_end_pos_ += bytes_read << 3;
   }
@@ -47067,5 +47067,5 @@
 
 /* Guarantees that there are at least 24 bits in the buffer. */
-BrotliBitReader.prototype.fillBitWindow = function() {    
+BrotliBitReader.prototype.fillBitWindow = function() {
   while (this.bit_pos_ >= 8) {
     this.val_ >>>= 8;
@@ -47082,5 +47082,5 @@
     this.fillBitWindow();
   }
-  
+
   var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);
   this.bit_pos_ += n_bits;
@@ -47099,8 +47099,8 @@
 
 /**
- * The normal dictionary-data.js is quite large, which makes it 
- * unsuitable for browser usage. In order to make it smaller, 
+ * The normal dictionary-data.js is quite large, which makes it
+ * unsuitable for browser usage. In order to make it smaller,
  * we read dictionary.bin, which is a compressed version of
- * the dictionary, and on initial load, Brotli decompresses 
+ * the dictionary, and on initial load, Brotli decompresses
  * it's own dictionary. 😜
  */
@@ -47613,8 +47613,8 @@
   this.transform = transform;
   this.suffix = new Uint8Array(suffix.length);
-  
+
   for (var i = 0; i < prefix.length; i++)
     this.prefix[i] = prefix.charCodeAt(i);
-  
+
   for (var i = 0; i < suffix.length; i++)
     this.suffix[i] = suffix.charCodeAt(i);
@@ -47755,5 +47755,5 @@
     return 1;
   }
-  
+
   /* An overly simplified uppercasing model for utf-8. */
   if (p[i] < 0xe0) {
@@ -47761,5 +47761,5 @@
     return 2;
   }
-  
+
   /* An arbitrary transform for three byte characters. */
   p[i + 2] ^= 5;
@@ -47775,27 +47775,27 @@
   var start_idx = idx;
   var uppercase;
-  
+
   if (skip > len) {
     skip = len;
   }
-  
+
   var prefix_pos = 0;
   while (prefix_pos < prefix.length) {
     dst[idx++] = prefix[prefix_pos++];
   }
-  
+
   word += skip;
   len -= skip;
-  
+
   if (t <= kOmitLast9) {
     len -= t;
   }
-  
+
   for (i = 0; i < len; i++) {
     dst[idx++] = BrotliDictionary.dictionary[word + i];
   }
-  
+
   uppercase = idx - len;
-  
+
   if (t === kUppercaseFirst) {
     ToUpperCase(dst, uppercase);
@@ -47807,10 +47807,10 @@
     }
   }
-  
+
   var suffix_pos = 0;
   while (suffix_pos < suffix.length) {
     dst[idx++] = suffix[suffix_pos++];
   }
-  
+
   return idx - start_idx;
 }
@@ -49545,18 +49545,18 @@
 # MIT LICENSE
 # Copyright (c) 2011 Devon Govett
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy of this 
-# software and associated documentation files (the "Software"), to deal in the Software 
-# without restriction, including without limitation the rights to use, copy, modify, merge, 
-# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy of this
+# software and associated documentation files (the "Software"), to deal in the Software
+# without restriction, including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
 # to whom the Software is furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in all copies or 
+#
+# The above copyright notice and this permission notice shall be included in all copies or
 # substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
-# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
Index: resources/assets/js/custom.js
===================================================================
--- resources/assets/js/custom.js	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ resources/assets/js/custom.js	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -7,11 +7,19 @@
     });
 
-    $(".edit_document_deparment").change(function() {
+    $(".edit_folder_deparment").change(function() {
         var archId = $("input[name='arch_id']");
         var currentText = archId.val().split("/")[1];
         var selectedId = $(this).find('option:selected').data('dept-code');
+
         if(currentText)
             archId.val(selectedId + "/" + currentText);
         else
+            archId.val(selectedId + "/");
+    });
+
+    $(".new_folder_deparment").change(function() {
+        var archId = $("input[name='arch_id']");
+        var selectedId = $(this).find('option:selected').data('dept-code');
+
             archId.val(selectedId + "/");
     });
@@ -99,4 +107,57 @@
         window.location.href = (window.location.href).replace('#', '');
     });
+
+    function notifications() {
+
+        var url = "/dashboard/get-notifications";
+        var _token = $("meta[name='csrf-token']").attr("content");
+
+        $.ajax({
+            url: url,
+            type: "post",
+            dataType: "json",
+            data: {
+                _token : _token,
+            },
+            success: function(response) {
+
+                $(".dropdown-notifications a:not(:last)").remove();
+                $(".dropdown-notifications-unread .nav-unread").hide();
+
+                var l = response.length;
+
+                if(hasNew(response)) {
+                    $(".dropdown-notifications .unreadNotificationsInfo").hide();
+                    $(".dropdown-notifications-unread .nav-unread").show();
+                }
+
+                if(l == 0) {
+                    $(".dropdown-notifications .unreadNotificationsInfo").show();
+                }
+
+                if(l > 0) {
+                    $(".dropdown-notifications .unreadNotificationsInfo").hide();
+                }
+
+                for(var i=0; i<l; i++) {
+
+                    var style = response[i].isRead ? "" : "background: #efefef; color: black;";
+
+                    var notificationItem = `
+						<a href="` + response[i].url + `" class="dropdown-item d-flex" style="` + style + `;">
+							<div>
+								` + response[i].message + `
+								<div class="small text-muted">` + response[i].ago + `</div>
+							</div>
+						</a>`;
+
+                    $(".dropdown-notifications").prepend(notificationItem);
+                }
+            },
+            error: function(response) {
+                console.log(response);
+            }
+        });
+    }
 
     $(document).on('click', '#btn-layout-builder', function () {
Index: resources/views/dashboard/departments/index.blade.php
===================================================================
--- resources/views/dashboard/departments/index.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ resources/views/dashboard/departments/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -16,5 +16,5 @@
             <ol class="breadcrumb">
                 <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard/departments') }}">Departments</a>
+                    <a href="{{ url('/') }}">Dashboard</a>
                 </li>
                 <li class="breadcrumb-item active" aria-current="page">Departments</li>
@@ -24,4 +24,7 @@
             <a href="javascript:void(0)" data-toggle="modal" data-target="#createModal" class="btn btn-primary text-white">
                 Add department
+            </a>
+            <a href="{{ route("dashboard.departments.downloadAll") }}" class="btn btn-danger text-white">
+                <i class="fa fa-download pr-1"></i> Download files
             </a>
         </div>
@@ -41,4 +44,5 @@
                                 <th>Name</th>
                                 <th>Code</th>
+                                <th>Folders</th>
                                 <th>Created by</th>
                                 <th>Created at</th>
@@ -55,4 +59,5 @@
                                     <td>{{ $department->name }}</td>
                                     <td>{{ $department->code }}</td>
+                                    <td>{{ $department->folder->count() }}</td>
                                     <td>{{ $department->getCreatedByName() }}</td>
                                     <td>{{ date('d.m.Y - H:i', strtotime($department->created_at)) }}</td>
@@ -63,14 +68,15 @@
                                     @endif
                                     <!-- Trigger -->
-                                    <td>{{ $department->location }}
-                                            <button class="btn btn-sm btn-primary text-white" data-clipboard-target="#copy_{{ $department->id }}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+                                    <td><button data-clipboard-text="{{$department->location}}" class="btn btn-sm btn-primary text-white" data-toggle="tooltip" data-placement="right" title="{{$department->location}}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
                                                     <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
                                                     <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
                                                 </svg></button>
-                                        <span type="hidden" id="copy_{{$department->id}}"></span>
                                     </td>
                                     <td>
                                         <a href="javascript:void(0)" class="text-secondary" data-toggle="modal" data-target="#editModal_{{$department->id}}" title="Edit">
                                             <i class="ti-pencil"></i>
+                                        </a>
+                                        <a href="{{ route("dashboard.departments.downloadDepartment", ['id' => $department->id]) }}" class="text-danger ml-2"title="Delete">
+                                            <i class="ti-download"></i>
                                         </a>
                                         <a href="javascript:void(0)" class="text-danger ml-2" data-toggle="modal" data-target="#deleteModal_{{$department->id}}" title="Delete">
@@ -93,5 +99,5 @@
                                                     @method('DELETE')
                                                     <p>Are you sure you want to delete department {{$department->name}} with code: {{$department->code}}?</p>
-                                                    <p>Number of documents associated: {{$department->document()->count()}}</p>
+                                                    <p>Number of documents associated: <a href="{{ route("dashboard.folders.index", ['id' => $department->id]) }}" class="text-linkedin">{{$department->folder()->count()}}</a></p>
                                                     <div class="modal-footer">
                                                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
@@ -133,5 +139,10 @@
                                                         </div>
                                                     </div>
-                                                    <input type="submit" value="Save changes" class="btn btn-primary pull-right m-10">
+                                                    <br/>
+                                                    <div class="modal-footer">
+                                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                        </button>
+                                                        <button type="submit" class="btn btn-primary">Save changes</button>
+                                                    </div>
                                                 </form>
                                             </div>
@@ -168,5 +179,10 @@
                                                     </div>
                                                 </div>
-                                                <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
+                                                <br/>
+                                                <div class="modal-footer">
+                                                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                    </button>
+                                                    <button type="submit" class="btn btn-primary">Save changes</button>
+                                                </div>
                                             </form>
                                         </div>
@@ -187,4 +203,7 @@
 
 @section('script')
+
+    @yield('script')
+
     <script src="{{ url('assets/js/examples/pages/user-list.js') }}"></script>
     <!-- Datatable -->
Index: sources/views/dashboard/documents/create.blade.php
===================================================================
--- resources/views/dashboard/documents/create.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,83 +1,0 @@
-@extends('layouts.app')
-
-@section("title", "Documents - Create new")
-
-@section('pageTitle', 'Create document')
-
-@section('content')
-
-    <div class="page-header">
-        <nav aria-label="breadcrumb" class="d-flex align-items-start">
-            <ol class="breadcrumb">
-                <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard/documents') }}">Documents</a>
-                </li>
-                <li class="breadcrumb-item active" aria-current="page">New document</li>
-            </ol>
-        </nav>
-    </div>
-
-    <div class="row">
-        <div class="col-md-12">
-
-            <div class="row">
-                <div class="col-lg-12 col-md-12">
-                    <div class="tab-content" id="v-pills-tabContent">
-                        <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
-                            <div class="card">
-                                <div class="card-body">
-                                    <h6 class="card-title">New document</h6>
-                                    <form action="{{ route("dashboard.documents.store") }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
-                                        @csrf
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                            <div class="form-group">
-                                                <label for="exampleFormControlSelect1">Department</label>
-                                                @if($departments->count())
-                                                <select class="form-control edit_document_deparment" name="department" required>
-                                                    @foreach ($departments as $department)
-                                                        <option value="{{ $department->id }}" data-dept-code="{{ $department->code }}" {{ (old("department") == $department->id ? "selected" : "") }}>{{ $department->name }}</option>
-                                                    @endforeach
-                                                        @else
-                                                            <p>You haven't created any departments yet. <a class="text-primary" href="{{ route("dashboard.departments.create") }}">Create now.</a></p>
-                                                        @endif
-                                                </select>
-                                            </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Archive ID</label>
-                                                    <input type="text" name="arch_id" value="{{ old("arch_id") }}" class="form-control" placeholder="Archive ID" required>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Name</label>
-                                                    <input type="text" name="name" value="{{ old('name') }}" class="form-control" placeholder="Name" required>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Description</label>
-                                                    <textarea class="form-control" name="description" value='{{ old("description") }}' rows="3"></textarea>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <input type="file" class="form-control" id="file-item" name="file_item[]" multiple>
-                                            </div>
-                                        </div>
-                                        <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
-                                    </form>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-@endsection
Index: sources/views/dashboard/documents/edit.blade.php
===================================================================
--- resources/views/dashboard/documents/edit.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,237 +1,0 @@
-@extends('layouts.app')
-
-@section("title", "Documents - Edit document")
-
-@section('pageTitle', 'Edit document')
-
-@section('head')
-    <!-- Datatable -->
-    <link rel="stylesheet" href="{{ url('vendors/dataTable/dataTables.min.css') }}" type="text/css">
-@endsection
-
-@section('content')
-
-    <div class="page-header">
-        <nav aria-label="breadcrumb" class="d-flex align-items-start">
-            <ol class="breadcrumb">
-                <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard/documents') }}">Documents</a>
-                </li>
-                <li class="breadcrumb-item active" aria-current="page">Edit document</li>
-            </ol>
-        </nav>
-    </div>
-
-    <div class="row">
-        <div class="col-md-12">
-
-            <div class="row">
-                <div class="col-lg-12 col-md-12">
-                    <div class="tab-content" id="v-pills-tabContent">
-                        <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
-                            <div class="card">
-                                <div class="card-body">
-                                    <h6 class="card-title">Documents</h6>
-                                    <form action="{{ route("dashboard.documents.edit", ["id" => $document->id]) }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
-                                        @method("patch")
-                                        @csrf
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label for="exampleFormControlSelect1">Department</label>
-                                                        <select class="form-control edit_document_deparment" name="department" required>
-                                                            @foreach ($departments as $department)
-                                                                <option value="{{ $department->id }}" data-dept-code="{{ $department->code }}" {{ old("department", $document->department->id) == $department->id ? "selected" : "" }}>{{ $department->name }}</option>
-                                                            @endforeach
-                                                        </select>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Archive ID</label>
-                                                    <input type="text" name="arch_id" value="{{ old("arch_id", $document->arch_id) }}" class="form-control" placeholder="Archive ID" required>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Name</label>
-                                                    <input type="text" name="name" value="{{ old("name", $document->name) }}" class="form-control" placeholder="Name" required>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Description</label>
-                                                    <textarea class="form-control" name="description" rows="3">
-                                                        {{ old("description", $document->description) }}
-                                                    </textarea>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <input type="file" class="form-control" id="file-item" name="file_item[]" multiple>
-                                            </div>
-                                        </div>
-
-                                        <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
-                                    </form>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-        </div>
-
-        <div class="col-md-12">
-            <div class="card">
-                <div class="card-body">
-                    <div class="table-responsive">
-                        <table id="user-list" class="table table-lg">
-                            <thead>
-                            <tr>
-                                <th></th>
-                                <th>ID</th>
-                                <th>Size</th>
-                                <th>Name</th>
-                                <th>Created at</th>
-                                <th>Location</th>
-                                <th>Actions</th>
-                            </tr>
-                            </thead>
-                            <tbody>
-                            @foreach($files as $file)
-                                <tr>
-                                    <td></td>
-                                    <td>{{ $file->id }}</td>
-                                    <td>{{ $file->getSize($file->location) }} MB</td>
-                                    <td>{{ $file->name }}</td>
-                                    <td>{{ date('d.m.Y - H:i', strtotime($file->created_at)) }}</td>
-                                <!-- Trigger -->
-                                    <td> <span id="copy_{{$department->id}}"></span>
-                                        <button class="btn btn-sm btn-primary text-white" data-clipboard-target="#copy_{{ $department->id }}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
-                                                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
-                                                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
-                                            </svg></button>
-                                    </td>
-                                    <td>
-                                        <a href="javascript:void(0)" class="text-secondary" data-toggle="modal" data-target="#editModal_{{$file->id}}" title="Edit">
-                                            <i class="ti-pencil"></i>
-                                        </a>
-                                        <a href="{{ route("dashboard.documents.downloadFile", $file->id) }}" class="text-secondary" title="Edit">
-                                            <i class="ti-download"></i>
-                                        </a>
-                                        <a href="javascript:void(0)" class="text-danger ml-2" data-toggle="modal" data-target="#deleteModal_{{$file->id}}" title="Delete">
-                                            <i class="ti-trash"></i>
-                                        </a>
-                                    </td>
-                                </tr>
-                                <div class="modal fade" id="deleteModal_{{$file->id}}" tabindex="-1" role="dialog" aria-hidden="true">
-                                    <div class="modal-dialog modal-dialog-centered" role="document">
-                                        <div class="modal-content">
-                                            <div class="modal-header">
-                                                <h5 class="modal-title" id="exampleModalCenterTitle">Delete confirmation</h5>
-                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                                                    <i class="ti-close"></i>
-                                                </button>
-                                            </div>
-                                            <div class="modal-body">
-                                                <form action="{{ route("dashboard.documents.deleteFile", $file->id) }}" method="POST">
-                                                    @csrf
-                                                    @method('DELETE')
-                                                    <p>Are you sure you want to delete file {{$file->name}}?</p>
-                                                    <div class="modal-footer">
-                                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
-                                                        </button>
-                                                        <button type="submit" class="btn btn-primary">Save changes</button>
-                                                    </div>
-                                                </form>
-                                            </div>
-
-                                        </div>
-                                    </div>
-                                </div>
-
-                                <div class="modal fade" id="editModal_{{$file->id}}" tabindex="-1" role="dialog" aria-hidden="true">
-                                    <div class="modal-dialog modal-dialog-centered" role="document">
-                                        <div class="modal-content">
-                                            <div class="modal-header">
-                                                <h5 class="modal-title" id="exampleModalCenterTitle">Edit department</h5>
-                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                                                    <i class="ti-close"></i>
-                                                </button>
-                                            </div>
-                                            <div class="modal-body">
-                                                <form action="{{ route("dashboard.documents.renameFile", ["id" =>$file->id]) }}" method="post" accept-charset="utf-8">
-                                                    @method("patch")
-                                                    @csrf
-                                                    <div class="row">
-                                                        <div class="col-md-6">
-                                                            <div class="form-group">
-                                                                <label class="form-label">Name</label>
-                                                                <input type="text" name="name" value="{{ explode('.', $file->name)[0] }}" minlength="2" maxlength="30" class="form-control" placeholder="Name" required>
-                                                                <span>.php</span>
-                                                            </div>
-                                                        </div>
-                                                    </div>
-                                                    <input type="submit" value="Save changes" class="btn btn-primary pull-right m-10">
-                                                </form>
-                                            </div>
-
-                                        </div>
-                                    </div>
-                                </div>
-                            @endforeach
-
-                            <div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-hidden="true">
-                                <div class="modal-dialog modal-dialog-centered" role="document">
-                                    <div class="modal-content">
-                                        <div class="modal-header">
-                                            <h5 class="modal-title" id="exampleModalCenterTitle">Create department</h5>
-                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                                                <i class="ti-close"></i>
-                                            </button>
-                                        </div>
-                                        <div class="modal-body">
-                                            <form action="{{ route("dashboard.departments.store") }}" method="post" accept-charset="utf-8">
-                                                @csrf
-                                                <div class="row">
-                                                    <div class="col-md-6">
-                                                        <div class="form-group">
-                                                            <label>Name</label>
-                                                            <input type="text" name="name" value="{{ old('name') }}" minlength="2" maxlength="30" class="form-control" placeholder="Name" required>
-                                                        </div>
-                                                    </div>
-                                                    <div class="col-md-6">
-                                                        <div class="form-group">
-                                                            <label>Code</label>
-                                                            <input type="text" name="code" value="{{ old('code') }}" minlength="2" maxlength="30" class="form-control" placeholder="Code" required>
-                                                        </div>
-                                                    </div>
-                                                </div>
-                                                <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
-                                            </form>
-                                        </div>
-
-                                    </div>
-                                </div>
-                            </div>
-
-                            </tbody>
-                        </table>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-@endsection
-
-@section('script')
-    <script src="{{ url('assets/js/examples/pages/user-list.js') }}"></script>
-    <!-- Datatable -->
-    <script src="{{ url('vendors/dataTable/dataTables.min.js') }}"></script>
-@endsection
Index: sources/views/dashboard/documents/index.blade.php
===================================================================
--- resources/views/dashboard/documents/index.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,216 +1,0 @@
-@extends('layouts.app')
-
-@section("title", "SaveSpace - Documents")
-
-@section('pageTitle', 'SaveSpace - Documents')
-
-@section('content')
-
-    <div class="row app-block mb-4">
-        <div class="col-md-3 app-sidebar">
-            <div class="card">
-                <div class="card-body">
-                    <a href="{{ route("dashboard.documents.create") }}" class="btn btn-secondary btn-block file-upload-btn text-white" data-action="{{ route("dashboard.documents.create") }}">
-                        Add document
-                    </a>
-                    <form class="d-none" id="file-upload">
-                        <input type="file" multiple>
-                    </form>
-                </div>
-                <div class="app-sidebar-menu">
-                    <div class="list-group list-group-flush">
-                        <a href="{{route("dashboard.documents.index")}}" class="list-group-item d-flex align-items-center">
-                            <i data-feather="folder" class="width-15 height-15 mr-2"></i>
-                            Documents
-                        </a>
-                        @foreach($departments as $department)
-                            <a href="{{ route("dashboard.documents.index", ["id" => $department->id]) }}" class="list-group-item d-flex align-items-center">
-                                 <i data-feather="folder" class="width-15 height-15 mr-2"></i>
-                                 {{$department->name}}
-                                <span class="small ml-auto">{{$department->document->count()}}</span>
-                            </a>
-                        @endforeach
-                        <a href="{{ URL::current()."?sort=recent" }}" class="list-group-item">
-                            <i data-feather="upload-cloud" class="width-15 height-15 mr-2"></i>
-                            Recents
-                        </a>
-                        <a href="{{ URL::current()."?sort=important" }}" class="list-group-item d-flex align-items-center">
-                            <i data-feather="star" class="width-15 height-15 mr-2"></i>
-                            Important
-                            <span class="small ml-auto">{{ $countImportant }}</span>
-                        </a>
-                    </div>
-                    <div class="card-body">
-                        <h6 class="mb-4">Storage Status</h6>
-                        <div class="d-flex align-items-center">
-                            <div class="mr-3">
-                                <i data-feather="database" class="width-30 height-30"></i>
-                            </div>
-                            <div class="flex-grow-1">
-                                <div class="progress" style="height: 10px">
-                                    <div class="progress-bar progress-bar-striped" role="progressbar"
-                                         style="width: {{$diskUse}}" aria-valuenow="10" aria-valuemin="0"
-                                         aria-valuemax="100"></div>
-                                        <span class="sr-only">{{$diskUse}}</span>
-                                </div>
-                                <div class="line-height-12 small text-muted mt-2">{{round($diskUsedSize,2)}} GB /
-                                    {{round($diskTotalSize,2)}} GB ({{$diskUse}})</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="col-md-9 app-content">
-            <div class="app-content-overlay"></div>
-            <div class="app-action">
-                <div class="action-left">
-                    <ul class="list-inline">
-                        <li class="list-inline-item mb-0">
-                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">
-                                <i data-feather="plus" class="mr-1"></i>
-                                Add
-                            </a>
-                            <div class="dropdown-menu">
-                                <a class="dropdown-item" href="{{route("dashboard.documents.create")}}">Document</a>
-                            </div>
-                        </li>
-                        <li class="list-inline-item mb-0">
-                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">Departments</a>
-                            <div class="dropdown-menu">
-                                @foreach($departments as $department)
-                                    <a class="dropdown-item d-flex justify-content-between m-5" href="{{ route("dashboard.documents.index", ["id" => $department->id]) }}">
-                                        {{$department->name}}
-                                        <span class="text-muted">{{$department->document->count()}}</span>
-                                    </a>
-                                @endforeach
-                            </div>
-                        </li>
-                        <li class="list-inline-item mb-0">
-                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">
-                                Order by
-                            </a>
-                            <div class="dropdown-menu">
-                                @if(Request::get('id'))
-                                    <a class="dropdown-item" href="{{ URL::current()."?id=".Request::get('id')."&sort=newest" }}">Date</a>
-                                    <a class="dropdown-item" href="{{ URL::current()."?id=".Request::get('id')."&sort=name" }}">Name</a>
-                                    <a class="dropdown-item" href="#">Size</a>
-                                @else
-                                    <a class="dropdown-item" href="{{ URL::current()."?sort=newest" }}">Date</a>
-                                    <a class="dropdown-item" href="{{ URL::current()."?sort=name" }}">Name</a>
-                                    <a class="dropdown-item" href="#">Size - not done</a>
-                                @endif
-                            </div>
-                        </li>
-                    </ul>
-                </div>
-                <div class="action-right">
-                    <form action="{{ route("dashboard.documents.index") }}" method="get" class="d-flex mr-3">
-                        <div class="input-group">
-                            <input type="text" name="search" class="form-control" placeholder="Search file"
-                                   aria-describedby="button-addon1" required>
-                            <div class="input-group-append">
-                                <button class="btn btn-outline-light searchSubmitBtn" type="submit" value="Search">
-                                    <i data-feather="search"></i>
-                                </button>
-                            </div>
-                        </div>
-                    </form>
-                </div>
-            </div>
-            @if(!Request::query('id'))
-                <h4>Documents</h4><br/>
-            @else
-                <h4> {{ $deptName }} - {{$deptCode}} </h4>
-            <br/>
-                @endif
-            <div class="row">
-                @forelse($documents as $document)
-                    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-12">
-                        <div class="card app-file-list">
-                            <div class="app-file-icon">
-                                <i class="fa fa-file-text-o text-primary"></i>
-                                <div class="dropdown position-absolute top-0 right-0 mr-3">
-                                    <a href="#" class="btn btn-outline-light btn-sm" data-toggle="dropdown">
-                                        <i class="fa fa-ellipsis-h"></i>
-                                    </a>
-                                    <div class="dropdown-menu dropdown-menu-right">
-                                        <a href="{{ route("dashboard.documents.edit", ["id" => $document->id]) }}" class="dropdown-item">View Details</a>
-                                        <a href="#" class="dropdown-item">Share</a>
-                                        <a href="#" class="dropdown-item">Download</a>
-                                        <button class="dropdown-item action-dropdown-item"
-                                           href="javascript:void(0)" onclick="toggleImportant({{$document->id}})">
-                                            @if($document->is_important)
-                                                Mark as not important
-                                            @else
-                                                Mark as important
-                                            @endif
-                                        </button>
-                                        <a href="javascript:void(0)" class="dropdown-item" data-toggle="modal" data-target="#deleteModal_{{$document->id}}">Delete</a>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="p-2 small">
-                                @if($document->is_important)
-                                    <div>{{$document->name}} - {{$document->arch_id}} <i class="fa fa-star" style="color:orange"></i></div>
-                                @else
-                                    <div>{{$document->name}} - {{$document->arch_id}} </div>
-                                @endif
-                                <div>{{$document->created_at}}</div>
-                                <div class="text-muted">{{$document->description}}</div>
-                                <div class="text-muted">1.2MB</div>
-                            </div>
-                        </div>
-                    </div>
-                    <form id="toggleImportant_{{ $document->id }}"
-                          action="{{ route("dashboard.documents.toggleImportant", ["id" => $document->id]) }}"
-                          method="post">
-                        @csrf
-                        @method("patch")
-                    </form>
-                    <div class="modal fade" id="deleteModal_{{$document->id}}" tabindex="-1" role="dialog" aria-hidden="true">
-                        <div class="modal-dialog modal-dialog-centered" role="document">
-                            <div class="modal-content">
-                                <div class="modal-header">
-                                    <h5 class="modal-title" id="exampleModalCenterTitle">Delete confirmation</h5>
-                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                                        <i class="ti-close"></i>
-                                    </button>
-                                </div>
-                                <div class="modal-body">
-                                    <form action="{{ route("dashboard.documents.destroy", $document->id) }}" method="POST">
-                                        @csrf
-                                        @method('DELETE')
-                                        <p>Are you sure you want to delete document {{$document->name}} with Archive ID: {{ $document->arch_id }}?</p>
-                                        <div class="modal-footer">
-                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
-                                            </button>
-                                            <button type="submit" class="btn btn-primary">Save changes</button>
-                                        </div>
-                                    </form>
-                                </div>
-
-                            </div>
-                        </div>
-                    </div>
-                @empty
-                    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-12">No items found</div>
-                @endforelse
-
-            </div>
-             @if(!Request::query('search'))
-             {{$documents->appends($_GET)->links('layouts.pagination') }}
-                 @endif
-    </div>
-
-@endsection
-
-@section('script')
-
-<script>
-    function toggleImportant(id) {
-        document.getElementById('toggleImportant_' + id).submit();
-    }
-</script>
-
-@endsection
Index: resources/views/dashboard/files/index.blade.php
===================================================================
--- resources/views/dashboard/files/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ resources/views/dashboard/files/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,246 @@
+@extends('layouts.app')
+
+@section("title", "SaveSpace - Files")
+
+@section('pageTitle', 'Files')
+
+@section('head')
+    <!-- Datatable -->
+    <link rel="stylesheet" href="{{ url('vendors/dataTable/dataTables.min.css') }}" type="text/css">
+@endsection
+
+@section('content')
+
+    <div class="page-header justify-content-between">
+        <nav aria-label="breadcrumb" class="d-flex align-items-start">
+            <ol class="breadcrumb">
+                <li class="breadcrumb-item">
+                    <a href="{{ url('/') }}">Dashboard</a>
+                </li>
+                <li class="breadcrumb-item active" aria-current="page">Files</li>
+            </ol>
+        </nav>
+        <div class="dropdown">
+            <a href="javascript:void(0)" data-toggle="modal" data-target="#createModal" class="btn btn-primary text-white">
+                Add files
+            </a>
+            <a href="{{ route("dashboard.departments.downloadAll") }}" class="btn btn-danger text-white">
+                <i class="fa fa-download pr-1"></i> Download all
+            </a>
+            <a href="{{ route('dashboard.files.export') }}" class="btn btn-success text-white">Export table</a>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-md-12">
+            <div class="card">
+                <div class="card-body">
+                    <div class="table-responsive">
+                        <table id="user-list" class="table table-lg">
+                            <thead>
+                            <tr>
+                                <th>
+                                </th>
+                                <th>Image</th>
+                                <th>Name</th>
+                                <th>Created at</th>
+                                <th>Updated at</th>
+                                <th>Folder name</th>
+                                <th>Folder archive ID</th>
+                                <th>Directory</th>
+                                <th>Actions</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            @foreach($files as $file)
+                                <tr>
+                                    <td></td>
+                                    <td>
+                                        @if(in_array(explode('.', $file->name)[1], $excelExt))
+                                            <div class="col-xl-1 col-lg-1 col-md-1 col-sm-2">
+                                            <i class="fa fa-file-excel-o text-success fa-2x"></i>
+                                            </div>
+                                        @else @if(in_array(explode('.', $file->name)[1], $textExt))
+                                            <div class="col-xl-1 col-lg-1 col-md-1 col-sm-2">
+                                            <i class="fa fa-file-word-o text-info fa-2x"></i>
+                                            </div>
+                                        @else @if(explode('.', $file->name)[1] == 'pdf')
+                                                <div class="col-xl-1 col-lg-1 col-md-1 col-sm-2">
+                                                <i class="fa fa-file-pdf-o text-danger fa-2x"></i>
+                                                </div>
+                                            @else @if(in_array(explode('.', $file->name)[1], $imageExt))
+                                                    <div class="col-xl-1 col-lg-1 col-md-1 col-sm-2">
+                                                        <a href="{{ url('/uploads/' . $file->location) }}" class="image-popup-gallery-item">
+                                                            <div class="image-hover">
+                                                                <img src="{{ url('/uploads/' . $file->location) }}" class="rounded" width="30" alt="image">
+                                                            </div>
+                                                        </a>
+                                                    </div>
+                                                @else
+                                                    <div class="col-xl-1 col-lg-1 col-md-1 col-sm-2">
+                                                    <i class="fa fa-file-text-o text-warning fa-2x"></i>
+                                                    </div>
+                                                @endif
+                                            @endif
+                                            @endif
+                                            @endif
+
+
+                                    </td>
+                                    <td>{{ $file->name }}</td>
+                                    <td>{{ date('d.m.Y - H:i', strtotime($file->created_at)) }}</td>
+                                    @if($file->updated_at==NULL)
+                                        <td>/</td>
+                                    @else
+                                        <td>{{ date('d.m.Y - H:i', strtotime($file->updated_at)) }}</td>
+                                @endif
+                                    <td><a href="{{ route('dashboard.folders.files', ['id' => $file->folder_id]) }}" class="text-linkedin">{{ \App\Models\Folder::find($file->folder_id)->name }}</a></td>
+                                    <td>{{ \App\Models\Folder::find($file->folder_id)->arch_id }}</td>
+                                <!-- Trigger -->
+                                    <td><button data-clipboard-text="{{$file->location}}" class="btn btn-sm btn-primary text-white" data-toggle="tooltip" data-placement="right" title="{{$file->location}}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
+                                                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
+                                                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
+                                            </svg></button>
+                                    </td>
+                                    <td>
+                                        <a href="javascript:void(0)" class="text-secondary" data-toggle="modal" data-target="#editModal_{{$file->id}}" title="Edit">
+                                            <i class="ti-pencil"></i>
+                                        </a>
+                                        <a href="{{ route("dashboard.files.downloadFile", ['id' => $file->id]) }}" class="text-danger ml-2"title="Download">
+                                            <i class="ti-download"></i>
+                                        </a>
+                                        <a href="javascript:void(0)" class="text-danger ml-2" data-toggle="modal" data-target="#deleteModal_{{$file->id}}" title="Delete">
+                                            <i class="ti-trash"></i>
+                                        </a>
+                                    </td>
+                                </tr>
+                                <div class="modal fade" id="deleteModal_{{$file->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                                    <div class="modal-dialog modal-dialog-centered" role="document">
+                                        <div class="modal-content">
+                                            <div class="modal-header">
+                                                <h5 class="modal-title" id="exampleModalCenterTitle">Delete confirmation</h5>
+                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                                    <i class="ti-close"></i>
+                                                </button>
+                                            </div>
+                                            <div class="modal-body">
+                                                <form action="{{ route("dashboard.files.deleteFile", $file->id) }}" method="POST">
+                                                    @csrf
+                                                    @method('DELETE')
+                                                    <p>Are you sure you want to delete file {{$file->name}}?</p>
+                                                    <p>Location: <span class="pr-1">{{$file->location}}</span></p>
+                                                    <div class="modal-footer">
+                                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                        </button>
+                                                        <button type="submit" class="btn btn-primary">Save changes</button>
+                                                    </div>
+                                                </form>
+                                            </div>
+
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="modal fade" id="editModal_{{$file->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                                    <div class="modal-dialog modal-dialog-centered" role="document">
+                                        <div class="modal-content">
+                                            <div class="modal-header">
+                                                <h5 class="modal-title" id="exampleModalCenterTitle">Rename file</h5>
+                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                                    <i class="ti-close"></i>
+                                                </button>
+                                            </div>
+                                            <div class="modal-body">
+                                                <form action="{{ route("dashboard.files.renameFile", ["id" =>$file->id]) }}" method="post" accept-charset="utf-8">
+                                                    @method("patch")
+                                                    @csrf
+                                                    <div class="row">
+                                                        <div class="col-md-12">
+                                                            <div class="form-group">
+                                                                <label class="form-label">Current name: {{$file->name}}</label>
+                                                                <input type="text" name="name" value="{{ explode('.', $file->name)[0] }}" maxlength="255" title="Don't include: '\/.|'" pattern="^[^.\/|]+$" class="form-control" required>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                    <br/>
+                                                    <div class="modal-footer">
+                                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                        </button>
+                                                        <button type="submit" class="btn btn-primary">Save changes</button>
+                                                    </div>
+                                                </form>
+                                            </div>
+
+                                        </div>
+                                    </div>
+                                </div>
+                            @endforeach
+
+                            </tbody>
+                        </table>
+
+                        <div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-hidden="true">
+                            <div class="modal-dialog modal-dialog-centered" role="document">
+                                <div class="modal-content">
+                                    <div class="modal-header">
+                                        <h5 class="modal-title" id="exampleModalCenterTitle">Add files</h5>
+                                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                            <i class="ti-close"></i>
+                                        </button>
+                                    </div>
+                                    <div class="modal-body">
+                                        <form action="{{ route("dashboard.files.store") }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
+                                            @csrf
+                                            <div class="row">
+                                                <div class="col-md-10">
+                                                    <div class="form-group">
+                                                        <label for="exampleFormControlSelect1">Folder</label>
+                                                        @if($folders->count())
+                                                            <select class="form-control" name="folder" required>
+                                                                @foreach ($folders as $folder)
+                                                                    <option value="{{ $folder->id }}" {{ (old("folder") == $folder->id ? "selected" : "") }}>{{ $folder->name }}</option>
+                                                                @endforeach
+                                                                @else
+                                                                    <p>You haven't created any folders yet. <a class="text-primary" href="{{ route("dashboard.folders.index") }}">Create now.</a></p>
+                                                                @endif
+                                                            </select>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-10">
+                                                    <div class="form-group">
+                                                        <label for="exampleFormControlSelect1">Uploads</label>
+
+
+                                                    <input type="file" class="form-control" id="file-item" name="file_item[]" accept="{{ $fileTypes }}" multiple>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <br/>
+                                            <div class="modal-footer">
+                                                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                </button>
+                                                <button type="submit" class="btn btn-primary">Save changes</button>
+                                            </div>
+                                        </form>
+                                    </div>
+
+                                </div>
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+@endsection
+
+@section('script')
+
+    @yield('script')
+
+    <script src="{{ url('assets/js/examples/pages/user-list.js') }}"></script>
+    <!-- Datatable -->
+    <script src="{{ url('vendors/dataTable/dataTables.min.js') }}"></script>
+@endsection
Index: resources/views/dashboard/folders/files.blade.php
===================================================================
--- resources/views/dashboard/folders/files.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ resources/views/dashboard/folders/files.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,339 @@
+@extends('layouts.app')
+
+@section("title", "SaveSpace - Folder")
+
+@section('pageTitle', 'SaveSpace - Folder')
+
+
+@section('content')
+
+    <div class="row app-block mb-4">
+        <div class="col-md-3 app-sidebar">
+            <div class="card">
+                <div class="card-body">
+                    <a class="btn btn-secondary btn-block text-white" href="javascript:void(0)" data-target="#editModal_{{$folder->id}}" data-toggle="modal">
+                        Add files
+                    </a>
+                </div>
+                <div class="app-sidebar-menu">
+                    <div class="list-group list-group-flush">
+                        <a href="{{route("dashboard.folders.index")}}" class="list-group-item d-flex align-items-center">
+                            <i data-feather="folder" class="width-15 height-15 mr-2"></i>
+                            Folders
+                        </a>
+                        @foreach($folders as $obj)
+                            <a href="{{ route("dashboard.folders.files", ["id" => $obj->id]) }}" class="list-group-item d-flex align-items-center">
+                                <i data-feather="folder" class="width-15 height-15 mr-2"></i>
+                                {{$obj->name}}
+                                <span class="small ml-auto">{{$obj->files->count()}}</span>
+                            </a>
+                        @endforeach
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-9 app-content">
+            <div class="app-content-overlay"></div>
+            <div class="app-action">
+                <div class="action-left">
+                    <ul class="list-inline">
+                        <li class="list-inline-item mb-0">
+                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">
+                                Actions
+                            </a>
+                            <div class="dropdown-menu">
+                                <a class="dropdown-item" href="javascript:void(0)" data-toggle="modal" data-target="#editModal_{{$folder->id}}">
+                                 Add files
+                                </a>
+
+                            </div>
+                        </li>
+                        <li class="list-inline-item mb-0">
+                            <a href="{{ route("dashboard.folders.downloadFolder", ['id' => $folder->id]) }}" class="btn btn-outline-light">
+                                Download folder
+                            </a>
+                        </li>
+                    </ul>
+                </div>
+                <div class="action-right">
+                    <form action="{{ route("dashboard.folders.files", $folder->id) }}" method="get" class="d-flex mr-3">
+                        <div class="input-group">
+                            <input type="text" name="search" class="form-control" placeholder="Search files"
+                                   aria-describedby="button-addon1" required>
+                            <div class="input-group-append">
+                                <button class="btn btn-outline-light searchSubmitBtn" type="submit" value="Search">
+                                    <i data-feather="search"></i>
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+
+            <p>Files</p>
+
+            <div class="row">
+                @forelse($files as $file)
+                    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-12">
+                        <div class="card app-file-list">
+                            <div class="app-file-icon">
+                                @if(in_array(explode('.', $file->name)[1], $excelExt))
+                                    <i class="fa fa-file-excel-o text-success"></i>
+                                @else @if(in_array(explode('.', $file->name)[1], $textExt))
+                                    <i class="fa fa-file-word-o text-info"></i>
+                                @else @if(explode('.', $file->name)[1] == 'pdf')
+                                        <i class="fa fa-file-pdf-o text-danger"></i>
+                                    @else @if(in_array(explode('.', $file->name)[1], $imageExt))
+                                            <div class="col-xl-1 col-lg-1 col-md-1 col-sm-2">
+                                                <a href="{{ url('/uploads/' . $file->location) }}" class="image-popup-gallery-item">
+                                                    <div class="image-hover">
+                                                        <img src="{{ url('/uploads/' . $file->location) }}" class="rounded" width="100" alt="image">
+                                                    </div>
+                                                </a>
+                                            </div>
+                                        @else
+                                            <i class="fa fa-file-text-o text-warning"></i>
+                                        @endif
+                                    @endif
+                                @endif
+                                @endif
+                                <div class="dropdown position-absolute top-0 right-0 mr-3">
+                                    <a href="#" class="btn btn-outline-light btn-sm" data-toggle="dropdown">
+                                        <i class="fa fa-ellipsis-h"></i>
+                                    </a>
+                                    <div class="dropdown-menu dropdown-menu-right">
+                                        <a href="javascript:void(0)" class="dropdown-item" data-toggle="modal" data-target="#editModal_{{$file->id}}">
+                                            Rename
+                                        </a>
+                                        <a href="{{ route("dashboard.files.downloadFile", $file->id) }}" class="dropdown-item">
+                                            Download
+                                        </a>
+                                        <a href="javascript:void(0)" class="dropdown-item" data-toggle="modal" data-target="#deleteModal_{{$file->id}}">
+                                            Delete
+                                        </a>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="p-2 small">
+                                <div>{{$file->name}}</div>
+                                <div class="text-muted">{{ $file->getSize($file->location) }} MB</div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal fade" id="deleteModal_{{$file->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                        <div class="modal-dialog modal-dialog-centered" role="document">
+                            <div class="modal-content">
+                                <div class="modal-header">
+                                    <h5 class="modal-title" id="exampleModalCenterTitle">Delete confirmation</h5>
+                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                        <i class="ti-close"></i>
+                                    </button>
+                                </div>
+                                <div class="modal-body">
+                                    <form action="{{ route("dashboard.files.deleteFile", $file->id) }}" method="POST">
+                                        @csrf
+                                        @method('DELETE')
+                                        <p>Are you sure you want to delete file {{$file->name}}?</p>
+                                        <div class="modal-footer">
+                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                            </button>
+                                            <button type="submit" class="btn btn-primary">Save changes</button>
+                                        </div>
+                                    </form>
+                                </div>
+
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="modal fade" id="editModal_{{$file->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                            <div class="modal-content">
+                                <div class="modal-header">
+                                    <h5 class="modal-title" id="exampleModalCenterTitle">Edit file name</h5>
+                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                        <i class="ti-close"></i>
+                                    </button>
+                                </div>
+                                <div class="modal-body">
+                                    <form action="{{ route("dashboard.files.renameFile", ["id" =>$file->id]) }}" method="post" accept-charset="utf-8">
+                                        @method("patch")
+                                        @csrf
+                                        <div class="row">
+                                            <div class="col-md-12">
+                                                <div class="form-group">
+                                                    <label class="form-label">Current name: {{$file->name}}</label>
+                                                    <input type="text" name="name" value="{{ explode('.', $file->name)[0] }}" maxlength="255" title="Don't include: '\/.|'" pattern="^[^.\/|]+$" class="form-control" required>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <br/>
+                                        <div class="modal-footer">
+                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                            </button>
+                                            <button type="submit" class="btn btn-primary">Save changes</button>
+                                        </div>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-hidden="true">
+                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                            <div class="modal-content">
+                                <div class="modal-header">
+                                    <h5 class="modal-title" id="exampleModalCenterTitle">Create folder</h5>
+                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                        <i class="ti-close"></i>
+                                    </button>
+                                </div>
+                                <div class="modal-body">
+                                    <form action="{{ route("dashboard.folders.store") }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
+                                        @csrf
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label for="exampleFormControlSelect1">Department</label>
+                                                    @if($departments->count())
+                                                        <select class="form-control new_folder_deparment" name="department" required>
+                                                            @foreach ($departments as $department)
+                                                                <option value="{{ $department->id }}" data-dept-code="{{ $department->code }}" {{ (old("department") == $department->id ? "selected" : "") }}>{{ $department->name }}</option>
+                                                            @endforeach
+                                                            @else
+                                                                <p>You haven't created any departments yet. <a class="text-primary" href="{{ route("dashboard.departments.create") }}">Create now.</a></p>
+                                                            @endif
+                                                        </select>
+                                                </div>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Archive ID</label>
+                                                    <input type="text" name="arch_id" value="" class="form-control" placeholder="Archive ID" required>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Name</label>
+                                                    <input type="text" name="name" value="{{ old("name") }}" minlength="2" maxlength="30" class="form-control" placeholder="Name" required>
+                                                </div>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Note</label>
+                                                    <textarea class="form-control" name="note" maxlength="80"> {{old("note")}} </textarea>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <input type="file" class="form-control" id="file-item" name="file_item[]" accept="{{ $fileTypes }}" multiple>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <div class="form-check">
+                                                        <input class="form-check-input" type="checkbox" value="{{old("is_important")}}" id="is_important" name="is_important">
+                                                        <label class="form-check-label">
+                                                            Mark as important
+                                                        </label>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <br/>
+                                        <div class="modal-footer">
+                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                            </button>
+                                            <button type="submit" class="btn btn-primary">Save changes</button>
+                                        </div>
+                                    </form>
+                                </div>
+
+                            </div>
+                        </div>
+                    </div>
+                @empty
+                    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-12">No items found</div>
+                @endforelse
+            </div>
+
+            @if(!Request::query('search'))
+                {{$files->appends($_GET)->links('layouts.pagination') }}
+            @endif
+
+        </div>
+
+        <div class="modal fade" id="editModal_{{$folder->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+            <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title" id="exampleModalCenterTitle">Edit folder</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <i class="ti-close"></i>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form action="{{ route("dashboard.folders.edit", ["id" => $folder->id]) }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
+                            @method("patch")
+                            @csrf
+                            <div class="row">
+                                <div class="col-md-6">
+                                    <div class="form-group">
+                                        <label>Folder</label>
+                                        <select class="form-control edit_folder_deparment" name="department" required>
+                                            @foreach ($departments as $department)
+                                                <option value="{{ $department->id }}" data-dept-code="{{ $department->code }}" {{ old("department", $folder->department->id) == $department->id ? "selected" : "" }}>{{ $department->name }}</option>
+                                            @endforeach
+                                        </select>
+                                    </div>
+                                </div>
+                                <div class="col-md-6">
+                                    <div class="form-group">
+                                        <label>Archive ID</label>
+                                        <input type="text" name="arch_id" value="{{ old("arch_id", $folder->arch_id) }}" class="form-control" placeholder="Archive ID" required>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="row">
+                                <div class="col-md-6">
+                                    <div class="form-group">
+                                        <label>Name</label>
+                                        <input type="text" name="name" value="{{ old("name", $folder->name) }}" class="form-control" placeholder="Name" minlength="2" maxlength="30" required>
+                                    </div>
+                                </div>
+                                <div class="col-md-6">
+                                    <div class="form-group">
+                                        <label>Note</label>
+                                        <textarea class="form-control" name="note" maxlength="80">
+                                                        {{ old("note", $folder->note) }}
+                                                    </textarea>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="row">
+                                <div class="col-md-6">
+                                    <input type="file" class="form-control" id="file-item" name="file_item[]" accept="{{ $fileTypes }}" multiple>
+                                </div>
+                            </div>
+                            <br/>
+                            <div class="modal-footer">
+                                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                </button>
+                                <button type="submit" class="btn btn-primary">Save changes</button>
+                            </div>
+                        </form>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+
+    </div>
+
+@endsection
+
+@yield('script')
+
+
Index: resources/views/dashboard/folders/index.blade.php
===================================================================
--- resources/views/dashboard/folders/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ resources/views/dashboard/folders/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,364 @@
+@extends('layouts.app')
+
+@section("title", "SaveSpace - Folders")
+
+@section('pageTitle', 'SaveSpace - Folders')
+
+@section('content')
+
+    <div class="row app-block mb-4">
+        <div class="col-md-3 app-sidebar">
+            <div class="card">
+                <div class="card-body">
+                    <a href="javascript:void(0)" class="btn btn-secondary btn-block file-upload-btn text-white" data-toggle="modal" data-target="#createModal">
+                        Add folder
+                    </a>
+                </div>
+                <div class="app-sidebar-menu">
+                    <div class="list-group list-group-flush">
+                        <a href="{{route("dashboard.folders.index")}}" class="list-group-item d-flex align-items-center">
+                            <i data-feather="folder" class="width-15 height-15 mr-2"></i>
+                            Folders
+                        </a>
+                        @foreach($departments as $department)
+                            <a href="{{ route("dashboard.folders.index", ["id" => $department->id]) }}" class="list-group-item d-flex align-items-center">
+                                <i data-feather="folder" class="width-15 height-15 mr-2"></i>
+                                {{$department->name}}
+                                <span class="small ml-auto">{{$department->folder->count()}}</span>
+                            </a>
+                        @endforeach
+                        <a href="{{ URL::current()."?sort=recent" }}" class="list-group-item">
+                            <i data-feather="upload-cloud" class="width-15 height-15 mr-2"></i>
+                            Recents
+                        </a>
+                        <a href="{{ URL::current()."?sort=important" }}" class="list-group-item d-flex align-items-center">
+                            <i data-feather="star" class="width-15 height-15 mr-2"></i>
+                            Important
+                            <span class="small ml-auto">{{ $countImportant }}</span>
+                        </a>
+                    </div>
+                    <div class="card-body">
+                        <h6 class="mb-4">Storage Status</h6>
+                        <div class="d-flex align-items-center">
+                            <div class="mr-3">
+                                <i data-feather="database" class="width-30 height-30"></i>
+                            </div>
+                            <div class="flex-grow-1">
+                                <div class="progress" style="height: 10px">
+                                    <div class="progress-bar progress-bar-striped" role="progressbar"
+                                         style="width: {{$diskUse}}" aria-valuenow="10" aria-valuemin="0"
+                                         aria-valuemax="100"></div>
+                                    <span class="sr-only">{{$diskUse}}</span>
+                                </div>
+                                <div class="line-height-12 small text-muted mt-2">{{round($diskUsedSize,2)}} GB /
+                                    {{round($diskTotalSize,2)}} GB ({{$diskUse}})</div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-9 app-content">
+            <div class="app-content-overlay"></div>
+            <div class="app-action">
+                <div class="action-left">
+                    <ul class="list-inline">
+                        <li class="list-inline-item mb-0">
+                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">
+                                <i data-feather="plus" class="mr-1"></i>
+                                Ations
+                            </a>
+                            <div class="dropdown-menu">
+                                <a class="dropdown-item" href="javascript:void(0)" data-toggle="modal" data-target="#createModal">Add folder</a>
+                                <a href="{{ route('dashboard.folders.export') }}" class="dropdown-item text-success">Export table</a>
+                            </div>
+                        </li>
+                        <li class="list-inline-item mb-0">
+                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">Departments</a>
+                            <div class="dropdown-menu">
+                                @foreach($departments as $department)
+                                    <a class="dropdown-item d-flex justify-content-between m-5" href="{{ route("dashboard.folders.index", ["id" => $department->id]) }}">
+                                        {{$department->name}}
+                                        <span class="text-muted">{{$department->folder->count()}}</span>
+                                    </a>
+                                @endforeach
+                            </div>
+                        </li>
+                        <li class="list-inline-item mb-0">
+                            <a href="#" class="btn btn-outline-light dropdown-toggle" data-toggle="dropdown">
+                                Order by
+                            </a>
+                            <div class="dropdown-menu">
+                                @if(Request::get('id'))
+                                    <a class="dropdown-item" href="{{ URL::current()."?id=".Request::get('id')."&sort=newest" }}">Date</a>
+                                    <a class="dropdown-item" href="{{ URL::current()."?id=".Request::get('id')."&sort=name" }}">Name</a>
+                                @else
+                                    <a class="dropdown-item" href="{{ URL::current()."?sort=newest" }}">Date</a>
+                                    <a class="dropdown-item" href="{{ URL::current()."?sort=name" }}">Name</a>
+                                @endif
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+                <div class="action-right">
+                    <form action="{{ route("dashboard.folders.index") }}" method="get" class="d-flex mr-3">
+                        <div class="input-group">
+                            <input type="text" name="search" class="form-control" placeholder="Search folder"
+                                   aria-describedby="button-addon1" required>
+                            <div class="input-group-append">
+                                <button class="btn btn-outline-light searchSubmitBtn" type="submit" value="Search">
+                                    <i data-feather="search"></i>
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+            @if(!Request::query('id'))
+                <h4>Folders</h4><br/>
+            @else
+                <h4> {{ $deptName }} - {{$deptCode}} </h4>
+                <br/>
+            @endif
+
+            <div class="row">
+                @forelse($folders as $folder)
+                    <div class="col-xl-4 col-lg-6">
+                        <div class="card"  style="width: 20rem;">
+                            <div class="card-body">
+                                <i class="fa fa-folder fa-2x pr-2" aria-hidden="true">
+                                        </i><span class="card-title" style="font-size: 1.5rem;">{{$folder->name}}</span>
+                                @if($folder->is_important)
+                                    <i class="fa fa-star" style="color:orange;"></i>
+                                @endif
+                                <div class="d-flex align-items-center">
+                                    <div class="dropdown ml-auto">
+                                        <a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                                            <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
+                                        </a>
+                                        <div class="dropdown-menu dropdown-menu-right">
+                                            <a href="{{ route("dashboard.folders.files", ["id" => $folder->id]) }}" class="dropdown-item">View Files</a>
+                                            <a href="javascript:void(0)" class="dropdown-item" data-toggle="modal" data-target="#editModal_{{$folder->id}}">Edit</a>
+                                            <a href="{{ route("dashboard.folders.downloadFolder", ['id' => $folder->id]) }}" class="dropdown-item">Download</a>
+                                            <button class="dropdown-item action-dropdown-item"
+                                                    href="javascript:void(0)" onclick="toggleImportant({{$folder->id}})">
+                                                @if($folder->is_important)
+                                                    Mark as not important
+                                                @else
+                                                    Mark as important
+                                                @endif
+                                            </button>
+                                            <a href="javascript:void(0)" class="dropdown-item" data-toggle="modal" data-target="#deleteModal_{{$folder->id}}">Delete</a>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="text-muted small mt-1 mb-3">Number of files: {{$folder->files->count()}}</div>
+                                <p class="badge bg-success-bright text-success">{{$folder->arch_id}}</p>
+                                <p>Note: {{$folder->note}}</p>
+                                <div class="row">
+                                    <div class="col">
+                                        <div class="text-muted mb-1 small">Created</div>
+                                        <div> {{ $folder->created_at->diffForHumans() }}, {{ date('d.m.Y', strtotime($folder->created_at))}}</div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="card-footer">
+                                <small class="text-muted">Last updated: {{ date('d.m.Y H:i', strtotime($folder->updated_at)) }}</small>
+                            </div>
+                        </div>
+                    </div>
+
+                    <form id="toggleImportant_{{ $folder->id }}"
+                          action="{{ route("dashboard.folders.toggleImportant", ["id" => $folder->id]) }}"
+                          method="post">
+                        @csrf
+                        @method("patch")
+                    </form>
+
+                    <div class="modal fade" id="editModal_{{$folder->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                            <div class="modal-content">
+                                <div class="modal-header">
+                                    <h5 class="modal-title" id="exampleModalCenterTitle">Edit folder</h5>
+                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                        <i class="ti-close"></i>
+                                    </button>
+                                </div>
+                                <div class="modal-body">
+                                    <form action="{{ route("dashboard.folders.edit", ["id" => $folder->id]) }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
+                                        @method("patch")
+                                        @csrf
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Folder</label>
+                                                    <select class="form-control edit_folder_deparment" name="department" required>
+                                                        @foreach ($departments as $department)
+                                                            <option value="{{ $department->id }}" data-dept-code="{{ $department->code }}" {{ old("department", $folder->department->id) == $department->id ? "selected" : "" }}>{{ $department->name }}</option>
+                                                        @endforeach
+                                                    </select>
+                                                </div>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Archive ID</label>
+                                                    <input type="text" name="arch_id" value="{{ old("arch_id", $folder->arch_id) }}" class="form-control" placeholder="Archive ID" required>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Name</label>
+                                                    <input type="text" name="name" value="{{ old("name", $folder->name) }}" class="form-control" placeholder="Name" minlength="2" maxlength="30" required>
+                                                </div>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Note</label>
+                                                    <textarea class="form-control" name="note" maxlength="80">
+                                                        {{ old("note", $folder->note) }}
+                                                    </textarea>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <input type="file" class="form-control" id="file-item" name="file_item[]" accept="{{ $fileTypes }}" multiple>
+                                            </div>
+                                        </div>
+                                        <br/>
+                                        <div class="modal-footer">
+                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                            </button>
+                                            <button type="submit" class="btn btn-primary">Save changes</button>
+                                        </div>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-hidden="true">
+                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                            <div class="modal-content">
+                                <div class="modal-header">
+                                    <h5 class="modal-title" id="exampleModalCenterTitle">Create folder</h5>
+                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                        <i class="ti-close"></i>
+                                    </button>
+                                </div>
+                                <div class="modal-body">
+                                    <form action="{{ route("dashboard.folders.store") }}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
+                                        @csrf
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label for="exampleFormControlSelect1">Department</label>
+                                                    @if($departments->count())
+                                                        <select class="form-control new_folder_deparment" name="department" required>
+                                                            @foreach ($departments as $department)
+                                                                <option value="{{ $department->id }}" data-dept-code="{{ $department->code }}" {{ (old("department") == $department->id ? "selected" : "") }}>{{ $department->name }}</option>
+                                                            @endforeach
+                                                            @else
+                                                                <p>You haven't created any departments yet. <a class="text-primary" href="{{ route("dashboard.departments.create") }}">Create now.</a></p>
+                                                            @endif
+                                                        </select>
+                                                </div>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Archive ID</label>
+                                                    <input type="text" name="arch_id" value="" class="form-control" placeholder="Archive ID" required>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Name</label>
+                                                    <input type="text" name="name" value="{{ old('name') }}" minlength="2" maxlength="30" class="form-control" placeholder="Name" required>
+                                                </div>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <label>Note</label>
+                                                    <textarea class="form-control" name="note" maxlength="80">{{ old('note') }}</textarea>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="row">
+                                            <div class="col-md-6">
+                                                <input type="file" class="form-control" id="file-item" name="file_item[]" accept="{{ $fileTypes }}" multiple>
+                                            </div>
+                                            <div class="col-md-6">
+                                                <div class="form-group">
+                                                    <div class="form-check">
+                                                        <input class="form-check-input" type="checkbox" value=" {{ old('is_important') }} " id="is_important" name="is_important">
+                                                        <label class="form-check-label">
+                                                            Mark as important
+                                                        </label>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <br/>
+                                        <div class="modal-footer">
+                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                            </button>
+                                            <button type="submit" class="btn btn-primary">Save changes</button>
+                                        </div>
+                                    </form>
+                                </div>
+
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="modal fade" id="deleteModal_{{$folder->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                        <div class="modal-dialog modal-dialog-centered" role="document">
+                            <div class="modal-content">
+                                <div class="modal-header">
+                                    <h5 class="modal-title" id="exampleModalCenterTitle">Delete confirmation</h5>
+                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                        <i class="ti-close"></i>
+                                    </button>
+                                </div>
+                                <div class="modal-body">
+                                    <form action="{{ route("dashboard.folders.destroy", $folder->id) }}" method="POST">
+                                        @csrf
+                                        @method('DELETE')
+                                        <p>Are you sure you want to delete folder {{$folder->name}} with Archive ID: {{ $folder->arch_id }}?</p>
+                                        <div class="modal-footer">
+                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                            </button>
+                                            <button type="submit" class="btn btn-primary">Save changes</button>
+                                        </div>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                @empty
+                    <div class="col-xl-3 col-lg-4 col-md-6 col-sm-12">No items found</div>
+                @endforelse
+
+            </div>
+            @if(!Request::query('search'))
+                {{$folders->appends($_GET)->links('layouts.pagination') }}
+            @endif
+        </div>
+
+        @endsection
+
+        @section('script')
+
+            @yield('script')
+
+            <script>
+                function toggleImportant(id) {
+                    document.getElementById('toggleImportant_' + id).submit();
+                }
+            </script>
+
+@endsection
Index: resources/views/dashboard/index.blade.php
===================================================================
--- resources/views/dashboard/index.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ resources/views/dashboard/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -1,5 +1,3 @@
 @extends('layouts.app')
-
-@section("title", "Dashboard")
 
 @section('head')
@@ -7,19 +5,25 @@
     <link rel="stylesheet" href="{{ url('/vendors/slick/slick.css') }}" type="text/css">
     <link rel="stylesheet" href="{{ url('/vendors/slick/slick-theme.css') }}" type="text/css">
+
+    <!-- Daterangepicker -->
+    <link rel="stylesheet" href="{{ url('vendors/datepicker/daterangepicker.css') }}" type="text/css">
+
+    <!-- DataTable -->
+    <link rel="stylesheet" href="{{ url('vendors/dataTable/datatables.min.css') }}" type="text/css">
 @endsection
 
-
 @section('pageTitle', 'Dashboard')
 
 @section('content')
 
-    <nav aria-label="breadcrumb">
-        <ol class="breadcrumb">
-            <li class="breadcrumb-item">
-                <a href="{{ url('/') }}">Home</a>
-            </li>
-            <li class="breadcrumb-item active" aria-current="page">Projects</li>
-        </ol>
-    </nav>
+    <div class="page-header">
+        <nav aria-label="breadcrumb">
+            <ol class="breadcrumb">
+                <li class="breadcrumb-item">
+                    <a href="{{ url('/') }}">Dashboard</a>
+                </li>
+            </ol>
+        </nav>
+    </div>
 
     <div class="row">
@@ -27,641 +31,946 @@
 
             <div class="row">
-                <div class="col-lg-8 col-md-12">
+                <div class="col-lg-4 col-md-12">
                     <div class="card">
                         <div class="card-body">
-                            <div class="card-title d-flex justify-content-between">
-                                <h6 class="card-title">Project Tasks</h6>
+                            <div class="d-flex justify-content-between mb-3">
                                 <div>
-                                    <a href="#" class="mr-3">
-                                        <i class="fa fa-refresh"></i>
-                                    </a>
-                                    <span class="dropdown">
-                                        <a href="#" data-toggle="dropdown" aria-haspopup="true"
-                                           aria-expanded="false">
-                                            <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
+                                    <p class="text-muted">Total Departments</p>
+                                    <h2 class="font-weight-bold">{{ $departments->count() }}</h2>
+                                </div>
+                                <div>
+                                    <figure class="avatar">
+                                        <span class="avatar-title bg-success-bright text-success rounded-circle">
+                                            <i class="ti-layout-grid2"></i>
+                                        </span>
+                                    </figure>
+                                </div>
+                            </div>
+                            <div class="d-inline-flex align-items-center">
+                                <a href="{{ route("dashboard.departments.index") }}" class="text-linkedin"><i class="fa fa-arrow-right text-linkedin pr-1" aria-hidden="true"></i> Show departments</a>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-lg-4 col-md-12">
+                    <div class="card">
+                        <div class="card-body">
+                            <div class="d-flex justify-content-between mb-3">
+                                <div>
+                                    <p class="text-muted">Total Folders</p>
+                                    <h2 class="font-weight-bold">{{ $folders->count() }}</h2>
+                                </div>
+                                <div>
+                                    <figure class="avatar">
+                                        <span class="avatar-title bg-info-bright text-info rounded-circle">
+                                            <i class="ti-folder"></i>
+                                        </span>
+                                    </figure>
+                                </div>
+                            </div>
+                            <div class="d-inline-flex align-items-center">
+                                <a href="{{ route("dashboard.folders.index") }}" class="text-linkedin"><i class="fa fa-arrow-right text-linkedin pr-1" aria-hidden="true"></i> Show folders</a>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-lg-4 col-md-12">
+                    <div class="card">
+                        <div class="card-body">
+                            <div class="d-flex justify-content-between mb-3">
+                                <div>
+                                    <p class="text-muted">Total Files</p>
+                                    <h2 class="font-weight-bold">{{ $files->count() }}</h2>
+                                </div>
+                                <div>
+                                    <figure class="avatar">
+                                        <span class="avatar-title bg-warning-bright text-warning rounded-circle">
+                                            <i class="ti-files"></i>
+                                        </span>
+                                    </figure>
+                                </div>
+                            </div>
+                            <div class="d-inline-flex align-items-center">
+                                <a href="{{ route("dashboard.files.index") }}" class="text-linkedin"><i class="fa fa-arrow-right text-linkedin pr-1" aria-hidden="true"></i> Show files</a>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-lg-8 col-md-12">
+            <div class="card">
+                <div class="card-body">
+                    <div class="d-flex justify-content-between">
+                        <h6 class="card-title">Revenue</h6>
+                        <div>
+                            <a href="#" class="btn btn-outline-light btn-sm mr-2">
+                                <i class="fa fa-refresh"></i>
+                            </a>
+                            <div class="dropdown">
+                                <a href="#" data-toggle="dropdown"
+                                   class="btn btn-outline-light btn-sm"
+                                   aria-haspopup="true" aria-expanded="false">
+                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                </a>
+                                <div class="dropdown-menu dropdown-menu-right">
+                                    <a class="dropdown-item" href="#">Action</a>
+                                    <a class="dropdown-item" href="#">Another action</a>
+                                    <a class="dropdown-item" href="#">Something else here</a>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="row mb-3">
+                        <div class="col-lg-4">
+                            <p class="mb-2">This Week</p>
+                            <div class="d-flex align-items-end">
+                                <h2 class="mb-0 line-height-30 font-size-35">$235</h2>
+                                <span class="text-success small ml-2 d-flex align-items-center">
+                                    <span class="ti-arrow-up mr-2"></span>
+                                    <span class="badge badge-success rounded d-inline-flex align-items-center">1.9%</span>
+                                </span>
+                            </div>
+                        </div>
+                        <div class="col-lg-4">
+                            <p class="mb-2">Last Week</p>
+                            <div class="d-flex align-items-end">
+                                <h2 class="mb-0 line-height-30 font-size-35">$5,180</h2>
+                                <span class="text-danger small ml-2 d-flex align-items-center">
+                                    <span class="ti-arrow-down mr-2"></span>
+                                    <span class="badge badge-danger rounded d-inline-flex align-items-center">1.9%</span>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div id="revenue"></div>
+                </div>
+            </div>
+
+        </div>
+        <div class="col-lg-4 col-md-12">
+            <div class="card">
+                <div class="card-body">
+                    <div class="d-flex justify-content-between">
+                        <h6 class="card-title">Hot Products</h6>
+                        <div>
+                            <div class="dropdown">
+                                <a href="#" data-toggle="dropdown"
+                                   class="btn btn-outline-light btn-sm"
+                                   aria-haspopup="true" aria-expanded="false">
+                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                </a>
+                                <div class="dropdown-menu dropdown-menu-right">
+                                    <a class="dropdown-item" href="#">Action</a>
+                                    <a class="dropdown-item" href="#">Another action</a>
+                                    <a class="dropdown-item" href="#">Something else here</a>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div id="hot-products"></div>
+                    <div>
+                        <ul class="list-group list-group-flush">
+                            <li class="list-group-item pl-0 pr-0">
+                                <i class="fa fa-circle mr-1 text-secondary"></i> Iphone
+                            </li>
+                            <li class="list-group-item pl-0 pr-0">
+                                <i class="fa fa-circle mr-1 text-warning"></i> Samsung
+                            </li>
+                            <li class="list-group-item pl-0 pr-0">
+                                <i class="fa fa-circle mr-1 text-info"></i> Huawei
+                            </li>
+                            <li class="list-group-item pl-0 pr-0">
+                                <i class="fa fa-circle mr-1 text-success"></i> General Mobile
+                            </li>
+                            <li class="list-group-item pl-0 pr-0">
+                                <i class="fa fa-circle mr-1 text-danger"></i> Xiaomi
+                            </li>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="card">
+        <div class="card-body">
+            <div class="d-flex justify-content-between">
+                <h6 class="card-title">Recent Orders</h6>
+                <div>
+                    <a href="#" class="btn btn-outline-light btn-sm mr-2">
+                        <i class="fa fa-refresh"></i>
+                    </a>
+                    <div class="dropdown">
+                        <a href="#" data-toggle="dropdown"
+                           class="btn btn-outline-light btn-sm"
+                           aria-haspopup="true" aria-expanded="false">
+                            <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                        </a>
+                        <div class="dropdown-menu dropdown-menu-right">
+                            <a class="dropdown-item" href="#">Action</a>
+                            <a class="dropdown-item" href="#">Another action</a>
+                            <a class="dropdown-item" href="#">Something else here</a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-md-12">
+                    <div class="table-responsive">
+                        <table id="recent-orders" class="table table-lg">
+                            <thead>
+                            <tr>
+                                <th>ID</th>
+                                <th>Product Name</th>
+                                <th>Customer</th>
+                                <th>Total Price</th>
+                                <th>Status</th>
+                                <th>Date</th>
+                                <th>Action</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            <tr>
+                                <td>
+                                    <a href="#">3145</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product1.png') }}"
+                                             class="rounded mr-3" alt="grape">
+                                        <span>HP Pavilion 15-EC0005NT AMD</span>
+                                    </a>
+                                </td>
+                                <td>Dollie Bullock</td>
+                                <td>$230</td>
+                                <td>
+                                    <span
+                                        class="badge bg-secondary-bright text-secondary">On pre-order (not paid)</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">7321</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product2.png') }}"
+                                             class="rounded mr-3" alt="banana">
+                                        <span>Samsung Galaxy A51 128 GB</span>
+                                    </a>
+                                </td>
+                                <td>Holmes Hines</td>
+                                <td>$300</td>
+                                <td>
+                                    <span class="badge bg-success-bright text-success">Payment accepted</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">9342</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product3.png') }}"
+                                             class="rounded mr-3" alt="cherry">
+                                        <span>Snopy SN-BT96 Pretty</span>
+                                    </a>
+                                </td>
+                                <td>Serena Glover</td>
+                                <td>$250</td>
+                                <td>
+                                    <span class="badge bg-danger-bright text-danger">Payment error</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">6416</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product4.png') }}"
+                                             class="rounded mr-3" alt="papaya">
+                                        <span>Ultimate Ears Wonderboom</span>
+                                    </a>
+                                </td>
+                                <td>Dianne Prince</td>
+                                <td>$550</td>
+                                <td>
+                                    <span class="badge bg-success-bright text-success">Payment accepted</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">92327</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product5.png') }}"
+                                             class="rounded mr-3" alt="pig">
+                                        <span>Canon Pixma E3140 Printer</span>
+                                    </a>
+                                </td>
+                                <td>Morgan Pitts</td>
+                                <td>$280</td>
+                                <td>
+                                    <span class="badge bg-warning-bright text-warning">Preparing the order</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">3013</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product6.png') }}"
+                                             class="rounded mr-3" alt="pineapple">
+                                        <span>Canon 4000D 18-55 MM</span>
+                                    </a>
+                                </td>
+                                <td>Merrill Richardson</td>
+                                <td>$128</td>
+                                <td>
+                                    <span class="badge bg-info-bright text-info">Awaiting PayPal payment</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">10323</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product7.png') }}"
+                                             class="rounded mr-3" alt="pomegranate">
+                                        <span>Lenovo Tab E10 TB-X104F 32GB 10.1"</span>
+                                    </a>
+                                </td>
+                                <td>Krista Mathis</td>
+                                <td>$500</td>
+                                <td>
+                                    <span class="badge bg-secondary-bright text-secondary">Shipped</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">4218</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product8.png') }}"
+                                             class="rounded mr-3" alt="raspberry">
+                                        <span>Samsung 55Q60RAT 55"</span>
+                                    </a>
+                                </td>
+                                <td>Frankie Hewitt</td>
+                                <td>$300</td>
+                                <td>
+                                    <span class="badge bg-success-bright text-success">Remote payment accepted</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">3158</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product9.png') }}"
+                                             class="rounded mr-3" alt="strawberry">
+                                        <span>Toshiba Canvio Basic 1TB 2.5"</span>
+                                    </a>
+                                </td>
+                                <td>Hayden Fitzgerald</td>
+                                <td>$200</td>
+                                <td>
+                                    <span class="badge bg-success-bright text-success">Delivered</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <a href="#">9610</a>
+                                </td>
+                                <td>
+                                    <a href="testproduct-detail') }}" class="d-flex align-items-center">
+                                        <img width="40" src="{{ url('assets/media/image/products/product10.png') }}"
+                                             class="rounded mr-3" alt="watermelon">
+                                        <span>Fms Wireless Controller</span>
+                                    </a>
+                                </td>
+                                <td>Cole Holcomb</td>
+                                <td>$700</td>
+                                <td>
+                                    <span
+                                        class="badge bg-secondary-bright text-secondary">On pre-order (not paid)</span>
+                                </td>
+                                <td>2018/08/28 21:24:36</td>
+                                <td>
+                                    <a href="#" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                        <i class="ti-pencil"></i>
+                                    </a>
+                                    <a href="#" class="text-danger ml-2" data-toggle="tooltip" title="Delete">
+                                        <i class="ti-trash"></i>
+                                    </a>
+                                </td>
+                            </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-lg-8 col-md-12">
+            <div class="card">
+                <div class="card-body">
+                    <div class="d-md-flex mb-2 mb-sm-0 justify-content-between">
+                        <h6 class="card-title">Activities</h6>
+                        <div>
+                            <div id="reportrange" class="form-control">
+                                <span></span>
+                            </div>
+                        </div>
+                    </div>
+                    <div id="ecommerce-activity-chart"></div>
+                </div>
+            </div>
+        </div>
+        <div class="col-lg-4 col-md-12">
+            <div class="card">
+                <div class="card-body pb-0">
+                    <div class="d-flex justify-content-between align-items-start mb-3">
+                        <h6 class="card-title mb-0">Top Sales</h6>
+                        <a href="#" class="small">All Sales</a>
+                    </div>
+                </div>
+                <div class="table-responsive">
+                    <table class="table table-striped mb-0">
+                        <thead>
+                        <tr>
+                            <th>Product</th>
+                            <th>Total Sales</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr>
+                            <td>
+                                <a href="#">Apple</a>
+                            </td>
+                            <td>21</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">Samsung <span class="badge badge-danger ml-1">New</span></a>
+                            </td>
+                            <td>52</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">Huawei</a>
+                            </td>
+                            <td>74</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">General Mobile</a>
+                            </td>
+                            <td>25</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">Xiaomi</a>
+                            </td>
+                            <td>11</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">Nokia</a>
+                            </td>
+                            <td>8</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">Sony</a>
+                            </td>
+                            <td>5</td>
+                        </tr>
+                        <tr>
+                            <td>
+                                <a href="#">Alcatel</a>
+                            </td>
+                            <td>5</td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-md-6">
+            <div class="card">
+                <div class="card-body">
+                    <h6 class="card-title d-flex justify-content-between">
+                        <span>Income Distribution</span>
+                        <span class="dropdown">
+                            <a class="btn btn-outline-light btn-sm dropdown-toggle" href="#"
+                               data-toggle="dropdown">USA</a>
+                            <span class="dropdown-menu dropdown-menu-right">
+                                <a href="#" class="dropdown-item">USA</a>
+                                <a href="#" class="dropdown-item">Germany</a>
+                                <a href="#" class="dropdown-item">France</a>
+                                <a href="#" class="dropdown-item">Italy</a>
+                            </span>
+                        </span>
+                    </h6>
+                    <div id="vmap_usa_en" style="height: 300px"></div>
+                </div>
+                <div class="table-responsive">
+                    <table class="table table-borderless table-lg table-striped mb-0">
+                        <thead>
+                        <tr>
+                            <th class="wd-40">States</th>
+                            <th class="wd-25 text-center">Orders</th>
+                            <th class="wd-35 text-center">Earnings</th>
+                            <th class="wd-35"></th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr>
+                            <td>California</td>
+                            <td class="text-center">12,201</td>
+                            <td class="text-center text-success">$150,200.80</td>
+                            <td class="text-right">
+                                <a href="#" data-toggle="tooltip" title="Detail">
+                                    <i class="fa fa-external-link"></i>
+                                </a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Texas</td>
+                            <td class="text-center">11,950</td>
+                            <td class="text-center text-success">$138,910.20</td>
+                            <td class="text-right">
+                                <a href="#" data-toggle="tooltip" title="Detail">
+                                    <i class="fa fa-external-link"></i>
+                                </a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Wyoming</td>
+                            <td class="text-center">11,198</td>
+                            <td class="text-center text-danger">$132,050.00</td>
+                            <td class="text-right">
+                                <a href="#" data-toggle="tooltip" title="Detail">
+                                    <i class="fa fa-external-link"></i>
+                                </a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Florida</td>
+                            <td class="text-center">9,885</td>
+                            <td class="text-center text-success">$127,762.10</td>
+                            <td class="text-right">
+                                <a href="#" data-toggle="tooltip" title="Detail">
+                                    <i class="fa fa-external-link"></i>
+                                </a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>New York</td>
+                            <td class="text-center">21,198</td>
+                            <td class="text-center text-danger">$432,410.00</td>
+                            <td class="text-right">
+                                <a href="#" data-toggle="tooltip" title="Detail">
+                                    <i class="fa fa-external-link"></i>
+                                </a>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Montana</td>
+                            <td class="text-center">2,885</td>
+                            <td class="text-center text-success">$7,100.00</td>
+                            <td class="text-right">
+                                <a href="#" data-toggle="tooltip" title="Detail">
+                                    <i class="fa fa-external-link"></i>
+                                </a>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-6">
+            <div class="card">
+                <div class="card-body">
+                    <div class="card-title d-flex justify-content-between">
+                        <h6 class="card-title">Revenue by Country</h6>
+                        <div>
+                            <a href="#" class="btn btn-outline-light btn-sm mr-2">
+                                <i class="fa fa-refresh"></i>
+                            </a>
+                            <div class="dropdown">
+                                <a href="#" data-toggle="dropdown"
+                                   class="btn btn-outline-light btn-sm"
+                                   aria-haspopup="true" aria-expanded="false">
+                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                </a>
+                                <div class="dropdown-menu dropdown-menu-right">
+                                    <a class="dropdown-item" href="#">Action</a>
+                                    <a class="dropdown-item" href="#">Another action</a>
+                                    <a class="dropdown-item" href="#">Something else here</a>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <p>Total Revenue</p>
+                    <h2 class="mb-4 font-size-35">$469,453</h2>
+                    <div class="progress mb-3" style="height: 10px">
+                        <div class="progress-bar w-25 bg-secondary-gradient" role="progressbar"></div>
+                        <div class="progress-bar w-50 bg-info-gradient" role="progressbar"></div>
+                        <div class="progress-bar w-25 bg-warning-gradient" role="progressbar"></div>
+                        <div class="progress-bar w-25 bg-success-gradient" role="progressbar"></div>
+                        <div class="progress-bar w-50 bg-danger-gradient" role="progressbar"></div>
+                    </div>
+                </div>
+                <div class="p-4 bg-dark-gradient">
+                    <ul class="list-inline ">
+                        <li class="list-inline-item mr-4 mb-3">
+                            <div class="d-flex align-items-center">
+                                <span class="d-inline-flex align-items-center">
+                                    <i class="fa fa-circle text-secondary mr-1 small"></i> Russia
+                                </span>
+                                <small class="ml-3 text-success d-inline-flex align-items-center">
+                                    <i class="fa fa-caret-up mr-1"></i> 40%
+                                </small>
+                            </div>
+                        </li>
+                        <li class="list-inline-item mr-4 mb-3">
+                            <div class="d-flex align-items-center">
+                                <span class="d-inline-flex align-items-center">
+                                    <i class="fa fa-circle text-info mr-1 small"></i> Australia
+                                </span>
+                                <small class="ml-3 text-danger d-inline-flex align-items-center">
+                                    <i class="fa fa-caret-down mr-1"></i> 25%
+                                </small>
+                            </div>
+                        </li>
+                        <li class="list-inline-item mr-4 mb-3">
+                            <div class="d-flex align-items-center">
+                                <span class="d-inline-flex align-items-center">
+                                <i class="fa fa-circle text-warning mr-1 small"></i> China
+                                </span>
+                                <small class="ml-3 text-success d-inline-flex align-items-center">
+                                    <i class="fa fa-caret-up mr-1"></i> 30%
+                                </small>
+                            </div>
+                        </li>
+                        <li class="list-inline-item mr-4 mb-3">
+                            <div class="d-flex align-items-center">
+                                <span class="d-inline-flex align-items-center">
+                                <i class="fa fa-circle text-success mr-1 small"></i> Tunisia
+                                </span>
+                                <small class="ml-3 text-success d-inline-flex align-items-center">
+                                    <i class="fa fa-caret-up mr-1"></i> 10%
+                                </small>
+                            </div>
+                        </li>
+                        <li class="list-inline-item mr-4 mb-3">
+                            <div class="d-flex align-items-center">
+                                <span class="d-inline-flex align-items-center">
+                                <i class="fa fa-circle text-success mr-1 small"></i> Spain
+                                </span>
+                                <small class="ml-3 text-danger d-inline-flex align-items-center">
+                                    <i class="fa fa-caret-down mr-1"></i> 10%
+                                </small>
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+            <div class="card">
+                <div class="card-body">
+                    <h6 class="card-title">Reviews</h6>
+                    <div class="card-scroll">
+                        <ul class="list-group list-group-flush">
+                            <li class="list-group-item d-flex pl-0 pr-0">
+                                <a href="#">
+                                    <figure class="avatar mr-3">
+                                        <img src="{{ url('assets/media/image/user/man_avatar1.jpg') }}" class="rounded-circle" alt="image">
+                                    </figure>
+                                </a>
+                                <div>
+                                    <div class="d-flex justify-content-between">
+                                        <a href="#">
+                                            <h6>Valentine Maton</h6>
+                                            <ul class="list-inline mb-1">
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">(5)</li>
+                                            </ul>
                                         </a>
-                                        <span class="dropdown-menu dropdown-menu-right">
-                                            <a href="#" class="dropdown-item">Action</a>
-                                            <a href="#" class="dropdown-item">Another action</a>
-                                            <a href="#" class="dropdown-item">Something else here</a>
-                                        </span>
-                                    </span>
-                                </div>
-                            </div>
-                            <div id="project-tasks"></div>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-lg-4 col-md-12">
-                    <div class="card overflow-hidden">
-                        <div class="card-body">
-                            <div class="d-flex justify-content-between">
-                                <h6 class="card-title mb-0">All Projects</h6>
-                                <div>
-                                    <a href="#" class="mr-3">
-                                        <i class="fa fa-refresh"></i>
-                                    </a>
-                                    <span class="dropdown">
-                                        <a href="#" data-toggle="dropdown" aria-haspopup="true"
-                                           aria-expanded="false">
-                                            <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
-                                        </a>
-                                        <span class="dropdown-menu dropdown-menu-right">
-                                            <a href="#" class="dropdown-item">Action</a>
-                                            <a href="#" class="dropdown-item">Another action</a>
-                                            <a href="#" class="dropdown-item">Something else here</a>
-                                        </span>
-                                    </span>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="slick-js">
-                            <div class="card border-0">
-                                <div class="card-body">
-                                    <div class="d-flex align-items-center">
-                                        <h5 class="mb-0">
-                                            <a href="" class="link-2">Frontend Development</a>
-                                            <span class="badge badge-success ml-2">Active</span>
-                                        </h5>
-                                        <div class="dropdown ml-auto">
-                                            <a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                                <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
-                                            </a>
-                                            <div class="dropdown-menu dropdown-menu-right">
-                                                <a href="#" class="dropdown-item">View Detail</a>
-                                                <a href="#" class="dropdown-item">Share</a>
-                                                <a href="#" class="dropdown-item">Download</a>
-                                                <a href="#" class="dropdown-item">Copy to</a>
-                                                <a href="#" class="dropdown-item">Rename</a>
-                                                <a href="#" class="dropdown-item text-danger">Delete</a>
+                                        <div class="ml-auto">
+                                            <div class="dropdown">
+                                                <a href="#" data-toggle="dropdown"
+                                                   class="btn btn-outline-light btn-sm"
+                                                   aria-haspopup="true" aria-expanded="false">
+                                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                                </a>
+                                                <div class="dropdown-menu dropdown-menu-right">
+                                                    <a href="#" class="dropdown-item">View</a>
+                                                    <a href="#" class="dropdown-item">Send Message</a>
+                                                </div>
                                             </div>
                                         </div>
                                     </div>
-                                    <div class="text-muted small mt-1 mb-3">10 opened tasks, 5 tasks completed</div>
-                                    <div class="progress mb-2" style="height: 5px;">
-                                        <div class="progress-bar bg-primary" style="width: 53%;"></div>
-                                    </div>
-                                    <p class="small">
-                                        <strong>53%</strong> completed
-                                    </p>
-                                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac malesuada nisl.
-                                        Maecenas quis ultrices tellus.</p>
-                                    <div class="row">
-                                        <div class="col">
-                                            <div class="text-muted mb-1 small">Created</div>
-                                            <div>02/01/2019</div>
-                                        </div>
-                                        <div class="col">
-                                            <div class="text-muted mb-1 small">Deadline</div>
-                                            <div>03/12/2019</div>
-                                        </div>
-                                    </div>
-                                </div>
-                                <hr class="m-0">
-                                <div class="card-body">
-                                    <div class="small mb-2">Team Member</div>
-                                    <div class="avatar-group">
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/women_avatar2.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/women_avatar4.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/man_avatar3.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/man_avatar1.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="card border-0">
-                                <div class="card-body">
-                                    <div class="d-flex align-items-center">
-                                        <h5 class="mb-0">
-                                            <a href="" class="link-2">UI-Kit Development</a>
-                                            <span class="badge badge-success ml-2">Active</span>
-                                        </h5>
-                                        <div class="dropdown ml-auto">
-                                            <a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                                <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
-                                            </a>
-                                            <div class="dropdown-menu dropdown-menu-right">
-                                                <a href="#" class="dropdown-item">View Detail</a>
-                                                <a href="#" class="dropdown-item">Share</a>
-                                                <a href="#" class="dropdown-item">Download</a>
-                                                <a href="#" class="dropdown-item">Copy to</a>
-                                                <a href="#" class="dropdown-item">Rename</a>
-                                                <a href="#" class="dropdown-item text-danger">Delete</a>
+                                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio, tempora.</p>
+                                </div>
+                            </li>
+                            <li class="list-group-item d-flex pl-0 pr-0">
+                                <a href="#">
+                                    <figure class="avatar mr-3">
+                                        <img src="{{ url('assets/media/image/user/man_avatar2.jpg') }}" class="rounded-circle" alt="image">
+                                    </figure>
+                                </a>
+                                <div>
+                                    <div class="d-flex justify-content-between">
+                                        <a href="#">
+                                            <h6>Valentine Maton</h6>
+                                            <ul class="list-inline mb-1">
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star-half-o text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star-o"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">(3.5)</li>
+                                            </ul>
+                                        </a>
+                                        <div class="ml-auto">
+                                            <div class="dropdown">
+                                                <a href="#" data-toggle="dropdown"
+                                                   class="btn btn-outline-light btn-sm"
+                                                   aria-haspopup="true" aria-expanded="false">
+                                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                                </a>
+                                                <div class="dropdown-menu dropdown-menu-right">
+                                                    <a href="#" class="dropdown-item">View</a>
+                                                    <a href="#" class="dropdown-item">Send Message</a>
+                                                </div>
                                             </div>
                                         </div>
                                     </div>
-                                    <div class="text-muted small mt-1 mb-3">10 opened tasks, 5 tasks completed</div>
-                                    <div class="progress mb-2" style="height: 5px;">
-                                        <div class="progress-bar bg-success" style="width: 53%;"></div>
-                                    </div>
-                                    <p class="small">
-                                        <strong>53%</strong> completed
-                                    </p>
-                                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac malesuada nisl.
-                                        Maecenas quis ultrices tellus.</p>
-                                    <div class="row">
-                                        <div class="col">
-                                            <div class="text-muted mb-1 small">Created</div>
-                                            <div>02/01/2019</div>
-                                        </div>
-                                        <div class="col">
-                                            <div class="text-muted mb-1 small">Deadline</div>
-                                            <div>03/12/2019</div>
-                                        </div>
-                                    </div>
-                                </div>
-                                <hr class="m-0">
-                                <div class="card-body">
-                                    <div class="small mb-2">Team Member</div>
-                                    <div class="avatar-group">
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/women_avatar2.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/women_avatar4.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/man_avatar3.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/man_avatar1.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/man_avatar5.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/man_avatar2.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="card border-0">
-                                <div class="card-body">
-                                    <div class="d-flex align-items-center">
-                                        <h5 class="mb-0">
-                                            <a href="" class="link-2">Backend Development</a>
-                                            <span class="badge badge-warning ml-2">Pending</span>
-                                        </h5>
-                                        <div class="dropdown ml-auto">
-                                            <a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                                <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
-                                            </a>
-                                            <div class="dropdown-menu dropdown-menu-right">
-                                                <a href="#" class="dropdown-item">View Detail</a>
-                                                <a href="#" class="dropdown-item">Share</a>
-                                                <a href="#" class="dropdown-item">Download</a>
-                                                <a href="#" class="dropdown-item">Copy to</a>
-                                                <a href="#" class="dropdown-item">Rename</a>
-                                                <a href="#" class="dropdown-item text-danger">Delete</a>
+                                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio, tempora.</p>
+                                </div>
+                            </li>
+                            <li class="list-group-item d-flex pl-0 pr-0">
+                                <a href="#">
+                                    <figure class="avatar mr-3">
+                                        <img src="{{ url('assets/media/image/user/man_avatar3.jpg') }}" class="rounded-circle" alt="image">
+                                    </figure>
+                                </a>
+                                <div>
+                                    <div class="d-flex justify-content-between">
+                                        <a href="#">
+                                            <h6>Valentine Maton</h6>
+                                            <ul class="list-inline mb-1">
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star-half-o text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">(4.5)</li>
+                                            </ul>
+                                        </a>
+                                        <div class="ml-auto">
+                                            <div class="dropdown">
+                                                <a href="#" data-toggle="dropdown"
+                                                   class="btn btn-outline-light btn-sm"
+                                                   aria-haspopup="true" aria-expanded="false">
+                                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                                </a>
+                                                <div class="dropdown-menu dropdown-menu-right">
+                                                    <a href="#" class="dropdown-item">View</a>
+                                                    <a href="#" class="dropdown-item">Send Message</a>
+                                                </div>
                                             </div>
                                         </div>
                                     </div>
-                                    <div class="text-muted small mt-1 mb-3">10 opened tasks, 5 tasks completed</div>
-                                    <div class="progress mb-2" style="height: 5px;">
-                                        <div class="progress-bar bg-success" style="width: 53%;"></div>
-                                    </div>
-                                    <p class="small">
-                                        <strong>53%</strong> completed
-                                    </p>
-                                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac malesuada nisl.
-                                        Maecenas quis ultrices tellus.</p>
-                                    <div class="row">
-                                        <div class="col">
-                                            <div class="text-muted mb-1 small">Created</div>
-                                            <div>02/01/2019</div>
-                                        </div>
-                                        <div class="col">
-                                            <div class="text-muted mb-1 small">Deadline</div>
-                                            <div>03/12/2019</div>
+                                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio, tempora.</p>
+                                </div>
+                            </li>
+                            <li class="list-group-item d-flex pl-0 pr-0">
+                                <a href="#">
+                                    <figure class="avatar mr-3">
+                                        <img src="{{ url('assets/media/image/user/man_avatar4.jpg') }}" class="rounded-circle" alt="image">
+                                    </figure>
+                                </a>
+                                <div>
+                                    <div class="d-flex justify-content-between">
+                                        <a href="#">
+                                            <h6>Valentine Maton</h6>
+                                            <ul class="list-inline mb-1">
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star text-warning"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">
+                                                    <i class="fa fa-star-o"></i>
+                                                </li>
+                                                <li class="list-inline-item mb-0">(4)</li>
+                                            </ul>
+                                        </a>
+                                        <div class="ml-auto">
+                                            <div class="dropdown">
+                                                <a href="#" data-toggle="dropdown"
+                                                   class="btn btn-outline-light btn-sm"
+                                                   aria-haspopup="true" aria-expanded="false">
+                                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                                </a>
+                                                <div class="dropdown-menu dropdown-menu-right">
+                                                    <a href="#" class="dropdown-item">View</a>
+                                                    <a href="#" class="dropdown-item">Send Message</a>
+                                                </div>
+                                            </div>
                                         </div>
                                     </div>
-                                </div>
-                                <hr class="m-0">
-                                <div class="card-body">
-                                    <div class="small mb-2">Team Member</div>
-                                    <div class="avatar-group">
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/women_avatar5.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                        <figure class="avatar avatar-sm">
-                                            <img src="{{ url('assets/media/image/user/women_avatar1.jpg') }}" class="rounded-circle"
-                                                 alt="avatar">
-                                        </figure>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <div class="row">
-                <div class="col-md-6">
-                    <div class="row">
-                        <div class="col-md-6">
-                            <div class="card">
-                                <div class="card-body">
-                                    <div class="d-flex justify-content-between">
-                                        <h6 class="card-title mb-2">Growth</h6>
-                                        <h2 class="mb-0 font-weight-bold">$2,450</h2>
-                                    </div>
-                                    <div class="d-flex align-items-center mt-2">
-                                        <div class="progress flex-grow-1" style="height: 5px">
-                                            <div class="progress-bar bg-primary" role="progressbar"
-                                                 style="width: 62%;"
-                                                 aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-                                        </div>
-                                        <div class="ml-2">%62</div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="col-md-6">
-                            <div class="card">
-                                <div class="card-body">
-                                    <div class="d-flex justify-content-between">
-                                        <h6 class="card-title mb-2">Project</h6>
-                                        <h2 class="mb-0 font-weight-bold">2,320</h2>
-                                    </div>
-                                    <div class="d-flex align-items-center mt-2">
-                                        <div class="progress flex-grow-1" style="height: 5px">
-                                            <div class="progress-bar bg-warning" role="progressbar"
-                                                 style="width:73%;"
-                                                 aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-                                        </div>
-                                        <div class="ml-2">%73</div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="col-md-6">
-                            <div class="card">
-                                <div class="card-body">
-                                    <div class="d-flex justify-content-between">
-                                        <h6 class="card-title mb-2">Income</h6>
-                                        <h2 class="mb-0 font-weight-bold">$9,750</h2>
-                                    </div>
-                                    <div class="d-flex align-items-center mt-2">
-                                        <div class="progress flex-grow-1" style="height: 5px">
-                                            <div class="progress-bar bg-success" role="progressbar"
-                                                 style="width: 40%;"
-                                                 aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-                                        </div>
-                                        <div class="ml-2">%40</div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="col-md-6">
-                            <div class="card">
-                                <div class="card-body">
-                                    <div class="d-flex justify-content-between">
-                                        <h6 class="card-title mb-2">Employers</h6>
-                                        <h2 class="mb-0 font-weight-bold">3,156</h2>
-                                    </div>
-                                    <div class="d-flex align-items-center mt-2">
-                                        <div class="progress flex-grow-1" style="height: 5px">
-                                            <div class="progress-bar bg-info" role="progressbar"
-                                                 style="width: 55%;"
-                                                 aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-                                        </div>
-                                        <div class="ml-2">%55</div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-md-6">
-                    <div class="card">
-                        <div class="card-body text-center">
-                            <h5>10th Dance Competition 2019</h5>
-                            <p class="text-muted">Sunt in culpa qui officia deserunt mol excep teur sint occa ecat cupi
-                                datat non</p>
-                            <div class="mb-4 d-flex align-items-center justify-content-center">
-                                <div class="avatar-group">
-                                    <figure class="avatar">
-                                        <span class="avatar-title bg-success rounded-circle">E</span>
-                                    </figure>
-                                    <figure class="avatar">
-                                        <img src="{{ url('assets/media/image/user/women_avatar4.jpg') }}" class="rounded-circle"
-                                             alt="avatar">
-                                    </figure>
-                                    <figure class="avatar">
-                                        <span class="avatar-title bg-danger rounded-circle">S</span>
-                                    </figure>
-                                    <figure class="avatar">
-                                        <img src="{{ url('assets/media/image/user/man_avatar1.jpg') }}" class="rounded-circle"
-                                             alt="avatar">
-                                    </figure>
-                                    <figure class="avatar">
-                                        <span class="avatar-title bg-primary rounded-circle">C</span>
-                                    </figure>
-                                </div>
-                                <div class="text-muted ml-2">10+ friends are coming</div>
-                            </div>
-                            <div class="clearfix"></div>
-                            <a href="" class="btn btn-outline-primary">View All</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <div class="row">
-                <div class="col-lg-6 col-md-12">
-
-
-
-
-
-                </div>
-                <div class="col-lg-6 col-md-12">
-
-
-
-                </div>
-            </div>
-
-            <div class="row">
-                <div class="col-md-8">
-                    <div class="card">
-                        <div class="card-body">
-                            <div class="d-flex justify-content-between">
-                                <h6 class="card-title">Recent Projects</h6>
-                                <div>
-                                    <a href="#" class="mr-3">
-                                        <i class="fa fa-refresh"></i>
-                                    </a>
-                                    <span class="dropdown">
-                                        <a href="#" data-toggle="dropdown" aria-haspopup="true"
-                                           aria-expanded="false">
-                                            <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
-                                        </a>
-                                        <span class="dropdown-menu dropdown-menu-right">
-                                            <a href="#" class="dropdown-item">Action</a>
-                                            <a href="#" class="dropdown-item">Another action</a>
-                                            <a href="#" class="dropdown-item">Something else here</a>
-                                        </span>
-                                    </span>
-                                </div>
-                            </div>
-                            <div class="table-responsive">
-                                <table class="table">
-                                    <thead>
-                                    <tr>
-                                        <th>Project</th>
-                                        <th class="text-center">Task</th>
-                                        <th class="text-center">Members</th>
-                                        <th class="text-center">Status</th>
-                                        <th class="text-right">Progress</th>
-                                    </tr>
-                                    </thead>
-                                    <tbody>
-                                    <tr>
-                                        <td>
-                                            <a href="#">Frontend Development</a>
-                                        </td>
-                                        <td class="text-center">25</td>
-                                        <td class="text-center">
-                                            <div class="avatar-group">
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar2.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar4.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/man_avatar3.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/man_avatar1.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                            </div>
-                                        </td>
-                                        <td class="text-center">
-                                            <span class="badge badge-info">In Progress</span>
-                                        </td>
-                                        <td>
-                                            <div class="d-flex align-items-center">
-                                                <div class="progress flex-grow-1" style="height: 5px;">
-                                                    <div class="progress-bar bg-info" style="width: 53%;"></div>
-                                                </div>
-                                                <small class="ml-2">%53</small>
-                                            </div>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td>
-                                            <a href="#">Backend Development</a>
-                                        </td>
-                                        <td class="text-center">10</td>
-                                        <td class="text-center">
-                                            <div class="avatar-group">
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar2.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar4.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/man_avatar3.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/man_avatar1.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/man_avatar5.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/man_avatar2.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                            </div>
-                                        </td>
-                                        <td class="text-center">
-                                            <span class="badge badge-warning">Pending</span>
-                                        </td>
-                                        <td>
-                                            <div class="d-flex align-items-center">
-                                                <div class="progress flex-grow-1" style="height: 5px;">
-                                                    <div class="progress-bar bg-warning" style="width: 80%;"></div>
-                                                </div>
-                                                <small class="ml-2">%80</small>
-                                            </div>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td>
-                                            <a href="#">UI-Kit Development</a>
-                                        </td>
-                                        <td class="text-center">32</td>
-                                        <td class="text-center">
-                                            <div class="avatar-group">
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar2.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar4.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                            </div>
-                                        </td>
-                                        <td class="text-center">
-                                            <span class="badge badge-success">Active</span>
-                                        </td>
-                                        <td>
-                                            <div class="d-flex align-items-center">
-                                                <div class="progress flex-grow-1" style="height: 5px;">
-                                                    <div class="progress-bar bg-success" style="width: 35%;"></div>
-                                                </div>
-                                                <small class="ml-2">%35</small>
-                                            </div>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td>
-                                            <a href="#">UI-Kit Development 2</a>
-                                        </td>
-                                        <td class="text-center">5</td>
-                                        <td class="text-center">
-                                            <div class="avatar-group">
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar1.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar3.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                                <figure class="avatar avatar-sm">
-                                                    <img src="{{ url('/assets/media/image/user/women_avatar2.jpg') }}"
-                                                         class="rounded-circle"
-                                                         alt="avatar">
-                                                </figure>
-                                            </div>
-                                        </td>
-                                        <td class="text-center">
-                                            <span class="badge badge-info">In Progress</span>
-                                        </td>
-                                        <td>
-                                            <div class="d-flex align-items-center">
-                                                <div class="progress flex-grow-1" style="height: 5px;">
-                                                    <div class="progress-bar bg-info" style="width: 50%;"></div>
-                                                </div>
-                                                <small class="ml-2">%50</small>
-                                            </div>
-                                        </td>
-                                    </tr>
-                                    </tbody>
-                                </table>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-md-4">
-                    <div class="card">
-                        <div class="card-body">
-                            <div class="d-flex justify-content-between">
-                                <h6 class="card-title">Upcoming Meeting</h6>
-                                <a href="#">View All</a>
-                            </div>
-                            <div class="d-flex mb-3">
-                                <div class="text-center">
-                                    <div class="avatar">
-                                    <span
-                                        class="avatar-title bg-info-bright text-info rounded-circle font-size-22">17</span>
-                                    </div>
-                                </div>
-                                <div class="m-l-20">
-                                    <h5 class="mb-2">
-                                        <a class="text-dark">UI Discussion</a>
-                                    </h5>
-                                    <p class="mb-0">Execute core that as result.</p>
-                                </div>
-                            </div>
-                            <div class="d-flex mb-3">
-                                <div class="text-center">
-                                    <div class="avatar">
-                                        <span class="avatar-title bg-danger-bright text-danger rounded-circle font-size-22">21</span>
-                                    </div>
-                                </div>
-                                <div class="m-l-20">
-                                    <h5 class="mb-2">
-                                        <a class="text-dark">Project Schdule</a>
-                                    </h5>
-                                    <p class="mb-0">Special cloth alert always.</p>
-                                </div>
-                            </div>
-                            <div class="d-flex mb-3">
-                                <div class="text-center">
-                                    <div class="avatar">
-                                    <span
-                                        class="avatar-title bg-warning-bright text-warning rounded-circle font-size-22">25</span>
-                                    </div>
-                                </div>
-                                <div class="m-l-20">
-                                    <h5 class="mb-2">
-                                        <a class="text-dark">Design Discussion</a>
-                                    </h5>
-                                    <p class="mb-0">Let us wax poetic about.</p>
-                                </div>
-                            </div>
-                            <div class="d-flex">
-                                <div class="text-center">
-                                    <div class="avatar">
-                                    <span
-                                        class="avatar-title bg-success-bright text-success rounded-circle font-size-22">10</span>
-                                    </div>
-                                </div>
-                                <div class="m-l-20">
-                                    <h5 class="mb-2">
-                                        <a class="text-dark">UI Discussion</a>
-                                    </h5>
-                                    <p class="mb-0">Let us wax poetic about.</p>
-                                </div>
-                            </div>
-                        </div>
+                                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio, tempora.</p>
+                                </div>
+                            </li>
+                        </ul>
+                    </div>
+                    <div class="mt-3 text-center">
+                        <a href="#" class="btn btn-primary">
+                            View All
+                        </a>
                     </div>
                 </div>
@@ -674,15 +983,22 @@
 
 @section('script')
-    <!-- Slick -->
-    <script src="{{ url('/vendors/slick/slick.min.js') }}"></script>
 
     <!-- Apex chart -->
+    <script src="https://apexcharts.com/samples/assets/irregular-data-series.js"></script>
     <script src="{{ url('/vendors/charts/apex/apexcharts.min.js') }}"></script>
 
-    <!-- Circle progress -->
-    <script src="{{ url('/vendors/circle-progress/circle-progress.min.js') }}"></script>
+    <!-- Daterangepicker -->
+    <script src="{{ url('vendors/datepicker/daterangepicker.js') }}"></script>
+
+    <!-- DataTable -->
+    <script src="{{ url('vendors/dataTable/datatables.min.js') }}"></script>
 
     <!-- Dashboard scripts -->
     <script src="{{ url('/assets/js/examples/dashboard.js') }}"></script>
+
+    <!-- Vamp -->
+    <script src="{{ url('vendors/vmap/jquery.vmap.min.js') }}"></script>
+    <script src="{{ url('vendors/vmap/maps/jquery.vmap.usa.js') }}"></script>
+    <script src="{{ url('assets/js/examples/vmap.js') }}"></script>
 
     <!-- To use theme colors with Javascript -->
@@ -702,26 +1018,5 @@
     </div>
 
-{{--    <script>--}}
-{{--        $(function () {--}}
-{{--            $('.slick-js').slick({--}}
-{{--                speed: 500,--}}
-{{--                arrows: false,--}}
-{{--                slidesToShow: 1,--}}
-{{--                slidesToScroll: 1,--}}
-{{--                autoplay: true,--}}
-{{--                autoplaySpeed: 2000--}}
-{{--            });--}}
-
-{{--            $('input[name="daterangepicker"]').daterangepicker();--}}
-
-{{--            $('.dataTable').DataTable({--}}
-{{--                lengthMenu: [5, 10],--}}
-{{--                "columnDefs": [ {--}}
-{{--                    "targets": 7,--}}
-{{--                    "orderable": false--}}
-{{--                } ]--}}
-{{--            });--}}
-{{--        })--}}
-{{--    </script>--}}
+    <script src="{{ url('assets/js/examples/pages/ecommerce-dashboard.js') }}"></script>
 
 @endsection
Index: resources/views/dashboard/notifications/index.blade.php
===================================================================
--- resources/views/dashboard/notifications/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
+++ resources/views/dashboard/notifications/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -0,0 +1,68 @@
+@extends('layouts.app')
+
+@section("title", "SaveSpace - Users")
+
+@section('pageTitle', 'Users')
+
+@section('head')
+    <!-- Datatable -->
+    <link rel="stylesheet" href="{{ url('vendors/dataTable/dataTables.min.css') }}" type="text/css">
+
+@endsection
+
+@section('content')
+
+{{--    <div class="page-header justify-content-between">--}}
+{{--        <nav aria-label="breadcrumb" class="d-flex align-items-start">--}}
+{{--            <ol class="breadcrumb">--}}
+{{--                <li class="breadcrumb-item">--}}
+{{--                    <a href="{{ url('dashboard.users') }}">Users</a>--}}
+{{--                </li>--}}
+{{--                <li class="breadcrumb-item active" aria-current="page">User List</li>--}}
+{{--            </ol>--}}
+{{--        </nav>--}}
+{{--        <div class="dropdown">--}}
+{{--            <a href="{{ route("dashboard.users.create") }}" class="btn btn-primary text-white">--}}
+{{--                Add user--}}
+{{--            </a>--}}
+{{--        </div>--}}
+{{--    </div>--}}
+
+    <div class="row">
+        <div class="col-md-12">
+            <div class="card">
+                <div class="card-body">
+                    <div class="table-responsive">
+                        <table id="user-list" class="table table-lg">
+                            <thead>
+                            <tr>
+                                <th></th>
+                                <th>Message</th>
+                                <th>Ago</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            @foreach($notifications as $notification)
+                                <tr>
+                                    <td></td>
+                                    <td>{{$notification["message"]}}</td>
+                                    <td>{{$notification["ago"]}}</td>
+
+
+                                </tr>
+                            @endforeach
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+@endsection
+
+@section('script')
+    <script src="{{ url('assets/js/examples/pages/user-list.js') }}"></script>
+    <!-- Datatable -->
+    <script src="{{ url('vendors/dataTable/dataTables.min.js') }}"></script>
+@endsection
Index: resources/views/dashboard/settings/index.blade.php
===================================================================
--- resources/views/dashboard/settings/index.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ resources/views/dashboard/settings/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -11,7 +11,7 @@
             <ol class="breadcrumb">
                 <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard/users') }}">Users</a>
+                    <a href="{{ url('/') }}">Dashboard</a>
                 </li>
-                <li class="breadcrumb-item active" aria-current="page">User Settings</li>
+                <li class="breadcrumb-item active" aria-current="page">Settings</li>
             </ol>
         </nav>
@@ -26,5 +26,5 @@
                         <a class="nav-link {{$active_tab == 'account' ? 'active' : ""}}" id="account-tab" data-toggle="pill" href="#account" role="tab" aria-controls="account" aria-selected="true">Account</a>
                         <a class="nav-link {{$active_tab == 'security' ? 'active' : ""}}" id="security-tab" data-toggle="pill" href="#security" role="tab" aria-controls="security" aria-selected="false">Security</a>
-                        <a class="nav-link" id="v-pills-settings-tab" data-toggle="pill" href="#v-pills-settings" role="tab" aria-controls="v-pills-settings" aria-selected="false">Social</a>
+                        <a class="nav-link {{$active_tab == 'file-types' ? 'active' : ""}}" id="file-types-tab" data-toggle="pill" href="#file-types" role="tab" aria-controls="file-types" aria-selected="false">File validation</a>
                     </div>
                 </div>
@@ -227,7 +227,32 @@
                             </div>
                         </div>
-                        <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab">
-                            <div class="card">
-                            </div>
+                        <div class="tab-pane {{$active_tab == 'file-types' ? 'active' : ""}}" id="file-types" role="tabpanel" aria-labelledby="file-types-tab">
+
+                            <div class="card">
+                                    <div class="card-body">
+                                        <h6 class="card-title">File validation</h6>
+                                        <form action="{{ route("dashboard.settings.file-types") }}" method="post" accept-charset="utf-8" enctype='multipart/form-data'>
+                                            @method("patch")
+                                            @csrf
+                                            <div class="row">
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label>Mimes</label>
+                                                        <input type="text" name="mimes" value="{{ $fileType->mimes }}" class="form-control" placeholder="Mimes" required>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label class="form-label">Max file size (in KB)</label>
+                                                        <input type="number" name="max_size" value="{{  $fileType->max_size }}" class="form-control" placeholder="Max file size" autocomplete="off" required>
+                                                        <p class="text-danger p-2">Note: 1 MB = 1024 KB</p>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
+                                        </form>
+                                    </div>
+                                </div>
+
                         </div>
                     </div>
Index: sources/views/dashboard/users/create.blade.php
===================================================================
--- resources/views/dashboard/users/create.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,117 +1,0 @@
-@extends('layouts.app')
-
-@section("title", "Users - Create new")
-
-@section('pageTitle', 'Create user')
-
-@section('content')
-
-    <div class="page-header">
-        <nav aria-label="breadcrumb" class="d-flex align-items-start">
-            <ol class="breadcrumb">
-                <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard/users') }}">Users</a>
-                </li>
-                <li class="breadcrumb-item active" aria-current="page">Create user</li>
-            </ol>
-        </nav>
-    </div>
-
-    <div class="row">
-        <div class="col-md-12">
-
-            <div class="row">
-                <div class="col-lg-12 col-md-12">
-                    <div class="tab-content" id="v-pills-tabContent">
-                        <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
-                            <div class="card">
-                                <div class="card-body">
-                                    <h6 class="card-title">Create user</h6>
-                                    <form action="{{ route("dashboard.users.store") }}" method="post" accept-charset="utf-8" enctype='multipart/form-data' class="needs-validation" novalidate>
-                                        @csrf
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Name</label>
-                                                    <input type="text" name="name" value="{{ old('name') }}" minlength="2" maxlength="25" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Name" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter only letters and spaces with length between [2, 25]
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Surname</label>
-                                                    <input type="text" name="surname" value="{{ old('surname') }}" minlength="2" maxlength="25" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Surname" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter only letters and spaces with length between [2, 25]
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label class="form-label">Username</label>
-                                                    <input type="text" name="username" value="{{ old('username') }}" minlength="5" maxlength="30" class="form-control" placeholder="Username" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter characters with length between [5, 30]
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label class="form-label">Role</label>
-                                                    <select class="form-control" name="userRole required">
-                                                        @foreach ($roles as $role)
-                                                            <option value="{{ $role->id }}" {{ (old("userRole") == $role->id ? "selected" : "" ) }}>{{ $role->name }}</option>
-                                                        @endforeach
-                                                    </select>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Email</label>
-                                                    <input type="email" name="email" value="{{ old('email') }}" class="form-control" placeholder="E-mail" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter a valid email address
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label class="form-label">Phone Number</label>
-                                                    <input type="text" name="phone_number" value="{{ old('phone_number') }}" class="form-control" placeholder="Phone number" autocomplete="off" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter your phone number
-                                                    </div>
-                                                </div>
-                                            </div>
-
-                                        </div>
-
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Avatar</label>
-                                                    <input type="file" name="avatar" value="{{ old('avatar') }}" class="form-control" accept="image/*">
-                                                    <div class="invalid-feedback">
-                                                        Please upload a valid image file
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                            <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
-                                    </form>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-@endsection
Index: sources/views/dashboard/users/edit.blade.php
===================================================================
--- resources/views/dashboard/users/edit.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ 	(revision )
@@ -1,122 +1,0 @@
-@extends('layouts.app')
-
-@section("title", "Users - Edit user")
-
-@section('pageTitle', 'Edit user')
-
-@section('content')
-
-    <div class="page-header">
-        <nav aria-label="breadcrumb" class="d-flex align-items-start">
-            <ol class="breadcrumb">
-                <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard/users') }}">Users</a>
-                </li>
-                <li class="breadcrumb-item active" aria-current="page">Edit user</li>
-            </ol>
-        </nav>
-    </div>
-
-    <div class="row">
-        <div class="col-md-12">
-
-            <div class="row">
-                <div class="col-lg-12 col-md-12">
-                    <div class="tab-content" id="v-pills-tabContent">
-                        <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
-                            <div class="card">
-                                <div class="card-body">
-                                    <h6 class="card-title">User account data</h6>
-                                    <form action="{{ route("dashboard.users.edit", ["id" =>$user->id]) }}" method="post" accept-charset="utf-8" enctype='multipart/form-data' class="needs-validation" novalidate>
-                                        @method("patch")
-                                        @csrf
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Name</label>
-                                                    <input type="text" name="name" value="{{ $user->name }}" minlength="2" maxlength="30" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Name" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter only letters and spaces with length between [2, 30]
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Surname</label>
-                                                    <input type="text" name="surname" value="{{$user->surname}}" minlength="2" maxlength="30" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Surname" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter only letters and spaces with length between [2, 30]
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label class="form-label">Username</label>
-                                                    <input type="text" name="username" value="{{ $user->username }}" minlength="5" maxlength="30" class="form-control" placeholder="Username" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter characters with length between [5, 30]
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label class="form-label">Role</label>
-
-                                                    <select class="form-control" name="userRole" required>
-                                                        @foreach($roles as $role)
-                                                            <option value="{{ $role->id }}" {{ $user->role_id == $role->id ? "selected" : "" }}>{{ $role->name }}</option>
-                                                        @endforeach
-                                                    </select>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label>Email</label>
-                                                    <input type="email" name="email" value="{{ $user->email }}" maxlength="50" class="form-control" placeholder="E-mail" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter a valid email address with length <=50
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-6">
-                                                <div class="form-group">
-                                                    <label class="form-label">Phone Number</label>
-                                                    <input type="text" name="phone_number" value="{{ $user->phone_number }}" class="form-control" placeholder="Phone number" autocomplete="off" required>
-                                                    <div class="invalid-feedback">
-                                                        Please enter your phone number
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <div class="row">
-                                            <div class="col-md-5">
-                                                <div class="form-group">
-                                                    <label>Avatar</label>
-                                                    <input type="file" name="avatar" value="{{ $user->avatar }}" class="form-control" accept="image/*">
-                                                    <div class="invalid-feedback">
-                                                        Please upload a valid image file
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="col-md-1">
-                                                <div class="form-group">
-                                                    <label>Current</label>
-                                                    @include('dashboard.partials.avatar')
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <input type="submit" value="Save changes" class="submitBtn btn btn-primary pull-right m-10">
-                                    </form>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-@endsection
Index: resources/views/dashboard/users/index.blade.php
===================================================================
--- resources/views/dashboard/users/index.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ resources/views/dashboard/users/index.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -17,13 +17,14 @@
             <ol class="breadcrumb">
                 <li class="breadcrumb-item">
-                    <a href="{{ url('dashboard.users') }}">Users</a>
+                    <a href="{{ url('/') }}">Dashboard</a>
                 </li>
-                <li class="breadcrumb-item active" aria-current="page">User List</li>
+                <li class="breadcrumb-item active" aria-current="page">Users</li>
             </ol>
         </nav>
         <div class="dropdown">
-            <a href="{{ route("dashboard.users.create") }}" class="btn btn-primary text-white">
+            <a href="javascript:void(0)" data-toggle="modal" data-target="#createModal" class="btn btn-primary text-white">
                 Add user
             </a>
+            <a href="{{ route('dashboard.users.export') }}" class="btn btn-success text-white">Export table</a>
         </div>
     </div>
@@ -48,5 +49,4 @@
                                 <th>Role</th>
                                 <th>Status</th>
-                                <th>Last seen</th>
                                 <th>Actions</th>
                             </tr>
@@ -84,17 +84,12 @@
                                     <td>
                                         @if(Cache::has('is_online' . $user->id))
-                                            <span class="text-success">Online</span>
+                                            <span data-toggle="tooltip" data-placement="bottom" title="{{ $user->last_seen }}" style="cursor: pointer;" class="text-success">Online</span>
                                         @else
-                                            <span class="text-secondary">Offline</span>
+                                            <span data-toggle="tooltip" data-placement="bottom" title="{{ $user->last_seen }}" class="text-secondary">Offline</span>
                                         @endif
                                     </td>
-                                    @if($user->last_seen==NULL)
-                                        <td>Never logged in</td>
-                                    @else
-                                    <td>{{ \Carbon\Carbon::parse($user->last_seen)->diffForHumans() }}</td>
-                                    @endif
                                     @if($user->hasRole("Referent") && $user->is_confirmed)
                                         <td>
-                                            <a href="{{ route("dashboard.users.edit", ["id" => $user->id]) }}" class="text-secondary" data-toggle="tooltip" title="Edit">
+                                            <a href="javascript:void(0)" class="text-secondary" data-toggle="modal" data-target="#editModal_{{$user->id}}" title="Edit">
                                                 <i class="ti-pencil"></i>
                                             </a>
@@ -104,12 +99,175 @@
                                         </td>
                                     @else
-                                        <td>Not available</td>
+                                        <td>Admin</td>
                                         @endif
                                 </tr>
+
+                                <div class="modal fade" id="editModal_{{$user->id}}" tabindex="-1" role="dialog" aria-hidden="true">
+                                    <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                                        <div class="modal-content">
+                                            <div class="modal-header">
+                                                <h5 class="modal-title" id="exampleModalCenterTitle">Edit user</h5>
+                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                                    <i class="ti-close"></i>
+                                                </button>
+                                            </div>
+                                            <div class="modal-body">
+                                                <form action="{{ route("dashboard.users.edit", ["id" =>$user->id]) }}" method="post" accept-charset="utf-8" enctype='multipart/form-data'>
+                                                    @method("patch")
+                                                    @csrf
+                                                    <div class="row">
+                                                        <div class="col-md-6">
+                                                            <div class="form-group">
+                                                                <label>Name</label>
+                                                                <input type="text" name="name" value="{{ $user->name }}" minlength="2" maxlength="30" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Name" required>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-6">
+                                                            <div class="form-group">
+                                                                <label>Surname</label>
+                                                                <input type="text" name="surname" value="{{$user->surname}}" minlength="2" maxlength="30" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Surname" required>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                    <div class="row">
+                                                        <div class="col-md-6">
+                                                            <div class="form-group">
+                                                                <label class="form-label">Username</label>
+                                                                <input type="text" name="username" value="{{ $user->username }}" minlength="5" maxlength="30" class="form-control" placeholder="Username" required>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-6">
+                                                            <div class="form-group">
+                                                                <label class="form-label">Role</label>
+
+                                                                <select class="form-control" name="userRole" required>
+                                                                    @foreach($roles as $role)
+                                                                        <option value="{{ $role->id }}" {{ $user->role_id == $role->id ? "selected" : "" }}>{{ $role->name }}</option>
+                                                                    @endforeach
+                                                                </select>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                    <div class="row">
+                                                        <div class="col-md-6">
+                                                            <div class="form-group">
+                                                                <label>Email</label>
+                                                                <input type="email" name="email" value="{{ $user->email }}" maxlength="50" class="form-control" placeholder="E-mail" required>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-6">
+                                                            <div class="form-group">
+                                                                <label class="form-label">Phone Number</label>
+                                                                <input type="text" name="phone_number" value="{{ $user->phone_number }}" class="form-control" placeholder="Phone number" autocomplete="off" required>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                    <div class="row">
+                                                        <div class="col-md-5">
+                                                            <div class="form-group">
+                                                                <label>Avatar</label>
+                                                                <input type="file" name="avatar" value="{{ $user->avatar }}" class="form-control" accept="image/*">
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-1">
+                                                            <div class="form-group">
+                                                                <label>Current</label>
+                                                                @include('dashboard.partials.avatar')
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                    <div class="modal-footer">
+                                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                        </button>
+                                                        <button type="submit" class="btn btn-primary">Save changes</button>
+                                                    </div>
+                                                </form>
+                                            </div>
+
+                                        </div>
+                                    </div>
+                                </div>
+
                             @endforeach
-
-
                             </tbody>
                         </table>
+
+                        <div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-hidden="true">
+                            <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                                <div class="modal-content">
+                                    <div class="modal-header">
+                                        <h5 class="modal-title" id="exampleModalCenterTitle">Create user</h5>
+                                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                                            <i class="ti-close"></i>
+                                        </button>
+                                    </div>
+                                    <div class="modal-body">
+                                        <form action="{{ route("dashboard.users.store") }}" method="post" accept-charset="utf-8" enctype='multipart/form-data'>
+                                            @csrf
+                                            <div class="row">
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label>Name</label>
+                                                        <input type="text" name="name" value="{{ old('name') }}" minlength="2" maxlength="25" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Name" required>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label>Surname</label>
+                                                        <input type="text" name="surname" value="{{ old('surname') }}" minlength="2" maxlength="25" pattern="[a-zA-Zа-шА-Ш._\s]+" class="form-control" placeholder="Surname" required>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="row">
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label class="form-label">Username</label>
+                                                        <input type="text" name="username" value="{{ old('username') }}" minlength="5" maxlength="30" class="form-control" placeholder="Username" required>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label class="form-label">Role</label>
+                                                        <select class="form-control" name="userRole" required>
+                                                            @foreach ($roles as $role)
+                                                                <option value="{{ $role->id }}" {{ (old("userRole") == $role->id ? "selected" : "" ) }}>{{ $role->name }}</option>
+                                                            @endforeach
+                                                        </select>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="row">
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label>Email</label>
+                                                        <input type="email" name="email" value="{{ old('email') }}" class="form-control" placeholder="E-mail" required>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label class="form-label">Phone Number</label>
+                                                        <input type="text" name="phone_number" value="{{ old('phone_number') }}" class="form-control" placeholder="Phone number" autocomplete="off" required>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="row">
+                                                <div class="col-md-6">
+                                                    <div class="form-group">
+                                                        <label>Avatar</label>
+                                                        <input type="file" name="avatar" value="{{ old('avatar') }}" class="form-control" accept="image/*">
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="modal-footer">
+                                                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close
+                                                </button>
+                                                <button type="submit" class="btn btn-primary">Save changes</button>
+                                            </div>
+                                        </form>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
                     </div>
                 </div>
Index: resources/views/layouts/app.blade.php
===================================================================
--- resources/views/layouts/app.blade.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ resources/views/layouts/app.blade.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -17,4 +17,6 @@
 <!-- App styles -->
     <link rel="stylesheet" href="{{ url('assets/css/app.min.css') }}" type="text/css">
+    <link rel="stylesheet" href="{{ url('vendors/lightbox/magnific-popup.css') }}" type="text/css">
+
 </head>
 <body @if (trim($__env->yieldContent('bodyClass'))) class="@yield('bodyClass')" @endif>
@@ -121,4 +123,27 @@
                     <!-- end::header fullscreen -->
 
+                    <!-- begin::header notification dropdown -->
+                    <li class="nav-item dropdown">
+                    <div class="dropdown dropdown-notifications-wrapper dropdown-menu-right dropdown-menu-big">
+                        <a href="javascript:void(0)" class="nav-link dropdown-notifications-unread icon" data-toggle="dropdown">
+                            <i data-feather="bell"></i>
+                            <span class="nav-unread"></span>
+                        </a>
+                        <div class="dropdown-menu dropdown-notifications dropdown-menu-right dropdown-menu-big">
+                            <div class="bg-dark p-4 text-center d-flex justify-content-between align-items-center">
+                                <h5 class="mb-0">Notifications</h5>
+                            </div>
+                            <div class="p-4 text-center align-items-center">
+                            <p class='text-center unreadNotificationsInfo'>No unread notifications</p>
+                            </div>
+                            <div class="dropdown-divider"></div>
+                            <a href="{{ route("dashboard.notifications.index") }}" class="dropdown-item text-center text-muted-dark">See all</a>
+                        </div>
+                    </div>
+                    </li>
+
+{{--                    </li>--}}
+                    <!-- end::header notification dropdown -->
+
                     <!-- begin::user menu -->
                     <li class="nav-item dropdown">
@@ -155,6 +180,6 @@
                     <li>
                         <a href="{{ route("dashboard.index") }}" class="nav-link {{ request()->is('dashboard') ? 'active' : '' }}" data-toggle="tooltip"
-                           data-placement="right" title="Pages">
-                            <i data-feather="copy"></i>
+                           data-placement="right" title="Dashboard">
+                            <i data-feather="home"></i>
                         </a>
                     </li>
@@ -171,12 +196,20 @@
                             <a href="{{route("dashboard.departments.index")}}" data-toggle="tooltip"
                                data-placement="right" title="Departments">
-                                <i data-feather="layers"></i>
-                            </a>
-                        </li>
-                    @endif
-                    @if(auth()->user()->hasPermission("manage_all_documents"))
-                        <li>
-                            <a href="{{route("dashboard.documents.index")}}" data-toggle="tooltip"
-                               data-placement="right" title="Documents">
+                                <i data-feather="grid"></i>
+                            </a>
+                        </li>
+                    @endif
+                    @if(auth()->user()->hasPermission("manage_all_folders"))
+                        <li>
+                            <a href="{{route("dashboard.folders.index")}}" data-toggle="tooltip"
+                               data-placement="right" title="Folders">
+                                <i data-feather="folder"></i>
+                            </a>
+                        </li>
+                    @endif
+                    @if(auth()->user()->hasPermission("manage_all_files"))
+                        <li>
+                            <a href="{{route("dashboard.files.index")}}" data-toggle="tooltip"
+                               data-placement="right" title="Files">
                                 <i data-feather="file-text"></i>
                             </a>
@@ -220,5 +253,12 @@
     var clipboard = new ClipboardJS('.btn');
 </script>
+<script src="{{ url('vendors/lightbox/jquery.magnific-popup.min.js') }}"></script>
+
+<!-- Isotope -->
+<script src="{{ url('vendors/jquery.isotope.min.js') }}"></script>
+
+<script src="{{ url('assets/js/examples/pages/gallery.js') }}"></script>
 @yield('script')
+
 
 @include("layouts.alert")
Index: routes/web.php
===================================================================
--- routes/web.php	(revision 6b95845bcb5cbd47d72feb8e241175b5fc16d0e0)
+++ routes/web.php	(revision c6b84df06586305606df5b76204a64cdc63b09a2)
@@ -55,4 +55,5 @@
     Route::patch("/settings/password", "Dashboard\SettingsController@updatePassword")->name("dashboard.settings.password");
     Route::patch("/settings/email", "Dashboard\SettingsController@updateEmail")->name("dashboard.settings.email");
+    Route::patch("/settings/file-types", "Dashboard\SettingsController@fileTypes")->name("dashboard.settings.file-types");
 
 
@@ -65,5 +66,5 @@
     });
 
-    Route::group(['middleware' => 'permission:create_user'], function () {
+        Route::group(['middleware' => 'permission:create_user'], function () {
         Route::get("/users/create", "Dashboard\UsersController@create")->name("dashboard.users.create");
         Route::post("/users/store", "Dashboard\UsersController@store")->name("dashboard.users.store");
@@ -71,5 +72,6 @@
         Route::patch("/users/{id}/edit", "Dashboard\UsersController@edit")->name("dashboard.users.edit");
         Route::patch("/users/{id}/editUserData", "Dashboard\UsersController@editUserData")->name("dashboard.users.editUserData");
-    });
+        Route::get('users/export', 'Dashboard\ExportExcelController@ExportUsers')->name("dashboard.users.export");
+        });
 
     // Departments
@@ -81,19 +83,35 @@
         Route::patch("/departments/{id}/edit", "Dashboard\DepartmentsController@edit")->name("dashboard.departments.edit");
         Route::delete("/departments/{id}/destroy", "Dashboard\DepartmentsController@destroy")->name("dashboard.departments.destroy");
+        Route::get('/departments/download-all','Dashboard\DepartmentsController@downloadAll')->name('dashboard.departments.downloadAll');
+        Route::get('/departments/{id}/download-department','Dashboard\DepartmentsController@downloadDepartment')->name('dashboard.departments.downloadDepartment');
     });
 
-    // Documents
-    Route::get("/documents", "Dashboard\DocumentsController@index")->name("dashboard.documents.index");
-    Route::get("/documents/create", "Dashboard\DocumentsController@create")->name("dashboard.documents.create");
-    Route::post("/documents/store", "Dashboard\DocumentsController@store")->name("dashboard.documents.store");
-    Route::get("/documents/{id}/edit", "Dashboard\DocumentsController@editShow")->name("dashboard.documents.editShow");
-    Route::patch("/documents/{id}/edit", "Dashboard\DocumentsController@edit")->name("dashboard.documents.edit");
-    Route::patch("/documents/{id}/block", "Dashboard\DocumentsController@block")->name("dashboard.documents.block");
-    Route::patch("/documents/{id}/unblock", "Dashboard\DocumentsController@unblock")->name("dashboard.documents.unblock");
-    Route::patch("/documents/{id}/confirm", "Dashboard\DocumentsController@confirm")->name("dashboard.documents.confirm");
-    Route::delete("/documents/{id}/destroy", "Dashboard\DocumentsController@destroy")->name("dashboard.documents.destroy");
-    Route::patch('/documents/toggle-important/{id}', "Dashboard\DocumentsController@toggleImportant")->name("dashboard.documents.toggleImportant");
-    Route::delete("documents/{id}/deleteFile", "Dashboard\DocumentsController@deleteFile")->name("dashboard.documents.deleteFile");
-    Route::get("documents/{id}/downloadFile", "Dashboard\DocumentsController@downloadFile")->name("dashboard.documents.downloadFile");
-    Route::patch("documents/{id}/renameFile", "Dashboard\DocumentsController@renameFile")->name("dashboard.documents.renameFile");
+    // Folders
+    Route::get("/folders", "Dashboard\FoldersController@index")->name("dashboard.folders.index");
+    Route::get("/folders/create", "Dashboard\FoldersController@create")->name("dashboard.folders.create");
+    Route::post("/folders/store", "Dashboard\FoldersController@store")->name("dashboard.folders.store");
+    Route::get("/folders/{id}/edit", "Dashboard\FoldersController@editShow")->name("dashboard.folders.editShow");
+    Route::patch("/folders/{id}/edit", "Dashboard\FoldersController@edit")->name("dashboard.folders.edit");
+    Route::patch("/folders/{id}/block", "Dashboard\FoldersController@block")->name("dashboard.folders.block");
+    Route::patch("/folders/{id}/unblock", "Dashboard\FoldersController@unblock")->name("dashboard.folders.unblock");
+    Route::patch("/folders/{id}/confirm", "Dashboard\FoldersController@confirm")->name("dashboard.folders.confirm");
+    Route::delete("/folders/{id}/destroy", "Dashboard\FoldersController@destroy")->name("dashboard.folders.destroy");
+    Route::patch('/folders/toggle-important/{id}', "Dashboard\FoldersController@toggleImportant")->name("dashboard.folders.toggleImportant");
+    Route::get('/folders/{id}/download-folder','Dashboard\FoldersController@downloadFolder')->name('dashboard.folders.downloadFolder');
+    Route::get('/folders/{id}/files','Dashboard\FoldersController@files')->name('dashboard.folders.files');
+    Route::get('folders/export', 'Dashboard\ExportExcelController@ExportFolders')->name("dashboard.folders.export");
+
+    // Files
+    Route::get("files", "Dashboard\FilesController@index")->name("dashboard.files.index");
+    Route::get("files/{id}/download-file", "Dashboard\FilesController@downloadFile")->name("dashboard.files.downloadFile");
+    Route::patch("files/{id}/rename-file", "Dashboard\FilesController@renameFile")->name("dashboard.files.renameFile");
+    Route::post("/files/store", "Dashboard\FilesController@store")->name("dashboard.files.store");
+    Route::delete("files/{id}/delete-file", "Dashboard\FilesController@deleteFile")->name("dashboard.files.deleteFile");
+    Route::get('files/export', 'Dashboard\ExportExcelController@ExportFiles')->name("dashboard.files.export");
+
+    // Notifications
+    Route::get("/notifications", "Dashboard\NotificationsController@notifications")->name("dashboard.notifications.index");
+    Route::post("/get-notifications", "Dashboard\NotificationsController@showNotifications")->name("dashboard.notifications.store");
+
+
 });
