From 7aee886379aef4d6333deb2750cdbca1496746b0 Mon Sep 17 00:00:00 2001 From: Sophie Mori Date: Tue, 20 Dec 2016 12:34:25 -0500 Subject: [PATCH 1/9] Remove semicolon --- pythonExamples/dataSourceIngestModule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonExamples/dataSourceIngestModule.py b/pythonExamples/dataSourceIngestModule.py index 0c1961b60f..962449b029 100755 --- a/pythonExamples/dataSourceIngestModule.py +++ b/pythonExamples/dataSourceIngestModule.py @@ -127,7 +127,7 @@ class SampleJythonDataSourceIngestModule(DataSourceIngestModule): numFiles = len(files) self.log(Level.INFO, "found " + str(numFiles) + " files") progressBar.switchToDeterminate(numFiles) - fileCount = 0; + fileCount = 0 for file in files: # Check if the user pressed cancel while we were busy From 4105fbbb4975de6d2c0d87aa9817d5d952eb2308 Mon Sep 17 00:00:00 2001 From: Sophie Mori Date: Tue, 20 Dec 2016 12:35:56 -0500 Subject: [PATCH 2/9] Remove semicolons --- pythonExamples/dataSourceIngestModule.py | 2 +- pythonExamples/fileIngestModule.py | 16 ++++++++-------- pythonExamples/reportmodule.py | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pythonExamples/dataSourceIngestModule.py b/pythonExamples/dataSourceIngestModule.py index 962449b029..596436f6c9 100755 --- a/pythonExamples/dataSourceIngestModule.py +++ b/pythonExamples/dataSourceIngestModule.py @@ -169,4 +169,4 @@ class SampleJythonDataSourceIngestModule(DataSourceIngestModule): "Sample Jython Data Source Ingest Module", "Found %d files" % fileCount) IngestServices.getInstance().postMessage(message) - return IngestModule.ProcessResult.OK; \ No newline at end of file + return IngestModule.ProcessResult.OK \ No newline at end of file diff --git a/pythonExamples/fileIngestModule.py b/pythonExamples/fileIngestModule.py index 43d486204e..df41a140aa 100755 --- a/pythonExamples/fileIngestModule.py +++ b/pythonExamples/fileIngestModule.py @@ -110,8 +110,8 @@ class SampleJythonFileIngestModule(FileIngestModule): # TODO: Add your analysis code in here. def process(self, file): # Skip non-files - if ((file.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS) or - (file.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNUSED_BLOCKS) or + if ((file.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS) or + (file.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNUSED_BLOCKS) or (file.isFile() == False)): return IngestModule.ProcessResult.OK @@ -128,7 +128,7 @@ class SampleJythonFileIngestModule(FileIngestModule): # Make an artifact on the blackboard. TSK_INTERESTING_FILE_HIT is a generic type of # artifact. Refer to the developer docs for other examples. art = file.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT) - att = BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME, + att = BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME, SampleJythonFileIngestModuleFactory.moduleName, "Text Files") art.addAttribute(att) @@ -141,15 +141,15 @@ class SampleJythonFileIngestModule(FileIngestModule): # Fire an event to notify the UI and others that there is a new artifact IngestServices.getInstance().fireModuleDataEvent( - ModuleDataEvent(SampleJythonFileIngestModuleFactory.moduleName, - BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT, None)); + ModuleDataEvent(SampleJythonFileIngestModuleFactory.moduleName, + BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT, None)) # For the example (this wouldn't be needed normally), we'll query the blackboard for data that was added # by other modules. We then iterate over its attributes. We'll just print them, but you would probably - # want to do something with them. + # want to do something with them. artifactList = file.getArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT) for artifact in artifactList: - attributeList = artifact.getAttributes(); + attributeList = artifact.getAttributes() for attrib in attributeList: self.log(Level.INFO, attrib.toString()) @@ -169,6 +169,6 @@ class SampleJythonFileIngestModule(FileIngestModule): def shutDown(self): # As a final part of this example, we'll send a message to the ingest inbox with the number of files found (in this thread) message = IngestMessage.createMessage( - IngestMessage.MessageType.DATA, SampleJythonFileIngestModuleFactory.moduleName, + IngestMessage.MessageType.DATA, SampleJythonFileIngestModuleFactory.moduleName, str(self.filesFound) + " files found") ingestServices = IngestServices.getInstance().postMessage(message) diff --git a/pythonExamples/reportmodule.py b/pythonExamples/reportmodule.py index 759602bdb6..84f6ab4309 100755 --- a/pythonExamples/reportmodule.py +++ b/pythonExamples/reportmodule.py @@ -71,7 +71,7 @@ class SampleGeneralReportModule(GeneralReportModuleAdapter): # The 'progressBar' object is of type ReportProgressPanel. # See: http://sleuthkit.org/autopsy/docs/api-docs/3.1/classorg_1_1sleuthkit_1_1autopsy_1_1report_1_1_report_progress_panel.html def generateReport(self, baseReportDir, progressBar): - + # For an example, we write a file with the number of files created in the past 2 weeks # Configure progress bar for 2 tasks progressBar.setIndeterminate(False) @@ -101,7 +101,7 @@ class SampleGeneralReportModule(GeneralReportModuleAdapter): report.close() # Add the report to the Case, so it is shown in the tree - Case.getCurrentCase().addReport(fileName, self.moduleName, "File Count Report"); + Case.getCurrentCase().addReport(fileName, self.moduleName, "File Count Report") progressBar.increment() From 87c69e18da2685f45e6ab24bd9efefe4680191c0 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Mon, 17 Apr 2017 16:23:43 -0400 Subject: [PATCH 3/9] Removed Solr upgrade JARs and IndexUpgrader class --- .../SolrUpgradeTools/Solr4IndexUpgrade.jar | Bin 2746 -> 0 bytes .../SolrUpgradeTools/Solr4IndexUpgrade.java | 69 ----- .../SolrUpgradeTools/Solr5IndexUpgrade.jar | Bin 2990 -> 0 bytes .../SolrUpgradeTools/Solr5IndexUpgrade.java | 70 ----- .../autopsy/keywordsearch/IndexUpgrader.java | 252 ------------------ 5 files changed, 391 deletions(-) delete mode 100644 KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.jar delete mode 100644 KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.java delete mode 100644 KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.jar delete mode 100644 KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.java delete mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexUpgrader.java diff --git a/KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.jar b/KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.jar deleted file mode 100644 index 764fc7df8d95604dd1574b796216ab2761417c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2746 zcmaJ@O>@&m7=AW(qD0tygb==35D64JiL5wH3OJNvLfnSfj*CMel$p-j7LKSac_bM~ zZ~TK!PrdcRy&s2!X=doH2mV9^|1lElLJQgAN^ZHlo+{)D+%g{PuBUG3 zj%(OfMoFh;<8s#OTgf(gbxT)hjb2_$&Bx^>N9UeiQ*Uhx{MFR#x9RkpT1hV`i8Y5; zOqXZhudT)vDcS*p|AGT1cf+Pq@>M zs_^P}&$v@le5=Fuv}cvCs z(`yQEd3J-GsB+WXRx0#s8D=dm_XIMEYn#rzVb%2Kt!CZfH9b`pD=T8nQViVrAFRYlO>y#3=f;pg#C#z`!U;4@qq##I^DkdZNt zMG4o3@wtp4+z|6GhH+CuR>mPQKZIK{mT+6bvWz2GkdTvc3|~t4O2%=lh}#_rs}k}I zL)Q(<@NO_f63GpQ=o00M;Yi-F^kS<~(VcZ(F==HqZ&N%sxMPTUXEEw+87{-6d@vFL z&lZWiK`CPxPkfVq!k==@=-96Kd z+lHf8X|zp#4OMOHu~BE34uShcrul_+-!VMhS@OXoHoV_SB7#9Z{#(~@wQQ&1ghzAGOvRAEX@-ejCRR*SuX8io0d~XBFxF4EPb5?lOA=EIS6U)38AXsO zs@O`x%yg8AN1^~8dG;gU)d_}}uivmW;a&`7tV_5T!v^j%%pVX`*W*@=_9v>p_FzBC z49TEaUts%_C|r0z**j2RKNAAHDg33VP5Q;`vvxA71srBL+KcU4>&CIgL@d-9F=x4{O43;E8LIdH+Wip6bm`1{&OTHKx zDNK>c6rq**T4n#$6*|jYg)I7&=0fBr;vS^u+#U{XQV?Q0h`++&{2q>M?&4^1563pu zU5pm?aC~!mCc2BUO!Rbg2Pb;bIzzqy*Xc8LlY*S3_}nJHmdTf#@6CK$gYN?fHA$Y& zkX;H!$@dgla?+2$EJbLBxYC#-=Xx$Od`kQSm@loefw9PkPh^Cm>nQ%sif8xG)jpr~ zM8i&KLO@(EUrf`zE82HnJ4m@WNVG4Z{4W-Mtms)F4kGU#EcO{*zW6UxKCrj6j~S)a RK@oilSQKL<_``^p{SRo1xSRk0 diff --git a/KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.java b/KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.java deleted file mode 100644 index 97f0dfbdb9..0000000000 --- a/KeywordSearch/SolrUpgradeTools/Solr4IndexUpgrade.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2016 Basis Technology Corp. - * Contact: carrier sleuthkit 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 solr4indexupgrade; - -import java.io.File; -import java.io.IOException; -import org.apache.lucene.analysis.Analyzer; -import org.apache.lucene.analysis.standard.StandardAnalyzer; -import org.apache.lucene.index.IndexUpgrader; -import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; - -/** - * This class upgrades Solr 4 index to Solr 5 index. - */ -public class Solr4IndexUpgrade { - - /** - * Upgrades Solr 4 index to Solr 5 index. - * @param args the command line arguments - * @throws java.io.IOException - */ - public static void main(String[] args) throws IOException { - - if (args.length != 1) { - System.out.println("Must pass 1 input argument"); - showUsage(); - throw new IllegalArgumentException("Must pass 1 argument"); - } - String solr4path = args[0]; - upgrade(solr4path); - } - - /** - * Display usage information for JDiff. - */ - public static void showUsage() { - System.out.println("usage: java -jar Solr4IndexUpgrade.jar \"\\path\\to\\index\""); - } - - private static void upgrade(String solr4path) throws IOException { - - Directory dir = FSDirectory.open(new File(solr4path).toPath()); - - // upgrade from Solr 4 to Solr 5 - IndexWriterConfig config; - Analyzer analyzer = new StandardAnalyzer(); - config = new IndexWriterConfig(analyzer); - IndexUpgrader upgrader = new IndexUpgrader(dir, config, true); - upgrader.upgrade(); - } -} diff --git a/KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.jar b/KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.jar deleted file mode 100644 index 9a18d23a983b61889e98689b6cc6568700661a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2990 zcmb7GOLNm!6#f)DQKH%eLP%*-K!lg`kcHC#Apu$w5-_n7gF_%CEtTaPM^u(Pl1y-S z%=CYBro*CLwu>aw%+OsIbkl#)RkvL-Jy$Zei4~^R*wTG`=Y8(EC%+hpNcvoK#+N#+)Enq_P-*Hc!R z;~KU#Bd3xV<5JpcTS-?neUr(wMw?fYQ*mj|VVcKE%FQ~*PbV)vNu?&0V(OBdSavks zWb&NtRBcD|h~+5ZP0e+cyyk7r$fi+L&6>_Erf8OC*1sjeif&gbwxwK7P9{^yr<&7_ zDr)*STbff+;*zY}C8oRKxcBcltVuG z{wNMmXgZjv@8Zwz-2US>WdQ$=hT=PfCUx%g*KdA(MffQg5{5C|hpU+B#jJ#DxGv#i z+z|1ZgdTj(C+S|?6fq}3;&TbNB+O$$#BC9GB=loi!Xact+~waz2?NOTQBK5?gdr^R zSDwG_iMTJKAfV@(VHw^H0g=S$s(|Pm#ZN$g*09)8tx{ypidHmfWgu&lk5@Iv;Pb{} z)Y~*%0q3%v-s!M*mY7#4i~@!dkF!s;XPRniR#`20j$xH&ec_r@CU!?dwgvS0GOCoJ zT$v7f0r7%Id6?6x4dtZy=Q^wM{B}jGa0Z+9)&o~7lQm)^69gPfbn@c5_~NDlagmbY z2so3qowBO=N3C%_RM)c|rrt6frqifSHb#ssUBGw<*3UrI&$@?>;W1~lPUhXMw3HP@4?lxuQICKuN#%<@D$ zieU}O7$$H+z(~uX8PjBC%}h6dO)qk;1Xqw0aHYomI3sf^S>fd%OcO^QS?3;H_w04w zmJtClUyxy|+=3Xsz+(~XF?@-y1dRR%7X(fdpmt*YV&xjHs`H>Mvig?ol+uj~#rHrDZ@YY+IZDXwsEH3WilF);T=3k zR3Z@qY{vF&JpF=ksLZ^!U0f=IRlc_}#L?vrvqOv4b`169fJt7l&k zxEIEBe|`BM9J%JwhE27?w}*n0$ndpp-LzeX({!5*)4c=gPy}8t=zWrADt)ONLHF1W zgr8~9g;VtI@fS}+rg1C)5Q`C-_2CT85{eVo5up)qcI;L3dmR4-T?3JAM0e4>hn}^8 z$PUEc#v+s1@m=(C-VvYoNr*HaBN^j#S54pu)tF&YkDS$9e5BCaEgG;+R$V}Vq%J3-R>@hMrK^36DlNt$)}dQRaI z+1oN!z-2;r;Yxl{=o*Yj2X>)^qUSLFPV;ZG(F}Uh7HL>l$_e=M^2Ip4o1|?$>idNA w<|%l%@ZW{-R;r}|Z@%_7Q*SxEeDO~xeMd13TC4nGcMm7!0Uad5@5nvCzlqfcVE_OC diff --git a/KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.java b/KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.java deleted file mode 100644 index f434d71d8d..0000000000 --- a/KeywordSearch/SolrUpgradeTools/Solr5IndexUpgrade.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2016 Basis Technology Corp. - * Contact: carrier sleuthkit 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 solr5indexupgrade; - -import java.io.File; -import java.io.IOException; -import org.apache.lucene.analysis.core.KeywordAnalyzer; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.index.UpgradeIndexMergePolicy; -import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; - -/** - * This class upgrades Solr 5 index to Solr 6 index. - */ -public class Solr5IndexUpgrade { - - /** - * Upgrades Solr 5 index to Solr 6 index. - * @param args the command line arguments - * @throws java.io.IOException - */ - public static void main(String[] args) throws IOException { - - if (args.length != 1) { - System.out.println("Must pass 1 argument"); - showUsage(); - throw new IllegalArgumentException("Must pass 1 argument"); - } - String solr5path = args[0]; - upgrade(solr5path); - } - - /** - * Display usage information for JDiff. - */ - public static void showUsage() { - System.out.println("usage: java -jar Solr5IndexUpgrade.jar \"\\path\\to\\index\""); - } - - private static void upgrade(String solr4path) throws IOException { - - Directory dir = FSDirectory.open(new File(solr4path).toPath()); - - - // upgrade from Solr 5 to Solr 6 - IndexWriterConfig iwc = new IndexWriterConfig(new KeywordAnalyzer()); - iwc.setMergePolicy(new UpgradeIndexMergePolicy(iwc.getMergePolicy())); - IndexWriter w = new IndexWriter(dir, iwc); - w.forceMerge(1); - w.close(); - } -} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexUpgrader.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexUpgrader.java deleted file mode 100644 index d355db1296..0000000000 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexUpgrader.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2017 Basis Technology Corp. - * Contact: carrier sleuthkit 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.keywordsearch; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang.math.NumberUtils; -import org.openide.modules.InstalledFileLocator; -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.ExecUtil; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.PlatformUtil; -import org.sleuthkit.autopsy.framework.AutopsyService; -import org.sleuthkit.autopsy.framework.ProgressIndicator; - -/** - * This class handles the task of upgrading old indexes to the latest supported - * Solr version. - */ -class IndexUpgrader { - - private static final Logger logger = Logger.getLogger(IndexFinder.class.getName()); - private final String JAVA_PATH; - - IndexUpgrader() { - JAVA_PATH = PlatformUtil.getJavaPath(); - } - - /** - * Perform Solr text index upgrade to the latest supported version of Solr. - * - * @param newIndexDir Full path to directory of Solr index to be - * upgraded - * @param indexToUpgrade Index object of the existing Solr index - * @param context AutopsyService.CaseContext object - * @param numCompletedWorkUnits Number of completed progress units so far - * - * @return Index object of the upgraded index, null if cancelled. - * - * @throws - * org.sleuthkit.autopsy.framework.AutopsyService.AutopsyServiceException - */ - @NbBundle.Messages({ - "SolrSearch.upgrade4to5.msg=Upgrading existing text index from Solr 4 to Solr 5", - "SolrSearch.upgrade5to6.msg=Upgrading existing text index from Solr 5 to Solr 6", - "SolrSearch.upgradeFailed.msg=Upgrade of existing Solr text index failed, deleting temporary directories",}) - Index performIndexUpgrade(String newIndexDir, Index indexToUpgrade, AutopsyService.CaseContext context, int startingNumCompletedWorkUnits) throws AutopsyService.AutopsyServiceException { - - int numCompletedWorkUnits = startingNumCompletedWorkUnits; - ProgressIndicator progress = context.getProgressIndicator(); - - // Run the upgrade tools on the contents (core) in ModuleOutput/keywordsearch/data/solrX_schema_Y/index - String tempResultsDir = context.getCase().getTempDirectory(); - File tmpDir = Paths.get(tempResultsDir, "IndexUpgrade").toFile(); //NON-NLS - tmpDir.mkdirs(); - - Index upgradedIndex; - int currentSolrVersion = NumberUtils.toInt(indexToUpgrade.getSolrVersion()); - try { - - if (context.cancelRequested()) { - return null; - } - - // create process terminator that will monitor the cancellation flag - UserCancelledProcessTerminator terminatior = new UserCancelledProcessTerminator(context); - - // upgrade from Solr 4 to 5 - numCompletedWorkUnits++; - progress.progress(Bundle.SolrSearch_upgrade4to5_msg(), numCompletedWorkUnits); - currentSolrVersion = upgradeSolrIndexVersion4to5(currentSolrVersion, newIndexDir, tempResultsDir, terminatior); - if (Thread.currentThread().isInterrupted() || context.cancelRequested()) { - return null; - } - - // upgrade from Solr 5 to 6 - numCompletedWorkUnits++; - progress.progress(Bundle.SolrSearch_upgrade5to6_msg(), numCompletedWorkUnits); - currentSolrVersion = upgradeSolrIndexVersion5to6(currentSolrVersion, newIndexDir, tempResultsDir, terminatior); - if (Thread.currentThread().isInterrupted() || context.cancelRequested()) { - return null; - } - - // create upgraded index object - upgradedIndex = new Index(newIndexDir, Integer.toString(currentSolrVersion), indexToUpgrade.getSchemaVersion(), context.getCase().getTextIndexName(), context.getCase().getName()); - return upgradedIndex; - - } catch (Exception ex) { - // catch-all firewall for exceptions thrown by Solr upgrade tools - // upgrade did not complete, delete the new index directories - progress.progress(Bundle.SolrSearch_upgradeFailed_msg(), numCompletedWorkUnits); - File newIndexVersionDir = new File(newIndexDir).getParentFile(); - try { - FileUtils.deleteDirectory(newIndexVersionDir); - } catch (IOException exx) { - logger.log(Level.SEVERE, String.format("Failed to delete %s when upgrade failed", newIndexVersionDir), exx); - } - throw new AutopsyService.AutopsyServiceException("Exception while running Solr index upgrade in " + newIndexDir, ex); //NON-NLS - } - } - - /** - * Upgrades Solr index from version 4 to 5. - * - * @param currentIndexVersion Current Solr index version - * @param solr4IndexPath Full path to Solr v4 index directory - * @param tempResultsDir Path to directory where to store log output - * @param terminator Implementation of ExecUtil.ProcessTerminator - * to terminate upgrade process - * - * @return The new Solr index version. - */ - private int upgradeSolrIndexVersion4to5(int currentIndexVersion, String solr4IndexPath, String tempResultsDir, UserCancelledProcessTerminator terminator) throws AutopsyService.AutopsyServiceException { - - if (currentIndexVersion != 4) { - return currentIndexVersion; - } - String outputFileName = "output.txt"; - logger.log(Level.INFO, "Upgrading KWS index {0} from Solr 4 to Solr 5", solr4IndexPath); //NON-NLS - - // find the index upgrade tool - final File upgradeToolFolder = InstalledFileLocator.getDefault().locate("Solr4to5IndexUpgrade", IndexFinder.class.getPackage().getName(), false); //NON-NLS - if (upgradeToolFolder == null) { - throw new AutopsyService.AutopsyServiceException("Unable to locate Sorl 4 to Solr 5 upgrade tool"); - } - - // full path to index upgrade jar file - File upgradeJarPath = Paths.get(upgradeToolFolder.getAbsolutePath(), "Solr4IndexUpgrade.jar").toFile(); - if (!upgradeJarPath.exists() || !upgradeJarPath.isFile()) { - throw new AutopsyService.AutopsyServiceException("Unable to locate Solr 4 to Solr 5 upgrade tool's JAR file"); - } - - // create log output directory if it doesn't exist - new File(tempResultsDir).mkdirs(); - - final String outputFileFullPath = Paths.get(tempResultsDir, outputFileName).toString(); - final String errFileFullPath = Paths.get(tempResultsDir, outputFileName + ".err").toString(); //NON-NLS - List commandLine = new ArrayList<>(); - commandLine.add(JAVA_PATH); - commandLine.add("-jar"); - commandLine.add(upgradeJarPath.getAbsolutePath()); - commandLine.add(solr4IndexPath); - ProcessBuilder processBuilder = new ProcessBuilder(commandLine); - processBuilder.redirectOutput(new File(outputFileFullPath)); - processBuilder.redirectError(new File(errFileFullPath)); - try { - ExecUtil.execute(processBuilder, terminator); - } catch (SecurityException | IOException ex) { - throw new AutopsyService.AutopsyServiceException("Error executing Solr 4 to Solr 5 upgrade tool"); - } - - // alternatively can execute lucene upgrade command from the folder where lucene jars are located - // java -cp ".;lucene-core-5.5.1.jar;lucene-backward-codecs-5.5.1.jar;lucene-codecs-5.5.1.jar;lucene-analyzers-common-5.5.1.jar" org.apache.lucene.index.IndexUpgrader \path\to\index - return 5; - } - - /** - * Upgrades Solr index from version 5 to 6. - * - * @param currentIndexVersion Current Solr index version - * @param solr5IndexPath Full path to Solr v5 index directory - * @param tempResultsDir Path to directory where to store log output - * @param terminatior Implementation of ExecUtil.ProcessTerminator - * to terminate upgrade process - * - * @return The new Solr index version. - */ - private int upgradeSolrIndexVersion5to6(int currentIndexVersion, String solr5IndexPath, String tempResultsDir, UserCancelledProcessTerminator terminator) throws AutopsyService.AutopsyServiceException, SecurityException, IOException { - if (currentIndexVersion != 5) { - return currentIndexVersion; - } - String outputFileName = "output.txt"; - logger.log(Level.INFO, "Upgrading KWS index {0} from Sorl 5 to Solr 6", solr5IndexPath); //NON-NLS - - // find the index upgrade tool - final File upgradeToolFolder = InstalledFileLocator.getDefault().locate("Solr5to6IndexUpgrade", IndexFinder.class.getPackage().getName(), false); //NON-NLS - if (upgradeToolFolder == null) { - throw new AutopsyService.AutopsyServiceException("Unable to locate Sorl 5 to Solr 6 upgrade tool"); - } - - // full path to index upgrade jar file - File upgradeJarPath = Paths.get(upgradeToolFolder.getAbsolutePath(), "Solr5IndexUpgrade.jar").toFile(); - if (!upgradeJarPath.exists() || !upgradeJarPath.isFile()) { - throw new AutopsyService.AutopsyServiceException("Unable to locate Sorl 5 to Solr 6 upgrade tool's JAR file"); - } - - // create log output directory if it doesn't exist - new File(tempResultsDir).mkdirs(); - - final String outputFileFullPath = Paths.get(tempResultsDir, outputFileName).toString(); - final String errFileFullPath = Paths.get(tempResultsDir, outputFileName + ".err").toString(); //NON-NLS - List commandLine = new ArrayList<>(); - commandLine.add(JAVA_PATH); - commandLine.add("-jar"); - commandLine.add(upgradeJarPath.getAbsolutePath()); - commandLine.add(solr5IndexPath); - ProcessBuilder processBuilder = new ProcessBuilder(commandLine); - processBuilder.redirectOutput(new File(outputFileFullPath)); - processBuilder.redirectError(new File(errFileFullPath)); - try { - ExecUtil.execute(processBuilder, terminator); - } catch (SecurityException | IOException ex) { - throw new AutopsyService.AutopsyServiceException("Error executing Solr 4 to Solr 5 upgrade tool"); - } - - // alternatively can execute lucene upgrade command from the folder where lucene jars are located - // java -cp ".;lucene-core-6.2.1.jar;lucene-backward-codecs-6.2.1.jar;lucene-codecs-6.2.1.jar;lucene-analyzers-common-6.2.1.jar" org.apache.lucene.index.IndexUpgrader \path\to\index - return 6; - } - - /** - * Process terminator that can be used to kill Solr index upgrade processes - * if a user has requested to cancel the upgrade. - */ - private class UserCancelledProcessTerminator implements ExecUtil.ProcessTerminator { - - AutopsyService.CaseContext context = null; - - UserCancelledProcessTerminator(AutopsyService.CaseContext context) { - this.context = context; - } - - @Override - public boolean shouldTerminateProcess() { - if (context.cancelRequested()) { - return true; - } - return false; - } - } -} From 67c4030f8f5ea6738ed5fa8707b7a7a2dc17fa6b Mon Sep 17 00:00:00 2001 From: Dmitry Charit Date: Wed, 19 Apr 2017 13:35:23 +0100 Subject: [PATCH 4/9] reverted to Solr4 --- docs/doxygen-user/images/dzkrun.PNG | Bin 0 -> 51961 bytes docs/doxygen-user/images/serviceinstall.PNG | Bin 0 -> 20955 bytes docs/doxygen-user/images/solrinstall3.PNG | Bin 33389 -> 35056 bytes .../images/updatedServiceInstall.PNG | Bin 10907 -> 0 bytes docs/doxygen-user/installSolr.dox | 53 +++++++----------- 5 files changed, 19 insertions(+), 34 deletions(-) create mode 100644 docs/doxygen-user/images/dzkrun.PNG create mode 100644 docs/doxygen-user/images/serviceinstall.PNG delete mode 100755 docs/doxygen-user/images/updatedServiceInstall.PNG diff --git a/docs/doxygen-user/images/dzkrun.PNG b/docs/doxygen-user/images/dzkrun.PNG new file mode 100644 index 0000000000000000000000000000000000000000..978c8847e16ce0023aa39bded8f6d848e0377bae GIT binary patch literal 51961 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen-user/images/serviceinstall.PNG b/docs/doxygen-user/images/serviceinstall.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3a5ea81b47a43f409df7b3b3410e481d932c18c8 GIT binary patch literal 20955 zcmcJ130#ut+I~$l)1K2*)7YXlO50*Kq;AeKjSew{5Fg$5iaNhK75K^AFzJh zxcli-%|Cqxe4d>6V<=|axEW9E|Hs!R6z(54E;w=Pru895BL;bwl9p^QVO7yBHDi_X zWX{}q)2;h6zpeMInY1AKlW#%WuM!?CJRDud+}#83WcH0JQ>AB~2cC;i^&Yt8XLZSuA4_`^T?wN5zx+W=ojL5Kdd z$v+yrVd9@R`Sak_!00wT8D>(?gjo#y`BvY^i#E%Ue$ZzvktVWM!%V669j$g5v3>Hw z_GD3n#CGKuQYOm3%(tASF2(-PsYYUH(kj11eHznC5kVyvcs;bnK9_)K&*Vb&LkXcq z%ppDxuX&6%bv{zBDq*kDGJQpx77t)9Cx@=-MLjZwFE*)#hB%6^9wf_ZG!(q^r?9F; zpQ|;+Rh`s43s&Jfp<0aYSS{Mbn=j@`wNklhF+bYSi->$03tKCJ5v*tp(*)5_D8$~h z_gmNQVV{VH<4T!7R-ink=o4D5{ZH)>{9e9z>0YV|9iPK@`;v*SwBHI%*?O`K99^nF%>~_B$7SC7v|4 z^7hA`km0x72YM(RpUO7=C(!MKRX#rnQz{f`MWq7>%K!^f^LfRLQfOuujreWDlE{_xx_Qw@WLk35O!yjT; zDUWd~T;uZ9MWwOAIxsaddj37&m|eZ=H4}m|WoP&tjEhQ-C=2BJ>M~GwXZ0feEiM`# zzTj#`&ilhorb`8daTWA_ZmVlMe(U~h%y)`3re6hrw+jMR+NXXq+EY`1HN*NHLKbrf zISaZi*ig6C8IQP}Ov+pvR$%n>co7Sgz;Xu-0@=~~esJxld7s(m-fk40ZYH9QWC`jMwH;jO+JrJ1^LP3L@@Fn5ussvEorm zsrD-6{02|L&J+DpO1epRHbpPqFZjCmvjXUA$)+3)|()Beb9RjvfaBdwv%B`iIqZvc)A{R_@DV3XN< zA_s%hM!rz7m2R+{q$sCHugV94BL#rU^O^%HclI9THb(7z&)w6)2A|=a9<+0B2*}nj8~lvuFt->fJ_*>7)tC* z=Xdd28yre>SVATe*D`mxL#yt?1U6uwCtnu8s{`&b`zm}8l0ZuZ-3WFFad6kt*HB@- zFN#D5L>m&s`Ej$6o$J``tQ^7A2i9NFYtprKzQPklkuyEQ!!r}mE@AvWetq(D-3;a` zUtIx2-0QkAL2v~D>pIZp7Kkp)=_?v&?aJvibn<5E7{pSlL{fx5Wr8P_ZBaWG8vZmH ziZBQyMzmH1b>1aFC1T0MaPmOwcGr*R;!Z*+>3-E}{pe>qak`t?;(4ct(uo7z5r)dZ z*M2LmiHLdg&R~lBN)cSg&I1F8lNwoVpb-aohYy4o{Y5lN!|1Gg8|4jq5@jj#e>Z+-0*h=oo?2#Mw&{@?4*Pqz!`J!YnI_xYMZGVXT2pw$K ziurG>kF0p#w;+we`n6O`OqKAM7_$W*$q>m~>78i0jXGAMmau5`vNH80SY%WU)Vjh` zzWFKnXGVj*hXa#|pt5YW5NmZLJmc`*PSfDVG#+wO7k%Gf>9f{wF-AKyUTy$b9x6}UZq_(-(sdTR}qHQ-4Zu z<95Eljj@~7F2T0?+)(M6K5%vCk_y5WNgjqRI*RsT6xc2$q#QywK)YJm zHGcM9=n!(fPe*s~i-H$t5f0viE({}DWIGU%!bj6GIBd#H$cmVLWa8k~gv2Ck-vDa3 zM8B^@s$uy?KI=4*wF;Z^sfkV>UlRF@BkC~}C<3%twX+30p{4FudbW}dv2kz`3k?@2 ztV!B3dOQ0r>QR{s?@^thfD`$wN_w#pFFGhg^BfKzqFw4o4G(A{EWUHpN$FL;!XG(Q z65kiH;tCwaIp95wkNhP!3Pu(Yg@;AZt0@C6ne@HnDShsnqTgi1BU_GZ3wY<0o%lV0 z1h`P0I{O4oaB|cOrCAZJ+W6YB- z*%hfxy6oXX5MCV(o~!~Zh&QSy4|GFy+ooPWh}tF)#-hocdw#_|46%8iWIpQD5`rAYy3aA!nm7 zFN=plCqu@I?lw5}dbq60x{TjDEkZu|c8;lB6{aSPhf|q#rjl6*a zzBrKzVm`>f+II6$p1%n?YPB*RE z9%zhQkCi8rg;8wZ+x-p<(y}BlD8g-gsotxaeU4jlL=ZFw*{uE4w|ut?ML}yx8@cM5 zC#O)v2IPbB1ZNMIR{X42n6h+mrI_KVdynkDT^|L*NxXw2o;8u(`5M;BoRJ?S{!WVf z>X9F`-!iSO$>>16!dE9?1v%oen0L-FU8XcUza5$Id`0I1VYBnY1cpzbCQ7u;vwst= z?%MC@_YGoO$XDDG%69yo3NPKZ$t4+gv)=j7E^Xy}8HP%nu6JANI(0GP`SR7@Yp;|n zbD#ZMyEHHN1~X4ck^5cVkqr7iPuCF3Z_EF>cX2kn%%4`bZy8;?ylEilR_Pay37ewd z2jIRS%zgrH0TA{stUH*)1-F~%#=3PdUGaWS;I%A&$0@-?!PG#@B6k4NZ@LxM+$}#% zh+<#s@@~a%6>eIb2XT9p@>xqFe+ST|dvw~!350XyZV)by_9owHvMA8LgVlZ^XQbCA zic^<9HI1e;|evLV%+K#soiPV>MV|KkYEBWZXG#g#Or?aSNFmE zJlq{;J%TUD5gV{Mauk|od?CrLYu7D8SmVZ^E+Vhq_2npwKZ@T6w-#L@-tm%;9m(_h zuDY+Wc%;$X6-O>dg=S)j$47oSDEiQMGTL8JXnxw>#LT^11wsxsrJIWAnjf@_5Vpx; z1L88p*q~cE>Iq?P36=zCxV+q=>b?DN!snV@^oE|5*~U4+VhPf4j!C;&91X zwGp^EC?i~t1)x8{yIkOZk0U%UFC31pHqnbkzry*^ezr3pU$0sz;rUB4J&_*csG9+ zZ*utcLSIu*L+td&Q1t{|BHJA1(w9G5pr{F${si2d+`6JO?U1Lgh`VaLXJ{sTFHH2N z;ax=7#O!=};`5a3eCK;2(>RE5nJ2FRXziHquIg-BL^wI(qrd7|$}zBUvK@tu<4x5L zFMAH`6BBZQ)@zZ^EnzLuvSV~l+wTby~u{6C=kKg^`f6CP#SCZAW2 zzjp`9A$2RKUCyNS#MC%&BDJxJL&5b8jJLN0sYWv$Wz)51 z@_*^Tg7M)2My5Q}U-2$HXc~G~zH&lwFTTugG4L!58VoK-whSN%vq8P0{od(nh7#P9 zD{!cA&;wE6dz52IWy~k0iY#7S`aXs^$6qnr8A8m;FNk~DvvNIv!3CwqKqZeT97G7& z!*=1U)h%1tQ&nVKYc7ZinaY3SoR3&3&qWB6*Lb| zV1n?ZU(}N8u#~6kq;q~X<@wmBjT6X_kP3S=S0zHa#*hXs3s0t#b3cLa8_`c4`YVf|9o(Q51TN zSo9s!>q8qHid|a7Z_~s-EPE7N^6Tk%7i8p`LAQ|3=j{W*^v0tTs^2C5 zl*wrs^s=yHxG?ul{%^;CPje>SkrhhMQf-f7tSsE9r9e@cA@hcrxA808$wd3*!j`|% z(`kxzwLB#+&$hU98^7Bc>zwR?GDbGaFW1SfSRLgvtj3=2dUe1CPnO8H*+5_(9Ay)6 z#R*3vUQ%cJ6ZV71&zcbL@~UqA_5S%l)Nm(u=8TF|=uLCLV6t>m3mI>HRs05Jyp-!j zMRndB$vM~=30ycn0V45VP3^Z$X+Qc{1W)`S6$(7EUJ43UPzR7lUORVL50PIEMiJX& zH}O?Cgi|6UzZyLgouZ%0_+hP?7hzDAmME=^& zh(;9ceARp%Njri``U8NFNLi_G(*E6 zx>NImAnyafrC>5*NsjS4R;em+ANB0-dS%*Vn9pucK-YYU!-p}syJD7)9;O0G)UwK2 zGqNk^=tM?67?Be8WG_Pr+|CdEd&kExS3z`MiR@fXW2?g&gaK5iVQ8u-pt6{y;a~aV zUiMNB*BmEECtr)R+<-8)=Me!*cRLi0PqhEmQ$dTClt=~d#JdP_USG7gl< z&Nk+zVjc)8(_4Ow8JL(|NqdLn+5JewX*C*T9 z=2Z1G>3wd35ecwJBON6*_0sVvd{ie6uXcLW31UhqgcK`PI?hz!h!P$BD$j>M0joOC z!^%4ri-^qz5ryiD(QzK?dt23wAcd?qR8P<=JYnfQ2}?-F4fVx3q$Oq{MdhLr(skIQ z@_~0tMWDuAv|&dPY&gw_H)|}FebknN=JVB7!!ygs<%&Rt%=Zqtf4 zPb}@Y&Q@_+UjyZ?d@m#JL;DZEdh0R-@O!Y+$&LVfTvx{Ie`pj(Y|w6s@Tp#twrXR@8Azqvy94teM!84WTXp-((KYogH+C<1Q_#E>znoG3 zNkir5kj#mF_B04V`091^Il(=b7G}u=QwTY0vFj6B7>heYg?_DApdVNgn&r;u8JmBr zCUFwU@cqV+osxW!N2lY3VzqD^@`dC5lF|7doDt75W{EPuogK%OdWh3{9aHC~c#ZC( z5+ZusPC|8`bs!q|0uS+v_Uzcu^DO?(gt2KUF{MS2oVgS^0y0bc261KG$9UD6)6y(n%RCd52E~36|h+B z6kN7#k~&A6%0zQX9xQ>xJ0jERS$<3k=6hBg+_FE{nXt1o)J3qJG3|6A)J`3LkpsZ` z%Q+#k=Jv1V+)C0V4(YJnSq-Az-PsCS5t_TjDl;gey_o#@Rm%S%8gPdrr4(IL0 z5O-)l6W442LW)MGluz`GUmBfG4?%+>5|s((NwaUoxB&@zc`|kfhZT0W2U(YWp(kM? z`6grau1q&F!iVa$wy{lUD_Et=oX6FC-`;VMS((Sqj+t$cY=drK2zf>tv(Oh$Urz2xF%35O_$wAu5>)Qm12K$((naP~8xz@h zX4qY%Ex#Mol+zu6E&6x!>W|Y=IReDPUyYco2>6iyE(zv9rt%KL6P3WbK_FHsN-EoF zd7iw081;7QnSHPO<4&+}y&&WzWi3Pw+|1th*h;lM2=6|SaW;F^p0!#JgZ#kXgB*i6YIib<^E#C)6S|&ksmr*UIDHl6@K$ znk{Reo4+-$rv6c*{d2+f&#-BD_>a=sxwhk71-5d&k#Ervxl6%9Bnp7 z>sq0^?e#s_maJnPZ6U11stp5*YHygabZ!g%5t>HK%<8}ax87NFM<$v^8=eEx%o;L8 z3|m2LJXxm2q!D^M6RG~D^F`KH4J;4Usm@Wn8*oE!f?sIG&j};Eo)0_6yRb!oPyk@IrhdgK4kgC=N_$#;A|%#H#+gI}KEr|AvfS7@P1066V*GQieFgEG#W? z>8g}?cLOEUm}^-ft?Lx;D0XOiV=4sKHRqk9v4{ee(c>YKz3WlYCb>W%CKe_ zfP!ybo&PAqJomoH$IKdHtvuDrPht1A7;KMB<9NFO_So45zbo4hc`WU7YHf&I3*@4Q zRF@-)?Km9$vbN?Jf$5kAz}APp$<;^iCXb`v6#9FXxoA!R*u@SaW)uijBVG1F?y*C( z-2X2Gb?5ioZr;QT(nzC+-$jm1M@Do;bC)RM{!>EwmXUM^<>## zkIf>pCcNya7Ff$wqw{HVlhL1wKc0F3(M#T^XyY2STP1V-O;eEN!+|1G20(>O0K#To z{F)C%;+=(3JL^myIePck{oe80z0Pu&x+XZ+z$_QQjoGWBN@y5mWVf(*kmGAiyWD8# zY;d#Jc#%SikYB%!@2zR_D{1zZKA4y@f<1f4xjlmKR3R-WNDawMklO}rjjL_2K%FaV zq-1rFQ|VwOURXpvtxD@#kV!w9w;L%wjAbyX_QE&DsnBV^684ilQbWM{Mr@@=Eq5ZN z{C;88TmH$hL!BUV9?{IVX-L6$eJWPzfKbY}3%>=o1OdMS#|Av6tGJ;P)1@weI-!%~ zqnRPbO;Y4l`9t!6((%ekfC%EysuLfJBsgpkcJJdn;oW~1@EbzPc~kL}+M44mlZX1tJTy z^9AtT^=}l!hxYviO3c?b7&^*}e)_&Pca_hbyjP9Sp+IfAZW(K2@_@oIFQ?;T|2WL( zEMdhA%;*Gr)?M5Bl%Zb-w2oq?nJP=_KM~&hoYRDwNLzHBEoOVEXKo0w(u`_DBdU8Q zY)IDad`a~7uq|en56?|mGM`8^t7~bZR5sLxF>0w~AwNf?u$pSIq*D=Rflu}T!AW1K z!0M{rr=cw7R6QMWlxtp8EXp*LJcTVQVoxWd@2c6TeASRY4<=K{(iO+lB1N@dYRzlT zn1{27tse3xdMX3i*KrG#7F({dgWj$#@f*^ko5+E(2}i#q{m^fTZg2~dLHg1CR|*a4 zMNxr4vYXq|H#Cy`cvDhz@McahdUrFtML&*q%K4?y=q{hFg_IT}mb#iQxW{ZDCa4NG zO2{tMTQR$?M-$J~OdR^weC)bMT`I9j5f{3X?RQHK+XI`dHKQaqm3I~Af<3NBhthAV z$NNr(-H5i#CSsdFd#-Dbt_bO@>JJabmaVKWEylk3I9w^Iv}TG@1#I!*A8+Sx`^>7d z4Hl?xxS5qiy+|ZmU0(`pwX&W$3OVM|J+ZpPOh5KxQ7-zN=$*yq$4)l0Xk;7WI}ugM z&uh}0W$x}h%dPQg6E&=6AuN}(WJ-{C=3=?WN97Fas9g&jgO6>I2VA8kXc z=*ybbC>2cGJy4{hY6s9j`rZWa^xMa3d`-MQIm~3f1T~q_Zn7RF7*3CDL`Z$!FI12I z*ln^FD=2bUe@AT}VI2Ii!_i3k@ZymiwQlnT(>rS7B|smvP9me)B-%m+x!H8YT@Qj* ziN2pTM^O+W-KwQDRJJ=`FgAfO5zev7P+@hlZqaXCd*EY5)krbIK|voO1)^7}N7Jfg zL^8D3l6rHs^az8DOj_7$K7^u&}VEpPNW=;4Jmk9ZoTZ zw!6VV3csuNF(v-{9y_f7HZCuzTtX|*trQ{`D&p92EC|{!*LWQx>2w9+p26nj1Bm$I zsGo#DsaxprzGwk)c1y=hAm{fjuLo~T2`v;He!%Ru-`mlQxQ|^LwzQtbFslVe8^J8* zdcFX6iCry(T(E@Y)B8K}*R;EuD(L8)gpe5ICBf0VaY3#uUFe?4gbF9#Dm2pLJqm}~ z6UU5fG&w!Y7@8oROJ1Wqxj}u1M%an0cWTz;#v|-;#BF8lU0vp_5*DPcsYZ!{;`2fU zPl`47vRXnxD@+WUo8et}U*FRdad8z+u>#3M+Ui0xVJk%NqTFpvYx0&jWmRrIS$oL& zQXBj`#fU)(O_g;3od>^=?Q0aG2aT9gd4G=GpnvPi4A#lY3kpo^F>#HVCt^v5y z4C?NYOTAv%mf7;kou<)U6qW~mr4TrA0|EU<*le4Df1IJem{Ah zCm_NQgW#y5YGtMO_Q{xHR9n+2fXT_zQ5kK1R2X$uo9<>obH^;gS23O5{h^`dNL^us zjsa25)a*-tyiya#Rt6VnnrcRNwbwKj+g2z6YJ~jpiQ_w${Ixg&SHW)=nTp7ErP+nz ztIWA^3g^N+5cP1|Md>vbM7f_-M*H$4IMSWX!E&|1F4x=-To~CU;;o&!CqDdT!Az=#|nDa)xIB>mN0AzCw zc>c%W4yiq;%LJzN8x>zzfWTUft4_8UiZVirRyZ7t+t99Q{hK)>OR8h<8g0u~QsI&3A&VZfZ<@S3LOJY{~1i#W5s@uB~I^MbDg{$FQLfg$mvX(|)ewCAOc39hD73 zjH(cWq~;gF%N{_4@dOg5loh)ij4$xcgq5NZRjnwDD_zfA1?tWBMBnfPA;gry)=X>x zIloAKh_qci@QuO;iJcZ1{r+IH=ndBTykFOzgH6Uql#@5vwpw-r;ZA~R#^3zhMD+s1 zcJpB=?rvp$IXbGX(9nG_=6*TwKC`xsc3Qdw0|@1qN4J!xYhxiXf~xj(DZ@!$ppA>f z6%U5yh1z~rhBlg=USy`&_ycA4d6EmWL z#m(^5yV@TzT&D;$xnQ7Ad4G#UT33~Zj7F@slk=452%v{&9^k2`4U8DU{WHV{Pml0s zN%C6~?XVa593v;7rZUS;z=t2qETY77{UrxDvFXGhumisk~`FC4jddHfH&Hxg| zd_;8nYjdFNYj*3S%Qwij z8^)Skl9MyMG2z5tzCI0|nv#WnvB+6HiN7A`Kw<2&kq0d@kD;<&ks6~_srh_oQKn4B z{tl>7{IZr_TkG`;{}(>#WiV5I87K|>hWn}H-cU75iP@BbYr*;*jY%N^%t$P=w=$fV z#XH$#iAYiO@d&3>v|z2ggQZcAp1DUyhfxi#MLzs|K>mgl=~Vjm<@B3eu}^0TYmi!{ zu+9)D2y#rIhD|XQS49MCQvuZ&*a&dne2sJc2ioMI^lUmD4E_0TWaNq33wF)|s1alg z8B{eWRI)w|s1Y1U9&xHRS}tft{KKN8gDwGD5zW?$|C53)p5 zXL0c&6hu}fV~c&r6IIfK?Y2x9KQNV#?$GC`ANf@CI~RUazo5nMD&(PUBqtIL`|4w~ zvA<@Ov+T^+hM&6~;Kc|5Q1q_ym||+0*S{+pGaXIAOvk(WIY0BjKGh`B`+c+G!9I=P zo>bt&;P2ewkc;0Epz@!CT>EB{<702?ViG<*CJADT&j zYz@hZI>COJ*Qw3ZL>}0i^f|T5d>++KD_#%EWwEl35DvuW-`10{70!lHmT(hc@FphS`fRv~8A_jr@aJM1x{@ zSXDdmhPMAnk$%9UKW?p(@1AXZQ=8LfN2AqtF`GSh*aV@DO@opJYoihb5~q}M*lZk< zLrstH*xn~7_8Sd>iryBFM1K{rwD3s;4MDAQRS)e!oY~=V6DT8W0AzD+4g?(4V@2;B z=7C&HQlJ6_glzzqQXstz)Df@}R;q3vpo-rKB!561p%a(+8qBg;fP zi0SWx+eV)`@ruyEPL%breM97V(%AGi;YRjuR0N>KDjYP&GDda*aRR-8ZuH`mjNV{G zeD{`2oQ|;OMJj9))f4`g`p8nvy0;6h+HXdIg8>n;R<`^F%?|38H!M4xa3S6fBb|*B z+8pq<-hrE*;ES3=vREe4kf~u|RLw`MOGXP@?K(C(hT8+E=2jy2-1S-Q5xrcP7>Prf zgZ6K0H*aDl^dEc%)DxIWcy)+y(_!dfDDv)?fM)KsC(47;T{BWLR%lo6p)1(cZct?$ zTL7RSfDyVPO;GstxAQtU+=${}k}C#TEB)0EvM*vFI6FFG5D8Hx)7nr@@$Fc5vNskK z--ePxp49_nLV)!Vn_#g|{%bt&(%o6 zopM-~+hXe~RO>pjw}XcSsx&JpRb^D$%%&aM4ZQ;!fhvj*QTT^=uXt5dxLrMe%ZKwo zH1Zzg-N_R(9<kyc^|c+X zbxzv%xSNOMOV9`P_5(m|pbI-2a&?(l_*0wQYqsIG+hwY+HE{0){%kwI>#ZUoT0(NB+FqfOjxGlHaoG9lVq3J zr+~PvZwi#$w0Lf@z~v{hSH7TPZVM%!oz%fvKomC7043kSj{^Jaf(k4G)VoU@UF@1? ztfE*Br88svaVq3>!9X0a6ASLRt9l?U!?_sUhiC2rk7y(;hQg5z220Xbh#>MJq2J(0 zq0hx|pN@_-n1($@#V{8# zod2MNM6z}`=VQsv{Cb7CL^Rx~)&lipg$Nz-h%I`Sz0g_qm3grx>{*uAouqzrz09G$ zREo6f>+slaY?Dk3g1jXXo~DUrOKnC_wx~-jYRt|_Pncru+I>A5f;cDmuHNX~b_);u zaddy4>H#Gs878)t*3gF7`P-Pa_%lwIyq}cTT<}lFi&pl(nsO}xvh#Vi`f)9Mo$VNT z&S!%1mHlP-Im!d|x%+FJl$c+OFF760HHB^q(S-v2VM$$ZZ`(%w9PQ6dj?Jd`Q{sgA zqnW{?C}Kbk{k(D2E*L_6g4@0Y;5(q1K#}FF4Y})yEjuC;ypeZS79b}E)3Z_no~ODr zVLR{?z_yn9l@;~I{KJ^-i%K`mB$5TYIW>BWaG0Ss$ufsQ2BS>Deun1DWEOtEyi%mM zjwuZGYD?Le#fo1*+&4VFpk%o2vEmM`^VD89;zAbLqwcWOpujxB|Fj7nm_;wKEyW5OUkp$Amv8DTud z12l-Paf2)kMm4oNupRr`t5L1_Mnc{p?HFYof-Dchjb zm4j98WHBdqzQ^Y9QN^^dgdAhRKdFL{5^H`Y1A9DRz@FEymTe4!UEB_6@Gb<@)P;oO z0UfNzxwiZ-Mk~&=Y%ME!0Y-i&XO`3lz8Ourqzv}x>o(4z00DwsIyo&0XBLm67NfLF4td%!Ua`V%)S z%Wr3IpCk2!Ts51{vzUvS+>j}H;qMSzo;nhaM5=V!NT+3c=&#VXY#JXW(v zhZH^FFZpM5{bp*dw|a=}ZBv8Md)4{!Z}%j8gD=sob-}hZJ$K^8QIl~4EzcPGEt}Fh5IVWUt>TR7gST%*l-*tUW2dQncKBC&`Anpfd#_7~+GT3D1&!(RG<+d> z;*XoC?}}(-`SwoCbWRQ}9b`BAXF|A&CB;jRHu2u%=|u0|6*qD|6*q{h+gYIq7@`@7 zh?a_5_i(|zmh(UvL(Y=A!uq1PX&(z8zXvRy3M_~{+Cx&Jz!-1aDzRDFfN;ibx+G8^ zB|j`?5k3)v68ioPWyOn-S!<^RM?B8?IGZ61Qz30iT~=G3ag{@uRvMaDa)^v9W7L(Z6f017-zPgM;ruq4=2B`c$ z#6xYh!y8uf`ZB-tNApTLV=6=*{C$@J9hOQyE1aCQG+YQ(M{dThiea81mTg&#aH71c z@T*w%6I~Ao8L9xPq4n&(!1ynK(#E~BgkHON;Z6`#e=zQAAz-@;?2Ad}+=ok2LQCtI zsh^l|&tsP9-+Dh>@Ijooz;X<*6uv*~dA|>0H|b@&_K-?gNo7Lbt$NiOYSm(N2*wlr zU$r@u-rIFyRqZrn^aZe*{@p9ln4XZ|Tqu%j685GUp7@yahh~^Z^^asH*|kfcAhIgG zn2xbZE9z_MnMu!q>1&5(No&OjmgmB zibe{CL3urY57NEd;*629o<4QX*}iV;UW5%nSS&I z*7X{oN6k5U_2MMsjXsIdjK&3ePWW(nk??=1CD+|UfAS>VN1+@ya( zE>xZ*=_bM&Wl}|}-rQ$y((6Y}hPbz5=!kBW`6zh=@>siPZD-L7Luiu*V!{;|*fk>7 zc|{%iamr)CHNf;&8)7r3~ARpGuBc`29z2oHBN7U zR+0DR+6FYvn^QzXpeI_lE>4p{R3p+=qh(J9j=nEgLoB?)$p#euk{h+54^5YuU!hs^ zgq1M@7cOwe=8hr*ChAyFVMxGB!<+OQFv*QyR<*CuV!>!^Qkm?FJH@vF%P5*24=5il z;z{2^GC#{pYpL}oZiZ5`up8EfU#2nFr*lq0KKK)WT+wb^4|3TH(H|mrU*L|+W&QNI zB96Xq4Fae;`2I-8ba2x5FEnlKb$LVIz?~NSk)qgZiCujQUoO2amS$*Jbe1`1`(k@@ za)!cbJ)N`2;!5u#(O!KND2CM%J~xFVWKE>`;tbPsoRlx7<*g->Xj!rSylcCB>nLNN>*i^BrUis1M3E8)%ZE`iT6<{kG9_3 zAi0Hg=Z|ERIB?>qly?P*>KJRX6!2*;3BJ$^nEO$$v;~p9s5(V&%MZM{5|h{~O9@Mf3}2&-TFoAwW7jz@9fuyO9$Xz3+#(5dWZn{RX~z^h z`%h_rVnuMoj%YC@1LMsXc>WpNU+2>=-nJM_0d_0F)~s662opf73q`j5Bn2uo$vuO2 z=mE2{p*TpB9WXs97p|Sw%nI!r2KqZjLTdcq`p*`3#v()*mi82rTD=EXz0>&UMM1jP z^vrv7WmhUfwBe{I+0b+`q^z6s%c`l2>ipcZ$sjMwLckZ$h2O`#o1~LCold;YouVJ< z0Px!`aJaI3^9n%8N^aye)yCk~ zt>i>+{yt1rmymb@WOO+USSb+^C7 z)gfnOGAX8mrO(HwKOiAn+_eiDd@IuhfpkS6NpCJ9b7HLfhj+)GH%9kO0r(bX+y4gS zY*O<$9rv$P8qkq6>0YsO*xf1uzia<<#?F~U=3F4QTdrQ%O*o>L`l8E$8Rc4J_60Fm?i7~XiK;e^SJ=U zdmjKn9J2P_R0r0y4(ILwoa%9xc68JM+4lg;V@l4*^l%v95~iehTxbXa0!Y9$6ni=G zIWBPr=#};sU@KzyX1iyeeFkh8Q|O9lz@^yuvblhNKLwXnWXUb6c~Pza9w0!UA-LWp zVfoF=&wx7IU@Zm#{`2AOh;6T;&;P4(NYO0YK==O!?a1=R5L$BRt+>P^fN^TC;N%Jf zV3QVks4>*r>G-)LtHhn$1st~zE`fPE$-LA4m4>E`J z)R$XE$;!C|yh=oh{D+_$Nt9xHzLT>1W^68jnowlt2%;2-2Yh&Q@3WO&{awkh!&p+e ztk@@{bDiRfAs4W|7>WU-U{1BM8asiG#joBMDM@I4)JJ-&GRKn7qJ@DG2H%3hs%j&N zZZM~Jv1Ifs@Qlc5q+S0Nm=yr-*!_`H)+Yd!db=L~EPiRH0ayb9jCYL$Y3CS{Bczj` z**^j6Xj~<(_>@-!T*!8?wL1v%`zH|7kIgp$YrqprUFiR1d(duUXvPjPYwBMCIDh!7do6?D z_NzoD{i6@D^Xr5c4zD0@{&Rp8VUU-T%Z@Vvv~Ei0{l0pP(7zeU{rqSZs%HFu0KD&@0K*B$ zTK@#QlRNSNUml>@3W_K#qU!)cD>h>;rNb{8VRzdLE6?bs>GxTVT>2}K?vvfoOi1tOsz-H1x6&8{>zwE8Th*sPA7hQNoWpEsx)Rc6M26QlVb*9q z%$N>w&M|t$%i&+KGij4#2UAdcm1=pWKV%{ZuF5YhvbAci{0_{0hSAZ_+t|>XU$b&qwn$()7X_dnw{pwND6k z(muBDvu2ra9Oe;Z=ioj#`?9I> z%=E-dyMe3NZuVEW^6N1L7n+8?8R3^(V4YG@>D$&{Lv4{pAYAEqmIt{18&SI>kEe}UobS>{e$LXAnG>705^f`5j*vo_`^*(Osz%Q&iAeN;U%_1zNEeLk>a98T%HVBZlCy{C%sdz@nnwsL3l z-?JihViXunNq7&D&BQk=I$R3=(#v9U z_~Xa{V3{>(CTz;Ld6DmbPZNXqlk&ZKe^j6xpQJDo5GMhP8*%HX1=OFAw>?n*`yzwZ zD09kr+YdKR4Ovf_KPxe929&S^s4~GuM(Q`D#ak9Dv!efI(XjMQHnrnDGe<~FOa zyCbaYqn>xnybm1UMeh9^L_t12IdI@rxZYnkANyG^oLl16%n$fcG0Zw^i$D4?G>b7{*+2T)n34P?$&YXLx0=dfBoX2&>N|< zg6s|QJ-2SiSsF~+zdm*OVK!Cc_O_Z0Jct+|hFCR*a8}*Tt{LHO0NZ z^m^~}aSIEIJFd+s5q7-t_+g5;_r|GP5B5KpG-sUj{ymqT-hBQQ0jJj){<(bpp7^&rZkJw?{VpQ2KY^q@_a!wWK+B+<)-dQa(>wu;m(@Z}g-o<%mW%l9 zy@qz~yz2V1t)P-#WpcV#q!&3Cnxjv?23?6IX;}G^%G5lTZeiV9^d~k~+uX$qJWjjd zEoCJm3>_|X&Qumebw!7nTIPnCPWU)R75-p7b1?OIbf|sjKuXH-==^ju!Mww6YI%EvJwIuM=R<{ z|G7XVGVR$@O2It)LZx>kzJ51)PJi_rx($LvwBC!PL;MB3UfwNpteCC{(#yXv8YEIC zE#lGF(+3qhx@nqx+C;^2)4?UAAihg5e4O^)^CsE#_1e*j=atQO{r{Z#t@}kVyx*{w zUge3Adg|r~lK)JxyG^j#P;c_4Cka{07pdUtC3 zK6$GH2m>UX-J;L6y%A}3c^BH31;w}sMW^i-s%2EHKS+Da+{xyxI#n1i=5(UZ>B4N+ zQ56kenV95n-4>Mte-uad^;Hc0Y=ek3hj2_2=+_lsM0em%uJJ;YZhXWz25W--7JaxW zPw?U$wJ#da5r#IW($b7y6^fW>XE@xPsq9#r2^+0A>t(Jj!^^)mb67-NU7%Y}FuIO) zqJQ*~Qu+}F4Rr^p?sO|#yN8?kaFTxdbd&Cs(_vmO3##}lJHosOYXiqBo)iAQ#9FVV zv8i?Tadm<7clBR&-PC?iFMl`t{u?;~2U@BXq}m;n_Nlmy};#u@2hh;kv=f;~$6L8I4`A9gB+GWTQ*Ud_dZvkvxTbaJ_A z_FJTTBSHhV6;}LQ#WFc9ci)Vko;amU4&}o)wkzN$nmf-fQ{p%lEWp{_y~fpX*_8=46+qfg0{osIXt4^l2&U!-H`vqk=}# zpYQzFeOlJ7Z=4CY6w|#C?9YzqGK~65w1WY5u0T1a>dF7HQIjErPAK(?9BeaI-+H2% zbKIYR*{+&S5|;V&L#yYnKW6w~=y{6Ezy9TQCeZ3C`CtEmDJzBG;u}jTElcK*%+dzX zsm&7+_0G9jPX&A){^L8co!uxn|MBM=^U8G;Ka@MOW~mlnJ@QS`88w`{)Y$#S{|e7+o76cNjs>b^3U;Hdiuj?3{gk5z$IWONAM`^i`rI{4(C%~&32Oi)ugK$K&^DEcJ537M&zjD z+hS9(Q@6Tm*82;cY1PVK{6B4(yn{s^iYgwgBoi`UTV zyOi|Y07CFG5AClv+{`SO#Sq&w8;B9MI{{C!j9ZLbrZp|<5!45aOZM$ zJCbstLnid{Jugadm>G4NKW(h9Xnb8)ls#~M&eJ!D^7DHEL}R&rBk>7foJV0*(00nHv@w>AinCw=%t%8@FCCe<%{X>rmy0cT(tQG7pxu7ySi z+o~^M^|~=l@O0j!wOh+e-Bs;(8DrR&q^ThUOZUqY-%0??y+!cGY};8b z@gX_Fg`h%PT!XtmvV0*U>bLWOWx<<#M*!jm2t0deJjdhoaK5gvwF0ftu@>B4CYUD3 z5UhWL>KZ)mJ1J=KO-y-mN(bp9UeeT_Wi_wqYe}Lin=pMasI8VvWqMe`*86}_pAEr{ z6)LYCz)oP|O!-E|f(mXcAc_N}VrX!ScpYrpGDY^nre~MWdG#&5cPoMA zt#b#ADEv{WxVbCi_bfa(NaGc=w?v?jZ*~KABQ;xYV&^@EBXwNk5mAC{Otgrf%)8aO z-z^LDXIZ7B*e^yTtMS6!V7?=SWsDzRchHluu6lxLDB;_*yyyZ_2GP$K8V{_oAGt2` zHKP$mqav)lngUd`BXxt~a#(xvTtAS*i62n(xUhz;xqeFr76=O#29 zhLj&`y>jBjj8gr@9$!%_6oOC>#d(WBu$Gj92V?a**gP1O`q}mF-6z759t}BEStr~l z*wAT8+)uK+;xYtrr4?kglmi+ERy-~eiJ_UNdqJ9H0boNXlDyXyzDQz_^VBf6M(TH( z#)dq786esc_+=!RBc3D8j~aIYC_iJRu#5`Au092WTK0eKwp8dK4Smne9oA}JBpt?k8@pl zf9am}_2j2IMx14+4fbY1n3ZhD@kpgZ%SS84ZVM64QF3W?v1J$9!{BtKRr7#m(Z^b> zAg_ZcxS1Umel#}m{s>Kx49d#xxvIMcy43r3r27K|?rtT*YjMsuxX#c0IpLNp?M1X_ zYnhF-SRZQN`Yn44Z&;3Ayk18~ETqCw+yVXW8cTkP%duObzNUv9V%6hT9f#zvXz_Ea zSMPiPQ8WSIX;7~3&&o{ zvp};s;@pqUH9;}g${G7P^U7}5htn^w%jrDGHARHYbp`p*0y5E!P7+n*cGUpSdkM1V zu@4QB*gJ&Ml*u1m=eiyiXvP0x5Z=b`7`gTXxPFf+$R4y{rS<3)cA;kWod_)qe&Py@jc;(79oG}dk%P}w zvSKd9=_@?)nKe`gSMoAKS3>Uz9-MPMsv<)+W#!ND2gRS6S%P>+Y46ulz4`=8lkdgr zkEF+nc>I{I&^RY?MW*(MKVV8#>LwZPeNu^D>0WN^Vx2a1fPiClqysqD@t6eG$+7n`*Xv>c0U|=1H2qZhgs~BK=D*-I~p? z?7K-`0K>(uH7{aL=ItYC@7d(lbEKli{Y|~`I}l6|wQT!7bAqSL5y4x7&0$5EiPdc) zoYWEsDe6z+n&wDZK}wk39qg8A0xio=V-GTqer$E4J&R~Hcm?cWY1S3=`j_2aG<|Jw z`E)FZlDqx-B#1Ud^Ffp!1r0Ea%OFfQ-vq4=5>$$qf;Loqr$to_0D$=a8|5q%UA-O=6>{4 z;J}4HMgucVN3op+shD4`nC_cG^V$^6ZOHjBz=u%bRx0gVcxOFH{z|8$R_~brA|ql? zt9~w4Bzg*83@ENsYo1)(QOn`QqHZlXunLd~xi({A+SP6`R-Vyp+a37uAGP{%kP*)) z&kdwkfPOOjMV86UUd%cyT>hkuw_n<}>hrjhbvswq;x!NNIG8TS0d0aS)pwkGNMOIW zZO%HTXC4Lo;4FJ7%Ef%~a@qs22{^3l7;a;}F_&-iD{mS2+-?d`4Sf7$LIU>d<+9y) z$xgu6N&2{0-8w@I>u*7I4@so*H4bTYmXmiP-{V1+lyK(R_1>(PPFbZ?QRdTcxiD;x zmvR05=f%>=0(_r@2oV-;jqe@$d`PV>%`k_EAlajXqYgJC#~JUh&W?I0!|WUf;f7Pu zpRUqNc{Da1M;OoiCIWTpi|nUanic~?%|_kf-kH3u^GH0{-TxH3d+Ru_7eCM?p{@tv z;K~!zzZAR8iVBr6i8%Y1b(Jd<-A*Z?4!=bS}`;Dc8Q!7fK*4L{Uo z!#)rnv={z5pg@kr;@Ub8%#+)Vim5`vJ(PYI)~^!Ath3^T=JuFvpcKyOY_sl$$6eSdI#hdFspPK z152{>K&_;)SxiU1ePX2n#;yJhdXwjflTcXE*P?Hx$S)^oJZ~=o&ADooM6~ogeB1t^ zQ`veXu(4$2)0o!q#2DPfYUvY*oF3~>9^dvGzi@k%DQ`+Sk20Iq{!vk6V6IVM-`P<$ z&|U5l9Vd$|VHRzqirE|mfUdtPyqO+0?kD0w2;oHr8=MK)Q4XO;p%G3;@%cZda?g%? zg?Y&-k-s`p#JM$aMMoYj*Qtq~l-USvY@%bu>gd5Bel1q8HQWof6|%d_`(h=@&e*@6 ziw<|tx?=qyTFhI0-okOBVp!jKjT@m%2IV{e2J8pm`cq;D1~YQ$Svy|+S-)kelda9t zk*m9f3(Gqr&+v>fPwFx@(nijx&)Oe%3W#iD;(VdIzx-+<>D1#;C89_Ha^IhOY5`J&co067IMP~M_K6Z{Ya#{SoawA1Bo2a{u|qzP}ZO&^MTMe z4nvT(TmD3rVSYB7?s}cI??-4;UQ{@_F#z5=KLWSn+i+(zEEvO0SK(pG%Rwe%n{C-otF^{r_sstr)mVgD{e)o%ZL6IclPhvIoLbXRVal^ZX)|}nV z(>!o_nsrb7v-`MBz$Bi#(Y5av2G=`jm{W>J%t?{wkYCCvg#%}{PY&*5;sl)76 zAY%)QS1T8KiIRhkXXfoDuC|W2PB(Uo{ju5#IVT(?Tq!4h*P1bP_qaiz-}NWwC+ii- zQ&Rt3%lQl=0_=RxkdO+l-c-5|R8VmN4rALLh2&jWUiK~%{M1A*Af<|LMY}=jEgiSK z`XcG|X_~xi3kjM+!H_Ak|0HGZo#oC6%O4*?#&?1SeQryMf)OO10BT^t^ZF8G0zvkw z>BV^EHQI@y2cq1;bi((xe9Y-`ti#GSWf@KV8cL&p1DQ(XGQAt-1 zGpQmk1?ByMjC*VusVOZ7H&v%K&VjzS$u=)H6*{qk*AU4FFWV}1Sa!>=K*xX9A~+-L z*%+C@c8sr^dxN+6Xs|IfXs4c^1!m4&Zw1UIuQxa9E%F5PEAt_aY8qhjAp4@6i&a2C-Rp#2dqopQDD6KC%K;%+~qGPjD4A`|0BUrm()B9&``Ewaa~S z!V|yiiY-|VaM<;jGT!l>W3-h7-&d;-jG>**6Id{5PJmO*DE7ve?in&|+g;BEEeS?6 zlaat#Bv20(8@A)u$K88n`~9NN1wJcn&i3XhsgCPMM(Nza%tLr=$U<(|eSzNUjT?6F z9jeRfKwYUQ*}CY;|0<9M5jsdvbwT?9vS!znQ+1PLO+zIB^}68MiAYsd%9`c*?RKNGMy&l<_c6vb4hEgL$Ra%!EY0WxDye@F}!6_fHgCZlr zcwQ~j$bbxlIkiz+_!5`nnE%=IlWu)yL_8Wwwo?_!LmHQ{2pvIoTxcC)f*y>SY{oy& zy3JO%G`W_FC1zkh;i(oUW)hciT38)T*Kd6vy}$d2w0eZqb-z7=OXIM!0q6@2xbM_X zH%1~Or<7vV|KgNLmhvqN`PuDuEwyRluS=4B^*UyXk$H#6wFb*d+ zLuY_9@r;!+S%rIf^Y6f=uL8NQ7Kf@b28pV6$g9Bw|eKIBcBadR9)X++yBC< zTp#Tzn*1X%4gwYifj!UxzN%~L_aY#IZ2~Ax4nZkKVEs4#ty5AfcNa89SS%Ei>|*>-cnxv2e(w#Pf;PCQ&^QBurEjczE&%lEFQc% zl<7TtWve!AdfX!dg4jyJW9RDxeLnjGhi?zE4rUJzHhS!k1(k&r7NnEj^=7Smr8q8r zFarF86l0R*GNAj+lXlOJHs$Uf2c_Nf^2Y!F*Z-LeF6+~!->eF@v2P1H}6WSbwO3H*q5_9&s&QDMO48Scnu7`jo&MB-}%PEj1IoKe} zX;w@SWCG5xpQ?!>YfXq=XhBcOcrA#^8oh&k*y9PFe$G6oL^dLTM5%P1LfmK6AfP$H<>-^C0Q9u*maO0$S3MAS2F2Yr}9 z{XWdOIi5i3hv8{K3nxyD`o0l88s>frE8`61^MMSQOib074XjD~EF`A@{kdV3W$NU7 zUlpN!Cq8w=vN+yEO5AnYfpsR4Heg13mapTKI&&R{vkFSaxZkAg8|=_yWj1G=pcs6b z8@E)y-T<1j9&PP3!xr`jiq2w!5#{px>S;H>n}vBLB7LTi}Go_AJA+7SrbMQ*G!t0H|4->h(S`5vm7yW7~=PmR6|j zAEaThqf_kNx^3Rmt_Q8p)@@Cc0#CKJ&L^3~J}4b`NFp|~P}mY^iKT?0%pXqp^qv50 zY}q4yKz<86P5kIa@QNK&=mXC#sYlSrhR%1;-z+xW4>HApT6%D~3pTS7=f`jyF<@gt zmXNg@zCLih7rsGh>G8|g z^dn#zlIR5^MRZ2H2xL@3fd)Vus13w`XC2LAi{qj5M2>6?+WRlX;jK@m$Tlh~U%4n< zKZWJ>D7e5u(Qk;n&3x_sNessj6y$-ur(^CYz90tupcR8F?GSkXLEdJOMSeZ1zQ(Mf zMu$=;a?DfLTJ}pw2oz<4{TOMY_qk@}0UL8XNd(akYl><8PQT}Cc`W~$qtsIzHPa4e zK>a9kdL}_C72BJ+G*)GvKZd5}-d|unL#puH^(D&S*Kx?5vkltHlj5r)Sw-}l zJD)mWD;t;^0-wT6yKHW6hJfmuZLkqqGwb*-T2jg`QZ6_y{)RFxu=sQmFNJpX})Dt|J80sbQ9yofv*ZP zo^IobCZ*{~5ttFcxMc+S&Oz7QvDd@g-{dNjn8bBE%OXHaYmUZ_Qyh?IBXxw7 zB)Gd}aCpJaF;YA&1^b{;nx!b#a5KI>hx< zvJ|7*+`>Hv`mxuQT?PR|nG+x_TT+}vf{N)bwQ{_kY}o7mY?kLLw_5EPQ2@>J*U-*! z{*KBRh6|~$SR-}Fj}7h!#wm_c0SDFv&1*tXz#4JK*47};@6QNxD~z^j#yiH1DS7v3t*CWcC%oDy5B6tIS8oUU4d1j2|`tAg3SR@=_X z+q^V=t*P@>Wab+9+27=sc?B>VI;`XkOUX+WDRN-Tg2C5`0(uP(<5Omn2{IJkpOs$O zr$12k^n1wUopAYgVi3J-$u=8_t^?cOCmM_WCD+=(2315%Zp#3%F7ddvbaBDu&LrODlR zYFR7n&bDHeC~-7PCL=L23WaXz2J}75yaLI;)?=NiG+M^f+W8rOL$Zo2zfv)$$jrnE znp||jftaJBy*2=2{oDG2s}+d-6vgPVqOBc9-GBnc2hG>+?p*y6BkU(Mzv6IB()P1L zlUxsrVC6x1Ex}~d-O{&*^Ne*=!4eOGxtoY$`W&`92iNRWg6ASr&I$!E?54-E>mqeU zrL6kPB`wkF;9p13J*W=5p$Bp3nXEeOSy}6ApRgS^ff*YP-P`M@wAQPq2T*DF8z;E~ zXF0N40%5}dt#zMR&0hwYdKu8b<4B)cR_DZ$MsGsA&Y6s^qP-+%@yd5@Q&UP@Ay9r= zepDWHlhxf}dQQ@m!s`%!K~|nAZ!SM3kEex*33)1z(?8v|{LQ0cf^Nd!7HZ?*M6VNc zLUxaQ6A8tFa%p^*jV@5|)r%>+JoL0NZCC zjCR2>Z0(}BV^q-fBim(2pGCXLG7h2`s*h>TTa};0H??%Oy@$Y+I`1Msbu}~&SauFD zvf2^TK0)w#akd{J89S?!(Ie7QuXgm?qK-~*QEDmo4o7Ib=5NC0r2~E^#XArW9c>eh z!G!prY^(X;8J-Pi=~yA!ipSRIw(m~cU<)}vFyu7k?NRazYLOK;A|vSD?)m~wB@p)o z@T#c&JX&3I)~;bl^_Wdy+?)LX{kV%|nga-e{wMh!`yypKOao}vwDM2~nvN%jYtRk> zz`BkqV!Bt*69Lm)ALTdXscX7tggl2%&h`!2m}0Jy5BS)QSg$Q+Fe`qLMiu&ab%H;G z(OMUGMD3=XO&i?GP;?ftnrDQ54c}MfQ4qpPh;wo!Xl(;#iymPMWL8DX1)NTGR=};hJ zmpZ>o3uT^N{WKdXAYcYJ`x!`(fSPJ7PtFTWJqiA0k&$Oiz&)c0o2c z>$9U&UgqwhGr|k~L4XgjEuivwQ*B8wPEv7|cKhCo{4`M?LK$-$9P zNI?@|u!hr#kekecmZ7Mhz7jHt!d5p-H7REB_S2-%l$*CTG&ya>nyv7>lJRvvdjw6p z+6buZ^|D5A;`+oCvQz|N`UsM{+AYS~n2lA9)|isHS}3sOZe|5|zXsM8c+r~<-Fd~2 ztBJEQZ}tNP7%&xgj*MXNAY|FcMeJWV0YA7#utD$Vl{C{DJ3bpzu?$EvF6iw@qhzdR zL{y{~7E*LVUL^j4k||S;{8FoHApNC^-2&PR$%FGq2ldCGn|6ndDEWr|3urW6MQ6XQ z_P}1+6Azreo&H|8Ic#~NLGkj!W*eV&*Vs9&Lq12{(G^O>8Ck_ppyFa0?rgqhjBV}i zA;@}vg+cdF2!eK~xEPK?t6N_Y4j{!G$5|7!PKmnR#%r8p3=fYE2s`399@X#uTjR6B zK3Vf;Z03|#n9bv6_ijb9@1`a5!`a%Ar>6vBnmg&T;H8Z<;TIb#=}~DLWdAKg?w!jd zJ=tAiMlry>vb8?5V!3%eU>fz}A2h+i4ii8RQh)jaHOz`(pv$Y9LVXA}p-ug6b(F2m z+X3$K^S81Hi5Yus4jE`OwNtn&_~+B8tl8))h)8M1ZEh`k zc+P6coNw8Y4&n>>cNPUq6DZ)8>$qJ4mX%d@nERp2Q3G~7JMN0LFuu0HG=(L0_3=2q zLkr8Eda>3X`Rz#=Ln5TX9H5Q0G9*{Ht&JRD#%f2Qf;g${j5hcU)lGotx4@i7>1M!} z|IQ(S31F2R%B|nO<%^{i3G4pI3P$*VS*e6R`*y9(hWB+!@S{M00vjN8s_PDOLNUW|sJ}Ur0X5<3}wT2!Oo5^)7tJwo!K6h(pQn#c1hjuzn#j|N1 zcDp{>t3nqpV8xvXR=GL@>ijFc8g^UcyFj3P6!7M1_s)Ph>ok^E=`s3p^@#D#I#=Lxv-axD*$XE!hYC$Dcu&Adgyymx-uK zQK4O#-b_~NQ0~&g(85Qk7Id}53R>lK0Wd8NKMhPZ3H{VU(15}5Vu%*iF>hNXyLw{k z?KC@G88kZXyAW-drfKH=HFR#J1qwCZv72xFk4aI$58d3Pa9yp=>Wz70TDXyncLOi2 z(zSYrzeDf|64B!7k{V!&a><6vYnVR@Br!~d?$36xS4&duxb4r+_tf}wIjPGlHnfRlMYr8uRU%7)_HYT#31$u3`VMW%LfHvmCkerILm};$& zCvX>Kd)$X>B;F!B+$tbt7u7-%_eGNamiR3xLvEF2=?4odww1uB_n1?yb<=CQ)2yr7 z(7wc^H_WYW_X#}bmPnb12YuRi)AdsGibUJ9N0i))GOJOcj*2)L_@)ncdF^B!$sW@r z*i!DlT4+=@D&pi}k6U#x>_vP424y?~4-mzedMA)L%Dj}`;Mw2$ej{*;o}CbKgl&`v zOFt{`$P~j+X<{b3Rs723jy3CyheK{945)0TcoCqgSO7iigoz;NyvSL|djqrCvg=Z& zW=e?RR6+~2Yvym+7{`VP`$2xM-ZI)*{G1zvCHu2(W4b!l%LVruuza|h%Tk@yeEs}( zu-3+Wbqm(JBy^}I{vnpt&a7G>?K-W$tdZ_J-)nlgn*%)Qb0R`u#A)!9 zq03@fGNqQQwbB0}6&#G>(R6EQSBK2#XHr=$(8^jtQY@6Ph?aW<4I{fbPrNHZ8A5Oz zr44zFW7dnAfbG(N0WO#5)bDL>Gofj^=!=+uYu|6jr$Pe#PX0!KNC z*MI3O*5+ayXT1W?$t6}d%>^=r^( z?5bg z;G^#Ml3>dhTbMJCUaTf4Bq3M?Nv%x5aD-VmzV_gglus2~-{pc@I(zhU>Lc$2xS6vo z#YQmYDp|m6`31DqNf>-5YkKm77hB8rqg5oojcx2)7spYI0T`!6r-iEiNS8_ELX6s+*1dTA#CI^X~T&3_?zS@%Cu_+rY1pL5ykr-Y(-!<&R7?AAW64 zv%t&lIN&Ob))t*%$Jyt2K>Te5?JD^$3VA(MkQ~kG9*3Feim;38gF7B(aLQBDVQF=k zDMQ6=cSTy|=RmuS<92>2PmmuVd})2?j8A!Q8rr{rO1$`5C8xAb;pp#{hdrU8naj)Z znDXkP9g>Trs0Ze;Qt-`xd1G{bJAL#SbU!x|G zYOt!1FiciBcXJa|6Peut-FX6%*7PxT~UP38GJ*FvW5UmayM`z+a zwpVh>abhGKgivzT>`BH)ul9$RWx{_D#pc-ozsiRf{j0)FZlCK{{q=J=-K>guSES!` z+thTpP00CVtO9z`+f740_-cfLj>jNDXxjd>L#O8X13|$@+}lco)7D43*Z#I(rA>iB ztVo0!5I|UnxsF$fzgJlCjLWdQ(<*kJRH6Wj;NBunM75G9iA`dZQfm{Tmh`9H3n#5P z7Gk+Z5Cl|)J!$43PCoR4A_~_gm;r?iqQ4BU)Cvch`J`5@CSL{7Y$Ls2&B^? zno&-?h`Z5=ZVEP>&5hT}Vr&#(mJQnk--+yQw--06kd0pJT~&$%e` za~N#|veqsQW+}_aNtD4-`0jj`ZNh3o=#SW<2OU?$mF0g_JULt(_ZHGa*V2@!gzfgLof&e*JsnKl5GhNMb|gLlXA)J1HwYo=sL7t&Tyb#$cgK$H@i$J zQo)1a)TaIu$x7t6&foR#D|r4`{m~iwF*HQ zsTq>94-~h&znyo&DIj^-_#ARC7D$_u_i5B;RxFUg!T6*i(XU@+Bnye|Ht;aG6a90* zi(9~8eGHC0W~c#1_ae?6ceK-sO|g1*P*F(V3BJByJ|*~g^@ve1lzHkJ^%JPY4~dQf z(LR`-BoEqeib3+sj!QMWMeJoXPex>lVDT^DP6T&F(|`%TVa}?>bmd4-Zb?Bf5>lUi zuxgh!JaT`RkaHi9`p7e*bB9GTvG$wr`GGLy?yLVV*vkLg^ydGI15zu{bf-V?iNYR< zw)g1&;0+5Z|C0{eCuR3(CKe>oW|rWeYNhR76Rx(=qFw^P(ctEUwnMw|Q z)RO@kFQpHV^Hh*tYr)t;0D||ahv#Fyg(RIb`>63}1dE_jH*!gl+T?HGDZQ$-uif8!&2np&G z0p&zrcnfI&s;UVU_P(N3e0b0DqvtYGzRL+^ z8wX4=p$6R#}N8LPX;B*L@g+C-4=1~2#>Vt;ozROVB?@Y zjKv6sdC>qO%j?Mhl0QspEsbO>wbq7~$IExx0bCp$o!jN3B~G-vp$4o?l*p9)0oJM2 zz~Uv?HHD~1kNd(DxuR=*j|DSeqR}wHMEz6D|8nJQNBFQOt9yt2t7b!0b%wDc`@@LM$fsu%c ztM6FZpCfm|-7EZ6vHqSi-KJSfD|sP56b2-$!6QqNZ0@+O1by*q0--slA&!F%(GGX0 zr``WbUy3#~Ih`W4#_@B4LSziK`RqHCB^AaejYntWXUCEIwN6*JLH%FrN29nr0V)jB4}y6{wnc$ndY7q zvb;;%L?%>7Lu$_xLmBW`sF@Aal^L$0Jyw$! zS(UPXY&E)AIoS|T?x;Q5P=VC*A-)Q&e%^6Z z#nmJVx2qa(O!n~cL?P%lPF+@-7+rV6wp*Rmikz;*Znl5xJ7Qz5O_I6mb3z*^#?1 z_?@%7EyvR@?8pz+G3Uq2YrOuC@1veus0-?xkv_H;(vtSf?9%0X`}EnZlm{;M@PB|~ z*dF!&xX|c7XZfGFrMKsWPo;cdbwS)UGB1o`-2C&x@SMw^IAX@0_fPMTgNwjkWD(ed z@AmqqK3tY%B{g9QmlXtw*Eb=YuNy!8iy09+5GSwl{CoBPpo{9i(+tPUM27d`1Poso zDLX&V;!Wq7$H8*882wdSh01$t2)vGNhLMARH*MO1OjwAUv%cMqNAJ&&%tOqt`}{%A`U zN>(KA9@AhoBn4w2tUSQJuOYukB+$A3TRy9EriwIyigRVO5EolZw^W&Rvt@&Np}WPq zzqBsxrFyep9G5Wxq_>Jn%eZ1>H3wnYFaV#mu?t%~LpB#&;D;N$lD|gDZEV-;E9Af- z@>Hytm|DKYdK}3;?YA9!%YVOi$S3%_lScy+pn_>Gve*umcB^9bH=Y={QRB30c}Bj4 zzm<`ug*tL)taxqjJY3|l#Op8{Xe_p78r=laQDCzPn5_T4d=gR=n5(h!b_xDFKF)(f z=%D5VB=2iFwX?ySSvSqIJ=H0Kj5h?SZemAK5&AfPLNLyEp-BuIR5?9hBEMz@@_Phb zLIpDipJ=f#ET>SfkZb*lWbF}rehcVSO1K}-BJdH2CDUh*h$9HTq!tp{y@5EctJ;lL zOYM0c7hsnWlM{l{95~0f23Fvr+yx__pabw1F4CTT23~P#X#WIq&O_K~tr3B%bX*UW zTAQQ39wDx{(qCsq+0FdIm@!lVPbt0#d1Gb~VA#R=cl~mxGWk{7vr2>O2A|&)_UZUp zi`=lz{-*9a_`3G34M>69^MR+~y4*QqDb}j4@~~F*;i7vQVwK3id`BSPQj=!2ec8ob zrxFEV383io6DL;M1a#~H6Frh%3F&~FS?9x$22l?N_j%}X{ zkSV*d$u^NKc`kC@MMGA)M|dcce{GFbSG)0Ac&ymbg1DnC*(yliBV2V}2eSIjF6$(a zlvH@@#W#G|?+Xr$`5%ZYl>3e9%|6m-#ge^>LAM;=mU{mghrP<@47vnHZpJ-Z*o|{V zh@bH?6L)Z$3UJbymQ`X!ot~^)snZo;U6J(kjGN|q07bU#kWxZbFaMz3c%)}m?i+`z z5tlb~uX}~w+s(d_XE(#Z|2@XbuE`i(@2ETzMyFAgu>qCK=J4Xi+2Q4nF<+(-uUC`3 z#T8><*tlln>Wr|&BR!IK2{BR4EcnVM3q|Y-{tfw6TLFi%R;oH;_Y1EIhkhK7yZEo7 zKyBRW+izl&0i_MQxKdKfgl`VEDGfZOe(^eXmHiVXuuo(&Ct+W2WC(VEUt@RLkG~S; zPcRlAQ5bx|(V8x1rP5(f6kBb)E0LP}MyH!8^_*|qV-BysjKeR}yuDF1xNW}VJjO<- z@YWC$V~fAwL4v}05TicLCgY`4x515Ex+|O3?Bhd0vOh_WY%Dg-g|L5-NTyinv%Eg1 zth~3!axXXoyW4s<`~H{O-aH)2_kSNIh2FNL?8X+6eV1Lz5|I{>-58n}QkKRpqOvC0 zg^0>N7#d><8QBdPW>DD~%bQ^)Ci>l@cc1Ta9KYxJKHtyr^q-@dx$pbBuj_TaUgzsP z&+GLs&@rk8h?+CVFso!4Obb7#zAAXcx^Rqbdco0XAJ1=1)3Ou(qP~m|8!@cOYAX1) z&OTP`<-JTkVB+2L54Ev7=}TbZdhS_ls;+#X;X0DDRiAG&MTeWhI1PQfKEtoz<+C`P zPF(FM;P{u&N%(dprDc94xxw-NsVd>cQzy6U<0@8*_8UP*L)P3Kdyim=#A^cAVu)U+ z{7~|vMFc6>k?yj@_m$xEf-9(gR4e~JrDS;4?nXL@BT`eq7>HdK(I3<{@;r&ODobVg z^>kUDB144PG@7W|9gVhg=L5w|#5IJsd8vp)Yc0~%jPbIz42=Fd^3p*Iv>YH zM7O0s20JEQ0T9C&i}+o&4Xapl7c8ZT2cfbmmd6N$6_)+B)1Mg}^iy`C`JcGr;M>v8 z0t`Ccu82<7@3vU(te}E^fp(a^>3K=lY5D+U0or2qOlku`98uVSxJ%t}pdM|GO?(r%s03jhLKhK=T zBmHc90W>EO^QY|?4)i%R{`~cCk+Ty&C~ibsF+9s|{F97mk}S`${L_PE?ALxLtGYpJ zH@)Lm-Jl^3zgv1k=odY|>Gd?ewdFbUFMZm3wR^KGOLxe!VXbp}!qg)13mz<0CP1&? z$nRen0Qyq*`kNP)?jZVJ*j*4FeuZvvlTBfKuUnRQp*3>zc!72J~l&Ibt#v9)tYvCa0!=nbs_sw^EK`p{^8Fm z?WcU|RAM_bKHv)U%zUe~6)o)o`_$CgpMCLszS+yqBi&$O7t_Z@dzKq(u?YwF7IfLW z-mEg6*69Y9T&9%1mGug}8eu)!)3iB`TE{+v_#ZmC|WY25aUBLF$r8zKyQ2@Yc;-s^tFQv3x%@BL6L2L2gBb~Wp@V6On66mXEWxCI|aU;TpU{C9Xmglvk?wUC1v!=*%pD@8@iSQ7_)g`dX-lg{UkD~OPqs6{QYV^0wKIU|;DG!2SRfal!ZXBvGx*=f) zqepXGDV9Ai;_}1ax|Rt)tJ&LDdr#!{M_2qp)~wZX{0-c5dkwo$>$WXV6e@mQpk|X% zops(+e@N2N$2vcLT?xLHMm7rvCRpLCax}AvlavhG%=V5O!H4>+#WX8LPq-%hGU~M# z-OlCPy6H++lh>>!{0uYYzQ!&qrEKyn*Bq%)q=$?@92JKYg4nPG#qH0rg})Bp;@L2P z23eM^#T}kaDTUZI0etZw$BcU)eb4aXi^|PLr*q?v_^A|6&srbj2N8!{S)* zq5<^#L6H^f(aq$YfO7?*F|K93&GK)>$D9f3A+nwA!=C3&Zr23Mn(|OXjGSv{5C)(S zp>d)LG5GZA?g(Z!{WQb;!~@xJqG7a>iK9&_h+rGKDhRyJLsTpd>f5q>)DxvJf4_Lsnq)8H-qQ@!Q7YYo67QWFq6nF;Z08A9M~bG!%jY26;a zcK_(LmhD+d*rnaT)uW?jgw%i*Z(+A_rEYN>pu+i*&$PAtKxT=&MB+5c5CvC$mgy}q zL9a7(*;0Cur)PbuINtSM8%-Xszu1jd0iZEP!P@2K*-i;hsNzBaNZ)LVtwX^zd0Z*%9_ z6dO*Qtfaaa>Z1C&L#)o-Ev@9i!lOX7ul2a2l!56z$g_eCFm1lp&_agkN69-^!omi6 z+%Oi!#F1II!3==Xn5Ux6s5ErT{?)b$cLvTgEYb5##y#C>yKiXI;1E3n8@v1Asz`;s z+t0UOj|b$cC6Q5xf@xdA@hneT*6=kbn$v0^RuWLGaClADaHxF!l^G+U!pzYX?*6ym zcax=0_<`4SlZkEvsS)&L zVZ+`~J(OZLC9pv5977YsT>2wk!ISxf2hd;t%UAXv-=x4B$-25$j;SvFO*r@rAbDV- z;ny6oQ>6+=JT3~{i&Rt!##i@RG-ZbMm3XOuldUV$61TQxb+N;=U-P2f?v2D<^$kvS z_J&C;>7~f3Gn1@m)N^hq1JFkvg02O_sS^BiUxZmZtBs_%{8ZC`C(Wk83^&05wB#|; z6z6y=!kVK5KCeGr-NF3p!|K?8#-nQC_Ja>|G)x^p@uFRgoG$#yffj-m!s^@^d)*W} zrgT>rVa*fw%@xp4N_$HT#WMIi?$*et0Oe$_r|Hfg@tbWUL?tHe|NjmYBy~YZ|C9$G zE8}-uD7CahnA2;cp=jBy{GhRigNK%=@#O$1-4BVI&$8X&D&VLV(0;Zc~fipKhmX5*>J}j$;I|tb(BPR!HVGaAE#Lq}VFnU?b z6NWnvYXW)`MGm_|Xe;i7vwiSaa2}UFu!n%8!@+}VH@Iii-nLpy0k_!O^uexoXnu*IG5!3Coj!tg$M&J zVJWvp%YU|;8H=zZdH77_kgqgE&nqhgbtq@$ElyYG*R_{Z$DHj4!a$I7E`p?_Fxcf! zXT(_j9$jHFD(`*FCzpeJgxC%am*#<=I13;4$g{yo`#pkn1oSENoO+Q6a}tip9PR>k zNooM$nZfPz&a?+rJ$%rU9(Sq3NnS0`z1HMcUaM-8@*Y#d-p9mS4~W_J)czdgNP5}Y zTDo%5BlQr)M7sr{9_8m_`~Cp2ZWD3)xXL=g3K{Ec5!OuP_w}j_ z7-IFBs&V%q4wsm}@J}ntL;#j!NylR1;is1CXq}1~($?MU=Um-9F1e+G*SN&JN#p2X z*2-wL$vbgrc_w}6S=+e6H9O&Kw*sFKc0d`L0tLX*bG^kLM%I@5H^bg$OwYkxBlZta zULaKmVl`hnHo?e_#16^o7OVZMDA#kkmv@R6bp>TXA7mEr zUh~YWPfY}|%x*d`y-Wz~vbAwKT%o7TFjpN2SVbVH@Qi=+TdR!tu&1@K?)R;-Z_V-a z)xs*HN+fpgCQ=VV_{51@+l5iUipo050-3f4U`hRFBihUGqM;qv%)HfI@>zK^Mo~6V zm+Xb+upz%D1*GG~b=()H^;nJJ1O|&TAK^aXKJlYmcV;Env28Jz8`azCT-}VL)C%Bm zxo#P#C^RSS=}&dbA-^$IqIxImj%I-nJk}m}x{PZr{T|R3vkTO@GYO35BsYua^ouio zQyt%{?9?f@D-RIM*}nK`ogIh!Ho7GC2ZrE#y5&!E&pd>dr10r+D5F?=Kc&6~ca zJhi6fgs%Z@-tNQRX914nFMQ%J)&7uQKoCcZir@D#4_p5mqPO~Vzx zc&ZisObfq(|E_QNqgwi}01o5hGOUNi=lv!Cu~xV(SxYKjz)z0`B~vT&PYnVpspjr) z9SPm#I(<(gLz$zqx@;`s0a_T?Jw><#;2*qUe{LyW@)gMeowLm-C0+iY1^aRZSNFS~ z?S|D3EeQ3xSNoT2BIof;juE+lKtZV$-ZuH{-RTY)4`%@vdWe{Xfs>H1QBT^I>Ye;h zmz0OFX+PP``{is+X>5qTrUK%7u|Fm81K6~yrmK35USdtmRwf{=0j9pr>O#4yk8A=twn!!Xxh)`6s_;u8oQJcWbe44`g>__>F;OfllWZbYF+JOHG5^nS^el>TqL<2Gf*~V6No!N*fafNyQH?kT-N+P z*<-pn%PLs3oH^5;*X}v5Cq1L>Oeb@6COsn(EnBCA6S1)PFe-{=%vlK2`PXI)SW8s^ z_A*0${rkU1La{(``{QT`DQP?A&%FZKF@|;P4MfGa+Pfqin#Jld|J+#S%82#xIj`Ty z%kNx(Rnud*Y5?6(Df^<(?ySlCNU{h$A0VL&oZUIpSbnj@|jttJlxT1^=A2_@MGTP z3Yx+vlMlE>p|w3+{vWQg=5@8O+oY)41&9i6l2NJm!Engr#TwGpQ~C-Ph%n`JyZy0E za<&X=AVwJ{yYdoI@S1epe`+PLC{O8(9#L!bH@b0e3L(PMlhTOxJADRL?h`hZAswFr zrvXCg;~nl!Z48iCgrJ;n^ugCh9&e7e`lXnRF>y{My+)L88tz{Ti07<*BF&Q`Kc+YO z{7c}RVa{s6OB%%CF?a}Zl#UDv?ERcNx~<{sa4*5{6k?@c>(-GTsgV9hwz}O_9rql% z5?)(|!04txX)l6W0{HGkgTxhm>`+shW8eg|mi`JB_eP@1hhRh1FzOaN+!A!YrtC0? zlU-^#PU(1GL%V&@E7{h@+0{$Fk zZ*TN_iY||7S?`hY%LFAG%~v<5*7<3P$~(Mxu&9inh)=E;_tF7G6lcn5>WMi8>9su) z;#~v7(dsax(!sLcYd0F2E6;}Iaoq>R=P!CvJ>5JK)$MBH;*u~e;a8uE8t~2>&0*(| zb(9A^gph7uO`1CmmRO#*#XSb=sM5FZDD?~n5F7mrr>@>LT=||iu~#bs`L+A(qN4$v zR|ZN7sFIG?^?iFQxeyeQ2&;`mW65Ye`<`v-GE0_~y4g~KgiCJiN}b=^TPyPCdXwIL za*CJ2IccMObdxRx6bb4s)NIG}Y181QZzVca-(1CjnqE?5GbQ{9ben<2MSp|7bT)qL z_K8yAKID~}xOdxDi>J3c>Jp?sU&sJc(=L_ks)kE{8h>&H~Bv5w~@%#l9lCg13Cr5l6!?`O+!}=&xkmHJjC+G^yd8S;P4%zYwdNM zPjy#QY;cc5w;~g=c&8$A8f1|Uj-H?z@;4xN(Vf*9vTo3g<4$|pa@(7?=Xp2)z)!x` zBl;yi$5}%2=S*%pa<6>uiN81Z7=aa$C-T!HtCr%^jxUoqiKWFdD8{Q*#b3aD3_Ifo zX+k_P6I-xM5CdPtbCApl7OtzYi6*+&xL1Znn%Ruc-Kq{%5^M;Hv>HRfFZko7Ia}!pZjOk*YN{ogaqwjk0aEuHMktTHZur z{(&>cT_{?vvkKz(L#Vz&E%ojpP-$maD-;pxX|2xGAG=2##hksJwsHIRH zu*`IRYvo~D5s84teab#Q<(#-4Z`@GyR+d_A;_#f_VB&4ZBcy4_nJZ%t-Rm9O8dr#V zRe4J&z!-5@Fcd>r2%O7}PL>Tw(_Pz-3n%UYb zui7l%K3R#;X36C-^BrXBK4(6Vd_q9Q)LB7GCs2ssmsVF3zVskBz=t`@lSVmss%z1` z7R@9loI@cEC-{F4$ zS(!@G{iz*}JFML||7@l-x>{WmDOMnN%rUrbc8@9`uWK8$?%q+KPu0A@`X_l}0Z$7k zG&pWdr4yT{SZmiRN;3nT1DZ9wM3YYZX+U)S%%Kbp1Xyw5v{stJmG7Bp-P?bl(E3$d z;76lsrzjitq}ZR0nMQEPdsF!!_2|f}@cTZBynj)dxqwe_M^R8KL6~XAnxM@A7DWJy zXuP@m2w>y_sW70jn#`e){q!?Ql^P4mG+w&rbm3g+2`smg45>2lOy6cexQ;u2XJ5$8 zKe!+5dWh5b$Y61tgpMb)Y09jo5K(@aMI4vwoaT6m*$uP^t-lO-^_*V#iWcT2g^vY9kHkJ$ypj=K-ZV{}QdpQOmAjB*$6`^T zo{#qz9~jW`N>ML!=qz-4u8vl0ANzYHI7)3qOWz>3lW-skNM2HHGb^n&7>YCe+QO$F z4)E6{A7-kT0dl=nGErXl-G{j$0m^<(R*=%D7;MP(_9t6$he2EMfrWnM_^|{pf1x8i zSlB4^s%0PA91Y`&d3d5%fMq0Bh>Fz71A$-9E`09xOgv9}J>9RBDGSY;uI|%T!Icr? z_m-iUo#~Cn=_VL1tZ5##5$Hg9ma-t*-WRc*ee1$^aRX?*8ZZ5p)a90txWNHKchGap29tkGI@_4*n~ZiBL)E z!W<(xO~&bv*tyF3wGDV#-?2Bu-tx$=?GwX#eEP(y&|a*!Pk*F9P%yqQ{h_olWO-{y z{b|P-|Bfy1mig|reB&OIiQu2Vm&JvWUSKX$i~v9Q59|HGQ*5b88mmo}wGH!FKspFo zk7;z74#SJpadOYfJld>V5Q;tJhc7--{4%urh361PZG#SSc^BoQM6la5z$_yqsxFmc zGDVUzgCe&iK-eX}YQNfl<+%W}X5SH5;uL|({ovl61(dpo3Xj8Vv;!fCG?a4iG%;Sd& z#g{;H73corn_?nej=Z7#4zeU<-#&uxLghb;o;zyY8YkiTc}Yt6cS=nwS`o}`wJs$> z_ELl0BmdERgfp4DccO`4Z}5L=NM33SPMF4DI!?Ri=KF3nXl8i0n@&)8C zJV zBv2>NR_;x(sK+!zKFb`m)t9N(nK9FuH@F|26GU)|=|?n^*#AUI2Y?6W$4mO?k|I+K z-DprqA50S+M0Z>i2VrXo%qHkgdhMdBVW_C~^`yNsmH>GM%^;Mde6_?FV-9Fn^;TYh zM-@Z_F#;3~`57KqN&cU!SN4ZwmjGS2(;i>rk1{0J?T?f(YB2WQ=|dCmDIp(a+Of?5 z$QxiHI`>j8z?081?^g6)=M6xadL*gd6$de+7VD%%&6bn<#p6e9Xt6FuxoW9b{p?=XW!m1}eZb=4BOye#PNpjoP$AhBtcn#?^x``4EInz`yWV{G za)!B=Kkvk;lMOHmN9@2fyzm6#ZQnj1`|4;*1M6FTYzz_SS7}so^Wg1L^_c#2w5w0M zrzZ9O^Rcd{yY*ds<6CMdhkn4r5|se3bq|V!lt?}p&sU%M%@6PG5(I#(J%*$G^eK$G zCZ;0~zwlN*S1{{ib;h6xSwV>vMma>;BHcv4xx6DjRh3ONx2UxG1@#Pd~*t01S_SP({hoyQ1{c3iT~S zEEj7br?P^IGsu^zwRnwW*=zQ+#dV=ak>WM&+6A#`HdXxF)Sl7HJxaam!gGM6ErZ=u z?9yU~#PczZ#^u;b&l0BFnkR6v&HIF%Y1oHpLcb!z*WhP% zz|j#QwcImq@ZZGhYJlIHNdXiYUd>(~4xnEF7QMC9F8*VEq}LIg@kX)6Uvik@K5hKa zerDsC_1B%$DD#1^91$QTB>9y>pBQD|TQlw%y1noBMGoMh;5P`BnbS6?nn zl8t^9exwLdQwK|?e!ynMDiRNm*}8iR6oO$TD>tgRLR0*(e~b(#zQ9@(kaH2n=_!0>Ee<;hf& z`wLgCTAudI*!KM)o@Xbp~#kJa&Tz{Vk|0v`9#1aHfC zdkpObmWR5u`>}$3M*u7h6@$^EyGol3Y7juV0rZ93-24rsdZZj=B(gH$`aj&JUB_$s z$|6QttCCiQMjdeiODv@Ik*=O0#DZg-E1OPI4aaBJCbb`k$50;8gx{WrKGrnx%WbLt z$8dcj3ZSJ<{41Lj$O(eA%$t`7!2V@_wz#82RB0V4Pk1FejJ7gXQQFvuTWBVE5F{`M4E8I@ z$$$wYnA{vut(y=Hr_dBHfHuKSo=fHXKQ|c%*xW#XZiWl5LveK7@M%(_2EirXpBbmJ zdy< z8*3TF>2lnZ$nwLE7NS;&y}T~oZ~43BlV~{Yg})Z#`t1*M1j^W#2*-HQk&ezDf50El z^>OL4-9uj;*0P^&WrE^~#XPeznC`OK`ZM|#p|YUwsIYMyG{D|p7vSy*PJ!lXcf=KX z+FCLLo^s8~V@Sn71_qpeCFJp}synV@u4~Jcl{SH$LU4T9l>Jz**6I8EMF4GlGj@Lm z>7{4?p#N-H<<4DAQc_)wvPiQm<9_^`LfU%18wGe1(aJ&YH_^+d#aX`ReRB){6l$KE z7?;xUmOV`rD@ow@S}h7aZya1FI>tWtGLUe;&Mjbxj7PwJEnHE=Da}snt{RURE&1B{ z+@0PeFqow_;t5H_aEtbgo31lqD(&3u94exM7x;@Wz52W9*mLFIUW+Ln25*4fS)^Af zp^SG)mXxGe@mi}c#TlPeA!klu!Qj#MPo)8~uez(R)HhHOVrdd!#f=4__6Vjrc-;4- zH(bCY(_9l?m44ShT0s%I6*3ao2i$mk_?$-g%&w!e zEVE}YAJOYPedy$wD)CVXkFWe*GSHB6q1*8Jam`g?O)cbWT||RKXa-%Eqr&dzlY92* zW^y@)1NQ9MT}FV46vtVwGRw@>krXCvo*;|dv)wZ6_Uu@-Kr%yNf=O@mc%f73qos+p zJ}g^HnycoyawesK$MC9k<+kwJFs!p>K)+#6bu~zJfEj!hNP+*ve?@&jtJ0|aNHp5@ z^sxu;XROmZA4~8S{mnwE#9lz^2vk8v7++M(45ycC#vF^*(=tXE*M|+wFKO;p(;s`` z)9#(ev*7qx4)w?UNZ@cyj^gD0xx|9;@5nIxk2k3XO;|B{;psnKsUL<}Gg(MU^%D>4 zo%+hH)0lD0l`jzq;A!xo)a}%zc_??^V|d)>m585P5X)!Jj^mi8?VZ#A!)gZzVV~_z zPH*OwNMC~d1^n;$^*_F}G$x~>$9LToMNeU>D?CQcXY|&&2)S?BZS_%JM_vDAQ=2J3 zVt2K<8NMa#Y*GC7@5*4{v<7?%vG`v+M_?mR*vxVU70VM*Ul&ULX<=mQlPtSq{uJ!A z&G7&84iDj9&^=%NVW12+N~mUmKRMlT|9h&Jo}C|U^97VKZ^URxR2Dl8nYHNnf5K2` zNv<@&zdYBg+7~iAk0dq|?l(8&xFVZ(PSviLRZ=|UI-lRI1)BLkJ~>}lc>YEB*4gl{ zImTJ;>fV4kh<>;!_hD@%x!1P4>OfKTt0-zAo@K}=X29uFwy4duQOV{;g4ncOYw1h_ zIUSL+$9x7F&Afn8Be34{i^EuS%W_Swhrac}l|Jo(S|8%;NTpAjUL}wf4_EG5iz^eY z0(BZ>4V?-v6?Nk~t-0dcCb+W4s-`kj{@1GzwiL0&oC3}T0mNWo*G%_GU#m|@5=U7&O7nNa@x~-I)!@iEtRmG zfH3&%)zdUED{GDo6_kz|Fgs}xviJGJM;ED8aSK|GdDKS{e{{w}<(&Y#PcQ_8yh*oT zHyfL?SLZWLMkg|C;hC_nbI-yuOV|d!!g6GC<1+0G@_TuG>NGqgS9dSj)dY7*s2jhP zQTM6QD`1miz!ft>IeiF;)o3DU6Xjgvb*WOcxSwGYCHz){xFN5;&JExsMG?4t?N^dZ zrMhvN>7?E)Ot?!Z^vU#lC?efeh_zHhVE)#fIm_L^Og0 zfK(jR-Os;c#y?usTN^;ABSi|Su;Ha=WjNHJtudc#EM=CqQLXB*2|sC)!SEvc+DHLt zO0w=_?1avpCcOgBD*IxN%}e*O_SM$5!@5bfC30D_ye#rmgsePPkvJh_efEovZHuI z%BUy(zJxr>C=|nFdZ6Q-{aObV)&}CSmek!l>18ymdE>C-b}u^XR7FSc!qi6Wtjxkx z9BqV*-}?^HMkw(zFhY~xj^+VphzK#Ah*PHT8RFnRKen?>UPjEj@`f-^s-vv9!$=Ka zNDYTr+Pe{=R;9K)O4m-LHP_iu-5{J=aDjJ=*;HW-xn|h7jtS_x*uW&>gfGMNjmcq< z2j!bX^S6f>rA>Oi0Jz(mF9mBgEm&xC4DO^;$ z#p@J913S|yLL#sr{P<(c2(s7o@GPGI=HT)kqB^X0(Gq{WCq3g!ptOK}q`#IN9@dLn zrpI=F7~X|V+>uGzf!B5J6=B2!lkO$l)0OA06ZOjNNe~?h`&`CSprdPyZ9yz4^jd-{|WkGkxc)yX)iDN?hZPU8hMmt&@#@WbucOvJ?Dr2$l zOt7$vvyXdC4u4N-j_0aJg>N6-?we47IK(rb@&?0cHYW-$=_c!b^=I=cj9ads^xbG( zPbr>xmYSBX_A|-N;j8C`gDkq5K|4PPEp(k`Xo)HqGj6sRL+96>a}4Y8GG4PzNfLUN zyt6BRU1MtnvAv7fzc_I%7Nj2;3LL#wm53WhL|Q69KC9c-Tv&1tT2tPYg-szdx>)QqQ3rI z*5utpxAF+F!nvwBS1)JmJ*kHEkrBJ1G_nkv60v#Z zLWl)VNeZ$o>37kO>xo+~Mk59c$9A79gTsb)3Y$@mO2w?pIcuer9Y{>NFUifh>!Tay z*pi=-V9$%KfZWLHa?;~_1e?#kn0_(?oRhLGX`Nm*OLpKKDjzj!GB6P{NlwyBt%z z&dKQc3cd&W;O}G`zgs-Z{O|DYcLhtx$?xiYH{)CK? zLF4xE0>@Ngs+6{*ZaP0fBT{RKu_@Uf(lsTvLqxbOk={I4$0HYZ%DnA&KGe-mw1_+5 zZ;fV@BVR&!R;nT90^o7KUVe-$0^2)2_wuGH`|q_AcD-3Tkwcsmj(xD-5o>OxT}cTC zKxkOgIzbK>)-a30bO4*o#Z}|?!bcm=FAJRWG3^%LBo`L?wsp&JSkY^!q|y7|{)hzJ z^`77Q%F0dm|8Omm8TO{++z`jK+N%l_1Rvh&Q{z8#V4(UFK0J!4t+o#mE0Cw!=` zL@u{k_oq8-uGb`y!MQzYrG~%Uz2|e6TFfTs!ak$qMZ%IIV_3Rn!lXxR=y#r}qBhde znvspR&ItVDZRG{iBI>jI{vbXR`b})0z^&NvM)UJEdUp_A^lL94&_7FB1lU2>>?C*N z#(xa4b)iXtKt&a>cr7CI1`D8h-`J0a;o!5gkKhUi_U%_p^%d!SwDw}32=HPJ8~K)V z;+uzEoEJZ}%pD^emyaAFfI>)hu&lE~AgF-5?|NW)%ZN5~psH}Pkl7kKk3wxAkq+g5u z3#AK(TBqwqaBF*{tn=)>PPWc3uBF@%!R4o0#;HR-6?$*?i^1JyD+ooiz1xl{n{~jB z=e0ExsheEmH@s$Kw}<-JVp)bU>%oe&7GIiz48bodGuCLD4&e$+lbQBP2-f~Ozx$7$ z^*g($g>YZM(A}eXozV;XC}-4L2uxAmio<*6TN-euhzt z2pKm+h&v@~cc*i4l*09U#AHtHnP!?!Fat<^Mcq?r_t^doM_`(PG{U#SNLkTe;>rKKuPB!p~|usbZtOl*4A1d;8&7N|Rd19{m-q zjvRM|HX7@j>z8b>BD%lv@)DqL`c9ThX=Bi4a)J6iVQ;1PCQg4cz&t|!e1@t#j5Fzn zqS3~PxHAZFJaNRXB$pNODzn#nswIg6$$iydhwBA04W!Wyqldt};uk7hR8U-S6VL^9XT$;cNwbII-v$P7PR_H*P{(Y(}K|$XE)NHW>U`fx(bENcBGqI-Syf1 z+Uv6h9HYHAvho;6QaZ(jfMa$*iU`1~%`H;x3D0%*7w_5X0iK8BVy()TCnFyGR8w(D z2LtUltfS)a6D9r1NwC({8hJ`dH`8%?h`BcKNGb0Rr{KjtD%f{y^Vlel%=-F%6X5mG z`>~oRp`vMgI4;i>I5I8eV2>(}*GrymyJ-Ha{5X%>Zi>xfd=_-HLZ6ixD5I@gG9S#< z&Wq}eAJkwqcE^&+j(G1l7`WmrOi7p9P|sm374vY+8TG7OkdzYj-& zh%M|_K^pe%ev#9+4-ATE0yLPjPNQhri{QahL*Z@R>1wnA!mE0TS3RBY6)(GTEqv7| zW`Ij&Bir^MCvtC9^9mxAwopKaOk&^%3pHjHZaKnyr|O+ys5cRl0YL{}^JIQclIIG^ zetp`JQR#}>vw}HM-2QrzVefDQ*UWRSw)*58+=~o$2bz}3fJ;PEnuG-&joE`yfkTL5 zey==9w`pP7xPaA6>sHFrE3ekcdqLsNv%wok+T?v$%(5KTq666T)4?yQD`3rY`&ps| z;*I!D`po)+U{7Emwk@w(c9-gaJ+oXcww00j!^r}ingX!Lc`yB>8^OMK^Y@C$9mKXhM4l;=PB~Vl>fFm1voS&u?pt@b=7j& zIqy$=*wzU!OHJd(iVM@$b9eFKXknd`4%-x2YP8hvPe+CJ-v6_d@&C1F_rLmr@^R8M z;50-Ir{2EcL~C87nEj5ZecBcegI}S}n9&rf3Ws-l=J0M$E;R2{p6>gxVpZn6JYHKC563mX@|uTCbJ~R1G$9ne2^uH?l{z~-JEY&b z`$QV23{k6Ft>DYAap6yv!prf@VcbLN1PW9X3?qn)2jZ2mvv)}5jmIK7Y7oH8dUbep zw}pN0J3t2#kPEoufb#|C)d4H|?3S}l1Rtzxzz9Jod)d}}e_Y{bg4~G1-lY<^v+x`l0w`2hmy47sWCw@!ACWb#R~UXKe5Jl+8L46qLiNdB_=X-v3(!w#u%JWbsC7u zRd~v9&Bptugr$H9aA>K4ot7n*<*iZAOPxnF4bvId6I%chIfhH9Ac$?I-ZD?l$%L9x z_O%L{k@-r+t#r%t4s;<2frY{-7|Iu=0L;|i+cNNOLq}LS0(G_t8w4NXM;pbp@vp$i zjUBFd+#{$nbwXgzS-o9pOT-r>bv@@kOr$du>Y`pQ$|>%_#?ga?wyGdOqbv4(xo^`K$P@S-gY}Gun*DE z2xbIH0uW>ldB<5}s>?S=loejSJX`>iGK#e0>^Qbsqb5VQ>1JD9)l0>HYy?akyJS4@ zh=KToRy_`~AT(uQOd$YIdV;*%m}rvQl2l!lD2H9qTOuF76L(;55N=;mX-|>1X$3OR zfE@3yoTa_EXL;iGPONja;3}%?FEVFrpxFe9{i!(M*-9%^)1PKhW((nQz>x99P7NS^ zlM<-u8rt@HeK|q-COM#ZUgpB?KElJutxsr%IZo0^l}k5`a-4K+czL#kH?uV zlPjnK9llxKJwax`?ch$sx;Q>M&|G*s(^L=`yhB9Bq8+W_q|r{rZ%T|7LNOWFZuNUp zhw9>8rk^vxYfnUjC16NKbBj2}O?)@BZh0>|#jjnnr$x;}(MK6MJ}7WD43r{I6m%`? z2d{>H&lO38U7!ANPAeH%ZrePY9VApm1WbaF<1O~ZgGz<4bo5q=9(P>eir(uyEuocE zzYDh=tCDB~1+-pnaPKR&$|v5MMhgc{ZMDW#MRpnq*RCTjcJWhy_613&<-Z!RzR()Hhp!rg8WQe?jE^bvkmu2f!(0N3UD^ z7Bdd&mlP0EzS-GQ$s-bx4#%|YYa50`lk3>*r}Ps?-w~d_M6w3T9@`c#bBF=l$~1g) jRpEZXYKYLJ{GvY{PgbtZo{gsi{+V5}yjXd`<F~we;^BGxtI5?XkcUq5Y`s5Dk8rjVC=AD~7>BKx<5^$# zO|*^Pi~Zf_s6m>Lbt~}68h#}v*7&G-%vtN-UP?YYel7R+^ASho4##y?mu_hZ ztbQQ);2kK7_$N^v3oC7f=?$5+v+4SS()uknOP^DEYeR-St7MJOB7){n|)%n z8A%^A_pTLj_NmX2lJZ*?PwP^ZR+YEZJSzN#S`oT-Lm^;|g(gIZINwEwi=^%dCffz$ zXb^BGpTh}H_u1y$zkf_4L*(LIu0Xboq;JXEq8KXt!jG0@+u%rgmwD*-{(LQDSjc~}q5gl}@huPnsr(TaOE|+4v0rh*&Sg;$>CV0>iQc$!)yF-zd-2p`**$IBAwh8pZ7PRva{0NIK!JgX)evF^+Pz`Vvy!B0k#-FOi8D33IXI zl60|f8Rr5fb9`o7@D3H-3>Ta#RI!bCCA?j)XhRU|a`r}Q3&?gny&A~+%+>t)T!mMgNi`~k$P8?=0OXAPr*Kg~t z=+H?$ffFVSwV+G&Ob*>mK6%mFj&=7%D;ha&6OX4fLN19h>!!{bE{ zQ6!eBz-pF=4`VJqz47AOb^-yvWUEfvT2GH#MoEW*$(5K()3V9RDicR$g$ZYxBFlqT z>|~zLmMuiDz9o}u*JT&Sx&2zjg)>BoesXDd23PML~5I=hNY>VGT) z5m{(IdA}k@0%z%(E2%dDa*|pu)6RXX2s_VwFeRyXH$?_YqYn{A#;7&pj1R{L+`4CP zpGxj4S}zOZ_p0=luP*Mu2jO~zbI61ELWYcuYIpKToI>DKWaoy%rCffBX8}&tc&5x=O!b=40_Y9P;W%EGGx};F0WAw&>0BS zAb`Cbi(d73BG{fcoVI7@KFH4S$!1=}bzhj?L#mVI2$_m!W0=P9(E6RERpqo}sZn|#Bq(*BG5^CUEUN@_p} zCnbrjjoq>!;}c9}R3I?^9b4~d%g+zJUk-b{;<#xpYV4AAIuaC@oQkO!@r!;L6!x{9 zQdHj$oZtmr+bx9bNw< ztu_-ZoNn8|3s@n?I?3}b-+^o9qMg(2OXCY0nGScGqBy~S9Ml5&VFYkcWB&UO$9E^` zn@w0{q!(TyKD1B0$Z`T9%d@mWj-olbiTfePBe4w>ET(Mg>K}h35~Nw9p5^*^i-lh^ zrMa#r+Xq6i%5Yq$S!1P$G!}&oHmX6U^G%&7J)H{6a<-TlR%gNX__$vZ$Zx!x53Z<@;$n1m#>izLXp-|n)O4a9|lQB^i?5SagMbsrCWNJo)au~{HlLp zj0lKu9_rb`W^b!?O1-cUpd5%e;t6Kdz;stj*GIJoTcwciH8H!(vRFJw-n&Ot{koF~ z<=b)93th+c&zNzhsJ>v%zEujfjX-8@zuR%;R_fM~rt)%Wb5Fv(>*7iS$3Hx|pw6kd zT$pY-ub^P~yPR_yC3A~EK89e(N>3(qAJ#o~VRgax#Lmhc<9qnYch&qVY6cmt#Y5>| z#Y>J{O$=lXK5pJ+Xb++pbcT7MAeaz~W)V-b0!2jO<_wk9n5@b@(XkmS} zOsh8hueGpIzxtZM@t$6-yju>giAiZoxR)CHf5bS&X(yB+1A+Gz->6t_2Cj`QObaqe?UDmC|-XB%A3^XrfBXr`R}(JI|IPJs<7ESV=L^ge1P2fS2nQ5JHGCR zfH0Pa=Oz?$3qu{yRnn$)Cc8ZQ@}f%)y^SaI#2?)G`OP#$8N&GfJDx&R*7r7DyT3(U z|JJwj6VFB*@YBs_ObMn1QOA<@M@w;NNJ~+L_-0}#43GBQn%+|WkVFBG zt#tcO*cew!NKTnHF+uwyxv@UaU!MI<*`VjcP)1;B!3`IVc4+y`a5DD*;>QKvYQn4A38ZeF<%9r1cZG08JIZElNKGD%j zo_dXr(+(ua<1_30)HJxc2hXFrNKfTgb?i;Q3wbCNNHAdmKR7LwKYJkHgL!BLR2ZbB z4D+@u?`0gNAGOTNs!MX0a?c60i!^=lWhiC@dkPEkd)EJbpi=N;kzG6-?5XE{W)FAV zf1NRq@Vb=usxEjYK1?rQup(-P*s_usiKVk`{4P~33~vXMyu<1pP0hJ+ft31qRk&k# zK|%@ozL%&1KG3Y`>gC8Hr#$&pzL#Hyp2$bu!RRL)y(DfinRyQ$0Z%|N%OE=n_2y8( zLGpcu_}{^b%j017hy;}C2;Qli zdB#BgLZztvQHSirFXdADf(8a=TlT6j7q}y*sv<<%Nd3Wf$t6|2MFF% z{g6am8!3{K0W@q8n$5K9v+|fc-}?20i#HkXdjCUA#3K56qc$wA1Ix6#uM@xe$Ce$T z-BZOSt3Boy?qrbc`0Qho;^iNm8Mfa(D(g%K={y+KTTH=SPp8b+I#7Bg+C3)I^__bc z3m72V@)&!+l1tqRtk^8s4tW+32pcM}aBdHNi}qrrhOI)PI}l3N*9@zxLd*r?bu>kN zrl-D7eupN-K#TWtXT#_NXLmU36MO!ztqExhPWJI$OY=biPa|`3jRO!lw~Sex(KXdR z*O%I2w)UBteO$>vf?`tj(LmZYvRzpX{{=qb7Ux!VF1!EPsf5%UL^2;Nt~ErvD{4tm zVJ7vi!@yHF?lh0ELrRd2h^$Yn0LmF%UESD*3m%w53-k3kMp5~*Wk9%7)3DMj0>U4E z7c!7_Jw5ST1vtT?rYkOtO!f3bf-j$Nt$M6>68hW-wK1ga(vvh7M~i@ijb(TA;zdq; zc4BbBtq80NG$FpXG$s9b>Ec1Ck_%>8VNGr^2YdcDwuvIGu&05;svA{!{>sr8r{Mez z7Z-as*rTX6p7n5@-tXp|6??#?OZftz8In|bK!a)A%{F#5ROA>=utp?;FR>rY+s#D9fkMw@;%Fr@t`U zs4PqLjwW_Oddv?5P`YqE%3bE;8cF~zz{B(IcMI)DMUXRkI?{v$QyA`$sHlg*Z8P~z zt&p?m`Oo`44r|#+;2`w`m@_RgG*6z%_tK1YOVvzN^W2oF_~o2w2Ho_U^%uh?-;nX@=@h#tZ}Af?Iy_wnY7#cJ=W^8RWy|^unlsis@7Tp=Y*gn zYv1D8akS^2!c3+kO-19J3=0%2J4xHrOzgn3Q<8--z?dYnty}Up*yU?KL4eRt8o9H(%V`#ZiKa{+o^_>5=pmR-slWH^oO%c{^tLJy3FM~b58ti?N3pH4s`Doz;9$W7%lO~$P z{gCQG{@)J@9!#v}M|A}YiLfZa}%pTz~s1xZDsv)f~xR9LPI5Z>R?s4d*<#8|7y1LDH0^HYGJ83&0(y~ zjxOEu+>!IM&xOxdjY=SC`P0?eiGm=mRDem&y2wHWVhdbjo0Uh>*r+1bmu`60Ne)0x-4s~nQzWktxP=%+f22Rb^ zCh(gZ{=YUW_Vw*v?cTHxE_;w!6J&tAbSy0qJE`bHE4Gt8DKcj_zS{w|yIna03GnyP z4Ik3{R>S0juo$k4hV1>$?&K5y+HJ#cp!&*uY{EC#XHriDC0+&Oz`OS>c}ELPL?S)c zfLys$s!AopvKzm1&t44dYSXglkIbU{|4n26e^nju7>rPx9WBOa@gF!S2&c{ub%*Ia z7<3LCr;b{vbC?0@9DnbUUf$6AEf$O4Qnq`WS2#_6;qg7fn})@LpdAYp30#|=xw7<- za8jHer!Q_BW%UyM<#SF;U|H`7@1E+(vGm!`x6p@o1F|Lf#UObN(0--pp6r_Ne}X(S8gGY?v0dWT;p z%{hhZRWCbb9dD=iOyo`6d$tp5K9YZL<#^>zFL;V+AUIXfa2WfqE^=`D#XjWx$lM*> zMSCE$b}VR6_daB@bZ4^j}k~1OEdXp0qTJ; z*o3u44gCE2_i^keYJE2%6WHZH^5J1fG=BN^&|| zAM_z&5zD|=?01m;;gbA+iKO!?1|wE7%Z?HUIh_sKnC6eMe=-gyUsM>a@cb3!{N3TE zlk3He+|-IE3Or7c*=gN(0MP4GhPKxIj<#MYz|orQgasv{LRj2;ug%0JhRe~tgZ068 zoM6?at;Qjm;ax$d(=twN)5N;gK2qsTxuj}-a;{>^#ML;bxba(>auTDu@~T|1-m7|V z#sBJ3i+F?kv!>dxl;|-L3FoiD)%5e|*+%qXai%G1O9Qlq!mE6rZ0?d{{UYcsj5TpF zP7oEtC+Wpx6)Rc{ehnQDS40@~<}a+b4P|gNr2UM*yf)CGX0pqC&ez4?fN4rpgs{I{ zkO5~B)kRL4ce5I=?`5dyW(W{344Y98JSsH8o}4n4mzG89=x#Uv^*TRr;>@V>A0#Vc zUPwp8^Hgu~sEF(|e2bJ#4f7`bP`FtAAUdbKx|0@;IA4nkc?3@DQEbDz^2*`8OO#q{(hqZ$qUP>D|YSx_O`{)n>BICcsgh2AT|5?TLFJVE3no^DnFG@BN!?SwTtYRgU<)(c8_3_Y19lz_}d2tX8xst9yFO z(CbF!ZA|M~B0X6MR19QJ_xFP(r@u6+KNuxs^Z+PC=JCR$d&CGv>(|F(QL6U$j?U>2 z8^Igwl>sV3*sBP2-d1F)C2c2Vp#PaId@-q%_sIn&2uVd~d*9&|fGB4;JtO7)nfXfl zgC(tJ73ng>Yonx)h9`!P%-21?!zpi;=u6=`w;9Xr5ck|IUh-ZZfu2*e6`*wzJ-Vu*_bDcX2# z+xt0CeDPjc^Cva$iKS@zi-m>RIh{zo1bO`Wy{88@bBwNuE1+vDN-@J!kqIpgVjW*C z`q{(q00uC*)!~EWBhr?f#``Z7=2t)JK=WQno4+s$cOF{lD6aV9%FW8Fh#Og9nv`73 zVXwrEl`mV@zqv=6i*dUclM9`^iCG5X=+)VdcVJ(U1p9>9)Kw5BO6c71o30v4aQ76n;IV%KCZ@561sicGa91n7-(# z>o{QocZl?arRF`^+)tw?sX?;Er6lLRe{lJn^tPBgHsPO@9_RYsPYcDT#ptAWRy!I{__Lh21;EUpT81vaG!%52b883CS zu!sNp)uhs41#M}oDfui-A#ICya6yM--lsq=@YF(f{pMn^sYe`Nh21cuL7^*)8Wdrt zai#)s0w&khzZeILc_&{qf-HSuCrcJMHXNnnqK!Jtjmd#ihbCOE4gBkYFOV~y_C70P zQhq-76=pH@7}dJzv%zYmj*_c;yAcep@^{XN0kLUC$HBEVpUIoF|{|=9Qi; zL=)rhqcH&D;0`|2@aDYa;etN!{^Qi(5(LFUFs)wAquVN4I^>cZp~!YBnY8^NTv|6= z&j-yl@|Fk5S4C^HVJkc;j;BNj3@SGPBIS%kdTt@UJqVu&P}gm|AslDA(NQ&!`s{kIEcZN~CXW=(3czP-Q}y-q8*>$5Qg}e5?4H~bLUhf_7Gy$nRVnq+*lwqwaD+niib<>!Z#FppVJ#5G?-HXD?6XK-&HoY zT7k6#ro5ZU0Fqfq37hf-FMVvel109QEObViWL5q8-PWZ!MqnEN;e6)my=(F}47Kze z8$yap;dR-(di#@1Snp#7c=jgf>KTb%UcxQCkLC^XT`e+H+{rWh_BJYWF`umTH(uMR zBIoeWvGT5U01!#I*;P#-tUrp-MSPB=|H`-*qu`Uw)Np*bf_Gh8!EDJ(lVoqNE=8Se z8o_%1GnNtr;gLyb1sSnt zNn)Sc&3A!yC_>8LR<8B38m-E)DnU2q>qD?-W#9+}s0Ws}Wq8`if!S`=COUQQu=DzT zl8P~EWvL3$W|k>?Ik*ho^5jP-H4_1xPR_vh>N#ilM54tU)QC6MY`POy)e9*)A}Flm~+0Hd`&;|Q%$q;g(}6yOOS{In%k}u z;2s#d!3FdcaTpb>k){{Z7~=wZ4*e{kd+y$Wn;5Phyx|LS!ECi$sBRk9jD=eSxnp=M zAWmt_x(~dAxce*sr7OV_N9Lx%zrd#g!5%-whW5cwInqi;-!?k0^}J=ft7V`lXbI*m zBD${nimw8Tbk6yY&CRm(iO+KUgAt3x10Vo1V>$2tIjQ`(717{AL-rTKD2HuRyo8n^ zOw)(e9i|WW^(8{p@c#D~M;fms1f5J10wJ{u=UNoMD$TK&RbO>$;%Z} z9sWr=n98X*qVy=N$Ev(JC2xJaD>I{Zc3elD6}CK%-csvZsqqP~5!wm9XC6C^83Z&c z?m;9f;PgUWH8WCV^u9bRV*7QEZ)~KDHa1Ql5<8ueZwMQ1{j{FdGB@QuN0ayy>OrzX zb+Bn$SHw=PBzWa1CBGK>Z2GJ)=srE4$s`%&lb%S+wj?KNzkloXQ?P(exmuapd

t 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Ð7YVO#E=-+RX)u28-x4%_HZy-*SAR@_JSvDXf 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 A9RL6T diff --git a/docs/doxygen-user/images/updatedServiceInstall.PNG b/docs/doxygen-user/images/updatedServiceInstall.PNG deleted file mode 100755 index 541b89216e3385971bfb9352955a19fc3827b035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10907 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 diff --git a/docs/doxygen-user/installSolr.dox b/docs/doxygen-user/installSolr.dox index 20f2953a93..cdae77c631 100755 --- a/docs/doxygen-user/installSolr.dox +++ b/docs/doxygen-user/installSolr.dox @@ -7,7 +7,7 @@ A central Solr server is needed to store keyword indexes. Zookeeper is used to m You will need: - 64-bit version of the Java Runtime Environment (JRE) from http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html. -- Download the latest Solr 6 installation package from https://bitnami.com/stack/solr/installer#windows. For the purposes of this guide that was the Bitnami Solr 6.2.1-2. +- Download the Apache Solr 4.10.3-0 installation package from https://sourceforge.net/projects/autopsy/files/CollaborativeServices/Solr or Direct Download Link - Access to an installed version of Autopsy so that you can copy files from it. - A network-accessible machine to install Solr upon. Note that the Solr process will need to write data out to the main shared storage drive, and needs adequate permissions to write to this location, which may be across a network. @@ -39,7 +39,7 @@ If you need the JRE, install it with the default settings. The following steps will configure Solr to run using an account that will have access to the network storage. -1. Run the Bitnami installer, "bitnami-solr-6.2.1-2-windows-installer.exe" +1. Run the Bitnami installer, "bitnami-solr-4.10.3-0-windows-installer.exe" 2. If Windows prompts with User Account Control, click _Yes_ 3. Follow the prompts through to completion. You do not need to "Learn more about Bitnami cloud hosting" so you can clear the check box. 4. If you see an error dialog like the following, you may safely ignore it. @@ -50,29 +50,28 @@ The following steps will configure Solr to run using an account that will have a \subsection install_solr_config Solr Configuration 1. Stop the _solrJetty_ service by pressing _Start_, typing _services.msc_, pressing _Enter_, and locating the _solrJetty_ Windows service. Select the service and press _Stop the service_. If the service is already stopped and there is no _Stop the service_ available, this is okay. -2. Edit the "C:\Bitnami\solr-6.2.1-2\apache-solr\scripts\serviceinstall.bat" script. You need administrator permission to change this file. The easiest way around this is to save a copy on the Desktop, edit the Desktop version, and copy the new one back over the top of the old. Windows will ask for permission to overwrite the old file; allow it. You should make the following changes to this file: +2. Edit the "C:\Bitnami\solr-4.10.3-0\apache-solr\scripts\serviceinstall.bat" script. You need administrator permission to change this file. The easiest way around this is to save a copy on the Desktop, edit the Desktop version, and copy the new one back over the top of the old. Windows will ask for permission to overwrite the old file; allow it. You should make the following changes to this file:

- - Add the following options in the line that begins with "-StartParams" : - + -StartParams="start;-c;-Dbootstrap_confdir=C:\Bitnami\solr-6.2.1-2\apache-solr\server\solr\configsets\AutopsyConfig\conf;-Dcollection.configName=AutopsyConfig" ^ + - Add the following options in the line that begins with "C:\Bitnami\solr-4.10.3-0/apache-solr\scripts\prunsrv.exe" : + + ++JvmOptions=-Dcollection.configName=AutopsyConfig + + ++JvmOptions=-Dbootstrap_confdir="C:\Bitnami\solr-4.10.3-0\apache-solr\solr\configsets\AutopsyConfig\conf" + + ++JvmOptions=-DzkRun
+ - Replace the path to JavaHome with the path to your 64-bit version of the JRE. If you do not know the path, the correct JavaHome path can be obtained by running the command "where java" from the Windows command line. An example is shown below. The text in yellow is what we are interested in. Do not include the "bin" folder in the path you place into the JavaHome variable. A correct example of the final result will look something like this: –-JavaHome="C:\Program Files\Java\jre1.8.0_111" +

A portion of an updated _serviceinstall.bat_ is shown below, with the changes marked in yellow.

- \image html updatedServiceInstall.PNG -

-3. Edit "C:\Bitnami\solr-6.2.1-2\apache-solr\bin\solr.cmd" and point _JAVA_HOME_ to _JavaHome_ path on your machine. - Changes in _solr.cmd_ are highlighted in yellow -

- \image html updatedSolr_cmd.PNG -

-4. Edit "C:\Bitnami\solr-6.2.1-2\apache-solr\server\solr\solr.xml" to set the _transientCacheSize_ to the maximum number of cases expected to be open concurrently. If you expect ten concurrent cases, the text to add is + \image html serviceinstall.PNG +

+3. Edit "C:\Bitnami\solr-4.10.3-0\apache-solr\solr\solr.xml" to set the _transientCacheSize_ to the maximum number of cases expected to be open concurrently. If you expect ten concurrent cases, the text to add is \10\

The added part is highlighted in yellow below. Ensure that it is inside the \ tag as follows:
\image html transientcache.PNG

-5. Edit "C:\Bitnami\solr-6.2.1-2\apache-solr\server\resources\log4j.properties" to configure Solr log settings: +4. Edit "C:\Bitnami\solr-4.10.3-0\apache-solr\resources/log4j.properties" to configure Solr log settings: - Increase the log rotation size threshold (_log4j\.appender\.file\.MaxFileSize_) from 4MB to 100MB. - Remove the _CONSOLE_ appender from the _log4j\.rootLogger_ line.

@@ -80,40 +79,26 @@ The following steps will configure Solr to run using an account that will have a

\image html log4j.PNG

-6. From an Autopsy installation, copy the folder "C:\Program Files\Autopsy-XXX(current version)\autopsy\solr\solr\configsets" to "C:\Bitnami\solr-6.2.1-2\apache-solr\server\solr\configsets". -7. From an Autopsy installation, copy the folder "C:\Program Files\Autopsy-XXX(current version)\autopsy\solr\solr\lib" to "C:\Bitnami\solr-6.2.1-2\apache-solr\server\solr\lib". +5. From an Autopsy installation, copy the folder "C:\Program Files\Autopsy-XXX(current version)\autopsy\solr\solr\configsets" to "C:\Bitnami\solr-4.10.3-0\apache-solr\solr". +6. From an Autopsy installation, copy the folder "C:\Program Files\Autopsy-XXX(current version)\autopsy\solr\solr\lib" to "C:\Bitnami\solr-4.10.3-0\apache-solr\solr". \subsection configure_Zookeeper Zookeeper Configuration The following steps will configure Zookeeper. 1. Stop the solrJetty service by pressing Start, typing services.msc, pressing Enter, and locating the solrJetty Windows service. Select the service and press Stop the service. If the service is already stopped and there is no Stop the service available, this is okay. 2. Start a Windows command prompt as administrator by pressing Start, typing command, right clicking on Command Prompt, and clicking on Run as administrator. Then run the following command to uninstall the solrJetty service: - cmd /c C:\Bitnami\solr-6.2.1-2\apache-solr\scripts\serviceinstall.bat UNINSTALL + cmd /c C:\Bitnami\solr-4.10.3-0\apache-solr\scripts\serviceinstall.bat UNINSTALL You will very likely see a result that says "The solrJetty service is not started." This is okay. 3. Create a folder "C:\Bitnami\zookeeper" if it does not exist. - 4. Edit "C:\Bitnami\solr-6.2.1-2\apache-solr\server\solr\zoo.cfg" to include the text dataDir=C:/Bitnami/zookeeper as shown in the screenshot below + 4. Edit "C:\Bitnami\solr-4.10.3-0\apache-solr\server\solr\zoo.cfg" to include the text dataDir=C:/Bitnami/zookeeper as shown in the screenshot below

\image html zooDir.PNG
- 5. Edit "C:\Bitnami\solr-6.2.1-2\apache-solr\server\solr\zoo.cfg" to include the text -
-
- - autopurge.snapRetainCount=3 -
# ZooKeeper auto purge feature retains the autopurge.snapRetainCount most recent snapshots and the corresponding transaction logs in the dataDir and dataLogDir respectively and deletes the rest. Defaults to 3. Minimum value is 3. -
- - autopurge.purgeInterval=24 -
# The time interval in hours for which the purge task has to be triggered. Set to a positive integer (1 and above) to enable the auto purging. Defaults to 0. -
-
- as shown in yellow in the screenshot below -

- \image html zooPurge.PNG -
- 6. Start a Windows command prompt as administrator by pressing Start, typing command, right clicking on Command Prompt, and clicking on Run as administrator. Then run the following command to install the solrJetty service: + 5. Start a Windows command prompt as administrator by pressing Start, typing command, right clicking on Command Prompt, and clicking on Run as administrator. Then run the following command to install the solrJetty service: - cmd /c C:\Bitnami\solr-6.2.1-2\apache-solr\scripts\serviceinstall.bat INSTALL + cmd /c C:\Bitnami\solr-4.10.3-0\apache-solr\scripts\serviceinstall.bat INSTALL
Note the argument "INSTALL" is case sensitive. Your command prompt should look like the screenshot below. Very likely your command prompt will say "The solrJetty service could not be started." This is okay.

\image html solrinstall1.PNG From 55c6fdeb5f41f9d6221018d537cb05e8be3f7dce Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 19 Apr 2017 10:56:13 -0400 Subject: [PATCH 5/9] Expand all child nodes of the Results node in the tree --- .../autopsy/directorytree/DirectoryTreeTopComponent.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index da788f4363..5d69b1759a 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -64,7 +64,6 @@ import org.sleuthkit.autopsy.datamodel.DisplayableItemNode; import org.sleuthkit.autopsy.datamodel.EmptyNode; import org.sleuthkit.autopsy.datamodel.ExtractedContent; import org.sleuthkit.autopsy.datamodel.FileTypesByMimeType; -import org.sleuthkit.autopsy.datamodel.KeywordHits; import org.sleuthkit.autopsy.datamodel.Reports; import org.sleuthkit.autopsy.datamodel.Results; import org.sleuthkit.autopsy.datamodel.ResultsNode; @@ -414,8 +413,9 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat tree.expandNode(results); Children resultsChilds = results.getChildren(); - tree.expandNode(resultsChilds.findChild(KeywordHits.NAME)); - tree.expandNode(resultsChilds.findChild(ExtractedContent.NAME)); + for (Node n : resultsChilds.getNodes()) { + tree.expandNode(n); + } Accounts accounts = resultsChilds.findChild(Accounts.NAME).getLookup().lookup(Accounts.class); showRejectedCheckBox.setAction(accounts.newToggleShowRejectedAction()); From a9ef558e4a779551d30134e590f656ab8553408b Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Wed, 19 Apr 2017 15:30:22 -0400 Subject: [PATCH 6/9] Cleaned up KWS build.xml --- KeywordSearch/build.xml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/KeywordSearch/build.xml b/KeywordSearch/build.xml index a53e8a832c..d02cb92727 100644 --- a/KeywordSearch/build.xml +++ b/KeywordSearch/build.xml @@ -14,14 +14,7 @@ - - - - - - + @@ -31,8 +24,6 @@ - - From 43b29dd4caa38653b721005c6ef58428fa71c068 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Wed, 19 Apr 2017 15:30:57 -0400 Subject: [PATCH 7/9] Cleaned up SolrSearchService to not perform index upgrade --- .../autopsy/keywordsearch/IndexFinder.java | 50 +--------------- .../keywordsearch/SolrSearchService.java | 58 +------------------ 2 files changed, 4 insertions(+), 104 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java index d1345dfa1d..60aedd8769 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java @@ -42,7 +42,7 @@ class IndexFinder { private static final String KWS_OUTPUT_FOLDER_NAME = "keywordsearch"; private static final String KWS_DATA_FOLDER_NAME = "data"; private static final String INDEX_FOLDER_NAME = "index"; - private static final String CURRENT_SOLR_VERSION = "6"; + private static final String CURRENT_SOLR_VERSION = "4"; private static final String CURRENT_SOLR_SCHEMA_VERSION = "2.0"; static String getCurrentSolrVersion() { @@ -54,10 +54,8 @@ class IndexFinder { } static Index findLatestVersionIndexDir(List allIndexes) { - String indexFolderName = "solr" + CURRENT_SOLR_VERSION + "_schema" + CURRENT_SOLR_SCHEMA_VERSION; for (Index index : allIndexes) { - String path = index.getIndexPath(); - if (path.contains(indexFolderName)) { + if (index.getSolrVersion().equals(CURRENT_SOLR_VERSION) && index.getSchemaVersion().equals(CURRENT_SOLR_SCHEMA_VERSION)) { return index; } } @@ -100,50 +98,6 @@ class IndexFinder { return bestCandidateIndex; } - /** - * Creates a copy of an existing Solr index. - * - * @param indexToUpgrade Index object to create a copy of - * @param context AutopsyService.CaseContext object - * - * @return The absolute path of the new Solr index directory - * - * @throws - * org.sleuthkit.autopsy.framework.AutopsyService.AutopsyServiceException - */ - static String copyExistingIndex(Index indexToUpgrade, AutopsyService.CaseContext context) throws AutopsyService.AutopsyServiceException { - // folder name for the upgraded index should be latest Solr version BUT schema verion of the existing index - String indexFolderName = "solr" + CURRENT_SOLR_VERSION + "_schema" + indexToUpgrade.getSchemaVersion(); - try { - // new index should be stored in "\ModuleOutput\keywordsearch\data\solrX_schemaY\index" - File targetDirPath = Paths.get(context.getCase().getModuleDirectory(), KWS_OUTPUT_FOLDER_NAME, KWS_DATA_FOLDER_NAME, indexFolderName, INDEX_FOLDER_NAME).toFile(); //NON-NLS - if (targetDirPath.exists()) { - // targetDirPath should not exist, at least the target directory should be empty - List contents = getAllContentsInFolder(targetDirPath.getAbsolutePath()); - if (!contents.isEmpty()) { - // target directory is not empty - try { - FileUtils.deleteDirectory(targetDirPath.getParentFile()); //We don't want partial copies - } catch (IOException | IllegalArgumentException deleteEx) { - throw new AutopsyService.AutopsyServiceException("Failed to delete existing directory to store the upgraded index " + targetDirPath.getAbsolutePath() + "which was not empty", deleteEx); - } - logger.log(Level.WARNING, String.format("Directory %s existed with contents and was deleted so the upgrade could proceed", indexFolderName)); - } - } - targetDirPath.mkdirs(); - FileUtils.copyDirectory(new File(indexToUpgrade.getIndexPath()), targetDirPath); - return targetDirPath.getAbsolutePath(); - } catch (AutopsyService.AutopsyServiceException | IOException ex) { - try { - Path targetDirPath = Paths.get(context.getCase().getModuleDirectory(), KWS_OUTPUT_FOLDER_NAME, KWS_DATA_FOLDER_NAME, indexFolderName); //NON-NLS - FileUtils.deleteDirectory(targetDirPath.toFile()); //We don't want partial copies - } catch (IOException | IllegalArgumentException deleteEx) { - logger.log(Level.SEVERE, String.format("Failed to delete %s when upgrade cancelled", indexFolderName), deleteEx); - } - throw new AutopsyService.AutopsyServiceException("Error occurred while creating a copy of keyword search index", ex); - } - } - /** * Find existing Solr 4 Schema 1.8 index directory location for the case. * This is done via subdirectory search of all existing diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java index 039bd018c6..063879352e 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java @@ -268,10 +268,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { double currentSolrVersion = NumberUtils.toDouble(IndexFinder.getCurrentSolrVersion()); double indexSolrVersion = NumberUtils.toDouble(indexToUpgrade.getSolrVersion()); - if (indexSolrVersion > currentSolrVersion) { - // oops! - throw new AutopsyServiceException("Unable to find index to use for Case open"); - } else if (indexSolrVersion == currentSolrVersion) { + if (indexSolrVersion == currentSolrVersion) { // latest Solr version but not latest schema. index should be used in read-only mode and not be upgraded. if (RuntimeProperties.runningWithGUI()) { // pop up a message box to indicate the read-only restrictions. @@ -295,58 +292,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { currentVersionIndex = indexToUpgrade; } else { // index needs to be upgraded to latest supported version of Solr - if (RuntimeProperties.runningWithGUI()) { - //pop up a message box to indicate the restrictions on adding additional - //text and performing regex searches - JOptionPane optionPane = new JOptionPane( - NbBundle.getMessage(this.getClass(), "SolrSearchService.IndexUpgradeDialog.msg"), - JOptionPane.WARNING_MESSAGE, - JOptionPane.YES_NO_OPTION); - try { - SwingUtilities.invokeAndWait(() -> { - JDialog dialog = optionPane.createDialog(NbBundle.getMessage(this.getClass(), "SolrSearchService.IndexUpgradeDialog.title")); - dialog.setVisible(true); - }); - } catch (InterruptedException ex) { - // Cancelled - return; - } catch (InvocationTargetException ex) { - throw new AutopsyServiceException("Error displaying upgrade confirmation dialog", ex); - } - Object response = optionPane.getValue(); - if (JOptionPane.NO_OPTION == (int) response) { - return; - } - } - - // Copy the existing index and config set into ModuleOutput/keywordsearch/data/solrX_schema_Y/ - progressUnitsCompleted++; - progress.progress(Bundle.SolrSearch_copyIndex_msg(), progressUnitsCompleted); - String newIndexDirPath = IndexFinder.copyExistingIndex(indexToUpgrade, context); - File newIndexVersionDir = new File(newIndexDirPath).getParentFile(); - if (context.cancelRequested()) { - try { - FileUtils.deleteDirectory(newIndexVersionDir); - } catch (IOException ex) { - logger.log(Level.SEVERE, String.format("Failed to delete %s when upgrade cancelled", newIndexVersionDir), ex); - } - return; - } - - // upgrade the existing index to the latest supported Solr version - IndexUpgrader indexUpgrader = new IndexUpgrader(); - currentVersionIndex = indexUpgrader.performIndexUpgrade(newIndexDirPath, indexToUpgrade, context, progressUnitsCompleted); - if (currentVersionIndex == null) { - try { - FileUtils.deleteDirectory(newIndexVersionDir); - } catch (IOException ex) { - logger.log(Level.SEVERE, String.format("Failed to delete %s when upgrade cancelled", newIndexVersionDir), ex); - } - return; - } - - // add current index to the list of indexes that exist for this case - indexes.add(currentVersionIndex); + throw new AutopsyServiceException("Unable to find index to use for Case open"); } } } From 20b304b2f382cd6d68187ff9225ab96cca02942d Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Wed, 19 Apr 2017 16:31:22 -0400 Subject: [PATCH 8/9] More cleanup --- .../autopsy/keywordsearch/IndexFinder.java | 6 +----- .../keywordsearch/SolrSearchService.java | 19 ++++++++----------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java index 60aedd8769..6ecf83bdce 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexFinder.java @@ -19,15 +19,11 @@ package org.sleuthkit.autopsy.keywordsearch; import java.io.File; -import java.io.IOException; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.logging.Level; -import org.apache.commons.io.FileUtils; import org.apache.commons.lang.math.NumberUtils; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -72,7 +68,7 @@ class IndexFinder { return new Index(targetDirPath.getAbsolutePath(), CURRENT_SOLR_VERSION, CURRENT_SOLR_SCHEMA_VERSION, "", theCase.getName()); } - static Index identifyIndexToUpgrade(List allIndexes) { + static Index identifyIndexToUse(List allIndexes) { /* * NOTE: All of the following paths are valid multi-user index paths: * (Solr 4, schema 1.8) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java index 063879352e..ab29ab7058 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java @@ -18,7 +18,6 @@ */ package org.sleuthkit.autopsy.keywordsearch; -import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.InetAddress; @@ -29,7 +28,6 @@ import java.util.logging.Level; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; -import org.apache.commons.io.FileUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; @@ -198,13 +196,12 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { "SolrSearch.findingIndexes.msg=Looking for existing text index directories", "SolrSearch.creatingNewIndex.msg=Creating new text index", "SolrSearch.checkingForLatestIndex.msg=Looking for text index with latest Solr and schema version", - "SolrSearch.indentifyingIndex.msg=Identifying text index for upgrade", - "SolrSearch.copyIndex.msg=Copying existing text index", + "SolrSearch.indentifyingIndex.msg=Identifying text index to use", "SolrSearch.openCore.msg=Opening text index", "SolrSearch.complete.msg=Text index successfully opened"}) public void openCaseResources(CaseContext context) throws AutopsyServiceException { ProgressIndicator progress = context.getProgressIndicator(); - int totalNumProgressUnits = 8; + int totalNumProgressUnits = 7; int progressUnitsCompleted = 0; String caseDirPath = context.getCase().getCaseDirectory(); @@ -224,7 +221,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { } } else { // metadata file doesn't exist. - // do case subdirectory search to look for Solr 4 Schema 1.8 indexes that can be upgraded + // do case subdirectory search to look for Solr 4 Schema 1.8 indexes progressUnitsCompleted++; progress.progress(Bundle.SolrSearch_findingIndexes_msg(), progressUnitsCompleted); Index oldIndex = IndexFinder.findOldIndexDir(theCase); @@ -238,7 +235,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { return; } - // check if we found an index that needs upgrade + // check if we found any existing indexes Index currentVersionIndex = null; if (indexes.isEmpty()) { // new case that doesn't have an existing index. create new index folder @@ -256,10 +253,10 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { // found existing index(es) but none were for latest Solr version and schema version progressUnitsCompleted++; progress.progress(Bundle.SolrSearch_indentifyingIndex_msg(), progressUnitsCompleted); - Index indexToUpgrade = IndexFinder.identifyIndexToUpgrade(indexes); + Index indexToUpgrade = IndexFinder.identifyIndexToUse(indexes); if (indexToUpgrade == null) { - // unable to find index that can be upgraded - throw new AutopsyServiceException("Unable to find index that can be upgraded to the latest version of Solr"); + // unable to find index that can be used + throw new AutopsyServiceException("Unable to find index that can be used for this case"); } if (context.cancelRequested()) { @@ -269,7 +266,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { double currentSolrVersion = NumberUtils.toDouble(IndexFinder.getCurrentSolrVersion()); double indexSolrVersion = NumberUtils.toDouble(indexToUpgrade.getSolrVersion()); if (indexSolrVersion == currentSolrVersion) { - // latest Solr version but not latest schema. index should be used in read-only mode and not be upgraded. + // latest Solr version but not latest schema. index should be used in read-only mode if (RuntimeProperties.runningWithGUI()) { // pop up a message box to indicate the read-only restrictions. JOptionPane optionPane = new JOptionPane( From d077283a6c83b4c30a377d08a8db3d40a0594b35 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Wed, 19 Apr 2017 17:11:53 -0400 Subject: [PATCH 9/9] Removed references to upgrading index --- .../autopsy/keywordsearch/SolrSearchService.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java index ab29ab7058..acde9d77fc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java @@ -182,7 +182,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { } /** - * Creates/opens/upgrades the Solr core/text index for a case + * Creates/opens the Solr core/text index for a case * * @param context The case context. * @@ -253,8 +253,8 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { // found existing index(es) but none were for latest Solr version and schema version progressUnitsCompleted++; progress.progress(Bundle.SolrSearch_indentifyingIndex_msg(), progressUnitsCompleted); - Index indexToUpgrade = IndexFinder.identifyIndexToUse(indexes); - if (indexToUpgrade == null) { + Index indexToUse = IndexFinder.identifyIndexToUse(indexes); + if (indexToUse == null) { // unable to find index that can be used throw new AutopsyServiceException("Unable to find index that can be used for this case"); } @@ -264,7 +264,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { } double currentSolrVersion = NumberUtils.toDouble(IndexFinder.getCurrentSolrVersion()); - double indexSolrVersion = NumberUtils.toDouble(indexToUpgrade.getSolrVersion()); + double indexSolrVersion = NumberUtils.toDouble(indexToUse.getSolrVersion()); if (indexSolrVersion == currentSolrVersion) { // latest Solr version but not latest schema. index should be used in read-only mode if (RuntimeProperties.runningWithGUI()) { @@ -286,7 +286,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { } } // proceed with case open - currentVersionIndex = indexToUpgrade; + currentVersionIndex = indexToUse; } else { // index needs to be upgraded to latest supported version of Solr throw new AutopsyServiceException("Unable to find index to use for Case open");