diff --git a/Core/ivy.xml b/Core/ivy.xml
index cedeba9b2df6bc2d4cdf2cfc44c0bf58cb79286f..fba2d99acd3235b14e78018dd9e42d7ea5d8928a 100644
--- a/Core/ivy.xml
+++ b/Core/ivy.xml
@@ -22,9 +22,9 @@
 
         <dependency conf="core->default" org="org.apache.commons" name="commons-dbcp2" rev="2.9.0"/>
 
-        <dependency conf="core->default" org="org.jsoup" name="jsoup" rev="1.14.3"/>
+        <dependency conf="core->default" org="org.jsoup" name="jsoup" rev="1.16.1"/>
 
-        <dependency conf="core->default" org="com.drewnoakes" name="metadata-extractor" rev="2.17.0"/>
+        <dependency conf="core->default" org="com.drewnoakes" name="metadata-extractor" rev="2.18.0"/>
         <dependency conf="core->default" org="com.ethteck.decodetect" name="decodetect-core" rev="0.3"/>
 
         <dependency conf="core->default" org="com.googlecode.libphonenumber" name="libphonenumber" rev="8.12.45" />
@@ -33,7 +33,7 @@
         <dependency conf="core->default" org="org.jfree" name="jfreechart" rev="1.5.3"/>
 
         <!-- for yaml reading/writing -->
-        <dependency conf="core->default" org="org.yaml" name="snakeyaml" rev="1.30"/>
+        <dependency conf="core->default" org="org.yaml" name="snakeyaml" rev="2.0"/>
 
         <!-- map support for geolocation -->
         <dependency conf="core->default" org="org.jxmapviewer" name="jxmapviewer2" rev="2.6"/>
@@ -77,8 +77,8 @@
         
         <override org="jakarta.ws.rs" module="jakarta.ws.rs-api" rev="2.1.5"/>
         <override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
-        <override org="com.google.guava" module="guava" rev="31.1-jre"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.13.2"/>
+        <override org="com.google.guava" module="guava" rev="32.0.1-jre"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
 
         <!-- changes to bouncy castle version may also be reflected in thirdparty/IcePDF 6.2.2 -->
         <override org="org.bouncycastle" module="bcprov-ext-jdk15on" rev="1.70"/>
diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties
index 1ef54eac7f208d9e1756b980f956a106e9e50ac7..a24bcb423ed0d769482e9c0bda655ee94ad8745d 100644
--- a/Core/nbproject/project.properties
+++ b/Core/nbproject/project.properties
@@ -17,7 +17,7 @@ file.reference.bcprov-ext-jdk15on-1.70.jar=release/modules/ext/bcprov-ext-jdk15o
 file.reference.bcprov-jdk15on-1.70.jar=release/modules/ext/bcprov-jdk15on-1.70.jar
 file.reference.bcutil-jdk15on-1.70.jar=release/modules/ext/bcutil-jdk15on-1.70.jar
 file.reference.c3p0-0.9.5.5.jar=release/modules/ext/c3p0-0.9.5.5.jar
-file.reference.checker-qual-3.12.0.jar=release/modules/ext/checker-qual-3.12.0.jar
+file.reference.checker-qual-3.33.0.jar=release/modules/ext/checker-qual-3.33.0.jar
 file.reference.commons-dbcp2-2.9.0.jar=release/modules/ext/commons-dbcp2-2.9.0.jar
 file.reference.commons-io-2.11.0.jar=release/modules/ext/commons-io-2.11.0.jar
 file.reference.commons-lang3-3.10.jar=release/modules/ext/commons-lang3-3.10.jar
@@ -28,13 +28,13 @@ file.reference.curator-framework-5.2.1.jar=release/modules/ext/curator-framework
 file.reference.curator-recipes-5.2.1.jar=release/modules/ext/curator-recipes-5.2.1.jar
 file.reference.DatCon.jar=release/modules/ext/DatCon.jar
 file.reference.decodetect-core-0.3.jar=release/modules/ext/decodetect-core-0.3.jar
-file.reference.error_prone_annotations-2.11.0.jar=release/modules/ext/error_prone_annotations-2.11.0.jar
+file.reference.error_prone_annotations-2.18.0.jar=release/modules/ext/error_prone_annotations-2.18.0.jar
 file.reference.failureaccess-1.0.1.jar=release/modules/ext/failureaccess-1.0.1.jar
-file.reference.guava-31.1-jre.jar=release/modules/ext/guava-31.1-jre.jar
+file.reference.guava-32.0.1-jre.jar=release/modules/ext/guava-32.0.1-jre.jar
 file.reference.icepdf-core-6.2.2.jar=release/modules/ext/icepdf-core-6.2.2.jar
 file.reference.icepdf-viewer-6.2.2.jar=release/modules/ext/icepdf-viewer-6.2.2.jar
 file.reference.istack-commons-runtime-3.0.11.jar=release/modules/ext/istack-commons-runtime-3.0.11.jar
-file.reference.j2objc-annotations-1.3.jar=release/modules/ext/j2objc-annotations-1.3.jar
+file.reference.j2objc-annotations-2.8.jar=release/modules/ext/j2objc-annotations-2.8.jar
 file.reference.jackcess-4.0.1.jar=release/modules/ext/jackcess-4.0.1.jar
 file.reference.jackcess-encrypt-4.0.1.jar=release/modules/ext/jackcess-encrypt-4.0.1.jar
 file.reference.jai_core-1.1.3.jar=release/modules/ext/jai_core-1.1.3.jar
@@ -49,7 +49,7 @@ file.reference.jaxb-runtime-2.3.3.jar=release/modules/ext/jaxb-runtime-2.3.3.jar
 file.reference.jdom-2.0.5.jar=release/modules/ext/jdom-2.0.5.jar
 file.reference.jfreechart-1.5.3.jar=release/modules/ext/jfreechart-1.5.3.jar
 file.reference.jgraphx-4.2.2.jar=release/modules/ext/jgraphx-4.2.2.jar
-file.reference.jsoup-1.14.3.jar=release/modules/ext/jsoup-1.14.3.jar
+file.reference.jsoup-1.16.1.jar=release/modules/ext/jsoup-1.16.1.jar
 file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar
 file.reference.jutf7-1.0.0.jar=release/modules/ext/jutf7-1.0.0.jar
 file.reference.jxmapviewer2-2.6.jar=release/modules/ext/jxmapviewer2-2.6.jar
@@ -59,7 +59,7 @@ file.reference.listenablefuture-1.0.jar=release/modules/ext/listenablefuture-1.0
 file.reference.logback-classic-1.2.10.jar=release/modules/ext/logback-classic-1.2.10.jar
 file.reference.logback-core-1.2.10.jar=release/modules/ext/logback-core-1.2.10.jar
 file.reference.mchange-commons-java-0.2.20.jar=release/modules/ext/mchange-commons-java-0.2.20.jar
-file.reference.metadata-extractor-2.17.0.jar=release/modules/ext/metadata-extractor-2.17.0.jar
+file.reference.metadata-extractor-2.18.0.jar=release/modules/ext/metadata-extractor-2.18.0.jar
 file.reference.netty-buffer-4.1.73.Final.jar=release/modules/ext/netty-buffer-4.1.73.Final.jar
 file.reference.netty-codec-4.1.73.Final.jar=release/modules/ext/netty-codec-4.1.73.Final.jar
 file.reference.netty-common-4.1.73.Final.jar=release/modules/ext/netty-common-4.1.73.Final.jar
@@ -80,7 +80,8 @@ file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbi
 file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
 file.reference.sleuthkit-4.12.0.jar=release/modules/ext/sleuthkit-4.12.0.jar
 file.reference.sleuthkit-caseuco-4.12.0.jar=release/modules/ext/sleuthkit-caseuco-4.12.0.jar
-file.reference.snakeyaml-1.30.jar=release/modules/ext/snakeyaml-1.30.jar
+file.reference.slf4j-api-1.7.36.jar=release/modules/ext/slf4j-api-1.7.36.jar
+file.reference.snakeyaml-2.0.jar=release/modules/ext/snakeyaml-2.0.jar
 file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar
 file.reference.spotbugs-annotations-4.6.0.jar=release/modules/ext/spotbugs-annotations-4.6.0.jar
 file.reference.sqlite-jdbc-3.42.0.0.jar=release/modules/ext/sqlite-jdbc-3.42.0.0.jar
diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml
index 97a3e8b00a39b686921674bce013bf3e05dce8a9..0553a915ca279a4833b7f03ebad6378ceb400f11 100644
--- a/Core/nbproject/project.xml
+++ b/Core/nbproject/project.xml
@@ -445,8 +445,8 @@
                 <binary-origin>release/modules/ext/c3p0-0.9.5.5.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/checker-qual-3.12.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/checker-qual-3.12.0.jar</binary-origin>
+                <runtime-relative-path>ext/checker-qual-3.33.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/checker-qual-3.33.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/commons-dbcp2-2.9.0.jar</runtime-relative-path>
@@ -489,16 +489,16 @@
                 <binary-origin>release/modules/ext/decodetect-core-0.3.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/error_prone_annotations-2.11.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/error_prone_annotations-2.11.0.jar</binary-origin>
+                <runtime-relative-path>ext/error_prone_annotations-2.18.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/error_prone_annotations-2.18.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/failureaccess-1.0.1.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/guava-31.1-jre.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/guava-31.1-jre.jar</binary-origin>
+                <runtime-relative-path>ext/guava-32.0.1-jre.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/guava-32.0.1-jre.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/icepdf-core-6.2.2.jar</runtime-relative-path>
@@ -513,8 +513,8 @@
                 <binary-origin>release/modules/ext/istack-commons-runtime-3.0.11.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/j2objc-annotations-1.3.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/j2objc-annotations-1.3.jar</binary-origin>
+                <runtime-relative-path>ext/j2objc-annotations-2.8.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/j2objc-annotations-2.8.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/jackcess-4.0.1.jar</runtime-relative-path>
@@ -573,8 +573,8 @@
                 <binary-origin>release/modules/ext/jgraphx-4.2.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jsoup-1.14.3.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jsoup-1.14.3.jar</binary-origin>
+                <runtime-relative-path>ext/jsoup-1.16.1.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jsoup-1.16.1.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
@@ -613,8 +613,8 @@
                 <binary-origin>release/modules/ext/mchange-commons-java-0.2.20.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/metadata-extractor-2.17.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/metadata-extractor-2.17.0.jar</binary-origin>
+                <runtime-relative-path>ext/metadata-extractor-2.18.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/metadata-extractor-2.18.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/netty-buffer-4.1.73.Final.jar</runtime-relative-path>
@@ -697,8 +697,12 @@
                 <binary-origin>release/modules/ext/sleuthkit-caseuco-4.12.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/snakeyaml-1.30.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/snakeyaml-1.30.jar</binary-origin>
+                <runtime-relative-path>ext/slf4j-api-1.7.36.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/slf4j-api-1.7.36.jar</binary-origin>
+            </class-path-extension>
+            <class-path-extension>
+                <runtime-relative-path>ext/snakeyaml-2.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/snakeyaml-2.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/SparseBitSet-1.1.jar</runtime-relative-path>
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AutopsyContentProvider.java b/Core/src/org/sleuthkit/autopsy/casemodule/AutopsyContentProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..f5f8fe59d79214f4de91a206bdc851a19dd2282a
--- /dev/null
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/AutopsyContentProvider.java
@@ -0,0 +1,47 @@
+/*
+ * Autopsy Forensic Browser
+ *
+ * Copyright 2023 Basis Technology Corp.
+ * Contact: carrier <at> sleuthkit <dot> org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.sleuthkit.autopsy.casemodule;
+
+import org.sleuthkit.datamodel.ContentStreamProvider;
+
+/**
+ * Interface that modules can implement to provide their own The Sleuth Kit
+ * ContentProvider implementations
+ */
+public interface AutopsyContentProvider {
+
+    /**
+     * Attempts to create a ContentProvider given the specified args. Returns
+     * null if arguments are invalid for this custom content provider.
+     *
+     * @param args The key value pair of arguments loaded from the .aut xml
+     * file.
+     * @return The created content provider or null if arguments are invalid.
+     */
+    ContentStreamProvider load();
+
+    /**
+     * Returns the uniquely identifying name of this FileContentProvider. This
+     * name will be stored in the .AUT file and used for lookup when the case is
+     * opened.
+     *
+     * @return The unique name.
+     */
+    String getName();
+}
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java
index 6f10bcf3642dfa7cad4cb2ec084e1746a097ee9c..6ece795e35547c8b59b54e1d2b086b4a75efff29 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java
@@ -41,7 +41,6 @@
 import java.sql.Statement;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -133,8 +132,6 @@
 import org.sleuthkit.autopsy.discovery.ui.OpenDiscoveryAction;
 import org.sleuthkit.autopsy.ingest.IngestJob;
 import org.sleuthkit.autopsy.ingest.IngestManager;
-import org.sleuthkit.autopsy.ingest.IngestServices;
-import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
 import org.sleuthkit.autopsy.keywordsearchservice.KeywordSearchService;
 import org.sleuthkit.autopsy.keywordsearchservice.KeywordSearchServiceException;
 import org.sleuthkit.autopsy.machinesettings.UserMachinePreferences;
@@ -143,18 +140,14 @@
 import org.sleuthkit.autopsy.progress.ProgressIndicator;
 import org.sleuthkit.autopsy.timeline.OpenTimelineAction;
 import org.sleuthkit.autopsy.timeline.events.TimelineEventAddedEvent;
-import org.sleuthkit.datamodel.Blackboard;
-import org.sleuthkit.datamodel.BlackboardArtifact;
 import org.sleuthkit.datamodel.BlackboardArtifactTag;
 import org.sleuthkit.datamodel.CaseDbConnectionInfo;
 import org.sleuthkit.datamodel.Content;
+import org.sleuthkit.datamodel.ContentStreamProvider;
 import org.sleuthkit.datamodel.ContentTag;
 import org.sleuthkit.datamodel.DataSource;
 import org.sleuthkit.datamodel.FileSystem;
-import org.sleuthkit.datamodel.Host;
 import org.sleuthkit.datamodel.Image;
-import org.sleuthkit.datamodel.OsAccount;
-import org.sleuthkit.datamodel.Person;
 import org.sleuthkit.datamodel.Report;
 import org.sleuthkit.datamodel.SleuthkitCase;
 import org.sleuthkit.datamodel.TimelineManager;
@@ -2078,7 +2071,7 @@ private Case(CaseMetadata caseMetaData) {
         metadata = caseMetaData;
         sleuthkitEventListener = new SleuthkitEventListener();
     }
-
+   
     /**
      * Performs a case action that involves creating or opening a case. If the
      * case is a multi-user case, the action is done after acquiring a
@@ -2742,10 +2735,18 @@ private void openCaseDataBase(ProgressIndicator progressIndicator) throws CaseAc
         progressIndicator.progress(Bundle.Case_progressMessage_openingCaseDatabase());
         try {
             String databaseName = metadata.getCaseDatabaseName();
+            
+            ContentStreamProvider contentProvider = loadContentProvider(metadata.getContentProviderName());
+            
             if (CaseType.SINGLE_USER_CASE == metadata.getCaseType()) {
-                caseDb = SleuthkitCase.openCase(Paths.get(metadata.getCaseDirectory(), databaseName).toString());
+                // only prefix with metadata directory if databaseName is a relative path
+                String fullDatabasePath = (new File(databaseName).isAbsolute())
+                        ? databaseName
+                        : Paths.get(metadata.getCaseDirectory(), databaseName).toString();
+                        
+                caseDb = SleuthkitCase.openCase(fullDatabasePath, contentProvider);
             } else if (UserPreferences.getIsMultiUserModeEnabled()) {
-                caseDb = SleuthkitCase.openCase(databaseName, UserPreferences.getDatabaseConnectionInfo(), metadata.getCaseDirectory());
+                caseDb = SleuthkitCase.openCase(databaseName, UserPreferences.getDatabaseConnectionInfo(), metadata.getCaseDirectory(), contentProvider);
             } else {
                 throw new CaseActionException(Bundle.Case_open_exception_multiUserCaseNotEnabled());
             }
@@ -2758,6 +2759,36 @@ private void openCaseDataBase(ProgressIndicator progressIndicator) throws CaseAc
             throw new CaseActionException(Bundle.Case_exceptionMessage_couldNotOpenCaseDatabase(ex.getLocalizedMessage()), ex);
         }
     }
+    
+     
+    /**
+     * Attempts to load a content provider for the provided arguments. Returns
+     * null if no content provider for the arguments can be identified.
+     *
+     * @param providerName The name of the content provider.
+     * @param args The arguments.
+     * @return The content provider or null if no content provider can be
+     * provisioned for the arguments
+     */
+    private static ContentStreamProvider loadContentProvider(String providerName) {
+        Collection<? extends AutopsyContentProvider> customContentProviders = Lookup.getDefault().lookupAll(AutopsyContentProvider.class);
+        if (customContentProviders != null) {
+            for (AutopsyContentProvider customProvider : customContentProviders) {
+                // ensure the provider matches the name
+                if (customProvider == null || !StringUtils.equalsIgnoreCase(providerName, customProvider.getName())) {
+                    continue;
+                }
+                
+                ContentStreamProvider contentProvider = customProvider.load();
+                if (contentProvider != null) {
+                    return contentProvider;
+                }
+            }
+        }
+        
+        return null;
+    }
+
 
     /**
      * Opens the case-level services: the files manager, tags manager and
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java
index 96f9899dae4273f0e79fe7c96028c7d0cd4ca09f..c9170b1e68d5a7920d265d9cebfd81a9a9c4cf32 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java
@@ -29,8 +29,16 @@
 import java.nio.file.Paths;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -42,10 +50,14 @@
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.openide.util.Lookup;
 import org.sleuthkit.autopsy.coreutils.Version;
 import org.sleuthkit.autopsy.coreutils.XMLUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
 
@@ -103,13 +115,21 @@ public final class CaseMetadata {
     private static final String SCHEMA_VERSION_FIVE = "5.0";
     private final static String ORIGINAL_CASE_ELEMENT_NAME = "OriginalCase"; //NON-NLS  
 
+    /*
+     * Fields from schema version 6
+     */
+    private static final String SCHEMA_VERSION_SIX = "6.0";
+    private final static String CONTENT_PROVIDER_ELEMENT_NAME = "ContentProvider";
+    private final static String CONTENT_PROVIDER_NAME_ELEMENT_NAME = "Name";
+    private final static String CONTENT_PROVIDER_ARG_DEFAULT_KEY = "DEFAULT";
+    
     /*
      * Unread fields, regenerated on save.
      */
     private final static String MODIFIED_DATE_ELEMENT_NAME = "ModifiedDate"; //NON-NLS
     private final static String AUTOPSY_SAVED_BY_ELEMENT_NAME = "SavedByAutopsyVersion"; //NON-NLS
 
-    private final static String CURRENT_SCHEMA_VERSION = SCHEMA_VERSION_FIVE;
+    private final static String CURRENT_SCHEMA_VERSION = SCHEMA_VERSION_SIX;
 
     private final Path metadataFilePath;
     private Case.CaseType caseType;
@@ -121,6 +141,7 @@ public final class CaseMetadata {
     private String createdDate;
     private String createdByVersion;
     private CaseMetadata originalMetadata = null; // For portable cases
+    private String contentProviderName;
 
     /**
      * Gets the file extension used for case metadata files.
@@ -176,6 +197,7 @@ public static DateFormat getDateFormat() {
         createdByVersion = Version.getVersion();
         createdDate = CaseMetadata.DATE_FORMAT.format(new Date());
         this.originalMetadata = originalMetadata;
+        this.contentProviderName = originalMetadata == null ? null : originalMetadata.contentProviderName;
     }
 
     /**
@@ -213,6 +235,14 @@ public static Path getCaseMetadataFilePath(Path directoryPath) {
         return null;
     }
 
+    /**
+     * @return The custom provider name for content byte data or null if no
+     * custom provider.
+     */
+    public String getContentProviderName() {
+        return this.contentProviderName;
+    }
+
     /**
      * Gets the full path to the case metadata file.
      *
@@ -458,6 +488,15 @@ private void createXMLDOM(Document doc) {
         Element caseElement = doc.createElement(CASE_ELEMENT_NAME);
         rootElement.appendChild(caseElement);
 
+        Element contentProviderEl = doc.createElement(CONTENT_PROVIDER_ELEMENT_NAME);
+        rootElement.appendChild(contentProviderEl);
+        
+        Element contentProviderNameEl = doc.createElement(CONTENT_PROVIDER_NAME_ELEMENT_NAME);
+        if (this.contentProviderName != null) {
+            contentProviderNameEl.setTextContent(this.contentProviderName);   
+        }
+        contentProviderEl.appendChild(contentProviderNameEl);
+            
         /*
          * Create the children of the case element.
          */
@@ -543,7 +582,15 @@ private void readFromFile() throws CaseMetadataException {
             } else {
                 this.createdByVersion = getElementTextContent(rootElement, AUTOPSY_CREATED_BY_ELEMENT_NAME, true);
             }
-
+            
+            Element contentProviderEl = getChildElOrNull(rootElement, CONTENT_PROVIDER_ELEMENT_NAME);
+            if (contentProviderEl != null) {
+                Element contentProviderNameEl = getChildElOrNull(contentProviderEl, CONTENT_PROVIDER_NAME_ELEMENT_NAME);
+                this.contentProviderName = contentProviderNameEl != null ? contentProviderNameEl.getTextContent() : null;
+            } else {
+                this.contentProviderName = null;
+            }
+             
             /*
              * Get the content of the children of the case element.
              */
@@ -614,7 +661,16 @@ private void readFromFile() throws CaseMetadataException {
             throw new CaseMetadataException(String.format("Error reading from case metadata file %s", metadataFilePath), ex);
         }
     }
-
+    
+    private Element getChildElOrNull(Element parent, String childTag) {
+        NodeList nl = parent.getElementsByTagName(childTag);
+        if (nl != null && nl.getLength() > 0 && nl.item(0) instanceof Element) {
+            return (Element) nl.item(0);
+        } else {
+            return null;
+        }
+    }
+    
     /**
      * Gets the text content of an XML element.
      *
diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/DefaultTableArtifactContentViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/DefaultTableArtifactContentViewer.java
index b440d4c41cf659955b61dc77e4a94f5103333cc9..d8a6fb49c95774893f2dc57d7587862162350f9d 100644
--- a/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/DefaultTableArtifactContentViewer.java
+++ b/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/DefaultTableArtifactContentViewer.java
@@ -348,9 +348,8 @@ private void addRows(BlackboardArtifact artifact) {
                         case JSON:
                             // Get the attribute's JSON value and convert to indented multiline display string
                             String jsonVal = attr.getValueString();
-                            JsonObject json = JsonParser.parseString(jsonVal).getAsJsonObject();
-
-                            value = toJsonDisplayString(json, "");
+                            JsonElement jsonEl = JsonParser.parseString(jsonVal);
+                            value = toJsonDisplayString(jsonEl, "");
                             break;
 
                         case STRING:
@@ -411,19 +410,43 @@ String getArtifactDisplayName() {
          * @return A multi-line display string.
          */
         private String toJsonDisplayString(JsonElement element, String startIndent) {
+            if (element == null || element.isJsonNull()) {
+                return "";
+            } else if (element.isJsonPrimitive()) {
+                return element.getAsString();
+            } else if (element.isJsonObject()) {
+                StringBuilder sb = new StringBuilder("");
+                JsonObject obj = element.getAsJsonObject();
+
+                for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
+                    appendJsonElementToString(entry.getKey(), entry.getValue(), startIndent, sb);
+                }
 
-            StringBuilder sb = new StringBuilder("");
-            JsonObject obj = element.getAsJsonObject();
-
-            for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
-                appendJsonElementToString(entry.getKey(), entry.getValue(), startIndent, sb);
-            }
+                String returnString = sb.toString();
+                if (startIndent.length() == 0 && returnString.startsWith(NEW_LINE)) {
+                    returnString = returnString.substring(NEW_LINE.length());
+                }
+                return returnString;                
+            } else if (element.isJsonArray()) {
+                StringBuilder sb = new StringBuilder("");
+                JsonArray jsonArray = element.getAsJsonArray();
+                if (jsonArray.size() > 0) {
+                    int count = 1;
+                    for (JsonElement arrayMember : jsonArray) {
+                        sb.append(NEW_LINE).append(String.format("%s%d", startIndent, count));
+                        sb.append(toJsonDisplayString(arrayMember, startIndent.concat(INDENT_RIGHT)));
+                        count++;
+                    }
+                }
 
-            String returnString = sb.toString();
-            if (startIndent.length() == 0 && returnString.startsWith(NEW_LINE)) {
-                returnString = returnString.substring(NEW_LINE.length());
+                String returnString = sb.toString();
+                if (startIndent.length() == 0 && returnString.startsWith(NEW_LINE)) {
+                    returnString = returnString.substring(NEW_LINE.length());
+                }
+                return returnString;   
+            } else {
+                return "";
             }
-            return returnString;
         }
 
         /**
diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java b/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java
index d4becd5d63011b67aadb01bc9d23fc2b761910a3..f76bfe5469af3cfc576cea310615ee70185efdc2 100644
--- a/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java
+++ b/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java
@@ -143,14 +143,16 @@ protected boolean createKeys(List<Object> list) {
                 // either way, add in reports node
                 nodes.add(new Reports());
             } else {
+                SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
                 // data source by type view
                 nodes = Arrays.asList(
                         new DataSourcesByType(),
-                        new Views(Case.getCurrentCaseThrows().getSleuthkitCase()),
+                        new Views(skCase),
                         new DataArtifacts(),
                         new AnalysisResults(),
-                        new OsAccounts(Case.getCurrentCaseThrows().getSleuthkitCase()),
+                        new OsAccounts(skCase),
                         new Tags(),
+                        new ScoreContent(skCase),
                         new Reports()
                 );
             }
diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DataSourceGroupingNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/DataSourceGroupingNode.java
index 8e99aa2172e9abaa34c4143d623a3c5d59d51e2c..04757d49873473654f328fa5efd8ad889bc83dab 100644
--- a/Core/src/org/sleuthkit/autopsy/datamodel/DataSourceGroupingNode.java
+++ b/Core/src/org/sleuthkit/autopsy/datamodel/DataSourceGroupingNode.java
@@ -29,6 +29,7 @@
 import org.sleuthkit.datamodel.DataSource;
 import org.sleuthkit.datamodel.Image;
 import org.sleuthkit.datamodel.LocalFilesDataSource;
+import org.sleuthkit.datamodel.SleuthkitCase;
 
 /**
  * Data source grouping node - an optional grouping node in the data tree view
@@ -74,13 +75,15 @@ private static RootContentChildren createDSGroupingNodeChildren(DataSource dataS
 
         long dsObjId = dataSource.getId();
         try {
+            SleuthkitCase skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
             return new RootContentChildren(Arrays.asList(
                     new DataSources(dsObjId),
-                    new Views(Case.getCurrentCaseThrows().getSleuthkitCase(), dsObjId),
+                    new Views(skCase, dsObjId),
                     new DataArtifacts(dsObjId),
                     new AnalysisResults(dsObjId),
-                    new OsAccounts(Case.getCurrentCaseThrows().getSleuthkitCase(), dsObjId),
-                    new Tags(dsObjId)
+                    new OsAccounts(skCase, dsObjId),
+                    new Tags(dsObjId),
+                    new ScoreContent(skCase, dsObjId)
             ));
 
         } catch (NoCurrentCaseException ex) {
diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ScoreContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/ScoreContent.java
index 3b6521f8391be444f65ad2f147c97c0806601216..a6cc791fd4ae2bb25f8c4496ef1021869c303f16 100644
--- a/Core/src/org/sleuthkit/autopsy/datamodel/ScoreContent.java
+++ b/Core/src/org/sleuthkit/autopsy/datamodel/ScoreContent.java
@@ -20,33 +20,46 @@
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.sql.SQLException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.logging.Level;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.openide.nodes.AbstractNode;
 import org.openide.nodes.ChildFactory;
 import org.openide.nodes.Children;
 import org.openide.nodes.Node;
 import org.openide.nodes.Sheet;
 import org.openide.util.NbBundle;
+import org.openide.util.NbBundle.Messages;
 import org.openide.util.WeakListeners;
 import org.openide.util.lookup.Lookups;
 import org.sleuthkit.autopsy.casemodule.Case;
 import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
 import org.sleuthkit.autopsy.coreutils.Logger;
+import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
+import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR;
 import org.sleuthkit.autopsy.guiutils.RefreshThrottler;
 import org.sleuthkit.autopsy.ingest.IngestManager;
 import org.sleuthkit.autopsy.ingest.IngestManager.IngestModuleEvent;
 import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
 import org.sleuthkit.datamodel.AbstractFile;
+import org.sleuthkit.datamodel.BlackboardArtifact;
 import org.sleuthkit.datamodel.BlackboardArtifact.Category;
+import org.sleuthkit.datamodel.BlackboardAttribute;
 import org.sleuthkit.datamodel.Content;
 import org.sleuthkit.datamodel.ContentVisitor;
 import org.sleuthkit.datamodel.DerivedFile;
@@ -110,6 +123,7 @@ public <T> T accept(AutopsyItemVisitor<T> visitor) {
 
     /**
      * Constructor assuming no data source filtering.
+     *
      * @param skCase The sleuthkit case.
      */
     public ScoreContent(SleuthkitCase skCase) {
@@ -118,6 +132,7 @@ public ScoreContent(SleuthkitCase skCase) {
 
     /**
      * Constructor.
+     *
      * @param skCase The sleuthkit case.
      * @param dsObjId The data source object id to filter on if > 0.
      */
@@ -153,11 +168,17 @@ public SleuthkitCase getSleuthkitCase() {
             Case.Events.BLACKBOARD_ARTIFACT_TAG_ADDED,
             Case.Events.BLACKBOARD_ARTIFACT_TAG_DELETED
     );
+    private static final Set<String> CASE_EVENTS_OF_INTEREST_STRS = CASE_EVENTS_OF_INTEREST.stream()
+            .map(evt -> evt.name())
+            .collect(Collectors.toSet());
+
     private static final Set<IngestManager.IngestJobEvent> INGEST_JOB_EVENTS_OF_INTEREST = EnumSet.of(IngestManager.IngestJobEvent.COMPLETED, IngestManager.IngestJobEvent.CANCELLED);
     private static final Set<IngestManager.IngestModuleEvent> INGEST_MODULE_EVENTS_OF_INTEREST = EnumSet.of(IngestModuleEvent.CONTENT_CHANGED);
 
     /**
-     * Returns a property change listener listening for possible updates to aggregate score updates for files.
+     * Returns a property change listener listening for possible updates to
+     * aggregate score updates for files.
+     *
      * @param onRefresh Action on refresh.
      * @param onRemove Action to remove listener (i.e. case close).
      * @return The property change listener.
@@ -182,7 +203,7 @@ private static PropertyChangeListener getPcl(final Runnable onRefresh, final Run
                 if (evt.getNewValue() == null && onRemove != null) {
                     onRemove.run();
                 }
-            } else if (CASE_EVENTS_OF_INTEREST.contains(eventType)) {
+            } else if (CASE_EVENTS_OF_INTEREST_STRS.contains(eventType)) {
                 // only refresh if there is a current case.
                 try {
                     Case.getCurrentCaseThrows();
@@ -199,34 +220,61 @@ private static PropertyChangeListener getPcl(final Runnable onRefresh, final Run
     }
 
     /**
-     * The sql where statement for the files.
+     * The sql where statement for the content.
+     *
      * @param filter The filter type.
+     * @param objIdAlias The alias for the object id of the content. Must be sql
+     * safe.
+     * @param dsIdAlias The alias for the data source id. Must be sql safe.
      * @param filteringDSObjId The data source object id to filter on if > 0.
      * @return The sql where statement.
-     * @throws IllegalArgumentException 
+     * @throws IllegalArgumentException
      */
-    static private String getFileFilter(ScoreContent.ScoreContentFilter filter, long filteringDSObjId) throws IllegalArgumentException {
-        String aggregateScoreFilter = "";
+    private static String getFilter(ScoreContent.ScoreContentFilter filter, String objIdAlias, String dsIdAlias, long filteringDSObjId) throws IllegalArgumentException {
+        String aggregateScoreFilter = getScoreFilter(filter);
+        String query = " " + objIdAlias + " IN (SELECT tsk_aggregate_score.obj_id FROM tsk_aggregate_score WHERE " + aggregateScoreFilter + ") ";
+
+        if (filteringDSObjId > 0) {
+            query += " AND " + dsIdAlias + " = " + filteringDSObjId;
+        }
+        return query;
+    }
+
+    private static String getScoreFilter(ScoreContentFilter filter) throws IllegalArgumentException {
         switch (filter) {
             case SUS_ITEM_FILTER:
-                aggregateScoreFilter = " tsk_aggregate_score.significance = " + Significance.LIKELY_NOTABLE.getId() + " AND (tsk_aggregate_score.priority = " + Priority.NORMAL.getId() + " OR tsk_aggregate_score.priority = " + Priority.OVERRIDE.getId() + " )";
-
-                break;
+                return " tsk_aggregate_score.significance = " + Significance.LIKELY_NOTABLE.getId()
+                        + " AND (tsk_aggregate_score.priority = " + Priority.NORMAL.getId() + " OR tsk_aggregate_score.priority = " + Priority.OVERRIDE.getId() + " )";
             case BAD_ITEM_FILTER:
-                aggregateScoreFilter = " tsk_aggregate_score.significance = " + Significance.NOTABLE.getId() + " AND (tsk_aggregate_score.priority = " + Priority.NORMAL.getId() + " OR tsk_aggregate_score.priority = " + Priority.OVERRIDE.getId() + " )";
-                break;
-
+                return " tsk_aggregate_score.significance = " + Significance.NOTABLE.getId()
+                        + " AND (tsk_aggregate_score.priority = " + Priority.NORMAL.getId() + " OR tsk_aggregate_score.priority = " + Priority.OVERRIDE.getId() + " )";
             default:
                 throw new IllegalArgumentException(MessageFormat.format("Unsupported filter type to get suspect content: {0}", filter));
-
         }
+    }
 
-        String query = " obj_id IN (SELECT tsk_aggregate_score.obj_id FROM tsk_aggregate_score WHERE " + aggregateScoreFilter + ") ";
+    /**
+     * Returns a sql where statement for files.
+     *
+     * @param filter The filter type.
+     * @param filteringDSObjId The data source object id to filter on if > 0.
+     * @return The sql where statement.
+     * @throws IllegalArgumentException
+     */
+    private static String getFileFilter(ScoreContent.ScoreContentFilter filter, long filteringDsObjId) throws IllegalArgumentException {
+        return getFilter(filter, "obj_id", "data_source_obj_id", filteringDsObjId);
+    }
 
-        if (filteringDSObjId > 0) {
-            query += " AND data_source_obj_id = " + filteringDSObjId;
-        }
-        return query;
+    /**
+     * Returns a sql where statement for files.
+     *
+     * @param filter The filter type.
+     * @param filteringDSObjId The data source object id to filter on if > 0.
+     * @return The sql where statement.
+     * @throws IllegalArgumentException
+     */
+    private static String getDataArtifactFilter(ScoreContent.ScoreContentFilter filter, long filteringDsObjId) throws IllegalArgumentException {
+        return getFilter(filter, "artifacts.artifact_obj_id", "artifacts.data_source_obj_id", filteringDsObjId);
     }
 
     /**
@@ -424,7 +472,34 @@ void updateDisplayName() {
              * @return
              */
             private static long calculateItems(SleuthkitCase sleuthkitCase, ScoreContent.ScoreContentFilter filter, long datasourceObjId) throws TskCoreException {
-                return sleuthkitCase.countFilesWhere(getFileFilter(filter, datasourceObjId));
+                AtomicLong retVal = new AtomicLong(0L);
+                AtomicReference<SQLException> exRef = new AtomicReference(null);
+
+                String query = " COUNT(tsk_aggregate_score.obj_id) AS count FROM tsk_aggregate_score WHERE\n"
+                        + getScoreFilter(filter) + "\n"
+                        + ((datasourceObjId > 0) ? "AND tsk_aggregate_score.data_source_obj_id = \n" + datasourceObjId : "")
+                        + " AND tsk_aggregate_score.obj_id IN\n"
+                        + " (SELECT tsk_files.obj_id AS obj_id FROM tsk_files UNION\n"
+                        + "     SELECT blackboard_artifacts.artifact_obj_id AS obj_id FROM blackboard_artifacts WHERE blackboard_artifacts.artifact_type_id IN\n"
+                        + "         (SELECT artifact_type_id FROM blackboard_artifact_types WHERE category_type = " + Category.DATA_ARTIFACT.getID() + ")) ";
+                sleuthkitCase.getCaseDbAccessManager().select(query, (rs) -> {
+                    try {
+                        if (rs.next()) {
+                            retVal.set(rs.getLong("count"));
+                        }
+                    } catch (SQLException ex) {
+                        exRef.set(ex);
+                    }
+                });
+
+                SQLException sqlEx = exRef.get();
+                if (sqlEx != null) {
+                    throw new TskCoreException(
+                            MessageFormat.format("A sql exception occurred fetching results with query: SELECT {0}", query),
+                            sqlEx);
+                } else {
+                    return retVal.get();
+                }
             }
 
             @Override
@@ -466,7 +541,7 @@ public String getItemType() {
         /**
          * Children showing files for a score filter.
          */
-        static class ScoreContentChildren extends BaseChildFactory<AbstractFile> implements RefreshThrottler.Refresher {
+        static class ScoreContentChildren extends BaseChildFactory<Content> implements RefreshThrottler.Refresher {
 
             private final RefreshThrottler refreshThrottler = new RefreshThrottler(this);
 
@@ -515,15 +590,21 @@ public boolean isRefreshRequired(PropertyChangeEvent evt) {
                 return ScoreContent.isRefreshRequired(evt);
             }
 
-            private List<AbstractFile> runFsQuery() {
-                List<AbstractFile> ret = new ArrayList<>();
+            private List<Content> runFsQuery() {
+                List<Content> ret = new ArrayList<>();
 
-                String query = null;
+                String fileFilter = null;
+                String dataArtifactFilter = null;
                 try {
-                    query = getFileFilter(filter, datasourceObjId);
-                    ret = skCase.findAllFilesWhere(query);
+                    fileFilter = getFileFilter(filter, datasourceObjId);
+                    dataArtifactFilter = getDataArtifactFilter(filter, datasourceObjId);
+                    ret.addAll(skCase.findAllFilesWhere(fileFilter));
+                    ret.addAll(skCase.getBlackboard().getDataArtifactsWhere(dataArtifactFilter));
                 } catch (TskCoreException | IllegalArgumentException e) {
-                    logger.log(Level.SEVERE, "Error getting files for the deleted content view using: " + StringUtils.defaultString(query, "<null>"), e); //NON-NLS
+                    logger.log(Level.SEVERE, MessageFormat.format(
+                            "Error getting files for the deleted content view using file filter: {0} data artifact filter: {1}",
+                            StringUtils.defaultString(fileFilter, "<null>"),
+                            StringUtils.defaultString(dataArtifactFilter, "<null>")), e); //NON-NLS
                 }
 
                 return ret;
@@ -531,66 +612,201 @@ private List<AbstractFile> runFsQuery() {
             }
 
             @Override
-            protected List<AbstractFile> makeKeys() {
+            protected List<Content> makeKeys() {
                 return runFsQuery();
             }
 
             @Override
-            protected Node createNodeForKey(AbstractFile key) {
+            protected Node createNodeForKey(Content key) {
                 return key.accept(new ContentVisitor.Default<AbstractNode>() {
                     public FileNode visit(AbstractFile f) {
-                        return new FileNode(f, false);
+                        return new ScoreFileNode(f, false);
                     }
 
                     public FileNode visit(FsContent f) {
-                        return new FileNode(f, false);
+                        return new ScoreFileNode(f, false);
                     }
 
                     @Override
                     public FileNode visit(LayoutFile f) {
-                        return new FileNode(f, false);
+                        return new ScoreFileNode(f, false);
                     }
 
                     @Override
                     public FileNode visit(File f) {
-                        return new FileNode(f, false);
+                        return new ScoreFileNode(f, false);
                     }
 
                     @Override
                     public FileNode visit(Directory f) {
-                        return new FileNode(f, false);
+                        return new ScoreFileNode(f, false);
                     }
 
                     @Override
                     public FileNode visit(VirtualDirectory f) {
-                        return new FileNode(f, false);
+                        return new ScoreFileNode(f, false);
                     }
 
                     @Override
                     public AbstractNode visit(SlackFile sf) {
-                        return new FileNode(sf, false);
+                        return new ScoreFileNode(sf, false);
                     }
 
                     @Override
                     public AbstractNode visit(LocalFile lf) {
-                        return new FileNode(lf, false);
+                        return new ScoreFileNode(lf, false);
                     }
 
                     @Override
                     public AbstractNode visit(DerivedFile df) {
-                        return new FileNode(df, false);
+                        return new ScoreFileNode(df, false);
                     }
-                    
+
+                    @Override
+                    public AbstractNode visit(BlackboardArtifact ba) {
+                        return new ScoreArtifactNode(ba);
+                    }
+
                     @Override
                     protected AbstractNode defaultVisit(Content di) {
                         if (di instanceof AbstractFile) {
                             return visit((AbstractFile) di);
                         } else {
-                            throw new UnsupportedOperationException("Not supported for this type of Displayable Item: " + di.toString());    
+                            throw new UnsupportedOperationException("Not supported for this type of Displayable Item: " + di.toString());
                         }
                     }
                 });
             }
         }
     }
+
+    private static final String SOURCE_PROP = "Source";
+    private static final String TYPE_PROP = "Type";
+    private static final String PATH_PROP = "Path";
+    private static final String DATE_PROP = "Created Date";
+
+    private static Sheet createScoreSheet(String type, String path, Long time) {
+        Sheet sheet = new Sheet();
+        Sheet.Set sheetSet = Sheet.createPropertiesSet();
+        sheet.put(sheetSet);
+
+        List<NodeProperty<?>> properties = new ArrayList<>();
+        properties.add(new NodeProperty<>(
+                SOURCE_PROP,
+                SOURCE_PROP,
+                NO_DESCR,
+                StringUtils.defaultString(path)));
+
+        properties.add(new NodeProperty<>(
+                TYPE_PROP,
+                TYPE_PROP,
+                NO_DESCR,
+                type));
+
+        if (StringUtils.isNotBlank(path)) {
+            properties.add(new NodeProperty<>(
+                    PATH_PROP,
+                    PATH_PROP,
+                    NO_DESCR,
+                    path));
+        }
+
+        if (time != null && time > 0) {
+            properties.add(new NodeProperty<>(
+                    DATE_PROP,
+                    DATE_PROP,
+                    NO_DESCR,
+                    TimeZoneUtils.getFormattedTime(time)));
+        }
+
+        properties.forEach((property) -> {
+            sheetSet.put(property);
+        });
+
+        return sheet;
+    }
+
+    public static class ScoreArtifactNode extends BlackboardArtifactNode {
+
+        private static final Logger logger = Logger.getLogger(ScoreArtifactNode.class.getName());
+
+        private static final List<BlackboardAttribute.Type> TIME_ATTRS = Arrays.asList(
+                BlackboardAttribute.Type.TSK_DATETIME,
+                BlackboardAttribute.Type.TSK_DATETIME_ACCESSED,
+                BlackboardAttribute.Type.TSK_DATETIME_RCVD,
+                BlackboardAttribute.Type.TSK_DATETIME_SENT,
+                BlackboardAttribute.Type.TSK_DATETIME_CREATED,
+                BlackboardAttribute.Type.TSK_DATETIME_MODIFIED,
+                BlackboardAttribute.Type.TSK_DATETIME_START,
+                BlackboardAttribute.Type.TSK_DATETIME_END,
+                BlackboardAttribute.Type.TSK_DATETIME_DELETED,
+                BlackboardAttribute.Type.TSK_DATETIME_PASSWORD_RESET,
+                BlackboardAttribute.Type.TSK_DATETIME_PASSWORD_FAIL
+        );
+
+        private static final Map<Integer, Integer> TIME_ATTR_IMPORTANCE = IntStream.range(0, TIME_ATTRS.size())
+                .mapToObj(idx -> Pair.of(TIME_ATTRS.get(idx).getTypeID(), idx))
+                .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> v1));
+
+        public ScoreArtifactNode(BlackboardArtifact artifact) {
+            super(artifact);
+        }
+
+        private Long getTime(BlackboardArtifact artifact) {
+            try {
+                BlackboardAttribute timeAttr = artifact.getAttributes().stream()
+                        .filter((attr) -> TIME_ATTR_IMPORTANCE.keySet().contains(attr.getAttributeType().getTypeID()))
+                        .sorted(Comparator.comparing(attr -> TIME_ATTR_IMPORTANCE.get(attr.getAttributeType().getTypeID())))
+                        .findFirst()
+                        .orElse(null);
+
+                if (timeAttr != null) {
+                    return timeAttr.getValueLong();
+                } else {
+                    return (artifact.getParent() instanceof AbstractFile) ? ((AbstractFile) artifact.getParent()).getCtime() : null;
+                }
+            } catch (TskCoreException ex) {
+                logger.log(Level.WARNING, "An exception occurred while fetching time for artifact", ex);
+                return null;
+            }
+        }
+
+        @Override
+        protected synchronized Sheet createSheet() {
+            try {
+                return createScoreSheet(
+                        this.content.getType().getDisplayName(),
+                        this.content.getUniquePath(),
+                        getTime(this.content)
+                );
+            } catch (TskCoreException ex) {
+                logger.log(Level.WARNING, "An error occurred while fetching sheet data for score artifact.", ex);
+                return new Sheet();
+            }
+        }
+    }
+
+    @Messages("ScoreContent_ScoreFileNode_type=File")
+    public static class ScoreFileNode extends FileNode {
+
+        private static final Logger logger = Logger.getLogger(ScoreFileNode.class.getName());
+
+        public ScoreFileNode(AbstractFile af, boolean directoryBrowseMode) {
+            super(af, directoryBrowseMode);
+        }
+
+        @Override
+        protected synchronized Sheet createSheet() {
+            try {
+                return createScoreSheet(
+                        Bundle.ScoreContent_ScoreFileNode_type(),
+                        this.content.getUniquePath(),
+                        this.content.getCtime()
+                );
+            } catch (TskCoreException ex) {
+                logger.log(Level.WARNING, "An error occurred while fetching sheet data for score file.", ex);
+                return new Sheet();
+            }
+        }
+    }
 }
diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java
index 8307fe01c235d78ccb912b0316fe918174e5312f..423e58e1ed94ce3f93228f96dfce4144079a5f0d 100644
--- a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java
+++ b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java
@@ -46,8 +46,7 @@ public ViewsNode(SleuthkitCase sleuthkitCase, long dsObjId) {
                     // add it back in if we can filter the results to a more managable size. 
                     // new RecentFiles(sleuthkitCase),
                     new DeletedContent(sleuthkitCase, dsObjId),
-                    new FileSize(sleuthkitCase, dsObjId),
-                    new ScoreContent(sleuthkitCase, dsObjId))
+                    new FileSize(sleuthkitCase, dsObjId))
                 ),
                 Lookups.singleton(NAME)
             );
diff --git a/Core/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java b/Core/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java
index bf927da4bae0c350938e0558048c5d4d7980ff78..2b5025a9de2ef9fa4642acf08e4392147f8bd114 100644
--- a/Core/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java
+++ b/Core/src/org/sleuthkit/autopsy/integrationtesting/OutputResults.java
@@ -114,7 +114,7 @@ private String getCaseTypeId(Case.CaseType caseType) {
     /**
      * Used by yaml serialization to properly represent objects.
      */
-    private static final Representer MAP_REPRESENTER = new Representer() {
+    private static final Representer MAP_REPRESENTER = new Representer(new DumperOptions()) {
         @Override
         protected MappingNode representJavaBean(Set<Property> properties, Object javaBean) {
             // don't show class name in yaml
diff --git a/CoreLibs/ivy.xml b/CoreLibs/ivy.xml
index f7f326b6e361f4f2244669e22588aaab6aa1b350..51bbeb822023e2b238f62270509f1ac26f372639 100644
--- a/CoreLibs/ivy.xml
+++ b/CoreLibs/ivy.xml
@@ -74,7 +74,7 @@
         <!-- commmon -->
         <dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
         <dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-csv" rev="1.9.0"/>
-        <dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-text" rev="1.9"/>
+        <dependency conf="autopsy_core->default" org="org.apache.commons" name="commons-text" rev="1.10.0"/>
     
         <!-- keep old commons-lang because some deps may need it at runtime. 
         Note there is no namespace collision with ver 3 -->
@@ -87,7 +87,7 @@
 
         <dependency conf="autopsy_core->default" org="net.htmlparser.jericho" name="jericho-html" rev="3.4"/>
 
-        <dependency conf="autopsy_core->default" org="com.fasterxml.jackson.dataformat" name="jackson-dataformat-csv" rev="2.13.2"/>
+        <dependency conf="autopsy_core->default" org="com.fasterxml.jackson.dataformat" name="jackson-dataformat-csv" rev="2.15.2"/>
         
         <!-- better image resizing -->
         <dependency conf="autopsy_core->default" org="org.imgscalr" name="imgscalr-lib" rev="4.2" />
@@ -141,9 +141,9 @@
         <override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
         
         <override org="com.google.code.gson" module="gson" rev="2.9.0"/>
-        <override org="com.google.guava" module="guava" rev="31.1-jre"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-databind" rev="2.13.2"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.13.2"/>
+        <override org="com.google.guava" module="guava" rev="32.0.1-jre"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-databind" rev="2.15.2"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
         
         <!-- changes to bouncy castle version may also be reflected in thirdparty/IcePDF 6.2.2 -->
         <override org="org.bouncycastle" module="bcprov-jdk15on" rev="1.70"/>
diff --git a/CoreLibs/nbproject/project.properties b/CoreLibs/nbproject/project.properties
index b8ef72969a00d7bcca6c970d6e2dcac9d586427d..fe5e78acffee0357254968f4833ac23fcb76ee49 100644
--- a/CoreLibs/nbproject/project.properties
+++ b/CoreLibs/nbproject/project.properties
@@ -22,7 +22,7 @@ file.reference.commons-io-2.11.0.jar=release/modules/ext/commons-io-2.11.0.jar
 file.reference.commons-lang-2.6.jar=release/modules/ext/commons-lang-2.6.jar
 file.reference.commons-lang3-3.12.0.jar=release/modules/ext/commons-lang3-3.12.0.jar
 file.reference.commons-logging-1.2.jar=release/modules/ext/commons-logging-1.2.jar
-file.reference.commons-text-1.9.jar=release/modules/ext/commons-text-1.9.jar
+file.reference.commons-text-1.10.0.jar=release/modules/ext/commons-text-1.10.0.jar
 file.reference.commons-validator-1.7.jar=release/modules/ext/commons-validator-1.7.jar
 file.reference.compiler-0.9.10.jar=release/modules/ext/compiler-0.9.10.jar
 file.reference.conscrypt-openjdk-uber-2.5.1.jar=release/modules/ext/conscrypt-openjdk-uber-2.5.1.jar
@@ -61,7 +61,7 @@ file.reference.grpc-stub-1.44.1.jar=release/modules/ext/grpc-stub-1.44.1.jar
 file.reference.grpc-xds-1.44.1.jar=release/modules/ext/grpc-xds-1.44.1.jar
 file.reference.gson-2.9.0.jar=release/modules/ext/gson-2.9.0.jar
 file.reference.gst1-java-core-1.4.0.jar=release/modules/ext/gst1-java-core-1.4.0.jar
-file.reference.guava-31.1-jre.jar=release/modules/ext/guava-31.1-jre.jar
+file.reference.guava-32.0.1-jre.jar=release/modules/ext/guava-32.0.1-jre.jar
 file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
 file.reference.httpcore-4.4.15.jar=release/modules/ext/httpcore-4.4.15.jar
 file.reference.imageio-bmp-3.8.2.jar=release/modules/ext/imageio-bmp-3.8.2.jar
@@ -80,10 +80,10 @@ file.reference.imageio-thumbsdb-3.8.2.jar=release/modules/ext/imageio-thumbsdb-3
 file.reference.imageio-tiff-3.8.2.jar=release/modules/ext/imageio-tiff-3.8.2.jar
 file.reference.imgscalr-lib-4.2.jar=release/modules/ext/imgscalr-lib-4.2.jar
 file.reference.j2objc-annotations-1.3.jar=release/modules/ext/j2objc-annotations-1.3.jar
-file.reference.jackson-annotations-2.13.2.jar=release/modules/ext/jackson-annotations-2.13.2.jar
-file.reference.jackson-core-2.13.2.jar=release/modules/ext/jackson-core-2.13.2.jar
-file.reference.jackson-databind-2.13.2.jar=release/modules/ext/jackson-databind-2.13.2.jar
-file.reference.jackson-dataformat-csv-2.13.2.jar=release/modules/ext/jackson-dataformat-csv-2.13.2.jar
+file.reference.jackson-annotations-2.15.2.jar=release/modules/ext/jackson-annotations-2.15.2.jar
+file.reference.jackson-core-2.15.2.jar=release/modules/ext/jackson-core-2.15.2.jar
+file.reference.jackson-databind-2.15.2.jar=release/modules/ext/jackson-databind-2.15.2.jar
+file.reference.jackson-dataformat-csv-2.15.2.jar=release/modules/ext/jackson-dataformat-csv-2.15.2.jar
 file.reference.javafx-base-17.0.7-linux.jar=release/modules/ext/javafx-base-17.0.7-linux.jar
 file.reference.javafx-base-17.0.7-mac.jar=release/modules/ext/javafx-base-17.0.7-mac.jar
 file.reference.javafx-base-17.0.7-win.jar=release/modules/ext/javafx-base-17.0.7-win.jar
diff --git a/CoreLibs/nbproject/project.xml b/CoreLibs/nbproject/project.xml
index 8e8b42928b5dd699c9ac922bfcf2fe7d6be41473..f7b139f50237a2d456d2e0d6c74258f23638b9ee 100644
--- a/CoreLibs/nbproject/project.xml
+++ b/CoreLibs/nbproject/project.xml
@@ -684,8 +684,8 @@
                 <binary-origin>release/modules/ext/commons-logging-1.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/commons-text-1.9.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/commons-text-1.9.jar</binary-origin>
+                <runtime-relative-path>ext/commons-text-1.10.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/commons-text-1.10.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/commons-validator-1.7.jar</runtime-relative-path>
@@ -840,8 +840,8 @@
                 <binary-origin>release/modules/ext/gst1-java-core-1.4.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/guava-31.1-jre.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/guava-31.1-jre.jar</binary-origin>
+                <runtime-relative-path>ext/guava-32.0.1-jre.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/guava-32.0.1-jre.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/httpclient-4.5.13.jar</runtime-relative-path>
@@ -916,20 +916,20 @@
                 <binary-origin>release/modules/ext/j2objc-annotations-1.3.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-annotations-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-annotations-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-annotations-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-annotations-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-core-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-core-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-core-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-core-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-databind-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-databind-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-databind-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-databind-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-dataformat-csv-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-dataformat-csv-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-dataformat-csv-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-dataformat-csv-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/javafx-base-17.0.7-linux.jar</runtime-relative-path>
diff --git a/KeywordSearch/ivy.xml b/KeywordSearch/ivy.xml
index 174c2e22fd1cb57e19a63f91736c5caa88c1ed8a..a2bf2cb14ccd25b7fb5830fd6cdf2699a427d90a 100644
--- a/KeywordSearch/ivy.xml
+++ b/KeywordSearch/ivy.xml
@@ -31,9 +31,9 @@
         <dependency conf="autopsy->default" org="junit" name="junit" rev="4.13.2"/>
 
         <!-- Jetty -->
-		<dependency conf="start-solr->default" org="org.eclipse.jetty" name="jetty-start" rev="11.0.8"/>
-        <dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-server" rev="11.0.8"/>
-        <dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-deploy" rev="11.0.8"/>
+		<dependency conf="start-solr->default" org="org.eclipse.jetty" name="jetty-start" rev="11.0.15"/>
+        <dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-server" rev="11.0.15"/>
+        <dependency conf="jetty-libs->default" org="org.eclipse.jetty" name="jetty-deploy" rev="11.0.15"/>
         <dependency conf="servlet->default" org="org.eclipse.jetty.orbit" name="javax.servlet" rev="3.0.0.v201112011016"/>
 
         <!-- logging -->
diff --git a/KeywordSearch/nbproject/project.properties b/KeywordSearch/nbproject/project.properties
index 639894fee3de216c50b214ca4da1ed1c9969dff3..baa7a10c98634da5633e610d1110948628aab807 100644
--- a/KeywordSearch/nbproject/project.properties
+++ b/KeywordSearch/nbproject/project.properties
@@ -1,10 +1,7 @@
 file.reference.annotations-12.0.jar=release/modules/ext/annotations-12.0.jar
-file.reference.checker-qual-3.12.0.jar=release/modules/ext/checker-qual-3.12.0.jar
 file.reference.commons-io-2.8.0.jar=release/modules/ext/commons-io-2.8.0.jar
 file.reference.commons-lang-2.6.jar=release/modules/ext/commons-lang-2.6.jar
 file.reference.commons-math3-3.6.1.jar=release/modules/ext/commons-math3-3.6.1.jar
-file.reference.error_prone_annotations-2.11.0.jar=release/modules/ext/error_prone_annotations-2.11.0.jar
-file.reference.failureaccess-1.0.1.jar=release/modules/ext/failureaccess-1.0.1.jar
 file.reference.guava-31.1-jre.jar=release/modules/ext/guava-31.1-jre.jar
 file.reference.hamcrest-core-1.3.jar=release/modules/ext/hamcrest-core-1.3.jar
 file.reference.http2-client-9.4.44.v20210927.jar=release/modules/ext/http2-client-9.4.44.v20210927.jar
@@ -15,7 +12,6 @@ file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
 file.reference.httpcore-4.4.14.jar=release/modules/ext/httpcore-4.4.14.jar
 file.reference.httpmime-4.5.13.jar=release/modules/ext/httpmime-4.5.13.jar
 file.reference.icu4j-70.1.jar=release/modules/ext/icu4j-70.1.jar
-file.reference.j2objc-annotations-1.3.jar=release/modules/ext/j2objc-annotations-1.3.jar
 file.reference.jcl-over-slf4j-1.7.24.jar=release/modules/ext/jcl-over-slf4j-1.7.24.jar
 file.reference.jetty-alpn-client-9.4.44.v20210927.jar=release/modules/ext/jetty-alpn-client-9.4.44.v20210927.jar
 file.reference.jetty-alpn-java-client-9.4.44.v20210927.jar=release/modules/ext/jetty-alpn-java-client-9.4.44.v20210927.jar
@@ -25,12 +21,11 @@ file.reference.jetty-http-9.4.44.v20210927.jar=release/modules/ext/jetty-http-9.
 file.reference.jetty-io-9.4.44.v20210927.jar=release/modules/ext/jetty-io-9.4.44.v20210927.jar
 file.reference.jetty-util-9.4.44.v20210927.jar=release/modules/ext/jetty-util-9.4.44.v20210927.jar
 file.reference.jsonic-1.2.11.jar=release/modules/ext/jsonic-1.2.11.jar
-file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar
 file.reference.junit-4.13.2.jar=release/modules/ext/junit-4.13.2.jar
 file.reference.language-detector-0.6.jar=release/modules/ext/language-detector-0.6.jar
-file.reference.listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar=release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
 file.reference.logback-classic-1.2.10.jar=release/modules/ext/logback-classic-1.2.10.jar
 file.reference.logback-core-1.2.10.jar=release/modules/ext/logback-core-1.2.10.jar
+file.reference.lucene-core-8.11.2.jar=release/modules/ext/lucene-core-8.11.2.jar
 file.reference.netty-buffer-4.1.68.Final.jar=release/modules/ext/netty-buffer-4.1.68.Final.jar
 file.reference.netty-codec-4.1.68.Final.jar=release/modules/ext/netty-codec-4.1.68.Final.jar
 file.reference.netty-common-4.1.68.Final.jar=release/modules/ext/netty-common-4.1.68.Final.jar
@@ -48,7 +43,6 @@ file.reference.stax2-api-4.2.1.jar=release/modules/ext/stax2-api-4.2.1.jar
 file.reference.woodstox-core-6.2.4.jar=release/modules/ext/woodstox-core-6.2.4.jar
 file.reference.zookeeper-3.8.0.jar=release/modules/ext/zookeeper-3.8.0.jar
 file.reference.zookeeper-jute-3.8.0.jar=release/modules/ext/zookeeper-jute-3.8.0.jar
-file.reference.lucene-core-8.11.2.jar=release/modules/ext/lucene-core-8.11.2.jar
 javac.source=17
 javac.compilerargs=-Xlint -Xlint:-serial
 license.file=../LICENSE-2.0.txt
diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml
index b1ec158a2ae07bc30a20e272846b2e73bf33364b..c1048f48ee89c9df1b1c0d9a225a017a7ff5d8eb 100644
--- a/KeywordSearch/nbproject/project.xml
+++ b/KeywordSearch/nbproject/project.xml
@@ -238,10 +238,6 @@
                 <runtime-relative-path>ext/annotations-12.0.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/annotations-12.0.jar</binary-origin>
             </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/checker-qual-3.12.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/checker-qual-3.12.0.jar</binary-origin>
-            </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/commons-io-2.8.0.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/commons-io-2.8.0.jar</binary-origin>
@@ -254,14 +250,6 @@
                 <runtime-relative-path>ext/commons-math3-3.6.1.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/commons-math3-3.6.1.jar</binary-origin>
             </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/error_prone_annotations-2.11.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/error_prone_annotations-2.11.0.jar</binary-origin>
-            </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/failureaccess-1.0.1.jar</binary-origin>
-            </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/guava-31.1-jre.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/guava-31.1-jre.jar</binary-origin>
@@ -302,10 +290,6 @@
                 <runtime-relative-path>ext/icu4j-70.1.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/icu4j-70.1.jar</binary-origin>
             </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/j2objc-annotations-1.3.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/j2objc-annotations-1.3.jar</binary-origin>
-            </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/jcl-over-slf4j-1.7.24.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/jcl-over-slf4j-1.7.24.jar</binary-origin>
@@ -342,10 +326,6 @@
                 <runtime-relative-path>ext/jsonic-1.2.11.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/jsonic-1.2.11.jar</binary-origin>
             </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/jsr305-3.0.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jsr305-3.0.2.jar</binary-origin>
-            </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/junit-4.13.2.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/junit-4.13.2.jar</binary-origin>
@@ -354,10 +334,6 @@
                 <runtime-relative-path>ext/language-detector-0.6.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/language-detector-0.6.jar</binary-origin>
             </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar</binary-origin>
-            </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/logback-classic-1.2.10.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/logback-classic-1.2.10.jar</binary-origin>
@@ -366,6 +342,10 @@
                 <runtime-relative-path>ext/logback-core-1.2.10.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/logback-core-1.2.10.jar</binary-origin>
             </class-path-extension>
+            <class-path-extension>
+                <runtime-relative-path>ext/lucene-core-8.11.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/lucene-core-8.11.2.jar</binary-origin>
+            </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/netty-buffer-4.1.68.Final.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/netty-buffer-4.1.68.Final.jar</binary-origin>
@@ -434,10 +414,6 @@
                 <runtime-relative-path>ext/zookeeper-jute-3.8.0.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/zookeeper-jute-3.8.0.jar</binary-origin>
             </class-path-extension>
-            <class-path-extension>
-                <runtime-relative-path>ext/lucene-core-8.11.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/lucene-core-8.11.2.jar</binary-origin>
-            </class-path-extension>
         </data>
     </configuration>
 </project>
diff --git a/Tika/ivy.xml b/Tika/ivy.xml
index 096749a5e297b3cc3434d7391de98fad28c3feba..62b93e7caefd1beab6f19833200086bfdc27c78a 100755
--- a/Tika/ivy.xml
+++ b/Tika/ivy.xml
@@ -7,14 +7,14 @@
         <dependency conf="tika->default" org="org.apache.tika" name="tika-parsers" rev="1.28.1"/>
         <dependency conf="tika->default" org="org.apache.poi" name="ooxml-schemas" rev="1.4"/>
         
-        <override org="org.jsoup" module="jsoup" rev="1.14.3"/>
+        <override org="org.jsoup" module="jsoup" rev="1.16.1"/>
         <override org="org.apache.poi" module="poi-ooxml-schemas" rev="4.1.2"/>
         <override org="org.slf4j" module="slf4j-api" rev="1.7.36"/>
         <override org="com.google.code.gson" module="gson" rev="2.9.0"/>
-        <override org="com.google.guava" module="guava" rev="31.1-jre"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.13.2"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-databind" rev="2.13.2"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-annotations" rev="2.13.2"/>
+        <override org="com.google.guava" module="guava" rev="32.0.1-jre"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-databind" rev="2.15.2"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-annotations" rev="2.15.2"/>
         
         <!-- changes to bouncy castle version may also be reflected in thirdparty/IcePDF 6.2.2 -->
         <override org="org.bouncycastle" module="bcmail-jdk15on" rev="1.70"/>
diff --git a/Tika/nbproject/project.properties b/Tika/nbproject/project.properties
index 927ba0e0ef908a2ce04fb2d05d4c8862f7b128a5..2ebead2a20bfd6d688c2ce92d1676cbef177826f 100755
--- a/Tika/nbproject/project.properties
+++ b/Tika/nbproject/project.properties
@@ -9,7 +9,7 @@ file.reference.boilerpipe-1.1.0.jar=release/modules/ext/boilerpipe-1.1.0.jar
 file.reference.bzip2-0.9.1.jar=release/modules/ext/bzip2-0.9.1.jar
 file.reference.c3p0-0.9.5.5.jar=release/modules/ext/c3p0-0.9.5.5.jar
 file.reference.cdm-4.5.5.jar=release/modules/ext/cdm-4.5.5.jar
-file.reference.checker-qual-3.12.0.jar=release/modules/ext/checker-qual-3.12.0.jar
+file.reference.checker-qual-3.33.0.jar=release/modules/ext/checker-qual-3.33.0.jar
 file.reference.commons-codec-1.15.jar=release/modules/ext/commons-codec-1.15.jar
 file.reference.commons-collections4-4.4.jar=release/modules/ext/commons-collections4-4.4.jar
 file.reference.commons-compress-1.21.jar=release/modules/ext/commons-compress-1.21.jar
@@ -28,13 +28,13 @@ file.reference.cxf-rt-transports-http-3.5.0.jar=release/modules/ext/cxf-rt-trans
 file.reference.dd-plist-1.23.jar=release/modules/ext/dd-plist-1.23.jar
 file.reference.dec-0.1.2.jar=release/modules/ext/dec-0.1.2.jar
 file.reference.ehcache-core-2.6.2.jar=release/modules/ext/ehcache-core-2.6.2.jar
-file.reference.error_prone_annotations-2.11.0.jar=release/modules/ext/error_prone_annotations-2.11.0.jar
+file.reference.error_prone_annotations-2.18.0.jar=release/modules/ext/error_prone_annotations-2.18.0.jar
 file.reference.failureaccess-1.0.1.jar=release/modules/ext/failureaccess-1.0.1.jar
 file.reference.fontbox-2.0.25.jar=release/modules/ext/fontbox-2.0.25.jar
 file.reference.geoapi-3.0.1.jar=release/modules/ext/geoapi-3.0.1.jar
 file.reference.grib-4.5.5.jar=release/modules/ext/grib-4.5.5.jar
 file.reference.gson-2.9.0.jar=release/modules/ext/gson-2.9.0.jar
-file.reference.guava-31.1-jre.jar=release/modules/ext/guava-31.1-jre.jar
+file.reference.guava-32.0.1-jre.jar=release/modules/ext/guava-32.0.1-jre.jar
 file.reference.HikariCP-java7-2.4.13.jar=release/modules/ext/HikariCP-java7-2.4.13.jar
 file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
 file.reference.httpcore-4.4.13.jar=release/modules/ext/httpcore-4.4.13.jar
@@ -42,12 +42,12 @@ file.reference.httpmime-4.5.13.jar=release/modules/ext/httpmime-4.5.13.jar
 file.reference.httpservices-4.5.5.jar=release/modules/ext/httpservices-4.5.5.jar
 file.reference.isoparser-1.9.41.7.jar=release/modules/ext/isoparser-1.9.41.7.jar
 file.reference.istack-commons-runtime-3.0.12.jar=release/modules/ext/istack-commons-runtime-3.0.12.jar
-file.reference.j2objc-annotations-1.3.jar=release/modules/ext/j2objc-annotations-1.3.jar
+file.reference.j2objc-annotations-2.8.jar=release/modules/ext/j2objc-annotations-2.8.jar
 file.reference.jackcess-4.0.1.jar=release/modules/ext/jackcess-4.0.1.jar
 file.reference.jackcess-encrypt-4.0.1.jar=release/modules/ext/jackcess-encrypt-4.0.1.jar
-file.reference.jackson-annotations-2.13.2.jar=release/modules/ext/jackson-annotations-2.13.2.jar
-file.reference.jackson-core-2.13.2.jar=release/modules/ext/jackson-core-2.13.2.jar
-file.reference.jackson-databind-2.13.2.jar=release/modules/ext/jackson-databind-2.13.2.jar
+file.reference.jackson-annotations-2.15.2.jar=release/modules/ext/jackson-annotations-2.15.2.jar
+file.reference.jackson-core-2.15.2.jar=release/modules/ext/jackson-core-2.15.2.jar
+file.reference.jackson-databind-2.15.2.jar=release/modules/ext/jackson-databind-2.15.2.jar
 file.reference.jai-imageio-core-1.4.0.jar=release/modules/ext/jai-imageio-core-1.4.0.jar
 file.reference.jakarta.activation-1.2.2.jar=release/modules/ext/jakarta.activation-1.2.2.jar
 file.reference.jakarta.activation-api-1.2.2.jar=release/modules/ext/jakarta.activation-api-1.2.2.jar
diff --git a/Tika/nbproject/project.xml b/Tika/nbproject/project.xml
index 9dc448105e1a73d2e82f446de72ae972032568c5..c103d1a1c6d8bc2d2b5d895a2635e0d201eb0bd9 100755
--- a/Tika/nbproject/project.xml
+++ b/Tika/nbproject/project.xml
@@ -400,8 +400,8 @@
                 <binary-origin>release/modules/ext/cdm-4.5.5.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/checker-qual-3.12.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/checker-qual-3.12.0.jar</binary-origin>
+                <runtime-relative-path>ext/checker-qual-3.33.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/checker-qual-3.33.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/commons-codec-1.15.jar</runtime-relative-path>
@@ -476,8 +476,8 @@
                 <binary-origin>release/modules/ext/ehcache-core-2.6.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/error_prone_annotations-2.11.0.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/error_prone_annotations-2.11.0.jar</binary-origin>
+                <runtime-relative-path>ext/error_prone_annotations-2.18.0.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/error_prone_annotations-2.18.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/failureaccess-1.0.1.jar</runtime-relative-path>
@@ -500,8 +500,8 @@
                 <binary-origin>release/modules/ext/gson-2.9.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/guava-31.1-jre.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/guava-31.1-jre.jar</binary-origin>
+                <runtime-relative-path>ext/guava-32.0.1-jre.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/guava-32.0.1-jre.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/HikariCP-java7-2.4.13.jar</runtime-relative-path>
@@ -532,8 +532,8 @@
                 <binary-origin>release/modules/ext/istack-commons-runtime-3.0.12.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/j2objc-annotations-1.3.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/j2objc-annotations-1.3.jar</binary-origin>
+                <runtime-relative-path>ext/j2objc-annotations-2.8.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/j2objc-annotations-2.8.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/jackcess-4.0.1.jar</runtime-relative-path>
@@ -544,16 +544,16 @@
                 <binary-origin>release/modules/ext/jackcess-encrypt-4.0.1.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-annotations-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-annotations-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-annotations-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-annotations-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-core-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-core-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-core-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-core-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-databind-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-databind-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-databind-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-databind-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/jai-imageio-core-1.4.0.jar</runtime-relative-path>
diff --git a/thirdparty/Volatility/AUTHORS-2.5.txt b/thirdparty/Volatility/AUTHORS-2.5.txt
deleted file mode 100644
index d01f09405fcbfca870f7ee264e4636766173f944..0000000000000000000000000000000000000000
--- a/thirdparty/Volatility/AUTHORS-2.5.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-===============================================
-This file identifies core Volatility authors. 
-
-All lists are alphabetical. 
-===============================================
-
-Volatility 2.4, 2.5:
-------------
-
-Mike Auty
-Andrew Case
-Michael Hale Ligh
-Jamie Levy
-AAron Walters
-
-Volatility 2.0, 2.1, 2.2, 2.3:
-------------
-
-Mike Auty
-Andrew Case
-Michael Cohen
-Brendan Dolan-Gavitt
-Michael Hale Ligh
-Jamie Levy
-AAron Walters
-
-Volatility 1.3:
-------------
-
-AAron Walters <awalters@4tphi.net>
-Volatile Systems LLC
-
-Brendan Dolan-Gavitt <bdolangavitt@wesleyan.edu>
-
-Volatools Basic authors:
-------------
-
-AAron Walters 
-Komoku, Inc.
-
-Nick L. Petroni, Jr.
-Komoku, Inc.
diff --git a/thirdparty/Volatility/CREDITS-2.5.txt b/thirdparty/Volatility/CREDITS-2.5.txt
deleted file mode 100644
index 26082de49db58b9144187d0497dd2e127d10fb1d..0000000000000000000000000000000000000000
--- a/thirdparty/Volatility/CREDITS-2.5.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-===============================================
-We would like to acknowledge individuals that 
-have made significant contributions, code, or 
-ideas toward the respective volatility releases. 
-
-All lists are alphabetical. 
-
-These lists exclude the core Volatility authors, 
-who are identified in AUTHORS.txt. 
-
-If you believe you've been left off, it is not 
-intentional. Please bring it to our attention!
-===============================================
-
-Volatility 2.5: 
-
-Adam Bridge for adding a --count option (humanly readable byte stats) to imagecopy/raw2dmp
-Sebastien Bourdon-Richard for various patches and bug fixes
-Bruno Constanzo for various patches to enhance performance/optimization 
-Glenn P. Edwards, Jr for adding combined user/kernel scans, --case, and ascii/unicode options to yarascan
-@f-s-p for converting some plugins to unfied output format
-Cem Gurkok for submitting the mac_threads plugin
-Takahiro Haruyama for noticing and fixing a bug in impscan
-@masdif for contributing a fix for kernel 3.7+ in linux/module.c
-Wyatt Roersma for converting a large number of plugins to the unified output format
-Karl Vogel for pointing out an issue with IPv4 addresses on big endian systems
-
-Volatility 2.4:
-
-Steven Adair for assistance identifying a large memory PAE bug
-Sebastien Bourdon-Richard for his work on the VMware vmem/vmss split (with meta) AS 
-Justin Capella and Espen Olsen for their work on the Qemu ELF core dumps
-Cem Gurkok for help updating Mac OS X support for 10.9
-Matt McCormack for supplying a patch to rebase dumped PE files
-Stewart McIntyre for extending apihooks for detecting JMP FAR instructions
-Kevin Marker for contributing over 160 standard build Linux profiles 
-synack33 for creating various Mac OS X profiles, including initial ones for 10.10
-Raphaƫl Vinot for his patch to fix IPython within volshell
-
-Volatility 2.3:
-
-Cem Gurkok for his work on the privileges plugin for Windows
-Nir Izraeli for his work on the VMware snapshot address space (see also the vmsnparser project)
-@osxmem of the volafox project (Mac OS X & BSD Memory Analysis Toolkit)
-@osxreverser of reverse.put.as for his help with OSX memory analysis
-Carl Pulley for numerous bug reports, example patches, and plugin testing
-Andreas Schuster for his work on poison ivy plugins for Windows
-Joe Sylve for his work on the ARM address space and significant contributions to linux and mac capabilities
-Philippe Teuwen for his work on the virtual box address space
-Santiago Vicente for his work on the citadel plugins for Windows
-
-Volatility 2.2:
-------------
-
-Joe Sylve
-
-Volatility 2.1:
-------------
-
---- 
-
-Volatility 2.0:
-------------
-
-Frank Boldewin 
-Carl Pulley
-Andreas Schuster
-Bradley Schatz
-
-Volatility 1.3:
-------------
-
-Harlan Carvey
-Michael Cohen
-David Collett
-Brendan Dolan-Gavitt 
-Andreas Schuster
-Matthieu Suiche
-
-We would also like to acknowledge those who have provided valuable
-feedback, bug reports, and testing:
-
-Jide Abu
-Joseph Ayo Akinyele
-Tommaso Assandri
-Richard Austin
-Cameron C Caffee
-Eoghan Casey
-Angelo Cavallini
-Andre' DiMino
-Jon Evans
-Robert Guess
-Christian Herndler
-jeremie0
-Eugene Libster
-Erik Ligda
-Robert Lowe
-Tony Martin
-Timothy Morgan
-Bryan D. Payne
-Golden G. Richard III
-Wyatt Roersma
-RB
-Sam F. Stover
-Marko Thure
diff --git a/thirdparty/Volatility/LEGAL-2.5.txt b/thirdparty/Volatility/LEGAL-2.5.txt
deleted file mode 100644
index 69924bcab351af5fe57ffd078faa0a2a5b494937..0000000000000000000000000000000000000000
--- a/thirdparty/Volatility/LEGAL-2.5.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Volatility
-===============
-
-License
--------
-
-Copyright (C) 2007-2013 Volatility Foundation
-
-Volatility is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-Volatility is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Volatility.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/thirdparty/Volatility/LICENSE-2.5.txt b/thirdparty/Volatility/LICENSE-2.5.txt
deleted file mode 100644
index fa6a77d4a4564648ee9c360a9f8e2d7cb2fe1f7a..0000000000000000000000000000000000000000
--- a/thirdparty/Volatility/LICENSE-2.5.txt
+++ /dev/null
@@ -1,281 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
diff --git a/thirdparty/Volatility/README-2.5.txt b/thirdparty/Volatility/README-2.5.txt
deleted file mode 100644
index dc4e57db121412cbe187b5b4a1b8d944bcf0cc4c..0000000000000000000000000000000000000000
--- a/thirdparty/Volatility/README-2.5.txt
+++ /dev/null
@@ -1,553 +0,0 @@
-============================================================================
-Volatility Framework - Volatile memory extraction utility framework
-============================================================================
-
-The Volatility Framework is a completely open collection of tools,
-implemented in Python under the GNU General Public License, for the
-extraction of digital artifacts from volatile memory (RAM) samples.
-The extraction techniques are performed completely independent of the
-system being investigated but offer visibilty into the runtime state
-of the system. The framework is intended to introduce people to the
-techniques and complexities associated with extracting digital artifacts
-from volatile memory samples and provide a platform for further work into
-this exciting area of research.
-
-The Volatility distribution is available from: 
-http://www.volatilityfoundation.org/#!releases/component_71401
-
-Volatility should run on any platform that supports 
-Python (http://www.python.org)
-
-Volatility supports investigations of the following memory images:
-
-Windows:
-* 32-bit Windows XP Service Pack 2 and 3
-* 32-bit Windows 2003 Server Service Pack 0, 1, 2
-* 32-bit Windows Vista Service Pack 0, 1, 2
-* 32-bit Windows 2008 Server Service Pack 1, 2 (there is no SP0)
-* 32-bit Windows 7 Service Pack 0, 1
-* 32-bit Windows 8, 8.1, and 8.1 Update 1
-* 32-bit Windows 10 (initial support)
-* 64-bit Windows XP Service Pack 1 and 2 (there is no SP0)
-* 64-bit Windows 2003 Server Service Pack 1 and 2 (there is no SP0)
-* 64-bit Windows Vista Service Pack 0, 1, 2
-* 64-bit Windows 2008 Server Service Pack 1 and 2 (there is no SP0)
-* 64-bit Windows 2008 R2 Server Service Pack 0 and 1
-* 64-bit Windows 7 Service Pack 0 and 1
-* 64-bit Windows 8, 8.1, and 8.1 Update 1
-* 64-bit Windows Server 2012 and 2012 R2 
-* 64-bit Windows 10 (initial support)
-
-Linux: 
-* 32-bit Linux kernels 2.6.11 to 4.2.3
-* 64-bit Linux kernels 2.6.11 to 4.2.3
-* OpenSuSE, Ubuntu, Debian, CentOS, Fedora, Mandriva, etc
-
-Mac OSX:
-* 32-bit 10.5.x Leopard (the only 64-bit 10.5 is Server, which isn't supported)
-* 32-bit 10.6.x Snow Leopard
-* 64-bit 10.6.x Snow Leopard
-* 32-bit 10.7.x Lion
-* 64-bit 10.7.x Lion
-* 64-bit 10.8.x Mountain Lion (there is no 32-bit version)
-* 64-bit 10.9.x Mavericks (there is no 32-bit version)
-* 64-bit 10.10.x Yosemite (there is no 32-bit version)
-* 64-bit 10.11.x El Capitan (there is no 32-bit version)
-
-Volatility does not provide memory sample acquisition
-capabilities. For acquisition, there are both free and commercial
-solutions available. If you would like suggestions about suitable 
-acquisition solutions, please contact us at:
-
-volatility (at) volatilityfoundation (dot) org
-
-Volatility supports a variety of sample file formats and the
-ability to convert between these formats:
-
-  - Raw linear sample (dd)
-  - Hibernation file
-  - Crash dump file
-  - VirtualBox ELF64 core dump
-  - VMware saved state and snapshot files
-  - EWF format (E01) 
-  - LiME (Linux Memory Extractor) format
-  - Mach-o file format 
-  - QEMU virtual machine dumps
-  - Firewire 
-  - HPAK (FDPro)
-
-For a more detailed list of capabilities, see the following:
-
-    https://github.com/volatilityfoundation/volatility/wiki
-    
-Also see the community plugins repository:
-
-    https://github.com/volatilityfoundation/community
-
-Example Data
-============
-
-If you want to give Volatility a try, you can download exemplar
-memory images from the following url:
-
-    https://github.com/volatilityfoundation/volatility/wiki/Memory-Samples
-
-Mailing Lists
-=============
-
-Mailing lists to support the users and developers of Volatility
-can be found at the following address:
-
-    http://lists.volatilesystems.com/mailman/listinfo
-
-Contact
-=======
-For information or requests, contact:
-
-Volatility Foundation
-
-Web: http://www.volatilityfoundation.org
-     http://volatility-labs.blogspot.com
-     http://volatility.tumblr.com
-     
-Email: volatility (at) volatilityfoundation (dot) org
-
-IRC: #volatility on freenode
-
-Twitter: @volatility 
-
-Requirements
-============
-- Python 2.6 or later, but not 3.0. http://www.python.org
-
-Some plugins may have other requirements which can be found at: 
-    https://github.com/volatilityfoundation/volatility/wiki/Installation
-
-Quick Start
-===========
-1. Unpack the latest version of Volatility from
-    volatilityfoundation.org
-   
-2. To see available options, run "python vol.py -h" or "python vol.py --info"
-
-   Example:
-
-$ python vol.py --info
-Volatility Foundation Volatility Framework 2.5
-
-Profiles
---------
-VistaSP0x64                - A Profile for Windows Vista SP0 x64
-VistaSP0x86                - A Profile for Windows Vista SP0 x86
-VistaSP1x64                - A Profile for Windows Vista SP1 x64
-VistaSP1x86                - A Profile for Windows Vista SP1 x86
-VistaSP2x64                - A Profile for Windows Vista SP2 x64
-VistaSP2x86                - A Profile for Windows Vista SP2 x86
-Win10x64                   - A Profile for Windows 10 x64
-Win10x86                   - A Profile for Windows 10 x86
-Win2003SP0x86              - A Profile for Windows 2003 SP0 x86
-Win2003SP1x64              - A Profile for Windows 2003 SP1 x64
-Win2003SP1x86              - A Profile for Windows 2003 SP1 x86
-Win2003SP2x64              - A Profile for Windows 2003 SP2 x64
-Win2003SP2x86              - A Profile for Windows 2003 SP2 x86
-Win2008R2SP0x64            - A Profile for Windows 2008 R2 SP0 x64
-Win2008R2SP1x64            - A Profile for Windows 2008 R2 SP1 x64
-Win2008SP1x64              - A Profile for Windows 2008 SP1 x64
-Win2008SP1x86              - A Profile for Windows 2008 SP1 x86
-Win2008SP2x64              - A Profile for Windows 2008 SP2 x64
-Win2008SP2x86              - A Profile for Windows 2008 SP2 x86
-Win2012R2x64               - A Profile for Windows Server 2012 R2 x64
-Win2012x64                 - A Profile for Windows Server 2012 x64
-Win7SP0x64                 - A Profile for Windows 7 SP0 x64
-Win7SP0x86                 - A Profile for Windows 7 SP0 x86
-Win7SP1x64                 - A Profile for Windows 7 SP1 x64
-Win7SP1x86                 - A Profile for Windows 7 SP1 x86
-Win81U1x64                 - A Profile for Windows 8.1 Update 1 x64
-Win81U1x86                 - A Profile for Windows 8.1 Update 1 x86
-Win8SP0x64                 - A Profile for Windows 8 x64
-Win8SP0x86                 - A Profile for Windows 8 x86
-Win8SP1x64                 - A Profile for Windows 8.1 x64
-Win8SP1x86                 - A Profile for Windows 8.1 x86
-WinXPSP1x64                - A Profile for Windows XP SP1 x64
-WinXPSP2x64                - A Profile for Windows XP SP2 x64
-WinXPSP2x86                - A Profile for Windows XP SP2 x86
-WinXPSP3x86                - A Profile for Windows XP SP3 x86
-
-Address Spaces
---------------
-AMD64PagedMemory              - Standard AMD 64-bit address space.
-ArmAddressSpace               - Address space for ARM processors       
-FileAddressSpace              - This is a direct file AS.
-HPAKAddressSpace              - This AS supports the HPAK format
-IA32PagedMemory               - Standard IA-32 paging address space.
-IA32PagedMemoryPae            - This class implements the IA-32 PAE paging address space. It is responsible
-LimeAddressSpace              - Address space for Lime
-MachOAddressSpace             - Address space for mach-o files to support atc-ny memory reader
-OSXPmemELF                    - This AS supports VirtualBox ELF64 coredump format
-QemuCoreDumpElf               - This AS supports Qemu ELF32 and ELF64 coredump format
-VMWareAddressSpace            - This AS supports VMware snapshot (VMSS) and saved state (VMSS) files
-VMWareMetaAddressSpace        - This AS supports the VMEM format with VMSN/VMSS metadata
-VirtualBoxCoreDumpElf64       - This AS supports VirtualBox ELF64 coredump format
-WindowsCrashDumpSpace32       - This AS supports windows Crash Dump format
-WindowsCrashDumpSpace64       - This AS supports windows Crash Dump format
-WindowsCrashDumpSpace64BitMap - This AS supports Windows BitMap Crash Dump format
-WindowsHiberFileSpace32       - This is a hibernate address space for windows hibernation files.
-
-Plugins
--------
-amcache                    - Print AmCache information
-apihooks                   - Detect API hooks in process and kernel memory
-atoms                      - Print session and window station atom tables
-atomscan                   - Pool scanner for atom tables
-auditpol                   - Prints out the Audit Policies from HKLM\SECURITY\Policy\PolAdtEv
-bigpools                   - Dump the big page pools using BigPagePoolScanner
-bioskbd                    - Reads the keyboard buffer from Real Mode memory
-cachedump                  - Dumps cached domain hashes from memory
-callbacks                  - Print system-wide notification routines
-clipboard                  - Extract the contents of the windows clipboard
-cmdline                    - Display process command-line arguments
-cmdscan                    - Extract command history by scanning for _COMMAND_HISTORY
-connections                - Print list of open connections [Windows XP and 2003 Only]
-connscan                   - Pool scanner for tcp connections
-consoles                   - Extract command history by scanning for _CONSOLE_INFORMATION
-crashinfo                  - Dump crash-dump information
-deskscan                   - Poolscaner for tagDESKTOP (desktops)
-devicetree                 - Show device tree
-dlldump                    - Dump DLLs from a process address space
-dlllist                    - Print list of loaded dlls for each process
-driverirp                  - Driver IRP hook detection
-drivermodule               - Associate driver objects to kernel modules
-driverscan                 - Pool scanner for driver objects
-dumpcerts                  - Dump RSA private and public SSL keys
-dumpfiles                  - Extract memory mapped and cached files
-dumpregistry               - Dumps registry files out to disk
-envars                     - Display process environment variables
-eventhooks                 - Print details on windows event hooks
-evtlogs                    - Extract Windows Event Logs (XP/2003 only)
-filescan                   - Pool scanner for file objects
-gahti                      - Dump the USER handle type information
-gditimers                  - Print installed GDI timers and callbacks
-gdt                        - Display Global Descriptor Table
-getservicesids             - Get the names of services in the Registry and return Calculated SID
-getsids                    - Print the SIDs owning each process
-handles                    - Print list of open handles for each process
-hashdump                   - Dumps passwords hashes (LM/NTLM) from memory
-hibinfo                    - Dump hibernation file information
-hivedump                   - Prints out a hive
-hivelist                   - Print list of registry hives.
-hivescan                   - Pool scanner for registry hives
-hpakextract                - Extract physical memory from an HPAK file
-hpakinfo                   - Info on an HPAK file
-idt                        - Display Interrupt Descriptor Table
-iehistory                  - Reconstruct Internet Explorer cache / history
-imagecopy                  - Copies a physical address space out as a raw DD image
-imageinfo                  - Identify information for the image
-impscan                    - Scan for calls to imported functions
-joblinks                   - Print process job link information
-kdbgscan                   - Search for and dump potential KDBG values
-kpcrscan                   - Search for and dump potential KPCR values
-ldrmodules                 - Detect unlinked DLLs
-limeinfo                   - Dump Lime file format information
-linux_apihooks             - Checks for userland apihooks
-linux_arp                  - Print the ARP table
-linux_banner               - Prints the Linux banner information
-linux_bash                 - Recover bash history from bash process memory
-linux_bash_env             - Recover a process' dynamic environment variables
-linux_bash_hash            - Recover bash hash table from bash process memory
-linux_check_afinfo         - Verifies the operation function pointers of network protocols
-linux_check_creds          - Checks if any processes are sharing credential structures
-linux_check_evt_arm        - Checks the Exception Vector Table to look for syscall table hooking
-linux_check_fop            - Check file operation structures for rootkit modifications
-linux_check_idt            - Checks if the IDT has been altered
-linux_check_inline_kernel  - Check for inline kernel hooks
-linux_check_modules        - Compares module list to sysfs info, if available
-linux_check_syscall        - Checks if the system call table has been altered
-linux_check_syscall_arm    - Checks if the system call table has been altered
-linux_check_tty            - Checks tty devices for hooks
-linux_cpuinfo              - Prints info about each active processor
-linux_dentry_cache         - Gather files from the dentry cache
-linux_dmesg                - Gather dmesg buffer
-linux_dump_map             - Writes selected memory mappings to disk
-linux_dynamic_env          - Recover a process' dynamic environment variables
-linux_elfs                 - Find ELF binaries in process mappings
-linux_enumerate_files      - Lists files referenced by the filesystem cache
-linux_find_file            - Lists and recovers files from memory
-linux_getcwd               - Lists current working directory of each process
-linux_hidden_modules       - Carves memory to find hidden kernel modules
-linux_ifconfig             - Gathers active interfaces
-linux_info_regs            - It's like 'info registers' in GDB. It prints out all the
-linux_iomem                - Provides output similar to /proc/iomem
-linux_kernel_opened_files  - Lists files that are opened from within the kernel
-linux_keyboard_notifiers   - Parses the keyboard notifier call chain
-linux_ldrmodules           - Compares the output of proc maps with the list of libraries from libdl
-linux_library_list         - Lists libraries loaded into a process
-linux_librarydump          - Dumps shared libraries in process memory to disk
-linux_list_raw             - List applications with promiscuous sockets
-linux_lsmod                - Gather loaded kernel modules
-linux_lsof                 - Lists file descriptors and their path
-linux_malfind              - Looks for suspicious process mappings
-linux_memmap               - Dumps the memory map for linux tasks
-linux_moddump              - Extract loaded kernel modules
-linux_mount                - Gather mounted fs/devices
-linux_mount_cache          - Gather mounted fs/devices from kmem_cache
-linux_netfilter            - Lists Netfilter hooks
-linux_netscan              - Carves for network connection structures
-linux_netstat              - Lists open sockets
-linux_pidhashtable         - Enumerates processes through the PID hash table
-linux_pkt_queues           - Writes per-process packet queues out to disk
-linux_plthook              - Scan ELF binaries' PLT for hooks to non-NEEDED images
-linux_proc_maps            - Gathers process memory maps
-linux_proc_maps_rb         - Gathers process maps for linux through the mappings red-black tree
-linux_procdump             - Dumps a process's executable image to disk
-linux_process_hollow       - Checks for signs of process hollowing
-linux_psaux                - Gathers processes along with full command line and start time
-linux_psenv                - Gathers processes along with their static environment variables
-linux_pslist               - Gather active tasks by walking the task_struct->task list
-linux_pslist_cache         - Gather tasks from the kmem_cache
-linux_pstree               - Shows the parent/child relationship between processes
-linux_psxview              - Find hidden processes with various process listings
-linux_recover_filesystem   - Recovers the entire cached file system from memory
-linux_route_cache          - Recovers the routing cache from memory
-linux_sk_buff_cache        - Recovers packets from the sk_buff kmem_cache
-linux_slabinfo             - Mimics /proc/slabinfo on a running machine
-linux_strings              - Match physical offsets to virtual addresses (may take a while, VERY verbose)
-linux_threads              - Prints threads of processes
-linux_tmpfs                - Recovers tmpfs filesystems from memory
-linux_truecrypt_passphrase - Recovers cached Truecrypt passphrases
-linux_vma_cache            - Gather VMAs from the vm_area_struct cache
-linux_volshell             - Shell in the memory image
-linux_yarascan             - A shell in the Linux memory image
-lsadump                    - Dump (decrypted) LSA secrets from the registry
-mac_adium                  - Lists Adium messages
-mac_apihooks               - Checks for API hooks in processes
-mac_apihooks_kernel        - Checks to see if system call and kernel functions are hooked
-mac_arp                    - Prints the arp table
-mac_bash                   - Recover bash history from bash process memory
-mac_bash_env               - Recover bash's environment variables
-mac_bash_hash              - Recover bash hash table from bash process memory
-mac_calendar               - Gets calendar events from Calendar.app
-mac_check_mig_table        - Lists entires in the kernel's MIG table
-mac_check_syscall_shadow   - Looks for shadow system call tables
-mac_check_syscalls         - Checks to see if system call table entries are hooked
-mac_check_sysctl           - Checks for unknown sysctl handlers
-mac_check_trap_table       - Checks to see if mach trap table entries are hooked
-mac_compressed_swap        - Prints Mac OS X VM compressor stats and dumps all compressed pages
-mac_contacts               - Gets contact names from Contacts.app
-mac_dead_procs             - Prints terminated/de-allocated processes
-mac_dead_sockets           - Prints terminated/de-allocated network sockets
-mac_dead_vnodes            - Lists freed vnode structures
-mac_dmesg                  - Prints the kernel debug buffer
-mac_dump_file              - Dumps a specified file
-mac_dump_maps              - Dumps memory ranges of process(es), optionally including pages in compressed swap
-mac_dyld_maps              - Gets memory maps of processes from dyld data structures
-mac_find_aslr_shift        - Find the ASLR shift value for 10.8+ images
-mac_get_profile            - Automatically detect Mac profiles       
-mac_ifconfig               - Lists network interface information for all devices
-mac_ip_filters             - Reports any hooked IP filters
-mac_keychaindump           - Recovers possbile keychain keys. Use chainbreaker to open related keychain files
-mac_ldrmodules             - Compares the output of proc maps with the list of libraries from libdl
-mac_librarydump            - Dumps the executable of a process
-mac_list_files             - Lists files in the file cache
-mac_list_kauth_listeners   - Lists Kauth Scope listeners
-mac_list_kauth_scopes      - Lists Kauth Scopes and their status
-mac_list_raw               - List applications with promiscuous sockets
-mac_list_sessions          - Enumerates sessions
-mac_list_zones             - Prints active zones
-mac_lsmod                  - Lists loaded kernel modules
-mac_lsmod_iokit            - Lists loaded kernel modules through IOkit
-mac_lsmod_kext_map         - Lists loaded kernel modules
-mac_lsof                   - Lists per-process opened files
-mac_machine_info           - Prints machine information about the sample
-mac_malfind                - Looks for suspicious process mappings
-mac_memdump                - Dump addressable memory pages to a file
-mac_moddump                - Writes the specified kernel extension to disk
-mac_mount                  - Prints mounted device information
-mac_netstat                - Lists active per-process network connections
-mac_network_conns          - Lists network connections from kernel network structures
-mac_notesapp               - Finds contents of Notes messages
-mac_notifiers              - Detects rootkits that add hooks into I/O Kit (e.g. LogKext)
-mac_orphan_threads         - Lists threads that don't map back to known modules/processes
-mac_pgrp_hash_table        - Walks the process group hash table
-mac_pid_hash_table         - Walks the pid hash table
-mac_print_boot_cmdline     - Prints kernel boot arguments
-mac_proc_maps              - Gets memory maps of processes
-mac_procdump               - Dumps the executable of a process
-mac_psaux                  - Prints processes with arguments in user land (**argv)
-mac_psenv                  - Prints processes with environment in user land (**envp)
-mac_pslist                 - List Running Processes
-mac_pstree                 - Show parent/child relationship of processes
-mac_psxview                - Find hidden processes with various process listings
-mac_recover_filesystem     - Recover the cached filesystem
-mac_route                  - Prints the routing table
-mac_socket_filters         - Reports socket filters
-mac_strings                - Match physical offsets to virtual addresses (may take a while, VERY verbose)
-mac_tasks                  - List Active Tasks
-mac_threads                - List Process Threads
-mac_threads_simple         - Lists threads along with their start time and priority
-mac_trustedbsd             - Lists malicious trustedbsd policies
-mac_version                - Prints the Mac version
-mac_volshell               - Shell in the memory image
-mac_yarascan               - Scan memory for yara signatures
-machoinfo                  - Dump Mach-O file format information
-malfind                    - Find hidden and injected code
-mbrparser                  - Scans for and parses potential Master Boot Records (MBRs)
-memdump                    - Dump the addressable memory for a process
-memmap                     - Print the memory map
-messagehooks               - List desktop and thread window message hooks
-mftparser                  - Scans for and parses potential MFT entries
-moddump                    - Dump a kernel driver to an executable file sample
-modscan                    - Pool scanner for kernel modules
-modules                    - Print list of loaded modules
-multiscan                  - Scan for various objects at once
-mutantscan                 - Pool scanner for mutex objects
-netscan                    - Scan a Vista (or later) image for connections and sockets
-notepad                    - List currently displayed notepad text
-objtypescan                - Scan for Windows object type objects
-patcher                    - Patches memory based on page scans
-poolpeek                   - Configurable pool scanner plugin
-pooltracker                - Show a summary of pool tag usage
-printkey                   - Print a registry key, and its subkeys and values
-privs                      - Display process privileges
-procdump                   - Dump a process to an executable file sample
-pslist                     - Print all running processes by following the EPROCESS lists
-psscan                     - Pool scanner for process objects
-pstree                     - Print process list as a tree
-psxview                    - Find hidden processes with various process listings
-qemuinfo                   - Dump Qemu information
-raw2dmp                    - Converts a physical memory sample to a windbg crash dump
-screenshot                 - Save a pseudo-screenshot based on GDI windows
-servicediff                - List Windows services (ala Plugx)
-sessions                   - List details on _MM_SESSION_SPACE (user logon sessions)
-shellbags                  - Prints ShellBags info
-shimcache                  - Parses the Application Compatibility Shim Cache registry key
-shutdowntime               - Print ShutdownTime of machine from registry
-sockets                    - Print list of open sockets
-sockscan                   - Pool scanner for tcp socket objects
-ssdt                       - Display SSDT entries
-strings                    - Match physical offsets to virtual addresses (may take a while, VERY verbose)
-svcscan                    - Scan for Windows services
-symlinkscan                - Pool scanner for symlink objects
-thrdscan                   - Pool scanner for thread objects
-threads                    - Investigate _ETHREAD and _KTHREADs
-timeliner                  - Creates a timeline from various artifacts in memory
-timers                     - Print kernel timers and associated module DPCs
-truecryptmaster            - Recover TrueCrypt 7.1a Master Keys
-truecryptpassphrase        - TrueCrypt Cached Passphrase Finder
-truecryptsummary           - TrueCrypt Summary
-unloadedmodules            - Print list of unloaded modules
-userassist                 - Print userassist registry keys and information
-userhandles                - Dump the USER handle tables
-vaddump                    - Dumps out the vad sections to a file
-vadinfo                    - Dump the VAD info
-vadtree                    - Walk the VAD tree and display in tree format
-vadwalk                    - Walk the VAD tree
-vboxinfo                   - Dump virtualbox information
-verinfo                    - Prints out the version information from PE images
-vmwareinfo                 - Dump VMware VMSS/VMSN information
-volshell                   - Shell in the memory image
-win10cookie                - Find the ObHeaderCookie value for Windows 10
-windows                    - Print Desktop Windows (verbose details)
-wintree                    - Print Z-Order Desktop Windows Tree
-wndscan                    - Pool scanner for window stations
-yarascan                   - Scan process or kernel memory with Yara signatures
-
-3. To get more information on a Windows memory sample and to make sure Volatility
-   supports that sample type, run 'python vol.py imageinfo -f <imagename>' or 'python vol.py kdbgscan -f <imagename>'
-
-   Example:
-   
-    $ python vol.py imageinfo -f WIN-II7VOJTUNGL-20120324-193051.raw 
-    Volatility Foundation Volatility Framework 2.5
-    Determining profile based on KDBG search...
-    
-              Suggested Profile(s) : Win2008R2SP0x64, Win7SP1x64, Win7SP0x64, Win2008R2SP1x64 (Instantiated with Win7SP0x64)
-                         AS Layer1 : AMD64PagedMemory (Kernel AS)
-                         AS Layer2 : FileAddressSpace (/Path/to/WIN-II7VOJTUNGL-20120324-193051.raw)
-                          PAE type : PAE
-                               DTB : 0x187000L
-                              KDBG : 0xf800016460a0
-              Number of Processors : 1
-         Image Type (Service Pack) : 1
-                    KPCR for CPU 0 : 0xfffff80001647d00L
-                 KUSER_SHARED_DATA : 0xfffff78000000000L
-               Image date and time : 2012-03-24 19:30:53 UTC+0000
-         Image local date and time : 2012-03-25 03:30:53 +0800
-
-4. Run some other plugins. -f is a required option for all plugins. Some
-   also require/accept other options. Run "python vol.py <plugin> -h" for
-   more information on a particular command.  A Command Reference wiki
-   is also available on the Google Code site:
-
-        https://github.com/volatilityfoundation/volatility/wiki
-
-   as well as Basic Usage:
-
-        https://github.com/volatilityfoundation/volatility/wiki/Volatility-Usage
-
-Licensing and Copyright
-=======================
-
-Copyright (C) 2007-2015 Volatility Foundation
-
-All Rights Reserved
-
-Volatility is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-Volatility is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Volatility.  If not, see <http://www.gnu.org/licenses/>.
-
-Bugs and Support
-================
-There is no support provided with Volatility. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. 
-
-If you think you've found a bug, please report it at:
-
-    https://github.com/volatilityfoundation/volatility/issues
-
-In order to help us solve your issues as quickly as possible,
-please include the following information when filing a bug:
-
-* The version of volatility you're using
-* The operating system used to run volatility
-* The version of python used to run volatility
-* The suspected operating system of the memory image
-* The complete command line you used to run volatility
-
-Depending on the operating system of the memory image, you may need to provide
-additional information, such as:
-
-For Windows:
-* The suspected Service Pack of the memory image
-
-For Linux:
-* The suspected kernel version of the memory image
-
-Other options for communicaton can be found at:
-    https://github.com/volatilityfoundation/volatility/wiki
-
-Missing or Truncated Information
-================================
-Volatility Foundation makes no claims about the validity or correctness of the
-output of Volatility. Many factors may contribute to the
-incorrectness of output from Volatility including, but not
-limited to, malicious modifications to the operating system,
-incomplete information due to swapping, and information corruption on
-image acquisition. 
-
-Command Reference 
-====================
-The following url contains a reference of all commands supported by 
-Volatility.
-
-    https://github.com/volatilityfoundation/volatility/wiki
-
diff --git a/thirdparty/Volatility/volatility-2.5.standalone.exe b/thirdparty/Volatility/volatility-2.5.standalone.exe
deleted file mode 100644
index a9d700bd57fbffa075cf24f887362ea9ce447b07..0000000000000000000000000000000000000000
Binary files a/thirdparty/Volatility/volatility-2.5.standalone.exe and /dev/null differ
diff --git a/thunderbirdparser/ivy.xml b/thunderbirdparser/ivy.xml
index 0efca69cb5a1f62658f3c15d7b00f73ee19b6755..df9efc81303ed63197c2b2431cc84d04b5fcd21d 100644
--- a/thunderbirdparser/ivy.xml
+++ b/thunderbirdparser/ivy.xml
@@ -9,7 +9,7 @@
     <dependencies>
         <dependency conf="autopsy->default" org="org.apache.james" name="apache-mime4j-mbox-iterator" rev="0.8.4"/>
         <dependency conf="autopsy->default" org="com.googlecode.ez-vcard" name="ez-vcard" rev="0.11.3"/>
-        <override org="org.jsoup" module="jsoup" rev="1.14.3"/>
-        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.13.2"/>
+        <override org="org.jsoup" module="jsoup" rev="1.16.1"/>
+        <override org="com.fasterxml.jackson.core" module="jackson-core" rev="2.15.2"/>
     </dependencies>
 </ivy-module>
diff --git a/thunderbirdparser/nbproject/project.properties b/thunderbirdparser/nbproject/project.properties
index 0c973f2af0d84f63af3a706915f8ef66e7ecd520..8d13059ed61c4f5369e87cf29387a1e7fd20aa08 100644
--- a/thunderbirdparser/nbproject/project.properties
+++ b/thunderbirdparser/nbproject/project.properties
@@ -1,9 +1,9 @@
 file.reference.apache-mime4j-mbox-iterator-0.8.4.jar=release/modules/ext/apache-mime4j-mbox-iterator-0.8.4.jar
 file.reference.ez-vcard-0.11.3.jar=release/modules/ext/ez-vcard-0.11.3.jar
 file.reference.freemarker-2.3.31.jar=release/modules/ext/freemarker-2.3.31.jar
-file.reference.jackson-core-2.13.2.jar=release/modules/ext/jackson-core-2.13.2.jar
+file.reference.jackson-core-2.15.2.jar=release/modules/ext/jackson-core-2.15.2.jar
 file.reference.java-libpst-0.9.5-SNAPSHOT.jar=release/modules/ext/java-libpst-0.9.5-SNAPSHOT.jar
-file.reference.jsoup-1.14.3.jar=release/modules/ext/jsoup-1.14.3.jar
+file.reference.jsoup-1.16.1.jar=release/modules/ext/jsoup-1.16.1.jar
 file.reference.vinnie-2.0.2.jar=release/modules/ext/vinnie-2.0.2.jar
 javac.source=17
 javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/thunderbirdparser/nbproject/project.xml b/thunderbirdparser/nbproject/project.xml
index 269ee0eae61b4a0515b65cca8478b35a4a8dc7b3..5c4fa0e042b6df43ecc8660dda35661fd9c2fe13 100644
--- a/thunderbirdparser/nbproject/project.xml
+++ b/thunderbirdparser/nbproject/project.xml
@@ -90,16 +90,16 @@
                 <binary-origin>release/modules/ext/freemarker-2.3.31.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jackson-core-2.13.2.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jackson-core-2.13.2.jar</binary-origin>
+                <runtime-relative-path>ext/jackson-core-2.15.2.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jackson-core-2.15.2.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/java-libpst-0.9.5-SNAPSHOT.jar</runtime-relative-path>
                 <binary-origin>release/modules/ext/java-libpst-0.9.5-SNAPSHOT.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/jsoup-1.14.3.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/jsoup-1.14.3.jar</binary-origin>
+                <runtime-relative-path>ext/jsoup-1.16.1.jar</runtime-relative-path>
+                <binary-origin>release/modules/ext/jsoup-1.16.1.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/vinnie-2.0.2.jar</runtime-relative-path>