From bd2650d414b4687c32f580751fc0de7f65f8d1f3 Mon Sep 17 00:00:00 2001 From: Renia Correya Date: Tue, 3 Sep 2024 16:07:49 +0530 Subject: [PATCH] Resolved merge conflicts from develop into JAL-4386 --- build.gradle | 89 +- getdown/lib/FJVL_VERSION | 2 +- getdown/lib/JVL_VERSION | 2 +- getdown/lib/getdown-core.jar | Bin 183513 -> 186786 bytes getdown/lib/getdown-launcher-local.jar | Bin 943694 -> 947171 bytes getdown/lib/getdown-launcher.jar | Bin 943702 -> 947177 bytes getdown/src/getdown/ant/pom.xml | 2 +- getdown/src/getdown/core/pom.xml | 2 +- .../com/threerings/getdown/data/Application.java | 25 +- .../com/threerings/getdown/data/EnvConfig.java | 90 +- .../com/threerings/getdown/util/LaunchUtil.java | 23 +- .../java/jalview/bin/GetdownLauncherUpdate.java | 75 + .../core/src/main/java/jalview/util/ErrorLog.java | 31 + .../src/main/java/jalview/util/LaunchUtils.java | 2 +- .../com/threerings/getdown/data/EnvConfigTest.java | 38 + getdown/src/getdown/launcher/pom.xml | 2 +- .../com/threerings/getdown/launcher/Getdown.java | 2 +- .../threerings/getdown/launcher/GetdownApp.java | 6 +- .../com/threerings/getdown/launcher/ProxyUtil.java | 7 +- getdown/src/getdown/lib/SOURCE_HEADER | 5 - getdown/src/getdown/lib/jRegistryKey.dll | Bin 29316 -> 0 bytes .../jregistrykey/1.0/jregistrykey-1.0.jar | Bin 9980 -> 0 bytes .../jregistrykey/1.0/jregistrykey-1.0.pom | 9 - .../jregistrykey/maven-metadata-local.xml | 12 - getdown/src/getdown/lib/manifest.mf | 6 - getdown/src/getdown/mvn_cmd | 2 +- getdown/src/getdown/pom.xml | 2 +- gradle.properties | 8 +- help/markdown/releases/release-2_11_4_0.md | 34 +- j11lib/getdown-core.jar | Bin 183513 -> 186786 bytes j8lib/getdown-core.jar | Bin 183513 -> 186786 bytes src/jalview/analysis/AAFrequency.java | 72 +- src/jalview/analysis/AlignSeq.java | 231 ++-- src/jalview/analysis/AlignmentUtils.java | 50 +- src/jalview/analysis/ConnectivityException.java | 8 +- src/jalview/analysis/Finder.java | 2 +- src/jalview/analysis/PaSiMap.java | 44 +- src/jalview/analysis/ccAnalysis.java | 1016 ++++++++------ .../analysis/scoremodels/DistanceScoreModel.java | 2 +- .../analysis/scoremodels/FeatureDistanceModel.java | 2 +- src/jalview/analysis/scoremodels/ScoreModels.java | 14 +- .../SecondaryStructureDistanceModel.java | 118 +- .../analysis/scoremodels/SimilarityParams.java | 2 +- src/jalview/api/AlignViewControllerI.java | 4 +- src/jalview/api/AlignViewportI.java | 6 +- src/jalview/api/analysis/ScoreModelI.java | 9 +- src/jalview/api/analysis/SimilarityParamsI.java | 2 +- src/jalview/appletgui/AlignFrame.java | 4 +- src/jalview/bin/Cache.java | 20 +- src/jalview/bin/GetdownLauncherUpdate.java | 75 + src/jalview/bin/Jalview.java | 7 +- src/jalview/bin/JalviewLite.java | 4 +- src/jalview/bin/Launcher.java | 8 +- .../commands/JustifyLeftOrRightCommand.java | 6 +- src/jalview/controller/AlignViewController.java | 2 +- src/jalview/datamodel/ContactMapHolder.java | 20 + src/jalview/datamodel/ContactMapHolderI.java | 20 + src/jalview/datamodel/GroupSetHolder.java | 20 + src/jalview/datamodel/PDBEntry.java | 6 +- src/jalview/datamodel/Profile.java | 16 +- src/jalview/datamodel/ProfileI.java | 10 +- src/jalview/datamodel/SecondaryStructureCount.java | 9 +- src/jalview/datamodel/SequenceGroup.java | 9 +- .../annotations/AlphaFoldAnnotationRowBuilder.java | 20 + src/jalview/ext/ensembl/EnsemblRestClient.java | 4 +- src/jalview/gui/AlignFrame.java | 2 +- src/jalview/gui/AlignViewport.java | 3 +- src/jalview/gui/AppJmol.java | 18 +- src/jalview/gui/CalculationChooser.java | 32 +- src/jalview/gui/CutAndPasteTransfer.java | 12 +- src/jalview/gui/Desktop.java | 366 +++-- src/jalview/gui/FontChooser.java | 6 +- src/jalview/gui/PaSiMapPanel.java | 80 +- src/jalview/gui/PairwiseAlignPanel.java | 73 +- src/jalview/gui/PopupMenu.java | 27 +- src/jalview/gui/ProgressBar.java | 2 +- src/jalview/gui/RotatableCanvas.java | 50 +- src/jalview/gui/StructureChooser.java | 14 +- .../ThreeDBStructureChooserQuerySource.java | 5 +- src/jalview/jbgui/GAlignFrame.java | 8 +- src/jalview/jbgui/GCutAndPasteTransfer.java | 3 +- src/jalview/jbgui/GDesktop.java | 9 +- src/jalview/jbgui/GPCAPanel.java | 1 + src/jalview/jbgui/GPaSiMapPanel.java | 5 +- src/jalview/jbgui/GPreferences.java | 2 +- src/jalview/math/Matrix.java | 250 ++-- src/jalview/math/MatrixI.java | 173 +-- src/jalview/math/MiscMath.java | 275 ++-- src/jalview/project/Jalview2XML.java | 17 +- src/jalview/renderer/AnnotationRenderer.java | 4 +- src/jalview/renderer/ResidueShader.java | 7 +- src/jalview/schemes/ClustalxColourScheme.java | 60 +- src/jalview/schemes/ResidueProperties.java | 18 +- src/jalview/util/ArgParserUtils.java | 20 + src/jalview/util/Constants.java | 17 +- src/jalview/util/ErrorLog.java | 31 + src/jalview/util/HttpUtils.java | 71 +- src/jalview/util/LaunchUtils.java | 2 +- src/jalview/util/UserAgent.java | 20 + src/jalview/viewmodel/AlignmentViewport.java | 27 +- src/jalview/viewmodel/PaSiMapModel.java | 32 +- .../workers/SecondaryStructureConsensusThread.java | 3 +- .../datamodel/alphafold/MappableContactMatrix.java | 20 + .../ws/datamodel/alphafold/PAEContactMatrix.java | 20 + test/jalview/analysis/AlignSeqTest.java | 16 +- test/jalview/analysis/AlignmentUtilsTests.java | 327 +++-- .../analysis/scoremodels/ScoreModelsTest.java | 2 +- .../SecondaryStructureDistanceModelTest.java | 266 ++-- test/jalview/commands/EditCommandTest.java | 49 +- test/jalview/ext/ensembl/EnsemblGeneTest.java | 5 +- test/jalview/gui/AssociatePDBFileTest.java | 25 +- test/jalview/gui/CalculationChooserTest.java | 42 +- test/jalview/project/Jalview2xmlTests.java | 10 +- test/jalview/renderer/ResidueShaderTest.java | 2 +- test/jalview/schemes/ClustalxColourSchemeTest.java | 1 + test/jalview/util/FileUtilsTest.java | 7 +- utils/channels/default/channel_gradle.properties | 1 + utils/channels/default/images/jalview_logo-64.png | Bin 0 -> 10430 bytes .../channels/default/images/jalview_logo-64@2x.png | Bin 0 -> 11834 bytes .../develop-SUFFIX/channel_gradle.properties | 1 + .../images/jalview_develop_logo-64.png | Bin 0 -> 7986 bytes .../images/jalview_develop_logo-64@2x.png | Bin 0 -> 9829 bytes utils/channels/develop/channel_gradle.properties | 1 + .../develop/images/jalview_develop_logo-64.png | Bin 0 -> 7986 bytes .../develop/images/jalview_develop_logo-64@2x.png | Bin 0 -> 9829 bytes utils/channels/jalviewjs/channel_gradle.properties | 2 + .../channels/jalviewjs/images/jalview_logo-64.png | Bin 0 -> 10441 bytes .../jalviewjs/images/jalview_logo-64@2x.png | Bin 0 -> 11874 bytes utils/channels/release/channel_gradle.properties | 1 + utils/channels/release/images/jalview_logo-64.png | Bin 0 -> 10430 bytes .../channels/release/images/jalview_logo-64@2x.png | Bin 0 -> 11834 bytes .../test-release/channel_gradle.properties | 1 + .../images/jalview_test-release_logo-64.png | Bin 0 -> 1928 bytes .../images/jalview_test-release_logo-64@2x.png | Bin 0 -> 2802 bytes utils/getdown/bin/jalview.ps1 | 132 +- utils/getdown/bin/jalview.sh | 194 ++- utils/getdown/bin/run_other_script.ps1 | 49 + .../bin/{jalview.bat => run_powershell.bat} | 0 utils/getdown/bin/update.ps1 | 204 +++ utils/getdown/bin/update.sh | 253 ++++ utils/install4j/default.vmoptions | 21 + .../file_associations_auto-install4j10.xml | 150 +- .../file_associations_template-install4j10.xml | 6 +- utils/install4j/install4j10_template.install4j | 1463 ++++++++++++++++++-- utils/install4j/macos-install-jalview.sh | 414 ++++++ utils/install4j/warning.png | Bin 0 -> 3255 bytes utils/osx_signing/sign_dmg.sh | 60 + utils/osx_signing/staple_dmg.sh | 50 + 148 files changed, 5724 insertions(+), 2134 deletions(-) create mode 100644 getdown/src/getdown/core/src/main/java/jalview/bin/GetdownLauncherUpdate.java delete mode 100644 getdown/src/getdown/lib/SOURCE_HEADER delete mode 100644 getdown/src/getdown/lib/jRegistryKey.dll delete mode 100644 getdown/src/getdown/lib/jregistrykey/jregistrykey/1.0/jregistrykey-1.0.jar delete mode 100644 getdown/src/getdown/lib/jregistrykey/jregistrykey/1.0/jregistrykey-1.0.pom delete mode 100644 getdown/src/getdown/lib/jregistrykey/jregistrykey/maven-metadata-local.xml delete mode 100644 getdown/src/getdown/lib/manifest.mf create mode 100644 src/jalview/bin/GetdownLauncherUpdate.java create mode 100644 utils/channels/default/images/jalview_logo-64.png create mode 100644 utils/channels/default/images/jalview_logo-64@2x.png create mode 100644 utils/channels/develop-SUFFIX/images/jalview_develop_logo-64.png create mode 100644 utils/channels/develop-SUFFIX/images/jalview_develop_logo-64@2x.png create mode 100644 utils/channels/develop/images/jalview_develop_logo-64.png create mode 100644 utils/channels/develop/images/jalview_develop_logo-64@2x.png create mode 100644 utils/channels/jalviewjs/images/jalview_logo-64.png create mode 100644 utils/channels/jalviewjs/images/jalview_logo-64@2x.png create mode 100644 utils/channels/release/images/jalview_logo-64.png create mode 100644 utils/channels/release/images/jalview_logo-64@2x.png create mode 100644 utils/channels/test-release/images/jalview_test-release_logo-64.png create mode 100644 utils/channels/test-release/images/jalview_test-release_logo-64@2x.png create mode 100755 utils/getdown/bin/run_other_script.ps1 rename utils/getdown/bin/{jalview.bat => run_powershell.bat} (100%) create mode 100755 utils/getdown/bin/update.ps1 create mode 100755 utils/getdown/bin/update.sh create mode 100644 utils/install4j/default.vmoptions create mode 100755 utils/install4j/macos-install-jalview.sh create mode 100644 utils/install4j/warning.png create mode 100755 utils/osx_signing/sign_dmg.sh create mode 100755 utils/osx_signing/staple_dmg.sh diff --git a/build.gradle b/build.gradle index 3625ffc..b9b3ad9 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,6 @@ buildscript { dependencies { classpath "com.vladsch.flexmark:flexmark-all:0.62.0" classpath "org.jsoup:jsoup:1.14.3" - classpath "com.eowise:gradle-imagemagick:0.5.1" classpath 'ru.vyarus:gradle-use-python-plugin:4.0.0' } } @@ -61,7 +60,6 @@ plugins { } repositories { - jcenter() mavenCentral() mavenLocal() } @@ -2313,7 +2311,7 @@ task getdownWebsiteBuild() { } getdownWebsiteResourceFilenames += file(channelPropsFile).getName() - // set some getdownTxt_ properties then go through all properties looking for getdownTxt_... + // set some getdownTxt_ properties then go through all properties looking for getdown_txt_... def props = project.properties.sort { it.key } if (getdownAltJavaMinVersion != null && getdownAltJavaMinVersion.length() > 0) { props.put("getdown_txt_java_min_version", getdownAltJavaMinVersion) @@ -2387,8 +2385,15 @@ task getdownWebsiteBuild() { into getdownResourceDir } } - - def getdownWrapperScripts = [ getdown_bash_wrapper_script, getdown_powershell_wrapper_script, getdown_batch_wrapper_script ] + + def getdownWrapperScripts = [ + getdown_bash_wrapper_script, + getdown_powershell_wrapper_script, + getdown_bash_update_script, + getdown_powershell_update_script, + ] + def run_powershell = file( "${jalviewDir}/utils/getdown/${getdown_wrapper_script_dir}/${getdown_run_powershell}" ) + def run_other_script = file( "${jalviewDir}/utils/getdown/${getdown_wrapper_script_dir}/${getdown_run_other_script}" ) getdownWrapperScripts.each{ script -> def s = file( "${jalviewDir}/utils/getdown/${getdown_wrapper_script_dir}/${script}" ) if (s.exists()) { @@ -2398,6 +2403,31 @@ task getdownWebsiteBuild() { } getdownTextLines += "xresource = ${getdown_wrapper_script_dir}/${script}" } + def ext = script.toLowerCase(Locale.ROOT).substring(script.lastIndexOf(".") + 1) + if ("ps1".equals(ext)) { + def base = script.take(script.lastIndexOf(".")) + def newbase = "update".equals(base) ? "${install4jUnixApplicationFolder}_update" : install4jUnixApplicationFolder + if (!newbase.equals(base)) { + copy { + from run_other_script + rename(run_other_script.getName(), "${newbase}.${ext}") + into "${getdownAppBaseDir}/${getdown_wrapper_script_dir}" + getdownTextLines += "xresource = ${getdown_wrapper_script_dir}/${newbase}.${ext}" + filter(ReplaceTokens, + beginToken: '__', + endToken: '__', + tokens: [ + 'OTHERSCRIPT': script + ] + ) } + } + copy { + from run_powershell + rename(run_powershell.getName(), "${newbase}.bat") + into "${getdownAppBaseDir}/${getdown_wrapper_script_dir}" + getdownTextLines += "xresource = ${getdown_wrapper_script_dir}/${newbase}.bat" + } + } } def codeFiles = [] @@ -2924,9 +2954,52 @@ task install4jCustomiseDS_Store { dependsOn install4jCustomiseDS_StoreAarch64 } +task install4jDMGVmoptionsFile(type: Copy) { + def inputDir = "${jalviewDir}/${install4j_utils_dir}" + def outputDir = "${jalviewDir}/${install4j_build_dir}/tmp" + + def installDateTime = getDate("yyyy-MM-dd HH:mm:ss") + " (build time)" + + from(inputDir) { + include(string("${install4j_default_vmoptions}")) + rename(string("${install4j_default_vmoptions}"), string("${install4j_default_vmoptions}.X64")) + + filter(ReplaceTokens, + beginToken: '__', + endToken: '__', + tokens: [ + 'INSTALLERFILENAME': string("${install4jmacOSArchiveX64DMGFilename}.dmg"), + 'INSTALLDATETIME': installDateTime + ] + ) + + } + + from(inputDir) { + include(string("${install4j_default_vmoptions}")) + rename(string("${install4j_default_vmoptions}"), string("${install4j_default_vmoptions}.AARCH64")) + + filter(ReplaceTokens, + beginToken: '__', + endToken: '__', + tokens: [ + 'INSTALLERFILENAME': string("${install4jmacOSArchiveAarch64DMGFilename}.dmg"), + 'INSTALLDATETIME': installDateTime + ] + ) + } + + into outputDir + + inputs.file("${inputDir}/${install4j_default_vmoptions}") + outputs.file("${outputDir}/${install4j_default_vmoptions}.X64") + outputs.file("${outputDir}/${install4j_default_vmoptions}.AARCH64") +} + task install4jDMGProcesses { dependsOn install4jDMGBackgroundImageProcess dependsOn install4jCustomiseDS_Store + dependsOn install4jDMGVmoptionsFile } task installerFiles(type: com.install4j.gradle.Install4jTask) { @@ -2981,7 +3054,8 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) { 'WRAPPER_LINK': getdownWrapperLink, 'BASH_WRAPPER_SCRIPT': getdown_bash_wrapper_script, 'POWERSHELL_WRAPPER_SCRIPT': getdown_powershell_wrapper_script, - 'BATCH_WRAPPER_SCRIPT': getdown_batch_wrapper_script, + 'BASH_UPDATE_SCRIPT': getdown_bash_update_script, + 'POWERSHELL_UPDATE_SCRIPT': getdown_powershell_update_script, 'WRAPPER_SCRIPT_BIN_DIR': getdown_wrapper_script_dir, 'MACOSARCHIVE_X64_NAME': install4jmacOSArchiveX64Name, 'MACOSARCHIVE_AARCH64_NAME': install4jmacOSArchiveAarch64Name, @@ -2993,7 +3067,7 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) { 'GETDOWN_ALT_DIR': getdown_app_dir_alt, 'GETDOWN_INSTALL_DIR': getdown_install_dir, 'INFO_PLIST_FILE_ASSOCIATIONS_FILE': install4j_info_plist_file_associations, - 'BUILD_DIR': install4jBuildDir, + 'BUILD_DIR': install4j_build_dir, 'APPLICATION_CATEGORIES': install4j_application_categories, 'APPLICATION_FOLDER': install4jApplicationFolder, 'UNIX_APPLICATION_FOLDER': install4jUnixApplicationFolder, @@ -3010,6 +3084,7 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) { 'INSTALLER_ICON': "${getdownImagesDir}/${install4j_installer_icon}", 'INSTALLER_MAC_ICON': "${getdownImagesDir}/${install4j_installer_mac_icon}", 'INSTALLER_WINDOWS_ICON': "${getdownImagesDir}/${install4j_installer_windows_icon}", + 'TITLE_ICON': "${getdownImagesDir}/${install4j_title_icon}", 'LOG_FILE': "${install4jUnixApplicationFolder}.log", ] diff --git a/getdown/lib/FJVL_VERSION b/getdown/lib/FJVL_VERSION index 9a27132..3e5faf8 100644 --- a/getdown/lib/FJVL_VERSION +++ b/getdown/lib/FJVL_VERSION @@ -1 +1 @@ -1.8.3-1.5.0_FJVL +1.8.3-1.5.3_FJVL diff --git a/getdown/lib/JVL_VERSION b/getdown/lib/JVL_VERSION index 5446e8b..32c1fa5 100644 --- a/getdown/lib/JVL_VERSION +++ b/getdown/lib/JVL_VERSION @@ -1 +1 @@ -1.8.3-1.5.0_JVL +1.8.3-1.5.3_JVL diff --git a/getdown/lib/getdown-core.jar b/getdown/lib/getdown-core.jar index 124cf70fbc9cbc74dd708a0d7d8c0ef5689291ac..652c6c4275d878abba8889dc0d3b7616544ce9f6 100644 GIT binary patch delta 63530 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 diff --git a/getdown/lib/getdown-launcher-local.jar b/getdown/lib/getdown-launcher-local.jar index 45ae248e7cc59db12c8cab22cae0f66a66203c69..a393030f1206814aefbf57cf6391ad0658384a81 100644 GIT binary patch delta 126945 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%0DQeLM(QPv@aPs(Gq`)Pm~`FZa8 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�sm$ykUnpj<}Oz({oR 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�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 Y2KtR}x{kXY7u^H=)%*CsmnnXD11svP|o z8lXxi@eES-wXN7-6BL4hhtP@}^z1Vwwbb4b;8EOpn;QvD5GBsE&R@$fEp?n-KY9W= z)-C+V2Kes0YKrqIC#&?Osfz%bYtu#PRIZsAEiNyJgye5rzEL#|VCV{!D$aV0O>Ab4 zWvG%mOUE8Qq7|#3PcY zxG|(M9OzNJhg6V;geqmcY$OB*0zv};0{Y)OnN$tT`roZgIs)eWuV^F!SpfMr^a{rK zub>6z`Bzwj3;$Q7^@T&ArA5Dkpr*}+!b2xf&fxt!!JvvUH3}Z4F^*#p_P>!vG}!-H zE-eEESOj2ek0OZV*Mf()t6HZ9?o;X2?BA>&5kp`V4G%0lE)7!hH7h?+-@kN0&xP=g z_(|iZhH4yrhIlKEZ7xr&zh0EFIeE##^DudNy*Z=5GXumcP8Op*S{yIJFIpKG+A6y_ zw_Bt3BD2YH=Wn=jo$Zy+V|7=5Re{Qb2QCDbg9nhi%!h(JS6K(ecj_cJS0&r=6z;4R zGUOPNd4-b}hYvlJUU@0P>^2HVmxhEBQ-uc;E;*B&%gK2Zy-j`by{}?TnfL<5_rRIS zp7V76M+$P?Ab^U$cguhKz+ z%o#;~2@|vwuLP!=D^G6JAFqpc_81p}%bd(0Z()>a_z~#g`!@ZSW^d7plshmO{h_=y zC0FmV_^IBZyKmie@hf!v=P-jB%Omk)4hk?UgB9kz#r~vr;l`tjIz!(b@2r8n%z&Py zTL>&a*V||#*VCz&Fw)PwRvFAsC`Pk8#8KBsaK@nVUe&XzjwNEsbSV#1-&hp>jlERq#|ir!F^CQ&1r$jMqCxU4VQw^Hb@x=CogOU`n} zmI!i1I!2sH>IHc*s?0?F$o+%+ACFSOQ2#;w$Db3R|DQ({(HWCwT_GC}?YKa|-2UOe z(NK2>^1mv{P?xb$TW${WU$YS`NB`^HMnN{D|8cP(8)xGatpwD+29=rqA1g;qEBzbU zn>PNhNRy=pb^vQ!Y}`%jqX$L>4o{1Q0%b~rU;swIL7}5|wF3eIa{g!hZ-CN>0%6dS ze&DH+=Ec~+N|fH98)3yGfpM}EU)uPbG+}fkNi%uGJSr&-e~+iyDmksl%RyepN!D%kWeI? z95bU-pae%j%-(X2_Yp9ibtav|IsrPHu!@Jiz=&YHXt&`+yJ{{J+%yIOf|HpgX6A51 zj;vusstVP{Yt^e6W*25_2@@IG4LBt>l&;Fv7A;xUz%L(&6;YBkwnE+BUKQsCI zNhErel-9^9Rvj*5>{MC)FP@r$?llFgZOcXF(AikkR#m#nhXu%)#u5)kBI^<>4Ft#4 z+095*l=^ToWD+b)eqq5q1kGxIrp>8R*lK^&+dJJA8J_+{^5I` z#;4D+3=rDK-H#v-CIWoE`H!{i!3NesT^6GkEV;wfM|`&=^h30*4-%f7KeP=;Ag{6# z+dwGG2qg}kJ|qgHlGRIp088hOnw--5s>!2BFXmI}kyTuc+s&Q}&oJOYwY?=}oCq&k zkJ8C3T$j$Qzzs{_lG`j=i^gYMetm=d2YpTV9EPKR(5D7R`v34!!~ymKrP$|doyGyq z1jY$_L#SE!2P^CUh1GxV0{>t|k>(H%j|BJ^p=w@eAC;lE9lXpJw+H`t0Ybb6JfTsl zR`T#rB*J)Ulvsb9v_mq@)yrW%5D(*}$g(A`#a+c_t1eimOu`)1dM)dv zwV}w*9{cSL5+XsHpZ9~QE>D&npNA>;8JnE1>ppQHgAx+;6U@%MZ2P%aGI{`#PbI3| zQJU2!Geu9<&mcI}CyZ5lBL45<5mkCWww_R{6{Rb4mCjhJY?Y1U{gnsYtWPn&q-j9S zU8e3Qh98aZH@I)N>_O|rCj#cpzWe-#E>6$J*v;Nc$F8ei?(~hjAlXmxbZh4;Lbvh( zVw(ZVPVvK*ikR#6RbYLW_zA%K^ot);$V1`4TQ`1&fY4iKKjN9)7v_#I<^lo9YK+tU3@XPHnzDSvlKMN3Y?&ZfJD_9K zHo71CY=XlV~NIyPwHR5KQo*j}I z5&ZaVl`g7ac436@7f<>twlI}=Q$ei1*zIgy_AAUT#qo+BLTp5T#_L zpBKgKr7w|;;12rX;R)(_FQRWztG{~IYS>{dWTT{p|;aVR!T(dYt zt-IKn7i2#-WR<2tB3Cj()xnAWqRiShXxU#F)y(a!eIm-*t%xa`!C1at6@j7K#O=t> zAlo5_dEvTOXq8F-*#UK0po>`wxF9Zzil^`I2yYV!Tg{7#=~z7s5VZvDzPzTVX_b>iiHquz85ZtdgCZc58I<C77NAZ7#gnp``0-Wo) z7jdiPKDWrWk#Cf)Ol7;ok3Jq>{k;I`)chy}*88ZkKIca8`z$zsFT}K09iRLNK!--* zD`xX&X18yIwSttmkEqJG7V3wtP4;UjexlZQ5VeX=Wdvx(>-5n2kRT?kL>}Y<=?a@;Tv=u+;z-iBfu9m6G%MJg0bi$P1ssX^u0eaQcNZTS_C^g|mdc#DPNx zT{9&vp(GMEu1Gm2Gc#HUqwYkNXp{LvNQb&mFhq+u#YEUC{?9L7W` zHy>(oZWhC;4?Ma;IGM{M|(Ywo!c!sgE)Lgi&j&)f} z#^lbE{ZAifSxiVie7MYBB8(M#rWLOr2;1TXVhG>2gDuZ|YYL7r(gA4MTq&W^i~|_a zF=CTIF2z2;-i9qGq`AV}#>7gvlVWpK3ms|!0^tVU&yN&O?NP?^wrYsZJpSeHu5_6( z$h(&O!F#F!(Aa>%@(Y3P?Avz8|a|uP=~y%(TfMbPzzGpZ&FKh>nTRLtE#7#SI2e2 z!1RTWi_L)sB{-|QE+Zkj@KL*pC|OCmlAXq7^JQ?yV$KWAD^!&k%tQ4|J z9O?={rL`3{T>l!{MfL3~afyKLjX)wDZFyO`zEVe1zKbI^|HU}X1Z@S$Mex%2C#ezW zxTQ}TrY8KLy7ON@dk_4etjhtV#>t%kN;Yrp$kG~tGkSQ|KTX;aaTO99S}YpkO@l*f zU^sl;=s9`nbIVp}vfG5dN|`4Qg!(I?mM|HBZ8!+Ul7v~a=$C4IQ(WAs=X84LRxd|} zqO%);6y_tSI}u{y9`>5r$0i!yS^fD#ESK)N9Wn8gA|8`FGs&=#i$=w%94V~@+yfM! zk)w0L%rq<+e&(EoLybj|J5j=CVywFZ9ED|VMYnZH-Z+u;1auC&Na)6G9Hxr>U~Pu(m= z>q`bJUAcY;hsZc>W2=XaRb0eqm!IJ`5V*Td?pUk`WrrA?)O+a+GAI$Z)w4Jnt&+#G zp9(}qzn&407zWAwW$}>JscJA1uU#XBo@)pwtj#*pt{y|;!hy0Bu4-P|`f@S=Rr+m1 zv1E!o266e2Q?{dCUqsTe+7=M@GB5|z!@hW$gORl(nUvgG{{HywMUe%;@I;+OU};C* zDiA}Z2IPS2D5jGv()~w{d1cvXtYt#T96GR<%)P1lAwE+KY3Z1Ouzm5=6_^U^>>+Uw z3x+sGaYvbZ9SSRSUn6c6Ld63>jGF*LmJky)%UFn=?KfDXVgtuTJ-$Im!=6VC3klM# zU>LJhs}aG{9uw;(t%OH(gG~zQGljBrYALwKdmQdFo`^xK#k&U-;7TdOniH0vL_Tsb zpMe55d&m=A@{+mNkJU&Rnvvyi(x5^fBV}X3<>VAKqP`*(Edpmm4%-aaj^@tUBpC$1 zQt)>}%{I|75<`I-{56!*MTl{2J49P&GNiCY?5}q|u!9dx5|p0PV$>X#ie+J2mN}O> zOB(w9V&#OwogA}DH8w*BZF^4wLnW9*%c8|ZorrhZ=jSY(=pM?s;P>d{in*)fheDHl z&4COuZ|j$c$w~3?!50kp{_17D#N3e9_MdM|8YCkp6xQZDjH!KmN4BC8B@8!X(b6mu z7!~PAzslgn*(fVnoB?2?$q)mj;@EQp`MSk=HEZDEDLqVn?34&H**?D~b+y5PXk(rp zY>ZvrmmiT@I3mt2G|>m@W+wg`>Wf4uYPf_aSc@a4)-R|c(#i#}yYQu?RcK!};F*us zeJ-U#YA@#lnLk5@<%LVkV!A_11gA1o5;Cz?J9>FneN;teTBfoKSB2BT=GTSD=&KjQ$r1uEOR>a8yGN8in4U}5EA^wTJ2I>jA%_PifpcNwi+xL!HYCw*Vn<7m zKQ)BwgQHn38-Do;>_Bqx?UkOuk3NTSo?HE>An{{;kUCNaZ3Yy#=eGIG?_KH2_&>GB z@bfS_EK$?+DEzS-5GymtX134xvZ|waV}#?4b>K=eTkr=wz&$Iwp;r|CC{fNWu^gH_ z+Xs`CVqI#vW%s!?(!gPuZe>ieAF4cO^j-I1{1I;UE>D$i{#ZrNm}D{G_m)ip52a0B zz?v-f6$0DT>*+-28VD=c)oUnVp84B%@zBn-c8KwEe-Cna z2c}uMQX>o~Sw3_To{ndM=aSy{da1L6C`_`jXBP|HzAb4JG-5=6R*WYU36Kp3*>Hrm zbc!X4OBungO0pHcyP?qPhZ>0&z2pCOTb~ZtNLoeb=w9DTTvIt@KJ?Ly#OW>0 z;2CvwK2W12v{{y;b4cSL0bAI@6HH8u5`HX#2u^3s%PbM*;(z;NF=*-YH9%XKyHF#;%$Fad=nsaLb{UswzFBF;( zwPp<{^R!y=-q@f+P`q&E5S8f%ME;&N;E;6;V-HbCXdw|VT5pHIF}x)k1(U#4+4ysv zo@>nBe&8sYK$JFGjKzV|5Li-`tV&rez7N2?bbSsXsbG9)$rI3g?J07>t@WEXTVBFF9FBTGJ2~*Z8svD>!OTG%w)g{J)Oh{K zOs$bEH+A9w%Dwg&ZCj=mC`gP>k5*{Z-LbVCt525@K_5^?(+QCCMGVUp_a?$Q#PR?( zlOSIBCtn@V=@G&uI5iJ;DxP>HtHh4EqLFxO)55+Div~fg33GYZB;i6R-lA&4ef^t} zH(D>Oh6p}u3FR80!ue1v4(X;%<0NCp&BTyHRk8?xm$qOg2b$0$u91%6sG4Mgf;KSK z0akq&gSesF2)uogsF-XG%c0krQ5^uWXlB<>h_$-5QOfJZMtGkZ?ko+sNZYcqybBV| zUKtsWqhG!=NZVhEq(u@O930{!%NJRh=P!xLa1PN7>#F*tbC5=q>aUd1-mv6C$^-+f1QO;R-`G4XuRYu(nrrJ7R@^ z2%n}`c1i}0aNk=oCEF0AT{4`3@i63`IEaC?{e$T&bZuwEF9lhDH44QNHrv)(L2@wJ z$AbiBbI1uch$W52J%C)yy$`Tu7BXw6(!8A7Nfp^rjiN-4a@;$wWfz&ZXbe~1n@OsWZC z61_lT5huisVxdWnVp=1@cwc%?EvzT&wiKabbJPsKJxDc9q=b8q<4LZi!2v#*k41@_ z$b)+{e+3;fyJG7^BLgTQKB_sYq&f=NHLBQ%|4p)tqi*Dh-vZJapit5Kw;*v)Nl#oF zSC$l~N+XXbhcqEObW^NjB%BR>*Fsn?u0?KJV0$Jev`g|EFCr=c`q~C}%IIn7a4NJ* zwBYb7aM>rbYb)M;lpf*$HPDa*74*8Lk;^0jDO0k{ZXo~eIt4)PWH-1Xvi^%h0{h7| zptn@n#z9`+5{k&G-E!x#T=>US3VNAk5!l=^*GpqxYm0GuT76;sa+(-@Ai|^4Mw-U z(_T|JwJ#t#whAK&ug%{P#jU|pB-5%Y>yy?NDI|iMz)*xC>xSDPe%&|Cf3x22n(sCP z0jNB)R(B+1^IXp`o4I`Ii$@&)Yq6JV*mXs5lD=9t#|=oP)xf-`EDi<}a$7nS4)xLC z4^&&s?x7C$%hp^(v$Wa>`)inG^vw`wzSByM*-J#~+JaLz7jNdBz`bd|@vi3* zq!N&%z5}v}^y3*2F2SG27qIWin!LIczVUwrgCUP8?;NU~V%;MS#+^mP$&$~_@PYqL zrYaNHBhTmCcQtl-i1bOh72)~l$f_QLwy+|*9>f(1UTgu;m&wQdH1Uh<13ml!x2WAF z-T0(ssTGmIYLVbw`) z?2Tb(^_T<*(+D^Sf*^A!cNnD8iMYvLqT+>PF;{{-+UYK<(SD?F(5GQ-!dGU64L{&^ zFw{x!8UkI1YLo-0N@#!X^hqh;!&JOh_W+C@! zxq&^WqJpkR?s$Ey$EH6Jawx2LLGe*|LBE7q#WVJ>&LzY@Ha?KZj~hwNN#MmHib3&3 z`guaJWA|bw33@>qEp*%3Iw?~eql}CCFi{aSV-?|I`IHEK84{2t=R%F6jjQ%JBLTdz zli#SOrv*<*o{ine(Tu=!EcsCyh}VI}%zPzvG_2w+d+FmdW(rD}kHh;AE8M~2LYXkBuz-@-aNg0uL;%CZ7V*eKkpC z()B4PygHcNDo-4cSSAz{mDN>NcNxN&i`W590hk&qP9p5TdZY196S1V2vcuP&0s~m~ zzw{ZU1#_jc=g;^2mk5I5R^KFcF6c^)9X4MSxI>@Mw>=wWDL-u0!~p)!b8w-KR7sG- zH8U#7^7#vYKS^*5DZJ0R@ut-xRP5k!SV(djNn|)2DeEgC+kzXG8D>E)% zo9k!p9PmYU2Ewk+jjqhawzpu_K6Cvfzgck7!z2y5S56e5m8})e`-6QAEw+(!moVh7 zUSbpRnFrXbsKi~~!s}#zKi(!F3}!ggmYPxI$`D_DjrI(ESp%R4Z$Kg z)sORbFWy05Axna&VIQL=a9#juJ{$7Bb5mrj5Nm#fAs{}V!^5wiuC}8(7ARrf1P24b z{lMit1S-U>nDz#L{NyfG`?t1Hh&hp%~7NVoc zHDa5n%x5O6iw3~GJzgeX?Vdl$ZaANDnAHTO9kqiIyl_W>b8(~uZuAcN@9#l=I$bk% zh}oBZK1%L;8vMUq>Y`VD-2w;iApvICAW=7~F^zR2fDaD3yK%N#1HODVLJ^qj;kjzxE_|lOCN=k>f+f*^0`%Fn3E@zk6Efc+;K#if8V+* z2BD=;=`|#4n)Y5ZPW~kz4mqWkoUa(GF0q}#Ft;z%EMrV=2r_ z&yKV7M00`9~|e-kv|1QoNA?rQh!l({<(6p*^jom>x0Txq8o%luvjc zNw-q#seEL5Q$8Tb>(_4HMz)I@$;d$UEJBv8X<8tzj>|2W|4~XsvP-LGih859iYHyC zTuQc0CUvbjN7=oYTM{*3+D`3=?ov(lJ8-LHd}Hlb#ifyZ#XUXl_m-PyobI-D+RNI} z*JWD8=Cm7-F;D&U8t7~H#CP`wePNY$3g7bw{>PVK=O&YN8sgf~Kn30aeqUm}IQr(u z?U!Q~!!tj|*)7d8*fNFjM$#pf&o!t4Lm=4u26*jJ5>>M3KL)Z-CInVViciJ>7EdZo zreI;}G+am6jStd64y1(|SaZOS2Jg!mMu#+nk%}_hYqyL`JTuPh)-d_J=;g`2eL| zTAhG20OMzS9`_p^nyzhFsk#znox3#r6N1a~7Zt!GEY#g@F=19 zD-%67lx?(MXzB`xe_te6^kp#s(ui#ZHzMqR3f}TFeGB(P2xHi&^)Hod&fp#V8ynm}{bPxha$P?=Km?f9t;0yLsX7mg{Cq5-Oy9_3y>Ya- z4!%31Ls+8gfz(RC`s+=Qa{cSpT8_UOd+aJ8ZTF~6U-xu@F($sg#w$I=#8-1}t%Wn=!QE+{4_o0eeWPhHe6#LhJ( z+RFT}rM{rZatsnTihhr0_DJ3l?9EGt%UTU@B(a8``kq2wUogGrSS9${UM{AP-qZ~k zLvq}iZPS|}^uT-q{}3E+0?{8_EN))Y*E_&N3ODDl669OqGpc?A;%Zon&}tB`yrxfq3I*A)Y_s3x!BB5^IWW zjQ%6_J|J^mC~T*-h8Vm-?@wHdxjiw~{8?Nz8yF374*4=m{AytN>l9XZDj&&@1zLbI zAa?l5+@YuSfmM+$Yg#dQ*FfQIX=#{|D_Jz+vR!JYc@7c7LNc_>0tYd~taf-jAy?^WSG(l@tWBwfJrv#+4$?>WZ-Ku8mA)e(|5LxzH)4UrFL=nWEYV*5XP-x5@H>JZ zB9wS-{sh zInVi4z{=@(KK zxxnFyeZudX7TD@g)**xKmOHDYk<{|sHkFD%Qtk7-Tg}I0eRDZ~|7#i6dl!Nurt2L7 zOR&zq$&g}?u?aPFt~AqVpz!wL*FBN?kzO12$EH$>vAWv;oaz0L4VTV&>wOlU%8X(g z9mSU$KistddHaIimu@y7UXt)e&cCZP>I?Q`XQQ(RzI`+w;u=I;kG~yLGnR5Q?MOjy zT=o`giBd>0!d6Dowy;73cMUz3N>L?1EA`s~6R(NzdJTdl zf*6rJ^rm=kyfCg`_%2`0x(qdp|IfDrBJVu(3YC~A8g?-y_!+x+qX0kq$e$D=NtTqj z+RJ{&)4@-x*wk`UZpRT^i(!hytZbQT$Q)9V2Q-{NG8BI`+AbSghL-1>kS%s{r5$()T!w^fIyo-YiDP72H$E5`M=uj zUatyC#m;85k({9k8_pKTyS{zXq#kwejk=}n?03j+kZy{Y$K20OXwEu$wJY56O2}rk z!VoZyP(2W+{qb^2$G!YuIOOBVnKKdW8?bNrx!DLBHE*FaA#)p1R%fLCn82nd(HWgpWtrBK*`R2T z!)Sujn5A3-z|^LW8?`=_!hRUcOY6|9vX>fJR&k=+85p9e!7^dA9r-QWS4x)VF5zYp~5 z*}Ftk_k9l^a7TpIosz)pOu4HRVZ5$E*ZV?PIbGb!?Z6L3^`X1T?>brv3KJ_h@<}`z6-pYND2%?8Af9v;!8T=-au~3gC$7FNJcVflX z#F^+Fiv9!t0(_`seF%DL8PBuj=pZ%F#*4Ugb3-2-wybkDd? zfTGyT($(jv1x;uW`+fM_gvo}cDdHzR41)^Q3Fp?Y#t4RC6f`?&b@4s2#f+3PP`{q7 z^Gpx2rw2%Fj_zn2;<(3snlj83?SU2&qjE;fSn+^dNa_57R*rE!aCp9dUdf=8k22-} zu|7Xs*?D~fe7hIoXMUAB#5|Pj@268Ez=+O`%jgkFinA`XU5=?YtL@!UYk67l-lX*# zWw5a)U7-LcVm};`)r(%=R6hKxI67BDqThkpTkxkMX>x3vZGG}aC3?I30AaDCK1oa` zre1Ap_a~EB9Y=y3&z?L+bH`q_)Oix-$NS0a%46$+Zbf{rHn*V?e=1-N!ct@e&@)Wz z=k=yNIavIoi#_z{K3lb_N6nSgo_bI|FKWTH)6D%hEZd1{ApX1i2!8O2MfOL~=J$m6 z?tpN&pUY}3!OK@g;0OL|5hdAJ_B)z)0(N%dwfo<3LzlMX&fQX8^qLch&0)yCEgz^$f%>cCvs)wrgt$8y4_LAzZIepHQJ6I! zTJ7;TqbVQWhkM7eku4jR+)?`DBs5g|fj=t;RYlgUM(CMOE|+W&&A+@f0aZALgcp5O zw1`B1!)U$ud?M=*3efl=W(Wt(6`>mYf}DAyI*=|Eq@RR7t34dKIlDt-V&pl2tW{k; z{muoWXIS?Q`TMLCV>$01Xr%I^B@kRs!-_GqqXb8n=?9w!jJ5%l3QREiYKPaxl}3B= zdePM?xwX%|E0S}Qj`bF1006QlNQkBrrVnb!k4t}gkva%eIg@}cWNuSdsJ$v4KdpE? zLk}i`!tR$Y+ON*+L*ng{0*We@3UkKI=NQj%Umwb5>Yb&5K|S(|6!E1gJW-`dH;sI? zL=JD&298X!Fdlk`JV`mK`9{{ru4m@z?#wgMXCMkZdrcS#7`#K}8XUC6(Y;j}TSc=ntk*ANz9Qbn) z(;mni;PqiPJkU4$0hN1lekk`3%;EQ19*HY`JU(1n>n-*Sn(s<@$3 zkGdPMc(GcnG0j$~_)Hl>KHlo&gmrzBZpJQm0=?Z@wyA150wC{l=qM~Xy@|#ovo6r1 zJ^asrDgMZtIG`J26kh%EMv{we>w z@t4_#7Js-P0_5(bCpS=rYnOxYTu%ol_>kwCj%=y56!%7UqBFS|>6Uy*1<-!jCF0frP;wb^7xRSew(1R!$CG8v`qR z23wKfEs^F1+e`jXP-hRswj*KgX3InG_%hmTdcYk+#1WVqvF?B)G{w9eK4oQSam5Tk{EbVtG6%q7U2$MEnpB zZ@mr4cMu+4 zmtPh6#?GAlEh_vh&kmY>V*IvJl@1s?zOPl7eI5z<3%_!UM~wriG64O_>9jW2HgzO= z33J#aS{ID@&|cKhI~I5H5Rb93%i4LxUv@~5r?fBAOABXq8cq+NGU8JO&5pU{yMb=5 z3Xp6c2w^lic4t&OC{8TS9mTNl31}e@E2mA2t=6+eis~7t;tB13RLVVqUbu# zAAN&e!)&ST%0Y0g!?XXj4&TDAL+}^=FgEM2jhOHBsU16Nj4W|ax?Fc1QanAW2^9Qh z0rglCJ^|+Zoe%O6I{G=vtZr`v=7>nFBH%tg_?;Q8S`(eCbM?}9S4c108TFK_y>rcm z=kHmO{OZXnB~NTdK~*>cIs1vICX-)A)X|;BbmQuCuVNlCP8hA*c!-rtc-T( zdj#F)6vokE_)=$iOWRC9f(8OYJqV^IBFPXAT3(W2C?|NNC}=VaBA6&i7LnGj4`2=^ z&FD03RwZps#G!YnD{Cu)hYQrx9Xcbs=+G*3m_`C#wSX-0=;)VJ$Q!N8#7n^6bSKjp z`#{U(i$ve?izx$XV@Y^5Mf;bg$nh*YwPwC;9%a`${lcn_%q5%B5<9o~=j}D`IS9>u zL{w3rSY$yBQXz*#DB+}22`P&YFF-bQq%rfzE^~!v%-`s>QK-eKI&+;+7P~k|gY$63 ztQ4^6x^l8NNv3E24O=Bba{*V1P^Z*XF5uRxXUkE6<*G)+iq-qAs?>}^8*p?!8#45= z6*a|(12t{^6;d~juuZOdY*t5pIAlzLk~SprC<5W`HY~G9I!1LJ5ZFOA4FEO0bbn*P zOGB86oKSMw(7-ef&n2E&cF7USI0<6JZ%EXj@XCbx8o}WXc1fquAu{vyUqMpu6O`;O z+<+pN4{EUD@Tl`|C?qoxdmSj4EHR^b%*>ujg2PEMqU} zTa(7Hf+!c5c}}2?Bo22nmOkJ2~SlYx=If|{TS=LI*`BRcG^G?LA?GgKzuPaD*6aIXJeme-o@s`za+!W zkoRBh6_vG=t+kRW-eT2X_j`s4M`n|{U*#?gt=%h^LtdVV9_6s;-2g;1;z>o$YIyCM zr<<-MP6JFBc7%sW2@7o_Vuy;41gDgy$Y;24CSg3>iX57HoYqw{W4~CsGucE{LtP*E z)BPVZHw;)U$*crFw((5qM&Tz#z?U=fZoyy@hYAhCM-0k5K-f+R@&&qpN1`|kyI)ah z(d;R*Q|KZKJ4cUUD*)LQv&HLL%s3Ux;qS}H3$4QD`$idUmJG-6Hig;wMcq+NA6U}a zXvd2;fhwNs=UeeOrrQ;tzKkXe+UmJMbN%m>B&x~W$1Op%u9^ujR;Mk(?~g~>J%t8; zK|4GU)nAFCQ3>+-->|;Y;cDgZL#wn@QyLHU9qj} zG_?oYoS2rovqNAj5>#h5v3nI{UrS7?Eo;TOQluh;epVU=JE8G>lexPX#VICUiA~bh zPQi1r#BxVxyb}6n@`|fsHbL1~=W7!nPu|$SA{rJtHS18SmCCxU2*4g#G)Tv}xrtaf zf^5SZVkCNHUja98Z$LcG6gym@>`1HfM-%&uvAptkiClk5qu) z7#PCfDkIt2u5eT{z+szk9lV%X_q?PhZ*>}aKv6) zZxIz;L=thRw5WEqudH6@e_C5_eYEwRIcc2zdArV*3=}j1Ffi_XXFGR0f1miAbj}cX zKSCkX9qxErK>V#-@W%H7mJDt)Tse}#N&NB+#6k|27X0bJi#g<(&BiXI~5083}-awANGq~OvC2WF5wu5OlD z7ltveF-3?9y{y z*@H77-_T({#Owg!JDEjZ>Bxnm^s5rP@4&DVhx}nt?wO}qBl^?=kw~TN2^abo2k=~a zqp766Hynmp&-`igQyr@NtnxceeEv*OB^6H(WQOTNLWa3Fyabo>Xccb{>=lW6ozl*t znx!+lZ1q#0nqe9MTg}5P1pkci#hXudkkZP<=8`_#Lq)YHjAD~a`q7*!Z@w%T$5KgnfT{>2#9EPYw%1w zAu1vVbod?7tzK=UOF7yroAZm~hwygLu3^+2 zLUU8-Q{^J09qo~pDzda0G9d-!Z22`!W67PAC^1E;j9ih&HHJ>hgX>Hg1koZ>p^q)> zEORJU7tA3Vw0P%Qs8S+D_K4id*~kv`(4oc~)JoaV3uyFXkyBv_);O%6$f`U5}e7Ag9WP2D}sk6)N{Yi zK|UOc{)R{q(b+>~KVu8UxtQ8isAaBqg zGM2*TiVYcWzVF!_Lk%6sIEz=2W=*1OSxWMg59D!YpX+2NvveL5c%20SaD?Y(*~{$v z6=-h4&1v}@v3}7}>k<1~$%XW5UkE!kqsUb|qTPufU>U&?hlsTXU8gFjyAN*Gz{L{V zkt-nsfUgo~4Bri1S?KX1A&m2%n-f&bX|n|vSBb4{7iCnd{wYCOZ9_2(u{Ag6#4yd^ zt}`;FMjxT}5JSsrVhb15V6%kECZfShNdLoTMXILQTG2vbGtBaVdImn@7^HhQZ0^#OI?03)l&7^R~lOq42l`z&F@8{yB{ep32KW@%iVNGUkhK;|&bO z7hhb%m+r-_kZ*CF8;ebj7Ox5?e62)5qQgPZBiX9CBLiy68dNKxq3YvA;u!eW;=p;6jb{p#Xe`ZZHW2lVOQE?N0>x_P$Vf)(l7{Z5%f<%66kk6*7;=# zIO?iFnB!NTe#dd?hi>F6XL|Q!v&fiJAzcjF{zN{rf6n8Z4e3NZNy#rd743(tF&Euj zz>}uvKZcQ3UGvwYPsDYB*Nqze=iw%mS~=T*LL`2W+-G@>&%ICfd~?6x1`y1K%y9F^R1?xb*52RJ+RnAhL>mwKA%(ighh&2}3y!eV5=wmM&;Dv?Yyv z8iQv$69KW(GA2)CybbN3RDh{{=Ey8hMhb;_l?tleuS9->>lP#JPVI@7HY&nQ?9<=V zWh_7`Q`=&L0HoBiyjn9)KQKG*n}C2KV12rFZ|~y1;wt$lAK=1&W9}-?r5Bqc74Ev z8-V3dz5Nflt>Ak?DgT1y3$sx2o*!oKVR-2#Tz7~&aVNa9DdU7T5-{xQd)bd3 zkQc1bpsHpXjGw<{NQ|I@{KQ^iz5E|6-|&JSui=CAO2{3|F@2~3>U(Rj-Pu>)5Y^e2 z>{PH~`rM%vI@P@9bk-V+n=SW7Q&R!MWSCXmW)YG9-j|#D66u|R1qZaiYOlo zdZ$;h!N7h&JyVYoHy}ZPUmdWQ2i~k734Q#BxeT&=&oRLYb@k0&ZGGO)d_jP#5^Fd= z|3{$BqhX~Fg?W7nh{rGppOr&xNEnhmiDwztqNcq-KLz-Pt?e+6mOg|i=S%I`i5NzH)d5-&sz`~zWd{$XxbKAUSKzuE1QC(9r}`FFIDYn9@LB$t*)hcgrKcg+B zstk0-5tR&T1-`dL^-OOcou~%C7`;6=2zEhYSe23LQ4TtnHZx~j3UL5NDK8nHjymP9 zZ-Li+tNVJkG2q(6s+o?lP;2+3!Fy;peracqGbP`sBT6(_C}pwuEo?76rv(|Rh2?Xi zZ(0?XudM;0q7C_x4%NW<1zoW|$$r4){|+}kKKHDDZo%#`yC|_wP-yKFbb`wd7lOVtL=(_-Q z#;o-ceeXrJXk#pFuVHG+#^L5*5kK6&tK6x1j%dNzfkFs?@I5TL2qUw;#{W5tQ_xuF$vaCW(OrnB(hHp=P@j$U*6j-`qfk* zMVj*vBwl2F=Ci*+VdGCmydv-C@T)jr+Egx~vzbIhMI zGym=vE+ZsBuB%fg>^HupbHR0Ksd?T5VN@vv&!9G{oPOs^_v>OYN4gWDJ@mJnj9=&H z=nhlLlj(VzZh_psd{)GUdZu9hu;acUun;9G=<&OWey*Yi&#P!j`z|V_U0s}bank5S zTgzl{i&wo%Oe^OK_J`|q%Gi#GIfpW48WYUl-+{vJ)`t@_jq7H*5%AkF$dbv8f zcb*@B!gP~qSR!E1W2tuN`-S6!X^PpI?$Bz{XVYkvpJwybyC8!I<)r$8=@sBGmKah4 zS_1k-X9^uB)_+{B8wxPbZhH$df^@DXPRK_TN7Y@Y&qOr!XXUGTS!Ob=($>VEfhJ1u3K?a*ONF(J({sMt3p}3q zvP^P!$3Z_Rbi0swkmoC()RU2wMR-~fZ9lYib@OHDoKRlxuS+KRTmr{AD-*~1_i=gvc!M&1n4o&9*Z^nbaH>fF6r$`v)xxcl{*R=IILpr<9j=&Z|!Om-<8E4}#h z1#e`HetRuLHHGpzU=RTFJaNeoxid@zQxStv%n88*Dlekal8id`(UPfZ3~rw0oR3Mb zD9h*;WOc!zEx9sY(9;6SIGQ!A^h=!t6dX}X^!)VlO2IyM)e`N=gXsmZl2{b;E5hKF zs7)5RW{ID1=CWOLtPUno3@Vq!yrUixSsgK*Zih6cQ(IE!3hP4CY!xtWt4l0_INLd7 z%drc};sZRKZ56qtHcZA81m|8i&d#i1oH>w(x-fkWGc~ zfVoinrs2kmjYQau!282fU!nE}KI%g6$mzjysT-OgPlS+YKydoTo3kH|T6A{83qC`z zmC{Q3K}vctIw8fpP|MC9>%Har;GQnAz9cL(eKd&iFCLSNfSMw+(kE1s&jm55}vuC+WtJPQC{2xN3*5r!TB9fhPNpv;AC{z5~GVwuaXsgag9&~8@ zp!wXwCoOmdQZ|`ik7XSH-1o zD)g9aX|B4HcuMWsqrUpcr|24do58sP{Za>Pt-URi8)hTmsG+mGi%v<2w-ZCB?mg(+ zvb?>^m^dUdQkq#dxmcv+5Un#Fc{(nZqm1c)Qm9Bg=~kawD!kk~^s?-h&Zlb9g<3(D zbj$AsK;Jhx#OgXkof!n5 z8D`-aZD|g00R>7iIl_(KCi#(hM@w{H zM|}}+f_1d(9s~KTpn)YOypKDP#rd25%$<6rIUOopW$?c`sx#4VeqT$9OOvV7+k zrKuCRT1h-1A7_cYZSo3H1Pm_s{PEbvaXY_+7pN3=fI(38un)G8fMqYI#KnbyMyg^5 z4R+xpgy9>5YrnGjEUJ#4`f`)SAG7UOwm&ugahFOjYY_J1%Z132SU_Uf-&jI&3N(AA zzO~nc#%kwHQ!{kK-1AZVA)JpBXtJN7j+{ky$PVVXhNg2OH-k>8%E~{dDczb3e6huu z$9|Vu0Ziqcw}eI;qxzq)c)@+}z5}Cr9_4F9Y&rgLzZSKiCwi`P@kSpqq$r zjg@jQYY)9=jOp4Jd`;w&Qt=`=B_G+>QXj*9!mTz)dlb^?2E%VN(PFhPZ&RgrcvRLx z9@=dRE5$jvco3eS(^A^z6yS!RE<%{WfLZspkkb4vAKSugfSW(24X#;6@Z|{;j&n{L8Rrz&o>Hvzy09Y~?rgSo(NLOWxH*n`RHPp-QbJDRdL$&=7 z!P&mf-dlbv;|yaBJ7f&l?NTGrE1$XI%X6gYl72?P^#haQ8FKzf|J&>%pt~?I7e+Jg z?PS^>@x`@a7`_|oey=k+R{*cr&d;{&%Kk4+uD$qZT?pmdHxIJ^YH|?&V(*gv1Hxi< zw)_W#^*8>?#grB5AA;2vVT~KW_z(XkTLa1iX94MBB(cld)0n&-#X%@A2{ZnJgeaKU z0CF$_1U?o-5gs?THevAr*;Bnzjn98}HfR>aYdRHtbv6on6bpU`F*ZkGwU`|Yx{DLq zHb97;B4F~o+VpoF<^0Fn!^IZ{=g#aSo&D^p$8qZYTWnzz(eXeNAmw-n1IDbA~|WO>u~{|0Wq$zQRLnsDbEGo{0ye@9wE#{DTPMy<%K1d|R}$aMzxS52eouDHMIAB2I9sxV|MGz|bcaEjZPU7y(tA3x#6>-> zMH{5TrefqAU~9W716fnAOw&+2*BD)`^XWFQQfe>HOuA}Ge*ed8gYkg(d*}vVlB_0E zN?>D7L!xge3jYdu<+urUTD`5|0Ja1&ymw}39k1lbv~JLrZZ@qmWP_3HX4~G&PaOK` z^pxf5^baL1^RPw)(wJ!LRrH!N$qgy&li1`e^DNRGK%|#mZmPrmeypq4FgJnuw>wf^ z94EQDTLl>(G^ST?sJW4e?&a;8?J~Dw^CiT+}l>JHtx7Su-lTF{*BW;bx9eXuRqfC9XgR0U-Y2Z}fxmtf6ZV zUrk@8*m#oSlrD{8BhyYXu|<2EWgu}1rK)ZOH8WrJoEBgci^n2Za{c~7)T~wmL&2Ow zVs?yG$zjWt720-c1*%VtVik@7Vi(B$r}=MkYq4V14k?2tCNXkIGI*__jHZQyn!61b zS?yi1*$o^WW6h6LjcPn@<)P+f%6YEX0N0t9y4KX9sP;L3?g1<+z%<^92$MT!kq zmwAKa#=|${IAXr#xyWP}b^_d=4{)!K8arDvL7<98NQGZ=a9MJTG&~WFr(bTV$*Cn` zlN7b}>cF5_+ALDmJ4)JWR*E)1E=$g}1$H0kfI%PRB1a8Yg10vop~?clNSkg^HLfU^ zUNxqZC#N!I9W!GY-IaW`$l!#8#5rGo8Wy%%&> zX+;=L)#x9W#PET_QzJWa0(=r9b4iIt)5<3IER3B41<_6f;Z+nU^KY z0vbe_JYGh9C5vmO&`U?{foM)Er=^i??6Q!bBU#Q62`{NGo|3_;h$+1AsGEG*SvD#1 zNlZwTiyAOAnSgnVt|SVN4sQYtxdIQ-A(BS)nujb^li*Zs-MI?;_T+lrY@`my%6r2NdYJ>Z>yh`Z}`2t(7-%r~i_ zNOzV&AOGEtmUChUW(!H3E>~nNIf43pRzV|zkp#_ADGAF6%`5a38vbOrY^D}qOiU0| zeUU_FR3+i*mYt)MOYu7qj&qEa^pi-*aYWB7RRZ$YX4++ZLUN|{tTrHPa8l~F1nFv8 z#@e5H!|Jj)5s(FL^?Je=pk1a>1}$wB1(9CHl@ZZ`3@=Xq@~zhJ7H)_+KL$Jd`4P1NE6R#B-3*Y=1mxBO)d!pWfH-Z!P$?4dq7Mnbp~-H%fmV>K-6L-Ya=swmC#p-+*jESY%aM&+eWnjI4EEYs z(Kk}=aKgn75NgjOFg-|o_;o+Red!jTu)wIsCqQj+;>IVP4sPqGp&NkHx%0S#ztj4y zw~i;{?Hh~xYce|gSUwMW+_nNes5F(2`3TIU9RO=+C*txpRfLd1nqaUbXk}yDevE#5 zmRDo33rE}y{g*h>B5ga4IEq_-3i$|Pu7jug-7ZfoFP#p7AEdL$hNGa3w&sS>3`3xV zH1EitCt6~AzbIpmez|dsVKkt<2(XUSmvdDod@~+P3<3Z;H{GNlw6~yE6h#~Y(`e5K zHGqG+iQwiGffM1u2*j_y`kk`i(YzIze`Mhata^xeIYyilH_n;DZ>S@um-&fRulK66 z7x%XvFD^`AuTG3uXJ!!A;X7?>urR8TCB|--M=nMsMvy_*77RL=HNkdza1Bz56~c&p zA0LgHLs=lgF&aQ1(iJz6a*HXd9S>cR zG2m|4R9GE1w-ODuO^JTbQvS@qd_!}%%gHx*x0%4AZ-P`U^s}wW$&$}D>wEFoC#AAo^3X>V!v zJy-FK4=r&=PSEJq15o7TVaYmF(}ZVM2MUtkF|op7w9zXl;*1Oh3(SJc_k5O)yk!dX= zoKBD-f;kpUw^((~M7NIGw)xU|xC0&6&K%1n`aaV!c&G!9CRzjL%8*-T2pbXaKf(Um zWZ9ki*?hu&`xcJ%-%Zwk_E=v8>lS$!An|{Q!hb=l|0;xlNdv^gK{R0kCH(KkD=i`k z4zA^n6iDqKif;p<;}Xz6OkqODzlp_ZR*7&JEjnmGH=zHF|HUHa0$=>+>Oa(9CP1GZ z3L~PgT(e|54GAscPt;W*cuN7-sMY|g{L=4*U+~g{^KCoPrHIQo!)7$PRuMME^3a|_bV;@F(4^@=?{jmLeK3n&=_liO(6}yX(i^E-&*>sIxL*s@&eIDvPAZIejOS z00?LRI38VGyxTSrFL^(KKXi)EdQR1MTE_4Wu{fR0N1n2c{!F)4Z-^QLFFI#vS2+vE z*}^(M+ZCXt-vUS8ZV8%(Q?x+X9itj5T6GT_9m5{|pWUAcT7^RPu$U>_-~OI1tIx11)v*KQp62 zU6>c>Z*q0o4H__cntu`;WP`ri2RNwrUkqD`DLug0NNBaQu8SpiqeO?%d+#Q6cGca9 zk#-KrQ6k#&mbj#OE)8IR_UD+e0}&u!GO|!YbgCwbr!`-QNso`4ODw9uKNU(|Go6?F zRzDE401vwiFIV_uj?@WtsUmZX(ia(lO_{d zuMWUQ{zX||HVyj7)0I00fuXUWkeZa}XmCH>?;I)N&TS|~u`+Ic^k_m@!cMN&_NR7% zB_`fTb3sHjo}yD#XNWHBgu-9`B=>Qr$m_hJAz-yT{-Jp@3) zjtwB3X3f`K(5!Uzl|uHRIWwO92=2S+hzIztp58I8Ur+qk;3UX8^Xp2bhoAw7W@*(x zT|PIZctHihY1F9;flo*1tXhB*tAnHs+DqO3(=LVN@YWVdt`Rl$SQd%_5pW~Y8`%Qm#*NvaEUelb^;|8K$J}ksl zIW>Mq5b;&6yKuTc^rAs8x#R+nK=~(*Jm8NUMe*Yt4$#*_KkM^8h&JYxCQ9n!4>>=& z)FRVzcaA7lw=QqBsk$ZwpUiPpVAZ=;oiOE*~eh7 zgS{cBpvtVml6&H-y}AbL7WW|81Sd0Lhg@X?arE=X_S|QcsIcc z>F;xHC7Q|!s}BbJ%0V}vLnCGyN$>t44_xh>!KS~7mm`nISs9=_Gjl0=luh|;%&b@~ zDTOdGgyQ1UqZ3R=i8R^(ZRbH72rmO3uQXrAQjmk0xj!t{24dE>V`#@dffe@!vIS|- znZ^pfx=k9L{|;CSz93n=4Q0#l`+l*MK*yakfHfPG&?x1r$UNg7$`5Nm9?;o*dyhWy*I*0+gUJ2k2hjt5=Y)xCn3^BqtR1(N` zE*0B6TYZAH)cng6X5qFLS|lvsUJnA+@Wwlrx(I6sR)96w!6&;<&UK7()xg=BcHyQu zM;X82p$p$*NtWa;{3JOEdV<~H&jAqreji%CxBI+Bd*~b~8_1V_AunG7ehzsrwVBI? z9AO+!4X$I^DXjk06WhQnry$8D^&q$hp+bkZ95Eq)}AJ-oAbYmJlBnA5Ujz!eZ#@|zqwAs50U48 z6PCXclOu_*tN%C@GzcKVf&HDdG$^8lqW$kULs!zjYutB5P}CLyP@pyN|4nX=mM{KY z=#bv}K>i+YsR9P_{`WBkl_CJ`1`*tL6h9iw>b!7 z@v;#6n|y4?ekD4QazkCIkG;al3KO8N?gF1dvv9xzsWsDG7?`@84L7?PM^|~j?LUjLD_KgU5JmxDHEkrC2w8#3Qn-Za z3Y!jySaocE9l>hmkC6hoj4G`v(80wIFtO4gNOV;yG^DU(>7d7hx9QNT&ydw?O)OF* zH(6;Mk$2oj_JQlNQPJYSSt^BRy0i%yunp}sH?Wx%DY;20M)iP&qaKBDbLMT0Z#_s)Zt&QbksCL^kNC zZ5OKI5UOPdI|_Kwpfi)bXl4rN{DqZ@2V|H{-8zPX1XEz(_7-aRivQ+}69b4!o+HDq#LT<)XMqGw)M?nYA z3&zm3NZchG2W=`UDw;GP=hjn(Kzeg=2cQ%)^7l>fDl4&bLFh1BI0g4}nURiQW4GT% zmD{c=sSb_%y%X)qv&WMzDkbO>&SlkX7_6?W4^;2hY-2~!Nz3HQSz~810xT-W)N+n5 zVz~fiEYi^i&t*iY3q`FO!=n;3nQOpR5kTZd=D5bI8cgM?CS-PlvSgP7@8i^>^|5r? zvTaIQSUpsZs%jw}v`nYvrqKApTeB_xJxt}BM4sb1qGL8W4cw_CV2+T&d7Z(tXHu5_rgP;>9Pt zDD_0cwmb-(d8L$@3G^)Jum*4MupPNH;**Ep?`^mX`2|5)%wE1j#=34ZO6ycX+48%} z6XL+sJJecR=b*-c3+a$jF>DiEt`!!ruqb32w3g0_LB-!8e93Zf=afe0p6L{~ZawNd zYd8Adzi-seC@&mpZEfx9*_#Y;@^Oo3w~Lje4%O$$x$8UQLLY}<4%c2tkBfDoVTMjg z6qpg1>)^cDyYn!yQ|#eRqyt%!C9*n;t=3eO! znZ{4o0nyiAGBPvf4yZL59&j}P<|`D>+f@b4qRAT00)hwGlH5@$Iwi%MR!Vt_qxXD< z+8&Zu4INod68Vf<)8|M^{ghxjedYs7$sf0_E9Rqfx6zba@%9rhOac_mu{db&v4SkyH(4qe$w|0roQQ;xr%eL z1l2yuN^b2lQZuM!!LPxk>nF`T>zk*`8#C`z4iK|;u`!C8`oSwoO|>0SuGb}O6rPxN zFBz>v1WWFxGxIMWCNKVgS7f6oYY}I4WxZ*o7`^oTlO`qFhmXe7hK;Gp(ej%^ia(to zl*K^!M%??Ak86~wik#B1Ry-j@c4KEPtlj{XY=xCVSXIV!K9lYRNs{y+kQ>m6t_imW zVaqrsJ0eSNsVVqR`Kp|+_z%n7D) z^~NY^a|cB)#-gKO70ewngrKTWEd)#T!W$4t8Ge+>afsZw!5=d zX$EuPAJWGK)*W%3E5;hnHJyrC_oIYXks`|`hdPQgqf)ph2L9NC8OwGfOfdFtce~6U2&R~du`pA~VrX_H)YvUXcD;)5w4-ePM$74H z#yb|kC(*-a^-baXGnW(uo;3DUn-{HCpwgC|bqkFq!_8{@?H93Vb>x$k)i&b?bu{8$ zJ}#2_uNJmB{8;JUAoGOkzcEyE%!(a9M-wCUmV{n@}zr* zZ)w%56birRs3AT}tpG3zdWnyi6PNlJ6f2goO>RWI zMk6<#Y+tNqP8WXxv7qr>M4!PrR42_k4TDiAI1KPZxWmOWq7;5M} zMY)2;(xenXNn4ek&a>)$usYvm9Lnh?j~WKAncl(b@7*}1mDOM7j~|_dDTf>rM}_~7e1oE&b`txsI>zAY%umhNqyh-^z|g`*1C6T+ZOxAPD) z1b!fa1{M)B#2HGBAj#N1=rmh6I;=t#x6HpGs?+gBVg-^rGLj4OsW!#Cp)!MoIW%WX zAo~yiOz$_-6!CBIhcyR&@VeZ-6DB(mWA0jkI>QS-!U|GxCSpq^sb@#u95t?fHoWx=tXes+l^b_IX1GlTSJ;cTVq zY`!1zWW+G+PdsDva?&y@_BEZH1cDsQGdeB4*r(E`#q^SC7at<@ejs1`ofq0(-mK1a z+Oz7 z|8iU>v3LG}w@Y<*ta!`1dvwh70r+$8W3)>14R4S#JIen?Ue}%teU$=t1pF4{QDBOO zklq{+Ce7V8l!uJ-IK3$?0g3ap8{Eq&xeh)8!~N4qG{&=)c964IKYQ1#bLgp#%|kGH zkP~N;a#UD37QNS>P7JVo5t&*)(cq8)maqoysczoF%UsX4OE;S{0c^WoN3V&=)&lSygeW_&Cx zkL1c(x(PgfqQ%<+;u{D=-sq8%lKUw*VxN}VtAe+6F>|w9Qu=}hEb=x9RXKe#8;zA4 z@F^Wltx1~c(%Gpx^5{dp?~4~EPZT)IIQhmaW0wBOto~h4f4HqR>wb9|!v{v?*;|m!Ywm_l4%gYlzAKMnDP;S&} z4_W!0ss(gz0FxuQ4X`jbr3|@H&ZBnzs~XkN%=mbJZb3$$zWqVLXpuRRFq?ryNVP+O zlC8W52SbuRRgwVvfXgNcldF(mNeb6Dda!Gk0a&?O6T8%cxcoZw3?yazThBncRS3Mo zACPK8_-$D)IB%Zwp{w1;QlD>7Z~opnSxY9@_P^Lf(HQ(IdF8tK$M1b%)`w#-Qe?BYgl~)bxdmwz{q_?-fF5o-!gt}RGETrz5?&ZF zfASk=K<|)0)!78;7yp#$uBH0(`PZq+T^TJ|2f~*k{{8Wz}IR)dzSQ9~77-=4s>S>0%O8g{ll zpq|} z`N0Z#u*m#~CmeifA3sXgx02@EXyOKb7JITLy{7hMgp=$5p_RJHJtw~+r3CwP}u>Y_Ba9ZCD7;0L$CNO52ryejIU`+`{5Rq5dUv?Lm&_57^j_AjC6X9=y zcF?~_v4@B-EB^FhClb=oanGBf|H<{3#whf;26>|x+msEK2;4WMGoRwz;N5t>e;twk zmLw526Y7CTEXV_G#1hR&($5eNYs3?cO4ezrG@ybQH}GRPx`k(kp~5gW&vUa;w&@pQ zIAF*bHio+XJLW1=F|A$)1b6?+AvZeVO!T-j^$6ZvhkCDAlX)s8IJ2jxK`E~|3931P-B#lLlQOzhewJdr3>x@n%r^EN)llvBZ&0Wy+Jv^i+>M3DUdS z+n`Q!Nb{nz{gB59x{o=M&Uh{&3-j>8#IoOY`+qc?^7&J;vZat%a(+n4M8}X9BLjZN zS<^dVh35F$;id0#5N7WlOXQyx8|sY!qqFiX+`vk!pt<^KjzH&}X^0XCi)TZ39dghu zG#xT7x!M@~Fx+0PR&v9z%jACjQ#v0@ZQ|!Xy5S)$K8x>ELNfX*aqpTQ7QwhFI|@+B zPM;7J`>KUKV5T?vgu;wkk(zv$Q2}5UxxgrFtP)Y=*u-@jL(A+?-%l({h?k#kRGmzE zH*TXTB5n2UQVfw0dy#uS&NTd1^=InA5Bmo@L8I7-+4Q7^J@zyFLkv9J@z16e2;$>H zReF@^kj%y~2bc}C8@x{##BesBq8L?4?ucdOFw9n&bHZI)B9^DY0BA;3TONS$999PX z++OP$xo4b7*Kx&@y=wV%!75f@31oIBY}S)RyoVvEPng?p$zqW6r_E5$K|lYjx2nIV5IUrGB{X6wjsfHVE7&?mkY8l#Cu*(SFL1*XYv`Yb zH@Q>~f4fSfl?{_$ec5(yB7yzic;E6J0~i(lpU}S3_it#|{|N`tvK9$U@{ciZTHhfA zY6~0#2rkw?L0l2-D~M|YBezs(0zds5=f~kdFw?w};ZR%B=z;qFv6N2RQT*$0H5Cpt z4NeIJI<2M*4!q^`5;*eTpZ|5_MM-rA0!!nY1%^zEONT>j(eVa~{YR1h`^jlvPyQ#^ zr)_6{Ej)<%U;pAj3LJ*~-zBBx>uo&$ec7+I3NOt+5{L$3MyVRdPJ`M)1``7lBSLqM>hig)wG8Usrf$s5vv^%u^dnr#H)7u4b{k&IugB!C{epL=@e#K79KT@b+F znis!(yY%c7&D^CtXoAjdR?120Y z0^FwM?HtiHo##2*GgeYATK(ESFWKXdEc;u%^rx)fueU$Lk7PIPuVL`5_AU56!}VF7 zNR#x@Z%3ZrpaGvE_zPA z!X{Co_HVVHzdXKY_FGIR^v9Cj3lDS=dPc6sjuB)&Vxm8$_qU`T#rtozU_X|H6+g0n zr;q`N$bw(^Sf96w?jM=<`DLn^o)Kp6#Vy}t@BvKE`~coJ&d-&7dXbV((_4L+4{Q8S z_D|W>PrA5I#%BW0H&TMcgKnnh+Rh%f=Wv@n3j9c!q5K~hvPG~5x6`zva7XbY0x8Dj zI?7nZOb66cD){5-&$qQQs@sb1DtUiU)617t^psP6l+O$AJsT-Mo2aDcy?7rZu?paS z@N5=>X8^1alZ(K;=Mh=w3qs2TaV?s$)LdvM%SVJkv zaqVH*m~W(tI~{y9IcAYJaLt{<_MFif(OAbbSsS_yhs#%*Wao}(v+Lr2uhsIkQgT$Y zVrp{RDH5T_R%VZ@C}6}4qV!1^S=KfYo6O$HgaGhv6m0xx8p%*$L^Fi9HNT8WB!aa^ zCgMcbgzH2&P)E*ZIh&-d)fXnLv*@J_Q$+9YGQKPGCKYuk$+ju?CphfNkf}c(7sc1p zts?g;!R<(tmKE5#QZ#e4wzHB5iDd>=Ne9){`f$fw4z@E4VnQ-%v4;p}+Dc*v;w2oq zN&^HUDMYJg45T;O4M>o!(6AW0Th~*$aq-xh*ReBbU^=w=8H@e8xEWk*De4NBn$zW| z_|*&x8cyOFJv8WJWoHJ*EyN2=hf@y~yoqpQ43go>9{LfZXC4Mqwc8mR@Q86eMG z3dvyqlL!(SvMO!*RBonyQo%;bO}mlxGOi!=Gj(OIF=tHOEM=;J6F1>|Y-G|Odi^%0 z*V=vqZ*S{XP6{PR z&&gu8;%b`Cm&?b`$;Z#%(9{R~P>uzhn00%73$yF790_4qFioQDA*ZWgd2`GdA%iNM zbH@p?V6Mq%B+_*m4@`h;fD71)Y^J2fwu*u$F{0EIzJUS+bz(!CW*xEDBhP zwVJWu^hP%u6o#AxZ-#Qlj>NHhfTilA>fu0qSgELYY_6 z3kR=i(6lZHYH;g^8co&)j8yYZ;QQBwGNb39tRgo{3!6mPWHr3v0c=X4IE;P$X2W*%$T0u^rk|Mv1r%zN&fnpYu5>+m1|_f)iwgu0z@^ zI_vjpYKN|M5y-5v5tvBL{`-}pN5#pa;Q9zBtuMmLl9A2qwDyx_%a4NNVE)Y@a=x*y zD~h(nGo<>|AKAlh+fuybV`ps@uCW4RdJt+^3oh4eycj4@h!gVTHZ$=L2)1Y?J*VGq z&u(D1%A_nRk*^1H$!wB=q2UxEEM*S*3$6x=)>X!}QuWLiOPtqair6=*AlAme>bCBb z(ydR0a-kBdTZ$2Ix4s}5UvHbuv#OGGidf1da}H@hO_^MOp~L_@$6!)fO65uU+*?%l zpP@$KbM*=TDHg6t@1Ds6!Z+XMT)uG%rd#SPw!skch%TO1vebFx={7EFq+?GJXtE-_ zYCbi8t!FSWVXqsyLt+fCXkKJfw=6qL&CIvJu}LkqsPvJYQf5*eyLC2o=c|#)g{5QX zti~!Oz~;}kE`ye3ub@yHOwFW(|5bF%Dqj)f(bNJ-GABmVfrIHvN0xZCizUQNP{+@O zhyBJ_w|? z=kFRPiRFNnEPWW}5=%3lRbVZq%@4nP3cO9tSUHVU9^D+%vKy^)z51;@M=lm?x7MuVQJpB}RSq-7H) zGOV_^;!4M`ZxZuM^tsHP#;*LyrlFYQACnygzh14nX-&6z6_lHMAx^ zE2r+-S=>{}(Bj3SIJcL>pF936tAtYn*D^8;@3cCyUUJ5M>y4!47u_){GA=p5Z9BJ| z_A42H2l_5Gw~9UKT;4IMl2%De=U&_)qfq11bIDzp`Hia?ilwQz2CFbv&DYM62uq|J zSg-GzgaO9mR@>k1{hcO5h-4FM-Z?3(QHtgaMpnri7zS-;No3Y+JW--r`NWQ?jJNUN1tZ1L(GNyvWb zK20eFfG3KX3&U&)$3`yhUO-0xgmNS(mIsTL)aJ`QQn8*^>ATJW2YQyOPvk2v|V$r$3OGuDAlj8L6;H1^20DvHZ{{8-)f?@)V1YpI2N5Mv@*KH$aSuy z#Rynigr*; zzmH#e5FhP#^rQ{Nrc@QyGO0_NX8N=iaY$BBW)oj8{BgJ)X5HOmEw`E`*G_e@vd$7( zr_Yz!WxZ%VEQ)R6O2catz-_tR6-00<(ozuSek z>Dn`6d5Doka4_VS4BizPfLqGlupF*9wlV(J)pgbl>E$XE$H(uO8j0l#mYe=WCzxofoJ1&v;CX7;i3J+xO==Db99AjyFumLAVfw>q~c5wvr@fqo&fS zL9aElV~@i=XHG>N0Q2gRCa>_BVo0gKe>_sQ{VCUXk6R2i_@`}|&^0kM~-Do~`VweVqz})gh);fE!ZgXS$M&>T7f}$;J z9PmU12NxP(W@pZ@Gp88O)GhDF%E$PN=9Bon(B+9abLL|DduMGk`!62DK~sS+Cb78o zv>rb${&fv*@h2}Rc_+Gfod}HU@3H&*uG$p!jx+5TYus{}Hmr}R+BzIa_E)PjnIt%0 zkq^sJTO8ues^}Qo5GC(I@5bCx>p(AvEz!wT5P#*5i5@Es%Z7_CL*mU5rs$!2#8l?@ zwq}4T`ynyMH>nlM&oI(;qaHYj7ONMpOl!rF6SwVZ1*o3K%?_QK>XUJt?+t#lv%8b` zK}Zf;Hnc8;v;yyryNWTHu2scfF<9Z?RHIn!MHE!lk2SeWt!D(K}>UJ7c3Eb1j81uJn|_|A*lWoeBuCqo;& zXvxD1gk6K9#R9X4xn+Q!^)X)l1Y0XoGYEXlder1!QT&nzxfY3(F)*FppzMK83FBdF zgKH6P)>@1=N0CPfGI@$4Y-WIvorpaVeB0KEvs>(KR9}E`Lbc@H5Engt2LLokcOJ(o zP3Q=`Ronj=Tz25=w{7#C3Ki3XOt=cKa%B{}fR zki?(q_*Fdz;5=Rfsdu_;p&K?MWKiLHn_J z+H~L`a?ljXt8JbS8gY8ypfMTLW=$Z14^{lKUysdte<-keTzTE^3D7e^S!si@Ctctz zOmgXBwRP!gv~i(Dnzht3b&BKm!p+&uiA%Bl*6SP?{Vu_|v?E)xb2^mGEv3O;5@HT+ z+G)k`YdahRPOoxoLoyCHt9Afr-3xdC!+hosaAllQZJO*90{LLC=H`Jc$f-dJKi6du zGHmWYUVP!8t~hMa;KNR0nuv#8CunrK=`V*c&j`N&XvzPo5dP^d|&IEZ1b}BeFLCk-1YiV^Qv}Q1}OvBkk67d*W~*qODCY zRIz?AySo~1@ME+r(S4o5ukd}6>4?WS07kK$lR%kX3*Ji83zlVIt=GHFxo0{ZmmmFS ze1X{b!t@MI>cUrKiR{}7n|MzbU)$`DI@1}rfCo-M!$2zoW}XP5kN!PMw3sI z^?-FL_$?tE4QWPMZ5e_$doG-3s(|Wy-5A+J^eGW5spXfM>Cv={srXf!x|=lSJitIA`8$>{y;Um9wkZvh z>NQkH(}nsuYT@6fZTOp}w`+I&g4c4)>gPG zV~VlHo|&!iD`FhIo`C=9;PR2+gTt@#XNR@>rJAL5$A9l`y! z6`Xs%qxjJ3Pq)q?dhHB(&Q`zsuMcmWiT7j$jQyS6cqb~@7x2j?%oDstdPUd<4W`#V z8}ke#xF89R48KFB-6i4e=I~|aLeF0BCwX(`j?dhyY!A}5MQ}d2`cVtcXx;|&Wd55m zcQJnGy_2AgXUv`i5Iln*OoX8eXYa_{v;5scjo4vIKc4e-cb$pOC#l0 zvLY5#3jSV>GuEql@SJeY_L)?1Bv{%09>$aPRUz{3iFw4hr12@E1j)sky$tsH3V|-8 zoQ1gPr2=pNE1Ik!SH|d?WlLA$hPT^%)*1h8?ieIm{lS6^`5XJef@syK>FETsuYy>J zh>&r(Eq@>bIcS1uZ{TLZdiFO_6#z_FWj-BB1`Wsd98yU}l``1H+J=m(wL}3trLbK2 zCli}`Jcp=ip>RfK1z1XHxyl8Mu5L#8QHcI!waorbva_$vtG1 zG9+Qm$(>je=3s#Aoh4W~NSN`KOo{xQO{cFkkY;J@f*~!t5Woj$O{sh6}(lipSI*nJ)g3N5-fD#)RVJQLQV76*hyNbGR4zT+aX(k7 zcuZLT8Wd}H8<@%v+Due-p5fdyZ@F!8oR9DNcbl=Xk`~%4?6b^Aje<@9Y&(5TAv838 zWx>6rkhk5OBs+GcCLn```YZ<>k1&{wTg15@VWjTWaaj6Fr?%b)-(0Q@Ququ!K?om zFN_-hM_t#igty9|DF8hrr|GDDuh#sqF2oVSw;}S^L@c0PGV)PEER|e@<;hbhYF(6m z%&*8xP{;Hy!J0p@q4UolX_S>e4CD!uth5opEaQ<}x^>IdwCsEVb z*6jx;^EAfS%Bfgph1>W&HX9a=y!u #y|cYY8NRYu!C7A8xj5IoL}jK?4xyKna%T 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 ODa+y^ByLnG5cWS=O#M>; diff --git a/getdown/lib/getdown-launcher.jar b/getdown/lib/getdown-launcher.jar index 0057e24339470b61245383eef528a474ed8b63a8..faaba1e0a85592b9eb94527a48c1beaeabb9a7c5 100644 GIT binary patch delta 127326 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

  • J-d!j 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 z%0A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

    AR#*Tr_>x|W9(mC<=P_AW|* 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 com.threerings.getdown getdown - 1.8.3-1.5.0_FJVL + 1.8.3-1.5.3_FJVL getdown-ant diff --git a/getdown/src/getdown/core/pom.xml b/getdown/src/getdown/core/pom.xml index 6cd52f7..8a80df5 100644 --- a/getdown/src/getdown/core/pom.xml +++ b/getdown/src/getdown/core/pom.xml @@ -4,7 +4,7 @@ com.threerings.getdown getdown - 1.8.3-1.5.0_FJVL + 1.8.3-1.5.3_FJVL getdown-core diff --git a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java index 12c2b64..19f4030 100644 --- a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java +++ b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java @@ -23,8 +23,8 @@ import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.security.*; import java.security.cert.Certificate; -import java.util.*; import java.util.concurrent.*; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; @@ -1092,7 +1092,7 @@ public class Application args.add("-Dlauncher.version=" + Build.version()); addSystemPropertyIfNotNull(args, "installer.appdir"); // add the marker indicating the app is running in getdown - args.add("-D" + Properties.GETDOWN + "=true"); + args.add("-D" + com.threerings.getdown.data.Properties.GETDOWN + "=true"); args.add("-Dsys.install4jVersion=" + Application.i4jVersion); addSystemPropertyIfNotNull(args, "installer.template_version"); addSystemPropertyIfNotNull(args, "installer.logfile"); @@ -2139,6 +2139,27 @@ public class Application } } + final String installerPropsFilename = "installer.properties"; + log.info("Creating " + installerPropsFilename); + java.util.Properties installerProps = new java.util.Properties(); + installerProps.setProperty("installer.appdir", applicationAppDir.getAbsolutePath()); + installerProps.setProperty("installer.appdirhash", EnvConfig.getAppDirHash()); + for ( String key: new String[] {"installer.template_version", "installer.application_folder", "installer.icon", "installer.mac_icons", "installer.logfile", "installer.logfile_append"}) { + String val = System.getProperty(key); + if (val != null) { + installerProps.put(key, val); + } + } + for (String prop: installerProps.stringPropertyNames()) { + log.info("Adding property '" + prop + "'='" + installerProps.getProperty(prop) + "' to " + installerPropsFilename); + } + File installerPropsFile = new File(userAppDir, installerPropsFilename); + try { + installerProps.store(new FileOutputStream(installerPropsFile.getAbsolutePath()), "Created by installer launcher in " + applicationAppDir); + } catch (IOException e) { + log.warning("Could not write installer properties file '" + installerPropsFile.getAbsolutePath() + "'"); + } + MessageDigest md = Digest.getMessageDigest(Digest.VERSION); for (Resource rsc: copyResources) { String digestHash = digest2.getDigest(rsc); diff --git a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/EnvConfig.java b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/EnvConfig.java index e5051de..dd163d3 100644 --- a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/EnvConfig.java +++ b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/EnvConfig.java @@ -5,6 +5,8 @@ package com.threerings.getdown.data; +import static java.nio.charset.StandardCharsets.UTF_8; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -75,10 +77,7 @@ public final class EnvConfig { String appIdProv = null; String appBase = null; String appBaseProv = null; - applicationFolder = System.getProperty("installer.application_folder"); - installerAppdir = System.getProperty(APPLICATION_APPDIR_PROPERTY); - - appName = System.getProperty("channel.app_name"); + setVarsFromProperties(); // start with bootstrap.properties config, if avaialble try { @@ -177,10 +176,11 @@ public final class EnvConfig { } // forced by system property to not use user default appdir - if (SysProps.noUpdate() && Boolean.valueOf(System.getProperty("no" + USER_DEFAULT_APPDIR_PROPERTY))) { + if (appDir == null && Boolean.valueOf(System.getProperty("no" + USER_DEFAULT_APPDIR_PROPERTY))) { appDir = installerAppdir; - appDirProv = "no user default"; + appDirProv = "installer appdir"; userAppDir = false; + notes.add(Note.info("Not using " + USER_DEFAULT_APPDIR_PROPERTY + ", resorting to " + appDirProv + " '" + appDir +"'")); } else if (userAppDir && installerAppdir != null) { // we're going to try and use a different appdir, check if newer getdown-launcher.jar found there, and restart using that one final String getdown = "getdown-launcher.jar"; @@ -255,6 +255,9 @@ public final class EnvConfig { // ensure that we were able to find an app dir if (appDir == null) { + if (!SysProps.noUpdate()) { + notes.add(Note.error("No appDir could be determined. You may need to set -Dsilent=noupdate -Dno"+USER_DEFAULT_APPDIR_PROPERTY)); + } return null; // caller will report problem to user } @@ -344,7 +347,20 @@ public final class EnvConfig { this.appArgs = appArgs; } - private static final String getUserAppdir() { + /** + * compute a hash for the given path string using the getdown digest + * @param install_app_dir + * @return 8-character hex hash + */ + public static final String getFullPathToDirectoryHash(String install_app_dir) + { + MessageDigest md = Digest.getMessageDigest(Digest.VERSION); + byte[] contents = install_app_dir.getBytes(UTF_8); + String hash = StringUtil.hexlate(md.digest(contents)); + return hash.substring(0,8); + } + + public static final String getUserAppdir() { final String noUseDefaultAppDirProperty = "no" + USER_DEFAULT_APPDIR_PROPERTY; if (Boolean.valueOf(System.getProperty(noUseDefaultAppDirProperty))) { System.err.println("Not using default user appdir because property '" + noUseDefaultAppDirProperty + "' is '" + System.getProperty(noUseDefaultAppDirProperty) + "'"); @@ -356,10 +372,25 @@ public final class EnvConfig { } String appdirname = applicationFolder == null || applicationFolder.length() == 0 ? ChannelProperties.FALLBACK_APPNAME : applicationFolder; String home = System.getProperty("user.home"); + // for times when using this method without running GetdownApp + if (appName == null) { + appName = System.getProperty("channel.app_name"); + } + if (installerAppdir == null) { + installerAppdir = System.getProperty(APPLICATION_APPDIR_PROPERTY); + } String appname = StringUtil.isBlank(appName) ? ChannelProperties.FALLBACK_APPNAME : appName; final String FS = File.separator; + try { + setAppDirHash(installerAppdir); + } catch (IOException ioex) { + System.err.println("Unable to resolve '"+installerAppdir+"' as a proper path on this system.\nNot generating a user local appdir - getdown may fail to update!"); + return null; + } + String appDataPath; String append; + boolean addHome = true; if (LaunchUtil.isMacOS()) { appDataPath = osAppDataPathMap.get("macos"); append = appname; @@ -373,8 +404,25 @@ public final class EnvConfig { appDataPath = osAppDataPathMap.get("other"); append = appdirname.toLowerCase(Locale.ROOT); } - String returnString = home + FS + appDataPath + FS + append + FS + "app"; - return returnString; + String setUserAppDirPath = System.getProperty(SET_USER_APPDIR_PATH); + // do not use a setUserAppDirPath with ".." in it + if (!StringUtil.isBlank(setUserAppDirPath) && setUserAppDirPath.indexOf("..") == -1) { + if (setUserAppDirPath.startsWith("~" + FS)) { + setUserAppDirPath = home + setUserAppDirPath.substring(1); + } + appDataPath = setUserAppDirPath.replaceAll("%u", System.getProperty("user.name")).replaceAll("%h", home); + addHome = false; + } + + StringBuilder sb = new StringBuilder(); + if (addHome) { + sb.append(home).append(FS); + } + sb.append(appDataPath).append(FS); + sb.append(append).append(FS); + sb.append(getAppDirHash()).append(FS); + sb.append("app"); + return sb.toString(); } public static void setRelaunched(boolean b) { @@ -399,6 +447,20 @@ public final class EnvConfig { return appName; } + public static void setVarsFromProperties() { + applicationFolder = System.getProperty("installer.application_folder"); + installerAppdir = System.getProperty(APPLICATION_APPDIR_PROPERTY); + appName = System.getProperty("channel.app_name"); + } + + public static String getAppDirHash() { + return appDirHash; + } + + public static void setAppDirHash(String path) throws IOException { + appDirHash = getFullPathToDirectoryHash(new File(path).getCanonicalPath()); + } + private static boolean relaunched = false; private static final String USER_HOME_KEY = "${user.home}"; @@ -409,11 +471,15 @@ public final class EnvConfig { private static String appName = null; - private static final String USER_DEFAULT_APPDIR_PROPERTY = "userdefaultappdir"; + private static String appDirHash = null; + + public static final String USER_DEFAULT_APPDIR_PROPERTY = "userdefaultappdir"; + + protected static final String APPLICATION_APPDIR_PROPERTY = "installer.appdir"; - private static final String APPLICATION_APPDIR_PROPERTY = "installer.appdir"; + protected static final String POPULATE_DEFAULT_APPDIR_PROPERTY = "populatedefaultappdir"; - private static final String POPULATE_DEFAULT_APPDIR_PROPERTY= "populatedefaultappdir"; + protected static final String SET_USER_APPDIR_PATH = "setuserappdirpath"; private static final Map osAppDataPathMap; diff --git a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/LaunchUtil.java b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/LaunchUtil.java index d6ad03d..3fbff0a 100644 --- a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/LaunchUtil.java +++ b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/LaunchUtil.java @@ -13,8 +13,6 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.Locale; -import javax.xml.bind.DatatypeConverter; - import java.security.MessageDigest; import jalview.util.ChannelProperties; @@ -149,7 +147,7 @@ public class LaunchUtil MessageDigest md = MessageDigest.getInstance(algo); md.update(Files.readAllBytes(Paths.get(file.getAbsolutePath()))); byte[] digest = md.digest(); - checksum = DatatypeConverter.printHexBinary(digest).toUpperCase(Locale.ROOT); + checksum = printHexBinary(digest).toUpperCase(Locale.ROOT); } catch (Exception e) { System.out.println("Couldn't create "+algo+" digest of "+file.getPath()); } @@ -322,4 +320,23 @@ public class LaunchUtil // can't grab system properties; we'll just pretend we're not on any of these OSes } } + + private static String printHexBinary(byte[] bytes) { + if (bytes == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + sb.append(byteToHex(bytes[i])); + } + return sb.toString(); + } + + private static String byteToHex(byte num) { + char[] hexDigits = new char[2]; + hexDigits[0] = Character.forDigit((num >> 4) & 0xF, 16); + hexDigits[1] = Character.forDigit((num & 0xF), 16); + return new String(hexDigits); + } + } diff --git a/getdown/src/getdown/core/src/main/java/jalview/bin/GetdownLauncherUpdate.java b/getdown/src/getdown/core/src/main/java/jalview/bin/GetdownLauncherUpdate.java new file mode 100644 index 0000000..ec1f322 --- /dev/null +++ b/getdown/src/getdown/core/src/main/java/jalview/bin/GetdownLauncherUpdate.java @@ -0,0 +1,75 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.bin; + +import java.io.File; + +import com.threerings.getdown.data.EnvConfig; +import com.threerings.getdown.util.LaunchUtil; + +public class GetdownLauncherUpdate +{ + public static void main(String[] args) + { + EnvConfig.setVarsFromProperties(); + + String appdir = args.length > 0 ? args[0] : null; + if (appdir == null || appdir.length() == 0) + { + appdir = System.getProperty("launcher.appdir", null); + } + if (appdir == null) + { + appdir = EnvConfig.getUserAppdir(); + } + if (appdir == null) + { + System.err.println("Not running upgradeGetdown"); + return; + } + boolean debug = false; + for (int i = 0; i < args.length; i++) + { + if ("--debug".equals(args[i])) + { + debug = true; + break; + } + } + if (debug) + { + System.err.println("Running upgradeGetdown"); + } + File appdirFile = new File(appdir); + if (!appdirFile.exists()) + { + System.err.println("Directory '" + appdirFile.getAbsolutePath() + + "' doesn't exist, cannot update getdown-launcher.jar."); + if (Boolean.valueOf(System.getProperty("launcher.update"))) + { + System.exit(1); + } + } + LaunchUtil.upgradeGetdown(new File(appdir, "getdown-launcher-old.jar"), + new File(appdir, "getdown-launcher.jar"), + new File(appdir, "getdown-launcher-new.jar")); + } +} diff --git a/getdown/src/getdown/core/src/main/java/jalview/util/ErrorLog.java b/getdown/src/getdown/core/src/main/java/jalview/util/ErrorLog.java index c204783..651073f 100644 --- a/getdown/src/getdown/core/src/main/java/jalview/util/ErrorLog.java +++ b/getdown/src/getdown/core/src/main/java/jalview/util/ErrorLog.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.util; import java.lang.reflect.InvocationTargetException; @@ -17,11 +37,18 @@ public class ErrorLog private static String prefix = null; + private static boolean quiet = false; + public static void setHasConsole(boolean b) { hasConsole = b; } + public static void setQuiet(boolean b) + { + quiet = b; + } + public static void setPrefix(String s) { prefix = s; @@ -45,6 +72,10 @@ public class ErrorLog public static void println(String message0, boolean err, boolean thisHasConsole) { + if (!err && quiet) + { + return; + } String message = prefix == null ? message0 : prefix + message0; if (thisHasConsole && hasConsole) { diff --git a/getdown/src/getdown/core/src/main/java/jalview/util/LaunchUtils.java b/getdown/src/getdown/core/src/main/java/jalview/util/LaunchUtils.java index 186745d..ccf9992 100644 --- a/getdown/src/getdown/core/src/main/java/jalview/util/LaunchUtils.java +++ b/getdown/src/getdown/core/src/main/java/jalview/util/LaunchUtils.java @@ -621,7 +621,7 @@ public class LaunchUtils } String v0 = getJarImplementationVersion(f0); String v1 = getJarImplementationVersion(f1); - syserr(true, false, + syserr(v0 != null && !v0.equals(v1), false, "Got launcher versions '" + v0 + "' and '" + v1 + "'"); return compareGetdownLauncherJarVersions(v0, v1); } diff --git a/getdown/src/getdown/core/src/test/java/com/threerings/getdown/data/EnvConfigTest.java b/getdown/src/getdown/core/src/test/java/com/threerings/getdown/data/EnvConfigTest.java index 6178651..02deaa8 100644 --- a/getdown/src/getdown/core/src/test/java/com/threerings/getdown/data/EnvConfigTest.java +++ b/getdown/src/getdown/core/src/test/java/com/threerings/getdown/data/EnvConfigTest.java @@ -139,4 +139,42 @@ public class EnvConfigTest { checkAppBase(cfg, TESTBASE); checkNoAppArgs(cfg); } + + /** + * check that the appdir hash distinguishes between different base-app paths + */ + @Test public void testDifferentUserappdirHash() { + String envhash1 = EnvConfig.getFullPathToDirectoryHash("/Applications/Getdown.app/"); + String envhash2 = EnvConfig.getFullPathToDirectoryHash("/Applications/Getdown 1.app/"); + assertTrue(!envhash1.equals(envhash2)); + } + + /** + * check whether userdefaultappdir can be overrridden by nouserdefaultappdir + */ + @Test public void checkUserAppDir() { + List notes = new ArrayList<>(); + System.getProperties().setProperty(EnvConfig.APPLICATION_APPDIR_PROPERTY, "/Applications/Getdown.app"); + System.getProperties().setProperty("userdefaultappdir","true"); + EnvConfig cfg = sysPropsConfig(notes, "appdir", CWD); + assertTrue(cfg!=null); + hasUserAppDir(); + + System.getProperties().setProperty("nouserdefaultappdir","true"); + cfg = sysPropsConfig(notes, "appdir", CWD); + assertTrue(cfg!=null); + noUserAppDir(); + + System.getProperties().remove("nouserdefaultappdir"); + cfg = sysPropsConfig(notes, "appdir", CWD); + assertTrue(cfg!=null); + hasUserAppDir(); + } + + public void noUserAppDir() { + assertTrue(EnvConfig.getUserAppdir()==null); + } + public void hasUserAppDir() { + assertTrue(EnvConfig.getUserAppdir()!=null && !"".equals(EnvConfig.getUserAppdir())); + } } diff --git a/getdown/src/getdown/launcher/pom.xml b/getdown/src/getdown/launcher/pom.xml index fbd20cf..9c72413 100644 --- a/getdown/src/getdown/launcher/pom.xml +++ b/getdown/src/getdown/launcher/pom.xml @@ -4,7 +4,7 @@ com.threerings.getdown getdown - 1.8.3-1.5.0_FJVL + 1.8.3-1.5.3_FJVL getdown-launcher diff --git a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java index 653bf7a..b0b9a36 100644 --- a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java +++ b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java @@ -135,7 +135,7 @@ public abstract class Getdown extends Thread // determine whether or not we can write to our install directory File instdir = _app.getLocalPath(""); - if (!instdir.canWrite()) { + if (!instdir.canWrite() && !SysProps.noUpdate()) { String path = instdir.getPath(); if (path.equals(".")) { path = System.getProperty("user.dir"); diff --git a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java index 1283f11..bcb0f75 100644 --- a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java +++ b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java @@ -65,7 +65,11 @@ public class GetdownApp public static Getdown start (String[] argv) throws Exception { jalview.util.ErrorLog.setHasConsole(false); jalview.util.ErrorLog.setPrefix("LAUNCHER: "); - jalview.util.ErrorLog.outPrintln("start of logging"); + if (SysProps.silent() && !SysProps.launchInSilent() && "true".equals(System.getProperty("launcher.update", "false"))) { + jalview.util.ErrorLog.outPrintln("Running update only"); + } else { + jalview.util.ErrorLog.outPrintln("Start of logging"); + } List notes = new ArrayList<>(); boolean append = false; EnvConfig envc = EnvConfig.create(argv, notes, GetdownApp.class); diff --git a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/ProxyUtil.java b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/ProxyUtil.java index cb51ca4..291f854 100644 --- a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/ProxyUtil.java +++ b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/ProxyUtil.java @@ -28,6 +28,7 @@ import ca.beq.util.win32.registry.RegistryValue; import ca.beq.util.win32.registry.RootKey; import com.threerings.getdown.data.Application; +import com.threerings.getdown.data.SysProps; import com.threerings.getdown.spi.ProxyAuth; import com.threerings.getdown.util.Config; import com.threerings.getdown.util.ConnectionUtil; @@ -165,7 +166,9 @@ public class ProxyUtil { public static void configProxy (Application app, String host, String port, String username, String password) { // save our proxy host and port in a local file - saveProxy(app, host, port); + if (!SysProps.noUpdate()) { + saveProxy(app, host, port); + } // save our credentials via the SPI if (!StringUtil.isBlank(username) && !StringUtil.isBlank(password)) { @@ -211,7 +214,7 @@ public class ProxyUtil { public static void initProxy (Application app, String host, String port, String username, String password) { -System.out.println("**** initProxy(app, '"+host+"', "+port+", '"+username+"', "+(password==null?"null":"*x"+password.length())+")"); + log.info("initProxy:", "app", app, "host", host, "port", port, "username", username, "password", "("+(password==null?"null":"*x"+password.length())+")"); // check whether we have saved proxy credentials String appDir = app.getAppDir().getAbsolutePath(); ServiceLoader loader = ServiceLoader.load(ProxyAuth.class); diff --git a/getdown/src/getdown/lib/SOURCE_HEADER b/getdown/src/getdown/lib/SOURCE_HEADER deleted file mode 100644 index 43271fe..0000000 --- a/getdown/src/getdown/lib/SOURCE_HEADER +++ /dev/null @@ -1,5 +0,0 @@ -// -// Getdown - application installer, patcher and launcher -// Copyright (C) 2004-2018 Getdown authors -// https://github.com/threerings/getdown/blob/master/LICENSE - diff --git a/getdown/src/getdown/lib/jRegistryKey.dll b/getdown/src/getdown/lib/jRegistryKey.dll deleted file mode 100644 index 57467285b43c35db50d11053a962376da0c93d4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29316 zcmeHw3w#^ZneW&!jtK?}2oSoV71W^y@~~|Al^Bo{3u15_S&HSvA(0hZj%*~^Sfh|o zxCCNRw1aOAg%*0DB!#e|i3{tomP`zbe=nwf6LOZ|wDlt!@5Dq+7Ob2v~b#5o>3}TD#I?4R^N(7M^TV9!YZ1bE0djB+VuIU-Gq34s4czbM^xKA%;lS zln{8w)r$WYw)S!zSsT{SL@ftKH|C;*uqJgHwhucQyBx0W{ zvHZlkW81#Sl2<0=!W_kENz@kRDbBn^PGRzjZ%ER%(R}14_R59vqp?$VNUl&gJ{Ysu z-box()*Vw~pC?Aw?a7ytS3$Iq5o8@qUQVyC4doPW#Y^(KOC;$bUQIq{2oNMKz>-V? zdvY88jKq`GC^RJHBhNNC@<`$+<1a6=tK4k`uEtoPcS~KQqZ|0F9sbTxpxt_XryR5fdV9Njt&v!GL!j3>FVwzJ z>fa>lp8$K#&251mxwAVW4KRH)dp);|=D-Onu{@(L*d|k z_~Y@84{S!E#2#q0uO4rWD2ehYJ#ZtE!E@o;T;62YOxW5!OJa!16(XZc>W|MJA0O|+ z8~@MMAGZMD;;H5#mLlngSV4MA&Op-xLwpno@bMt=u|v;CJRc}T&ZCB$JYCLHhMXK- z&U5;ly$Zt@ACzS!PWAEDrNpT`-df}D$k!;jNc1&?Oma{G4Q0a+^KMx_r_q73~ikS-al1Zcm=%>VIGk@`Jx6=x?`bsD~;wROg8tu8F_i

    (O! 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 - - 4.0.0 - jregistrykey - jregistrykey - 1.0 - POM was created from install:install-file - diff --git a/getdown/src/getdown/lib/jregistrykey/jregistrykey/maven-metadata-local.xml b/getdown/src/getdown/lib/jregistrykey/jregistrykey/maven-metadata-local.xml deleted file mode 100644 index 1a8a725..0000000 --- a/getdown/src/getdown/lib/jregistrykey/jregistrykey/maven-metadata-local.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - jregistrykey - jregistrykey - 1.0 - - - 1.0 - - 20101118155146 - - diff --git a/getdown/src/getdown/lib/manifest.mf b/getdown/src/getdown/lib/manifest.mf deleted file mode 100644 index 3be50cc..0000000 --- a/getdown/src/getdown/lib/manifest.mf +++ /dev/null @@ -1,6 +0,0 @@ -Main-Class: com.threerings.getdown.launcher.Getdown -Permissions: all-permissions -Application-Name: Getdown -Codebase: * -Application-Library-Allowable-Codebase: * -Caller-Allowable-Codebase: * diff --git a/getdown/src/getdown/mvn_cmd b/getdown/src/getdown/mvn_cmd index 41725cf..cd2a39a 100755 --- a/getdown/src/getdown/mvn_cmd +++ b/getdown/src/getdown/mvn_cmd @@ -3,7 +3,7 @@ if [ x$JVLVERSION != x ]; then export VERSION=$JVLVERSION else - export VERSION=1.8.3-1.5.0_JVL + export VERSION=1.8.3-1.5.3_JVL fi if [ x${VERSION%_JVL} = x$VERSION ]; then diff --git a/getdown/src/getdown/pom.xml b/getdown/src/getdown/pom.xml index 3eb0565..6f2cd69 100644 --- a/getdown/src/getdown/pom.xml +++ b/getdown/src/getdown/pom.xml @@ -10,7 +10,7 @@ com.threerings.getdown getdown pom - 1.8.3-1.5.0_FJVL + 1.8.3-1.5.3_FJVL getdown An application installer and updater. diff --git a/gradle.properties b/gradle.properties index 041dc13..823264c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -83,7 +83,6 @@ getdown_lib_dir = getdown/lib getdown_launcher = getdown-launcher.jar getdown_launcher_local = getdown-launcher-local.jar getdown_launcher_new = getdown-launcher-new.jar -getdown_core = getdown/lib/getdown-core.jar getdown_build_properties = build_properties getdown_launch_jvl_name = channel_launch getdown_images_dir = utils/getdown @@ -98,6 +97,7 @@ getdown_txt_max_concurrent_downloads = 10 # now got better (dynamic) defaults when jvmmem* not set #getdown_txt_jalview.jvmmempc = 90 #getdown_txt_jalview.jvmmemmax = 32G +getdown_txt_resource = getdown/lib/getdown-core.jar getdown_txt_strict_comments = true getdown_txt_ui.progress_sync_before_shown = true getdown_txt_ui.progress_sync_after_shown = false @@ -158,13 +158,17 @@ install4j_dmg_volume_icon = jalview-VolumeIcon.icns install4j_installer_icon = jalview_installer.png install4j_installer_mac_icon = jalview_installer.icns install4j_installer_windows_icon = jalview_installer.ico +install4j_default_vmoptions = default.vmoptions jalview_customise_ds_store = utils/macos_dmg/jalview_customise_dsstore.py getdown_wrapper_script_dir = bin getdown_bash_wrapper_script = jalview.sh getdown_powershell_wrapper_script = jalview.ps1 -getdown_batch_wrapper_script = jalview.bat +getdown_bash_update_script = update.sh +getdown_powershell_update_script = update.ps1 +getdown_run_other_script = run_other_script.ps1 +getdown_run_powershell = run_powershell.bat OSX_KEYSTORE = OSX_KEYPASS = diff --git a/help/markdown/releases/release-2_11_4_0.md b/help/markdown/releases/release-2_11_4_0.md index 0d4017a..f27b140 100644 --- a/help/markdown/releases/release-2_11_4_0.md +++ b/help/markdown/releases/release-2_11_4_0.md @@ -1,23 +1,51 @@ --- version: 2.11.4.0 -date: 2024-06-30 +date: 2024-09-03 channel: "develop" --- ## New Features +- Calculate PASiMap projection for sequences - ported by Thomas Morell ( U. Konstanz) - Consensus secondary structure visualization for alignments +- Show data source for 'reference annotation' from 3D structure (e.g. Secondary Structure) - Calculate tree or PCA using secondary structure annotation -- Calculate PASiMap projection for sequences - ported by Thomas Morell ( U. Konstanz) - allow adjustment of gap opening, extension, and score model for built in pairwise alignment +### Experimental Features (enable via Desktop's tools menu) + +- Jalview sensibly handles opening or a drag'n'drop of several .features, .annotations and .newick files onto an alignment + ### development and deployment +- Add a command-line wrapper script to macOS bundle, linux and Windows installations (bash, powershell and .bat wrappers) +- Redirect stdout and stderr to file when launched from getdown +- Add error message when launched directly from Jalview Installer DMG volume +- Allow jalview auto-updates to download to and work from separate user-space directory +- Gradle build with install4j launchers +- Implement in Jalview (and getdown for JVL) the use of specific scheme names for different channels (e.g. jalviewd://) +- integrate OSX codesigning scripts in jalview's repository +- new documentation describing how jalview project XML schema is maintained (in doc/jalview-projects.md) +- updated Jalview's Ensembl's client for v15.8 of the REST API - change in BRAF query returned by ensembl Genes for chicken for GRCg7b (now ENSGALG00010013466, was ENSGALG00000012865) ## Issues Resolved +- jalview does not fetch from a URL containing a redirect +- HTTP errors are often interpreted to the user as a file format error - and FileNotFound errors are not propagated from Web or Local file import +- launcher.log from jalview runtime missing newlines and also lacks stdout/stderr reported in Jalview Console +- Possible "Zip Slip Vulnerability" in getdown +- jalview.bin.CommandsTest.headlessOrGuiImageOutputTest produces different images for --gui and --headless when using certain .jalview_properties +- Release installer DMG does not display the background image +- Getdown splash screen should disappear as soon as the Jalview Desktop is created/visible +### development and deployment -### New Known Issues +- removed gradle build's dependency on gradle-imagemagick plugin to allow building on windows (still need imagemagick installed on path for splashscreen commit watermark) +- fixed inconsistencies in test suite on different platforms +- The rendering of the text "Window" for the Window menu item is different to the other menus when testing in Linux +### New Known Issues +- PaSiMap not available in JalviewJS +- Jalview ignores ncrna genes when importing from genbank format files +- Sequence letter aspect ratio not set correctly when aspect ratio is very narrow after middle-mouse drag diff --git a/j11lib/getdown-core.jar b/j11lib/getdown-core.jar index 124cf70fbc9cbc74dd708a0d7d8c0ef5689291ac..652c6c4275d878abba8889dc0d3b7616544ce9f6 100644 GIT binary patch delta 63530 zcmZU(V{|54)GeGR?%1|%qhs54(y`4aHai{Lw(U;GwrzIIug~do-*#H;3LoMz$k%8Hu#LqpZlrdimD6{i^uj2F>V}^lhyd+)Q z&mov3;eewL88ao9^Ru)A5H#Z z6cr7-+7haZ;T@m=^QpS?7ziIksVD;l{Xek)KtTRR2?7oBZ$re%33<@lm{_}Sf9KBm3Ii^n_T27 zbC%woy*-}y=*ofo4VlF`>YX@wbnH{jHuZas)yEHD(2EIk8O7GUJe6{-@#aHqQ2hIV z$AB0~V{}`M$AJFI+NE3l=**>C|ELCL#$fIlGRyw%w;a%?fzNJaczemUTkXjHxKrzh z9tSw5KzVI@+qyC3ex1d$MV{5+`jOmug=~De@Vs{0t#HHuXgAoqda{h2e)rEI+z)f{ z<09;hJATv4Y8hpSv+9&Py72oT5I8)t+ax~oa@nMI;jjM9kkwQ38}+#}BL_{Lujpou zM}Ty~{2llP<|lu|@5ht%2=n%vr-umYEpL)>vecuTXN3ifxz)wbI#|l zPtrJdHa`u>t+^)!zxLqI${PchkBS_IgHQDIk13#n!f#0K)7RUl489MBIN-0noWM_m z=QqHoPV8M?j=*l5m|KqI}0fhgeyhnA z@P>F{MZHnwK~Z3g8srgDM|KMz37rx3ktbO+4nzej07Z#P8(EEw#n_3Nof8c; zTUwVakFiV*@mW0QZi=~=(O6>8W~;EfITee-WJvGwpnkxKOn7NeYmzy`;K1X;)oyf9 zGV#5bU4fENtT%m_U05VYD_bpc?mH2M37&{7B#k0DX@*EZh|e4%fb&O9e2LxP*04i3 zWT%`6KbGn zG>u_LRrW2fe&en9UHr4UOK`LyGJ)6>a~NOOUT!C1W}*+A@S9!e@6lcxWrc=66350( zVZ`}aXEp)wQshh}P2X~1NR!Qg9Tm4G)>f|Tux+s=H90)Cvon;YuQW`Ka%kXC zuTRtM9unp_x2&WW{)R-f6DVuvF%#dyTJarqx}ZX2cm$iP*R+1f_R`$a58JfB;tAM1 zMypD&%ouq>IqE>zX}o#ltu;)YVB(JXAM)Y@=2gz}W7qE8i|H6G`p{s3(aX9#2|s=h zHSp)d`43EtG;Yx7evf6V2|B8?Q7&jWP7xg5%$eLAr6>w-b7eu^Gingi?`qeP|KKisBKYHX_QU`r=-dCiVAiir4)WmF!4I$p~rYbhDu@KgLB~ zXts!07ipE@es;P@GL^%AgdOYqzPk-&_~AQU43+>EXhHCdUus6*rmQ=8& zQgA)v$D64a_Y;SaRFpdpi}jn2a)X&rYMS1sX%(qQ#b!f@47)UBu*)aTK+lDXKXPHm zc8rl)0{f;5)B76rA*$slNHfT^jpxmj*z4C8l%(w07mTSA&G+KfN}9;hmqN@u((@Lf zRqhK59=qmtp-Zsu(q$11a3iYX(sA*IS1^R+2*)0xR{3y2s8jN^hqPDW(ABKro8*U5 zi_Q82Ge?YksTNk&ZPMw#$+%KAGGW`s{3K;|2P(7J17ayTRB?63!fRBVi7f+^^S;6s z$y)I3pAo^^h8M5Vkr7v%`>)g1!s`;$y1{_L3f9wLqMsLG6L;f$rHFcNGovM$R_(~! zr7gX1jc2Xe>0Xe>0n;^L z#XA>4({XK&%p^H8vOdTm65}|s6EZ8w2sDIbpd%{6kBFU2rJJJQSmRVRKi(>w?DNpW zvqG{R$poPajfFS2UHi_Yl1w0ErfeyaMeBk9ket;8L&enIjqph7=v6!_`_1kekjJ2k zNgRtO{ovMbQ5r?w?pdK!A8y`8hI)cfxf!fcfUK!dA-+*kR)ck_?3$LxprK((0$d~> z6A{s)4ybSCjAgKuq2Pd4fOk!5Z=d>sd&HC;LTXBp_~m+4af!$&kYF(5$O5q+oj>ju zX&m8f6l7O)Si8DjN!c0vz1lsy$VRT+{JdOfyVizrX-$O=c{y-EF=GLvxLsf10=hab z$eJaC^!PFKu8y0{$p)GNcI~w|4`{b1PPGj{k}dI>@kOYQ5~|rPJau!0QY~G1@XFV$ z7!ropr+LLZ`n5F#u8WT`g(CtIJjoshFQ%Lq-ry)%--py0c@T1*t9OApt25D>7OnZg zxEqYn<~2HPaL`Uycgmh%A^T7_;ZZ1LKUzx>v zl$l_ywC-Yk+41kKK-B!6)XiX{4XfZkzjs{&g>?Fw+$2fq82AL5qHVlDPya4@k|`;w6+fE1aKqiqJ8qpi6Gj4)PMjea636oc zX6+ZwOt4~p8TPUfzGfZq_h|FC$flEMQIc=s`>~7Ch?vzv9}nD>Zpr?N1tWGmoC9qb zht;3IE6@9zZ!3M;H%DngEM#LEtpRgwwAJn`lb#9V@T`X7`@qg%=PTH=ZO#4A{4W6| zthTG}yep&+@B_Kgu@8Ph6{F;PBBg7!x>jqvdbN-@-}Db*dK!(*Xj3dwrT<{k#+#8fWdnSMZaFR4d=k8E$p^8zZa^0Kf73>K}lRgZD5@y^Pp z;g|lZo8B@mdVRPN_r0`jYYkxz>qg8$bqr4~)in2&PuBF zD@xfsuaU|LQ~&y%V;Ci0EF>KLdouBv+z9^lwhhe&&md2;ZYz)bsp7_FtR7 zJi`AuEiw&$Z#%+9BcEf`XKj1EW2oJkMD z$8XCf&G{+QK<^=Rr--Z{|NetbSjwRMRUqz1KC#Kdr*Gtd%=~mpkqE@@h zTRNoS)Yi29%m=SH(iSW#QE4h%fHS z{+6ulQWdEu)HGi(!C^s*HdLF_P6HvdIg`R-4E<^akUoW^y#*PekJI5gbS~%lb)*60~f*;B0U3QAq@m~50~;BGt;uA zfvFMR33iWw@g+j38@+#nxl@!ASs=KDibe45!rGAe4K^$&;dQ)h$79DTwLbV3*FIlSzh8$Jdr&1;#o}O@CROwvv&IvGud1J<6Q>dd_(U z3O5a(VMWXt#7nxBP1DNOWXeo@EYNK6rMuvu?>2Xb%F460_G*87dz;4G&SBcTg$r;0 zI=)xeft{~0?380p4g1=#n3)X7<${=n2M2k`T@hv~&x{xxB(~_>omseP3mLW==9CN$ z2K&OOZ`j9ip6A17BoiRELQ8Q@9@8P2F)ddT8U`T~*tZ>Th#iDE;85R}#NW7lcJI+w zPM#P?#cvFo6pKjb%6)v1C%$>=O8k8w#X*$H7H%ox8M%AWLpe_sdAo+A?e;OcmV~{R?iLfP1*$XhAx8i(XEd1><*9;@QBQizjyDfd~NLhdTb zoP0@_#ekpSr8W}P-$fC==l3Y3e~4w>5m!l+*C$BKcryr7sIBJW%x}FlU;45I26s&B}Eq+8t6JWB5gOPkNu=z7cHvB%Hm7JV8j3 zaHkR2D2hDRu_D^Cgd?cO&2_%-GA>wcf-fT!f9EJ1Qh zblfjqVB();qyxpxCO(!cFM^~;SAwji0h3#TBS+6E2eVCDzOPs8)swIO)@-{4>{)R$ zqfeT)OoSydI}zIO3bQ!O%`jJEo{?_on@iWG7sLoM-=cin`R>el-oH>c0O-?2f#MZN z?M>kyf$9LZTkaRycg6#6dE>+nL=*DtHXq0?U>scQd_&}sV2^$wivrHeoqOXbKc@rp zJ6KiU_D9K`LStZjpTu+@rX@7ljr$9TW@z9R?eUfcJlN8}^km#I^gRm7MVyj8_`LNS zz&EhY_&%2h#Ur~!$SRDcV2Vix+z)fkFB;v_#-*k9hG7La=@i-8(j(HF@9TXQ|^Kfq;txlxTEo(T=Ly^1*WMNq;sQ>~m+c+Nq?z zuNsiAy8rGVLL^MU&eKlnzfx_VU!x>3wH|&^^bp95GuUH^8Dl4?biDRAAflmt1^3y_ zBTRfIF2lw_+*7cC{ucKZ9BS6}M!EO=B{~}HNJvQheJO$FjNeD#?zksr)uceYK`UpXe1tU67$iS32 zfjnE`gwA`PRJjOg`umrhX}nxK-}%xTGbHC{zsLx-9xkDN0K5CEgp)EhG z`*6m%xev!W@5g~znI3R$5!IHrAp=-nvWn#vWb|tJ{lP9XERls5q4A>_X!I`d{%@8l*mEr+Hd%e?} ziHq7n@bK~JX!-DQ`e^PWb9*z(v3GQ}_k33a76PJJC)}53r>CMhe;^Rz^gRh}f6fy8 zE##bU_)BrsJJ+}GaZCO>RjQ$xqQ}*Zb=Mwe z%D=++DICxrs0vA{4{?B%45auU3dabepYsimk6zP{V4g<$$j#xgnRTS&ijoGX{bGalmu%sFjWguM)rZ%yw`tHv@RO3xpZg|;&+ z>`NejM9#`+c15H%jJ}PhLyk`&dIRP~T3lzAYZ`9n67?mzyK$YK;h+;_eWa zn-MnS?H4y{BfbN-1nt9V?Je$Bow9NldG_|jJ1njSi$C4Nd^VXLEC((Cg0pDY<-< zR>^(6^QLUe3J(W7RQP46OEBJ2&e@WfvT%}DrPbA2@PPYj6XJA7w9PNq!dv{COHJg$ zcz?%@N;NZf4_t1y!IFYJpyvu8UuMtGf@jFDvG)6kPv7je zbv(GYMk_p6b0%~^p5?mZ?2m?@5&QzL4*B2c{SvNrmY&z%pvF6=^g45{B)DE;%?J?l zf<2OB!Mh`vVil+n%lN-zEjNWx%AgDcZPevmE;~vpp4XM7G2c=NDAYxt3r~A>x~6zx z8$_@OWe&Ij^&{q$qASC2pGBq8S_86OYUxVspvHI|m{byWEjlB+$L7e)cKKak6pj+N z)8mb&wPAdO6SuA7u(z{}LNZa-0GJrk?gBpfH96K8VScxzQ^(NZR?z)o-1SYF44Lsf z9Jxy0im(UjOz5W^@Max7qB?%VugI@?@i!Ux;0Qzm_xOyN=ew8gZ)DGAd2-BeY@qs> ztRbt-aBaPz?Jv6+#j}1ee(uc#bON}BtYh}Q6cB9M6_Sv9Vu#TI377nAQMm_2!HV&FU{V;Yv z0PwpWkuRg4MPxx4V>88K#w#hC&QM zIB@UW*kvfvmZ0>x^?`L$F^+t40xFO_rl$;Gcn{>;#j;r3z|8royt@_w+x2_aU2s^k zPAqe6M~k!l_Q0jMmHezfk7_5cZTn_mIh;Zo>} zbPB?dR9Qtu=ExRXP@5CKj*mCKu0Z#IR$u6T4xs=Yp7|55ed*Wfh`_a6>x9*oc_j;N z9%T>RtAa6_tAp<^RE+gn0DAVCA4XCSr^P)X|09Ng z2KmSN24!$)w7-5*zyZ)u{=#(uP${s#kT?sJ7y2)ZI{<9{7gK8^VCXMX-_i&Tumk&- zs(&UOwW@#s0a1WW*`WpCCr*JvrWm$>BDIJ-1I8f!+W3J0D)1j%LIpkh``B8le*;t@ zp#SkF2O_K>Wt9gY4#W{c^20ztnEYL&TBdywB?i0f)or*%ByLPhOdKyLBl2=Gh(3kq zJ>odsqsCk&m%-t88E3`gO&%jYN98>-J~=tgI(0tr@$!B_=?_=0M5VcK4L7AWUamRE z1Q3b5ho)e6svZlEf&Nyw8BN4+pBxDnq+E_xL8Cuiz3Y)F1Z4cux52-5?&g_7ta|8c z$7++TBR_l{t2?PD)7T-N;SDuOX@r-WZHXodoI(y$=Oq?G@sm#`64ZENo6JO91)7f8?*7Nv9L2;g#ik+0FWB%cJDGe@ZOEto4=S zwb&>l-*%oq0+=NiqfD#rrd_+d zYO!GjJ9pL=j3z5BLAF#MHe%1Xk0Dx<*unpZPg1aumA$qrCR3mNgxO5d=enL~!cnnD zuFqV#)$AWD*11?0OvyvRTxB92$yHo7Yj#Vs$y8_`3sfjrtj8Df;z?_FKwfw^*}ScH za$v}OVa@KkbT{}WJ=IQCq0;)7_L;&|VqD?}d z!U6Ic*vlQ5Gh(bsg#F;FK<$T&7td@xZ*BEA}pmrTS-p#8*`W-W%CLgE&i=VTk={OKct z`25r32}-LE5aXbNZCJSp2hXH00KwZfYww`R6!D{GE<7Q2#tvq!Rive4`ttH}o$#N; z_-D2mg8q@F{F$}?lNkTz#VnYfnL$eQBH$~~)*4j^Y4|fk*ID0-L(Zo%PEDmtcTWGu zF0L3&UXrjRQIe#A-S><8Q8UDc>XW5%VPv#75I-tMHSFE)LYAlmkbB#$p<*^Q)u8P5Pygj z)je$T`;BL7g~9mdPIewwD-eBP)P&6mn^uDv;}**gA?PGTmkHt6HNi9_Q0C)>+os1e z7T180nOz!GJ6o*78EM*38?ucDc7T)*GP+peXLNCxdhS(39^X*@4%)AdNEY_ov9`9Z z+do<{DCpTgum1dxqKXClpIPy*ciw+|&jJhtnafOQ!jDoP#-l^E;GN;_8!2HJLGI+UJtN0){tcLq1bY_h#)>Az1{kD|< zFanVz21qcY^%H2%(3|niP6!$hDQLh~T9Ae$;ydg&rx}tL-@{K8F*Moj5<*SLu^_|^_hujAR<#$RYjFGY@F_h$7W@eoYQX@=sLHt&4c{AcKT@iu+?KdEO4SU zYnbnvwidz~wvTOWQTKc~x5L0GLv|Ij@98yyQW6oF4qZn3ZbCMf8}TybfxC@RWXJVu+3mzzOymeOa5w}9w|(k(dK*tJLk2vnwDrrjR1mwRf;Jaqo4>a zyK$gd|K(Z~KdABFlx>MN1SR^f9WpEe?E?JU*JyZL&bvVVsRi&U2IK%Tpfj2n+6PaE zsT*e^5{46{X%~?cQHFztV4G;51q#U*q5S;BjgfDLZr`%9Vm$hAcj4_d4@4?&g$!=@ z!SZO7m9@W0C8UlR2&ave)WC1TPm5VIvVcjen#kJ@Iev5D=9ec zL;aqaU`iu?TS%s0>A?dD4=f?)rX68b-dTZ;#=>Eyr!0g1jx+0IXO$X39Ha%W4u|U? zU!4TV)VgtU$&V{p1<>bKt${5P$0}lc3jFTO=9TZ$I9Ex8=s=2>Wp%Wg9!X2od11^5K{>hJC5?TepwJ*9t#gf}afO^fC<% z8nNASwb5Rjbi2!=wqcRE8Vh8Y$Y4&x?;F`YUv-GHq zAm)hr-g6FEcz(EZ38eOnOvMOyIJwD(SE@G&sFT~Ms8ZAMh)rhy?MW(vN3YRt=8W#^ zDjpu2XSt9Z#er1pb7MNwu$bvdV(t}c-!?e|OU+7&y;)c$+oa220nE3tomXS_Sy#oY5o-{g@%*VZopT31BsOXzjTY4mU4x;UL1Hq_yp%rb`={=~Oe<^!Q z%gc`zxSszc!0%cvZ=jHLGc1V>b5#9qawlAb7>h>7YwN|MKXAsg*-MVUHceUk724Ek z)#-ac0MF*28NSpVD$fK2*l?7`xrA^#Vdt?f8%=w41 zbQM~|#(pGg^YE7`Nhw1}Jog*=*x%1fNQwM$y0XoT?DcYGjzm~3P^7&1IPTQ%RKYfB zh2Gp}M^s$ZC+|4BIB7WR3fdLH7asnqj5LOX55S5GsB6PoPjgG>SJ!zu`&dWtDww%y zC;za(--zlE&}yJIl)bU#AYl%zD7lY3{YfC+(6#Omy~qa=crYs71D)mgp144Cb^G>S|gIa-QLr8GS#Q@EE&H%=yYR%pI}$ z4PmPKBsGsDO9kGz)=Y{=<7R2bf5sXIfkIS{e z#hw;B5W(b;e4v&^zRe~CU{My`3H#Uew5zSlYpF)zFc<=EA-|Dh0ayyTuwI zMlWcS)>@VG-nP59J13ut$zA9T*Xp+k$d8vX?Fyhc7!5aWXE7LTGbMhw`Gu-$Ybsdg z%$9h!le@<-Y=vxH^YR2b7T|@%iZX4YN4rJOhm~`>7_se}#peYYj)!@xjS4fiy70faMCysJ&qY)&K*-40h&XX&d)J zKL(?OucxRZX&blmEqbjkdL6NC_5GGTTRn8mj}b& zG}qIzEr<=XN52PPD0g+yx=7kYwN&xv@7yrMQy#eM4tV%Bb|-Vlu3xH>mizfnGVPI9 z7sMKX^?dWQeKW;VLqr~($-tsv;xlqW4wVQkOxRiORcvH|1}#y|lKX&Hl);07{@*Xs z|NY<6@~{g?`mbA@xB+YcQ2*%`$+fG7wh2K%PWeGV{%Gk_eA+t=|$Cpw!Qb74th$JCV&{|n;lM3M(Ab1D8b+8zxLaL$ex9pg3vJtmBQV_ zgLRny$C%E3-NLpl!RS$G-;rmj|5QpGEL`{W_LWy@D&y_-kWU1g@uXn){6NahLH|9B zr>^C#8l=I+j`fo^qQUTz_mj6zP*~{i7>cd^yds~5zLsB)RRrBJ_K(+(&j^V?eH1_U z^v;a|-Y142pyBlfLHTy+$m6e9eNX=ZU&t-{TY0S$Kq4XAGjSpzMs?P$$Kbxi!Fwtn z0cV@cqG$hr!Yv~FrrE6u$+ey5IrFn+Vh(cs+I|etu&Ceu@%6!G9&w^`jwqm%VeZ;PYdMGk|U}kiMd2IWgdS zqxECYG1yyz|Ik3pqQw|F;JkfadJ7z}A5HH`pthG9TO;rb+e(_bN_*46e(xUXNxVc1 z-s{1B%L~hY^G>9d`;e4{zW24c?U6YnH2nok)it{%EILEAd{ZR=vOEg_`QNZVSN5mG zNVn?EV5>!8rfxhsWrC;Mrq}}1utd7C)6xzb!DB!G|XycVLyM172l4O zvWVP2P7hf5^Sya?YQeJs7l^22;2%nftx6@}RRZ|fbz`neQRgFyaV*OdW!Xnn4~lW% zWlCXG)NrieROGofv24EWs>yopJl#4JlDCsj?jsBzF?^%3N)_-{_Z=8taJI_$Hg3S- zjGWkFB;w%gpli)kZ@0cHN{6S#8B&(ZfD=I(m@rsxXf5%p@F*1q$h(`j9H?nwON9~1 z7S`J^p1qO)-4d&V6xAGN9N|C}yHezAow86}ow3y_nA}ejb#}xlRP03|<6e~RR1!+M zGl(r)eLFKoWTw|h9$bXepP;BBv6ilABjq4xEg2lm0i}}yVPf>`hO-fIZxqgqWZYoei9qWa2CZ7>K46sa?>Q+*h^HIerq%7xQMWnd-x{x<$FdssM~ z*W{Rn_oX?&sORBFei8C_dpO&mE)2@R30&Nu3vKprC88{Npph(CZN$lpg*6q{Ne8Au zb62mkPbv#0zUxf0TV*{RT9gQlEqR?$1(ry%L3=52QIjMUGr|^{6OjC${)< zKxb$bI=LSXPyJKZRV@XvT0b?X9ihB{%}@o8P0dqD85)r|b85f8a-Di!wnP z)C=4O0CVa@RV>EVCv0W)v^?%Nu0FG_J`>T^M}R21;?7LQ!$B2AZTOBPh^!b^QFaIm zO|Zfx<_riCWlqMnO?9q%(XFlD zWMr-|?7ivc2_hTmB2F!=mOwFre7BlWGPWu;fsOP93kCG~xXLn%Rx2zi=NrZl-o6-( zr{^ejPo$=xb?XRWjdbm0nP-I;Og~#EyE_1Xz-#@tz zfu9Qu$~SuvuA=dKiWGf3V54z_=DVEtyHeubP99Q_=3!y`iA+9&*mG#MZ~zrm3u~IG z)0r-mygigjO@mPAraDcBjG$V#Zn&XLBd|C{ z1<$uMwSP0E6xr{y3<5_0YsLp zVdf2b?q3P+(;8AlCHC~eEgwnM(>0yJgrO~f|3KA+Qa_wOR4FVMOc!}T5yM`1 z(cCebQ8>;mk}uYv^9s-h-)$<1!!udpajh+)n6Z{O`Z52dQ(2zMWT`-xX`b4!u$vt5J~X5rco)R40}0+>OgWjBTRN729sQQlv`snILVACQ9C5Mvj|!I#Wsc@ zGeIps7ary-W8*wY$iV)zef4r8%;a_Ci4+L6Yz^IlO|P=d{H*?jlN~HkVNcP%L_$h7 z*q6P$O7GfZvlM_400S6=zTngZYT;j#WL4*rM}fDl5iP5p%p;R!TY9B=idVOhYtO|) zw7641Wv~XS(;smU&?5og<@pBcbUjNT-cx``_rmH6VkpbFj7hv zI4~H}a>0^M6@eM_O=4Bd^Xf9TDo0wUKCS@pXm?RI!x-1w%E6V8X<0Srj-u`ghI)@b z3WS|3{+!XLC?%X~_~xHOFb;pja>dx}*PaNPK9TLc!lM%X+|D=69-vMX3hDt$X<~<^ zf>@i#(%?ja4*^Q)JEe62X_7O`nB$HS?eoehWn=WNA;5NJ`D(B3bMAt4IIboLmd2uL zl!6>pZyS3e4B;-UIz8tGG!Pz_nxAc++%#!|BHjBED0~oTa$*u8Hl~QYG+e-ZmMU`xt{tdbK7SUg!LVoKV6eROJDh zEhM7zwveZ8g0>5hDcB|eJRo}xEVDT*8@ZTkJ{uR;T}gvgIX9?8W6cahZvLD01UTLM34u%CYAnOfPxG^)rfI^5rHxy zZuy*YT-h-E!k-1V`9v<(A{P{YMsZP;Qo8u?Rj$POFlg(^RBqpsb3t@TQXE3-EreE_ zpb3oo>96r)_Xz@3m(SK5!6{&-02aVv3Wq6xTF9i%qLP@#-1>(x?7r+O4)`}mKPTvGrV;Co7w zDS!wlMYigC0AU;HP3g<%Nt(LP{=&tX!97u>6mUE8nQ3p@U>6$TKm}Kos5~+cIcq*x z=~mTZuPN;GQu9)BSv*I{^D0i(%}2+H^>r{>%njc)1#gKT&NcBa_3wMwC}mI^jTbJ~qlal`F-C zWVr;jCzn_Cr7e5DW>e_EA*ggWbmZ;|Pj*z|@vGy??kZ-g&<(2Z%EIdC{uJN% zqL_}3t-#Xv>>v8bsZra>s7WAkB9ky2BI~xzSW!GA-$igWWS4e4lodxvodv9T*5gNv=dvEE$;;aGBT9zWJ)8DjfD&Ft=mW`K{5R%h&$~Md=Zeo|ohjkAu zKAi9aF$2G)y`5tSIU>o=PfdX|o^#Rwxp_VYM;hQVc6AXaP(H^|(Y6nQP|Yfu3MlIftp zO7}AXQW35XNXfQM5o#mQ&l1tY4reV4f?FaG51`K%#ulo4iyFwRj`h>8>c02H1Snmkdo(tYBG>QLk&OxZY8;!s7FKhRzi=K<>-I4)Jpo8w! z$O;Uf7~)#GL7{Vkt1_aH&qbBs2Pvc^n*?o^Gh0(L0ORkU2I2XHdG8Qj$S&Es{l|}E zFM5&80(n6m1pP}~o!D2IkzIodCuIUdtQwrLc{w|lD`3Y*cd!$ODR+@T*602CeFEi^ z5rWQ$;_n&qS3}zd#~SH<6?f?q{!qrzxVE(JiDyXco*Vo><`g}{ojjKOM)gkEy?#}$ z%Xr3^w2w3l*i9O=rBw3o_y2fTt#umLKV6aw$x@vk>_{(fA6XM2?}Y6_-%xFb&5thD zP8Sk;;m?R1DGJGih%7|_@@7d5 zB4mYZHdqo@E#hVdPfQF-*Ua?;{SAd!g^TqVmcwut1G`xL4HDAQWjznXmw$XcT{}QA_Ob zZxgUwpWnW8fpu6aa>8F06K}B1^HyenK5^O$z#Dui!J1KA5us$`@v<)uB!{_iH%@XV zbDxu9x9fRDI`EbdIuny|rOgr8jBVX{_aP#*L26*8)Jm+b9o z>saLYgAF*ibag_yT#ixU7wzF<1VQ-DOSccHAb|J(0bD?%zvT}YccrG@0CgYczfS)F zsuEKCG36-Z$uRSd!Y^~+ECzjI(5D9d2{h4B1RM*6$A7Mb_u%g{6ZZde%Kj!+6W<7> z?LSf5e`1&SWW?CK3bElN+lCe1Q@W{oJLOg6bknKxD!h}sf9W)JA9>(><(*Vq;j){$ zsYV-nVkcSiyi;u33QKI)OD8~$}ch`f9NkxRCVAj0qL*E2!N^Gbo#Ca@0l7!w9<+o^%>3%210hiiUok#BD{+M zv|gCCKR`Aql@}oWI{j78_0xaT-yEqBstXPJJ4E;&`iCRJE8y$GdyZ`w_wmEAho(*K zq1w|2!ES@^CXaVIBy@KTF3P{3@&^^=@1z`8ms^0rf0ncc+9goAz-<$lZDFl}fZ!pZ zhXaB~0)$5cuObZy=ZGF= z3#f~l-5GFt7z+LxK7WKtq0j-WXb`(-DCf`!MAm3P%<1f*>0Cg~Ttcl}O6^=m9Xx<8 ze?pqSoCnhlJdEz-0PW=A^dg@?2YDp@j7QN&Jet1b3i_JIz&_(Rk0n16Hp`{+A}qaHeEAFW0p75Q@x(rf$aTnq}<6ib{*d;xf!_^KDmiLVmTy1xW!@1`|1 zrT$`n={{-(yG|NbQ<|(}S|oq6N>O^IYMIWXd;CSaDb!7Ch4b^(C9djHU#YKTCoT4S zeWep?e44Y*;ampJW&3EIq8$K)Lch-rep#ig*D7V1t6W~nokzPmsSGom)p}^Xy>4{`T5}j1i+0k8y;|h1t9t1YvWN5|#+m){A}o#$MV8 zrRUiq_(UsOgmR%A5y~J!X-ab?BAmVK8=d+)&sj+WZ;1eJraCaU!ok^6Z)=i*D*c5$ z)Rz4A7duQ!{kf^Ol4O6I&*RJYS-t{azaEN6@w0;3QDGL-Zlu+>@zyX35S)eQ`Q+vc zDW5M!bX@`%y^MzQl~l=B(RjWFv2iV};2UTy-w61;jpBS0AoLcxjBlmu@xGC7r(5{@ zw3~O(3w#&-lJBNB`2j@5z4R{MPk-c{^cTGUhB069Lv(~6;T(T{l#BUsF5@RSz`J-f zKLw!O%_s97K9!&0WxSVHau09eXZaF-jxXl}d=>wQujLo`Mt+I6^UHiM{}fz)4i3NM zZvGYT=hxBmYyJhl$*=NT{4T%EU-G*umw&5@_;;#=KTu`-dllf1)kyw>8pofg$^0i( z%YRn$_;Ym@|5bm5`0pypU#M;Tm7oZ4W;m?{^z{cOl%h5psPUu}+B_9Wr_M^>*TKgp)2#_!4EkLlrXzR}_fmK6*Kt5iEaYKbOe+e$bgbTk*lcAA8 zSOWlpq@*zmlq59P)Cr)JrcMOq($q*$ZcUv8Do0bJBwGrbdG@HB|vBPg9kU z#iOY)pz<|U1rR(taREF5HiBO=gG{6X#zT?+wF1$DE_C} zVsBnZH7wazXiJFR!jV|v3+jib%Cqv1&~QCKq^SHt+WPTn;zV2nPoBb4?KI_jAIrlc z{QQ23N)m6c$yL>ccat~PLvftvcaVYfeUi`Z%SobrLQ2UFe{MHz1`;J9e~Wi(dX9hP zb8n|oRBuHx(Yp=Zt{ys1=A6G=o)_p6c7pD`5WRl0o4#9ZWG-_NIQvl6UTm}Pr0K5e zyvzZY$N-d%7ke*F3E?+=c~|VF%ev`u!Fq7Lq8cT!QFO#+?!8j8dbP%sKGc?1b<@?} zYr5&$?bMaQ`#Q;JW=2NalEh`C6OVt-18BaUX(v@w_)rCZPYK|AZ$Q4;LB;;OWMeno zxcqVtGU02YU4Nda*ORfzO|~XIeKaWzP?Ja0gyLFjrjtB2eG3YFk?dA!(bO$IqYKf| zg7d~_@bBw@i92!b$2UKXw_PefOJiYt7kQMM3KXg$l}8hmht9yeRu#~4RYZU1DlfID zGTNZ}(7qZpED7R0?0WXg>(Rq9ZpGhXrY9eaGAH%2bB!g?w zmd_7T4o^p=n2+-PVxEC|F^|K*+gUst8235Kc0p*9yW#tO90*H4_g&Gi+!UbiZfWxM^Iqq>|HcUMIZ-PTx%M-!@}!ZB64W;bv| zbGuwgFTNd)D>rH0@8f?_CBz*mR~}Q)dmWvRvMuq zG)hHjjB2MfDyFSoVav&j^!=<*i$O6C|FygXSx4cNGnJQua%sI5QBIL*eocP+*fNdv zzLz-%mU-YNmn4^cu5PNCSD9?AbX6uB z8!Eg%KtbDBsb5X5YPYL8$Coqa`Ksr8=+=$>k~Kw+-W-F0~mfZ#nD z)RI<66N(2?TgX(~5Sr&hF&9EH7a?(7LS^a-8m6v7ioJ#=sq1K(x`Ae^8>va%ObgX5 z2-n-FP2Em0bq9Y!^%go`-IY4@ETK`n9IhzmvrDw9NK;Goo$qY;+6t5)3hSTDt3bJE zAef-Y*{K&^vzxvXNRINI9R|<$X|mFvb3% zKGwL4H_BgjIIID!XZj+CwL*r{S*8P_^1iGt_ga zy${e*^)jtc&(kXP0$r+Jr0ej$LA^w`s~^)&^%Lq;hv+fP*`;35mYM^tt-@382Xo=< zS86B|n{|JuY}W1AYzS@V?`WHyh(h}uZL?7*yVEusscn|kVr>R}_7&9|w&7OuxsKud z_?8HZbHjdmc%}Smff}ISUh0&y{3A_OhiJrZdNir}$Lw42$88OF6ApO&Ks~XWp6sR{ zHgwXM#*ERs(xbgk*%;wX&8*y|uQ+F7_q`7K>UDqAD!(SLdK2LA8yckErW*BIq^S34 zruvBHs1K-KeMlkody3$_NqwC9ox=-X4)Pjs?N4L5nOnfOp2{`YE4|5(h7m=Zc&*my zTNW3jsIlxVJs*bwlUq|igI%O$Cpz7`2ZvGb({khe zpaa2s=o!1UyLany{PpKO0UIINj>f_9#$)Rf;Z`RDLr=linNZ?7noM_S zIZSeUr*SC|RB@ZmArbW`$uDTEhN}}07$%IS?qIng%d(NNBqPZkBF@rDIxOkL-AOKVLJts< z0KujO0+<9yz+fRmz(9xzgb>mpBtRgAkOUG)D5m)T-ptY{p{h#2qE*Vt9)dlvB*c(8;gx2&VQc;QA_Z#R2a+feS$D5@V%THl|GVTEXI!& z_^9H>N*@`fVpiefM0`}^V>Lcb;>H>u8L2YV;G-5Fb@*6|kCX9HZy60nBRAFwV?6@2 z0V6kZW0Q|eF%}DBGrqT2w9q&OL#JZ$7x2-9kJIoGut=S;6$>|WqlFtmVYFg=8-EsP z7e>fOW*Mhr%r+l=(dfXOof$@#5ynt=hH-`w;YJkSF>dq-qZi}1`=HGoKC;x`nUw<>M5yrK`xK0>fNAR!b#%?UN2Ol^1NRx3RR(F#y zZWioog58hZxo;2by1b^Fu?R*b` zc@#sBVI2p3#^c5l+;~zL-xusf!EVK*r+mf_j6)g5)5Z@4dl38b3>JG9(|&}H=Y;WN zpYgo$6a09A8$U(hekP2cbK@7n_$4=fC5&JD$j!!!K61c#2_L@^#>>L^t~vfxf(JyeEu*3HB<+|63UEbK?V_@uBgNkL-qYcpMh&QEc;Le0+kBPqEl% z*pVZ`Bv7|Wg{cXXL6oUOMW!K4Qg-=Zf<~q zHa7}$lQ1{?%q`|A!aP-&Ul3-KFi#U^K$u&F*(}VK4DACmh<_zp@zEyCc43Bm=IQ1( zVFD-UGCOfP14g@G9L=!L>^1>W5uX_~W0>3{%wBA3yD)bMbEnU^$J`~%Glh8;LVdPn zo@1WtgGU%2=W+9VA3fQ;03Tn(3NIAqMKJSBU;<^vi^9A_n9$Z`!n|CVUlQgO!n{(L z$cfD_BOO5>u74KhSA6DI&94db8jQb|o7V~R>%zQVn7f6!N0>JV^G0FbB+Q$Id5bW= z;WKYFZ$rSpDa_juz&m`}LGwg!yd@-i>hIg9LN0Fux=~Z++(P%vbR7sxYD0@3FPl zh53ds|9^nNKVmh166T+M=9}hUgg$|rZy~UM1>tA@%|{(Ln1w z-^a)Bu|7VIkLP@X#V2yVkN%ZU;(W4?zRjn=OyW~vp!hVHYkWHAGko+tUcmWG;QYK0 zA4T{m2Ik63Fs&HN6=NmEK3>X;1uygQS$sC>&T|i+iy+K{>Br~8@bU$mAIJIe zK7Wn#g+9&X<(x0_X+FLf9>!wMm-w_yzBGd`<0lwI{Vle51z(=QEBOk}t1`3^d?lu@ zLP8A-exl&jg0FUR>qPLA1YaX~O$M*!b=dG)e4LDrdchlnE+ZR3^zwBG!g~DNAoxav zbQ6AT#?TfRDt?NOpUS_$d6VF$2_EoivwzHu@Zei9v6=H0!GnUg`m_by_VG5}E_jIZ z(*@rqIIxK+yi@QltOEe;#teX?GjL=g*hCbVAdd;&BX}?8+kM(e-Ib}-;a>?;o~91VZY!9uz`m$?GYr? z@8JVwDSym@&_SH{Kg7`EfL6A?gxS&68vcl{tzF}2>z_#Kf>U1 zg8x{sKEa>Iub*I}FCf}~D)`R?|GD755d4>d{|e)NE%=L=>m_{rhVz$w{C~IncY?nn z^pAx8q2R9y{+i&w=lpeGr9l7MLH>r|fAGOD|55Ni3I1on-^8R{nDiIH-xB<<$aQxK z4h-czMAqLi>21N^!5064WA}V@ztcrwtx+$@%ySjpr%8o!Z8jNz0LrG>sED-C7t_VfDI|4ho$fac1 zy6%=hELhzY3r1Q4%|S{sD(h-jR!J1aRrL+kb+t}Cqt@2ft!-Lc(a_L%Vtw7Z zRVOyBt*=^Hy^)gahU!(d6^-latC||tt&~w&H5IkhE2|nBn=02p2}+FaNO;Fi$g7~~ z3dYLTVhq4yGzGhQn|~>pv8FlPSr%)L1cL}=w5%-{YYA`fDueC?%Bs400p`{aLeHC; zWf0m?)rG=kD?=SY>{!#*K=Zbq?n);EZ)yp(1*0)arXIEW6*3o8AewrEk!UE~MG0LE z4K&395y-hd9x0jv-Q8OQQ9zp2)a!<`68&0Nzed8?0i%Kqn}1EsID(kJCEUENHqaSF zI5Aue{a71_wZkYjMPY23W0m2~&R|yza?{ONVtc5oCAhVx4NC+%I>OuQT3b6pT{vV- zoq-+D&E^%*iH>lf1!ur-`(tRaX!wi-fhT|iZl zAR;L#b+Lzbkbl71f{{f_p-8S)oRPrF5ec5CdVo*Xi*YrfE_ckFn7|G z?Fcl-+`?z{gd)Kf#2BWn2{#8~GB1o@xFr~MX;&g=O@ByI%ke2ui;qfV^}%SkC(<00 zIP^6|oX;q>*%J*`LNk?t=5~q7=J-c_Fa`txkgN#ojAF4s&yF_a4=ICL6X=Fo*Cod+ z9ys}r3SmWecSlHdd}^EzInYA0fUQt3K)2xY8%e}04~IK~fi78#Xga;O6XsJinbH*I z22`R-z<(4|C5APHyJMlwp3c?1ofR@BcS}0n21K(X=H?mOv^@~%3bs^i4fn)=q}K$Z zv6^s8s5OLRZ8UYjG^AvlGkt-PG`9zU>vlvXM*%9>wg~4GW~)>wluR5Xx07KJ(o7`K z)e?5Ouk2<$Ms-4JPF2m?#!XEPjrG;FtC}k6>whaY0r6MWu5VgjQSY+VVQxf4V`Ei) zEl{nevIr7;888oE`(1Gm1F>)f0YQR_;uPxX#?L4s<@7*DZz#BZT_i-w$TfA96^(WE zlC?KgZEUQnMNW^kgt|hpP@p3eMfBu&KjSQQP(~`@a+$O*H1G5T*MxEJ40d({o3~UD zn12@~BWmkbuU}KKcJ1D^CRMEyiY-Qc_qjM42#iJtaEMADk1w9&39# zw+17Pfvt#(9GuG?>jRMxemjwRtUUyHnK{(y06o%`oU$MbB&-NUfF%^nOqD=3B)fn? z0|iHK!YkM8WG280W`YdJhwPPuFayW|9DjeLBM5pT5lHligW<9$Rvza(loWgpJT8v{ zX#&~vJTt6nM{}^-!38QJ&D&t|OLTGr*|P&^eS)p!#L?sBndJi_kAZ6?THy&e$0g8p;%1NFds?my zOAByCuytj)r>mtZ5(!6;JI9i_b7OlXyxp18c8U??nkhyz5(Hp47y;?Ux|^YrOpq(h z+tz})f;fh;h#ObDxwTCVs(%ie7ZB@6AcnPpNHkd2jiyBD5c)XP&5uIEQBmS>nQ;@z z0sz-Wf|3F_b_p^jTds9mPY*UrYeiZF%9i1-HpyKrasILBrcSLmTYt)pUvT4B+<1qZ z8=$M)xQgqbRruUtL1hxq(NPhNg29AV8Zv~Hk#OhQKqvyK)6!6Ss(<*Cib{6?bq8Gm zY~xqL+OV3#9UTBv7;*?qQu^GqRFRoR^+g7}@bh6vt7#)#O12_QSb1LI)br9_S6O2eq+fb;3LY>g(-n!JhL-utO0R@Dnt*A*$Dt>GS|(vO8T1uI?oK zbj>&X)X-WT=K-a@2Y>XU&R}8^apPicpq<n*#P6KhDQU~F(7VQS|TbBg)E~JSyGePw%|@=vt2R7ihoh1-g(J$Y^sdLxd{}l zNCGMbGb0nmtR~obVldDRc$bKA5?g_|kph&e!a%}6U`bZ zjx%hyr!qNasJV6qLcjsWc#=RUAU7<7nb00?StP|nWPe?x1N{M8251pz_XH!Zq3oo{ z>et95NfbyRF!oTzh*TgJ7h;c&Nrof_OrONXXfE<$D7w`ol%zF%aE_TgfE-3gsU8AC zj%OAOlWr%dMYp<>)l+ggs7|tHyb~2gPyaoRf*O^CQyPYYn}@j=1C#*VF4Vd+!Djw* zz6TmT3x9=?rH4COT2Q*Pa8Jyu;jD!UV*qk6fIbk`8jiX{?MRNgo>+H}C(Bl(hS6>o z)zM%}eb5<7P-fM5k4>miU2Y9-HVv!EOP2*z$X+FhGVqmZc8gGl~DWCR(>O8jL{UMO&&n|zn-pc(6`VTWW~bOxM-+99&{puMyK5zZPC5-Qr@)rP7mYN@RiNqER|`&|*;*##XP zmgu|_lNra7^DW{4qYjYbQ6I9aqkIU+S)7glPM&>Tc5=1(byv1OI;2(_Y~C4X16U2qiKRy46(t8G~h^>3AW5v24g3PLgIgIq4< zm}(6hh$B}9Tgs6nFHPkf+iUqrx!!6Qs)7y51 zx>0*Woyt=6N^gPD12U>B$(Tgd8{&e^YTU$BmwFRyy5{KqimI-jPC4a=>VMxfz?8?C zlbfazE~Y^TDj)-}pn>T_Bmb#bUNVSXLjwKSY8|>CH_*~jftuL#f;7fpIo9 zzN4t?e}2h9eMLUd<)e*Z%!8iNE!AljdKk0>2=9=21~{+=*;+6&OoxR9`_ zBH<@TCl2cfZwGp454E-9`fCU+U9(xb&|MCiWY>l|lmX|H{3ob3=aPpmPh-O*Pt$ zE&xw9dIl~E40UczXiIL?Z7}Xzn>L`;&1oG9qfnx@1y`$;|AyxFU}tb$1ed*y)=&gz z%)%i7mA>{Y$1&{gImn8pM5JB%LuDP9m#2d`k#X56u|I+J;4@bVi#5rM28~0R4W4C( zA+E&uoVAH{=)KZArGMWuGuG*>p{$VJ5zGAsBNoCc_CN5RCDt9xy-Lfgh_BF0Y7Ter z^!QoSPJ_nqI#4s?yAEayDtS^DS?&0;w(=`+wHXdXx*6XVr^Ui3=Yg(Kah98^d|;pV z1Ul57EG-DReJZz#VUZ}9xOst87*!KlJuaXsV)%fJP+yOyH-ElnuLg-JUX?P_+XLJw zh4}HX-(k*ht_k#XDd*S7kh0c;5$WYy>AIP-k`r)cJ~48RH#ihTM`X^xDgYCmpjVAg zQP^t01PHVRo$Z61TU^ZG{BNPiH=AQRXbjRia7j`-?UFc4~cP^%fp;nH)Gq4BTuW%HBQSSq?&>VqAU ziYVD~^ckic)&sK)MHPct>FWw^cPG40INb~iOm#nO_`y+z4o|0|>(BQSCZ0?p{4pE_&SEK0sRWUu$pcTfJ`IhC{>v+yw+ zA9L_A7a#NRF&`fbV89nQcR1VVd<_yT#m2Hd-6_SIZM{eDwOJ#3+h#V)v{@F*1P+2p zrOv9X&3|TSpHMQj;FOl4nFY(rPbp0eHQ{p^{ykAW^>s*n=Qb{@tCh1A4@QEb|SOdL}{~1w!&sLY?RGvS)I*J);_UWJw6O(a#3g- zlb8TWImB^Qo3SvdG`0iad`bV6%{bODY7n&)CV!qIBy3S6ifvH>jf+xtm(46DY&IJ~ zo5RN1Yz#a^nZDoF_vsJB5tF>34!B{GA2(?w8*o+KB~5$3vya0+!)DoRI5v!AFayxk zC}!Kt$1-ddW`M~HSO*t*w*Ih~W3wyqBi|Nt1rW%rW8Eob>yL{0@$vHR%mUs}3Z(#9 z?0+}5Sil0dI8GdIi-n@x7K`AMZDSoa+sSruvDg+%#8NIs*kT!GJV8|0YzGe4S?p|^ zU4(-?btqHI7R#}GrGU}z!s@SLrCe0mVx?F`$qL-X4T3n>;_t=i*vVY6X4ql_T#{IOZF z_6Zktwph!~#vzEc?XtzmDl9inOg|d)QEJjU2!bMaI{J_@)Rr!PDC(a9otR;ZdVg^e z7Y(*vt}n7hqy9%q##X2e5>Ow4+8RU{Pw(yY2V#C(tP|^Pu|c4*YKx6x6D8vYbZdQ$ z+b59jM@ugED}a^&-ztt%JbZ{^zr?wUN7RC>RPhoqOHhrK%EOca)nj}rPNx9%>CfSO z9fx!X{p4b^Ew+eLzyfneF73`UN`FSgXJq_*f**&Njb{_MI2B3c3tWu1MH7%I(86gp zyMf(kvq{*{WE{&8(Vfv!hkv-+q`3gf-iidWHo-xYw}#p50Uh+yiEdH9L&8ALF+b!F zbtoloLV|?T?H{9LvNXUD^6jBmd$=d&Pt@70P8=oiDtCJsu*5{pq*iUw41Y32vq(PS|BL<>?)>QOXo>{8I|9gEw&6sYTrWR8%_ENdj&9~x3&sM= zsi1|y&S0bsD(DbkNcn5vGK0o?oLtA@d!BShCjenh`rN~i{%50X4 za}}rp(geY~QoRx#B!%HqI5A_5m1nF;*{-8gqr2Trr@7wNn&KO2v)$OXKvO$3VY8`-=`XUk zarGhG0)%&=xJWtf(L0yr!9J$yKh&QA-mdQl`tC{aZfi%x6~!0J#O_4IB{HHb5pk)E za8E4R;xgG}scOK>=IR}kwwumiO zW)psiFQKA=8=4~lrRY7+egcCiw*xkX)qX&m<>Sa&^4y)uH5wz(H6c;c)U3{DXQi-MeruZ5Qq+i9Fx%jdzt`=VbO|mCcio}n^6wJ`5JL8 zC3%&&#TWU@Y9KqmOZeP@3_{xjU9lRpB2_4`!)Dj9R$E+$+}8H`M-km$SDQG4l3y%d z=j?v)uLe2p5Rrd|lRiUoxl(^cG}_aN35rEHFo5!Qy?-rsi#?PqS|_(JU>}fayOK>Z z!lTy)gF3_QV!T|q)!*XT5kXs1H7-+-QrN#LbkPumbQF^PoiuT-g#- z+1L)<1y-^ZdbSg~-ZdlUZwotW-u7^08*uDf#5bh-pexi0(AeTuv4V@+Z1GKTJ50k8 z$*NJM;$oC7?f`{K+$m|MWFr!AITG*^TkK_bC4b_O*kL5H+GDZqQg@T4E$%|uNs&GC3C>&hOz7PhquN8U=>3L zWdr_bFoxKPDk_slk|7W3{I>B8RP6JVTu#Xiv#uOwUCD~%9xO?TL--*sN5w^xGA2hl zIe&-OfylUmmu5zltVpNa0$^hjO(P+ra*&Y0!xM=e zVdvPv=mBx4qy)QgMkSIYHxG5Sg36O!vVXz>#>Gay8zoD0H3t(W1$4!&rYRMqWK1?C zFnOOX?nmm{C%~E?QL;ihN;*PYBZ0`yQk)1t?GK9mw&)WNCHX5NEAk0>-D!R--w7$QDmyJwFuBpq1I%!Ns$- z_>p+d7C#ox+j_P>+!j9(FMyE6O@C`h>ytsCO!lAR^ZUV~{;BvGOt8sZ{M;755Wlqb z&Ei*(9_;Ex?nTMc6`>a7RIMSfB?4VL{mnhm7))Q!o@bB?>bzaFSQ;tuIR&|arTtpG z2&nVys)h-z`9NB}Bz{B5%%QqSW^?hfEq*J0ha&M6E?%|8YvT8|cwM{!Hh-{E#zB8k z`mp4aezijxc!%bP=KdhSxE{Sc+}0EIN2M>^AJ^;3QG{zVmZ6gUCtLg(6=Z>%n6VdJ zjJCy_;xC{Wr1(#5R>ck6xS)(0uqcQjY*SYyb)@x5bA@cOQwvw)j|pGBj$v z+}P&;6-RwJbir~s3x>JuJcb6dk36?L;AnjcH7DdPj*25~QD^!L8Gq&IQm?>`I7dTD zOQEYrFx}T#+U%$tloYM&O8Al-v8@(gLCV$#osBt=70TmTmeNFwt)Gk1zaRlkB-jc< ztUbj;6$cNMLBBlY5o}Qv+AIi~nnf&Xvv0GzDOsCjT)Xwgw+H$0)SN%i8Vg3Ct+-N( zb@`WrR?z~Q0O&E&et!*jZ4X3RN^MKC7`JrWGAxseskX%}A-T*TyRNxq*_O}B090Fc zoGb=x;l|WV&|sza*x_;b7*9!IS|}4I!W*`Qy3zfPMkbV)a18Ct#R3z# zm|$CeYZA96+tw6oDi;%NYnnCPvAUDDAKTUp9Do8O>Kr+FLqL9>yDp68a1WXsdQ|S$ zrrTipxAa6D-+!yt8RcS}ZOya_ZL0`SX%%C2C0O0OIG^fuc|yEioMqDWt0Ln>jkCil zMPBm*tfkDFWm~hcsxk4Zl!@T23MQm}p>54U#r!M!S8cY8oxrWRwlz;Wp5oM}79uL- zGLo~h(x!xroO7aWsZR-SaCKpp|tHN4t zTb0%d+p4lw+SV%T#Lw}^;SSve^K7fyT5XFh7MK&G-JPNSmT)jC!I#H&Y-^1L2p*nD zSEqSk!uVaXcZG)E-2{qeF3=guh3U!tSQYF7)~ZYLDn#TSiUOFfxF+1x72IyKU$YxwND@mfkS#v%{Ekx*`6_O?bx1fX?jS@p z85NvS$qNf0`Q*|9qzK0YI>WZsS|@|h!CK)O&${WhD1i=xxn zSlensg*JP7Ppq@Kc}Y_fyaUtbt^i<5XHT2EeA=Alcx4kt?~>6*>1_B%NjVmXMj)=B zMV^wIIqkSgSxMKxxXu=g1KA&(33XCpVt;dJjTq}1SC$;ltZ92mKG|nfMbtU`{tf8-Rprumr3Y)aqL;m=dkx zMO0s(v8^@+EVdnI=VZCG;14%Txzm!)g-^+(RUy$ud}TX>SIeha?7vGKjdan$m9=1{kX5liB?RbCG6M(z}--VtBkt{TCmbiDa;)H6tC9ISJ9|vr6D0VV-+4f$5r*XN1ElOI&XST98&4mv1s134qR#Za`}{PV+OY zNL>D+Y(tPh%jw=(Cn=j-QJmjEK6a%CXi64VhI=}sy@;K0a8#yxT$Tz$Tz_IZWk)33 z4BcKINF|C}Y$AR7h;;kPz=*SYlB!ggkj{Cl7ioB0Qd)d;np(qZ$3bEPTd8sjd%Pg% zFvdtg!glmK46kTuahyofo>c5?2|SG%I9xCjWhY>sZrz#ahChx7l>4@|!vbn8k_ePk zxE&-((33mSX+^HUt#?^x+JDwr*4YV@#vv~3r_xiT@*R$NR)l9Xgkh?*%jHNk$G3xB z?kt;mN+W6~D;q9FdZtu2D!yGHg|*n$IqXz!ooid?S?Al<1=jiK8+WKBu~$G2{q#hy zaV&NwRu@2HSfdKQ)apy+{;7uo4ZVaNL%cT_ub zUk(Pyea|Ko>tZC@32|SOT7p#b$LlfV&emSry2QE^eOoIMF1Q&UXXPMWlzv6qy3D#9 zn0$PT9)jx3U4OKvxqn$Y+DrZZI_H3kn~1yFFmqRUJ6P`ZfB@@Ds81|TS5r%<#qk!w z7yu@mnpNMiCciv90h6Zy+QQ>Rp{}0z8oE-G<5f8)z|q=A2gxa=1*L_{W=^xME37Li zng1W1vZmy?p_UtPDQHfDCB@Hs0YgdNM@LEVv23lTWZIB!VteoT9b*DG9hXCY> zgMhpy+%{F^7?rHZd+z5PnS@C9aMkBn^hpOhlGdJ`b0LY#6cT43#vWy(GpPMT-*Ndl zWa7Ci&y0KbOMixRWkTYBh!qW@I;bwqiG}0mB+S~n`kIP0DfKygJ-Ag=UWp)&-A(_T=H1JUMkig3=cx;C??3@2Z^}UyRM$G-;+Ob^X?U*_ z9^N}XO{+tM!``auaxR|mczNRY!vUT{E*lw{1h(fSE`JB9T`Mnl(Yxd;`A#jjJrRnk zJJRraik6m?lOu6R0iRi$wQ4IM4@H+lTifJW z&z9(h5Px!Q-C0!gKq9phygUtEuN`=_bY1P*iprBfNj!$5WuSvruBoc1r9=w@9nbf6 z7QtVX`aLsE{|4uIYFAA-8r#qgG^&mtn#xB6Tsj5+1I|u+Ho7`z4UxdBy<-|bgD5Y0 z=)wi%D2{ve(Z*fwZgm$$%L3h@GS}va-wla7?tkPZnw{M+sF8RyaOZC2>JBt-!y|RL z{Y5$alo*~pwEO0g?qbW3dl=%JcWdeyx&OrxD@&ehQ>+;Xt_oDuoobU{#nx!J12k*p zN5%6{?jGX|xvwq`XTgxpuE_HxctS#*kk9clXuKvFlaIRF80g$NA~XzFeIlWjpnG0} z%YS2U*oSl{$XDYT{lRvfD*%)rRr5~7@TQP3)|>9;w!x37CLhJKaHD@^pa<(I_SWN( zRB2=5$4{IYZ$*2y#_#CLOGnR(5kB)zgA1H+E`Ty!@d^mk-CZ% zs8v)nRri1>8~ZI#%pNW(H*uHCWgA`#v{aP zq?XO(oytZ*wao96C~~eQto<+NcM9wv6lCqVcgnqGV2Gy@VSZ$WqVkH17UzbYDSxTZ zrIm?ComCDLYF6bSqSQJ>;!39>G_o46V3vkcgL8x5U|d4BiPfkE?H1f+6+AHzkw(q% zl&0i?BfMF4eT}k*QejDdz}5_&(G$R%&W?JD1#5KAq-1TykjL_>ANtXzqu)K?y;mip8EqSfE8ob2k@MY@ZO2cU70 z;xA5-+<|y@G=6n+r@Zv*sPv-BcxxGO_vh%r(tu{vC8Q~8^ieGJbn}Tjs%?t>4J5+ z*(G%=>~Q5^ONy%+I4;hOqJt7a+SYxl?#2KrL~{nMG@Xs?++UhAKr33Wn2}>LIa+)$ z7KnQxv*TOZ5*JEs_@7+2hr^YD^VC%*2S~!zgF8jzTD9Y?Rew68j_a_A+x!#1h?UH0 zs#C76_uQzZu3$-WhmZ379!c^&Ws_7TYEKZT?x0o00$nYju~w?@sM=xBbi8{jt2eWg zX;ETmQ(73j2##WIqL6bfE5@!J5c^--C6=^HlzpC-Bd$gZX|*)d^ApW`w;8H?@<7{I zFU?13oM+-?6@NY5c>YNKFwW>fjO_LCWq`q!6aZB~s=x3@QM!WLSB7>3TN+)14zImR zy7lU)_oohz%M*~qHKC3UywFEDm+?SV=N!Xr25DPNzJB!>C(3%sy^ihvgVjfMqpv^O z#ijqt3mQDP!d4&S9SuW4>=t?3AXitj1QVAwChew_-5;N}HXMKcb@KNnctcfXUG0hn z_rAr!vZ~85@r?Amg4LgsHLZkXksjO=9&PWD_`;tkaFC_+<@L(ilayE++^(cT$Ic3M zDPKk>Sp5}I$LhDE?YMBR4v*m{I-;sN9I-STC&V#cU~Kj{b!AAekGe+FJt&m!x4op{ z>cE4N#{G$}Nv?nWIrxu!jX!Dz)afHTRU;DytYi(dHL4W*u&1~iJsc!2EM}o?P96iW*t(V7myP?g>qeFSif zmxt^~xjTO+7o-Z_bRNP)jHEnydr>sqMUBZSxwj6EtA^4on(NhpB))KFn`-wWm{fR5 z6O=(frhAWE2TrTXqfM*4gzp>O0(B950-P=XwO%r$^$>JhsVn4iEXrgVSl8w`hIOU?2s3}p=M{sdhE>+B-PBak*jQh^d|hKz zgZzynm>Y?EgK%9vy+>e(KbEMj@^Y_ERCgp~p#8f#;M|6mmrkTgw+BvoP)=6&f{454 zKUlf>&%Xbg7B=G_O2kYlbDV|a7CgYO){1|RDxC*<7#5L9WFlEl2swe|YaeT$5UPC& zUmEel_h+8(Y4Cj{@l6+zd`3LqyWpE9zO`!j);#Ga5DSlPLwE$<%!NN4kN0ZHx8=Nj zEJMC+mMPy^&U+ZtgYRrMT)uOhcdipZ!g=R8?~!bje2;eC`ObR`8!O-AoP6Wi1VVq= zM1+s|;d_!3KiPRtao$s%_cRBd=}tW}ocIFgJ<~}qblycyyTwj=2`hEmD}(P@Dc`f5 z{BxZ8=dyWj`h56a;Q2ldzK{2mUkKmjDc_6OVp-3Ul=!7iJImM!@?F7}%XcMP0q=2m za#X%oddBZ*_+G_Mgs?mUAm6K#>Xm=TmLZ(a)_BTY2Wd63Jq<5tgSUmZ8p-dIop-%_ zk6{fS`gxU9L*0#R9Xx?P>50SuDkS8o!iR`fID)YK#85A@Fo*9aqA?a z5qm$$Oa!waI1GZ>`^oS`Fei~AHxV3>2Bm_t8C!-6Yq5ML+pNzrBSbTqsD=gYi z#upYAJxC_x`1{DD{baKGdW1}YVpDUb^^xiO$P9R5`t&|hAal*UU-o(fJlB&v=-YIn ziw{YL_=x0KS!A>|j7+dbkeOBnqg`7$jaH_@5o`?P^uPE}YXbMPD9qVPd7 z9w5KZg$#2NI!o4Mt2|Cklzo9UIpxco@&=YqEj-Ut*l-J<#sX;y7v7UncuCsATUm3O z!bPctSEeo8lD2ShYT??ng@dfsDSR%`C1%SCbNu^ANgpY_Z_OiQ)~0{>sLzI>hI;4p zk-0hZ)UX#lMCKoq6Sf!VE-iQ9$bv2nFFHULY2a8p?j{WV@Vx&2#YV!}<=8C6uJrb+rfCz9eLy2{oO?&USwwy9r1Kh=)`_O*wJM zmev$MO-c$KIxIrAvn~ zeM-i1b}468BU)Aq}J1+iSd69)zt!{Si75K6qOtxCj;^B zJ@SgDFJoZ*3GIiz93a!^!=#u#Lgvv&$#L{Cw;$8UFgaJS9}C@n%w}Iop=gXL^Y$Z$ zvn!wB4^89GBVEGPk{+lq$X8OJnmHZE>=w6=p$c+D9V$NOZ6qeI(``Ce=QURIR7l z9>@#h)jL?F$?3Anx=qC;g~f7=x9=l6`pJJz9BHgHXIHjQ4fL5X(8ZrO&}ZR5BUtbj za@egB9Cc6gXUF?=jv~S~44`Vr*+n0yJC{N40Z@-+R7yhx9bSK$3B$iCM!N`0C}XTZBqW3+!; zGbAm|gBkcG(kN+(k=MvqB`q z`RsNzvcCcOAn$0;xnPZVG>g-D3T+Qp~2Tui44>n+8tyt z5@dT284?9K1TZ|4XsYw^p5MT3bQs(Wn5Z}{F9Ap|a(ER|%SAQ7x-YJU&?Qe3PWO^> z#EU~P7z$D6d`hwvee`m6+YuB738Z}!^4`wwaL8pl)Qk1ahMrt? z2#h~?jqN92K0vP4$R5dh;!}U?D}al!edMchwtOw2Z%Wl&n+Ib(pX6)Dc{IS;E|9a? zonXf+Ai-i7g}UHgc2^n`9l!q=u2UX`}+x7poF+-JN8vn87l-VKHG zcavf88gocmfMf2kcHWK5{3J zQDiTfTy9|EUNbR2u|}Y}d;iSxom_oxE>PGjle)6c3mh*oY$kIJzd|`qONJ;US zn(vsaIOpI9!urVL=v*mO`pjwj$(+4pX1SU3g#IXbaubsbvY&jvoIgT#ODLYo2X6a= z$I0%4#W{xnm~u1UJVXNdrfTBp-J~G7&3MWW`^Yn@^>TAB@#O=veYV^zL|&C|Dh9Nl z{0P*qa*oJ(PM3ek$>)eVg|;6%OmAGG0gT0dJ@3@ap<6$ZD0(5ELz_2~DTT#Oc8r*g zshAVWzR*X03i&W3QMr3l&d;EK2ce3e!#M6Izktv$Az8?b0=|9)Uq1QegRfu1*NYN? zFT&SLNngK#ub1W5%kcGES>Nx9b6)8qua=8^@dSAiROx@heDOGWaz6<{me(ZImlWsx z9+7J0Tc8^4A(eoi*8%u9_LHkH>JR0M81}nDH+=z z!Q!~krhAXPwwKI61}|k{;+((tk++{FBa3t1kpYG3e>kZAJ4k7)xR3l3zTVkK z-c5YHr_!?2*S}Pn^Y!n2LOsA((9VE+;pW zMshv50mS;x0aF>IOq-w;Y9-`y?RxDl?QVZirldWsZ6?>jb3Mt@Hj-TJ6f#z8BNMb! z$waM*%z$vAb{Z+twvyu@T&^{fMOu(lYOQ3I76QfVbW*Er1C6wcY|+A`U5k-kt%sba z?IhQ0XOkPWGs#WbS>$2u9P)GRJo1WmKKZ?N0TtRsG(-C$&D1Ugwf-_XTf2fT(5`=^ zE3~WVD(%bkH0>+2Q~N6YqINyKMB7cT*7ndlwHxSnwHxUp+D-Ha+HLeF+U@jL+8y*Y z?OXJ(+CB6G?OtuTc0crTKlJl}R-*N3W!ghph1Rb%Xy4PeXpd^AX^&|g+Cl9r+7p0< zrvML6Yj{S20=?_$~d#cY4Leg(_X zuVW+h+gYBzkB!zJXZiZ`Y>fU}HdcR&jnhA56OEC~Z%ky9j3sQcv4u@BTG&+M0yfRK zl}$GuXETgfS%L8xn`w?>6V36g#GKAb%`#SI9>->x^=!7eh0QnH*a9=kjyKO_3(Xr@ zx%nttYW|Q_m~XJ<=HFPA`6++ivB^&2xvY*)V)eY3HSmROJzvH)@a6D6iEZZV*%scy zPURu?1>VJ)P-mpsK#dcL0Gs3<&}EB=4WWA>v33)y|F4z%UW zcpSZ&%xCw5Vs6s!l96m5n@6}-0oKj~5XZGLGF7VbrgkqGE<>EXMuvZ}2SH2DG$xV{ zrAIEyXdw?s&(APpB&E{HkcrxAT(5@Eel`lU+iE_8^#KGLspXT|Lrj29-pI$Xe)b5_ z>1=Zu`yRrlZ87rLqX?DurhX}V3}IncvNza4_BizQKK3|!0^%%lI$h14WQ&Q3i}M=Je+&!X1A&FLB|#1bPsX9@!bWt2z6@Nt_+3C8;!Z}$RA@~WI3(xFNNQAQ=9U*f` zCfG96txg7%Gv!C}`5Xmh|3flaoANQ)`58Hb(}|RRNJn7BbmD)3G$> zG6m>)5XT|q4rv?LD&>7o2?JHWpH3*(^L6RYM9tUn|J7j#9e{KqYI*t`;OBeD@Zx-v z&2b!?q`+m!5Gh%*U+R3A898&@0ebIVQYw94PWD_n$#G8P(#cptSAGh|?zkVo&m_HM zC-6(gJ>{ThsV<&RzAEHGtD zU&e!Ej^oEjG4$BE9_z#_bLkA_c6nL3U?YWnw4k=+5V^RdkIvjp&V7UyZbHa&!Vl4+aveYO z^;}wvUqGcmz5}T+(Hh@_v7S4`TmGb#W$TsTjjTM zXIubGjl-AZm^x4{&+gM6Fa zN$!7Vd&y($F7i0Ln|vPx$Dd&Wz0K|;AF+LO9D9KJ;XQ>tNT;!Wx|AKD8`#6NjeU={ zvxD>!_Bj0#ysu(UNUA%9SY#LJWWR;UrISlxQvD7>2KhEj)>l|2P^h1-Vy{AolGA`6 zzJ|*obSX^R--Afd=?0+w*CAxkb{Mrc*dKqKMYY5l>QXXn#1WVi1~62evp>qI`3xbS z5WoH*nLfN|I6HxULO@%_*D!hlMOP9ubuB*r1eE`0cl~;~1rGek1^XmMCz2z{C)$z5;qFlP*06k74Fm;Yk>@68Prb~?;&|Ib&2b5GKvn~FG01*Fc`bp zWFc7$z$rAth(gEy3M$GwAd3G66!3p{G6{g5&HfGQ$opiWZj#09L!h9~fUb{_b-<&y z>Xbxuoy33y;%?bVQ1SukeawdPsGd-=gdE4-fgwet_jm?x1TjFye{&KF{7=Yycpgqc z+dtSp9d}z6pba22?{I9wnquT%fQFnsgpZ9+ZkQW=blHYndV=&q(2Avn{d9kMxjr7S z0R}}SCKiK0q$@DgPpfv5<;5)t1eb9U9%UT7z6U%kg*N>Xw5!a+ehp6kW~=wqifL{b%;#K=TFd+cayRC{Be3R z`Y`%vJ+NVTHT2U)^y!R}o|}JMx=s!zT@N-I-GF|y>%AOzBT9QistTK=s*uEY6P?%` z&o`iZTRg>*Q%)JQ%&945_L6J~>lX&J+l0vLqo?)JK)Q;y%4Bkcp2@tm`O^hmQ_-x5PNKu{wWU>KUn!_tS_P zcV96M->9VMywdJJ5A-fbPVF z}>XqNA`pBhkj0*hWS|w}irHq4y+?g1tv>+(*xrPA>FCj{q5T_5peh zb9_;?NpSSW;efUQj$D6wu55dFVZJZh2MzBhWA`5U1ty%ANXU>0d5o9sBdG-N% zl}4n~ai%8%kRa;-sB_}cUzTdUB^`+U(xsBCTq?N=l`voqD#v5UL8V<>m~Z#dtJQeC z3asupB`9a%3kyBAz-9|F^D^`7+kl5;r68QGdS#eH-SkU}550gW@;%U^HAIb!G1oBDt0&2rM*lEh&9={NEL$Ub^2 zF5n#^?~(UOnX<9yZ@}UrdJYkK9+|3-CT03qGG8ADVs$*J&?k_S^vUF8eF})uspM+C zfLyQ7B>VJ2a!4;G&+8@RWxbTVu9uO&=(EUs`h4=fK8Jj$&!vVwkNWiE=rH|wx=>$8 z8}xG8sV{$`m*|V>?fO!BzrLKlpjXnr=_@p@S7}-LDs7~GqBdKv){fU#Ys>VLw3YfA ztwyiYLi$?mQvGD@PQ6}xLSLsH(${N0(l=^9(@)i2(!Zd+qBm(D>&(E0itaq>-dMCR`?`C)EXR!PA2>YHMWe0!t9`>x>%YLbEXD{kI*&F&U_O^Z| z`=@?3`$RuS=lZ$2Pd{JJ)GyRW=ojhZ^^5hX`Xzd)ewjXBzg%CYe_3ClU#*|4e?{M@ ze@)-1UkkC<>HGAr>yPQz>rcS<)A|ki3;HekKlN|upXj&hNA%kbpMHliUBA_4;$>CjEJ{N&kr%)?YC9=u)GkW5_u2IvLL1W$%G8 z_dJ=#{soE?Cm)g=>DA$^kSu5KgJP7yCV+oc{Q>(3jKMoe3p)&PKK(3m68o5qCAPkk zY+#?D*F^s((ad(j^>@ykqfXrpMr#!Z+7dtZh#VYy_u<-P}U&(jQ4ady+414 z*sHpbo~W1DbGilj1khGM_klTKnN4J+o`KMtVX{ECA!Ns`d)03}llWAtdX}>8>0DBJ zgp8J36TmpQ6jz)t1#996Zq6GJM-p*N#nDem3FZ2*kI4$@6S}5Kx_*|!6Wv9*ACuko zC)6(^3m_k$g0ss$Ce4S5mIt_(4uyYGNFF`vt9wF1QY6%n@^LTj%z+5;xkgEQlZT} zw@t4n3V;8}*~suT#Nke@x7@vSx%9T8KAKf@fPND*E1Ugxhhx$E;@WhPWR!okB@UaM zP~vh)9k?X$|EuFH`_+DW#{qgLB~lM@ODr#Ol@Q%^T#vjP`WvJ`{}W7$ zKLd+>lWf%gLbm8{k+b!`lJ9@$efm;Q^>VH_zla8#XpdBQ77I$>2lKMy}sq!y$^T%CU5ix=RyA zz9E%I&~8pC%r^{Nf2LQfXn!BwhmC6AAVuEB9!MA`4|<0X4Aas12Fo-1=>B{o&y*s) zpY{P!TpVAt*S(r=!i#^p+V!IDKrgDR`GR&G*L$O?b>)9^>MZ&jQ1*!pXi=Jy zV4ig1agzl4hUt&B)mlwlZy{HaDL{cA5JUeEq}0b`l%bIchE9qMgMGiL z8X4qn!zT9|ndBv77sA^$Y;$YEn79dC@HGmX)7o{>*0j4^bbF^+CDCeX8tiS!!7 zPrq(Vp?4Tl>5qSn8T4(VfPQGq)P@;_TDeiAtu{)v8lzaNGfK38Q6?wpZ6uqlAQSb` zY&b~RyGf;<50VbITDIt8P+HNMq*%&YPREnurK~mSS!A>mx{FNH$6^WKsP+0d(7;S> z7+IuG&?kaat8*l_i8Icb^oDk-l!%o0w2iu7pM<_@4Rn7t(AXF`OxyLTY#!0+9pq7v zri+Oo89^b$$o4_zIqd^Wh_^ZoT9766>40lw37g2UBV+;LxZw(LO6qrfLtO90Tdwy1wj#&O95B8JU|2$|Du3sP(gt; zx}tJU0#TwUhbOuUimbP;f(I(Af*kqYtM2K{K=6O~@`I_Pt6o=ESG{_7zgY%73h;b* zi%>-++fDmtC**hw^KDlHL5r~*@M7332-#*OdndyFjk~A10157QOYrBt0WqEkMWn5g z9U)bA!u8e#TFEf9m1o0QvMZb;yFsz+4wK|LFkSY5S+Xb0k-cEPJlE4p^o0&0q>*?r zghYRVreP)_P1S~I7(~S-q7W%*4rjq2(GF>8lE~fVN$~Cx9X!Lhh9FPCS(fN%iB2b= zopToV)Ms-l(r}2Wi$rG!Q~M4e>;^c~vtzgBo?1tiShLsK277Cbp6hP#eqHDxuZn$8 z>d3(0y$ZH(6BLz0esOHS54BAq+piJAe@=fD!b@a@mn?(3F{R~GGcZ`3oHB;`0zKA;poMAMLmAlq;XRQ8` zEai$qEW*B81{cK%YR}y1Gp`TH5wr&yuG;^4(yFhc!=RbjpS@D_1b*zb;GD+2O{iX*koa=ihWyZo9o$k73}-4Vqsqu`=QiU z73@$rfgw+t;3x=xbWU1iVx4n`WmC>o4kp{lM*H+?&Cs66vy(;pO7@esr)59m-J^r~ zimEcjlI5_!iXAR3s9^sKr?4>c+`oU6+9?(6*RY?3(`>(%IJ4hu{|*>xr|p0&+aF;^ z%AsF4-A=R9BkX87bam@GVqH3RO0NzFs6%dShm3FrcF52jl&-S_)piPjO{G>T5%xQQ z_1md*RfBcvI%1tajJ4I_Aa%%%?T``9#15G*SgNyw)#YH8pZwBJAmEAAHX(n)juCKV zwuyn)z@55|G>tg5N!8&j>W~}TAtRiP9kN~ERA*;Zlhkdf?W0yI!j2Qz1lvbfHCU&v zBMG#^SX&*osY7mThm3GN>`>1IOLewgO_qB@NywLFJ7cAA;In{r)=l03ibDI_`z1k(7k_*|9LwAJ+f+uTOBxExck*A2`fl1B>)RPcNWCsM>KiR}d4zF= zaTQ)~W(+Z=yXhRPzt>o7EX8)yjk&tK(b#M}kJmGee;IGP={~Ig$~b>$e2?wkHuh6l zBqARZ!0S>l(b7%ZVtrT9Q}lu5qNQk0W%iS}L|hs*8D}lvd^{*hAQxHVUa}Oflq29q zISLPkkuXDEj)ch=SR=277v;6^svHMz%JJ~2oPY$%L^viVF(I#GO5VT{9st9by^O!-fqi)l0Y1QI&s ze3*QaUn8I5Gv(9#PPv9J#&oHChOdy%^6i*^OFnDVmronbF&%#_*Be9R24lKhWz50! zZA|yc4Wgx7CE8+oiQFVE#dL(+D6W%R^uhQLa!50vr8tWWQ&^IlGmtKwD!P!)hA)OI zMOd5-etrk+!kO;|Df|LvY88Jn&t-Rs?&2IIf&%OZ(E}M1#W^1)dWqg(iV;!5iS6Ob z$jAo_wx2H%=Nf;>#6gMK(c=|!T0zDxH=2mP#uSGm;%gxM8%(#1?JYC=YG%Ek!@+O= z9a^?H4i{O*S4k(J5IKHPgD*WvlS$_}%12=dY`xPG=j-1K=-0Rlpay0^+MhQ>YRMA) zb$Z#N9plFLeh%A`<_d zcK575=?=Aj@%Qzev11+2X#YXuxWD*&Sao!(1A0!K%})D^hb`ke0m+oc9fd$@k2o!* zC>8?|8zBK`96_=*8?n;jN|sg0YQkm}htdj;#DI7{A*?Dn@9fKqa6?O^iDi5~F`VS< zoNN@O22+3SBxD*}WG355m`@C*x;*2c2p179M-Cp{IeBg>vW_3*6ESDN#Q^=lVKDEgF$_tu6T!F^bX<7V6X@eo+_S< z5HoFmFpExiJKYY@p;f_CHuF>tbAx#IZMHJnxTAk3BWWvx``7dI%{(CBMV^6&dT=uj zGAOUvhnzCcWPn^ZUe4lBVoN*VSmB^j)PJG;$jtUAoQ_6lpUJ`7S8=9;C@VkSX7X z9Ql7C9wGZ7B>w}2@*@b#kD&z95%N=%EEi*%fW#Zg4c7K z5~HDZ3|lNN!JN>!Qp`zEY=Ib#ho=c?Y>v1LQMLt{>}D|%`zpv`)5PT@#f4lp1&{GI zkO(1mwHPHvLlP9SG2#lmnhc{@2XQ6dHx+JT^~D%*74qXVm@UR4lr*@5rHHHXZs~t; zFO%XL%mv^<9h%qPKaZbQ-I%6utG3h(t zRrd~CrpP`cztc&@f04B9f^aV7BD;k72VaBH#9)VmVRltXvNUVt}qjjDL_sBhji zxRJEy$CTRE{;-M`kQTK~7xp?FG}%>OgTz*ExLBuDUWyMwWlFDs1v*`d#KnJ7Z-@LIXlXWqc4kuuo9&>N*$jG{E#N$}B@8xO!Npj2nb{gf zV0x9=9Q>H*q*i)G>Qb-*i!w+Fk?`?8j+YbgGH*!;_3eV_nW634 zq%F1*1{OhC5R~z!#o)OTarGy3OytvP;EM_-smq`OParu6*$){sBfNhV@h1`9n!LDt zdhO(yF>42xOsTYe+KWrMYema3pCfzH<**8#&_=OdG#0ZvNV6wonZ2N?*&B+?KG4nV z3q8#9;R5pl7;5&1@t96F2g1$fAh^>U3=fzW!g6y6zTIK)gn2PMX%2<$W(mB7*WWXp zz#elE|1^bq`prtrcMyLw#7r&aX{IrygeReaCTo500CdsqEF523F$-6Kg4^I?NA^dr z!&@nPqIeW@v?}oAhqpBbG~fbQpfMn+11{0nPI~LZx&O_2eeBUICEBylb>AKY2`7mB za?Dm+AtmuUm|Ap~g!qL04oyk^FQ%{>Xzr3r6A7_sbVKz-dx(FDM3Zc9cmz^T!!x&F z{#N4$*Y>R|4uBpbC6A~Kz0e{&zt(&$fi{6T3X;vyF@|ta(={e;6SF-lI_~*K%4ZY4l6n#=7`%}E4q0g^_+BWnRu!b9aX-`0`}+T72a2|jZcWSg*T^ zKoP=rf(E5GHX^*>)VDMb(dYcr0|&)Wp1I=AsMRA|g|B~x#KxJ4ATLO}tY%G}FegymNG`pGC(+gm=Nsp6}Y*BA`wY9^S;; zl*3t0^Rwfdv;DQrod(@vEE0`1F#!#0HoPA_CUT2zd=k4_N8umG3LxwM$e%g=?Xol-R)eZW!FXi36JUx(9hfmW6cO6@Cvxz-0bblM$pimw|-s@A24R#l0l9n zOm=@h{rGS@+~;kFv93vdmgt%zS3!DSP9;A#2lvHXhR4jIbskR8L5j?6ILep7k7=g4 z-P@P=WQY-R^nJ5p?&~A%2uE}quL`+eEOPE{UQaYJ?!P&CxcvJLtiPOh(|&IJJXdjE zUr%p8S?j=`ubr%UFg8+9fS>Q0>+!x}!NPyCieI3)vHn^jY@3yQ0G{!&!a-hqx^R%{ zVuXXfIN=~&%m^o7hXhYJ$ct@XHR)fvmXt#Za+f-5CswC5hUZn-G>TO8apJA^SkI`{ z9v>J^pwSl4V9DI7ekC7N$p@1N8t=p}v=iw@7nK%Sdd=clHw9*~4Lnv9>y#TE|WO*ufujQ#-Y~96E#(V^P(mQ7;;PnQJE5Ay#QE z!-?f5tAc771PW-f$yz(WM{3_&asz(~3v$utmoJ01bjbrd%5%=CjymTAxECzqmFjhf z_9nqpxDlzA5ikbNE+<`#>vjdKMsj^Q);*xhgP;mt0SY~|gHm=4o5-$*|H9u2{xM@$3-!h9i^1YJdcl{GNpg+23!vz z+%fNgY3_vt^L?<*51_rd9|oBJL8Oa3v-vTMF+YL3F~1noD)Uo#$@~mn!SoGGcbi|p zUh_-XXMP1I%>S|k^J^9`zhU*v1FV&KkaaS@XT8lI*hupiHrM=#tuTLPD>1(d+rES8 zQS%r(j_FDBSKiV*hJ@-79x{KA^Fp(RceEJqVsYNbQoO(A;}=^Ae72S3>5YfOXt7u< z0h0w_p?E+ng=E$YR*MG_X;{pHpT$FXHIW?!!>v0Btu;NFh_g{B%EU4}o(Hfa;$iJv zF^K&l9ubcsy|b5163a1X!ag=$tiZlxvoR-1CScBS{lT1g46h>o=d*vr<0K~K{h_m1 zN$|8i)R)lsIJDQ+PQ5`n;WwD$VPT0?mRMb3LY9OmF2&<^8 zmZQ4dbX}J%@lWSomUx1i)~mBAJH6=)JuF^>M{n|<_HZ7e28p}6+QR8=qZ8x*^X8{a zQsN&Bh90o)7Ezd*R!4s#zWjH<0|%cjBO14fxjr&oF^xNio-{sm&LQc?^^<{XBqRP* zxgzR}-J_Tdq$BFef#qJG%!x%RsLCL@*TyZ zhw@Y6P`;yBOvMhV9?ECG+bPwg#T!a$!Yte8D(MpK1iGrh`dlSlqMeAxZDKW^8a@IW z(;*|Ah8@yeuvC9%`>V+>V<;WjS;)*gVDaQ9TYn8!x?nBa!g;Z(!|Bu^H?~7YIDj1j zE?BCw)2l;kfjo@zn#i1oj+V~BqNm$T2!6DVdcOOs{zci8pBgoQ`l&=hAmbeY`5}Zw-tiDRsno!wSgm6A(K{H zmTa|S9WdV&(=k?icDL1rEylFU>cBp;^4USF15dX)Y3zMHV&E1q%n6}})bkbMDbWq< zet{k0U!s3El6ZUJEAcd0{lKTNU#u~*5Cgx#`if`ps-!*T;o=Mz7u)QZ#=snM*irGU z4z0D3jS|m^wJt8c4eHn6gnNP4aJ#S6@uQAGNe$fKu`^u$69vM|YK zY!g*-^sf`6r~b8mb>glwcB(@)lJ=)vPE(9nb#{NL19spH4ZXiQ6fQB%IKHs$0$iK?3LI0tBtm60xaLJiE(05*S;faHEaJmwE-_kTJMI#zK*GEp)N2 zhO@0};3}*eZ;kh);Acag#*PUHtGgIP(HQ7CycIt|$9Z5nH%+@}VotApL+7?>?|lod zGVb+k7&E+`Zo+{|Lf% zX8v`Y`8T5B*w_QOVrY4Ogfz^-onWS4y0((@41VLp9(f!2G;%ptd5t#lX;_-R3>pOZ zjP3zGvqU)g7?XFe zXt#Avu^&qc0^E)JNO1Jkk^;ANfX{ZD%%N0|CBSbll2|j>>69ImK|#aPx5f8fyGC_{ zNb7oh#glQ?rb4=P10JUTfX3EM_^PMjmYR-7$V@y?XTfOeW|(Q+0{2+A!eiEL@SHUp zDy%v1l65pviD5r-mq0qaE_Q2q=@7VEye;0rcF#ku z?jhhMsIPlSHwv+la2$f7F>dC6M=eI-Ay-J#CojP7sO0kke17`Y2zw>K?+oy}Ftc_* z?Al-8I90ZASm^w?m7nKCIm`x|-yJL2u@)j(aUayP?uTC1B2ThY5AuJ+yW&0Fr;kS6 zUNrAgOYFfVxlinMN7)bI&|*y>m$Q5dYH&()2J4}iBOxX_gLof_0Vinm2YQ3}#0O%Z zix`@^z7^lEnr2+WtJ3(g|f?Q@RTmz%EM1MA)XVCTtWpgCfqPSz^uZ#@A6 zt#xp@wE@Oi5xCCU3{$KvUQoz>IK?&E9(Ew)y19mMq4-dThs1{x`*HWvX?LCYkG6fS zJ!R-x7k9cFf_Z{yj3rv1agMgr;rN?#6oeN(SbT&N_p$iIow$F#L@;3e40l}=i|%=+ z>cB3G^)6^o2FmD;cs=BA9O3tszaD@tu0|+vJzIa2=NxvYg82~Vbbkz(L=Vi@ zb&Z4Fd@6vCaU7q-jzfIod?Z605C(X2r;wMon{x9o43}(lyPsSXgP(T#HO|i3zoRNKq^)j^_`L)xjSgi{lTI z;`u{ua+-gP9g=JL!((<*H3@Quk{M|h@r2ss)Mx9f8m#4-oce5E7;A}}wFqoX2jXUx z$IVh5akGDu?ey2dcBWy6v{<&&UtJDO2#wNQvL)IkA-%SoM=?l4J77&H!XF3=%*{W8 zGtGoE`sz6DG$aA{w~6qjd^Kd)mRr!yK(ydkYX6B0GRm&w{Nq&Qk9ny7Q>;nOcsDA0lm*fPM4(;DE9nDLEDrH;;-vw!+bZr57+4<@Hni-@_bmN%iCZlyoTigPzfKq>DO3)7-`#MSpFCeP?_1RAuWI1%|s$Jd5Bl@jW@+KoY+|{GbDvW$<3&5Y`!dIMk1Zgyz$9C^LVW zyGc5f8S}!CX=vg{585jT&4KZXqe*7BLrYZyZJ{Jd3340wOSiJ$8X*?jdWRGmt%!z>|592Wm`Iw!Wq)t8Nz zu0w|1%HK(GLU5ly8nuyHPU2H-ZMZ@UPqp$|N6JD>SFCAC%nU?S_gDe`*FG7U8pPv{ zzMJsF6tSip>bsKJmC~)JPZ4Nv1v<2r!v3pD5YXx}NWlE+W$sx186C?LXBvM?D7~>4 zva7(!I{~}2rk}*D<*r8#e=@2;dx|t@!hu0PCnS!gAi*ocRyi~ZE8Y5Eb+z_eIx0r` z_gI&Hh~&zLaX9J!Bf;`7LrPWpZ#t;^(II$(y0KdEC_6QhZZkI~ETZXTeCVfbpPiik z3(j99U!$X8>?fCn$NC1CKSy92C2`83AQyqaJz@K$ySkC}bg6HCMd&UI;{#cF3`Q)x?uO8aXm*rxE7zDbMrA6YJ8G1+GpO@DR)&-m##1 z2C;tk^DHc;-IsCaCOt8f2E^@(!~vhc=eS;DTdrfEx%Af0VVy2`2H5@-7m**Ux@>W> z;D>xJ;|4#=qh(jo29O79;*`STr11M~La02=x*^k?5~B_Dm`%OBqh&Q7h4?D{SyLBf zh2-!bI`SUO?r`;F4?bxu?zLT;!(XgKTHzY_;nwb+IHJn$hXW(Fn5@wehQjO%AnjHc?m&y$ahk#dHztz#FX#r&7F$4 z+qD!n-$KxB`+k1QL`*rtWj37@31d$#-syDNvNV%8K|FPjjuEf)A+-}Rq^Eo(@{VZZ zm!MpWCr_Jp^4SueS*i0YQ_F_}v-QXi%9v&#Cqg+-xQW%#e{EMqTp|tb?#JARrg=Uq z6p_y*4i(1A3uSxvDVnV@O`to~pM5rL;JZV5pQgnor=Bl+6ywtjj2>gr3DxRP`;z-4 z6O5M6yWX{EiX9}pSH-JTpNK437mT=u@hy@5E4kyg(*GxyA^^@yCymUOE1y znd^qLa%fAis>tMdEDIGQS)RoVD+j}NO%RfjB6X@?D(m)SN|~-zL|^60FL61g?D>D3g1 z&bOfaU>fw4OSe*mLrjQE=KAeo??F;^Y}KPUo;!dAb&LQa++FYL#ZSvdl7XzU;BGj0ySC`vxrm>drh9 z`wVw6Ns;Go;eNzLX30U|WP~Y$sl)MP{M^RhlJGKo`nD$khVr0jvNOiHy(o7`e?UP`q*O_d`S>_cmt^TrdEZIw^Jlcv(xXpVA zmBRw(ly4({SS1r?r11N^w}yYd$n(A2nA|*lqg;%IUtcja_RZP=QJnyp-{YehpW4?o z>t)8l*3MBp7P1eHRrF{{X7L=bk_U>rDjp6^ey}NTT;_}3?llbKtjzjkvlowp1M!by zW0Q*cKx4&x`jNx2tSjoGVC|Z#VSdymIEQAQm=cJH=V&m&)MOxM&{Y~ zuA~%ZA{k5=ymP%nf;cZWbe~Q1SDwXty*-EN_=ewbspVo#b+J8|MD~EqCF8h|Tp5=1 z>a>=WZktXkDy2kr=!N0aWvktv20Xe|RNtZ}AD6b7QMHgdgWz6Msf2G$975Qw-mlDg zO|A)W(xXeU>mumad;IxLk$E@oZ3B-w%?>}Z+)j3exji84suoXDhLeD-} zd4C1b?e+~XHfFsSG!~cJ*`mz&K&r^c_(;Kcs^>-NDgHerh0lsdIMcySF1cK(#m45L z#miU;3+vL~f6O59J^nI+-X8<$8;R>1BEk|KgQr(yC@-z)Sd%8{FiIVb6 zjg}!}c9qnlx|_M>JqYx1~gtWDv8hvQ;P#Pj4EQlk}{u*XW@3bu~qt8damESqIMr248> z;hlF$F6W{}7H}^vG$2nFAd&UqvPBB~9}StB$rt>g6uq$?jd{cPq&zhjf( z{Pv*8mwXS9*XrfiQc~U!KwjAI*(xe`H`^O|?3eUDVABflD2aw(_g)zI!lDP7liG{U zhTRuycvQ?A7RgQ<&9Br+sXOnTx0O^2>rSaSI%c7dDigpsVrcVosWzaoFonPab$w>1 za`wV;mz+{B3Rw(cVWXA>8Rj+XC4DrCUH7;Y%w>@ZxxHfv9=qe*14zM#E(@}5e*Ou0 z!w)s_3~wLU**86sM$TsPJw3E}ox2>6JnMd0Iue1SF`1N-W_Pb87KsUEH%-BVyq3p4 zomZJaNhl^u6I=!V(-U`CWkA$REi7c`p?PujQt>!~+qwyzQi*WhB(g@Xu3eHlTHdF} z2I=nD@A7I4;wI5X)=44bd9!|xM?6Y3w!9UF^-h!JEpaM<(2@(h7(ipBNW;!yGdOVvL<}#L`FTRW>jB+kTK27CSQNF`I#F-s+(0dDw zB<8wL%ylD=?F6PRyG`|zzjom>{iBuR1=S}DkgDfJKbJoW67JZ_SavdHniSR^2b;a(z(4` zEmA2wgW=R4K(H}rckO#Q^(h~GZujtN4&nG?{Q-9=MBEzoNoD`gHcwjoOStS3jA*Z| z2Sa1XL}wotVV%E55PokqWqgrBRkdm(iF#_)f=0vzqd1ZwGIL69QwQ zy>7c_IX@TFb{SIp80fbje1)r$;kvJ`r7@`^pyTG;a!Un$^`^sj#w(R1|C^&@D7YYG0S} z=qC?J#v$yzjePz?s&n)c(|UKPayxbGr01dmy|}K|vn4Sc)e`DAVy-y4KJx9^ z$>K8&L#E0Hp%01Rwb2y5$7*#g(Klv57h;<}Kts|XLUVl?RjXpdZft~H#57Mo4|2Pw zJ}G_3M=-}>A?qm0@w^C!!g*t(@rZc|9H3D#`i-ZWU9{U4>No;eLuHvPw`@-HS&HZ z`;Nve2HF2q#j|c)z(M4jT7rML`1!*)|x&nw>I9Xx*lv1plC}%HupQ*OSS4lIa zbeH!^DFyu)S;kc=)Js6aF zKk(Pn2I=}Auy=3ZSTEZOHn{!l?R06|^u|{A2b>L_C|0Oz%S4`Ni(Ram2zMqblEQV- ze`V#0=j5|B)?Z@2G5$fwIfvc5&+5bY49eqU?&Asg0>(nkqDa&2pS;-v?0BVi@VuW1 zKH7h`j!=>>DQuWFB1!g_d}is9=JHg3QwB}PB9sY>C>&)b2s6d;y=qas4*^w}YpxwC z8U$fZ{xA*-=E#0zm37Ad+ydgpSw3s*)&Z?DKBHyjoKh%nOwjD6UgY~|X5}xo**-Dn zG926}x1>FgfhjAH4%N{uCg~$>UK_t>kR{R*OTrA*h&IX4`@4`l{AUl?|dDD`lL=uJJO*~n$dfAT5g zM6C!x%wYU67USn9pFF({NS>rpu~^=7uq8|J0KpBoSK0+mmYYw{1f2EKf?zz`pEzwhAW^a5Px$@kRn)Ke3 z+805taNP;2KGy~$ijtIP=X0?yVo1h=;5?*qsAewMGC01%zID}<)7m3rt(W*NWl6B* zuEo(>Z3v3|`4g+A<2e4r zi<4#d2$4 z^~Ln4Iyvqm7m28LI&;vHx;ks&d`!0=Xgqd%Ty|fmRb_9P{JMNx=j;M_5aT;_}GQ z!sd~riKDTti;e6HCmSPk6MHo~;}?!5EJoHZ92~;bv^B6ba4yl2`&bEC{6lgFC2}!7 zMM`5mU_272J6T!#+Pd#O+rghZ`-ZQp>$RKyWGWz1ZEUg3`6vQ%DC9WN zE0_Sn&8aee)jx6OdB*PnnOI#O6M{^_vc5S(nT%4jBNRpP-+LE|37<)Tow{eKCD&D( zVSuH=K8qJyDe44L%<^xJTN}^<{kcm->^eq&@m=<3eVRygF0&xGB`S(C@o&-j6wFjLpM~ zF+5d5h!YdS2KcLOOtBZuvxlxY7dZK4KA;J*N^A74uzzIU-wS0jD6Mi#pES(YcHY{tD0sP+p{vwJSMjWN$FKN`oR9May|aK}8mvOGi7jeD@VQK9Vz zrcmsKpN9<&+|i@5G4@U}CX(f|31z-mW1RI0?E;t{nl*@c;EW0SvgNr7V%B@nadt7$l&TPSose<+7k9Z6;(1-v7-JAabQuP_2;m# zqS`K;Oh)A=f0RZ_i_ZMIeVU}EkDqTLaeq2}BQmYBD2#Wi=hf6#-lLasEnf;Nv_2{h z4WyN(xbRd72h#OoPTj-LeB@j{0KaGTlZaBQ%fX}4la?s6sT5RWQSoCQr7vnOUAOq< zpp9=t5+5rqldpSWH?7bsT}Z(R@VLglBq+5sXxjt^!z=a?a@ppLj*TgS;p?}LYJ1RR zkVlo`GV>ZtYSGh%-j6U!cL zmS9Eq!rW);nFfwpz*gx}iQa0nW5ULo#I)5kywPS^l!MIDS|@qA<=3r$#1XqaN#7xSh!Ug|e9V!0gZ5 zZREopimvEJA<-Yq6uTJGJYB)Lvd4mcs$y~RBjgYKR>1k>i2mT#mjWIUc9eyOl}Gp( z?jT;CO5gP}nCgQu+akz)3@n4VPYQ|^!}TGP37RlY_t~CZ(&p+=6Tq~}|Q9+TcG zs+sr!xm8^*eu#Ak7-BReo4jXzrti6Z8;Ll-b< zc44!3aWrHm(IbnIzx`s`gMS;{MwnAaCT=Jw$*2GM@fz(h%3__|$-!GYiz~muT0C@ZX8;pF|jIUZ?Ko*+}>i3;?!Ss$))<5vFbmnE})h!V(k)a0HdT z2n|wiFby%EqDoL;jJGIo+_x~`q#E#vTpABrqLxqo0BpX&(8?vUv@y$BPoqq<$;{x? z*hE(cVdpr_@YoD-7S-3vX?2##U3$!!b7J{!y(VvPnQL54Jre5uRADP{4EM%qKM0h+ zSLodg;oSQI3f^Ugo#WosfH~O%es5>@@%kR=(MhrQDwwY2Cs@;OhjDTh?OfRFyeOzy zW$saK=N$f$__?n)IYKFDAkkH-5n{Z!0=mS!`XH#sy1N9rBosoP*WXn+I?;f=GF`;2 z`n40h0KqxfOS3%EN6_Qin+x8%ia&V{66(ByB%U;b^jaUuHWZIvd}|}7ndRJjm+|pa zfUrPYETzhmY**MtY>4nZHdtjQn4{+zWOxs|8Vu><%0WFJrXzcU_Y&dc@>orp7R!W{ zRP#mc>!)M=VDh5H*Nw}x)RM~EVzaWDI35~Hhtc=SJr`Lq&id%!M_(}PQAJ->`D}eS z6QUP>p>o!M@5}A3M@&g|B_tT}4aIg2SYdo)|7` z#*1`oCg9^F;^h686J^>Mn}UYq721Z*p0!y*DWM$!Q*Z}-SbM6I;W>z#njM$~lHp<7 zLI<`=1&}S=Jm)ywR0`dk#Q6HA*s+5^q~0)KQ-EODGFWaYjfsW=IUI>7=Spi5JAz(cK^-kgK!~=}4{)`O@f`6YdPb z4O8-iudAt76;iTaVX97muaE%7E0eMf`TYO;F6{Z$41&-sL35O!-vp9BnVSlnRcJbz5 zCcx3vSiSE=TiE9%%VVTAXeY^lh0hCx#G~uqHxiOpWHi1nXyeo`L)UQg?%U9; znLa6r>;Bm==Jb9n9Bs(gl!q|@S$fW_!#~EkZDQMBcu*CC(61RM&?`vOIDY*!7n1#& z!+BkoEm11V1FOx0a)J#jOgvg%2R4mvpH}%5>DppLC7V5=(K1%H>_!j4kwR!k#$IM+ zSv4zb7^hddu2!_}%OMHGZ*ZY8&O(J2&Nf{d`15K!8J9+xRLEJZ_@d6zD}t>*eB!i? z5_NyX_xQ`N^7u`4Ba4`9wS0k}kb=ZQTn05nu~pw;%Az6Xvt&#sr%xpt6ZZ<~W|{w_ z?$YB;XVq8GNtZ+lSj1fAiNca&+(zUlI67L;tUiG|#ZE9Df2FI;t-_XwD~W1hyq0&) zGnCUgZEY=2t`PIID=R}7&7ixxc?>EQVNx!+K8m(p)*bCUVJ#JarNU;^mI{e7Hq^-~ zdZ=w&;8!v)B2&E}BJxW|hWVUNQ0~cN(z2L$)=>G7{!Pvgz0oP(7;De5!av|Un=QVw zdCT-8M%Pi30*8HBLdIF311*x%zc4Lk)y99u0+zU8}UwC2r6QIpzNIAZBBTMJpxrpi}2VukoO zbViHXqZ$$U>|UQ@0b6W+H<_lR0~({b z3{9LhVQ`0bxq)K3{c`EU)~A7EU&eD)=-Wckj*bF8J0~afXW$d9A?I0}L$cSItiS|V zRm*`ST-2uBxov1tn(Q<+TG6qweu!`1xZ^|+MwczehicpF(3rwdts2VMw33D@OHyKo zv}xpsz5p|By+s;`)J7EzY7O1=SaC*8Q$fm`E+Bdz>{8v}*OB=HQ*W2^@nhnBL7DAH zerC63cTeGMtitI;S(@l{JBXq6(;53SGin!)z?rPLF-Fsd-uw=RQd%V$#L=(oD_&IT zTS3o^%sq`MaikP;4g;6oDldq!lM$^@ie#v5{ix*N%jTkrutr8llUt^yjkm)Y9yd}D z+YCw^{BG?3j!d4_mJ989mLyhGB&iJBXFj@RD{AF0(xmV{_qFV6_KhJ1)6Avm8zmLX zqWcRCq*#XcYP6o^OQO`U=Qxh9P@&jmO9VJ1Z*IdlOmTeZv2t^53-3(PXcW1|KwJ)118nj-fYp0|k`WfB1didcFRrk`&Bq=Wv z%F3v<%Ufl&;uX>ujZcH;c**4Q7_76gS!i3%CqEm(7QC5?$J5Pt;z;W{g{`7sd-W`q zt;~6FtUEkjPMq$;cjeXxw#BNC%N^peBl;XqpR4PYBR7hEwGW!ffUF2aD?Y1h;)XnP zV6;qE#NBT%cPaIKnz7fKY-(xs=$(>qVMl8p%akx*KCK*kzZX+HE_AaxF)dJabhvsF zENbRm4e}+qdWfV726CEe@ z`To>*vEU>BKAg|f4G?1!&7nFKS+@+@I*#YzQa*SUf&yQ)7g-W~bVWN{;i}X3oKUtO zk5TS}0N&Ily4R4n(eVl&SKrx8N2^aJ&9ft!GWDJM2TmdxuMHu&>91Y%=TfJ4MjA4? zxsYj(*~el?-3?RFT?FM8=-H#v5zpCZ1q(lQM>U3|>}^Hs6Ru@9;l47IpZrl7<39T_ z7p@?!V~9DXr$D{K7&4Vc(sQ|i@^(qr2P(fNAF9CLqS)LS{*$yxENpH;{e?^EBY9pU z=WpM4pwADG&a}Tl&~uJ>y8R1tta0;5`Pcaz+xXTI6n)il5#~j4fuEeD=r5rxln@T{ z*4Y>>nCsr;&zdv&u!7XT%J#ZympNGB;(1qVVmnXT>&7~Q&LeTTH^|c+E^Mwb3d;-HNp3YaZy2_VkR^PV6k^?&9;tr%e}YGSZmf=~w+G_01@^tg~gHQZ=1 zdHnj-A#o)=LdY99qh>!xUkwZpU(#x$Ii=HFeLh!@!I$-F8TL@?h|zL}6|Zs6VcnsY z9v1l_b@C)9tW$}5Eidh<+tvHWuFtRDE2O}mAzmEC$oXtKKE#kKU(mX-G4 z7bbqDET$d$P{?82br8Tr$)KKQ_!X0fdK>zq#>(&Vp_Y%k2 zC$lor<{)|5^bnGddq#(mGLK#d3pRx7@=4Ucz(TK?_o{`!>ZPjA%QvJYvT>h)w!w$% zzC?7EPLDOjW6v1`+f?qGnC!kNZip@S)BnjjOa5>rg|1F`=o~@NbYAZwAS8nL1nzA_ z^p>aN{tmn}Co0AYQX@XyK$1fGux3|{&U;b^xZMHTkw*R2oZPoi=>R0oOS;~SV`+93 z|C0>?70o@!AjvrT_mi=gV{$MxJmpM2uLt}^WV4+%v zv0NkwS1z$I%>WpD&2S6|kpJy!FCPE#R7jpUg>r;a-3__m?oB z{RMf)7y*%(dK&LNG6UC=ghGgdR^*fvQv9BfOiqJzphoxa8C*cWA|| ztI6%Rku%5_#Lef?Xg`C)o!rtPH9hEn;uI=z=E%uCw1dU~BDK+EnC2-}5106$4Yh3 zIo^{v7AE};D)u8=#w9aL$XMfDlGh*4YGi?+0O>L#gR+gC@V(yrm`sX4Jb z3#%thC%dquXHH_PY#B?aZOs9+D}2~b7^F{hA7j^^3KWZ#sG8Pc()NE5m&@`%`t`7u zuSbJ7^8$B$ixR@4eQfDl?>i=+t`F-m(0@8VD|HXY3;AH(_iT7QgtZ}O-o*Cl=<6d0 zGvt#DU3-Lmdl^p1?wPx)V!6z`8*Fb7`vA>la8^>bpSo34;b*f_eYV&J=`(EQR2DH_ z9_T)<^5u&MJ+Kb+`dQ`YxM^AE56~3Fml1T`o`dU&v+L^*?dslHZ0#H++dPSQ*y7uE zC@02`iQB+iF9?(NlT)BYzg;z*FCdWX5C*bKba93%u?9W7NQzhZrM4(uh4d~Ev6oY;_a+srcC>8eQ-|UI(Xz+)!b{oAZ98SPePwEhI>b1Wb zqF1`YL1MprKdXq_TCoPR8sVk3c&JA4#cH$PclW7*3m~|fWzx+|@>uU;c6(7B$gl$u zb?aLhbWnt?=dr;7VK_x0eyP%=#dmpmA$nRB96*I z+8?l{Odi-oGl&^u`ezZ<^kPjj%Irzywd9!a%6Fs4_DDZrs5+@0UJ%dgl=&9hE9@Rs zCy@W**uHw_?KqUi$*aiZ5r4s1zq{!o1V>}m8sT*I^YIU<H-^nyB)8ZthaV zy+XO(Bl-7c$3J@{*V`aR{f{BU2q2IzDhR|3s)4G3jS+6Pjw{v~uYPYLyFtJnaJP** zb9T4gHQt|KBz~VX5_!O|65jMf_XNSKw>!`Bu`m^IH#;r4_*jbmz|M09u=D)r_f89Z zjo{Uv{**&Go2M`!&=26la@`MQ?FHl4v?PIbU~YN2jKHA%{#xn?ECFw}blh7#&o2ga*;#tReto9NXV%s1E@T}-{u%>xiYpj7nVxI>61y_T?QWH~o)Fzyz=tBCSyA z5-{0~3!v6O6WoQ!E=@a@qv^!%1g9}G?Z0z>-0 zbY-`a;-LnmV5VD1zgZ1kvm%U^fQRaqf$!aRU84ad&|t5-p!4Nm1n6eTpU&T+p51od zF9T!T4hmol5sWu9unaKeW|Z>Fz(n9;Sm@p~3>|d)n)yxh<#qG^O*0o%p&WdV;@Yw> z*`vc8U>@Y-ffij`?oskQA_IZSg+L(2J5)a@|4<2k1QXvVLsgwuFbW*^uL9Bf^bQyzatp?Q zHn)OlZ@|)C6qU@_AW$)Ivcq-<47}I-xBqBvkmOFWtzckJ)E!{WbO)*Q{0|ZVdR6&b z3lE>@2AumKPzsKo`UsvgVhBR&OyJ;xnrQ^{W_2DI`s80&V@d!tVpd_blF;AtcP&3y-{ z+J23^p1?r-B12L6VKAZQRlfy%(>2lG1kw*XPy_C|nxN|rS>q@S>i-7Fe9etfhCP3< zM72O}yNR9YTeIE_-0CR`MuU=FhvIeT4`=caIzU-VK9Vhc7btjz;*+R zIEjFYy#T@8`J=b`2mHDgjCU)xzv@OKjUT@?iaB4wfKIgkHuvJZlEfSs;42`y?h0O7 z|HG@k4~)X_PmQ_O_ufUmfEX~)l>{J=z#V;axBrkmdJD$;pGZa#Fqex3^u`57<*q!9 z(`!Pgq9_<0s?+yJd(xI0?Vnxz;re8wJ%ZVEh}$z74#Ga=o-j`k&cB1Al|Q&FnKhV4_>! zhPK~m2gdx{iw12L0HglnUwmG&q%T0Odj#Yo`a6y?$NEcz07dTx6Wpj!9cPlI3m7B@ z_~@=dp)|L6pnkwZcY49M8B)V_d)N_J5h()YnD`EVIXY-%Etvj>tMD($V?}_Y4B)1_ zD3nJ~j!$6vTXVkNIy;jMy43<^xS@QgRn$HY96GH7qYPx#zgMOATMnql$3La9x#GqV zr7AZ%0#hqyS`Zyd@TZpSC0IKA1gskTpFBRHb!!zc?7-ew$M0eN_tR#~e`Q|RHU{0_ z67ZP+nHfO z6gTL9o@4uOX0KoUV=ELWp6JlD=0Ekmss6?peH(uPC-q>`TNl5szUf;$`YWon`uDV+ zBygg}2ON|R4Cli;ius@1prJage**8k^hgQ7CQ-2dO4RnmEbWFfpp(m<(dfu!{3LAyT>ZSdVuNS6rurVGrA?fTOCzoP)% zZ3Gj*S9;q~fT3tjV8&asy&7&BQ5e9`#0D^v@bz^3_faUY68L*nddu^I|1Ku~|0h16 zdmq8LYX3eqy)Fts4*Ppmdh-Z^L9$Y!;_@ou|5Y+!l91H`Smj;-_4Mw#f>z|#UGE`a zq!wnM8 zJ2z@~nE6Bhfde;g*#A?6?%c!OA+<=p)dO%1)s4!Wi47fP0OTC_+*KJd^&criO<>9! zxO(stKMf$T+=1tu{OqPA2NpqT|2Omv%JM&e56<;JU=POe|5~WiM!=wu{{J}tW!(p(P8V7O zgG@FAgZp1Vdob!`KX9b~&Dsa!g!sQ@PmTwt{U7K77y2(qf{_2OfAfzm3W{Xf>6Vz2&6&*6d6Jwi(`}<6!g-ZHx6K)Yu@dxZR+$| z^Ho~$Rca;+-m40_Dy*OESyZs(h<~gE%r@01y1%%nFLPuP5Z`aIIx^d3jtW9LeVTP zuv}^0lMtpsfT_FQ8BzEc7X-%fBRJohfpHn%nui3uVl?>rlQBGp8cYcw=9s2wAf9o} zW0Lh4EspACDKnm1#&5r@#=(m5g)w&1FJjMYeMORty)R8)x+ zeEp%b7rd=l!lCtZjyX=?9O_u-5Vs=EDfuh5)1e5%v$?O{5hdc7W=U z`=yGpUfAt)?-=G->d<;ZM_kJ{pJh18Q{Hn z!t;sg?zs0e-ez1^gy@D#zPZQyhxe}(R}gT6eWh_V4X$-1EVmUMPYicRTHiQ-HW(k? zxfnfgjXg%b?Wu+%cra!<Dz?yfL^fi|J>M4Vx2!A*(0)(pemcS7lTnAs@2_AZ_ zG~zla_>#k!H+cunhu*`>{geXo(8uaS?)m+{ba0qq4!NY<`!UCEJMMjAzJdV;VyuCE zJ!YTEILz==)8EoKz>_h0gG2R04(1KW^Sjq*BM;N;`olv+-%rfwFGRiv593epOMg`y zN7zIA7;k8LZ%v#Zj4_|ruRg#xWejr2J*mGRMGO%B&=iQ^PZpzi?NA5-s2!Qu=pzq1`+l!0}u(Q1aQz8u@*3?LbGzX8RID}vxiQG(t;qCL6?P}V_wM) z$)T5p8lDf$4E!T8wm9%<05mtKwE@Cm*d#MVLwV#fhC?&yXHX5A76@ov<5FYM>>7<^ zLwNAE2!Z4?jSJdK)HBW*yapNETeFcvIU%=`LpfwK{58CW8IS=KzpK_5*rP)t35FR^ zPuPvg+5whEWtlm`ecD4gj59nLK6QXo*x!8s+0af9T`ibpN2Y@l6C5k_0WG>2*80vF z2J90TV-1+!p#V*|->Crl&`zBU+dnP+S+KX+d1}$hA}7EvOE!+5vR|-a(q0N zL!0+Gtpy6PrAg>k$OaVKJOq`J2|wu!lCg+x?hwChhOx0k2ri}tcF=09D}>)V(+r`( zZ(zAs8(@C$^>?RN9$+5(1ahcHDZ>!!M11Ho3c!qYLOIlLG;R1qR0R-8VuP_Q+=Jjz`_TWc|zdcfint-VMwL z0QXpKxrhhip;-koCPlgSe*S6#1B}3k5T&9DEK2cvzSV}Id z8z^b+I{^6ujb2IFie9tjv&25P`;5_W3 zrop4vw>1Cpy+wGr(~0U-ghL z;x2IiEKl^83JbQgccgPoC@bBPw_vyo8#3v zhd3vXe5&Vp&PM=d!0Z=aJ}7s9g@Bu=j$%~D54{v- z)Jdu}iNZ`g6%HdXGade@Hz(=I5tMVf3_pDgVi!oob}>jPL);(DFbE3KVSZ&FEQc2u zo~uP4w1g9oz1y(%MaqvxoF5+d^-Y266FQqfcojkE^+gS8z!6M`>BAsp9F8}~p$jiO znC|Tfs^9Z1-K&PEf3jHu&QRX%RkJuFp4vjzqxEc7&$9enA9MKT?v*PdhTwuoW*eKmR<4g=83lc^4=Q4R%I0u+wyy9mP0#Q7BOvbk(x2EpJx~!1 zNU}+^8&#w}7HI0u&yU302erd~snl!CZb9Cn@KbnFpIX8aL4}P1$%7;zZ_#@2v$vUE zkp?~B{M+_UNf>kJU%f zK4tKCujEHYH1F>@EPOw)hp?{v(*nN7`k7wUY5Hz4KJkML8DF^|f3UU$KJah~9pU|B z(+#KV(Lecu44GenOmiOa{=s{@kP-uqVp5Jn*T7A1tovd%M`54uiL-p9Y2fAGB%y)BXN~`NPAtpnj59M~ENBu^$B|C2FikL74BNHJlkk z5x_Ui>$Cw$f}r!a<)9&G*_0vXC&%Cq+3V#HAOIAU0_7uY4>+m<9Nq?Ee-a1v)4u8s zn7?kNL^J{G2l9>arsCp+I(lY_BO%Cg`bDL^^_PjSqZp7Sc(*?Jc!23i!uY(| zpNm4~lI$oBFI-SG()9I}2FjgH#^T4Da57D+dFQt;=`C-3Ix-hU`$m$}U=`*3%czm> zd_~XSZA>(*p4!@PS%{Z-S4q?KwuR5{QJY;;SvJ7#JmX6n+f|Ml`s!-k{;D>M;VE^* zOB;F(HHRXK<~kR1w~cqiR!l@Ue2s~Un5w3WDNIbaOZ=%d5m=d+IVY=eg^B8da~Lt% zRbzw!6LtvRE_~X|rZ$#k12lU?XfPP_k`hW3dpP@Bn!uYkSvuY>(32Aqk$HSPbCgZx z6-b~cC4G=R=#|#62Jo=0Zq9`d+|dfI4T4NrhKi{D{g@S7jRda?d|wK%EDWoUh{!JX zWjvux9F2kaJvUeT4MQ@!v~V55cJQ^S)U7eJ4pkh4n2i|A9hA{eyWCN`xl1I(&7ueU zrF9zLHblcIW@Lv~d|deQA|#37vZUHL@&YuHR5h~IgipI`Zw+l*W9MpziH9v3dO83{dGYpF0GI9ZYqgeuRw46CiJY!hq;>c@%KF#vUs z<6C6RwpfHtjD_^G(3LkJT9yJ9*2x1?$5M@H^?3kSyOFcT}48FY=K{iR_YbB z>jWc>oOqi?cq*(@d3^&?c)DK$Zd+tY#UPk=x&go8np3MWWX4{Sx8@o^tf{VUt>AdJ zHQk%BiZ@9)s*7xP-e(crE^XWIn3cROWZvjgiqum{UShp{?!I^y=EO%<5mI zMr%KD4j1nl%5~Hjs4x3Lm?G-wFI>~gFIE-U^x=};L2b*iPO2CmpMqZW^&UycKrdz1 zk}eCkugxa6%e2%L^<|A3#w{iNKDdTXCC&%Pj~k*DFEU$-_+lzo<1kU4Bo>T zyonZ38PjQXK9R)J8xKk+LfhE#Ohf1@=N~#3W0`Ez4k1 zu84!vA$tH3A2}PPGET4#P3C?6-ekk5cU&~y^pNq7Lbd{SX%sP_(xo`y5jcbqfUxpS z0k==c3g!C#Pc2S>-7JKBe=H(PZQuxB_mHjQsRVXZyxD?#fhbCZQKCWA##qAgHwyI~ z{kB#G_n6Ic1+ePi+6#;?;G9Ol!M&YJ_Kg*WweBoxi6y1#hlHA zK2#@~7^;=f9?g(nHMPH%2g3oGUD$yOn-y$l;J(9|l&h~kf?}1uBAgLWN{$vX=#}cH zb5xMUDPqhKyH>7b8GclHgwg5OH2$ndc#NgR>Q(;22PBCUVI5B-O69nTd(&go3@?G~ z;9uw=TV7dILq!T7n#e7V-1hRb}l*2N3251!bZ9L5JI^8+?OgSLzj;{0DW>UN+u2st1TMYV>P8pf(FsU zMv{Wt1Flm}WLR~s+Wlf%psB^QMy1gW z;}>=5XU;u|QdRFX?%AyFm7DhM zmxrxh&|uTF>K90=Q+K8hu8Ld#d%^Bh0RF*j0hKSOj0L2W> zOhhu(z_c>Nyz>D2OKEa7VnO0i0#aH9044xXyr>ca?GFN7mXG3F>R!UDOH^(XnJ~ly z$N!6g>bh16n$LgPsx(DY;fj(@5L8{1C7?gYd+}sr-Tnv72YW zp~`hvinep3s;)j_RmwG+_vE9Cs{8IHfK;c0EoVo7<}y6}Brky2b00j(b>@7`fBdy@ zrVR*T__e&c9P%eOw5!Mg(UMRN2QmTN|0%HHL}>)qM%QK8Rh+L|PrHqb1Bl?!R1pW2 zWdr`A6vSFR=3}N8d*Ni`)MTwCuTaHMA>vLiof1~xQDP(ZmHp_!{lj%ib!spN?JR&( zp-?zeT9v=ZJV)_unq@V+Dn)`2ifvaZ=Q2q2qiTZy6T7^Ttpq0J13T!t#0)clr2A!B zSWB%o{~kbDN=D{dj}#qp1uSVN$ZZD99{m5$*sJoP<52YeML?2YH~?4`gBh;Z^pr)Fq+&<&Juc$4NHW zjQX*ewt~hUP>p1=fRxw^eO(F};j|f$ptK5BkEJHBENjmsJ0Kdi1iWpUm_s@{EATwM z&UnH}yK+PY$8igwh<^{zCoBaQnj2Ds2xvMqofF*uRGmY1?$xQ=_m`NA{-G>I!g>AK zGT|0wMJuPIOh;P4e-g~^mi$o!dHcCvKu}2@9%V_-qaZ9Bs0wp`LD39y)vJW9@sL4k z0Ek~m%k{7Rz)d6%0T&j=+5#|M2dQXvt3UVc|Ij^jX%Y=W3_wbkqOJzh7*NT-4|-L9 zaC3znmk!0GPz=(*%}`dd=3vZd%X7l3jrBCCuqANS!i26QxsGVlHXi%9(NyW-Fe#3= zVA#@f1k7_PVS+}ilf_Ke9oq8LAAkOKV1R5yEHeYSYtUdi1e%Qps0bMQT$67>+OQMY zs5T(U7pAGpc*l;cil!#*Rj9f%qdh}o3G0u~p@J%7BT0Cqam!Yz&?CCG6sYeD^H2Q& zAjN{FnDmvn;OMF##T&6*XuF7Sfl3ZuM~ z>%oNvGY%pFf%t3nM?Ha$wK>H5p9~3KECiJjLJ=}F*};Tt1zH8gEXx#(T)oFvM$|Tr z6{=opy?=C#Tmxe+qySXP&tV-x#lIX3xtH-Rm(<7qX{x!pwocOuD*cp!mhsQ!Tw$a- z`D5@ZLE#2KKFbs1yeW=6BnjvIB3V$ZTMhhh{*sqB2UbMN&&e7ils)j`?o34ij`@PR zz9VH{F6keFn25EBhxpHEcT_S>3d4nE1MWC8%j3bT^J^jBXfH099lIW=xt-)>R*EqK zW{IWx{IN>dcoz%L(Jaad4Heew{(>rd?HV6`;!q-g3)=1 zK-Fm)|E6uPSw}>pVqW~k1M*V}J0$5%Cn*WG$h#)e_3#olC>1XQnwy($Q?;nz3fj@M z*zBZiRPftYPS&JYA(&-%vqYdaFY8Ys0D;m*7HHI}^Hy(bhu8wm8RERLWrY;xJT^m& zqEu-+-#|D#mlqr(r6M*}DyX&^=+(&^fsUJ=d+>p-g)PvW+Mt!)Vb$PI(mdFD1sF)h zsqf`%1nt%I?tbzqlia%INICw)ci`MN7!leK^@ZGHdG7}Oh%YluA6>f;V~gN+D)m>u{TNbyCB(>Il*UuXJUjbN3+U~S2WAsH33n6>I8l(-!xt4Yt#N(l-#;BnAE+LS z$ky1lweyhZQ`o2ujQ&)YLC^G2Mvyy2-NcB2U$by|nX^^guIN|%emWMcJbfGJkiBT? zjHD+qCzNju|RhW;?rPu1>E@3azM1^R6z{7!KWcjow8Q^DA@N4>>+N z>wMerz+fYl#$F4XM$%2)6uB9`T5B8sze#_VqLM`sU-g23jA_AM&4)sK)k;|SgAzJ+ z?D()fe0gy_#3NawzIHjIRC}gqC)q*qU^6+m^EGYUI(B&34vi{hKwUdfU8}~?O1XFMV%~o}|Fg$6p0K^;p67k5GDlKjD?Q9 zD;?Pnv5$2VQd%8lPF?()u|TeB*3Rzva1)Sk~y=SUfUg02!g{O7hOQ*||q_ z%(`diKY36`nlP0B2KNQDV69e4)=?u_vq(Exgh0i%Nc%P|Hrsu&aWv6Uz}$~@?ZzPgzPk4_}-Hn=`cNitFXFKFZjH=`NVrE-T}uvaHecrF3*uJYTgVEYIJ zOClN=ohRyz+mMB`5!Hq&%}IH~QvyFZ8~B;0arCyPLh*<8&$+m}|wuk#&@ zKn5vNWnfX4J1ScEQ+~D}lZce#W0twu2l7l>F$)@UKXc=rFL==`)=1Mh!mbQfRzg_@ zzb9Gz?pob9b&f9e?~pS69YZKOz!7tdhDboHQ1L(yI7)6KtWo6|nIT?bCUa~ol7GP> z09($0UZJ>){Fv&MfHeJt-H~A(sSSp6hGTi8asyv%CS@lvrhxqF6p@);>dXQyZN_w( zuVq4%K)W#H8?8TA*PsQ($qqB_B4uV-vVKB5M`ghz!`KJ{Yo?qNOy#iMw9e>FL}{8^ zB#<2f49qDOm>{-OmHC^&4O_msBR=VAO+jSqEwiUScfxEGd7lGY zt7Aesfzl|&&^ChB$X+Kzu4oU_8hDdKFC1VZpqYdmzGaeX$DxE5r?1JqH~h>JqF{YT z7fl0x6k%SIm9&pfmQm$iNNGVg?mb4mmP}R-{Py`m?qDwNt|cWnvwI}>(2hg5_O1PN z<%s8g*yzesWITmqC=Vh+XoDVNR1yx=5{|5g6Hw6GhVrD0d!bkF_#sxUV#${uW0<{GXM4Iz@=(Aq;VjL?FCU)K7ACIlAI z$~lCYcd)Bj{QYYvb}6URQPHwlV2SpNN|w$Ijo?&4VZoj9AYRG|zQKoNioAqMDb2K{ zBsp7<4)V0)h#eD#8sHmm1Vg8sW+mgjgSN)y-lsowdin7Xz{`z7?$L zfFo>pu5}-D-)iBwEwQ6)lXAsGy}ETxtVq{Z(;yR6PJ~gt9P`MAfnO&0M<-xc;H>tN zP0|vcpPK=>a?V{i^w>5pZk?c8Cbr0%=Lvo)+Tn@{cA=lQR*mV%CPN$h_7u`zcUE~h0w8P9hlSRpmOxC+xiF5l)oTl` z0RmxDZ2PKpEE|VXjq|4}Lv||9q{twJf0Sdqb7GYXw3xaW78%=An_PMJ7%xPk(K?za zD_s2OU9q($HO@8^&b-G{D(WfCs=c;E_w5H7JtA`d_${E?L0K^Xo!f9`M|sk?HFKbs z8l;+R)GE1u(kbVlLuK?xtjny>(VS?}?#N{IChB6xNgIcy%vvOhb4TZ}WMqAD&6DXh z?8}x<+lhll&7EH0L+H2r;sfUvxHf@mIOCW4h^2;!iYiL0k%zy}0=Bbr=cs?6III2f zEUodmhx6Y!AtS`R(f!D;UWTdT=#i#;17=^X?T&Bd^u|ji{UZfs~*;?eS(D?OX z2BmH=A*FiYi;|~hE*S$(WK~pE*5)kYG5*Esnwt8mI)h_HwN`&$lQ*T)=cRBjdN)ek zPKCp6K;dl>#$q&Q>um!BHkXbslmesdwpnEMejze&II#el7V!^y9*t99`GIlz` z4tq90;S z01{n{N+f0VQzhfbfB-u&`@arPFc?4Wic*dN$@KsY+8Mkd8mSoBcRSe6jrr^7i)%)?)=BOKpFVP_S56v_o}j= za{SR@nfA<(re1-pem3nb8ES0~I}cNv(rK@quaGh86d!-Xq$l(pA^aRv#NGT@vby_A z%&ZKBT#r8S7$cw)y&)Ei36)6J2bf8Az9c?Z(fZMW z{m^kL%pQL?ghrJN;q>p;XCR05+=)cLGNtNlahzHPUhuK7JGtrF2E<#>#g9^lqjy-j z?DBVLn8ND%LeBrb97yP17MNXx#dYvarfu7}VL;g15B%i;*DmBI;-rlm*Yd`v1MzaU z8Va;XFs+qVsKW8AKz=`>jS)(&S}9Yg7r@bqMO~n@a%$VAR6%G08_Sy&fxG9UiMSGhpAIeaI2`( za~KVX2^3ZP`6Yqn_o8KbA*ht-w}j>x*{)3L4~=rW%C+Ou#`58zSBJV5=P2h5TtgE- z$WQY`{zAEp20DK`%2;$g%M?hRc^5fY>sB(YfmoFSx&<(Z2Mb0r+ijz-HjSVwQepAU z8Sfnl5ysipEo6OXG=f8GhPP=2I%fx|2fZwe!UYG%%Tq8)LRkIHx*c>I(0|=oS&Br8 zQZLTQG2G#v=Ib0Zyyircr@e{*364J#DC4{$>^-S(klXk%pazObl`SVH@gW|5>q{83 zhjlGnEReg1a_m4Y^;go{bsM(6z?>565}hnE#)DQoWoQwOUs#O3s-&dB>y$U z#3i@MAtVayIkBi2J-pY+W3RChtD!Te?5GZct;{#~VpyJ?Ut@02BBeh7=DAKMllm#L zT&UWjn!8X=8t7Roi%2N^a=Q=4`s?5Y<;BXVF(V^%%6;Q59zds1+xCc7-Iy!UqhHJM zd){a|`FK*|nO)tzpgVc%5$1jOU89?}0Y(ShUS5C(eI2O^c?yE~uX%t528fnLd--0H zzgs6Z`bOCeE*P9|ZOaM@urOnsHJz+0ysNzMKet~c$yuUSU2irZ<25xukXSP)&ZF zN;1q#&C^V?ZL*C$#5}(;%yZAbqIVoQ!C&WSr&$JB7ExMwQGvd319iFl@BiRr-!jfmS;Hg@awUjonILWlKp zl|SB#pvt?TTIcpAACIWHv4$QP^ois&Bi8VF!L}G*5W2y_DEcnIHcTGpEI%+4>ksm@ zvP0NR1Vololm~IsfE{fhNs4t$LQxI51*!~+ftGYIzjCZ|7mL=J7^YRvXq)&)3u1g^ z799C_=OE{i+|z3KTU~N(TLR;~%Cz&&iH>rJa(ygx^0f0dw%NuXW}aujH888m6S@e)ZAV#V{#rZBc}3(mQV^ZSNB}@H zfX>wO_?;0`y7?uDMq$D41}2S*Z*~%f~xO z;NQ2=M2qR-;?d5-)N(TOA~3Wms(7e+R3)&4S|5_uaUKE-x1^Lq{9^k8pncLUn8#@@ zT-z0yNxKY8K2@CVI+ZROP$RUDxCk+_CF;~RXgFWWKPn> z9MQ!_5Y;0jQ79*LjSh*pWA@j{TP;&_w?4Y7j$3S?ByQ zd82IiodYSq5GS*EHF(JIX4OR#v!D|XtBFSnXkIW9K5iCB+a)^&Idh?J^|2cGB|w#T;gQ$qMF zB0}TMJGtU_*c8Ci@-xF9exTwtA*^^2zHXqz3M#j1r*MEQ^?v{SoBo=+!bcB2nrEqx zoayP_kvTYFhaKLab3Omxj_F@HbAJpY``NS(DpndlV4V#!dnOut(V;j9qM>fKD| z$Lu|8;JLhL^3%|Um!REGwTJwStX)b4#=P38@|WHX2_Ek!n$@E?z=4D60bt##_M!A! zc(AR3eYJX_o>b!-(%DoV@uPb)_zSRzUQuB4pcSf{+73{$n$IQ=&i|Ida<|%-5r#rz zof>HOa%A=%&M;p{S7=XGJQaHSdspBEcczLgF7UU|Wa98k2_&oH!X_HZJ~8bANAsdO_bEyq^B8b- zIY3lNs~e{yzVSZw4wsEa;gPxHxSJe*PC=w0hNm7bj{=!`_6k(=WA8(&7qJ$PpXbfM zxoE;nN2yNI;Y|Mbj^~xi+OJtO(MMGO-k-B8-4Lvl(0YhOdRp=UqBvFvPL7lKpT^LQ z_8vK@Fs4#D{+pVnLZxOpc+^t8>wDW!sD%le9w;q51-BPQmoI174JwUdyp}8{W@V#P zL5A3@L23C(Qx2eKx20cdQ+SfGwBN)MLe9$Z_*Pq-j|RA{tAc@<-Dtw}LlxmGXx?Ey z&|~*H?RQ$Il~NulZWC0>2-_!3B$yF*Olclo}pn9h{g#o4hk zX1z1uyxFgJ6TJMyomRq3xrh}}zK0oKc~E+Rm8z?q0JamF+7-fJfk;$~>De4<5?rue zvT71e-Qj&;Nq(oJ=annD{e~_re5WO<7j^ii-DAQIV!=ko9DF6u2_PnEsna9WR-8-C zOsKB1O9twQ$!#_yC(G;@EJ*tDBn_)cewNT)U+h;|wJhBjN&uRW)S9JGAWHaAbD@eM zW;$sbz-yU)DK=@Y4bpoBVKU!T)K+TedtUd*h`7ELe?!KBL)nz$J3@>kZEMu*wK zrl+S*{gpz6cFMsO8RQpKj|7!5OGmRK?ouI`c>_*J1CFk&XgWw%o{^}POb^;E$ReS5 zyOPf}zj}hs<1412q50AQW34Yao^G(;luyO<)s&>XT%eyLvT%w)=2U@;imBZAdJ@at zwBw7h^`BCWw_;mbqbBoY4`gpN>+`VsIEfxPC!PR_I@(*%iWD}%R{wM?=ij#RIae1m z!oVs%_m2YSzyoIY#H&8fHbhXj%95V=i;kzFsSexo-;Bq1-+uxumcKHjH=msmUez8W zx9}X3w2>G9df}Jdgt4%jVj{jW81Yx_c*_{?9YWW{Sp{YmKgX+7*inYOk=U^N$9^xN zx0#l1p?6p$8A){E;i=W$s+(v3i8zL z`iw+->5VBrl8bmAYBtmC&I1oZ`_KGsi16Xmu*c;^)(@$nm9GyO)2X)W5%sE)IQoS9 z=#xXi)szVvx?~4+5B--C2WaWLB;?;;Y7z&SI)`eMHe3i+PX%`3Uxe}n6KU1A5kMVX z$Ba`woQpX-OC1#A%@VA4=AhyXLT0mFoT$dj_mS_llPJk7`YAibNmR|^{T3aa+s^xw z9sH|hOosydW!Y+#&8u@yRZ&f9qQ1ob4b~pwt!{xf-i2Km@NWZ2Nu!Uby*QyI@A0`| z{7f_^Gv1q(ykOG@2nuKQhFZkiEFkL3FBYYhH)`h;LG$QHuHd{QvC8!A%Oj+pdVxBR z-fvG2n{Q@EYA1ay9j_#83%<}t_0 z^kq&p$j5Zmjr|DtQ1gREK8dXi?BtMs2R`qgP0IVw_S3Bim3Nn3RxnCR4Ip$IedR)1 zv)m4L`sxj`BYpJx90>iNsOqbWBMko{U{%p9mh6(VNY2qtmqoh1W|k{dB|cHEDr=>` zyUb=YCqIpKj$uCDX-4VS&-e1#p@mScK#wX1YuWDR)oveNYWfh{URQSYWTy?P7uwAm zU*kNnR%Q~rQ4+%zF5>!&IMBi7J2$?aKqt{iR$Et=h9IV`t-7$LB|e70qn7D7HOAmc zeRb>aYX*7Ak1Wm#=8TFk=R+HV=*o(k0NwzFn3~K5Yc|+LPf1LY(DZhB)vl7(S}P`Z zAiKZh2_^U`1ye%!rW5_{JIYLE$~RfN?0A$^vHCZ63WaNBrkVI%`hU*fw*C&hUqZWD zz3<|9l{bew_l?=aY^l^0O{L@*NHpj!o`Q$!%<~QIBH72|$rFAdx))~|#;GHIi|`98 zi%h^N#Ery^N|*Aett1TG-GR1(d@Qy@cc75m$3GrkRYB~;$&Z=M zz=>Qk%aLuPuM}=+bL!)!NHOjyl~4^s6Ayygt#g*A+BTD&%_f)6#DOVZ{vaq-yX(j( zVb$O%+f{o98r}ZBHkXaCXH2&T4~GDl!}g`UE_a*%)Vl>U%9&zZ>gH9c@0S)9^sd`) zx2L2jyGwwemOyMP(CTjCwCxY#nw(F|-5+`Q@&jUwU*}1kTk!4jo^pD%D@2+IFC53% z3C?B=mDC{&l%1Q|o4O%3j>G8^zIR`7mp*8|{rErsdFuJdue)vD|LA>f*MQxtBeQ`p5D-=0kgwz3DjX z&sH|wZrm^bF`Jp-7@s>o{RhSzYiRt>KHqR0u~|Rc^*^JJ+|s>4{ga1ZBXRSMyQ0@m z#xFh{I}UZZ0zt8^oBwGPFHY_oUw<3leEwMHruO6aRdn)G47ruAdr02*k@@36G@bs8 zK{2Y>xkFlsA6{=%6qVWoBCvYCKr`9%18tFToQ49VAN1 zZAXl20D^dowcuw4As}&Jsy4XnXXYwAxEwx_!C;7t+a4dIX&9dbt7K=gT0+F?#heMI zD3`x2`e0V~32k1VKHQvlB(!TJH-b+g|CwqQIX~g#oDqXMF4Y&FpiLCaaGzn;Dw%*t zgv|2LxQ~AF5 zV6(%V;e&gvF{{SZm_+ytYp3yyh=H0Qb|PV8$x}$?(58#mM>n@!*Xj0+)c-s1Fd1su z35Tz+Pp6Svaf-X{8$ig-G z`baAy)A}1-7n^OKtXC+87lwITJ|$#oH!n9R`en@ci)fsY8d&8{p0L6MXK|r1?}+_5 zv#?zFGa=TNXP@vUivdz&5ZIp891Ak`pG_;Ia3k&g0AhE&h3?aq2bXFmtt~C#LTL#k zYESyl+b^dM7U)p~7P1MT>SXM{UO@L0r^e!FXl+$}^pvUQ?KSwiGw_&p#zfWV|ml-PMq?`V= zNE;XEMy--+Law!_J9z>U3NmeQR+C8rV;vp8R1};YZ%&k*rF6_S!!@aSubFo0jA2K9 z3R_cSLpVeKn()4oQA5ZL748#MlDH$;(%GyTX|Foik!mbYF1_iN*(vLU-0B!`6ST)W z(!e`};iv{Y0D&j?4S@t|<45M7k;YR3CjNe}i=ei+G$sfH?<^B5Dp)lwS!Y+l8EI2l zc+HM@O(jar5SUL~FU7cCI!HVz0m!#N%-fC`pf?<2$!F5nn^;@omKyU36#CADHN>r{ z*$i8QH>DvYRGT6Y4L}9QvYrYQ4)GI~a9JJI{&zIIkj(96=i%M9cC+!RHShF(MZHpo z6dUVSQHF;z+NDonZ?ov{0*7*&XIkI!&I&e`zhH1S?avx1AOd$@Y=-3*GgBJR_mv?A zHQ5>Tm2vxI%Da^)wur+vwG+=U=Pn{RM)`7hbr`R7JsGE@4r^SG8qlW?#1zvmy6+MOyv`x{Qc|%yycHm3?emF&LIZUB0SHYy138zapb= zQM3;u+jS*ADQp%}OCK4?Q(Te$N=&6I`z$Fvds3v=3o>C$D-|CueF$F48?>B4iy;RZ zPzh6Lt+CLuY<~ii86n)pvovE9NAGBn+z#>ZGT61h!oh)(e zX4!-^3dmTBu2gL*+B4W80=THe`O-Lv7p4T{hq%?6=+!RC-&J^1bOdpgp^&PFsz{Mk zm-LOe9xMpJk!8@?4iU>CmL$ms!jf3%8!`4h=}jY6xoNUD9ZuSXu!LtFBk z3NwKAXkAK<8O<5Bp}2yG0;Tws?bRikcsftdDXV*Ga8cw)!xSiwVS=1E@lKB4Ar4$H z_n$goSkJE6ZquYW-*WV`e0ZLo8%T_xXY3W_?)rb4^d=l8y-idvvjd_Ne;w(%wE6PY zIm)c)XG5C)%09CBt&g|o3O#XtwPiF;PcmqN6V|oIakYs-HNhcmQ_x0H3hSajHMB;B zZIIb?=du1Qvt8~7(M*|)@)tJrw@0Gz9iFogP$z(#Xrikw-S;&7=>1m-3Y5RcD&he7 z3rapk5I*K1pBwUIiZz!g9?BdeM(Wi4O2DA5tXn}*lRgEysmrs0i|z^$Yct8E58#ng zbGqcINb6Io=E+?Yb(K&`>(`M2N%0*KYv1y~$S(_Df0I}tw@xTDoqbT&9zbtWjzkEbT=7Y5N88YQarBaJLW3PdSVD+J>*Grt`sPJ=8S!0#vYPi zYGys9KSrM3%p`;CB|k3ZkCI&yif3|x+y3N9vg?V$tOEc{shMjYApTraHF0nk$xCcA zmhyko9`ZBQda1dGcyoc-K3i%QAg{_b6$9Eweh%taDM#e|LYK(N<%l|kwqM#zZ&bVi zjKzLEXV=W3TfdShdOnv!n>UdO1%-BYjF^n6m=nrA-$Q;4`7k6=xodOQ3(&tOpo-tX zIPN3Ah0yOHS;&k6zJ3p1UisyPuRp-oixPiK-vvtH>T zua=5j@f3L)ROy0T@g#YA9|=O1*Cf=J6=wYfk?P6yfNHdxlmmWV2jJh>N3O!Czm|G) zy^qgHV{@z=D<|zXAWCnJRXish`C3l8WNd!}i{oO8?m70_9x??PxU6Zkt0v5xIm3U+ z46XlNwtfwS{vkuxLg-Byx&%UR$H;K*2^ z#0gwR)h@ebk$jH7yQMT5cK=9|8m~$s4GpoJR%O6embd56!@;2H|X^nFSC% zSb0nK(JV~JmeaHVgF`ZT56#&}rWWY%HMExwgU?<%d><*qX0!9bKTK z-?(re8BzEE$lYvEYR7;XjqiT~Fxl{3N^T$SVI zdqA0z_Ox~?xelK7BtzRovbEF5NUep8(M~60wFWW;!UftHWU986%!P2N)<_m;0aC6t zla*Q!6t6Q$wYCj3(hjmk3z1eWO1iZ!a-p`9T(6x+ZqUvlH)`jSN3?(Q$#1j^$t&8I z$zQaKsL(E8b`@QzeS@B%eUr9p-=bg9uBVr2yXe*0 zZhEJ71HE7SE`3zHk^V%xjs8lzo&H|CgTAJHpT48rOFz}_(*|n~LNE70Klf`zT8~zu zJ*<^!y;`02BW;WJn09}L_PExjJ)wP5dkV1d4B+9Qc8~TGD0u)jK7uZzo_iVQI5-ZpK$WGDz%o?=USiAN*J4gE~nicHp+S}|}?HzWL_CC8y z`;a}LeZ+dTf3qKJAG6oAPuTnLKBOJeHSIG!T|2Cg(vIqrwPSz!G^XjL%+QxJp;s}F zUeCOG1549enWdk_()F`hrhX|KtbdJV>DRF#`t2-7-^+&UPqJM7IW|K76C0_&%|_{m z*jQsI^BH5=IAakTZ){-`j3zeGxQI9Eo^_b*}~?S5jM{}hs`&?%Sz41*kbditjv6aEi>O`73LRg6&Gv`&t^4z z9INGptd7rT^?V82$d|!;4LgoOT2?Mpw37$ff~mW0XE4l&}F9*3qrdg zv;aaku(3? zLMBR8-qh|RgJp=b*T^7tD`?5-##nMldgL;UCh|k+`59ykrBpf@(otKD>D3Urjp?A> zR`MzAdjNq(s`+?!yY?~Yq;b_ctQ=ybZdgnb|3)3z8n>~4fgdsDxh-Gi{Oud_GU zz3e{d>jQu6N%jMX^O%$AYIZ-%CtmXn@^y&MCu!365-k1 zy_&PVYdHI14QCHoM~RQKeVp}h_VBP_%fNCQGkiNfkC0qQ7&-oPQZ{1R7BEgG9U+Ur zP%&#EoRzT&f=9?qcxE0UVa|Gwk(neNY#HiQCj)=VnbIqt`za{YlWwvT_@(kM&HyWiuohynR+7%nB*WM?GKaO1rL3J) zvk-}}vq(3L&`uU6NKv=5ZfP5>f=Rmt$(MAF7WEyD9d`$N zLOLff^d#idpv=weDWo?^A87ZfI-a&mKFNP3+b)c;#FTW~Yozz*7$ z<6_(P^%kHp1fxDKxz@{EwR)Xey{cBI<)^XrJMBY2qrgQA)N(!7?3U{!FJr*a??rzd z88zcxI$*BBf&yT-8Zg&kUZbUo&0(f=1ZA3Q3^htMWGx zuI~Xlo}(+I*$FRSb7L&Q$k8D($Jk{@+`CpbH_J9?TWzORHl3Z=lzuO;=ON@K+Crw0 zo5>UM{UkXg-=EQm_@jEjKD5%w)Igk48`?0T{s1i&VEZ-L2h2D^WeY-2Z( zv)Rq$a&`;3n%zonWVgW-xP#oy?j#SgJ>+p+42YzqtEWzx&q zRS@&9O3%QgwaJcwDm3N_!Iqn9dj$ZJ`3TJ(vS2OtZ5Np?Nx4+n^HZfcpG_Bl4Cn2&q4gm!n1-d>)HUN*_s#6lybrJ;>HeD*c5VUM@K`&ias*eV2fI(4?iG?5#>2eJ9(u!SVS)s$RR-l6)svM1`3ted& zKv=}dvP!N2&=K*pY+Bh%SC;|f*_!Yxm$2V?e$eGPZ6nt=dbgduYvWvJ%2Q zbRBx54v-1C{3(BW$}Tc8mp@5QK_5mBtpzp=uex5k9(_8)q~|7^ZjggX>%m5&8_|z; zy_@51LTPVERbjJK6%zPvyc4I!^7ZN77FV&vl+*exb9z#lJtR}Y`lUYYHX!nP=ovlK zpQ@s*GMU_IFRLV^H9}f1ZE_XMrh#7C46oM2oI$x;==y(zoM)<>+tjN~z1s2R6ze!n z-G-CKymxMX92-b*7m><5T1UM`Ag6-cSBl3hKtdq3R{ zx}+!9W9yPzz$74R|C(@Vdm z&|g=oTwKx{N54+VZ3J0Nc8;~5UZoM~bj)`}01{*!0CiR@`WsTM_ecj~uXL$oE0;>P zLM05Cjmps&vQcRj7UWtz^lCL8uL7%^s|4jVd|{!-=U8k`dQN(dbsO-Iw4C%Ar5R8t z!!CbxaXPg3SLHMua5JNKk>M~$zM04{_YlY?8S9dbd+E25>znPa4@o4~>ZRY_MMSQ( zhYXTRru8tr23Tv%b~z{s3Gu1lLTV+6N%S2c74Z*A%(T?XP0K9qq1R$pwcAMs_EbLu zDcZ`l4v-<)^txPYFa1sry&f1p$hA0;4yb?2FvEAjKK=#mEaRKiD`G|Z1%80bF=pVu2B6=1PdJdVW4<{x1NHSX= z1!8qHDbvT0HTrmRiar5E=|pn1o=2|N^T}SlfE>^Z$#Z%Ud08(euj?h`EqxmKNS}XA zKGA28L;6f==(DI-pGybn^XPniKCRPBX}i9FUZyXkx9f}PgZeW1yk1V<)t75ruh25| zmD*5!l{Q_k)aL1{wI%u*ZH2y8tI}(+3)o2>_vSidqY2)y{DhUKG4r&NA&Y`u3w;g^)Kt``o;PX{Stk&eyKiDzf3RI zuh3`fSL#djZ|KYQtMya#Z|a-$Z|ghtYa#YJeXsr<{c-(z{VDi9sNbMJuit;Hf1ux@ zAJK2skLkA?Ui}VZvVNyA9o}>GdyGx`y+)&cpV6#8V4SHxXoU5>#s&IA#^rjiahJZ| z___Xw@tppc@uvQ`@u~iVaae!SWcpL4M}OKJqCaC6=+ByK^q-sc`Y+7Q`g3N3{wp)2 zKX2~VrAA3dkWu7yGMK%}UITw)?m04v{e`^_hTS2OCA~VF6_91@4N#2I*ch;?|H}Rj z#^9Z#iTwlOy!yFh4SSObV(B}{M)nqZP4o{S@7s`S8I$c$hOxvzveY3*s1=ZFaH` z*oUBmU2mqdkD#nU_8K3te@pMr0qEn$(i8O(Xyu%(}PxeVBOdRzFwPJ)KF4kCEYWYXTStUAW@h1=hqd+?>}Zj>O}bilbkUBKSV? zIaw}!LSL?suAgP_M0bBt_UB}mb%gq4WFF)@LM+a@KPQcciI#JOc%?(37?Ot%KTP1C z=F2=v7V7ByfhrFZz^YK$4wDH-$#CTrB4eDm;gIZs;4v~8tCqkaK+aAb2!n>)ZLgy5 zJVw$^m`{_QjxT>k#8FbAQlZTpr_BUU)EA(WtBni?Ar5zHz3qSOrOT$bP3@r>Q}@&F zVP<8s-)?g(`an#Zo+=q-b&<^`#}qkSQU@*x{Qv40%YL<&-m#zFNr}`$oD$2593@0| z99Mcw8HuYHx>PY#l*@_rXknog1HgIr(>)qG#;V<{_bzm4Wz+8~&Ku{sMe%KN(t^=n z1#*0iWa@t*x%z+WWU~GS$wr^moV)^moaF`aj7t`g`O} z{e5T0)*3MEjsbz|R$STq8@s`9N7nAN;i5PAD?5eIcAQTW86kca`hZ@hBPA_q&|oP!rk7% z@Wm!53(v=O66w3N)jQpx2_x5#$|GnurxoNH2ChHTt5vkGhwjBjwOhzkcVj<{8z&FB zhY$?Y;kkbX%Q1WCzFZ^6lp?*C_5e{_8e6p2-I{OQi@MtJqV7O1s-yXWb{*4vC)z=& z`SM&nmt#Iffoh#@&#}Eolre&KRbP<0`gjEj$`>3R<}pN##CWdp_-(|8-9aONNRAm( zWB^Td634H&ar3a+S@wJ)X)8^u7u(LJ`}N1@Bb$Fg0e`fI{-~~pK9)F?k4x-k(QFSXTLRZMRoSCI)ofu9mXKLk?hb27}( z$QVN>Qw@Uz4MDCnJmgx#OKvsN$UTNd9yHR)OU5Abo{>d9FmlLYV<;VM45RtRa5~G# zrDcD{2)e--MK>8^=()yNdX3?u-!Uf8JB*3+m&O$Oo{>in8Tr~Eqd+S)rfRE=Vy((3 z)M|_(&2N;*NqQT}B+JQI-O!GLguRE9>n2D#+-ljRbCgyzpA<@2%jsw`Ps&=8o=b+? zp}WW=U0?~|sI|IB_kvU#L>B02x&>0L#+HBBCeAo}(i__8QX*2~)i!~yl7YTzZH+!i z&xFZ-n6~PJ**K!pJIG@o*Yb%W89@QWsP+%X+6R^pYc&g6kR|nOz%{aj&1BFqGKX-v z;pzz2hj2Xyo@!BIhGP9+kR}ubpOGOTsJ`D)@|Xk7>Av3xw2RGVxP#0g8V> zx3s`tu(PE_xxH?2#nf#2V`==-l|A&Cwea~9xt*6Dus;v>(4X!iTOXxA+x#$nwrVf^ zIk2H$R0G@j92d}3ov`0 zC<2B1Hyh#c+qJHf2y<|?%9uq48MA+Z-sY1$qm)cD7La+yLbAkIM5>I%q{CQ3b{b2` zxkeee$XG@$Gb)^Qi4|m~o-3Jn6)Dt5NFAmFbgGf4!vHJZsE-28TO;#GjXp*nD?M^o zI3Bz!bf2>^ZVWNLAoI9Bj_c#UAk&pBE|ao((Er!jbHGPYbpK{{W_Rw=b7_A|0wlD+ zB>|)aIRQZs5ecA_7?dVOELgx#DK-$%PyGM^QBXkvjRll?2}FsFqNvzF5mD^Qr=s$q zASM6zX7@IC5G?=v;HK=%+u7Nf*XF&qN066cqA~L98dLiSc72@bY0+DAXRRYkwApKI zgI%>o&viHWurBlvtYROPIXZtZ_@ILAUJu3PP*4)x?_+I~$o6Q2@X5(ac!{F${6%mN zW{X|(AF?|r4zs-__{u+xXg@pFai>DJAqrZHpuR>VpSh5+>%K_W&v8UCWc&+#GUblw z%NR1?45M+h-nFhfWA#^LDOX&`!tCosa8Zn+_Vk@T_xg|?L3^O#s{Mb)(^h>O83xVF zddJM2CTJml!qutvEvjVSbr2asSA#E@A)I#GxA19ewE5n4!>DB6huQv+$wF2Y`)`?T zu3j!k z38GCU`$gN+vS0D;k->j_O;s6U{$kiu#SWGgRj~hs5?Kgk?n7mEVg>sxl*~dYcCywu zv)}FHEilMV*#en%a+n=1hhCvnJH<{7vm@ou$*pULb*b1XwK^1_4tdcX(n4w2Ax(Es zy3P(%+ld4=iCQIw*&hTp*-oOX8mv>-4(pObSX&)Rrw)119nyb78Q3Ai1xs~ydUZLN z-dn*?|b+^K6v(}+_WUmeP%4tdcX(n49-A==Rd+djIg!8&#ANTC(N+Uk%^9rB_(q=o8Xhk7npskz?fR@=)V4V+>wzVhk`QyXkbSpJmK57GQt7$;J#_UT17DUcl=a#xuq{ zZn_)mzc%(8KVrLgj6GCF@|%pLa50yHiF`M0jrE;GH_-zYi+s_B%Ip_$vA85+GR~U8 z`A8^AArD34b7UEel0)G}IRXj8Fqk5TBV#feR>;fYC3ywBF0X{QUa9;Qv?lgQ|l^TF~dK2AQ(r^;vf-Ew~gpNHuJxsorD&+*Nee_K9h1T9Gf8iPo52EZ2)mFdZt_iEHIXO&A|S326%Ci>73l z!s6YWfqdyi(TvV)_&gYe^V}Sg`JJ#$v=Bi^C`OS{OMV9ei{BdZ762GXymrfG2CE7WMkHQk|En}S}iuG>? z`ZaC@sDYay<*yqew`7SkbxlY7B`JMf+-X;y@yptw>qF_*V*ip zzgXBZrW24(sq_d0lDfv6Qi_l`3$YP0fW~2DTeA==&8uXYm8>RYR&gk+;K&S!7yN%A zRmph=UogxKt&t{?@rAfhystxoQJj>XWXGe>*eoN#j>mjldXg(M_6u_n=5kp7ksT6d zB%$c|Q2`QmZkAPXt1O5#BB_EaJHCSZLdk`plq&8ovqc4u3#C%Fg2#sfkxZIVoSvSp z@6!qIkRG{1C?h?+7zs}mPe6znc5;7uCQ)}g)eaERs^EzmcoK&h>3H{7Y-O}`M^8r5 zRvJ%U!&5i#fPj~H8WQ#N4LqGedChK=lz9dNl)CY9CWlg6+5sn5WT!b9ni73b&9fqw zE!-xnedi99Fq@1sc)bB-rprZUB&6}|@nl%S>$`_DWmbSU7*M7nEz&c5V|0ImhHeAo zOILe}B5kH2-v=c>fE2kCGUSJlEk8yQvIh#~C(ugng^>IdN--TO_rVDHCEO%`L~`;I z+$j&hEcr7$D1U{e@*u2||ATe%5bVVA9+SiOri7!W$+&4TY5G{a8OJirc$RA>uoh+# zYiTC4xn`sVkCqc1$#d)F^N+~I9x;S6-MoB4y z-6Af)z6!G0B+-YoxRA#t7*maGh=W3QxhN5RAs$+>(V`z-O@I-st>}M`_f3MESdO?* zT!ixY6lRM72qgvXWQk%R-YpeoF)0RNE&vb0F)}?RwrFA`{=ZC&a*aN|!zuS+{mKGu zf0bFZ1^h+Er7gvXeuc@SH}G5zt4Tm9DAWQ<$AU1=(^iD(wk&X53A}cAt&uIP+OlJ@+VP}@2=q#_06MQziCy&8W9O?K7eklE@E19eK} z1^6ITrgR+KtJ4L@TrBW**jQZIU}l14WPq@y}J~4EzhqF5{cdp(Yl%suOdTLzV%2|=rO0P)W3Uj9G zKW(L|e47GFj3;wd_wA3yl`uw(b*KXGjT7m|`kfSXfi&i^n$<#2v)WG^-|=P(A+eB@ zk8?O)_Ty!qPYCs$q6p2;ls42ASqL(Aew_#byuaZ1#k%=K0Xu>0rga{#{G z!SJLx5T1WB2f=2u6yC<`ADB*Hj~R%68bdw(W+mp^ip#|~t>tN=F{Om3puT2neeeKu z)a@)BUu$s%t^ftM!$3#(N3X+MDLW&06mzsHkn+Pj8Uq^88}8K@kd6Z`*4R#Z>%+PK zm3n>b)GH;@Gskt`?g#$k#C|zutId&<_ybI>x{H5De8T>K#-#rj!&wb9b=jpMgjh7X zp?cyy#1P_1)-*T_iKpP1t1y4HvB$N2BQtJ#jKm;u8G50Gc|ooDnx8g-IRX;Qkx_B>}cM z;uL>+iEAIKZB1U&ZvI8Cx2&fIbjCXY3e1U75i~k@FRp`Y#aICGLV7;)7Vv~iQFw?l z-WBwnb9Z#tV-4W~yTILm6#B#2e_>u&Ui05tRzaKlnNz`M-V9l0bTAa#8-pz-h;dN? z7Mz+ZYh6|$(|uPHaTqs5j&-0IVLL&CQgeTeFfTg!EzLyqdDp3dgQ7UkJn^rH)gxPm zuZG68Ex3-i+(PcCyk(fTTBwbPt9a|OV1SN(^LFcb`*LWajbV9*$W}j- z$V8ZT#LZsd+S?+a_F*1c&s&zmnNIVwVw`m$!Z?cTX`pUZS+KD1I*cwV$OkpIS<#!gV55P53S4x zpu}7N{mg|h#C!~i$s!nLJ`6XTkHD?wqi~zK80MHuV6OQ%RGCXX%f(iZYYY@O;>-@C zoVHiI4FXtqlb-)=QI?DC!5_eVIw^m*1o!0#OH2;bKt0F4m0MzpC8m1zu7*=)nOzya zu$v=Wm2vllUGF^g)q3K(M$JT+cSB_COz1hMn{nsuboUzeIBi3QFPwf_k_~8@>p;~R zdcb*}4X9SSo6q37dlu5nl}N5vK?CzSXlOo<$a@X+FxMlgUJJdl}JqvkCEV}A2D2;qx!JfcW-uf( z2UdGHK?f-^U%^qn3dxven47(QiBD#{N$%nVDC)jGIvwGNZex!^ZWXsVcQ>yio*4Jv z^dK((o_%u`^Um7Oji2WpoacY&>Fp(J9rz2hlQmC|juaH&=ey>5yk|(TkgVdpwKR5t z)(G2XCGUeYK3X}*OHNe|QeBjC&=;c|q>E`GKX&kY%0XUY`>N^urBi7+B%*Ywvvyo{ zN-n&hLZ(ryB99Ymwa2D^fh!+$0fc?v8x=0Xz>qot%utMA42p))3x^nQC%Cg0=guAuJA}2>p`e^obE+fGIRWkki+HViHKM(1U?SXzT+2`xjkL>2=i$0t0?UzIUyOAR=yE@(g4cjT z4{f28jbr24b+DMNV5`|WO#N&a+lJ{3wp6E7eiz$OnbN)N3-*6C)^B6)QyGr4Y3vv- ziW%$(rBvoYK9tIox*Ko}6ylEg08Dci_{|T&Ha~(k<{s!{eu79BWoGkJ7;SzA_h5b= zrd8%Xc-j0MUc>ZFOm~=H!Y=bG*lm6d$IWk;-~5&Z%Lb_Kc8mBd*{YOV5GQROaqezV78bp?tlc=1eS{#h%_u_!LQ;@yc)-jfZ^7ifEJpc zjKkSzC1#4dkUaNchsE96xuPFCB>pY#L4Ic!yGGoLITL?&v#Z2?*q3ZJrbpNW%sH+< zm=piOtBC*k&0-d*N%;lPLChw2+8*jF$UO#aw6zn8b=7)QSDLQtvL)s^_p-!1YFe+(rtH+FQ}nQS4U*o3zwF^W zL=7@`b+vzmQ`<%+Ci$X+nm%soiL4| zLk}2R9XceFas8y>8cB<#Dwjo^vAdSAzC@x%^(}`>wAWvNkB)?u8S4bxXhU-TebHfM zoCsGjXlP8>3H=m_tw`Y~gzIP$jRnWL?E?IA7jb_@dPEMYSxJ#T_9TfG`MGhn2=FTc z{K_!DiVVm0ha?N3+!^Lqhb*inDRX?WN>>XZsfu4yX3GkGtz#MBV@QJ7!LmX+zSI`K zK0B_GUsoD~@|}alSd{M^EP5zEF$U#32a8GAA<0Ae><>G!nojWs(J^7B?Q;+5;%q-% z)nI>p?jc>A9f#yLt{SO^kHAKCNDHN4hZGkq)!E6_~{ABB|!Acjb zWm`BeR&^+qI^;!nNDBq9L%;<~b#`iX;VK}{;yh>qtym_@VGR*;OP0Xex@jkh@5)M8 ze=N6UU3B>xHjxn}Im|}0d)yRv9$UheGo*hc>>l=jE^lUUu($B~4pzlJchmh?{~J4s z7;rKBoc%y$mjYaa;{YoiY%3G8EgSNz2GGQ+2hFT(7+}?ho2^`U+G-5ztQN4*3c_Zq z0Cre~u*)ifeO602Y_($2YRwX?Ggw>9cfxeE)rQ?;wPf=!t+Lv(&#eNs-)hTKt@eK! zdtZkbxETy~LZ~74e3@7vf>?J5wulEsYh>|u!Pnv;vigC2utzL3$oTF})>ACPtCIGV zhl|r(Tx_$W8Uu64W=F)sI<(e0HbOii9(8f??T}N06Yd3G!|gs>$B#M+r8RJaBeF*> zSYokzY=L_npc@uyP=rZ1ZJWp;$C-b1V)UfH*RM|8b=ppK9F3&>WtUS9Myxu!)B!ti znugwA9S1H^&11w}A(n{89F-dKLyi|+nhr{)F{0+W3MniZ#P|+couX6+-Wq_&8o-=* zTr5TWTPwg*%@bJT=?`21{z-@z<>Dzeb75w@>F~iQrVYe)n1?f@; zu<=IzbwMScuwyuDV*5z=PH4esL-Bs3Ao)-Kp2x{!;M_64%CyK^E&*823t96_Q zrgLMoizepu+BbCWdF_9_Z^0O2s%OKP;kA0gYn9{LD~8B~IRRJP3B)?I?rNZ+%S7tH z3ZjBuC2Od!MdI%L0R@K&%xMFB|?nNGE|5h+lFIiQ|c^bcQeAnPQ zK8ak;Rj}cDJ_$>c7eW01pVB43rxuG~ee98iOL%mc-#lVHpG<#~AK z9mk3~hGA~0SDHj|9i#H@745dpDfVM&QGmN~9|?}WT3Y0`4)AGilj)S|u>|-X#S&{~ zIGwW6WxAkY>D%IauU(@$LZo#azT)d~)+R!#bpsO9e?hKw6Ta$6xTPi|37Lun^=24p z-2zjsTj4(IHh6!`x*eXkra^@@9bUHXfRC&hp4npoWQdKp^$chYDWVE{LAA@v}i<`MRVlfI2xk{QI!2rLrlFtnA zyHYoW*=qrQcYyyJGpqVUul;)+r^;rI2wf1f@`Fy4!z_QW`90B^9cwnS6?34Tbw8YA z&Gj@p^&lu-5-;mMJv8d}qIs8D;uTzyTg0pGD0_j>i`7pqX9X10;H2mb)V;ra zx(ye=HcEd-huQj&Cv-2FuDt`)Cq+t*quL)V(Q)7=2f!L(-37&igc4@SCLH&iGj4p`R3zKuhd`@XLO5e7`S#b@BZ8N~{*A~gy zg~^SmMWJ>;E_F-P)2S%0d92XgbfPw-uk|8|)thkBRYP;@B`CCBhBK^J;Y@2Y3d37) z!)(_9iqwP~(&O>-?4Qra}vBGX(FLT!H^ zauoARV&%i5b;yTDW8}m5Sou(!oF-t0gj)IVs2yKTirhhDMw&@7p*A`7+4`ymYq=(; zKHC?)jvs6dY>^~Gclj{&WQ?NrywAh(kT@H;1jnZ7Q`PwESwYD6j z7^H<;U`1h=KM)d_yX!R0G*_S2SI2*Gry&h^a?3DZz?VasZMg;Q3`D!$3i;OX2W{U5 z{tyM1O72skBZg zFA<@AgPZSrWES^Bn)P3(Z~Xu*tRIn4{0Yv-w2yTFN--T`{fvn17q|=ab1?lB({HU` zSbOV7)&I(uf3PjqQMSW6#tvA=xz9Sm(-iP} zit{!~@b*gb5~cWH70=6*pAS)S{6>|i_wp=6x}`8u+m8C+d=%KpcGQA1Sxap@Dxn4I zEIy(r>1+%1bzOIMz`5dS3NFSDKvS`s*jcs_hPX~VbKx=ZF*)5pJnw%k_UHg+Y5W}V z3Dy~W2;@XULi0&Flo`$4H9C|T^TLs7XkxDiZ8bu3V61jdlGz=QuWH~*qIgcYu=U#E zW_BGmkf(_634h(^6l=-TcBn(NPWsd4P>0A~NAtSX0d+QX|6-wv=*BqN4d`nE+9&A* z^t8mMPINVglx6D}pa};C`J9kCmVyK?4O!*T zFr;+rXXNsXt;}>H*R#AH?CL{*M&PhX$0X)ZcYb_ag(4g1WIsIk?Rb1B zxA8gxPwM1N#fjQ9H$8DFTyH0&C$$MB>zTKc!+bq~Ord{V7>Oni8!z&TN?uv2hqNIw zq>Xg1WId)Tx=o4`o4bA}MYnrF#ESZGQgY7tueEiT05HoeX5N2ZbZ8-O*h_l(qps1Wd;QM<4JkkI zaQTUc#0sQMona`_^o5KuKTE*$e)bf578df(d>VhBf$4jEFW(0XjUC1Z#)p{BGJZA= zMoi$4W)DPslL1O)LJO4z1*#sjQ`yj2)rSjIL%3As!Z6hoMyf_IN;QT_stHU{&0w0! zhncDc%vV8JuL__-6~U{jCG1eG;X~C1cB}UAxhjSusskKVA;wf^=2zWVg6hJO)Y&Xw zb!C4oRChK|^x_TC>Uv|SnqZ7k6OEhH4aO98qj9IY$(W_4 z7%S9NV~4uM_(0ume5h_UcB|WrpVbWGpqgeJQqx72x?TMPUr?}9_6Q`2FZp5cv!}oiUtunet#s{D;&~rvFTO@;KZSqK zge+Z`!aF06@(tD{^S#)E0&}GBFI>o}#%{Q6EEeHog=;=@6{18biea zeZ;)OxKR8|@%tDv8fsp~WG(pb?vsBHHYa`T!dLkpoUvTmn|)ITd*|kV4GFw1}SG z`&Xe)J~f?RUjt_o15`&NBKxeNqZxFRy!mC=?Km{F#Bcbo248UUU-Z-s^}&DZ?*yU- zcU#Io=|bnQOnVmDhsnJ+(GrJs0FT0d0Ozm{)$yLI*mRzIn$JcKDCG1D{7z@#QGibk_Z0K&*exTHObh`VYjbS&*RSAp1NQ`l|+Vz! zdOGVtQ9A33#ZgyhJyS1k(77@0Da}mrqpP!?sWsJx&K;wGm58oyi_%%gyX~L%tZ=7- zb+V>9NSbOd{_kWKt*1r?b+UryitKf#No|P1|D?Hfa&t>mTyV0g`#692#R+1WH5CVz9jb|4fs26nZOFg~W(AZH`MNJ^JiYTar{wj}t z68gNIWRknVNeU6CAy$85-v{`1ihs!8TnGUhsp?ym{B38L#tQnx=jFjL-$4op)0W;s zdnaOD;6y4m9oKOBeojoS3k?Q3D_u#taS-ROR#^q`lu_EhpuoZfo=u+?6Q@9WLZr#Oc6#4yYa@Xt?EM#D3DkcRxaXgQdJ6e4^$ae)70^_z!d+Y9myu7htQ}1aGNo*ri^A&(zECm3jpZs8?AdwV4&EEo_k5#zv?&*cEC! z8?WAElhh72Q@zWUsrQkw`GAGhPFAgUv6t0H>|3?Rv-y7tLMu(K>Dz$cd%jcOOT)n| zm=i*)A2BB#eK_V!#3w@MEZi&-E@O8|rM14dvn!-e+ZoJcqof~m3TCq*GLDEZEMq-o zJm&ncl{JzH6qk!#0k_LUtczzeVU$eL?8!3dDU%HaiIG?#&b?#+@8v*i=0R(Qq}+i) z-v_1*xgLKKauCO?X?+ZG5bK<$MeAjbQ!HXAnMS`3S*eXKHQ6Z=!EF3Do9Z}JWX;U~ zW(ULRfZ4cX(1;4oSEV|UJ%Nis(vy|UkeRMXe*;b=9SiYbU%Qm zYgpg4tOUv2D{EO*fbXm1pRZ-x-JQ3V&1Gxhq1B$2-TBmKLoj{yAi-B3GJLs^>&wRn z%+-&X$G^mM2-56M&=46(AO8x|uT3BS2GeiB<_V5Ug0z6 z;HGt3+qAO4H4xI6gi_Kr3rT1iN}5pGG;NyDB{4YveQz`x$z!13XWe_>z2~0wKj+-} z{QO%_J_TT{j0CX|PiS~j$E6^DO7NE&E^Bxyhyb1rq7=`l;j?OZR>S9lD92v~u?nA8 zv{y7dr#`-*WwIE)? z*VXV14d2x9vfBIy#qe8Y9R5+QzOCUE9si^lzpCRqLHskmtK)k?yoP^&(eb)s_pdts zO~?0j{JWz1fg1ip4gaa*hdTaC$B%;eG2RH`zwtjo{4f4bef~rZKMmq4-YmmgxE4gE zKocp$Yf_?%PZvLVNGWxY01wGcG+p$dlu1yXl&h7Y%M4vAbg9&(N|&2-3F$JE%E>In zaJDXU)I3+0d9+BX)i7Uw4GVNxsJJZBWpNqjCAx%lS*po0U6w1ED|A_@%PL(~>r$gj zt)QZ#yRD_;*zT5tEyvn-?GuDL2F;UZBw;4|BRx(!p6uTsn9*h@Gme>b4w{LqMUw_k z4(&Ca0YUIsJaZ_XjM>8(fgBO&+~_o;-96s2Bc9BT2m%}9$+)wBS>UUwJt*+E*)g)I zbc9o>4 z!tDIry*zMuY?(uUl;?}vR^jQc?rkGcE9Fo)PXlHu6^o~pv!{sWM$UxYX1dE9B8y`Z6P;$tbs6)HIpn6?=QMnfX+X|-jmRWO zxw{W`dLdjk%_FtN1T3FMbfhSimT<$@$=DAQ6joohUr9{i*>9jH#v!4w5t&F4m8FN>pKH5sqO?uu{ zrqJ_#&w+k3(N7QR(VQG+Bz>Pv^{364wZjX6ps^@2ihn5(m)eO~Kh-Uzn(oZlsd?s5 zHsf^K#Jin;ZX1XvVreVs0-q=f*qNjo=(2*e(efFio868T*lP73nO>tmq z4t?Rev^=-k?iw9*2pG%pK8y)=UdUG$;Z;1Mfs;c6wo;gjJ~N|opW*bt%B_^kPTv?! zcX3Xlsd)-+lmCYTg zTlH#aFr-nM42dW)Gbhd2KajSERc07+v)p3f(|F8~HF!)=HQi~vf$s{+zhHQ|HjCe2{)?||*n`O%sLEU|WR@BjC zt066a(yB?DA?>owknOUg!1RI|!r*T=X>%;>*x__G8P1grLv~85Qusjw2@D$ej52A} zyDO7aa4=1W?2@%ih6pRXVVOwZ*F3y-o2DXDw55Aq$7RtWF!X$6{8JteLg#A!I+ZRWnw34 zyJReZ=l9E{A@(ALg3KWl^~k-@`-whm+x>1^DdH=mpX=wg3Pw7x&+0YeJW${OmQl8wGDA$3t<>k^z!DM2hEiHt~&UuEzEw1bGVTJD2 zs++eRsz7jO97k8iiiJFHdUH^F%XUpZx{cLS!)3rV8sG940019#)b?~AMN^#{t9fDU z`U@UsgnBb~EJw04$G14$eB{TNL&}Xw9wh5yc1aWP;qknq4KD~3w;`*S7Fv}J$%o5{ zMF6)JgZymmULsvy=-9Xai$(!1teX|LXU|=XcntSE{)?CtVck+Zl+(G#HzsPFLsz`7 z%Lr?zCh_uTD&kdiyoOXs>ID&=yoXEU!$IbMOn(#p{qp-T=Spsami}UhK~31h2j-tg zjfG1(m_$9>E4j7-5?#J(q1{*~lfHRDM<;=G!Wz7A&p6h7I@Uelyq{}DtJZ-zMucs@ zBvgQ?gR@9r4qQ%>E1tJ?!F?U=5`FPKaIS@^O7I-XXX!BU$%bjPj%+n9>DD+u+WrY} zUG2I6mCbFleX$7OaGz^DX$h7Vr!hT=0qAyt+eJ5jb=y^$+BW#e*WY$j>(>9iMpGOA z_O~J#JgeT;R#&z_!Mmk zZm(GBq|P;L9@dAHjO>L*dfm4ST?(1R9_RuRoAGa}y>ZDxj|Yow!_lZ=FL2I5b>WFE z1=~;?%tM~_RF%tS>qQIXNh5C^%AKq=OuR>6QGV*!+fJa87VAq&D}Q@9j4o4DBqDvT z(EJ383WSV4WT*7++t$qwX=6q#D@pzU%VWp?x?Ph<rp2aO$^YM7$90%fw8M&Z~IjB`Q=flbkbnjNg zJBTS0Zbrjl982Pv7?T6qs!5}Mu{&!~YZML`v9e{cAp%u7o>N=Rozl0Cnvo+#f(lZ} zevd}r_485(gmDbmRBVSMggmmmK;v#I#8Kyvu0c8ianl*YX2j8^v3I?;hp2morAi<~ z_&BwOEq&o!!&5hHu+U(){>G_F5pHf#r7hax){-xfhd6HG-Y+#A3-}e$)-+;u{I)LX z;Ac<`&m>B3)H8`mXm6gTcl@0L27PIG4BPkNq@iIm-*8><)o7z9gn_xgzHxYRCsz`i z+JHj`jd$v*I>LQtS)TCD#1joDUh%MSzw%34(w&&@vu@K=5I}cR>5$Z*+~5f6la_f=!jsE zm5>2z&axQ1eWnJn-c>hw|EEuM>1S7IgEuP2Lzjjms_?~+MJ{2z@tcjRSacH}0NG|? z5r2q|QzqcebBpLeQ=}ry%Yvu>34!*lNK3jxvb~i2)@g-Fka*y#ErY=D5+;jwb?@O$G2k{Ig4CGpMlFRvK_AOnmCJkQ*bT#_Oq z_9_qLdkw8+t%|Nfp>ls4U#o_rO)Xx*i8be9=N}8&n|wZjdoH@`ywao4@B^UI=a1zU z(xW*rINJ{MEu(B#L6dgI2zT0q0AOLt*f1a{eQ#jQ@go!GoeT&J^IzYqBMO-o#;;bIQe%E)=uLp|+kQ$Hjn4PxPu+f}vMZA5IQeXPNsZS{bCul$2JV;+(fQRF zY2>lX9+r&kiEoWjOz^*e!DgJ+rf8hwx=j=O=kd>NAl$E1$a73lH~LzE=pcMBX~Mx% zSydl_Rs@Sy2z3z}lZ-$QC90=5`7?^DW$%uJM0HmWmbroV@9J8P$!8&t*J+8sTc)<# zBi6cmhVyjK2>v=#wN1L^sQNdT=VDzr0LI_7S;3ZT0k;_u^lFQaB^He8fqNg~urtxo zyYe-mhv=*DfO0-b?h7T&>pciC-`L`o3;J6Fq{v$MS_5LG8QbzWZqt}LaXcq+D(=0E zk6>$%ueAK(U*%+jVcGS@6flmC8JbI%H9e{RxLief+2exvBMt|nN85quwOZHL*1~g( z{|JKr`{V!T4+w&WL4rU)K!Esd-K+v?JIzpMip*j7Vr#&&wVugf& zScCkJBOq@~IMIc~_-_Hms(!-`69VF$>feU68%RjfM*A;Gm@xmXwO&6!{)GCU!$u{T z3uKu8uF$AmWe@$obIAVK|9fJi<2WJg|IXPSJwRgpx490VF`eh%olK)ZKoCJdq+L!x z5rb3IbsUJq@ddCtwS3mtW3t#av|EM8itC|+b#&Gf*+Yag^|M=w7(!yYom%v+G9P%8 zU*G+_b|7iPANk2d=!y|wL`AJ(KLhgogFSZ;$)=-MV*Z)AHMsX=I80|hA9hYY9rgA+ z1NvwLm*+w=xL=%PI7{6)Ellr%L$yf$X-pEPwAQkd{O?%!%L{Sv_IJwhLpk^vMoU6@ zNVN9ZHF;Z%^{0hDbnUZSSIR()GN|QJ1$3Ev@T~ylUZGg)gEAcnN}Vmcg|7A;k$DbG*rSzzyj2q z6O*KlcB$=3CL`V<5ImBdv`ksjRdtfh`9mjG%#2;L4g{4$;f`x}w&u!HmvbL{+vV1l-^tl{5s8UNN$=p_gu3m}~{;I{sby4n5(sCH*X~tDbEUXD+ z|MA_h@m{r>TAMW>quceL@KA%bp1rHD$f(D0^P>t&LVU*4Ovr|$ekrp8Y@y<81N~^Y z*arcJ`a7f(l|PzgjkpB*G)_ppB`5oU$P}aBAAbN4P;IoM?9!5jWXE<*r_aV5 zjeYl%krK5lmJ6n(syuE=uLzo>%W8+AYYM2JMR@niyaR5lzY}gg(E-$L1Se4>sMR{t zgr~}{<<`*`tL&@TSR#DX*AGtm-N{qa@1aZdNyYhyF*C zV4{M|bLnB#$%cbvGVN=4O^u4#eZRi@8s@Ae#hM(*9qrntvedHptVo3CG2sEZ${>Gk`Qgl-=tf28yIv7;RGm?VU{UsaAm&bD0o1Tu36I>oQ)PE6YGE!Yl0jkFEQ;@Tnnn_LZxda1O*xkH_q2sgI4jbXIBK=b?M8};R2zbO zt|k}UY^4C-3>tjvioaZs#MaZ2`xozb=EibN@I z$@Fo!HsEAi>4^VueDt_uprpmei5%~ISguf#UnrB#1qSr_*vjWOEy|jgz+-5C0c2RE4%VNp@Zd0XF zt%lfC3YFFkn63>mfbV6*NbOMUxiIRP;G-S4j+m2y&Z-aTb*BjDF1Mz=Wy?0fy32nVeQQ3r{CBARgyUP|eCqYY~MpJE7ofVKkeh$=5H? z=ag)Gd~7rPja;vn!v+7eAZt)GZ@HD(GB|1--f-V zM;rWG^w#OlJf%Am@uVPKz&f-i4jt~5lsZsz1?N&4hV`0{nd*)^pcB4|xduYk)jL6Y zn;A6Q%AdShx$7Q;R&df`JYIosZA!El68Xxs8Zh_w(-Jpg`E+&nC!CJ;u@@~Fi!xL` z^bmFn8-=)Gk+F%z?k*ZHR~LF|^7mibyO`=yXaVaa8_sr1brp~%;G@RY@)V%A+s0=7 zk1){vspYu6%wN38V8_u0RQw24NNzRj0^6Ss3F z7|PsT9u9x6ghwkqto!NN^GteQ8>|usWwni(aGL+Y(MO)#Zt{NF2-U48Oh1uY&giWV@8^MjzF_Y~pDtZcR3GS24{t z5*BflSI4?Dq zf70ggatWmw9#Q91EQz;0$UexV?|?{g*WC9DDM_Zmu-}iN!S}z<_YsXHKc!a^%uiiM zSQIcu*%B?jTQ4Hi#*ofhOA9#vOA=t_8(HShkrJA-v%?t+jYYaz1>0!jy)S7uMFpI) z49yk$ed`V+Fcr%YOLR?iAJpt8=@5u<_gESIg!(U3|KHI2zfk=zC`%Aewr+U{|9yOM zC82*~1@j^rsvgX-Z3C_@4k;CtJNWykE zHOaN|$S~vkajg%LPL}z5r>~qL)jnWLmWw5~9_HfM>CbsXIP3hRK*zpSqjs(kME>%N0G6!n%Cd zDl#HL&^x`UX5WUD)!@j%$;M|xp?fx>;+R9UvRBS(AAiFh%AG^aHSP%qerIj@g&)sC z11=mHXc}J~LB3!O{oRJh<${%3FE$b$ti&}rh|guw!4iu|ki>tS?1T(%WhL4$J^yp1 z#p)LnFr9i$%(cimdem{l&u=h-tPArdN5GVPql2kWu{Uhr1;gaFXXeRMs7tojnvrq! z%d*I{#ttNWKxB+?pW9-43~oQ9X6K`_~6hA zk7P!W;IZ?@;>m>|FX09cINR9u1R}_r7&y9tU0#Y}?HSrO7<;lIFi5@OLb=u9>ItlE zpy=J((nSPcg>Go}*RmX*v3`h*2#r5cBW}lE&mjDLu~ZgQwEl*{&_i>sK+yyfxIh}k zfHsWbe9HOU`cx@4cUqiZ$BEYu7NKtzfr+dC@>g=bA}jGmu_y+YQd{>};fsKza1?cf zVh!YS21-cfnP>zBWP7Hl9R|38P2P|iMJv}L8cX{p8$iZgjV()nO!f`c48PBvabzIX0hp*s(-pLr8?T zQnS9=R*~;CRBJa3zkRIGQhPrd zp2I$86ZH+4(Ga4#MrdqO#}o<2Va|>{cgn}7-SlJ)25FisM8Li6a(sA(j~*6nk~(Yz#^(jV zHk2R`(B^o|8BW${BKhQAIr#On4%O%&Vi& zcB1ragsq%4+KyZ`KDCgV9)P+`hM3z8tc!im^^;>PA^5 z7_KL8K(PK+xrGmsVA@F6?; zc6j45zxRcNwskX?LENHaEiEuE*jxMWf4Wai4 zzwzS|HQMff+T1rz;@d-Mn!A8rs{`OS^Ez1C=|niw__RP+&Xr2V1fhKVN@i61R64?W$pKz zT~oR7KPE%cX+{>`7npf{e3FH-U1AXHn<6HKYLv(@SXzvNRuU`cox8hz1@6Kb;POsD zEw^K;2-x$snLl)LS^1CPp* z>!EDbv@x3M)oKGN-ogSM_AFrmp|4-4&?a!^gWOY`ijdBY-hK;r=8aD?&)A!$;&=uh z=`qY%f>{%yUrn%iu-~XZCYT9EhCT;9uzm3)7j_k%;NUCiTB2PLCJ1Ss06hvNmI>vN z1QIxZ$OGwD6=#`?ae3`vKVwLxo=9Ooqezvrm9M`6)vit6g1L#k_p@a?G1ZX##%+B= z;lD(N4FJzk>Km|=9a(A1r9o6y%OFqb>Oq?Z@ce;Yj3i%|1lnIOoXO!J)5W`qU%C_6 zZ^SOx{1pDiW#ozo;;X?VM!wn+crp~>wsb~1W8#=-u$TSB(%d*?yL`!QVdv4zg)I!2 zX6oH$q1qFn&Rk0ym)iwiF=|(-@!L8j2wMJ7LjA-Q8}JwiuyKK;NSViuLMGFM!DBB% zU?fH+qE***Q(KY`saX(}+%n&tBgQ;rS8_Y+FMsBD=IOX-^ZMAe$&LZILsY_k84N~X zF$zJ%Z55A|EhSnOFB04CUFLN0YdOcvXv&N%*k`z7{LBRb?L0H+yozuc&PXMWoH5H{Cv;R+ z{Bo`u*zjt`zgiA1!5|s+Mlb|3?2$?QfF}Dgf%(0wg6j8_vJx77qWnPwFs#Zsrms~7 zlU6-#7`%6`|_U!~hMcvX%~h{UR^;PbpOw zMV=a&gyTt^`&CY*DpEOHyCht@UKfM@>Atu+AA!VJ6vK_*RWb4y{99t%vLPog*!H_@ zfZ(claT>XLq_;SGxWpf?uZ)a$)X|Tbv~KySZ9-cqmkC=X)0#k;QVY2H@nLOa7gj=* zp_O5}+eo^r;(9d+1I@PSjKg4b{r6eFbUsEO!G^uX$Nil57A`G`_s*iI=^&(KE^2yc8D^rDGU1 zbH?+`(SEt3tZF~Xnzxc&JZde7il#FZXoiOhr9cAJd)xF1#(G%i3~Z6SpV_g=HUcg; ziW}R7J2=&Rw*U=b*VlD%ek)BG?2yX9Ve6k5D^s%!Bd=BpPGVK&4yA_tyI|<}OF9Gd zM%s*WUT$v)Wdrq&k$cxtHi7Jx%5)$p)_ef2-u!evKNu6)Dr~AKvigHt+#z!=YS^eo=A{$O1HK#UTUMe%VyCBoV+pTEy zVP%!Aq-A|rsFR~L1bi&bJw-6L9a%v++bvEtMlrC`!JKonP-e?TpSOtaw6!1Ch4(8f zn{@pxS>L6U0rWKFsZ3Gszg^U^GBWGa$rsl3W^LbNVN-I3$ z@Yc~#k#E%eFrl)JIguH?EZ%B;BOa9NFmJ?~n^q+rXwFVgXgWHPIF@cT42vBpwy&*C zVRg6)KJ-k_tAH0EAtA%6D|NLki5zqc)6~#@;o9m{m&{tw*9|-I$8I6^_L4{p!;Dg) zq}BQ|Y&s}|G;U+VhA+O`H(5ZVHxDH}h_0tC3AEbU;XfewvMJIX%3&&SiM;()>o!6X zY^Hn4m2tSQTlonw%Hw>Q5VV4qK+bu$(S%S6=CD(G$@(~l^jp|I?hOZi-eV(3t`#-V z{&RPe&{%@$C5@Fmny0IAtA9qdrwn-BcxuJvr8={KSno;LCwPkZDm2JWVjL}L6v-yv z(81XvufxM9u5G;%C8I+`{UmMh<)rHT0x6;T47M8Je;RGQY^Pfq{bEfB-(uohGs%Sj zPM?ma8&FRpCCb^gooLUNcaTcuJRnNNG$iEy2@m1?HO_%;abgcS=A(Q2ZN3@qi@UNx zUl6+=jooi#`~m?5LO4gjaGzd{%Fo>uo_J zu4MIpeG-q`c4(hyAM#2vQVa_L{;Djn;8#cw#TB^MGB-@5KI2sdy97ump`bkI<8BLA z3_p<{;$eFk7S(coR5mrkb!W8cmU z(ndGYwFJ{nZ)twSZ=x1UFqQVqvkfGHn194;T-`jKv**={?Gttr=LMDIu+!9)fRR15 z3#_!<9z=HSX+*Ev)gJ9>B#uLIFJrzdC!S6yH}X^dP+UiCwoYAyFZ7K(Rc=fd{+leo z?7hi|zelhEub2 zwqYc3;P*>i?;#f{uN$69%e9o51N{2cS_RemU2zQMY_(B!)bE$lCWU3lOh&B1@YD3< z(-JT2HS!~>kQ!>I=HdJsLFy< zOIj#<72c(T%z;|!0gyNIPo-ik@z2jeNlxW;$aF^6;1ZDDS~Jh)fj9YhQ111k?x)WF z4Y3G*BVeiU@L_Pp{6MEFXQ;~Sev;f% zrfjO1EYls%d4M*Q-X*;%GWfwRx_QwyLAz)VJ(oc}N^O|E*OGX>mKJvKzj@ zefcr{P1RSqXPMXh8X`teKxMgngmwqIyt3Mi3|1!v<*NezUWFN?jj zz>VFm6y|mTjn}+SmaBGxuksiaEbvwCB8Y06rde2R39}hN8m~~Q0i1yIUbk-Fx+bkQ z)hK}%yM-2_!fyjaU4NBsB1vsg*o7vLga4z&H5BP>*Z|x7VQHaUztSIi#*D(HF|~yH z$j;$GoxKiE#9#W@KVq*rc4zVA%#i6vE+$2=2OZGjh-H|yFlJWnwVx!C_f}0zvEp15 z@l%U&Nk;BKQ9JerGk7@At}#2*NNrTnkd~xv)7gtelMt%PXM_^v?Qk61i#T?*p z8tNQ1Z=O^?NO2LM!|?OkNO)N~TU;IyOMt{mU#H3fb{-M@Yvmivvgur8iRG|z(=>av zH#{5OHkw)3AQf6r^{P&~3;cegG|r*w`6j9~QL)Q<{lbya4S0z^DZG%hg*CzsE<$hi zU_yaMIv{h#2-^E^pVrypo8C350oh9=zs2JqkF^nL_A7U`p_1jtYxKGPqeExcZJu#Gd3{)aTs-GFA^of?{Y&i@jPfohRvjus^46C7*ji$) zk#!Jqn<;nFS{iqGHpH*HF6cbx+!?w|I{|)X;7$VlmQA$Y`c3HGW&xPmRrkTlmeL)M z7W7>XzP_`+&QD1{aJ!5gLVH(N1`RH%uen~SJQo0=y&JWGtrsf;LbR4W4%_ITEuVyf zb)Og?CSa_OGsnTOSd8n0LIgqg=l})cyCmb>{lTrTOH=uj0=#o|p<+PUOscvv#4q>cQOa2PMu+y}S zW7i#T_Wm0nmFH^2`RJW{_!&yxttT>NnyYU7nNgi@dvq@+Z;xGi1gnUyD$#tw4U%a zDNvU2)`zcEa=^CQfUg}SHEcRAJ$;Td9Ru9J_`!e++I^jZ@X;N<=+?C5oS)5rn=&Q6 zr^9+@b#w1rD&{|tz(K}Gy}w4bgIj+pA|;}~lYBsi=*pDJIGqv{b3bl{f)mk^PP{uJ zeoLBliFM$9hzs!jnpblCfX3qx=uv(&@I3u+ z4S4wN8QTc6Wl_B=I2yGNE>cMV@3lo!P~}AOjv_swODBILB%b)i=FyMv>URU>`>P=V zrwfg=-gf#m!lUQWGn;9a;D@Zs^R&jv;ebaW)H`{7fczkLkp3BpcQxB_^YqUZ-v1e# zq?#NDGLjwYcQ>Wg4+b?2QoGg?K)RqQ^*MpA%VF}Q9fbpf!rq^=YruTs@KOqn$858L zkoAh9eb9=cm3!!YWleFf6xQg%ERT)RJ>%~|ijmxxUnKC)X>?Fuf_@oT&mFTY#|yy+ z3~V}mx)cQV(xCl&kJn0Xpv*5$6%a$gqYv0h2*6g}q_F3P=6iGDpC; zZshbdUwyqAAWRprryn+W=jHOiBqe)C@B!XPsJ`UR1bipxIEd)SkKTTG*NWVb zGUb?@ijHMrwzjf9-+qbUb-3BP+#h|Rc)_H!*sC`R`w)gy#RXplg6K-_2a0i2e0Ccm z$MxH~M4KN6aBwOL@p|6rozK1FpcBQ=1;web;iDF{nW_m0m460*j>YDaIpNMFL{xg^uF=D7 zvQ4-TcqkvNq=0pS)602uRo<=WH3KBMl?>4rLCiHqzbe@b&tYB#70WJyY+8fPwZviR zVovYV;!|7$=CAt8y)*>$27KM$1-YE5b&sAe?c4N^XNY2DdJJnX!iXk|iQrR9uIIb_ z+RBMWu9ZF36P>1v{FU|BbB)HZjjc~h3Jmz8|Cw)e`+{e_j8m7-_wlJ9M^ot8LlEV{ zd3o~6j>a%!z1Jb=2oFLuDFq6m>+F)-7B*Co*pEy(@`dg~p8M-z8@v zAj3n-Ta$aGADJuBdj~D_k@kSTba6{x6s@|hC}B6Y#2>T$W{qQ8wRD)#V_qC)b*3Nj z>?(mKPW;!ssKB8;N2s~i?{U;mJfq4;rdX8O-_KKu`C0Y8ti+N9>cX<7?wMlUA_>4j zu!C2nETnqm!IUp&>(H$Uke@puZSs!A|M~tX){&i9%2GpVio1HgA>?oI_OnUmlR2zQGr=_ z2K`PuFW~<&Qzid@`sshlh_L^kI--#$w)$C82#A@qEH+4C$g;HGY>-qKwG++D)yp;y ze_Q@)JNRtqV5DKOLz01g0>Y`vNxd!6B?Z{?HtsCHILas50px~2v$-Y5pTlkUXaJG2!v*Pha>XbIx3di6s7LXm!YL*d zx+(-EtOxWns(?w2=i542wH>8*)%<(xjEYrNeU+5-ibb)#XJeITQ`L<87oTGc4q?Ct z|5g!PCfNE*axt9G;uns^!q9TzT*4X&&qc)3?t5-1C^5#1_tBdoH*vI2@B%9F09jBNc1SatlWcIrZ^l8+C$hwA?iu z_*#7SO60h)RXLNYig+zD(|sJl{S<%M=`G%eh19UK&*5?MjjprHCXU%r^jp$_IDd;}J4t`M;-J88l|l7vGy z5Lh^pM!b5?5VYB0NP%gML%`D0_B)l2n1qY%H(@3axl?<9rNpnBkJ;6ZroL#UB}1N0 zNZqKg@g$zbQ6uA7&%Oq(vrAZrxr~%!KAesKd()Zj34F@UNexO{~FokLD9#LZ7XK6dm8I#16tSX zbCo9nevxvqLTRaq7+Du(Fia~?+$9)T-(tZU42+m$Ni`P|NJbd=5Y`t{gWTrm0}DbZ z<@_k-EIKr_inEWILZ@10iJ4TD*0W&-%-C;|WpvgUG;t&%*pFccV+0S6) zGP&*(p(8`qL1s@C<~k>poRoYFo7pdu20=el*A|*`Cp64cW*T{j6TZeqCfzd`w6ng} z4H)|P*tGG`D05k%vn_{`=WF8s0mn`MAsOAz zLgiRi-22*Lmr@)P)zZ=&`i-cMYvW^BUVs@ zvc9VQ)w`~Em}=QUrlqOXX24_yoiB2wqQ}JDtOwLoKJYX|~M({k5+T>=s1Uc5_D@UeDhS7S6xx z=E0wSi>5A^Rh9=?y1{eiHr9V57WEKuQN|yFXglC24QX6{T(`Dj$JIx^X!^S>Y$efV z&Q8=9-C|f2auU21$`d;p$K?r|YJjazgh<6}Om-OR@HkV|_3=r32mZ9iD}TBf;wAs( zM3ZEg19>nS$99wDeM3BYypXxM%ZRIzLJ1#%MiJZe+HTpE@;qi zSIzAv;s({vRw+W^fbEL<5!v_cs3SyO247U&f1L6=D%p%om_Pxtg4bcJ7oGHaHMD}) zx&Sh(>;Pk_*_7-Y1`NV1D(?5tZ}mmESu&u^PAgv!dwv8WC(AEJ(bJ7}9Wl%$-XWET z{_q|So0j4wZ(A$NQ1umflf7VzS}56OqeXwgLc*Yg>&*DSV1%NT^qhX*UE6`3D&w+< zc>W%oCDTbp#)f0$kd!&NPsAEndKVd&N|h5ITyZ|*DKejkf@td>Ro8XL)UJKX)C-lk z-BL`DH|q zstgXqQ9-3Tn3_qAlv{MjCRY*V-qZp^KKK1=2O*9NkRtwK2UnN{P$$4mjQ7e^wGELs_QZxWE0=#`z%$!Bd=i`^3DX1(TX)@auG1gRgBD3-Bkj~YtttJmvhKeYjp;ieg>QZu%>m4=&z3u|$L-tbSv(Vk+1RYIp-F^|5vMiYwZUU$5tqgbl&# zTHD|5ML?G!O#T~p-YF@hQHt&a9;9niezy3aDY}jV-9ekxeug(Ztim~L zxIniz2?TL zv;E6_69sx#5nr3WII$eHXeM0iLfc`xE_nam;6Y(iu2jMGZ;X_$mZtsJ+dm|gd$Eze z2M=1X?21((Et5Lm(o7!K!uBZ&%B*ASMc((fLae%btYlZyWZP-ZR@PaA>-6|C_4-p& z1$|mXL=BX(c2!r?QY>;sk{rMO>x_;(k|nBx=`2ug&>b|s3#T-UnslVGJ??pH%8K-*2ujMvXVO$P}G%O(roX!O2PWFcdgxq9IWyyP-f#Rbu4@CuUN20VPh^> z4kj&m{)WQ7u(t}SN!+r-SY@rsFq{{bF8iFw9~|A7`9Usv&U1p((; zJ0O!b6hE8c>q2yBQ8A|DSvYuj=q<|Vl@j9z%bMo)tYWXF#Aa8?NtCh>h{S;(KUY!k zNM|J6#zIqbyMH3*ZNTdex71H<@;DRNdN3Dye5hE(h(Gg0#^55WUX0FLv-us)gWva` zQLBwugoz_P&Thy{kNT%n3pZ|Zun`n9$cFTHu7&*pTV!+@<}`JQvl;_Q>IeF(sG?x^R8z#?nTT+;r4LIyK;>W_Ij; z*!#q>h!fJRdZfuSbfy?a>hZ68%GM9+^_{~O19gFE8tdT@)(%{TmEAMA7swyz^jlJo z3sd*Zo1$^^7wd4y^?xYduC|X&jz3(%Ln~LuSgRGdm41<)u12t=?|i_0I0Yf%gGYRi zl#(qdH=)B`=}*WCOyxJS1Dd@t=DXMdCYK!`-22?m8I%_+%Ys4#Zd|0ePhH5X{_P{G z^UtH?_kUKbJs2_@;DVOVA;zn*@cMQf<3Z^bRQj$`SCt3O@ycH(B`Qbio(gB+l7*%B z{eZg^4`rv23H#F$Lc8;b9Mh=>`4&5RV7(qw4g^PRSV!8ihxz0t>frAnyDj)Ze*XmY z1qkn8II)ny6P8KOz=~t(p-ps*7(SLyEk{p6rN*r3Vhb9nP3<`|O*06HL*(iLoY?h5 zC9_PguyTBv6OF}RlFe6*g(;ulf?jT=rGQqLqF(ZE5GAe)1bjqY7FO7EGW3Cq7QB4; z2y2M+xDe)1*Nkwp-bTwG5Nk!M`u_J>_Zk8#3ZHUdmm<+JM&{$IFT3Dl(pZGrz*^+1 zwHBk_qv)f6Oy1%!>lu8QPSl<-{w=Hc*-ef%nor1aQq|<%AZJ}Ydq_C2&OD)In(zTs ztDIp=NHZK%V32@(8H-;pD61-bYCm31BPRJDKn-h=Et6EY$pWM-C( zvI!xCWREg33YUyT5|@sV>^;iL-Ya{rWG7qZn_2&J?^SQ!|LJo-?tRAZ`R(WToZId~JR zcOShj`r7oMTe@sl@r;B1PD!^}!(33K8HsyYzvLO>?uNOdNJN=6(+x(PwEfuvTEVTa z(xcyU*6ZEihWE)v%5d%31|(9DPE~@oPE|!VPTVBDmWF1JLdD$A#ZSkFM%fb8I{E}3 zDToeDDW^{@HoXx}TCf zE2XO?xVydm_Ci+;bVDn((xup^jYJ-t^Kk1ESgcQAdlJo_$ZO+jS+``$xo5j~M9vj( z1NTF+%xZGdTUjx_$5x4N}SI=-hfpg=&XMdFsX=c@mGXk75hCO zQ1%2Er^9yyndB2Tti+qBcZ9=yy;>ZZ)TiN+igCN1bX)AP&xZc-qnAs#-*p`HK56Gl zrA*AA%8%=T$NUeuC%VgDH>VKW+SKBt89ftztS#|uCs>(z>x0_6z**Mr=R1dRsx-St z(wT-I8AgitX%If|-H&XR-J*G}dS3qdDp{_5pu30u&A_jqbmhYlA^Do}^Blw?WgGm& z^*>m|_c^hz9CTjbB2QOg+Q+Z+U1z=cSX4>I-?K_mpRl~54F79zx|)E^m;8K{Yp%MC zi7b=)A9mUu#Ggt~A54(s$+QgNd`p96)Mq(m-feBvZlAl0;7oZ{C5e?Ct?KQNSZ_!w zo5C}zkUh&0+rFLoj<(nE9t2#-!RnaFi?tb!c--E>)i`6M~t2CE=TCVx7ks4a$@rDOlt$i&B!?8??|6=fA2Zp^Wg#C;z66ah}9lmmzLO+dDN~=U=p>N`6vJusCx^TmOz%qsI z*H!PBDtt z4m{g!BURiz`F_gly0g=Gf?^t#t(3ocV-&8HpPi1Y@hqRCYpooo<&U&=8{;&oM3tri zECsxIqQ&ogyFW@paCA%5W!s-hPl@p4Qm2(ZDlXDOJhhi;3DOL1y?WzYgWcrrvk&Ep z_{!KeE6vgfZ!=PRpZ;w-a?fPy%Qwn3Ug4ROB?+aKQ;>Jx`zKHBIDR2F)wfj6M^uY3 z+F)kdE~`{nQ6}nV1Cx!i_hASlN7~OX+6Ib+T??D@hdjo+2;S8ujMivu45o|9^hHD}45 za2s`(_7S^JHM#ZX9eI6j9$%8LiSusz(K~*`oIET2B;kDGwGEO3!bwD9^!q(i@rE!b zl4~u^N7&#dl3_YtGB)8%@A@p#Lo}hiXY2N4BX`+z(QRkXOV@gIH@s_Np)F@K#FMhN zb9|4w1`!7R-^^>c&yAf#Yg-QYRCkVo5%mwZSB^+(d%kb6cpJ}eJ=7-ubth`$X7)=& z25^)`-&U(Tw->f7^b?sqe=Vo{C_p^!SN4q~H|lx5p*ug7G_bDbh)}>&)l* zn#+bmVKcO=D%>xs{}=-P_}B*AJxI7XF#P&?n83 z_Tc%o(l`r zDSlt@$GtTD>U(BN=WRN2DwpWLmrS@!h%C2HdsROW5@buUSDO{+f6?4_t-jx{yL)#vzIP$GWU?l6Aj{wn}c}biE62( zgNi#z*@Iv1Rheam#5R z@aDNCPibTiE2Wh%dC5%J%z#^XeTh}a!gJ2&8A-Q0Z|-~JtKY1SZZ(}=Q+bE;@(?hu zWG-%-*f-SqD4&Mv%>jdM5Xn}aCpzrzq@W= zS|MLjPV6TB(+&o+AHEGH4hIoVLo80}STQS2N0L@1(#!V`R}W&HOUtWnjI7)-FSIMI zb=C$4X4kV9lg7_+Z(2E3M%;Uf%b?@XT{YF3q7)>dl`oN={d`>saekNEMXkPGu0$jJ zuI%xU_*Tv?l}4V>4SB1`;C{LxH9{Q~gYt$qA+*bfdPy|C_Zj}VxN-l%*#NCBx_dx- z+HSOLKI_0>oWb&2rEkvyzW5skS4gPy+7;yaJyFNq4Xhfkus#&w%6+6mmA9N;S(#;$nDo@OxA#iT+ZQ@}D@jjtCZ4&K zOS_Fwiv|5d`anbZE}?2B*)4kxEqnPRBbdD*w!PuYRhLUqS=`pq74#lEcVkoYGqRQy zV$&RwIUW;U)+lA=c$gvb7`J&aKB(1T33%+b{GcdWVN+l)j-i1UF?7J9dby9bvS?bP zL(`Ho7a{N-dp;Q_bH2NU=60(A6E$;jigltKOSeq$=7Eead2Fzmpj%{B-A^ zcXR-MusBvx9X>zQL(H+Z(&zHE59oU5>~5}->&Ivzp9eBO0Ii z&Nob2dB}!TRktUlZc<%&kh|Eh`a1Veh)c|q7x}G+3cCUmN!}_FgX)=DjH#_xEHj?y z7}$suf22?^$L~abzg%m|th;XgY5cdLIL=$%^7nQ{ z$Yw@_ZdEG_FN=PXMV#*^+Qsj>b6&IhAo|9#8&&<&lmnq%vq0J!hOa}@5EzJ)V5!eT zsVG}H-6u$vP{v@9E&99xHzAtJFpbdR;k$k#UW!avHSO$t8&7bl*`nD*A2*(HNMZ5& zh`d(bY(z3Sc5ysI%XC5=Ohx!(9pf+UY`^TNF%?&Qo!%k_dLbI!{my)F+ws&s;wVk` zUa8RQP;&`%6IFXVY5Dc;A&USRwZn+RlVOLo^@$21#Ic8H`393u?Te*^a)nz;DUOe- zHb)QS%7)rt-C7%uX(G$ssHI4hFmRMtYn8ijy=<}<*OVJHyKoIzK%cL6-Q?>rAL?u5 zKi?Hgk^K!vfku${SF|85IdW%6>LAMY$ z1&^}@gD-kNN%q%BBBHoPwsch*{286`WePdq$`jU@nC>BrJbY6h8+2g?PMzthwjX&& z4*DXZZGZs6B*|B2T_=9|?TWQq- z%}7;U-h16>E^0Xag*a``IGO>0PrLf`Omp}qJkGM-FHE7(GF|(wkf#g7TN%hr1$A zWLjH-hpL`vd*)P+*&!CcH7v)6wIUaL#^cn>_$^uZA}!>BGNny!^8is+)6e3&UoF1A z4y5*9q21o}R5`Ch-^6w!z5Eu-;p{601FQinb&E(Pj-=jil(@>5vbV%TDZ{m@BVZIW znlAX_)N%LeOSaYG6uW47`Zz~z+yycQuQRDHvRC6>++k1k5RDgd6Bt$U&u;C z#os^Qen-;7MA?PE#bXUsiCELM%K5LMMh@~8yf{&}?$P&}3CiECme;wU&@Pa_ zV*Pa`^h*OpFx5bypUtaM>LImhUw30_LpT2MYxh$6nmc9JaN^&7moc~0VO0te<}_Tb zi5Juyi8EU_orGXf5Tu47DQY6(epg1fci+BCh@(0Tn|xwM_@4ZjEb!}N)!TX>xCSg! z$sVvra>P-OymmaA4gMe$5NRc|L-2`_FFLm;h{E4C;={8q@GPp-P*H`RCUHt0_S{=9 zatRvR1?JXixC&phw#LMAzILZlk|vC}WkQd~rkGaz$-uyV@{0~aQkL{i=Ne~lE=R06 zsYOv<&SFYYX0JqVX19(lo_+>)maUE<57l$( z$aqUcqAWf#Ym0@s=iNY+LLNn!Wig@ z>d))Xuh9MIk=plYgdHyJ)xD0`o9|`abSCy)M=bVu+{256pNGyA7cC5)GYuqp|L7Zq zCe^3U&Rx!AQLp$iG77ON8(=*slAfms<9NWR z6+B`g@!494L+6WkbLfoqAi+mtiQ42mvy|fki75OB5N^u)ow9<`f*xKyBhzNC03qk8 zg=nug1wH}XpU7HzqXaFV208uH-rm79H!UQ2)kJ6ABpYC01^rOF>wRO7OZ;a4n1>eEBBR#%!p;oG@fdHIv+MuD4z&1z%oU~N zj*&CG`NOX3bx`%y!$Xq01*O*RE7n3jSr>OAa=N1Y%I9bq8dzbZW+n$hat-+u3VNSI{3@NTioFq?<2hsvPNddzA1%HDVGt#FAZLSkiHg~fN^ zG2zg1@_A29#0s~Y(BWp=E|cHrx9bu|wM~@9)KhD-f-$*!731VH$Txh~clo4Un;uS3 z{-T$_{*=@^{7ph`^;ajdUHh@i7JiiK^WkJZ@5}k7PcIGE_EzABvQ>>Z{6)lUB5kVV9@dfO zo9Z~`aO}1u%k+ink%@uo{oTV>br|I+9@{fbMp75a!7DThfCZgms!M7kU8}z(hp=S- zl{7Q)m#xv8ow^SraPGK!F|?+q_u*eon8W&a}T*}@)Gde7{< zjl83}S~A^St0Y=(-y!=wE7C=m$Dqn7Eds~-P-arl-??y>#@|gI_m?%ry<1rEK>~99 zZ97eRPBuJZlL>0wD(RWjSxqkYJrO)n(JB|N8UwIx)%>nv%=k!{FeRXyO4Q+2T%PQMMB-zJ}n{zpIHChton)#bf_YdD5wv3H4 zsN5+WL=swghh$&&P&SxdcP{10eupzMZ%n6fANm>xVI?9IUi9(MFt(YQ&+-^ia5i{I zE8C+>Bqp_6P@_dN`GVm?x^g4(xN+LA5%!6%Upa_zeee4jZW!55^QGJ{^UMVnvz&_E zW_}-%gNEt^=rLjZFM@pt_>{)Nuoir!uveSy5y2~PT$?(L;$3X}i+Jyzw>q|}7lv86^%)N!jB*-+ zY%cbOk&A!EW7ubke`Jd78IV&9T-r*VIZlYDq2;KCe@PiI5mr-Z^twTOJk&F^GoGTW zw#(*4ixbV(L%G#8f`cbS%>Obx5O_&he12{jL7>OpL%%NoQq_@dCvg45WkMB8=x~6b zbG|`gbsE2YPC_qK<_0#l9Ym&7K^j;&3DVJ$Yd9F%=PFk)r-Y(cJv!8wwn_slQVbn3 za`=5XF{+@iT{i6wfx%!IAk#a54NPMwbq5kd83)2zVFXd!6sbor zVquOC3wPnFCn@3QA)Js5(~4&RIGw?~l{^b@!!bvZg|EH?^Na+R#v~P*v8j0r^Lh6rlPFE3(xi;SmIcqO>=@n z7Qn?ruM5fP0KL!_!T*E*SL#XuXQsli%#i>T;9=g5X8>d;XDVM?;3+mnkdNy*glOIP z2N4nYL5P8Iv}oP*)&Xb0xORY~^dSyB9s~PV>h>0h#hkT@9z{u<(2eDQSHsaH2&Al3 zBO&!t<3Pq{1;4jIy1(285Ei8#I7DD*-zC zHJM~+oY_PB|L>ov2I%2UU`-{!gyCr#nt;6~vk6Da0B6bmmJ7uRs9KHg<^Yg0^5?;z zYJdnc?O_$V-4sAgL!W5D%&Om=CzE2)oo||eGu;2B`&%Z|Uxq&)P!bM-*Q)?-w2y!% zi;!ZW7wM`7$Qb{to>P;-f@**P+*p9)fKn(<(Z)kd{0uy*h9pKeFx3F`zq7MSAoFs;P@ee03SgLQb zG}zYy(OK4llYo2m01-1vDS!V$$K_MwJLECr^Lqe7aH9*LK+_js`!(1C(Kcd)!7iK{ z-&zBPkHR_rC4K&JWFr6t(i1EgjOWzQsZO+88219W;6xoj#fbpL{d{+ES@d5m;ep8y7oYckfN6{@y??m#+_5%FN$4-@1l zWmPxRJh%x-gb!^Xe5V#BKlr1p^XQdBRd#nWphT2S{kNy0>`-z9ey;(zSWwoA%+tC; z3aQ5)A}D-{U^*TgsYyl$MFAHJYUzAs+59?k7z~^Jzjmb~f`jk~fDtL`Ljr0v{PqvS z7Jv>X)t8?MMTZgjww?6<#Cg;+OBD-6d^VVyq{?l&CuReI7mJWFoR6l043-! z3J{?+@i(@Z$RF}3eSH##BORMX!S&{op?^Q@!F_7zODWV)4)9|wK!K+E?+rZ|jOo-+ zCOtTqBnUtMR~Sl-p&1l+M{6FHoaj#y8^!}r1_Pys(1VDco=CCg4&Z}TwGeA4E2*q~ zl+%X_g(pxl=RdXH^+@ytDKuMAuWn6N;zLlflrY%op!*SxHWzqi6;2LjwVwoOIX7?Z zE@UVoi1caY5T{@awblmEqe(YvsI~ndfx!qMD?v}a{JBznEz;oNMJ`D3V|^#wek8VB zeFXU^1uYDAT9Mhse{?_sUL1q8iIPsHiIDCa#6}+Ev8UN^u0#7EJ6Jag5P%#*P)MUD zi1=>WHA5^gK$9f?u!1sbbpwX)ciq5wjC;iQp%uH*2nR!%f%9lCPqrG2;{sSwAf&-Kv0a(!r`umRAX%jseMtKi6(&W<_PzAcz zi&?$C8_ieKC~9>!u%H#7V)=bf?f3ai{M4F5U*JemY#}h89!hVakh0ObxW0e$9}Otb zlp!0Qj-bU^P^1&MgjR94QQg(&&?pqT<7vZ@m~Wlpx0Xr zqRAbG^lk+i>vV97t)g_#4TiNrqM*$5cU^q(lqe4Cs6`n;G5}5pYM|T^6$D1-IEz4t z^eV*YzZ)sathJjUq7&f4BmQ1gJ(^B@?B7!R zzbO{`*NG{i%9|2Q7={dlE?xS1(9{;N093*REBD|er@|H`A=n8ecPJZb;sRiJ4{!;& zzD^3V)B&_&s9HV1v-)fWBnttgbm(^bpDWcDBm`h8in8)*TJrzh3&1dp6oDk@by4LC z*xm$rGn%P2OlKPt^W4QQoxUjr~3jCuqqn1$M4(3w!P3*CE8_7C59AhPSkr4DU|L`xy& zm!KSUnt3~UG()0jMs~YJ5$B+41y!=2cK4?`;OhZE0<+Wvw5>qa+cdyv)9frj`Tr&+ zZbc7bHaao!`FULMZY$)nr~>WpgNDo>1EX9v%^1||1H_OHwgg}mC@%!TRtuTv zHRNok15MWpBtvbAIHLeHngeaUr1$Jls$hV&iPP1PEdpZ>FwYhs`>P=I`Gl5#+3$~w zQ-kB5ep}0=9o-ufcEUb%D5A$G_x&(>&wd<-VfH)p5zTDPcALr!6b{so8Bfba8IKvd z-|(A;J){iCK)2H{21@P#xY1JldzSjIUs7iLm;NBBU)3(kbkJ-0Q}f diff --git a/j8lib/getdown-core.jar b/j8lib/getdown-core.jar index 124cf70fbc9cbc74dd708a0d7d8c0ef5689291ac..652c6c4275d878abba8889dc0d3b7616544ce9f6 100644 GIT binary patch delta 63530 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 diff --git a/src/jalview/analysis/AAFrequency.java b/src/jalview/analysis/AAFrequency.java index 7278a80..b3a912c 100755 --- a/src/jalview/analysis/AAFrequency.java +++ b/src/jalview/analysis/AAFrequency.java @@ -192,13 +192,12 @@ public class AAFrequency // jalview.bin.Console.outPrintln(elapsed); } - public static final ProfilesI calculateSS(List list, int start, int end, String source) { return calculateSS(list, start, end, false, source); } - + public static final ProfilesI calculateSS(List sequences, int start, int end, boolean profile, String source) { @@ -226,7 +225,7 @@ public class AAFrequency return reply; } } - + public static final ProfilesI calculateSS(final SequenceI[] sequences, int width, int start, int end, boolean saveFullProfile, String source) { @@ -234,14 +233,14 @@ public class AAFrequency int seqCount = sequences.length; int seqWithSSCount = 0; - + ProfileI[] result = new ProfileI[width]; for (int column = start; column < end; column++) { - + int ssCount = 0; - + SecondaryStructureCount ssCounts = new SecondaryStructureCount(); for (int row = 0; row < seqCount; row++) @@ -252,7 +251,7 @@ public class AAFrequency "WARNING: Consensus skipping null sequence - possible race condition."); continue; } - + char c = sequences[row].getCharAt(column); List annots = AlignmentUtils.getAlignmentAnnotationForSource(sequences[row], source); if(annots!=null) { @@ -287,7 +286,6 @@ public class AAFrequency ProfileI profile = new Profile(maxSS, ssCount, gapCount, maxSSCount, seqWithSSCount); - if (saveFullProfile) { profile.setSSCounts(ssCounts); @@ -394,29 +392,28 @@ public class AAFrequency // long elapsed = System.currentTimeMillis() - now; // jalview.bin.Console.outPrintln(-elapsed); } - - - public static void completeSSConsensus(AlignmentAnnotation ssConsensus, - ProfilesI profiles, int startCol, int endCol, boolean ignoreGaps, - boolean showSequenceLogo, long nseq) - { - // long now = System.currentTimeMillis(); - if (ssConsensus == null || ssConsensus.annotations == null - || ssConsensus.annotations.length < endCol) - { - /* + + public static void completeSSConsensus(AlignmentAnnotation ssConsensus, + ProfilesI profiles, int startCol, int endCol, boolean ignoreGaps, + boolean showSequenceLogo, long nseq) + { + // long now = System.currentTimeMillis(); + if (ssConsensus == null || ssConsensus.annotations == null + || ssConsensus.annotations.length < endCol) + { + /* * called with a bad alignment annotation row * wait for it to be initialised properly */ - return; - } + return; + } - for (int i = startCol; i < endCol; i++) - { - ProfileI profile = profiles.get(i); - if (profile == null) - { - /* + for (int i = startCol; i < endCol; i++) + { + ProfileI profile = profiles.get(i); + if (profile == null) + { + /* * happens if sequences calculated over were * shorter than alignment width */ @@ -430,10 +427,10 @@ public class AAFrequency final int dp = getPercentageDp(nseq); - float value = profile.getSSPercentageIdentity(ignoreGaps); + float value = profile.getSSPercentageIdentity(ignoreGaps); - String description = getSSTooltip(profile, value, showSequenceLogo, - ignoreGaps, dp); + String description = getSSTooltip(profile, value, showSequenceLogo, + ignoreGaps, dp); String modalSS = profile.getModalSS(); if ("".equals(modalSS)) @@ -560,7 +557,7 @@ public class AAFrequency } return description; } - + static String getSSTooltip(ProfileI profile, float pid, boolean showSequenceLogo, boolean ignoreGaps, int dp) { @@ -616,27 +613,28 @@ public class AAFrequency { char[] symbols; int[] values; - + if (profile.getCounts() != null) { ResidueCount counts = profile.getCounts(); SymbolCounts symbolCounts = counts.getSymbolCounts(); symbols = symbolCounts.symbols; values = symbolCounts.values; - + } - else if(profile.getSSCounts() != null) + else if (profile.getSSCounts() != null) { SecondaryStructureCount counts = profile.getSSCounts(); // to do - SecondaryStructureCount.SymbolCounts symbolCounts = counts.getSymbolCounts(); + SecondaryStructureCount.SymbolCounts symbolCounts = counts + .getSymbolCounts(); symbols = symbolCounts.symbols; values = symbolCounts.values; } - else { + else + { return null; } - QuickSort.sort(values, symbols); int totalPercentage = 0; diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index e806d2b..1a12681 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -58,10 +58,10 @@ public class AlignSeq private static final int DEFAULT_OPENCOST = 120; private static final int DEFAULT_EXTENDCOST = 20; - - private int GAP_OPEN_COST=DEFAULT_OPENCOST; - private int GAP_EXTEND_COST=DEFAULT_EXTENDCOST; + private int GAP_OPEN_COST = DEFAULT_OPENCOST; + + private int GAP_EXTEND_COST = DEFAULT_EXTENDCOST; private static final int GAP_INDEX = -1; @@ -100,11 +100,11 @@ public class AlignSeq int[] aseq1; int[] aseq2; - + /* * matches in alignment */ - int match=-1; + int match = -1; public String astr1 = ""; @@ -129,9 +129,9 @@ public class AlignSeq public float maxscore; - public float meanScore; //needed for PaSiMap + public float meanScore; // needed for PaSiMap - public int hypotheticMaxScore; // needed for PaSiMap + public int hypotheticMaxScore; // needed for PaSiMap int prev = 0; @@ -156,6 +156,7 @@ public class AlignSeq GAP_OPEN_COST = opencost; GAP_EXTEND_COST = extcost; } + public AlignSeq(SequenceI s1, SequenceI s2, String type) { seqInit(s1, s1.getSequenceAsString(), s2, s2.getSequenceAsString(), @@ -182,18 +183,18 @@ public class AlignSeq public AlignSeq(SequenceI s1, SequenceI s2, String type, int opencost, int extcost) { - this(s1,s2,type); - GAP_OPEN_COST=opencost; - GAP_EXTEND_COST=extcost; + this(s1, s2, type); + GAP_OPEN_COST = opencost; + GAP_EXTEND_COST = extcost; } public AlignSeq(SequenceI s12, String string1, SequenceI s22, String string2, String type2, int defaultOpencost, int defaultExtendcost) { - this(s12,string1,s22,string2,type2); - GAP_OPEN_COST=defaultOpencost; - GAP_EXTEND_COST=defaultExtendcost; + this(s12, string1, s22, string2, type2); + GAP_OPEN_COST = defaultOpencost; + GAP_EXTEND_COST = defaultExtendcost; } /** @@ -207,10 +208,10 @@ public class AlignSeq } /** - * returns the overall score of the alignment - * - * @return - */ + * returns the overall score of the alignment + * + * @return + */ public float getAlignmentScore() { return alignmentScore; @@ -333,27 +334,31 @@ public class AlignSeq s2.getDatasetSequence() == null ? s2 : s2.getDatasetSequence()); return alSeq2; } + /** * fraction of seq2 matched in the alignment + * * @return NaN or [0..1] */ public double getS2Coverage() { - if (match>=0) + if (match >= 0) { - return ((double)match)/((double)s2.getEnd()-s2.getStart()+1); + return ((double) match) / ((double) s2.getEnd() - s2.getStart() + 1); } return Double.NaN; } + /** * fraction of seq1 matched in the alignment + * * @return NaN or [0..1] */ public double getS1Coverage() { - if (match>=0) + if (match >= 0) { - return ((double)match)/((double)s1.getEnd()-s1.getStart()+1); + return ((double) match) / ((double) s1.getEnd() - s1.getStart() + 1); } return Double.NaN; } @@ -375,13 +380,14 @@ public class AlignSeq public void seqInit(SequenceI s1, String string1, SequenceI s2, String string2, String type) { - seqInit(s1,string1,s2,string2,type,GAP_OPEN_COST,GAP_EXTEND_COST); + seqInit(s1, string1, s2, string2, type, GAP_OPEN_COST, GAP_EXTEND_COST); } + public void seqInit(SequenceI s1, String string1, SequenceI s2, - String string2, String type, int opening,int extension) + String string2, String type, int opening, int extension) { - GAP_OPEN_COST=opening; - GAP_EXTEND_COST=extension; + GAP_OPEN_COST = opening; + GAP_EXTEND_COST = extension; this.s1 = s1; this.s2 = s2; setDefaultParams(type); @@ -473,13 +479,12 @@ public class AlignSeq aseq1 = new int[seq1.length + seq2.length]; aseq2 = new int[seq1.length + seq2.length]; - match=0; + match = 0; StringBuilder sb1 = new StringBuilder(aseq1.length); StringBuilder sb2 = new StringBuilder(aseq2.length); count = (seq1.length + seq2.length) - 1; - while (i > 0 && j > 0) { aseq1[count] = seq1[i]; @@ -523,12 +528,12 @@ public class AlignSeq { aseq2[count] = seq2[j]; sb2.append(s2str.charAt(j)); - if (aseq1[count]!=GAP_INDEX) { + if (aseq1[count] != GAP_INDEX) + { match++; } } - /* * we built the character strings backwards, so now * reverse them to convert to sequence strings @@ -570,7 +575,7 @@ public class AlignSeq int trace; maxscore = score[i][j] / 10f; - //prepare trailing gaps + // prepare trailing gaps while ((i < seq1.length - 1) || (j < seq2.length - 1)) { i++; @@ -587,20 +592,22 @@ public class AlignSeq count = (seq1.length + seq2.length) - 1; - //get trailing gaps + // get trailing gaps while ((i >= seq1.length) || (j >= seq2.length)) { if (i >= seq1.length) { - aseq1[count] = GAP_INDEX; - sb1.append("-"); - aseq2[count] = seq2[j]; - sb2.append(s2str.charAt(j)); - } else if (j >= seq2.length) { - aseq1[count] = seq1[i]; - sb1.append(s1str.charAt(i)); - aseq2[count] = GAP_INDEX; - sb2.append("-"); + aseq1[count] = GAP_INDEX; + sb1.append("-"); + aseq2[count] = seq2[j]; + sb2.append(s2str.charAt(j)); + } + else if (j >= seq2.length) + { + aseq1[count] = seq1[i]; + sb1.append(s1str.charAt(i)); + aseq2[count] = GAP_INDEX; + sb2.append("-"); } i--; j--; @@ -644,18 +651,20 @@ public class AlignSeq aseq2[count] = seq2[j]; sb2.append(s2str.charAt(j)); - //get initial gaps + // get initial gaps while (j > 0 || i > 0) { if (j > 0) { - j--; - sb1.append("-"); - sb2.append(s2str.charAt(j)); - } else if (i > 0) { - i--; - sb1.append(s1str.charAt(i)); - sb2.append("-"); + j--; + sb1.append("-"); + sb2.append(s2str.charAt(j)); + } + else if (i > 0) + { + i--; + sb1.append(s1str.charAt(i)); + sb2.append("-"); } } @@ -853,7 +862,7 @@ public class AlignSeq { int n = seq1.length; int m = seq2.length; - final int GAP_EX_COST=GAP_EXTEND_COST; + final int GAP_EX_COST = GAP_EXTEND_COST; final int GAP_OP_COST = GAP_OPEN_COST; // top left hand element score[0][0] = scoreMatrix.getPairwiseScore(s1str.charAt(0), @@ -871,8 +880,7 @@ public class AlignSeq float pairwiseScore = scoreMatrix.getPairwiseScore(s1str.charAt(0), s2str.charAt(j)); - score[0][j] = max(pairwiseScore * 10, -GAP_OP_COST, - -GAP_EX_COST); + score[0][j] = max(pairwiseScore * 10, -GAP_OP_COST, -GAP_EX_COST); traceback[0][j] = 1; } @@ -1076,13 +1084,15 @@ public class AlignSeq public static AlignSeq doGlobalNWAlignment(SequenceI s1, SequenceI s2, String type) { - return doGlobalNWAlignment(s1, s2, type, DEFAULT_OPENCOST,DEFAULT_EXTENDCOST); + return doGlobalNWAlignment(s1, s2, type, DEFAULT_OPENCOST, + DEFAULT_EXTENDCOST); } + public static AlignSeq doGlobalNWAlignment(SequenceI s1, SequenceI s2, - String type, int opencost,int extcost) + String type, int opencost, int extcost) { - - AlignSeq as = new AlignSeq(s1, s2, type,opencost,extcost); + + AlignSeq as = new AlignSeq(s1, s2, type, opencost, extcost); as.calcScoreMatrix(); as.traceAlignment(); @@ -1359,42 +1369,45 @@ public class AlignSeq } /** - * calculate the mean score of the alignment - * mean score is equal to the score of an alignmenet of two sequences with randomly shuffled AA sequence composited of the same AA as the two original sequences - * - */ + * calculate the mean score of the alignment mean score is equal to the score + * of an alignmenet of two sequences with randomly shuffled AA sequence + * composited of the same AA as the two original sequences + * + */ public void meanScore() { - int length = indelfreeAstr1.length(); //both have the same length - //create HashMap for counting residues in each sequence + int length = indelfreeAstr1.length(); // both have the same length + // create HashMap for counting residues in each sequence HashMap seq1ResCount = new HashMap(); HashMap seq2ResCount = new HashMap(); - // for both sequences (String indelfreeAstr1 or 2) create a key for the residue and add 1 each time its encountered - for (char residue: indelfreeAstr1.toCharArray()) + // for both sequences (String indelfreeAstr1 or 2) create a key for the + // residue and add 1 each time its encountered + for (char residue : indelfreeAstr1.toCharArray()) { seq1ResCount.putIfAbsent(residue, 0); seq1ResCount.replace(residue, seq1ResCount.get(residue) + 1); } - for (char residue: indelfreeAstr2.toCharArray()) + for (char residue : indelfreeAstr2.toCharArray()) { seq2ResCount.putIfAbsent(residue, 0); seq2ResCount.replace(residue, seq2ResCount.get(residue) + 1); } - // meanscore = for each residue pair get the number of appearance and add (countA * countB * pairwiseScore(AB)) + // meanscore = for each residue pair get the number of appearance and add + // (countA * countB * pairwiseScore(AB)) // divide the meanscore by the sequence length afterwards float _meanscore = 0; for (char resA : seq1ResCount.keySet()) { for (char resB : seq2ResCount.keySet()) { - int countA = seq1ResCount.get(resA); - int countB = seq2ResCount.get(resB); + int countA = seq1ResCount.get(resA); + int countB = seq2ResCount.get(resB); float scoreAB = scoreMatrix.getPairwiseScore(resA, resB); - _meanscore += countA * countB * scoreAB; + _meanscore += countA * countB * scoreAB; } } _meanscore /= length; @@ -1407,21 +1420,23 @@ public class AlignSeq } /** - * calculate the hypothetic max score using the self-alignment of the sequences - */ + * calculate the hypothetic max score using the self-alignment of the + * sequences + */ public void hypotheticMaxScore() { int _hmsA = 0; int _hmsB = 0; - for (char residue: indelfreeAstr1.toCharArray()) + for (char residue : indelfreeAstr1.toCharArray()) { _hmsA += scoreMatrix.getPairwiseScore(residue, residue); } - for (char residue: indelfreeAstr2.toCharArray()) + for (char residue : indelfreeAstr2.toCharArray()) { _hmsB += scoreMatrix.getPairwiseScore(residue, residue); } - this.hypotheticMaxScore = (_hmsA < _hmsB) ? _hmsA : _hmsB; // take the lower self alignment + this.hypotheticMaxScore = (_hmsA < _hmsB) ? _hmsA : _hmsB; // take the lower + // self alignment } @@ -1431,27 +1446,30 @@ public class AlignSeq } /** - * create strings based of astr1 and astr2 but without gaps - */ + * create strings based of astr1 and astr2 but without gaps + */ public void getIndelfreeAstr() { - int n = astr1.length(); // both have the same length + int n = astr1.length(); // both have the same length for (int i = 0; i < n; i++) { - if (Character.isLetter(astr1.charAt(i)) && Character.isLetter(astr2.charAt(i))) // if both sequences dont have a gap -> add to indelfreeAstr + if (Character.isLetter(astr1.charAt(i)) + && Character.isLetter(astr2.charAt(i))) // if both sequences dont + // have a gap -> add to + // indelfreeAstr { - this.indelfreeAstr1 += astr1.charAt(i); - this.indelfreeAstr2 += astr2.charAt(i); + this.indelfreeAstr1 += astr1.charAt(i); + this.indelfreeAstr2 += astr2.charAt(i); } } } /** - * calculates the overall score of the alignment - * preprescore = sum of all scores - all penalties - * if preprescore < 1 ~ alignmentScore = Float.NaN > - * alignmentScore = ((preprescore - meanScore) / (hypotheticMaxScore - meanScore)) * coverage - */ + * calculates the overall score of the alignment preprescore = sum of all + * scores - all penalties if preprescore < 1 ~ alignmentScore = Float.NaN > + * alignmentScore = ((preprescore - meanScore) / (hypotheticMaxScore - + * meanScore)) * coverage + */ public void scoreAlignment() { @@ -1475,36 +1493,51 @@ public class AlignSeq char char2 = indelfreeAstr2.charAt(i); boolean aIsLetter = Character.isLetter(char1); boolean bIsLetter = Character.isLetter(char2); - if (aIsLetter && bIsLetter) // if pair -> get score + if (aIsLetter && bIsLetter) // if pair -> get score { score += scoreMatrix.getPairwiseScore(char1, char2); - } else if (!aIsLetter && !bIsLetter) { // both are gap -> skip - } else if ((!aIsLetter && aGapOpen) || (!bIsLetter && bGapOpen)) { // one side gapopen -> score - gap_extend - score -= GAP_EXTEND_COST; - } else { // no gap open -> score - gap_open - score -= GAP_OPEN_COST; + } + else if (!aIsLetter && !bIsLetter) + { // both are gap -> skip + } + else if ((!aIsLetter && aGapOpen) || (!bIsLetter && bGapOpen)) + { // one side gapopen -> score - gap_extend + score -= GAP_EXTEND_COST; + } + else + { // no gap open -> score - gap_open + score -= GAP_OPEN_COST; } // adjust GapOpen status in both sequences aGapOpen = (!aIsLetter) ? true : false; bGapOpen = (!bIsLetter) ? true : false; } - float preprescore = score; // if this score < 1 --> alignment score = Float.NaN - score = (score - this.meanScore) / (this.hypotheticMaxScore - this.meanScore); - int[] _max = MiscMath.findMax(new int[]{astr1.replace("-","").length(), astr2.replace("-","").length()}); // {index of max, max} - float coverage = (float) n / (float) _max[1]; // indelfreeAstr length / longest sequence length - float prescore = score; // only debug + float preprescore = score; // if this score < 1 --> alignment score = + // Float.NaN + score = (score - this.meanScore) + / (this.hypotheticMaxScore - this.meanScore); + int[] _max = MiscMath + .findMax(new int[] + { astr1.replace("-", "").length(), + astr2.replace("-", "").length() }); // {index of max, max} + float coverage = (float) n / (float) _max[1]; // indelfreeAstr length / + // longest sequence length + float prescore = score; // only debug score *= coverage; - //System.out.println(String.format("prepre-score: %f, pre-score: %f, longlength: %d\nscore: %1.16f, mean: %f, max: %d", preprescore, prescore, _max[1], score, this.meanScore, this.hypotheticMaxScore)); + // System.out.println(String.format("prepre-score: %f, pre-score: %f, + // longlength: %d\nscore: %1.16f, mean: %f, max: %d", preprescore, prescore, + // _max[1], score, this.meanScore, this.hypotheticMaxScore)); float minScore = 0f; this.alignmentScore = (score <= minScore) ? Float.NaN : score; } public void setScoreMatrix(ScoreMatrix sm) { - if (sm != null) { - scoreMatrix = sm; - } + if (sm != null) + { + scoreMatrix = sm; + } } } diff --git a/src/jalview/analysis/AlignmentUtils.java b/src/jalview/analysis/AlignmentUtils.java index d78bcdc..4d2b1aa 100644 --- a/src/jalview/analysis/AlignmentUtils.java +++ b/src/jalview/analysis/AlignmentUtils.java @@ -84,7 +84,7 @@ public class AlignmentUtils { private static final int CODON_LENGTH = 3; - private static final String SEQUENCE_VARIANT = "sequence_variant:"; + private static final String SEQUENCE_VARIANT = "sequence_variant:"; /* * the 'id' attribute is provided for variant features fetched from @@ -1542,13 +1542,15 @@ public class AlignmentUtils } } } - - - public static boolean isSSAnnotationPresent( Map> annotations) { - + + public static boolean isSSAnnotationPresent( + Map> annotations) + { + for (SequenceI seq : annotations.keySet()) { - if(isSecondaryStructurePresent(annotations.get(seq).toArray(new AlignmentAnnotation[0]))) + if (isSecondaryStructurePresent( + annotations.get(seq).toArray(new AlignmentAnnotation[0]))) { return true; } @@ -2920,7 +2922,7 @@ public class AlignmentUtils return ssPresent; } - + public static Color getSecondaryStructureAnnotationColour(char symbol) { @@ -2938,10 +2940,11 @@ public class AlignmentUtils } return Color.white; + } - public static char findSSAnnotationForGivenSeqposition(AlignmentAnnotation aa, - int seqPosition) + public static char findSSAnnotationForGivenSeqposition( + AlignmentAnnotation aa, int seqPosition) { char ss = '*'; @@ -3187,5 +3190,32 @@ public class AlignmentUtils return ssAlignmentAnnotationForSequences; } - + + + // to do set priority for labels + public static AlignmentAnnotation getDisplayedAlignmentAnnotation( + SequenceI seq) + { + + for (String ssLabel : Constants.SECONDARY_STRUCTURE_LABELS.keySet()) + { + + AlignmentAnnotation[] aa = seq.getAnnotation(ssLabel); + if (aa != null) + { + + for (AlignmentAnnotation annot : aa) + { + if (annot.visible) + { + return annot; + } + } + } + } + + return null; + + } + } diff --git a/src/jalview/analysis/ConnectivityException.java b/src/jalview/analysis/ConnectivityException.java index 9915f2a..5f371c8 100644 --- a/src/jalview/analysis/ConnectivityException.java +++ b/src/jalview/analysis/ConnectivityException.java @@ -23,7 +23,9 @@ package jalview.analysis; public class ConnectivityException extends RuntimeException { private String sequence; + private int connection; + private byte dim; public ConnectivityException(String sequence, int connection, byte dim) @@ -31,9 +33,11 @@ public class ConnectivityException extends RuntimeException this("Insufficient number of connections", sequence, connection, dim); } - public ConnectivityException(String message, String sequence, int connection, byte dim) + public ConnectivityException(String message, String sequence, + int connection, byte dim) { - super(String.format("%s for %s (%d, should be %d or more)", message, sequence, connection, dim)); + super(String.format("%s for %s (%d, should be %d or more)", message, + sequence, connection, dim)); this.sequence = sequence; this.connection = connection; this.dim = dim; diff --git a/src/jalview/analysis/Finder.java b/src/jalview/analysis/Finder.java index c84c69a..32d4cf3 100644 --- a/src/jalview/analysis/Finder.java +++ b/src/jalview/analysis/Finder.java @@ -606,7 +606,7 @@ public class Finder implements FinderI } else { - //allFeatures = sf.getAllFeatures(null); + // allFeatures = sf.getAllFeatures(null); allFeatures = sf.getAllFeatures(); } // so we can check we are advancing when debugging diff --git a/src/jalview/analysis/PaSiMap.java b/src/jalview/analysis/PaSiMap.java index 48ec899..5be8c7b 100755 --- a/src/jalview/analysis/PaSiMap.java +++ b/src/jalview/analysis/PaSiMap.java @@ -38,7 +38,8 @@ import java.util.Hashtable; /** * Performs Principal Component Analysis on given sequences - * @AUTHOR MorellThomas + * + * @AUTHOR MorellThomas */ public class PaSiMap implements Runnable { @@ -72,14 +73,17 @@ public class PaSiMap implements Runnable * @param sm * @param options */ - public PaSiMap(AlignmentViewport sequences, ScoreModelI sm, PairwiseAlignPanel pap) + public PaSiMap(AlignmentViewport sequences, ScoreModelI sm, + PairwiseAlignPanel pap) { this.seqs = sequences; - if (sm!=null && sm instanceof ScoreMatrix) + if (sm != null && sm instanceof ScoreMatrix) { this.scoreMatrix = ((ScoreMatrix) sm); - } else { + } + else + { this.scoreMatrix = null; } @@ -108,7 +112,8 @@ public class PaSiMap implements Runnable * DOCUMENT ME! * @param mm * DOCUMENT ME! - * @param factor ~ is 1 + * @param factor + * ~ is 1 * * @return DOCUMENT ME! */ @@ -164,8 +169,8 @@ public class PaSiMap implements Runnable } /** - * Answers a formatted text report of the PaSiMap calculation results (matrices - * and eigenvalues) suitable for display + * Answers a formatted text report of the PaSiMap calculation results + * (matrices and eigenvalues) suitable for display * * @return */ @@ -197,13 +202,25 @@ public class PaSiMap implements Runnable /** * Performs the PaSiMap calculation * - * creates a new gui/PairwiseAlignPanel with the input sequences (AlignmentViewport) - * uses analysis/AlignSeq to creatue the pairwise alignments and calculate the AlignmentScores (float for each pair) + * creates a new gui/PairwiseAlignPanel with the input sequences + * (AlignmentViewport) + * + * uses analysis/AlignSeq to creatue the pairwise alignments and calculate the + * AlignmentScores (float for each pair) + * * gets all float[][] scores from the gui/PairwiseAlignPanel - * checks the connections for each sequence with AlignmentViewport seqs.calculateConnectivity(float[][] scores, int dim) (from analysis/Connectivity) -- throws an Exception if insufficient + * + * checks the connections for each sequence with AlignmentViewport + * seqs.calculateConnectivity(float[][] scores, int dim) (from + * analysis/Connectivity) -- throws an Exception if insufficient + * * creates a math/MatrixI pairwiseScores of the float[][] scores - * copys the scores and fills the diagonal to create a symmetric matrix using math/Matrix.fillDiagonal() + * + * copys the scores and fills the diagonal to create a symmetric matrix using + * math/Matrix.fillDiagonal() + * * performs the analysis/ccAnalysis with the symmetric matrix + * * gets the eigenmatrix and the eigenvalues using math/Matrix.tqli() */ @Override @@ -211,9 +228,10 @@ public class PaSiMap implements Runnable { try { - //alignment = new PairwiseAlignPanel(seqs, true, 100, 5); + // alignment = new PairwiseAlignPanel(seqs, true, 100, 5); alignment.calculate(scoreMatrix); - float[][] scores = alignment.getAlignmentScores(); //bigger index first -- eg scores[14][13] + float[][] scores = alignment.getAlignmentScores(); // bigger index first + // -- eg scores[14][13] SequenceI[] iseqs = alignment.getInputSequences(); Connectivity.getConnectivity(iseqs, scores, dim); diff --git a/src/jalview/analysis/ccAnalysis.java b/src/jalview/analysis/ccAnalysis.java index 4922a54..62e1913 100755 --- a/src/jalview/analysis/ccAnalysis.java +++ b/src/jalview/analysis/ccAnalysis.java @@ -55,11 +55,11 @@ import org.apache.commons.math3.linear.SingularValueDecomposition; /** * A class to model rectangular matrices of double values and operations on them */ -public class ccAnalysis +public class ccAnalysis { - private byte dim = 0; //dimensions + private byte dim = 0; // dimensions - private MatrixI scoresOld; //input scores + private MatrixI scoresOld; // input scores public ccAnalysis(MatrixI scores, byte dim) { @@ -68,29 +68,33 @@ public class ccAnalysis { for (int j = 0; j < scores.width(); j++) { - if (!Double.isNaN(scores.getValue(i,j))) - { - scores.setValue(i, j, (double) Math.round(scores.getValue(i,j) * (int) 10000) / 10000); - } + if (!Double.isNaN(scores.getValue(i, j))) + { + scores.setValue(i, j, + (double) Math.round(scores.getValue(i, j) * (int) 10000) + / 10000); + } } } this.scoresOld = scores; this.dim = dim; } - /** - * Initialise a distrust-score for each hypothesis (h) of hSigns - * distrust = conHypNum - proHypNum - * - * @param hSigns ~ hypothesis signs (+/-) for each sequence - * @param scores ~ input score matrix - * - * @return distrustScores - */ + /** + * Initialise a distrust-score for each hypothesis (h) of hSigns distrust = + * conHypNum - proHypNum + * + * @param hSigns + * ~ hypothesis signs (+/-) for each sequence + * @param scores + * ~ input score matrix + * + * @return distrustScores + */ private int[] initialiseDistrusts(byte[] hSigns, MatrixI scores) { int[] distrustScores = new int[scores.width()]; - + // loop over symmetric matrix for (int i = 0; i < scores.width(); i++) { @@ -100,34 +104,43 @@ public class ccAnalysis for (int j = 0; j < scores.width(); j++) { - double cell = scores.getRow(i)[j]; // value at [i][j] in scores - byte hBSign = hSigns[j]; - if (!Double.isNaN(cell)) - { - byte cellSign = (byte) Math.signum(cell); //check if sign of matrix value fits hyptohesis - if (cellSign == hASign * hBSign) - { - proHypNum++; - } else { - conHypNum++; - } - } + double cell = scores.getRow(i)[j]; // value at [i][j] in scores + byte hBSign = hSigns[j]; + if (!Double.isNaN(cell)) + { + byte cellSign = (byte) Math.signum(cell); // check if sign of matrix + // value fits hyptohesis + if (cellSign == hASign * hBSign) + { + proHypNum++; + } + else + { + conHypNum++; + } + } } - distrustScores[i] = conHypNum - proHypNum; //create distrust score for each sequence + distrustScores[i] = conHypNum - proHypNum; // create distrust score for + // each sequence } return distrustScores; } /** - * Optemise hypothesis concerning the sign of the hypothetical value for each hSigns by interpreting the pairwise correlation coefficients as scalar products - * - * @param hSigns ~ hypothesis signs (+/-) - * @param distrustScores - * @param scores ~ input score matrix - * - * @return hSigns - */ - private byte[] optimiseHypothesis(byte[] hSigns, int[] distrustScores, MatrixI scores) + * Optimise hypothesis concerning the sign of the hypothetical value for each + * hSigns by interpreting the pairwise correlation coefficients as scalar + * products + * + * @param hSigns + * ~ hypothesis signs (+/-) + * @param distrustScores + * @param scores + * ~ input score matrix + * + * @return hSigns + */ + private byte[] optimiseHypothesis(byte[] hSigns, int[] distrustScores, + MatrixI scores) { // get maximum distrust score int[] maxes = MiscMath.findMax(distrustScores); @@ -137,7 +150,7 @@ public class ccAnalysis // if hypothesis is not optimal yet if (maxDistrust > 0) { - //toggle sign for hI with maximum distrust + // toggle sign for hI with maximum distrust hSigns[maxDistrustIndex] *= -1; // update distrust at same position distrustScores[maxDistrustIndex] *= -1; @@ -146,299 +159,327 @@ public class ccAnalysis byte hASign = hSigns[maxDistrustIndex]; for (int NOTmaxDistrustIndex = 0; NOTmaxDistrustIndex < distrustScores.length; NOTmaxDistrustIndex++) { - if (NOTmaxDistrustIndex != maxDistrustIndex) - { - byte hBSign = hSigns[NOTmaxDistrustIndex]; - double cell = scores.getValue(maxDistrustIndex, NOTmaxDistrustIndex); - - // distrust only changed if not NaN - if (!Double.isNaN(cell)) - { - byte cellSign = (byte) Math.signum(cell); - // if sign of cell matches hypothesis decrease distrust by 2 because 1 more value supporting and 1 less contradicting - // else increase by 2 - if (cellSign == hASign * hBSign) - { - distrustScores[NOTmaxDistrustIndex] -= 2; - } else { - distrustScores[NOTmaxDistrustIndex] += 2; - } - } - } + if (NOTmaxDistrustIndex != maxDistrustIndex) + { + byte hBSign = hSigns[NOTmaxDistrustIndex]; + double cell = scores.getValue(maxDistrustIndex, + NOTmaxDistrustIndex); + + // distrust only changed if not NaN + if (!Double.isNaN(cell)) + { + byte cellSign = (byte) Math.signum(cell); + // if sign of cell matches hypothesis decrease distrust by 2 because + // 1 more value supporting and 1 less contradicting + // else increase by 2 + if (cellSign == hASign * hBSign) + { + distrustScores[NOTmaxDistrustIndex] -= 2; + } + else + { + distrustScores[NOTmaxDistrustIndex] += 2; + } + } + } } - //further optimisation necessary + // further optimisation necessary return optimiseHypothesis(hSigns, distrustScores, scores); - } else { + } + else + { return hSigns; } } - /** - * takes the a symmetric MatrixI as input scores which may contain Double.NaN - * approximate the missing values using hypothesis optimisation - * - * runs analysis - * - * @param scores ~ score matrix - * - * @return - */ - public MatrixI run () throws Exception + /** + * takes the a symmetric MatrixI as input scores which may contain Double.NaN + * approximate the missing values using hypothesis optimisation + * + * runs analysis + * + * @param scores + * ~ score matrix + * + * @return + */ + public MatrixI run() throws Exception { - //initialse eigenMatrix and repMatrix + // initialse eigenMatrix and repMatrix MatrixI eigenMatrix = scoresOld.copy(); MatrixI repMatrix = scoresOld.copy(); try { - /* - * Calculate correction factor for 2nd and higher eigenvalue(s). - * This correction is NOT needed for the 1st eigenvalue, because the - * unknown (=NaN) values of the matrix are approximated by presuming - * 1-dimensional vectors as the basis of the matrix interpretation as dot - * products. - */ - - System.out.println("Input correlation matrix:"); - eigenMatrix.print(System.out, "%1.4f "); - - int matrixWidth = eigenMatrix.width(); // square matrix, so width == height - int matrixElementsTotal = (int) Math.pow(matrixWidth, 2); //total number of elemts - - float correctionFactor = (float) (matrixElementsTotal - eigenMatrix.countNaN()) / (float) matrixElementsTotal; - - /* - * Calculate hypothetical value (1-dimensional vector) h_i for each - * dataset by interpreting the given correlation coefficients as scalar - * products. - */ - - /* - * Memory for current hypothesis concerning sign of each h_i. - * List of signs for all h_i in the encoding: + /* + * Calculate correction factor for 2nd and higher eigenvalue(s). + * This correction is NOT needed for the 1st eigenvalue, because the + * unknown (=NaN) values of the matrix are approximated by presuming + * 1-dimensional vectors as the basis of the matrix interpretation as dot + * products. + */ + + System.out.println("Input correlation matrix:"); + eigenMatrix.print(System.out, "%1.4f "); + + int matrixWidth = eigenMatrix.width(); // square matrix, so width == + // height + int matrixElementsTotal = (int) Math.pow(matrixWidth, 2); // total number + // of elemts + + float correctionFactor = (float) (matrixElementsTotal + - eigenMatrix.countNaN()) / (float) matrixElementsTotal; + + /* + * Calculate hypothetical value (1-dimensional vector) h_i for each + * dataset by interpreting the given correlation coefficients as scalar + * products. + */ + + /* + * Memory for current hypothesis concerning sign of each h_i. + * List of signs for all h_i in the encoding: * * 1: positive * * 0: zero * * -1: negative - * Initial hypothesis: all signs are positive. - */ - byte[] hSigns = new byte[matrixWidth]; - Arrays.fill(hSigns, (byte) 1); - - //Estimate signs for each h_i by refining hypothesis on signs. - hSigns = optimiseHypothesis(hSigns, initialiseDistrusts(hSigns, eigenMatrix), eigenMatrix); - - - //Estimate absolute values for each h_i by determining sqrt of mean of - //non-NaN absolute values for every row. - double[] hAbs = MiscMath.sqrt(eigenMatrix.absolute().meanRow()); - - //Combine estimated signs with absolute values in obtain total value for - //each h_i. - double[] hValues = MiscMath.elementwiseMultiply(hSigns, hAbs); - - /*Complement symmetric matrix by using the scalar products of estimated - *values of h_i to replace NaN-cells. - *Matrix positions that have estimated values - *(only for diagonal and upper off-diagonal values, due to the symmetry - *the positions of the lower-diagonal values can be inferred). - List of tuples (row_idx, column_idx).*/ - - ArrayList estimatedPositions = new ArrayList(); - - // for off-diagonal cells - for (int rowIndex = 0; rowIndex < matrixWidth - 1; rowIndex++) - { - for (int columnIndex = rowIndex + 1; columnIndex < matrixWidth; columnIndex++) + * Initial hypothesis: all signs are positive. + */ + byte[] hSigns = new byte[matrixWidth]; + Arrays.fill(hSigns, (byte) 1); + + // Estimate signs for each h_i by refining hypothesis on signs. + hSigns = optimiseHypothesis(hSigns, + initialiseDistrusts(hSigns, eigenMatrix), eigenMatrix); + + // Estimate absolute values for each h_i by determining sqrt of mean of + // non-NaN absolute values for every row. + double[] hAbs = MiscMath.sqrt(eigenMatrix.absolute().meanRow()); + + // Combine estimated signs with absolute values in obtain total value for + // each h_i. + double[] hValues = MiscMath.elementwiseMultiply(hSigns, hAbs); + + /*Complement symmetric matrix by using the scalar products of estimated + *values of h_i to replace NaN-cells. + *Matrix positions that have estimated values + *(only for diagonal and upper off-diagonal values, due to the symmetry + *the positions of the lower-diagonal values can be inferred). + List of tuples (row_idx, column_idx).*/ + + ArrayList estimatedPositions = new ArrayList(); + + // for off-diagonal cells + for (int rowIndex = 0; rowIndex < matrixWidth - 1; rowIndex++) { - double cell = eigenMatrix.getValue(rowIndex, columnIndex); - if (Double.isNaN(cell)) - { - //calculate scalar product as new cell value - cell = hValues[rowIndex] * hValues[columnIndex]; - //fill in new value in cell and symmetric partner - eigenMatrix.setValue(rowIndex, columnIndex, cell); - eigenMatrix.setValue(columnIndex, rowIndex, cell); - //save positions of estimated values - estimatedPositions.add(new int[]{rowIndex, columnIndex}); - } + for (int columnIndex = rowIndex + + 1; columnIndex < matrixWidth; columnIndex++) + { + double cell = eigenMatrix.getValue(rowIndex, columnIndex); + if (Double.isNaN(cell)) + { + // calculate scalar product as new cell value + cell = hValues[rowIndex] * hValues[columnIndex]; + // fill in new value in cell and symmetric partner + eigenMatrix.setValue(rowIndex, columnIndex, cell); + eigenMatrix.setValue(columnIndex, rowIndex, cell); + // save positions of estimated values + estimatedPositions.add(new int[] { rowIndex, columnIndex }); + } + } } - } - // for diagonal cells - for (int diagonalIndex = 0; diagonalIndex < matrixWidth; diagonalIndex++) + // for diagonal cells + for (int diagonalIndex = 0; diagonalIndex < matrixWidth; diagonalIndex++) { double cell = Math.pow(hValues[diagonalIndex], 2); - eigenMatrix.setValue(diagonalIndex, diagonalIndex, cell); - estimatedPositions.add(new int[]{diagonalIndex, diagonalIndex}); + eigenMatrix.setValue(diagonalIndex, diagonalIndex, cell); + estimatedPositions.add(new int[] { diagonalIndex, diagonalIndex }); } - /*Refine total values of each h_i: - *Initialise h_values of the hypothetical non-existant previous iteration - *with the correct format but with impossible values. - Needed for exit condition of otherwise endless loop.*/ - System.out.print("initial values: [ "); - for (double h : hValues) - { - System.out.print(String.format("%1.4f, ", h)); - } - System.out.println(" ]"); - - - double[] hValuesOld = new double[matrixWidth]; - - int iterationCount = 0; - - // repeat unitl values of h do not significantly change anymore - while (true) - { - for (int hIndex = 0; hIndex < matrixWidth; hIndex++) - { - double newH = Arrays.stream(MiscMath.elementwiseMultiply(hValues, eigenMatrix.getRow(hIndex))).sum() / Arrays.stream(MiscMath.elementwiseMultiply(hValues, hValues)).sum(); - hValues[hIndex] = newH; - } - - System.out.print(String.format("iteration %d: [ ", iterationCount)); + /*Refine total values of each h_i: + *Initialise h_values of the hypothetical non-existant previous iteration + *with the correct format but with impossible values. + Needed for exit condition of otherwise endless loop.*/ + System.out.print("initial values: [ "); for (double h : hValues) { - System.out.print(String.format("%1.4f, ", h)); + System.out.print(String.format("%1.4f, ", h)); } System.out.println(" ]"); - //update values of estimated positions - for (int[] pair : estimatedPositions) // pair ~ row, col - { - double newVal = hValues[pair[0]] * hValues[pair[1]]; - eigenMatrix.setValue(pair[0], pair[1], newVal); - eigenMatrix.setValue(pair[1], pair[0], newVal); - } + double[] hValuesOld = new double[matrixWidth]; - iterationCount++; + int iterationCount = 0; - //exit loop as soon as new values are similar to the last iteration - if (MiscMath.allClose(hValues, hValuesOld, 0d, 1e-05d, false)) + // FIXME JAL-4443 - spliterators could be coded out or patched with j2s + // annotation + // repeat unitl values of h do not significantly change anymore + while (true) { - break; + for (int hIndex = 0; hIndex < matrixWidth; hIndex++) + { + double newH = Arrays + .stream(MiscMath.elementwiseMultiply(hValues, + eigenMatrix.getRow(hIndex))) + .sum() + / Arrays.stream( + MiscMath.elementwiseMultiply(hValues, hValues)) + .sum(); + hValues[hIndex] = newH; + } + + System.out.print(String.format("iteration %d: [ ", iterationCount)); + for (double h : hValues) + { + System.out.print(String.format("%1.4f, ", h)); + } + System.out.println(" ]"); + + // update values of estimated positions + for (int[] pair : estimatedPositions) // pair ~ row, col + { + double newVal = hValues[pair[0]] * hValues[pair[1]]; + eigenMatrix.setValue(pair[0], pair[1], newVal); + eigenMatrix.setValue(pair[1], pair[0], newVal); + } + + iterationCount++; + + // exit loop as soon as new values are similar to the last iteration + if (MiscMath.allClose(hValues, hValuesOld, 0d, 1e-05d, false)) + { + break; + } + + // save hValues for comparison in the next iteration + System.arraycopy(hValues, 0, hValuesOld, 0, hValues.length); } - //save hValues for comparison in the next iteration - System.arraycopy(hValues, 0, hValuesOld, 0, hValues.length); - } - - //----------------------------- - //Use complemented symmetric matrix to calculate final representative - //vectors. - - //Eigendecomposition. - eigenMatrix.tred(); - eigenMatrix.tqli(); + // ----------------------------- + // Use complemented symmetric matrix to calculate final representative + // vectors. - System.out.println("eigenmatrix"); - eigenMatrix.print(System.out, "%8.2f"); - System.out.println(); - System.out.println("uncorrected eigenvalues"); - eigenMatrix.printD(System.out, "%2.4f "); - System.out.println(); + // Eigendecomposition. + eigenMatrix.tred(); + eigenMatrix.tqli(); - double[] eigenVals = eigenMatrix.getD(); + System.out.println("eigenmatrix"); + eigenMatrix.print(System.out, "%8.2f"); + System.out.println(); + System.out.println("uncorrected eigenvalues"); + eigenMatrix.printD(System.out, "%2.4f "); + System.out.println(); - TreeMap eigenPairs = new TreeMap<>(Comparator.reverseOrder()); - for (int i = 0; i < eigenVals.length; i++) - { - eigenPairs.put(eigenVals[i], i); - } + double[] eigenVals = eigenMatrix.getD(); - // matrix of representative eigenvectors (each row is a vector) - double[][] _repMatrix = new double[eigenVals.length][dim]; - double[][] _oldMatrix = new double[eigenVals.length][dim]; - double[] correctedEigenValues = new double[dim]; - - int l = 0; - for (Entry pair : eigenPairs.entrySet()) - { - double eigenValue = pair.getKey(); - int column = pair.getValue(); - double[] eigenVector = eigenMatrix.getColumn(column); - //for 2nd and higher eigenvalues - if (l >= 1) + TreeMap eigenPairs = new TreeMap<>( + Comparator.reverseOrder()); + for (int i = 0; i < eigenVals.length; i++) { - eigenValue /= correctionFactor; + eigenPairs.put(eigenVals[i], i); } - correctedEigenValues[l] = eigenValue; - for (int j = 0; j < eigenVector.length; j++) - { - _repMatrix[j][l] = (eigenValue < 0) ? 0.0 : - Math.sqrt(eigenValue) * eigenVector[j]; - double tmpOldScore = scoresOld.getColumn(column)[j]; - _oldMatrix[j][dim - l - 1] = (Double.isNaN(tmpOldScore)) ? 0.0 : tmpOldScore; - } - l++; - if (l >= dim) - { - break; - } - } - System.out.println("correctedEigenValues"); - MiscMath.print(correctedEigenValues, "%2.4f "); - - repMatrix = new Matrix(_repMatrix); - repMatrix.setD(correctedEigenValues); - MatrixI oldMatrix = new Matrix(_oldMatrix); - - MatrixI dotMatrix = repMatrix.postMultiply(repMatrix.transpose()); - - double rmsd = scoresOld.rmsd(dotMatrix); - - System.out.println("iteration, rmsd, maxDiff, rmsdDiff"); - System.out.println(String.format("0, %8.5f, -, -", rmsd)); - // Refine representative vectors by minimising sum-of-squared deviates between dotMatrix and original score matrix - for (int iteration = 1; iteration < 21; iteration++) // arbitrarily set to 20 - { - MatrixI repMatrixOLD = repMatrix.copy(); - MatrixI dotMatrixOLD = dotMatrix.copy(); + // matrix of representative eigenvectors (each row is a vector) + double[][] _repMatrix = new double[eigenVals.length][dim]; + double[][] _oldMatrix = new double[eigenVals.length][dim]; + double[] correctedEigenValues = new double[dim]; - // for all rows/hA in the original matrix - for (int hAIndex = 0; hAIndex < oldMatrix.height(); hAIndex++) + int l = 0; + for (Entry pair : eigenPairs.entrySet()) { - double[] row = oldMatrix.getRow(hAIndex); - double[] hA = repMatrix.getRow(hAIndex); - hAIndex = hAIndex; - //find least-squares-solution fo rdifferences between original scores and representative vectors - double[] hAlsm = leastSquaresOptimisation(repMatrix, scoresOld, hAIndex); - // update repMatrix with new hAlsm - for (int j = 0; j < repMatrix.width(); j++) - { - repMatrix.setValue(hAIndex, j, hAlsm[j]); - } - } - - // dot product of representative vecotrs yields a matrix with values approximating the correlation matrix - dotMatrix = repMatrix.postMultiply(repMatrix.transpose()); - // calculate rmsd between approximation and correlation matrix - rmsd = scoresOld.rmsd(dotMatrix); - - // calculate maximum change of representative vectors of current iteration - MatrixI diff = repMatrix.subtract(repMatrixOLD).absolute(); - double maxDiff = 0.0; - for (int i = 0; i < diff.height(); i++) - { - for (int j = 0; j < diff.width(); j++) - { - maxDiff = (diff.getValue(i, j) > maxDiff) ? diff.getValue(i, j) : maxDiff; - } + double eigenValue = pair.getKey(); + int column = pair.getValue(); + double[] eigenVector = eigenMatrix.getColumn(column); + // for 2nd and higher eigenvalues + if (l >= 1) + { + eigenValue /= correctionFactor; + } + correctedEigenValues[l] = eigenValue; + for (int j = 0; j < eigenVector.length; j++) + { + _repMatrix[j][l] = (eigenValue < 0) ? 0.0 + : -Math.sqrt(eigenValue) * eigenVector[j]; + double tmpOldScore = scoresOld.getColumn(column)[j]; + _oldMatrix[j][dim - l - 1] = (Double.isNaN(tmpOldScore)) ? 0.0 + : tmpOldScore; + } + l++; + if (l >= dim) + { + break; + } } - // calculate rmsd between current and previous estimation - double rmsdDiff = dotMatrix.rmsd(dotMatrixOLD); + System.out.println("correctedEigenValues"); + MiscMath.print(correctedEigenValues, "%2.4f "); + + repMatrix = new Matrix(_repMatrix); + repMatrix.setD(correctedEigenValues); + MatrixI oldMatrix = new Matrix(_oldMatrix); - System.out.println(String.format("%d, %8.5f, %8.5f, %8.5f", iteration, rmsd, maxDiff, rmsdDiff)); + MatrixI dotMatrix = repMatrix.postMultiply(repMatrix.transpose()); - if (!(Math.abs(maxDiff) > 1e-06)) + double rmsd = scoresOld.rmsd(dotMatrix); + + System.out.println("iteration, rmsd, maxDiff, rmsdDiff"); + System.out.println(String.format("0, %8.5f, -, -", rmsd)); + // Refine representative vectors by minimising sum-of-squared deviates + // between dotMatrix and original score matrix + for (int iteration = 1; iteration < 21; iteration++) // arbitrarily set to + // 20 { - repMatrix = repMatrixOLD.copy(); - break; + MatrixI repMatrixOLD = repMatrix.copy(); + MatrixI dotMatrixOLD = dotMatrix.copy(); + + // for all rows/hA in the original matrix + for (int hAIndex = 0; hAIndex < oldMatrix.height(); hAIndex++) + { + double[] row = oldMatrix.getRow(hAIndex); + double[] hA = repMatrix.getRow(hAIndex); + hAIndex = hAIndex; + // find least-squares-solution fo rdifferences between original scores + // and representative vectors + double[] hAlsm = leastSquaresOptimisation(repMatrix, scoresOld, + hAIndex); + // update repMatrix with new hAlsm + for (int j = 0; j < repMatrix.width(); j++) + { + repMatrix.setValue(hAIndex, j, hAlsm[j]); + } + } + + // dot product of representative vecotrs yields a matrix with values + // approximating the correlation matrix + dotMatrix = repMatrix.postMultiply(repMatrix.transpose()); + // calculate rmsd between approximation and correlation matrix + rmsd = scoresOld.rmsd(dotMatrix); + + // calculate maximum change of representative vectors of current + // iteration + MatrixI diff = repMatrix.subtract(repMatrixOLD).absolute(); + double maxDiff = 0.0; + for (int i = 0; i < diff.height(); i++) + { + for (int j = 0; j < diff.width(); j++) + { + maxDiff = (diff.getValue(i, j) > maxDiff) ? diff.getValue(i, j) + : maxDiff; + } + } + + // calculate rmsd between current and previous estimation + double rmsdDiff = dotMatrix.rmsd(dotMatrixOLD); + + System.out.println(String.format("%d, %8.5f, %8.5f, %8.5f", + iteration, rmsd, maxDiff, rmsdDiff)); + + if (!(Math.abs(maxDiff) > 1e-06)) + { + repMatrix = repMatrixOLD.copy(); + break; + } } - } - } catch (Exception q) { @@ -451,35 +492,48 @@ public class ccAnalysis } /** - * Create equations system using information on originally known - * pairwise correlation coefficients (parsed from infile) and the - * representative result vectors - * - * Each equation has the format: - * hA * hA - pairwiseCC = 0 - * with: - * hA: unknown variable - * hB: known representative vector - * pairwiseCC: known pairwise correlation coefficien - * - * The resulting equations system is overdetermined, if there are more - * equations than unknown elements - * - * @param x ~ unknown n-dimensional column-vector - * (needed for generating equations system, NOT to be specified by user). - * @param hAIndex ~ index of currently optimised representative result vector. - * @param h ~ matrix with row-wise listing of representative result vectors. - * @param originalRow ~ matrix-row of originally parsed pairwise correlation coefficients. - * - * @return - */ - private double[] originalToEquasionSystem(double[] hA, MatrixI repMatrix, MatrixI scoresOld, int hAIndex) + * Create equations system using information on originally known pairwise + * correlation coefficients (parsed from infile) and the representative result + * vectors + * + * Each equation has the format: + * + * hA * hA - pairwiseCC = 0 + * + * with: + * + * hA: unknown variable + * + * hB: known representative vector + * + * pairwiseCC: known pairwise correlation coefficien + * + * The resulting equations system is overdetermined, if there are more + * equations than unknown elements + * + * x is the user input. Remaining parameters are needed for generating + * equations system, NOT to be specified by user). + * + * @param x + * ~ unknown n-dimensional column-vector + * @param hAIndex + * ~ index of currently optimised representative result vector. + * @param h + * ~ matrix with row-wise listing of representative result vectors. + * @param originalRow + * ~ matrix-row of originally parsed pairwise correlation + * coefficients. + * + * @return + */ + private double[] originalToEquasionSystem(double[] hA, MatrixI repMatrix, + MatrixI scoresOld, int hAIndex) { double[] originalRow = scoresOld.getRow(hAIndex); int nans = MiscMath.countNaN(originalRow); double[] result = new double[originalRow.length - nans]; - //for all pairwiseCC in originalRow + // for all pairwiseCC in originalRow int resultIndex = 0; for (int hBIndex = 0; hBIndex < originalRow.length; hBIndex++) { @@ -488,40 +542,48 @@ public class ccAnalysis if (!Double.isNaN(pairwiseCC)) { double[] hB = repMatrix.getRow(hBIndex); - result[resultIndex++] = MiscMath.sum(MiscMath.elementwiseMultiply(hA, hB)) - pairwiseCC; - } else { + result[resultIndex++] = MiscMath + .sum(MiscMath.elementwiseMultiply(hA, hB)) - pairwiseCC; + } + else + { } } return result; } /** - * returns the jacobian matrix - * @param repMatrix ~ matrix of representative vectors - * @param hAIndex ~ current row index - * - * @return - */ - private MatrixI approximateDerivative(MatrixI repMatrix, MatrixI scoresOld, int hAIndex) + * returns the jacobian matrix + * + * @param repMatrix + * ~ matrix of representative vectors + * @param hAIndex + * ~ current row index + * + * @return + */ + private MatrixI approximateDerivative(MatrixI repMatrix, + MatrixI scoresOld, int hAIndex) { - //hA = x0 + // hA = x0 double[] hA = repMatrix.getRow(hAIndex); - double[] f0 = originalToEquasionSystem(hA, repMatrix, scoresOld, hAIndex); + double[] f0 = originalToEquasionSystem(hA, repMatrix, scoresOld, + hAIndex); double[] signX0 = new double[hA.length]; double[] xAbs = new double[hA.length]; for (int i = 0; i < hA.length; i++) { signX0[i] = (hA[i] >= 0) ? 1 : -1; xAbs[i] = (Math.abs(hA[i]) >= 1.0) ? Math.abs(hA[i]) : 1.0; - } + } double rstep = Math.pow(Math.ulp(1.0), 0.5); - double[] h = new double [hA.length]; + double[] h = new double[hA.length]; for (int i = 0; i < hA.length; i++) { h[i] = rstep * signX0[i] * xAbs[i]; } - + int m = f0.length; int n = hA.length; double[][] jTransposed = new double[n][m]; @@ -531,11 +593,12 @@ public class ccAnalysis System.arraycopy(hA, 0, x, 0, h.length); x[i] += h[i]; double dx = x[i] - hA[i]; - double[] df = originalToEquasionSystem(x, repMatrix, scoresOld, hAIndex); + double[] df = originalToEquasionSystem(x, repMatrix, scoresOld, + hAIndex); for (int j = 0; j < df.length; j++) { - df[j] -= f0[j]; - jTransposed[i][j] = df[j] / dx; + df[j] -= f0[j]; + jTransposed[i][j] = df[j] / dx; } } MatrixI J = new Matrix(jTransposed).transpose(); @@ -543,31 +606,40 @@ public class ccAnalysis } /** - * norm of regularized (by alpha) least-squares solution minus Delta - * @param alpha - * @param suf - * @param s - * @param Delta - * - * @return - */ - private double[] phiAndDerivative(double alpha, double[] suf, double[] s, double Delta) + * norm of regularized (by alpha) least-squares solution minus Delta + * + * @param alpha + * @param suf + * @param s + * @param Delta + * + * @return + */ + private double[] phiAndDerivative(double alpha, double[] suf, double[] s, + double Delta) { - double[] denom = MiscMath.elementwiseAdd(MiscMath.elementwiseMultiply(s, s), alpha); + double[] denom = MiscMath + .elementwiseAdd(MiscMath.elementwiseMultiply(s, s), alpha); double pNorm = MiscMath.norm(MiscMath.elementwiseDivide(suf, denom)); double phi = pNorm - Delta; // - sum ( suf**2 / denom**3) / pNorm - double phiPrime = - MiscMath.sum(MiscMath.elementwiseDivide(MiscMath.elementwiseMultiply(suf, suf), MiscMath.elementwiseMultiply(MiscMath.elementwiseMultiply(denom, denom), denom))) / pNorm; - return new double[]{phi, phiPrime}; + double phiPrime = -MiscMath.sum(MiscMath.elementwiseDivide( + MiscMath.elementwiseMultiply(suf, suf), + MiscMath.elementwiseMultiply( + MiscMath.elementwiseMultiply(denom, denom), denom))) + / pNorm; + return new double[] { phi, phiPrime }; } /** - * class holding the result of solveLsqTrustRegion - */ + * class holding the result of solveLsqTrustRegion + */ private class TrustRegion { private double[] step; + private double alpha; + private int iteration; public TrustRegion(double[] step, double alpha, int iteration) @@ -586,7 +658,7 @@ public class ccAnalysis { return this.alpha; } - + public int getIteration() { return this.iteration; @@ -594,22 +666,30 @@ public class ccAnalysis } /** - * solve a trust-region problem arising in least-squares optimisation - * @param n ~ number of variables - * @param m ~ number of residuals - * @param uf - * @param s ~ singular values of J - * @param V ~ transpose of VT - * @param Delta ~ radius of a trust region - * @param alpha ~ initial guess for alpha - * - * @return - */ - private TrustRegion solveLsqTrustRegion(int n, int m, double[] uf, double[] s, MatrixI V, double Delta, double alpha) + * solve a trust-region problem arising in least-squares optimisation + * + * @param n + * ~ number of variables + * @param m + * ~ number of residuals + * @param uf + * @param s + * ~ singular values of J + * @param V + * ~ transpose of VT + * @param Delta + * ~ radius of a trust region + * @param alpha + * ~ initial guess for alpha + * + * @return + */ + private TrustRegion solveLsqTrustRegion(int n, int m, double[] uf, + double[] s, MatrixI V, double Delta, double alpha) { double[] suf = MiscMath.elementwiseMultiply(s, uf); - //check if J has full rank and tr Gauss-Newton step + // check if J has full rank and tr Gauss-Newton step boolean fullRank = false; if (m >= n) { @@ -618,7 +698,8 @@ public class ccAnalysis } if (fullRank) { - double[] p = MiscMath.elementwiseMultiply(V.sumProduct(MiscMath.elementwiseDivide(uf, s)), -1); + double[] p = MiscMath.elementwiseMultiply( + V.sumProduct(MiscMath.elementwiseDivide(uf, s)), -1); if (MiscMath.norm(p) <= Delta) { TrustRegion result = new TrustRegion(p, 0.0, 0); @@ -631,15 +712,21 @@ public class ccAnalysis if (fullRank) { double[] phiAndPrime = phiAndDerivative(0.0, suf, s, Delta); - alphaLower = - phiAndPrime[0] / phiAndPrime[1]; + alphaLower = -phiAndPrime[0] / phiAndPrime[1]; } - alpha = (!fullRank && alpha == 0.0) ? alpha = Math.max(0.001 * alphaUpper, Math.pow(alphaLower * alphaUpper, 0.5)) : alpha; + alpha = (!fullRank && alpha == 0.0) + ? alpha = Math.max(0.001 * alphaUpper, + Math.pow(alphaLower * alphaUpper, 0.5)) + : alpha; int iteration = 0; - while (iteration < 10) // 10 is default max_iter + while (iteration < 10) // 10 is default max_iter { - alpha = (alpha < alphaLower || alpha > alphaUpper) ? alpha = Math.max(0.001 * alphaUpper, Math.pow(alphaLower * alphaUpper, 0.5)) : alpha; + alpha = (alpha < alphaLower || alpha > alphaUpper) + ? alpha = Math.max(0.001 * alphaUpper, + Math.pow(alphaLower * alphaUpper, 0.5)) + : alpha; double[] phiAndPrime = phiAndDerivative(alpha, suf, s, Delta); double phi = phiAndPrime[0]; double phiPrime = phiAndPrime[1]; @@ -649,18 +736,20 @@ public class ccAnalysis alphaLower = Math.max(alphaLower, alpha - ratio); alpha -= (phi + Delta) * ratio / Delta; - if (Math.abs(phi) < 0.01 * Delta) // default rtol set to 0.01 + if (Math.abs(phi) < 0.01 * Delta) // default rtol set to 0.01 { - break; + break; } iteration++; } // p = - V.dot( suf / (s**2 + alpha)) - double[] tmp = MiscMath.elementwiseDivide(suf, MiscMath.elementwiseAdd(MiscMath.elementwiseMultiply(s, s), alpha)); + double[] tmp = MiscMath.elementwiseDivide(suf, MiscMath + .elementwiseAdd(MiscMath.elementwiseMultiply(s, s), alpha)); double[] p = MiscMath.elementwiseMultiply(V.sumProduct(tmp), -1); - // Make the norm of p equal to Delta, p is changed only slightly during this. + // Make the norm of p equal to Delta, p is changed only slightly during + // this. // It is done to prevent p lie outside of the trust region p = MiscMath.elementwiseMultiply(p, Delta / MiscMath.norm(p)); @@ -669,15 +758,18 @@ public class ccAnalysis } /** - * compute values of a quadratic function arising in least squares - * function: 0.5 * s.T * (J.T * J + diag) * s + g.T * s - * - * @param J ~ jacobian matrix - * @param g ~ gradient - * @param s ~ steps and rows - * - * @return - */ + * compute values of a quadratic function arising in least squares function: + * 0.5 * s.T * (J.T * J + diag) * s + g.T * s + * + * @param J + * ~ jacobian matrix + * @param g + * ~ gradient + * @param s + * ~ steps and rows + * + * @return + */ private double evaluateQuadratic(MatrixI J, double[] g, double[] s) { @@ -689,50 +781,64 @@ public class ccAnalysis } /** - * update the radius of a trust region based on the cost reduction - * - * @param Delta - * @param actualReduction - * @param predictedReduction - * @param stepNorm - * @param boundHit - * - * @return - */ - private double[] updateTrustRegionRadius(double Delta, double actualReduction, double predictedReduction, double stepNorm, boolean boundHit) + * update the radius of a trust region based on the cost reduction + * + * @param Delta + * @param actualReduction + * @param predictedReduction + * @param stepNorm + * @param boundHit + * + * @return + */ + private double[] updateTrustRegionRadius(double Delta, + double actualReduction, double predictedReduction, + double stepNorm, boolean boundHit) { double ratio = 0; if (predictedReduction > 0) { ratio = actualReduction / predictedReduction; - } else if (predictedReduction == 0 && actualReduction == 0) { + } + else if (predictedReduction == 0 && actualReduction == 0) + { ratio = 1; - } else { + } + else + { ratio = 0; } if (ratio < 0.25) { Delta = 0.25 * stepNorm; - } else if (ratio > 0.75 && boundHit) { + } + else if (ratio > 0.75 && boundHit) + { Delta *= 2.0; } - return new double[]{Delta, ratio}; + return new double[] { Delta, ratio }; } /** - * trust region reflective algorithm - * @param repMatrix ~ Matrix containing representative vectors - * @param scoresOld ~ Matrix containing initial observations - * @param index ~ current row index - * @param J ~ jacobian matrix - * - * @return - */ - private double[] trf(MatrixI repMatrix, MatrixI scoresOld, int index, MatrixI J) + * trust region reflective algorithm + * + * @param repMatrix + * ~ Matrix containing representative vectors + * @param scoresOld + * ~ Matrix containing initial observations + * @param index + * ~ current row index + * @param J + * ~ jacobian matrix + * + * @return + */ + private double[] trf(MatrixI repMatrix, MatrixI scoresOld, int index, + MatrixI J) { - //hA = x0 + // hA = x0 double[] hA = repMatrix.getRow(index); double[] f0 = originalToEquasionSystem(hA, repMatrix, scoresOld, index); int nfev = 1; @@ -742,7 +848,7 @@ public class ccAnalysis double[] g = J.transpose().sumProduct(f0); double Delta = MiscMath.norm(hA); int maxNfev = hA.length * 100; - double alpha = 0.0; // "Levenberg-Marquardt" parameter + double alpha = 0.0; // "Levenberg-Marquardt" parameter double gNorm = 0; boolean terminationStatus = false; @@ -753,11 +859,12 @@ public class ccAnalysis gNorm = MiscMath.norm(g); if (terminationStatus || nfev == maxNfev) { - break; + break; } - SingularValueDecomposition svd = new SingularValueDecomposition(new Array2DRowRealMatrix(J.asArray())); + SingularValueDecomposition svd = new SingularValueDecomposition( + new Array2DRowRealMatrix(J.asArray())); MatrixI U = new Matrix(svd.getU().getData()); - double[] s = svd.getSingularValues(); + double[] s = svd.getSingularValues(); MatrixI V = new Matrix(svd.getV().getData()).transpose(); double[] uf = U.transpose().sumProduct(f0); @@ -766,60 +873,67 @@ public class ccAnalysis double[] fNew = new double[f0.length]; double costNew = 0; double stepHnorm = 0; - + while (actualReduction <= 0 && nfev < maxNfev) { - TrustRegion trustRegion = solveLsqTrustRegion(n, m, uf, s, V, Delta, alpha); - double[] stepH = trustRegion.getStep(); - alpha = trustRegion.getAlpha(); - int nIterations = trustRegion.getIteration(); - double predictedReduction = - (evaluateQuadratic(J, g, stepH)); + TrustRegion trustRegion = solveLsqTrustRegion(n, m, uf, s, V, Delta, + alpha); + double[] stepH = trustRegion.getStep(); + alpha = trustRegion.getAlpha(); + int nIterations = trustRegion.getIteration(); + double predictedReduction = -(evaluateQuadratic(J, g, stepH)); xNew = MiscMath.elementwiseAdd(hA, stepH); - fNew = originalToEquasionSystem(xNew, repMatrix, scoresOld, index); - nfev++; - - stepHnorm = MiscMath.norm(stepH); + fNew = originalToEquasionSystem(xNew, repMatrix, scoresOld, index); + nfev++; - if (MiscMath.countNaN(fNew) > 0) - { - Delta = 0.25 * stepHnorm; - continue; - } + stepHnorm = MiscMath.norm(stepH); - // usual trust-region step quality estimation - costNew = 0.5 * MiscMath.dot(fNew, fNew); - actualReduction = cost - costNew; + if (MiscMath.countNaN(fNew) > 0) + { + Delta = 0.25 * stepHnorm; + continue; + } - double[] updatedTrustRegion = updateTrustRegionRadius(Delta, actualReduction, predictedReduction, stepHnorm, stepHnorm > (0.95 * Delta)); - double DeltaNew = updatedTrustRegion[0]; - double ratio = updatedTrustRegion[1]; + // usual trust-region step quality estimation + costNew = 0.5 * MiscMath.dot(fNew, fNew); + actualReduction = cost - costNew; - // default ftol and xtol = 1e-8 - boolean ftolSatisfied = actualReduction < (1e-8 * cost) && ratio > 0.25; - boolean xtolSatisfied = stepHnorm < (1e-8 * (1e-8 + MiscMath.norm(hA))); - terminationStatus = ftolSatisfied || xtolSatisfied; - if (terminationStatus) - { - break; - } + double[] updatedTrustRegion = updateTrustRegionRadius(Delta, + actualReduction, predictedReduction, stepHnorm, + stepHnorm > (0.95 * Delta)); + double DeltaNew = updatedTrustRegion[0]; + double ratio = updatedTrustRegion[1]; - alpha *= Delta / DeltaNew; - Delta = DeltaNew; + // default ftol and xtol = 1e-8 + boolean ftolSatisfied = actualReduction < (1e-8 * cost) + && ratio > 0.25; + boolean xtolSatisfied = stepHnorm < (1e-8 + * (1e-8 + MiscMath.norm(hA))); + terminationStatus = ftolSatisfied || xtolSatisfied; + if (terminationStatus) + { + break; + } + + alpha *= Delta / DeltaNew; + Delta = DeltaNew; } if (actualReduction > 0) { - hA = xNew; - f0 = fNew; - cost = costNew; + hA = xNew; + f0 = fNew; + cost = costNew; - J = approximateDerivative(repMatrix, scoresOld, index); + J = approximateDerivative(repMatrix, scoresOld, index); g = J.transpose().sumProduct(f0); - } else { + } + else + { stepHnorm = 0; - actualReduction = 0; + actualReduction = 0; } iteration++; } @@ -828,16 +942,20 @@ public class ccAnalysis } /** - * performs the least squares optimisation - * adapted from https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares - * - * @param repMatrix ~ Matrix containing representative vectors - * @param scoresOld ~ Matrix containing initial observations - * @param index ~ current row index - * - * @return - */ - private double[] leastSquaresOptimisation(MatrixI repMatrix, MatrixI scoresOld, int index) + * performs the least squares optimisation adapted from + * https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares + * + * @param repMatrix + * ~ Matrix containing representative vectors + * @param scoresOld + * ~ Matrix containing initial observations + * @param index + * ~ current row index + * + * @return + */ + private double[] leastSquaresOptimisation(MatrixI repMatrix, + MatrixI scoresOld, int index) { MatrixI J = approximateDerivative(repMatrix, scoresOld, index); double[] result = trf(repMatrix, scoresOld, index, J); diff --git a/src/jalview/analysis/scoremodels/DistanceScoreModel.java b/src/jalview/analysis/scoremodels/DistanceScoreModel.java index 55510bd..1bdaad6 100644 --- a/src/jalview/analysis/scoremodels/DistanceScoreModel.java +++ b/src/jalview/analysis/scoremodels/DistanceScoreModel.java @@ -57,5 +57,5 @@ public abstract class DistanceScoreModel implements ScoreModelI return similarities; } - + } diff --git a/src/jalview/analysis/scoremodels/FeatureDistanceModel.java b/src/jalview/analysis/scoremodels/FeatureDistanceModel.java index df45a72..bcc0855 100644 --- a/src/jalview/analysis/scoremodels/FeatureDistanceModel.java +++ b/src/jalview/analysis/scoremodels/FeatureDistanceModel.java @@ -235,7 +235,7 @@ public class FeatureDistanceModel extends DistanceScoreModel public boolean isProtein() { return true; - } + } @Override public String toString() diff --git a/src/jalview/analysis/scoremodels/ScoreModels.java b/src/jalview/analysis/scoremodels/ScoreModels.java index f591c8e..490ec00 100644 --- a/src/jalview/analysis/scoremodels/ScoreModels.java +++ b/src/jalview/analysis/scoremodels/ScoreModels.java @@ -40,7 +40,7 @@ public class ScoreModels private final ScoreMatrix PAM250; private final ScoreMatrix DNA; - + private final ScoreMatrix SECONDARYSTRUCTURE; private static ScoreModels instance; @@ -70,7 +70,7 @@ public class ScoreModels *
  • PAM250
  • *
  • PID
  • *
  • DNA
  • - *
  • Sequence Feature Similarity
  • * + *
  • Sequence Feature Similarity
  • * *
  • Secondary Structure Similarity
  • * */ @@ -85,8 +85,9 @@ public class ScoreModels DNA = loadScoreMatrix("scoreModel/dna.scm"); registerScoreModel(new PIDModel()); registerScoreModel(new FeatureDistanceModel()); - SECONDARYSTRUCTURE = loadScoreMatrix("scoreModel/secondarystructure.scm"); - registerScoreModel(new SecondaryStructureDistanceModel()); + SECONDARYSTRUCTURE = loadScoreMatrix( + "scoreModel/secondarystructure.scm"); + registerScoreModel(new SecondaryStructureDistanceModel()); } @@ -146,7 +147,8 @@ public class ScoreModels public void registerScoreModel(ScoreModelI sm) { - if(sm.getName().equals("SECONDARYSTRUCTURE")) { + if (sm.getName().equals("SECONDARYSTRUCTURE")) + { return; } ScoreModelI sm2 = models.get(sm.getName()); @@ -187,7 +189,7 @@ public class ScoreModels { return PAM250; } - + public ScoreMatrix getSecondaryStructureMatrix() { return SECONDARYSTRUCTURE; diff --git a/src/jalview/analysis/scoremodels/SecondaryStructureDistanceModel.java b/src/jalview/analysis/scoremodels/SecondaryStructureDistanceModel.java index d7859f1..36d55de 100644 --- a/src/jalview/analysis/scoremodels/SecondaryStructureDistanceModel.java +++ b/src/jalview/analysis/scoremodels/SecondaryStructureDistanceModel.java @@ -47,20 +47,19 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel private static final String NAME = "Secondary Structure Similarity"; private ScoreMatrix ssRateMatrix; - - private String description; - + + private String description; + FeatureRenderer fr; - - + /** * Constructor */ public SecondaryStructureDistanceModel() { - + } - + @Override public ScoreModelI getInstance(AlignmentViewPanel view) { @@ -87,27 +86,31 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel fr = view.cloneFeatureRenderer(); return true; } - + /** - * Calculates distance score [i][j] between each pair of protein sequences - * based on their secondary structure annotations (H, E, C). - * The final score is normalised by the number of - * alignment columns processed, providing an average similarity score. + * Calculates distance score [i][j] between each pair of protein sequences + * based on their secondary structure annotations (H, E, C). The final score + * is normalised by the number of alignment columns processed, providing an + * average similarity score. *

    - * The parameters argument can include settings for handling gap-residue aligned - * positions and may determine if the score calculation is based on the longer or shorter - * sequence in each pair. This can be important for handling partial alignments or - * sequences of significantly different lengths. + * The parameters argument can include settings for handling gap-residue + * aligned positions and may determine if the score calculation is based on + * the longer or shorter sequence in each pair. This can be important for + * handling partial alignments or sequences of significantly different + * lengths. * - * @param seqData The aligned sequence data including secondary structure annotations. - * @param params Additional parameters for customising the scoring process, such as gap - * handling and sequence length consideration. + * @param seqData + * The aligned sequence data including secondary structure + * annotations. + * @param params + * Additional parameters for customising the scoring process, such as + * gap handling and sequence length consideration. */ @Override public MatrixI findDistances(AlignmentView seqData, SimilarityParamsI params) - { - + { + SeqCigar[] seqs = seqData.getSequences(); int noseqs = seqs.length; //no of sequences int cpwidth = 0; @@ -125,7 +128,6 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel AlignmentAnnotation[] alignAnnotList = fr.getViewport().getAlignment() .getAlignmentAnnotation(); - /* * Add secondary structure annotations that are added to the annotation track @@ -134,6 +136,7 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel Map> ssAlignmentAnnotationForSequences = AlignmentUtils.getSequenceAssociatedAlignmentAnnotations(alignAnnotList, ssSource); + /* * scan each column, compute and add to each similarity[i, j] * the number of secondary structure annotation that seqi @@ -141,15 +144,16 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel */ for (int vc = 0; vc < viscont.length; vc += 2) { - //Iterates for each column position - for (int cpos = viscont[vc]; cpos <= viscont[vc + 1]; cpos++) + // Iterates for each column position + for (int cpos = viscont[vc]; cpos <= viscont[vc + 1]; cpos++) { - cpwidth++; //used to normalise the similarity score + cpwidth++; // used to normalise the similarity score /* * get set of sequences without gap in the current column */ - Set seqsWithoutGapAtCol = findSeqsWithoutGapAtColumn(seqs, cpos); + Set seqsWithoutGapAtCol = findSeqsWithoutGapAtColumn(seqs, + cpos); /* * calculate similarity score for each secondary structure annotation on i'th and j'th @@ -158,7 +162,7 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel */ for (int i = 0; i < (noseqs - 1); i++) { - //Iterates for each sequences + // Iterates for each sequences for (int j = i + 1; j < noseqs; j++) { @@ -167,15 +171,10 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel boolean undefinedSS2 = ssAlignmentAnnotationForSequences.get(seqs[j].getRefSeq()) == null; // Set similarity to max score if both SS are not defined - if (undefinedSS1 && undefinedSS2) { - similarities[i][j] += ssRateMatrix.getMaximumScore(); - continue; - } - - // Set similarity to minimum score if either one SS is not defined - else if(undefinedSS1 || undefinedSS2) { - similarities[i][j] += ssRateMatrix.getMinimumScore(); - continue; + if (undefinedSS1 && undefinedSS2) + { + similarities[i][j] += ssRateMatrix.getMaximumScore(); + continue; } //check if the sequence contains gap in the current column @@ -183,23 +182,27 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel boolean gap2 = !seqsWithoutGapAtCol.contains(seqs[j]); //Variable to store secondary structure at the current column + char ss1 = '*'; char ss2 = '*'; - - //secondary structure is fetched only if the current column is not - //gap for the sequence - if(!gap1 && !undefinedSS1) { - //fetch the position in sequence for the column and finds the - //corresponding secondary structure annotation - //TO DO - consider based on priority and displayed + + // secondary structure is fetched only if the current column is not + // gap for the sequence + if (!gap1 && !undefinedSS1) + { + // fetch the position in sequence for the column and finds the + // corresponding secondary structure annotation + // TO DO - consider based on priority and displayed int seqPosition = seqs[i].findPosition(cpos); AlignmentAnnotation aa = ssAlignmentAnnotationForSequences.get(seqs[i].getRefSeq()).get(0); if(aa!=null) ss1 = AlignmentUtils.findSSAnnotationForGivenSeqposition(aa, seqPosition); + } - - if(!gap2 && !undefinedSS2) { + + if (!gap2 && !undefinedSS2) + { int seqPosition = seqs[j].findPosition(cpos); AlignmentAnnotation aa = ssAlignmentAnnotationForSequences.get(seqs[j].getRefSeq()).get(0); if(aa!=null) @@ -207,10 +210,12 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel AlignmentUtils.findSSAnnotationForGivenSeqposition(aa, seqPosition); } + if ((!gap1 && !gap2) || params.includeGaps()) { // Calculate similarity score based on the substitution matrix - double similarityScore = ssRateMatrix.getPairwiseScore(ss1, ss2); + double similarityScore = ssRateMatrix.getPairwiseScore(ss1, + ss2); similarities[i][j] += similarityScore; } } @@ -224,30 +229,30 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel * and fill in the bottom half of the matrix */ // TODO JAL-2424 cpwidth may be out by 1 - affects scores but not tree shape - + for (int i = 0; i < noseqs; i++) { for (int j = i + 1; j < noseqs; j++) - { + { similarities[i][j] /= cpwidth; similarities[j][i] = similarities[i][j]; } } return ssRateMatrix.similarityToDistance(new Matrix(similarities)); - + } /** - * Builds and returns a set containing sequences (SeqCigar) which do not - * have a gap at the given column position. + * Builds and returns a set containing sequences (SeqCigar) which do not have + * a gap at the given column position. * * @param seqs * @param columnPosition * (0..) * @return */ - private Set findSeqsWithoutGapAtColumn( - SeqCigar[] seqs, int columnPosition) + private Set findSeqsWithoutGapAtColumn(SeqCigar[] seqs, + int columnPosition) { Set seqsWithoutGapAtCol = new HashSet<>(); for (SeqCigar seq : seqs) @@ -257,14 +262,13 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel { /* * position is not a gap - */ + */ seqsWithoutGapAtCol.add(seq); } } return seqsWithoutGapAtCol; } - @Override public String getName() { @@ -280,7 +284,7 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel @Override public boolean isDNA() { - return false; + return false; } @Override @@ -288,7 +292,7 @@ public class SecondaryStructureDistanceModel extends DistanceScoreModel { return false; } - + @Override public boolean isSecondaryStructure() { diff --git a/src/jalview/analysis/scoremodels/SimilarityParams.java b/src/jalview/analysis/scoremodels/SimilarityParams.java index 2a25fa8..40a4636 100644 --- a/src/jalview/analysis/scoremodels/SimilarityParams.java +++ b/src/jalview/analysis/scoremodels/SimilarityParams.java @@ -103,7 +103,7 @@ public class SimilarityParams implements SimilarityParamsI private boolean includeGaps; private boolean denominateByShortestLength; - + private String secondaryStructureSource; /** diff --git a/src/jalview/api/AlignViewControllerI.java b/src/jalview/api/AlignViewControllerI.java index 25e4873..098024c 100644 --- a/src/jalview/api/AlignViewControllerI.java +++ b/src/jalview/api/AlignViewControllerI.java @@ -121,7 +121,9 @@ public interface AlignViewControllerI /** * Justify alignment or currently selected region left or right - * @param left - true - means justify left + * + * @param left + * - true - means justify left * @return */ boolean justify_Region(boolean left); diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 2cdb251..64e06ee 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -132,7 +132,6 @@ public interface AlignViewportI extends ViewStyleI List getAlignmentSecondaryStructureConsensusAnnotation(); - /** * get the container for alignment gap annotation * @@ -180,7 +179,6 @@ public interface AlignViewportI extends ViewStyleI void setSequenceConsensusHash(ProfilesI hconsensus); void setSequenceSSConsensusHash(Map hSSConsesnusProfileMap); - /** * Set the cDNA complement consensus for the viewport @@ -571,6 +569,7 @@ public interface AlignViewportI extends ViewStyleI * @return */ Iterator getViewAsVisibleContigs(boolean selectedRegionOnly); + /** * notify all concerned that the alignment data has changed and derived data * needs to be recalculated @@ -578,7 +577,8 @@ public interface AlignViewportI extends ViewStyleI public void notifyAlignmentChanged(); /** - * retrieve a matrix associated with the view's alignment's annotation + * retrieve a matrix associated with the view's alignment's annotation + * * @param alignmentAnnotation * @return contact matrix or NULL */ diff --git a/src/jalview/api/analysis/ScoreModelI.java b/src/jalview/api/analysis/ScoreModelI.java index a243c0c..ce415c2 100644 --- a/src/jalview/api/analysis/ScoreModelI.java +++ b/src/jalview/api/analysis/ScoreModelI.java @@ -62,21 +62,18 @@ public interface ScoreModelI // TODO getName, isDNA, isProtein can be static methods in Java 8 - default public boolean isSecondaryStructure() { return false; } /** - * Answers false by default - * Answers true if the data has secondary structure (so should be - * shown in menus in that context) + * Answers false by default Answers true if the data has secondary structure + * (so should be shown in menus in that context) * * @return */ - - + /** * Returns a distance score for the given sequence regions, that is, a matrix * whose value [i][j] is the distance of sequence i from sequence j by some diff --git a/src/jalview/api/analysis/SimilarityParamsI.java b/src/jalview/api/analysis/SimilarityParamsI.java index 43f2866..2558515 100644 --- a/src/jalview/api/analysis/SimilarityParamsI.java +++ b/src/jalview/api/analysis/SimilarityParamsI.java @@ -60,7 +60,7 @@ public interface SimilarityParamsI * @return */ boolean denominateByShortestLength(); - + String getSecondaryStructureSource(); void setSecondaryStructureSource(String secondaryStructureSource); diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 55a5364..b77ee85 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -3432,8 +3432,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, Menu autoAnnMenu = new Menu( MessageManager.getString("label.autocalculated_annotation")); - Menu selectSS = new Menu( - MessageManager.getString("label.select_secondary_structure_source")); + Menu selectSS = new Menu(MessageManager + .getString("label.select_secondary_structure_source")); showGroupConsensus.addItemListener(this); showGroupConservation.addItemListener(this); showConsensusHistogram.addItemListener(this); diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index a45fc42..6a82e7d 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -68,6 +68,7 @@ import jalview.urls.IdOrgSettings; import jalview.util.ChannelProperties; import jalview.util.ColorUtils; import jalview.util.HttpUtils; +import jalview.util.LaunchUtils; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.ws.sifts.SiftsSettings; @@ -1273,6 +1274,14 @@ public class Cache sb.append(" ("); sb.append(lafClass); sb.append(")\n"); + // pid() only available in Java 9+ + if (LaunchUtils.getJavaVersion() > 8) + { + sb.append("Java Virtual Machine PID: "); + sb.append(ProcessHandle.current().pid()); + sb.append("\n"); + } + } appendIfNotNull(sb, "Installer version: ", System.getProperty("sys.install4jVersion"), "\n", null); @@ -1309,6 +1318,8 @@ public class Cache System.getProperty("launcher.distdir"), "\n", null); appendIfNotNull(sb, "Launcher appbase: ", System.getProperty("launcher.appbase"), "\n", null); + appendIfNotNull(sb, "Launcher script: ", + System.getProperty("launcher.script"), "\n", null); } return sb.toString(); } @@ -1489,11 +1500,10 @@ public class Cache if (customProxySet && // we have a username but no password for the scheme being // requested - (protocol.equalsIgnoreCase("http") - && (httpUser != null - && httpUser.length() > 0 - && (httpPassword == null - || httpPassword.length == 0))) + (protocol.equalsIgnoreCase("http") + && (httpUser != null && httpUser.length() > 0 + && (httpPassword == null + || httpPassword.length == 0))) || (protocol.equalsIgnoreCase("https") && (httpsUser != null && httpsUser.length() > 0 diff --git a/src/jalview/bin/GetdownLauncherUpdate.java b/src/jalview/bin/GetdownLauncherUpdate.java new file mode 100644 index 0000000..ec1f322 --- /dev/null +++ b/src/jalview/bin/GetdownLauncherUpdate.java @@ -0,0 +1,75 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.bin; + +import java.io.File; + +import com.threerings.getdown.data.EnvConfig; +import com.threerings.getdown.util.LaunchUtil; + +public class GetdownLauncherUpdate +{ + public static void main(String[] args) + { + EnvConfig.setVarsFromProperties(); + + String appdir = args.length > 0 ? args[0] : null; + if (appdir == null || appdir.length() == 0) + { + appdir = System.getProperty("launcher.appdir", null); + } + if (appdir == null) + { + appdir = EnvConfig.getUserAppdir(); + } + if (appdir == null) + { + System.err.println("Not running upgradeGetdown"); + return; + } + boolean debug = false; + for (int i = 0; i < args.length; i++) + { + if ("--debug".equals(args[i])) + { + debug = true; + break; + } + } + if (debug) + { + System.err.println("Running upgradeGetdown"); + } + File appdirFile = new File(appdir); + if (!appdirFile.exists()) + { + System.err.println("Directory '" + appdirFile.getAbsolutePath() + + "' doesn't exist, cannot update getdown-launcher.jar."); + if (Boolean.valueOf(System.getProperty("launcher.update"))) + { + System.exit(1); + } + } + LaunchUtil.upgradeGetdown(new File(appdir, "getdown-launcher-old.jar"), + new File(appdir, "getdown-launcher.jar"), + new File(appdir, "getdown-launcher-new.jar")); + } +} diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index 0e3b30a..8bddae3 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -64,7 +64,6 @@ import javax.swing.UnsupportedLookAndFeelException; import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.themes.FlatMacLightLaf; import com.formdev.flatlaf.util.SystemInfo; -import com.threerings.getdown.util.LaunchUtil; //import edu.stanford.ejalbert.launching.IBrowserLaunching; import groovy.lang.Binding; @@ -383,17 +382,13 @@ public class Jalview implements JalviewObjectI String appdirString = System.getProperty("launcher.appdir"); if (appdirString != null && appdirString.length() > 0) { - final File appdir = new File(appdirString); new Thread() { @Override public void run() { - LaunchUtil.upgradeGetdown( - new File(appdir, "getdown-launcher-old.jar"), - new File(appdir, "getdown-launcher.jar"), - new File(appdir, "getdown-launcher-new.jar")); + GetdownLauncherUpdate.main(new String[] { appdirString }); } }.start(); } diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index 7e1296e..2e2dd49 100644 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -2251,8 +2251,8 @@ public class JalviewLite extends Applet PDBEntry[] pdb = new PDBEntry[pdbs.size()]; String[][] chains = new String[pdbs.size()][]; String[] protocols = new String[pdbs.size()]; - for (int pdbsi = 0, - pdbsiSize = pdbs.size(); pdbsi < pdbsiSize; pdbsi++) + for (int pdbsi = 0, pdbsiSize = pdbs + .size(); pdbsi < pdbsiSize; pdbsi++) { Object[] o = (Object[]) pdbs.elementAt(pdbsi); pdb[pdbsi] = (PDBEntry) o[0]; diff --git a/src/jalview/bin/Launcher.java b/src/jalview/bin/Launcher.java index ec53219..579b682 100644 --- a/src/jalview/bin/Launcher.java +++ b/src/jalview/bin/Launcher.java @@ -210,6 +210,8 @@ public class Launcher headless = assumeheadless; } + ErrorLog.setQuiet(quiet); + final String appName = ChannelProperties.getProperty("app_name"); // if we're using jalview.bin.Launcher we always assume a console is in use @@ -327,8 +329,8 @@ public class Launcher String scalePropertyArg = HiDPISetting.getScalePropertyArg(); if (scalePropertyArg != null) { - LaunchUtils.syserr(debug, quiet, "Running " + startClass - + " with scale setting " + scalePropertyArg); + ErrorLog.errPrintln("Running " + startClass + " with scale setting " + + scalePropertyArg); addJvmArgs.add(scalePropertyArg); } @@ -336,7 +338,7 @@ public class Launcher addJvmArgs, null, null, null, startClass, null, null, arguments, launcherprint, launcherwait, launcherstop, debug, quiet); - LaunchUtils.syserr(debug, quiet, "JVM exited with value " + exitValue); + ErrorLog.errPrintln("JVM exited with value " + exitValue); } } diff --git a/src/jalview/commands/JustifyLeftOrRightCommand.java b/src/jalview/commands/JustifyLeftOrRightCommand.java index 2559662..c1eb655 100644 --- a/src/jalview/commands/JustifyLeftOrRightCommand.java +++ b/src/jalview/commands/JustifyLeftOrRightCommand.java @@ -58,8 +58,8 @@ public class JustifyLeftOrRightCommand extends EditCommand { continue; } - char[] range = seq.getSequence(from, to+1); - if (range==null || range.length==0) + char[] range = seq.getSequence(from, to + 1); + if (range == null || range.length == 0) { continue; } @@ -78,7 +78,7 @@ public class JustifyLeftOrRightCommand extends EditCommand alseq[gapstart + gp] = gc; } - for (int sqp = 0,insp=0; sqp. + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; import java.util.Collection; diff --git a/src/jalview/datamodel/ContactMapHolderI.java b/src/jalview/datamodel/ContactMapHolderI.java index 342abf8..ffd49ea 100644 --- a/src/jalview/datamodel/ContactMapHolderI.java +++ b/src/jalview/datamodel/ContactMapHolderI.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; import java.util.Collection; diff --git a/src/jalview/datamodel/GroupSetHolder.java b/src/jalview/datamodel/GroupSetHolder.java index faeb7c0..bf047d6 100644 --- a/src/jalview/datamodel/GroupSetHolder.java +++ b/src/jalview/datamodel/GroupSetHolder.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; /** diff --git a/src/jalview/datamodel/PDBEntry.java b/src/jalview/datamodel/PDBEntry.java index c3906f9..b6b13c9 100755 --- a/src/jalview/datamodel/PDBEntry.java +++ b/src/jalview/datamodel/PDBEntry.java @@ -649,9 +649,9 @@ public class PDBEntry public void setProviderCategory(String providerCategory) { - setProperty(PROVIDERCATEGORY, providerCategory); + setProperty(PROVIDERCATEGORY, providerCategory); } - + public String getProviderCategory() { return (String) getProperty(PROVIDERCATEGORY); @@ -661,5 +661,5 @@ public class PDBEntry { return _hasProperty(PROVIDERCATEGORY); } - + } diff --git a/src/jalview/datamodel/Profile.java b/src/jalview/datamodel/Profile.java index bc87204..ae538f9 100644 --- a/src/jalview/datamodel/Profile.java +++ b/src/jalview/datamodel/Profile.java @@ -32,7 +32,7 @@ public class Profile implements ProfileI * an object holding counts of symbols in the profile */ private ResidueCount counts; - + private SecondaryStructureCount ssCounts; private int seqWithSSCount = -1; @@ -51,15 +51,15 @@ public class Profile implements ProfileI * the highest count for any residue in the profile */ private int maxCount; + private int maxSSCount; - /* * the residue (e.g. K) or residues (e.g. KQW) with the * highest count in the profile */ private String modalResidue; - + private String modalSS; /** @@ -100,7 +100,7 @@ public class Profile implements ProfileI { this.counts = residueCounts; } - + @Override public void setSSCounts(SecondaryStructureCount secondaryStructureCount) { @@ -128,7 +128,7 @@ public class Profile implements ProfileI } return pid; } - + @Override public float getSSPercentageIdentity(boolean ignoreGaps) { @@ -156,7 +156,7 @@ public class Profile implements ProfileI { return counts; } - + @Override public SecondaryStructureCount getSSCounts() { @@ -189,7 +189,7 @@ public class Profile implements ProfileI { return maxCount; } - + @Override public int getMaxSSCount() { @@ -204,7 +204,7 @@ public class Profile implements ProfileI { return modalResidue; } - + @Override public String getModalSS() { diff --git a/src/jalview/datamodel/ProfileI.java b/src/jalview/datamodel/ProfileI.java index 9046f23..084cfde 100644 --- a/src/jalview/datamodel/ProfileI.java +++ b/src/jalview/datamodel/ProfileI.java @@ -29,8 +29,9 @@ public interface ProfileI * @param residueCounts */ public abstract void setCounts(ResidueCount residueCounts); - public abstract void setSSCounts(SecondaryStructureCount secondaryStructureCount); - + + public abstract void setSSCounts( + SecondaryStructureCount secondaryStructureCount); /** * Returns the percentage identity of the profile, i.e. the highest proportion @@ -41,7 +42,7 @@ public interface ProfileI * @return */ public abstract float getPercentageIdentity(boolean ignoreGaps); - + public abstract float getSSPercentageIdentity(boolean ignoreGaps); /** @@ -74,6 +75,7 @@ public interface ProfileI * @return */ public abstract int getMaxCount(); + public abstract int getMaxSSCount(); /** @@ -83,6 +85,7 @@ public interface ProfileI * @return */ public abstract String getModalResidue(); + public abstract String getModalSS(); /** @@ -91,6 +94,7 @@ public interface ProfileI * @return */ public abstract int getNonGapped(); + SecondaryStructureCount getSSCounts(); } \ No newline at end of file diff --git a/src/jalview/datamodel/SecondaryStructureCount.java b/src/jalview/datamodel/SecondaryStructureCount.java index 52e9746..7d1b43c 100644 --- a/src/jalview/datamodel/SecondaryStructureCount.java +++ b/src/jalview/datamodel/SecondaryStructureCount.java @@ -63,7 +63,6 @@ public class SecondaryStructureCount */ private static final String SS_SYMBOLS = "HEC"; - static final int GAP_COUNT = 0; /* @@ -116,7 +115,7 @@ public class SecondaryStructureCount */ public SecondaryStructureCount() { - //isSS = true; + // isSS = true; int charsToCount = SS_SYMBOLS.length(); counts = new short[charsToCount + 1]; } @@ -419,8 +418,7 @@ public class SecondaryStructureCount { if (intCounts[i] == count) { - modal.append( - SS_SYMBOLS.charAt(i - 1)); + modal.append(SS_SYMBOLS.charAt(i - 1)); } } } @@ -430,8 +428,7 @@ public class SecondaryStructureCount { if (counts[i] == count) { - modal.append( - SS_SYMBOLS.charAt(i - 1)); + modal.append(SS_SYMBOLS.charAt(i - 1)); } } } diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index 38104e5..5248a58 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -136,7 +136,6 @@ public class SequenceGroup implements AnnotatedCollectionI * consensus calculation property */ private boolean showSequenceLogo = false; - /** * flag indicating if logo should be rendered normalised @@ -154,7 +153,6 @@ public class SequenceGroup implements AnnotatedCollectionI private boolean hidecols = false; AlignmentAnnotation consensus = null; - List ssConsensus = null; @@ -163,7 +161,7 @@ public class SequenceGroup implements AnnotatedCollectionI AlignmentAnnotation conservation = null; private boolean showConsensusHistogram; - + private AnnotatedCollectionI context; public Map hSSConsensusProfileMap; @@ -651,7 +649,6 @@ public class SequenceGroup implements AnnotatedCollectionI hSSConsensusProfileMap.put(ssSource, hSSConsensus); } } - if (ssConsensus != null) { @@ -664,7 +661,6 @@ public class SequenceGroup implements AnnotatedCollectionI cs.setSSConsensusProfileMap(hSSConsensusProfileMap); upd = true; } - if ((conservation != null) || (cs != null && cs.conservationApplied())) @@ -1429,7 +1425,7 @@ public class SequenceGroup implements AnnotatedCollectionI } this.showSequenceLogo = showSequenceLogo; } - + /** * * @param showConsHist @@ -1447,6 +1443,7 @@ public class SequenceGroup implements AnnotatedCollectionI this.showConsensusHistogram = showConsHist; } + /** * @return the showConsensusHistogram */ diff --git a/src/jalview/datamodel/annotations/AlphaFoldAnnotationRowBuilder.java b/src/jalview/datamodel/annotations/AlphaFoldAnnotationRowBuilder.java index 4e9553e..11d58d9 100644 --- a/src/jalview/datamodel/annotations/AlphaFoldAnnotationRowBuilder.java +++ b/src/jalview/datamodel/annotations/AlphaFoldAnnotationRowBuilder.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel.annotations; import jalview.datamodel.Annotation; diff --git a/src/jalview/ext/ensembl/EnsemblRestClient.java b/src/jalview/ext/ensembl/EnsemblRestClient.java index 3cc778a..9521305 100644 --- a/src/jalview/ext/ensembl/EnsemblRestClient.java +++ b/src/jalview/ext/ensembl/EnsemblRestClient.java @@ -70,9 +70,9 @@ abstract class EnsemblRestClient extends EnsemblSequenceFetcher * @see https://github.com/Ensembl/ensembl-rest/wiki/Change-log * @see http://rest.ensembl.org/info/rest?content-type=application/json */ - private static final String LATEST_ENSEMBLGENOMES_REST_VERSION = "15.2"; + private static final String LATEST_ENSEMBLGENOMES_REST_VERSION = "15.8"; - private static final String LATEST_ENSEMBL_REST_VERSION = "15.2"; + private static final String LATEST_ENSEMBL_REST_VERSION = "15.8"; private static final String REST_CHANGE_LOG = "https://github.com/Ensembl/ensembl-rest/wiki/Change-log"; diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 7a06638..a624a66 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -5915,7 +5915,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { viewport.setShowSSConsensus(showSSConsensus.getState()); alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); - } /* @@ -5969,6 +5968,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); } + /* * (non-Javadoc) * diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 9430a8b..fa48bab 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -282,12 +282,13 @@ public class AlignViewport extends AlignmentViewport } showConsensusHistogram = Cache.getDefault("SHOW_CONSENSUS_HISTOGRAM", true); + showSequenceLogo = Cache.getDefault("SHOW_CONSENSUS_LOGO", true); normaliseSequenceLogo = Cache.getDefault("NORMALISE_CONSENSUS_LOGO", false); showGroupConsensus = Cache.getDefault("SHOW_GROUP_CONSENSUS", false); showConsensus = Cache.getDefault("SHOW_IDENTITY", true); - + showSSConsensus = Cache.getDefault("SHOW_SS_CONSENSUS", false); showOccupancy = Cache.getDefault(Preferences.SHOW_OCCUPANCY, true); diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 4d0de1b..d37c9c0 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -423,12 +423,13 @@ public class AppJmol extends StructureViewerBase public boolean isRepainting() { - if (renderPanel!=null && renderPanel.isVisible()) + if (renderPanel != null && renderPanel.isVisible()) { return renderPanel.repainting; } return false; } + /** * Outputs the Jmol viewer image as an image file, after prompting the user to * choose a file and (for EPS) choice of Text or Lineart character rendering @@ -441,10 +442,12 @@ public class AppJmol extends StructureViewerBase { while (!isRepainting()) { - try { + try + { Thread.sleep(2); } catch (Exception q) - {} + { + } } try { @@ -642,17 +645,18 @@ public class AppJmol extends StructureViewerBase } else { - repainting=true; + repainting = true; synchronized (jmb) { jmb.jmolViewer.renderScreenImage(g, currentSize.width, currentSize.height); - + } - repainting=false; + repainting = false; } } - volatile boolean repainting=false; + + volatile boolean repainting = false; } @Override diff --git a/src/jalview/gui/CalculationChooser.java b/src/jalview/gui/CalculationChooser.java index b831f43..14c2e1e 100644 --- a/src/jalview/gui/CalculationChooser.java +++ b/src/jalview/gui/CalculationChooser.java @@ -28,6 +28,7 @@ import jalview.api.analysis.SimilarityParamsI; import jalview.bin.Cache; import jalview.datamodel.SequenceGroup; import jalview.util.MessageManager; +import jalview.util.Platform; import jalview.viewmodel.AlignmentViewport; import java.awt.BorderLayout; import java.awt.Color; @@ -261,12 +262,17 @@ public class CalculationChooser extends JPanel pasimapBorderless.setOpaque(false); // false -> stops every pixel inside // border from being painted pasimapBorderless.add(pasimap, FlowLayout.LEFT); // add pasimap button to - // the JPanel - calcChoicePanel.add(pasimapBorderless, FlowLayout.LEFT); // add button with - // border and - // everything to - // the overall - // ChoicePanel + // the JPanel + if (!Platform.isJS()) + { + // FIXME JAL-4443 + calcChoicePanel.add(pasimapBorderless, FlowLayout.LEFT); // add button + // with + // border and + // everything to + // the overall + // ChoicePanel + } treePanel.add(neighbourJoining); treePanel.add(averageDistance); @@ -276,7 +282,11 @@ public class CalculationChooser extends JPanel ButtonGroup calcTypes = new ButtonGroup(); calcTypes.add(pca); - calcTypes.add(pasimap); + if (!Platform.isJS()) + { + // FIXME JAL-4443 + calcTypes.add(pasimap); + } calcTypes.add(neighbourJoining); calcTypes.add(averageDistance); calcTypes.add(pairwise); @@ -639,8 +649,10 @@ public class CalculationChooser extends JPanel * * @param nucleotide * @param forPca - * @param ssPresent - include secondary structure similarity model - * @param forPasimap - limit to ScoreMatrix based models - allows use of AlignSeq + * @param ssPresent + * - include secondary structure similarity model + * @param forPasimap + * - limit to ScoreMatrix based models - allows use of AlignSeq * @return */ protected static List getApplicableScoreModels( @@ -652,7 +664,7 @@ public class CalculationChooser extends JPanel ScoreModels scoreModels = ScoreModels.getInstance(); for (ScoreModelI sm : scoreModels.getModels()) { - if ((!forPasimap || sm instanceof ScoreMatrix) + if ((!forPasimap || sm instanceof ScoreMatrix) && (!nucleotide && sm.isProtein() || nucleotide && sm.isDNA() || sm.isSecondaryStructure() && ssPresent)) diff --git a/src/jalview/gui/CutAndPasteTransfer.java b/src/jalview/gui/CutAndPasteTransfer.java index 299af6b..10aa229 100644 --- a/src/jalview/gui/CutAndPasteTransfer.java +++ b/src/jalview/gui/CutAndPasteTransfer.java @@ -94,13 +94,14 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer /** * set font size of the textarea + * * @param size */ public void setFont(Font font) { textarea.setFont(font); } - + /** * DOCUMENT ME! */ @@ -217,11 +218,12 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer { } } - + /** - * show menu for changing the font - * @param e - */ + * show menu for changing the font + * + * @param e + */ @Override public void fontSizeMenu_actionPerformed(ActionEvent e) { diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index c144268..10067cf 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -1214,185 +1214,261 @@ public class Desktop extends jalview.jbgui.GDesktop } /** - * DOCUMENT ME! - * - * @param evt - * DOCUMENT ME! + * load all files dropped (2.11.4.0 behaviour) + * @return false if any file resulted in an error */ - @Override - public void drop(DropTargetDropEvent evt) + public boolean loadDroppedFiles(List files, + List protocols, List failed, + List failed_exceptions) { - boolean success = true; - // JAL-1552 - acceptDrop required before getTransferable call for - // Java's Transferable for native dnd - evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); - Transferable t = evt.getTransferable(); - List files = new ArrayList<>(); - List protocols = new ArrayList<>(); - - try + for (int i = 0; i < files.size(); i++) { - Desktop.transferFromDropTarget(files, protocols, evt, t); - } catch (Exception e) + Object file = files.get(i); + try + { + // BH 2018 File or String + String fileName = file.toString(); + DataSourceType protocol = (protocols == null) ? DataSourceType.FILE + : protocols.get(i); + FileFormatI format = null; + + if (fileName.endsWith(".jar")) + { + format = FileFormat.Jalview; + } + else + { + format = new IdentifyFile().identify(file, protocol); + } + if (file instanceof File) + { + Platform.cacheFileData((File) file); + } + new FileLoader().LoadFile(null, file, protocol, format); + } catch (Exception x) + { + failed.add(file); + failed_exceptions.add(x); + jalview.bin.Console.warn( + "Unexpected Exception when handling " + file.toString(), x); + } + } + return failed.size()==0; // at least one was loaded. + } + + /** + * analyse dropped files and process them according to type: load alignments, + * add annotation, trees or features to alignments with the same basename + * + * @return false if any exception was raised + */ + public boolean processAndLoadDroppedFiles(List files, + List protocols, List failed, + List failed_exceptions) + { + // map list to list of strings + List filenames = new ArrayList<>(); + for (int i = 0; i < files.size(); i++) { - e.printStackTrace(); - success = false; + filenames.add(files.get(i).toString()); } - if (files != null) + // processFilenames will take likely associated files OUT of the list of + // filenames and return them in a BaseInfo object in the Map + Map baseInfoMap = ArgParserUtils + .processFilenames(filenames, false, files); + // so we can catch exceptions for this file + Object file = null; + try { - try + + for (int i = 0; i < files.size(); i++) { - // map list to list of strings - List filenames = new ArrayList<>(); - for (int i = 0; i < files.size(); i++) + // BH 2018 File or String + file = files.get(i); + String fileName = file.toString(); + DataSourceType protocol = (protocols == null) ? DataSourceType.FILE + : protocols.get(i); + FileFormatI format = null; + + if (fileName.toLowerCase(Locale.ROOT).endsWith(".jar")) { - filenames.add(files.get(i).toString()); + format = FileFormat.Jalview; } - - // processFilenames will take likely associated files OUT of the list of - // filenames and return them in a BaseInfo object in the Map - Map baseInfoMap = ArgParserUtils - .processFilenames(filenames, false, files); - for (int i = 0; i < files.size(); i++) + else { - // BH 2018 File or String - Object file = files.get(i); - String fileName = file.toString(); - DataSourceType protocol = (protocols == null) - ? DataSourceType.FILE - : protocols.get(i); - FileFormatI format = null; - - if (fileName.toLowerCase(Locale.ROOT).endsWith(".jar")) - { - format = FileFormat.Jalview; - } - else + format = new IdentifyFile().identify(file, protocol); + } + // If features/annotations/tree file that hasn't been put into the + // baseInfoMap, look through titles of opened AlignFrames to add. + String ext = FileUtils.getExtension(fileName); + boolean isFeatures = ArgParserUtils.featuresExtensions + .contains(ext); + boolean isAnnotations = ArgParserUtils.annotationsExtensions + .contains(ext); + boolean isTree = ArgParserUtils.treeExtensions.contains(ext); + if (isFeatures || isAnnotations || isTree) + { + String base = FileUtils.getBase(fileName); + AlignFrame matchingAf = null; + AlignFrame[] afs = Desktop.instance.getAlignFrames(); + boolean dontSkip = false; + for (AlignFrame af : afs) { - format = new IdentifyFile().identify(file, protocol); + String afFilename = af.fileName; + String afTitle = af.getTitle(); + /** + * don't need to check the matching afFilename or afTitle has an + * alignment extenstion. It's obviously an alignment! + */ + /* + if ((base.equals(FileUtils.getBase(afFilename)) + && ArgParserUtils.alignmentExtensions + .contains(FileUtils.getExtension(afFilename))) + || (base.equals(FileUtils.getBase(afTitle)) + && ArgParserUtils.alignmentExtensions + .contains(FileUtils + .getExtension(afTitle)))) + */ + if (base.equals(FileUtils.getBase(afFilename)) + || base.equals(FileUtils.getBase(afTitle))) + { + matchingAf = af; + break; + } } - // If features/annotations/tree file that hasn't been put into the - // baseInfoMap, look through titles of opened AlignFrames to add. - String ext = FileUtils.getExtension(fileName); - boolean isFeatures = ArgParserUtils.featuresExtensions - .contains(ext); - boolean isAnnotations = ArgParserUtils.annotationsExtensions - .contains(ext); - boolean isTree = ArgParserUtils.treeExtensions.contains(ext); - if (isFeatures || isAnnotations || isTree) + if (matchingAf != null) { - String base = FileUtils.getBase(fileName); - AlignFrame matchingAf = null; - AlignFrame[] afs = Desktop.instance.getAlignFrames(); - boolean dontSkip = false; - for (AlignFrame af : afs) + if (isFeatures) { - String afFilename = af.fileName; - String afTitle = af.getTitle(); - /** - * don't need to check the matching afFilename or afTitle has an - * alignment extenstion. It's obviously an alignment! - */ - /* - if ((base.equals(FileUtils.getBase(afFilename)) - && ArgParserUtils.alignmentExtensions - .contains(FileUtils.getExtension(afFilename))) - || (base.equals(FileUtils.getBase(afTitle)) - && ArgParserUtils.alignmentExtensions - .contains(FileUtils - .getExtension(afTitle)))) - */ - if (base.equals(FileUtils.getBase(afFilename)) - || base.equals(FileUtils.getBase(afTitle))) - { - matchingAf = af; - break; - } + matchingAf.parseFeaturesFile(fileName, + AppletFormatAdapter.checkProtocol(fileName)); + } + else if (isAnnotations) + { + matchingAf.loadJalviewDataFile(fileName, null, null, null); } - if (matchingAf != null) + else if (isTree) { - if (isFeatures) + try { - matchingAf.parseFeaturesFile(fileName, + NewickFile nf = new NewickFile(fileName, AppletFormatAdapter.checkProtocol(fileName)); - } - else if (isAnnotations) - { - matchingAf.loadJalviewDataFile(fileName, null, null, null); - } - else if (isTree) - { - try - { - NewickFile nf = new NewickFile(fileName, - AppletFormatAdapter.checkProtocol(fileName)); - matchingAf.getViewport().setCurrentTree(matchingAf - .showNewickTree(nf, fileName).getTree()); - } catch (IOException e) - { - jalview.bin.Console.warn( - "Couldn't add potential tree '" + fileName + "'"); - dontSkip = true; - } - } - if (!dontSkip) + matchingAf.getViewport().setCurrentTree( + matchingAf.showNewickTree(nf, fileName).getTree()); + } catch (IOException e) { - // skip to next file - continue; + jalview.bin.Console.warn( + "Couldn't add potential tree '" + fileName + "'"); + dontSkip = true; } } + if (!dontSkip) + { + // skip to next file + continue; + } } + } - if (file instanceof File) + if (file instanceof File) + { + Platform.cacheFileData((File) file); + } + // new FileLoader().LoadFile(null, file, protocol, format); + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(fileName, + protocol, format); + // now we add any associated files to the alignframe + if (baseInfoMap.containsKey(fileName) && baseInfoMap.get(fileName) + .getAssociatedFilesMap() != null) + { + BaseInfo bi = baseInfoMap.get(fileName); + if (bi.getAssociatedFilesMap().containsKey(Arg.FEATURES)) { - Platform.cacheFileData((File) file); + String featuresfile = bi.getAssociatedFilesMap() + .get(Arg.FEATURES); + af.parseFeaturesFile(featuresfile, + AppletFormatAdapter.checkProtocol(featuresfile)); } - // new FileLoader().LoadFile(null, file, protocol, format); - AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(fileName, - protocol, format); - // now we add any associated files to the alignframe - if (baseInfoMap.containsKey(fileName) && baseInfoMap.get(fileName) - .getAssociatedFilesMap() != null) + if (bi.getAssociatedFilesMap().containsKey(Arg.ANNOTATIONS)) { - BaseInfo bi = baseInfoMap.get(fileName); - if (bi.getAssociatedFilesMap().containsKey(Arg.FEATURES)) - { - String featuresfile = bi.getAssociatedFilesMap() - .get(Arg.FEATURES); - af.parseFeaturesFile(featuresfile, - AppletFormatAdapter.checkProtocol(featuresfile)); - } - if (bi.getAssociatedFilesMap().containsKey(Arg.ANNOTATIONS)) + String annotationsfile = bi.getAssociatedFilesMap() + .get(Arg.ANNOTATIONS); + af.loadJalviewDataFile(annotationsfile, null, null, null); + } + if (bi.getAssociatedFilesMap().containsKey(Arg.TREE)) + { + String treefile = bi.getAssociatedFilesMap().get(Arg.TREE); + try { - String annotationsfile = bi.getAssociatedFilesMap() - .get(Arg.ANNOTATIONS); - af.loadJalviewDataFile(annotationsfile, null, null, null); - } - if (bi.getAssociatedFilesMap().containsKey(Arg.TREE)) + NewickFile nf = new NewickFile(treefile, + AppletFormatAdapter.checkProtocol(treefile)); + af.getViewport().setCurrentTree( + af.showNewickTree(nf, treefile).getTree()); + } catch (IOException e) { - String treefile = bi.getAssociatedFilesMap().get(Arg.TREE); - try - { - NewickFile nf = new NewickFile(treefile, - AppletFormatAdapter.checkProtocol(treefile)); - af.getViewport().setCurrentTree( - af.showNewickTree(nf, treefile).getTree()); - } catch (IOException e) - { - jalview.bin.Console.warn( - "Couldn't add potential tree '" + treefile + "'"); - } - + jalview.bin.Console.warn( + "Couldn't add potential tree '" + treefile + "'"); } } } - } catch (Exception ex) + + } + } catch (Exception ex) + { + + jalview.bin.Console.warn( + "Unexpected exception whilst handling drop to Desktop.", ex); + failed.add(file); + failed_exceptions.add(ex); + return false; + } + return failed.size() == 0; // redundant for 2.11.4.0 implementation + } + + @Override + public void drop(DropTargetDropEvent evt) + { + boolean success = true; + // JAL-1552 - acceptDrop required before getTransferable call for + // Java's Transferable for native dnd + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + Transferable t = evt.getTransferable(); + List files = new ArrayList<>(); + List protocols = new ArrayList<>(); + + try + { + Desktop.transferFromDropTarget(files, protocols, evt, t); + } catch (Exception e) + { + e.printStackTrace(); + success = false; + } + try + { + if (files != null) { - success = false; + List failed = new ArrayList(); + List failed_exceptions = new ArrayList(); + if (!showExperimental()) + { + success = loadDroppedFiles(files, protocols, failed, + failed_exceptions); + } + else + { + success = processAndLoadDroppedFiles(files, protocols, failed, + failed_exceptions); + } } + } catch (Throwable ex) + { + jalview.bin.Console.warn( + "Unexpected exception whilst handling drop to Desktop.", ex); + success = false; } evt.dropComplete(success); // need this to ensure input focus is properly // transfered to any new windows created @@ -2945,11 +3021,11 @@ public class Desktop extends jalview.jbgui.GDesktop if (progressBars.get(Long.valueOf(id)) == null) return null; - + for (Component c : progressBars.get(Long.valueOf(id)).getComponents()) { if (c.getClass() == JProgressBar.class) - return (JProgressBar) c; + return (JProgressBar) c; } return null; } diff --git a/src/jalview/gui/FontChooser.java b/src/jalview/gui/FontChooser.java index 853d4aa..1ec4881 100755 --- a/src/jalview/gui/FontChooser.java +++ b/src/jalview/gui/FontChooser.java @@ -113,8 +113,9 @@ public class FontChooser extends GFontChooser /** * Creates a new FontChooser for a CutAndPasteTransfer + * * @param cap - */ + */ public FontChooser(CutAndPasteTransfer cap) { oldFont = new Font("Monospaced", Font.PLAIN, 12); @@ -131,7 +132,7 @@ public class FontChooser extends GFontChooser if (!isCapFont()) { smoothFont.setSelected(ap.av.antiAlias); - + /* * Enable 'scale protein as cDNA' in a SplitFrame view. The selection is * stored in the ViewStyle of both dna and protein Viewport. Also enable @@ -289,6 +290,7 @@ public class FontChooser extends GFontChooser { return cap != null; } + /** * DOCUMENT ME! */ diff --git a/src/jalview/gui/PaSiMapPanel.java b/src/jalview/gui/PaSiMapPanel.java index 702c4f4..7926efc 100644 --- a/src/jalview/gui/PaSiMapPanel.java +++ b/src/jalview/gui/PaSiMapPanel.java @@ -101,12 +101,12 @@ public class PaSiMapPanel extends GPaSiMapPanel */ public PaSiMapPanel(AlignmentPanel alignPanel, String modelName) { - super(8); // dim = 8 + super(8); // dim = 8 this.av = alignPanel.av; this.ap = alignPanel; boolean nucleotide = av.getAlignment().isNucleotide(); - //progressBar = new ProgressBar(statusPanel, statusBar); + // progressBar = new ProgressBar(statusPanel, statusBar); addInternalFrameListener(new InternalFrameAdapter() { @@ -131,8 +131,7 @@ public class PaSiMapPanel extends GPaSiMapPanel ScoreModelI scoreModel = ScoreModels.getInstance() .getScoreModel(modelName, ap); - setPasimapModel( - new PaSiMapModel(av, seqs, nucleotide, scoreModel)); + setPasimapModel(new PaSiMapModel(av, seqs, nucleotide, scoreModel)); PaintRefresher.Register(this, av.getSequenceSetId()); setRotatableCanvas(new RotatableCanvas(alignPanel)); @@ -143,8 +142,8 @@ public class PaSiMapPanel extends GPaSiMapPanel } /** - * Ensure references to potentially very large objects (the PaSiMap matrices) are - * nulled when the frame is closed + * Ensure references to potentially very large objects (the PaSiMap matrices) + * are nulled when the frame is closed */ protected void close_actionPerformed() { @@ -193,29 +192,31 @@ public class PaSiMapPanel extends GPaSiMapPanel progressBar.setProgressBar(message, progId); try { - SequenceGroup selGroup=av.getSelectionGroup(); - - if (selGroup==null) + SequenceGroup selGroup = av.getSelectionGroup(); + + if (selGroup == null) { selGroup = new SequenceGroup(av.getAlignment().getSequences()); selGroup.setStartRes(0); - selGroup.setEndRes(av.getAlignment().getWidth()-1); + selGroup.setEndRes(av.getAlignment().getWidth() - 1); } - - if (selGroup.getSize()>MAX_PASIMAP_SEQ) + + if (selGroup.getSize() > MAX_PASIMAP_SEQ) { - int start = selGroup.getStartRes(),end=selGroup.getEndRes(); - selGroup = new SequenceGroup(selGroup.getSequences().subList(0, MAX_PASIMAP_SEQ)); - selGroup.setStartRes(start); - selGroup.setEndRes(end); - Console.warn("Truncated input sequences for PASIMAP analysis to "+MAX_PASIMAP_SEQ); + int start = selGroup.getStartRes(), end = selGroup.getEndRes(); + selGroup = new SequenceGroup( + selGroup.getSequences().subList(0, MAX_PASIMAP_SEQ)); + selGroup.setStartRes(start); + selGroup.setEndRes(end); + Console.warn("Truncated input sequences for PASIMAP analysis to " + + MAX_PASIMAP_SEQ); } - + PairwiseAlignPanel pap = new PairwiseAlignPanel(av, selGroup, true, GAP_OPEN_COST, GAP_EXTEND_COST, false, null); pap.setDiscardAlignments(true); pap.setQuiet(true); - + System.out.println(pap != null); setPairwiseAlignPanel(pap); getPasimapModel().calculate(pap); @@ -241,9 +242,9 @@ public class PaSiMapPanel extends GPaSiMapPanel repaint(); if (getParent() == null) { - Desktop.addInternalFrame( - this, MessageManager.formatMessage("label.calc_title", - "PaSiMap", ap.alignFrame.getTitle()), + Desktop.addInternalFrame(this, + MessageManager.formatMessage("label.calc_title", "PaSiMap", + ap.alignFrame.getTitle()), 475, 450); this.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT)); } @@ -251,8 +252,8 @@ public class PaSiMapPanel extends GPaSiMapPanel } /** - * Updates the PaSiMap display after a change of component to use for x, y or z - * axis + * Updates the PaSiMap display after a change of component to use for x, y or + * z axis */ @Override protected void doDimensionChange() @@ -270,8 +271,8 @@ public class PaSiMapPanel extends GPaSiMapPanel } /** - * Sets the selected checkbox item index for PaSiMap dimension (1, 2, 3...) for - * the given axis (X/Y/Z) + * Sets the selected checkbox item index for PaSiMap dimension (1, 2, 3...) + * for the given axis (X/Y/Z) * * @param index * @param axis @@ -323,8 +324,8 @@ public class PaSiMapPanel extends GPaSiMapPanel } /** - * If available, shows the data which formed the inputs for the PaSiMap as a new - * alignment + * If available, shows the data which formed the inputs for the PaSiMap as a + * new alignment */ @Override public void originalSeqData_actionPerformed() @@ -452,7 +453,7 @@ public class PaSiMapPanel extends GPaSiMapPanel } } - public void makePaSiMapImage(ImageMaker.TYPE type) throws Exception + public void makePaSiMapImage(ImageMaker.TYPE type) throws Exception { int width = getRotatableCanvas().getWidth(); int height = getRotatableCanvas().getHeight(); @@ -612,7 +613,8 @@ public class PaSiMapPanel extends GPaSiMapPanel { cap.setText(getPasimapModel().getAlignmentOutput()); Desktop.addInternalFrame(cap, MessageManager.formatMessage( - "label.pairwise_alignment_for_params", new String[] { this.getTitle() }), 500, 500); + "label.pairwise_alignment_for_params", new String[] + { this.getTitle() }), 500, 500); } catch (OutOfMemoryError oom) { new OOMWarning("exporting pairwise alignments", oom); @@ -680,7 +682,7 @@ public class PaSiMapPanel extends GPaSiMapPanel public void updateProgressBar(int lengthOfTask, int progress) { JProgressBar pBar = progressBar.getProgressBar(progId); - if (pBar==null) + if (pBar == null) { return; } @@ -692,22 +694,24 @@ public class PaSiMapPanel extends GPaSiMapPanel } updateProgressBar(progress); } + public void updateProgressBar(int progress) { JProgressBar pBar = progressBar.getProgressBar(progId); - - if (pBar==null) + + if (pBar == null) { return; } - + pBar.setValue(progress); pBar.repaint(); } /** - * adds a listener for a pairwise alignment panel's progress - * TODO: generalise for anything that can report progress ? + * adds a listener for a pairwise alignment panel's progress TODO: generalise + * for anything that can report progress ? + * * @param pap */ public void setPairwiseAlignPanel(PairwiseAlignPanel pap) @@ -794,8 +798,8 @@ public class PaSiMapPanel extends GPaSiMapPanel } /** - * Answers the selected checkbox item index for PaSiMap dimension for the X, Y or - * Z axis of the display + * Answers the selected checkbox item index for PaSiMap dimension for the X, Y + * or Z axis of the display * * @param axis * @return diff --git a/src/jalview/gui/PairwiseAlignPanel.java b/src/jalview/gui/PairwiseAlignPanel.java index 3e8fb02..77ec0f5 100755 --- a/src/jalview/gui/PairwiseAlignPanel.java +++ b/src/jalview/gui/PairwiseAlignPanel.java @@ -47,7 +47,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel private float[][] scores; - private float[][] alignmentScores; // scores used by PaSiMap + private float[][] alignmentScores; // scores used by PaSiMap private int GAP_OPEN_COST; @@ -60,7 +60,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel private String alignmentOutput; private boolean quiet; - + private boolean discardAlignments; private boolean endGaps; @@ -73,12 +73,13 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel private int total; private int progress; - + private SequenceGroup selection; + /** * input sequences */ - private SequenceI[] seqs=null; + private SequenceI[] seqs = null; private ScoreMatrix scoreMatrix; @@ -87,23 +88,31 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel * * @param viewport * contains selected sequences to align - * @param endGaps ~ toggle gaps and the beginning and end of sequences + * @param endGaps + * ~ toggle gaps and the beginning and end of sequences */ public PairwiseAlignPanel(AlignmentViewport viewport) { - this(viewport, null, false, 120, 20, true, null); // default penalties used in AlignSeq + this(viewport, null, false, 120, 20, true, null); // default penalties used + // in AlignSeq } + public PairwiseAlignPanel(AlignmentViewport viewport, ScoreMatrix params) { - this(viewport, null, false, 120, 20, true,params); // default penalties used in AlignSeq + this(viewport, null, false, 120, 20, true, params); // default penalties + // used in AlignSeq } - public PairwiseAlignPanel(AlignmentViewport viewport, boolean endGaps, int gapOpenCost, int gapExtendCost) + + public PairwiseAlignPanel(AlignmentViewport viewport, boolean endGaps, + int gapOpenCost, int gapExtendCost) { this(viewport, null, endGaps, gapOpenCost, gapExtendCost, true, null); } /** - * Create a new pairwise alignpanel with specified parameters and score model, and optionally start the calculation + * Create a new pairwise alignpanel with specified parameters and score model, + * and optionally start the calculation + * * @param viewport * @param selection * @param endGaps @@ -112,8 +121,9 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel * @param run * @param scoreMatrix */ - public PairwiseAlignPanel(AlignmentViewport viewport, SequenceGroup selection, boolean endGaps, - int gapOpenCost, int gapExtendCost, boolean run, ScoreMatrix scoreMatrix) + public PairwiseAlignPanel(AlignmentViewport viewport, + SequenceGroup selection, boolean endGaps, int gapOpenCost, + int gapExtendCost, boolean run, ScoreMatrix scoreMatrix) { super(); this.av = viewport; @@ -123,23 +133,25 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel this.selection = selection; this.total = MiscMath.combinations(av.getAlignment().getHeight(), 2); this.scoreMatrix = scoreMatrix; - if (run) { + if (run) + { calculate(); } } - + public void calculate() { calculate(scoreMatrix); } - public void calculate (ScoreMatrix sm) + + public void calculate(ScoreMatrix sm) { StringBuilder sb = new StringBuilder(1024); sequences = new Vector(); String[] seqStrings; - seqs=null; + seqs = null; if (selection != null) { @@ -169,7 +181,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel seqs = av.getAlignment().getSequencesArray(); } } - + String type = (av.getAlignment().isNucleotide()) ? AlignSeq.DNA : AlignSeq.PEP; @@ -177,7 +189,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel float[][] alignmentScores = new float[seqs.length][seqs.length]; double totscore = 0D; int count = seqs.length; - + boolean first = true; progress = 0; @@ -192,11 +204,12 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel AlignSeq as = new AlignSeq(seqs[i], seqStrings[i], seqs[j], seqStrings[j], type, GAP_OPEN_COST, GAP_EXTEND_COST); - if (sm != null) { - as.setScoreMatrix(sm); - } + if (sm != null) + { + as.setScoreMatrix(sm); + } - if (as.s1str.length() == 0 || as.s2str.length() == 0) + if (as.s1str.length() == 0 || as.s2str.length() == 0) { continue; } @@ -219,7 +232,8 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel sb.append(DASHES); } first = false; - if (!discardAlignments) { + if (!discardAlignments) + { as.printAlignment(System.out); } scores[i][j] = as.getMaxScore() / as.getASeq1().length; @@ -243,7 +257,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel this.scores = scores; this.alignmentScores = alignmentScores; - if (count > 2 && !quiet) + if (count > 2 && !quiet) { printScoreMatrix(seqs, scores, totscore); } @@ -344,24 +358,29 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel { return progress; } + public SequenceI[] getInputSequences() { return seqs; } + /** - * Set to true to suppress output of progress to Console.stdout or GUI - * @param quiet + * Set to true to suppress output of progress to Console.stdout or GUI + * + * @param quiet */ public void setQuiet(boolean quiet) { - this.quiet=quiet; + this.quiet = quiet; } + /** * set this if you are only interested in final alignment scores + * * @param discard */ public void setDiscardAlignments(boolean discard) { - discardAlignments=discard; + discardAlignments = discard; } } diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index a47a0a1..cc60400 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -1973,7 +1973,6 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener AlignmentUtils.addReferenceAnnotations(candidates, alignment, null); if(AlignmentUtils.isSSAnnotationPresent(candidates)) { - restartSSConsensusWorker(); ap.validateAnnotationDimensions(true); ap.fontChanged(); @@ -1982,23 +1981,23 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener restartSSConsensusWorker(); //ap.alignFrame.getViewport().getCalcManager().restartWorkers(); } - } - - - private void restartSSConsensusWorker() { - - List workers = ap.alignFrame.getViewport().getCalcManager() - .getRegisteredWorkersOfClass(SecondaryStructureConsensusThread.class); - if (!workers.isEmpty()) { - - ap.alignFrame.getViewport().getCalcManager().startWorker(workers.remove(0)); + + private void restartSSConsensusWorker() + { + + List workers = ap.alignFrame.getViewport() + .getCalcManager().getRegisteredWorkersOfClass( + SecondaryStructureConsensusThread.class); + if (!workers.isEmpty()) + { + + ap.alignFrame.getViewport().getCalcManager() + .startWorker(workers.remove(0)); } - + } - - protected void makeReferenceSeq_actionPerformed(ActionEvent actionEvent) { diff --git a/src/jalview/gui/ProgressBar.java b/src/jalview/gui/ProgressBar.java index 73cd496..9d2cb2c 100644 --- a/src/jalview/gui/ProgressBar.java +++ b/src/jalview/gui/ProgressBar.java @@ -274,7 +274,7 @@ public class ProgressBar implements IProgressIndicator public JProgressBar getProgressBar(long id) { Container progBar = progressBars.get(id); - if (progBar==null || progBar.getComponentCount()==0) + if (progBar == null || progBar.getComponentCount() == 0) { return null; } diff --git a/src/jalview/gui/RotatableCanvas.java b/src/jalview/gui/RotatableCanvas.java index 5261b23..03d8d87 100755 --- a/src/jalview/gui/RotatableCanvas.java +++ b/src/jalview/gui/RotatableCanvas.java @@ -119,10 +119,13 @@ public class RotatableCanvas extends JPanel private Point[] axisEndPoints; // fields for 'select rectangle' (JAL-1124) - int rectx1; - int recty1; - int rectx2; - int recty2; + int rectx1; + + int recty1; + + int rectx2; + + int recty2; AlignmentViewport av; @@ -405,11 +408,12 @@ public class RotatableCanvas extends JPanel } } // //Now the rectangle - if (rectx2 != -1 && recty2 != -1) { - g.setColor(Color.white); - - g.drawRect(rectx1,recty1,rectx2-rectx1,recty2-recty1); - } + if (rectx2 != -1 && recty2 != -1) + { + g.setColor(Color.white); + + g.drawRect(rectx1, recty1, rectx2 - rectx1, recty2 - recty1); + } } /** @@ -566,10 +570,10 @@ public class RotatableCanvas extends JPanel mouseX = x; mouseY = y; - rectx1 = x; - recty1 = y; - rectx2 = -1; - recty2 = -1; + rectx1 = x; + recty1 = y; + rectx2 = -1; + recty2 = -1; SequenceI found = findSequenceAtPoint(x, y); @@ -634,12 +638,12 @@ public class RotatableCanvas extends JPanel // Check if this is a rectangle drawing drag if ((evt.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK) != 0) { - rectx2 = evt.getX(); - recty2 = evt.getY(); - if ((rectx2 != -1) && (recty2 != -1)) - { - rectSelect(rectx1, recty1, rectx2, recty2); - } + rectx2 = evt.getX(); + recty2 = evt.getY(); + if ((rectx2 != -1) && (recty2 != -1)) + { + rectSelect(rectx1, recty1, rectx2, recty2); + } } else { @@ -649,7 +653,7 @@ public class RotatableCanvas extends JPanel mouseY = yPos; // findWidths(); } - repaint(); + repaint(); } @Override @@ -753,12 +757,10 @@ public class RotatableCanvas extends JPanel { SequencePoint sp = sequencePoints.get(i); int tmp1 = (int) (((sp.coord.x - centre[0]) * getScaleFactor()) - * (getWidth() / 3.15) - + (getWidth() / 2.0)); + * (getWidth() / 3.15) + (getWidth() / 2.0)); float pre1 = ((sp.coord.x - centre[0]) * getScaleFactor()); int tmp2 = (int) (((sp.coord.y - centre[1]) * getScaleFactor()) - * (getHeight() / 1.70) - + (getHeight() / 2.0)); + * (getHeight() / 1.70) + (getHeight() / 2.0)); float pre2 = ((sp.coord.y - centre[1]) * getScaleFactor()); if ((tmp1 > x1) && (tmp1 < x2) && (tmp2 > y1) && (tmp2 < y2)) diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index 9658a92..ce043fe 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -1347,8 +1347,9 @@ public class StructureChooser extends GStructureChooser String pdbFilename = selectedPdbFileName; // TODO - tidy up this ugly hack so we call launchStructureViewer too StructureChooser.openStructureFileForSequence(ssm, sc, ap, - selectedSequence, true, pdbFilename, tft, paeFilename,false, - true,false,getTargetedStructureViewer(ssm).getViewerType()); + selectedSequence, true, pdbFilename, tft, paeFilename, + false, true, false, + getTargetedStructureViewer(ssm).getViewerType()); } SwingUtilities.invokeLater(new Runnable() { @@ -1820,7 +1821,9 @@ public class StructureChooser extends GStructureChooser * @param forceHeadless * @param showRefAnnotations * @param doXferSettings - * @param viewerType - when not null means the viewer will be opened, providing forceHeadless/headless is not true + * @param viewerType + * - when not null means the viewer will be opened, providing + * forceHeadless/headless is not true * @return */ public static StructureViewer openStructureFileForSequence( @@ -1845,7 +1848,7 @@ public class StructureChooser extends GStructureChooser ssm = ap.getStructureSelectionManager(); StructureSelectionManager.doConfigureStructurePrefs(ssm); } - + PDBEntry fileEntry = new AssociatePdbFileWithSeq().associatePdbWithSeq( sFilename, DataSourceType.FILE, seq, prompt, Desktop.instance, tft, paeFilename, doXferSettings); @@ -1863,7 +1866,8 @@ public class StructureChooser extends GStructureChooser sc.mainFrame.dispose(); - // TODO should honor preferences - only show reference annotation that is requested - JAL-4415 JAL-3124 + // TODO should honor preferences - only show reference annotation that is + // requested - JAL-4415 JAL-3124 if (showRefAnnotations) { showReferenceAnnotationsForSequence(ap.alignFrame, seq); diff --git a/src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java b/src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java index 333f995..2bd5a91 100644 --- a/src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java +++ b/src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java @@ -426,8 +426,9 @@ public class ThreeDBStructureChooserQuerySource String modelPage = humanUrl < 1 ? null : (String) restable.getValueAt(row, humanUrl); - String modelCategory = idx_mcat < 1 ? null :(String) restable.getValueAt(row,idx_mcat); - + String modelCategory = idx_mcat < 1 ? null + : (String) restable.getValueAt(row, idx_mcat); + String strucFormat = restable.getValueAt(row, modelformat).toString(); SequenceI selectedSeq = (SequenceI) restable.getValueAt(row, diff --git a/src/jalview/jbgui/GAlignFrame.java b/src/jalview/jbgui/GAlignFrame.java index fa9626b..d1ced96 100755 --- a/src/jalview/jbgui/GAlignFrame.java +++ b/src/jalview/jbgui/GAlignFrame.java @@ -210,7 +210,7 @@ public class GAlignFrame extends JInternalFrame protected JCheckBoxMenuItem showGroupConservation = new JCheckBoxMenuItem(); - protected JCheckBoxMenuItem showConsensusHistogram = new JCheckBoxMenuItem(); + protected JCheckBoxMenuItem showConsensusHistogram = new JCheckBoxMenuItem(); protected JCheckBoxMenuItem showSequenceLogo = new JCheckBoxMenuItem(); @@ -925,8 +925,8 @@ public class GAlignFrame extends JInternalFrame { showConsensusHistogram_actionPerformed(e); } - }); + showSequenceLogo .setText(MessageManager.getString("label.show_consensus_logo")); showSequenceLogo.addActionListener(new ActionListener() @@ -1887,7 +1887,7 @@ public class GAlignFrame extends JInternalFrame } }); - + JMenu exportImageMenu = new JMenu( MessageManager.getString("label.export_image")); JMenu fileMenu = new JMenu(MessageManager.getString("action.file")); @@ -2957,6 +2957,6 @@ public class GAlignFrame extends JInternalFrame ButtonGroup ssButtonGroup) { // TODO Auto-generated method stub - + } } diff --git a/src/jalview/jbgui/GCutAndPasteTransfer.java b/src/jalview/jbgui/GCutAndPasteTransfer.java index 5daea78..106ad7c 100755 --- a/src/jalview/jbgui/GCutAndPasteTransfer.java +++ b/src/jalview/jbgui/GCutAndPasteTransfer.java @@ -198,7 +198,7 @@ public class GCutAndPasteTransfer extends JInternalFrame @Override public void actionPerformed(ActionEvent e) { - fontSizeMenu_actionPerformed(e); + fontSizeMenu_actionPerformed(e); } }); copyItem.setText(MessageManager.getString("action.copy")); @@ -256,6 +256,7 @@ public class GCutAndPasteTransfer extends JInternalFrame /** * shows a menu for changing the font + * * @param e */ public void fontSizeMenu_actionPerformed(ActionEvent e) diff --git a/src/jalview/jbgui/GDesktop.java b/src/jalview/jbgui/GDesktop.java index 3d606e3..90b8024 100755 --- a/src/jalview/jbgui/GDesktop.java +++ b/src/jalview/jbgui/GDesktop.java @@ -48,7 +48,7 @@ import jalview.util.Platform; public class GDesktop extends JFrame { - protected static JMenu windowMenu = new JMenu(); + protected static JMenu windowMenu = null; JMenuBar desktopMenubar = new JMenuBar(); @@ -110,6 +110,13 @@ public class GDesktop extends JFrame public GDesktop() { super(); + + // instantiate here to set same context (e.g. font) as other menus + if (windowMenu == null) + { + windowMenu = new JMenu(); + } + try { jbInit(); diff --git a/src/jalview/jbgui/GPCAPanel.java b/src/jalview/jbgui/GPCAPanel.java index ec5b209..65394ed 100755 --- a/src/jalview/jbgui/GPCAPanel.java +++ b/src/jalview/jbgui/GPCAPanel.java @@ -85,6 +85,7 @@ public class GPCAPanel extends JInternalFrame zCombobox.addItem("dim " + i); } } + public GPCAPanel(int dim) { try diff --git a/src/jalview/jbgui/GPaSiMapPanel.java b/src/jalview/jbgui/GPaSiMapPanel.java index 369a005..3c7fb5a 100755 --- a/src/jalview/jbgui/GPaSiMapPanel.java +++ b/src/jalview/jbgui/GPaSiMapPanel.java @@ -85,6 +85,7 @@ public class GPaSiMapPanel extends JInternalFrame zCombobox.addItem("dim " + i); } } + public GPaSiMapPanel(int dim) { try @@ -223,8 +224,8 @@ public class GPaSiMapPanel extends JInternalFrame } }); JMenuItem outputAlignment = new JMenuItem(); - outputAlignment.setText( - MessageManager.getString("label.output_alignment")); + outputAlignment + .setText(MessageManager.getString("label.output_alignment")); outputAlignment.addActionListener(new ActionListener() { @Override diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index e574327..c644e3c 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -160,7 +160,7 @@ public class GPreferences extends JPanel protected JCheckBox conservation = new JCheckBox(); - protected JCheckBox identity = new JCheckBox(); + protected JCheckBox identity = new JCheckBox(); protected JCheckBox ssConsensus = new JCheckBox(); diff --git a/src/jalview/math/Matrix.java b/src/jalview/math/Matrix.java index 7ae4b94..f767444 100755 --- a/src/jalview/math/Matrix.java +++ b/src/jalview/math/Matrix.java @@ -123,12 +123,12 @@ public class Matrix implements MatrixI if (row != null) { value[i] = new double[row.length]; - int j = 0; - for (float oldValue : row) - { - value[i][j] = oldValue; - j++; - } + int j = 0; + for (float oldValue : row) + { + value[i][j] = oldValue; + j++; + } } i++; } @@ -191,10 +191,11 @@ public class Matrix implements MatrixI */ for (int k = 0; k < in.width(); k++) { - if (!Double.isNaN(in.getValue(i,k)) && !Double.isNaN(this.value[k][j])) - { + if (!Double.isNaN(in.getValue(i, k)) + && !Double.isNaN(this.value[k][j])) + { tmp[i][j] += (in.getValue(i, k) * this.value[k][j]); - } + } } } } @@ -833,10 +834,10 @@ public class Matrix implements MatrixI } /** - * returns the matrix as a double[][] array - * - * @return - */ + * returns the matrix as a double[][] array + * + * @return + */ @Override public double[][] asArray() { @@ -1018,7 +1019,8 @@ public class Matrix implements MatrixI /** * Add d to all entries of this matrix * - * @param d ~ value to add + * @param d + * ~ value to add */ @Override public void add(double d) @@ -1086,7 +1088,7 @@ public class Matrix implements MatrixI } /** - * Returns a copy in which every value in the matrix is its absolute + * Returns a copy in which every value in the matrix is its absolute * * @return */ @@ -1122,7 +1124,7 @@ public class Matrix implements MatrixI { if (row != null) { - mean[i++] = MiscMath.mean(row); + mean[i++] = MiscMath.mean(row); } } return mean; @@ -1142,17 +1144,17 @@ public class Matrix implements MatrixI double[] column = getColumn(j); if (column != null) { - mean[j] = MiscMath.mean(column); + mean[j] = MiscMath.mean(column); } } return mean; } /** - * return a flattened matrix containing the sum of each column - * - * @return - */ + * return a flattened matrix containing the sum of each column + * + * @return + */ @Override public double[] sumCol() { @@ -1162,17 +1164,17 @@ public class Matrix implements MatrixI double[] column = getColumn(j); if (column != null) { - sum[j] = MiscMath.sum(column); + sum[j] = MiscMath.sum(column); } - } + } return sum; } /** - * returns the mean value of the complete matrix - * - * @return - */ + * returns the mean value of the complete matrix + * + * @return + */ @Override public double mean() { @@ -1182,47 +1184,51 @@ public class Matrix implements MatrixI { for (double col : row) { - if (!Double.isNaN(col)) - { - sum += col; - } else { - nanCount++; - } + if (!Double.isNaN(col)) + { + sum += col; + } + else + { + nanCount++; + } } } return sum / (double) (this.rows * this.cols - nanCount); } /** - * fills up a diagonal matrix with its transposed copy - * !other side should be filled with 0 - * !keeps Double.NaN found in either side - * - * TODO check on which side it was diagonal and only do calculations for the other side - */ + * fills up a diagonal matrix with its transposed copy !other side should be + * filled with 0 !keeps Double.NaN found in either side + * + * TODO check on which side it was diagonal and only do calculations for the + * other side + */ @Override public void fillDiagonal() { int n = this.rows; int m = this.cols; - MatrixI copy = this.transpose(); // goes through each element in the matrix and - for (int i = 0; i < n; i++) // adds the value in the transposed copy to the original value + MatrixI copy = this.transpose(); // goes through each element in the matrix + // and + for (int i = 0; i < n; i++) // adds the value in the transposed copy to the + // original value { for (int j = 0; j < m; j++) { - if (i != j) - { - this.addValue(i, j, copy.getValue(i,j)); - } + if (i != j) + { + this.addValue(i, j, copy.getValue(i, j)); + } } } } /** - * counts the number of Double.NaN in the matrix - * - * @return - */ + * counts the number of Double.NaN in the matrix + * + * @return + */ @Override public int countNaN() { @@ -1231,117 +1237,139 @@ public class Matrix implements MatrixI { for (int j = 0; j < this.cols; j++) { - if (Double.isNaN(this.getValue(i,j))) - { - NaN++; - } + if (Double.isNaN(this.getValue(i, j))) + { + NaN++; + } } } return NaN; } /** - * performs an element-wise addition of this matrix by another matrix ~ this - m - * @param m ~ other matrix - * - * @return - */ + * performs an element-wise addition of this matrix by another matrix ~ this - + * m + * + * @param m + * ~ other matrix + * + * @return + */ @Override public MatrixI add(MatrixI m) { if (m.width() != cols || m.height() != rows) { - throw new IllegalArgumentException("Can't add a " + m.height() + "x" + m.width() + " to a " + this.rows + "x" + this.cols + " matrix"); + throw new IllegalArgumentException( + "Can't add a " + m.height() + "x" + m.width() + " to a " + + this.rows + "x" + this.cols + " matrix"); } double[][] tmp = new double[this.rows][this.cols]; for (int i = 0; i < this.rows; i++) { for (int j = 0; j < this.cols; j++) { - tmp[i][j] = this.getValue(i,j) + m.getValue(i,j); + tmp[i][j] = this.getValue(i, j) + m.getValue(i, j); } } return new Matrix(tmp); } /** - * performs an element-wise subtraction of this matrix by another matrix ~ this - m - * @param m ~ other matrix - * - * @return - */ + * performs an element-wise subtraction of this matrix by another matrix ~ + * this - m + * + * @param m + * ~ other matrix + * + * @return + */ @Override public MatrixI subtract(MatrixI m) { if (m.width() != cols || m.height() != rows) { - throw new IllegalArgumentException("Can't subtract a " + m.height() + "x" + m.width() + " from a " + this.rows + "x" + this.cols + " matrix"); + throw new IllegalArgumentException("Can't subtract a " + m.height() + + "x" + m.width() + " from a " + this.rows + "x" + this.cols + + " matrix"); } double[][] tmp = new double[this.rows][this.cols]; for (int i = 0; i < this.rows; i++) { for (int j = 0; j < this.cols; j++) { - tmp[i][j] = this.getValue(i,j) - m.getValue(i,j); + tmp[i][j] = this.getValue(i, j) - m.getValue(i, j); } } return new Matrix(tmp); } /** - * performs an element-wise multiplication of this matrix by another matrix ~ this * m - * @param m ~ other matrix - * - * @return - */ + * performs an element-wise multiplication of this matrix by another matrix ~ + * this * m + * + * @param m + * ~ other matrix + * + * @return + */ @Override public MatrixI elementwiseMultiply(MatrixI m) { if (m.width() != cols || m.height() != rows) { - throw new IllegalArgumentException("Can't multiply a " + this.rows + "x" + this.cols + " by a " + m.height() + "x" + m.width() + " matrix"); + throw new IllegalArgumentException( + "Can't multiply a " + this.rows + "x" + this.cols + " by a " + + m.height() + "x" + m.width() + " matrix"); } double[][] tmp = new double[this.rows][this.cols]; for (int i = 0; i < this.rows; i++) { for (int j = 0; j < this.cols; j++) { - tmp[i][j] = this.getValue(i, j) * m.getValue(i,j); + tmp[i][j] = this.getValue(i, j) * m.getValue(i, j); } } return new Matrix(tmp); } /** - * performs an element-wise division of this matrix by another matrix ~ this / m - * @param m ~ other matrix - * - * @return - */ + * performs an element-wise division of this matrix by another matrix ~ this / + * m + * + * @param m + * ~ other matrix + * + * @return + */ @Override public MatrixI elementwiseDivide(MatrixI m) { if (m.width() != cols || m.height() != rows) { - throw new IllegalArgumentException("Can't divide a " + this.rows + "x" + this.cols + " by a " + m.height() + "x" + m.width() + " matrix"); + throw new IllegalArgumentException( + "Can't divide a " + this.rows + "x" + this.cols + " by a " + + m.height() + "x" + m.width() + " matrix"); } double[][] tmp = new double[this.rows][this.cols]; for (int i = 0; i < this.rows; i++) { for (int j = 0; j < this.cols; j++) { - tmp[i][j] = this.getValue(i, j) / m.getValue(i,j); + tmp[i][j] = this.getValue(i, j) / m.getValue(i, j); } } return new Matrix(tmp); } /** - * calculate the root-mean-square for tow matrices - * @param m ~ other matrix - * - * @return - */ + * calculate the root-mean-square for tow matrices + * + * @param m + * ~ other matrix + * + * @return + */ @Override public double rmsd(MatrixI m) { @@ -1351,10 +1379,10 @@ public class Matrix implements MatrixI } /** - * calculates the Frobenius norm of this matrix - * - * @return - */ + * calculates the Frobenius norm of this matrix + * + * @return + */ @Override public double norm() { @@ -1363,17 +1391,17 @@ public class Matrix implements MatrixI { for (double val : row) { - result += Math.pow(val, 2); + result += Math.pow(val, 2); } } return Math.sqrt(result); } /** - * returns the sum of all values in this matrix - * - * @return - */ + * returns the sum of all values in this matrix + * + * @return + */ @Override public double sum() { @@ -1382,24 +1410,28 @@ public class Matrix implements MatrixI { for (double val : row) { - sum += (Double.isNaN(val)) ? 0.0 : val; + sum += (Double.isNaN(val)) ? 0.0 : val; } } return sum; } /** - * returns the sum-product of this matrix with vector v - * @param v ~ vector - * - * @return - */ + * returns the sum-product of this matrix with vector v + * + * @param v + * ~ vector + * + * @return + */ @Override public double[] sumProduct(double[] v) { if (v.length != cols) { - throw new IllegalArgumentException("Vector and matrix do not have the same dimension! (" + v.length + " != " + cols + ")"); + throw new IllegalArgumentException( + "Vector and matrix do not have the same dimension! (" + + v.length + " != " + cols + ")"); } double[] result = new double[rows]; for (int i = 0; i < rows; i++) @@ -1408,7 +1440,7 @@ public class Matrix implements MatrixI double sum = 0; for (int j = 0; j < row.length; j++) { - sum += row[j] * v[j]; + sum += row[j] * v[j]; } result[i] = sum; } @@ -1416,20 +1448,20 @@ public class Matrix implements MatrixI } /** - * mirrors columns of the matrix - * - * @return - */ + * mirrors columns of the matrix + * + * @return + */ @Override public MatrixI mirrorCol() { double[][] result = new double[rows][cols]; for (int i = 0; i < rows; i++) { - int k = cols - 1; // reverse col + int k = cols - 1; // reverse col for (int j = 0; j < cols; j++) { - result[i][k--] = this.getValue(i,j); + result[i][k--] = this.getValue(i, j); } } MatrixI resultMatrix = new Matrix(result); diff --git a/src/jalview/math/MatrixI.java b/src/jalview/math/MatrixI.java index 7faac73..b932b33 100644 --- a/src/jalview/math/MatrixI.java +++ b/src/jalview/math/MatrixI.java @@ -61,10 +61,10 @@ public interface MatrixI void setValue(int i, int j, double d); /** - * Returns the matrix as a double[][] array - * - * @return - */ + * Returns the matrix as a double[][] array + * + * @return + */ double[][] asArray(); /** @@ -175,10 +175,11 @@ public interface MatrixI void multiply(double d); /** - * Add d to all entries of this matrix - * - * @param d ~ value to add - */ + * Add d to all entries of this matrix + * + * @param d + * ~ value to add + */ void add(double d); /** @@ -193,7 +194,7 @@ public interface MatrixI boolean equals(MatrixI m2, double delta); /** - * Returns a copy in which every value in the matrix is its absolute + * Returns a copy in which every value in the matrix is its absolute */ MatrixI absolute(); @@ -208,110 +209,122 @@ public interface MatrixI double[] meanCol(); /** - * Returns a flattened matrix containing the sum of each column - * - * @return - */ + * Returns a flattened matrix containing the sum of each column + * + * @return + */ double[] sumCol(); /** - * returns the mean value of the complete matrix - */ + * returns the mean value of the complete matrix + */ double mean(); /** - * fills up a diagonal matrix with its transposed copy - * !other side should be filled with either 0 or Double.NaN - */ + * fills up a diagonal matrix with its transposed copy !other side should be + * filled with either 0 or Double.NaN + */ void fillDiagonal(); /** - * counts the number of Double.NaN in the matrix - * - * @return - */ + * counts the number of Double.NaN in the matrix + * + * @return + */ int countNaN(); /** - * performs an element-wise addition of this matrix by another matrix - * !matrices have to be the same size - * @param m ~ other matrix - * - * @return - * @throws IllegalArgumentException - * if this and m do not have the same dimensions - */ + * performs an element-wise addition of this matrix by another matrix + * !matrices have to be the same size + * + * @param m + * ~ other matrix + * + * @return + * @throws IllegalArgumentException + * if this and m do not have the same dimensions + */ MatrixI add(MatrixI m); /** - * performs an element-wise subtraction of this matrix by another matrix - * !matrices have to be the same size - * @param m ~ other matrix - * - * @return - * @throws IllegalArgumentException - * if this and m do not have the same dimensions - */ + * performs an element-wise subtraction of this matrix by another matrix + * !matrices have to be the same size + * + * @param m + * ~ other matrix + * + * @return + * @throws IllegalArgumentException + * if this and m do not have the same dimensions + */ MatrixI subtract(MatrixI m); - + /** - * performs an element-wise multiplication of this matrix by another matrix ~ this * m - * !matrices have to be the same size - * @param m ~ other matrix - * - * @return - * @throws IllegalArgumentException - * if this and m do not have the same dimensions - */ + * performs an element-wise multiplication of this matrix by another matrix ~ + * this * m !matrices have to be the same size + * + * @param m + * ~ other matrix + * + * @return + * @throws IllegalArgumentException + * if this and m do not have the same dimensions + */ MatrixI elementwiseMultiply(MatrixI m); /** - * performs an element-wise division of this matrix by another matrix ~ this / m - * !matrices have to be the same size - * @param m ~ other matrix - * - * @return - * @throws IllegalArgumentException - * if this and m do not have the same dimensions - */ + * performs an element-wise division of this matrix by another matrix ~ this / + * m !matrices have to be the same size + * + * @param m + * ~ other matrix + * + * @return + * @throws IllegalArgumentException + * if this and m do not have the same dimensions + */ MatrixI elementwiseDivide(MatrixI m); /** - * calculates the root-mean-square for two matrices - * @param m ~ other matrix - * - * @return - */ + * calculates the root-mean-square for two matrices + * + * @param m + * ~ other matrix + * + * @return + */ double rmsd(MatrixI m); /** - * calculates the Frobenius norm of this matrix - * - * @return - */ + * calculates the Frobenius norm of this matrix + * + * @return + */ double norm(); - + /** - * returns the sum of all values in this matrix - * - * @return - */ + * returns the sum of all values in this matrix + * + * @return + */ double sum(); /** - * returns the sum-product of this matrix with vector v - * @param v ~ vector - * - * @return - * @throws IllegalArgumentException - * if this.cols and v do not have the same length - */ + * returns the sum-product of this matrix with vector v + * + * @param v + * ~ vector + * + * @return + * @throws IllegalArgumentException + * if this.cols and v do not have the same length + */ double[] sumProduct(double[] v); /** - * mirrors the columns of this matrix - * - * @return - */ + * mirrors the columns of this matrix + * + * @return + */ MatrixI mirrorCol(); } diff --git a/src/jalview/math/MiscMath.java b/src/jalview/math/MiscMath.java index b5218d5..eee7ef8 100755 --- a/src/jalview/math/MiscMath.java +++ b/src/jalview/math/MiscMath.java @@ -27,14 +27,17 @@ import java.util.Arrays; /** * A collection of miscellaneous mathematical operations + * * @AUTHOR MorellThomas */ public class MiscMath { /** - * prints an array - * @param m ~ array - */ + * prints an array + * + * @param m + * ~ array + */ public static void print(double[] m, String format) { System.out.print("[ "); @@ -46,39 +49,43 @@ public class MiscMath } /** - * calculates the mean of an array - * - * @param m ~ array - * @return - */ + * calculates the mean of an array + * + * @param m + * ~ array + * @return + */ public static double mean(double[] m) { double sum = 0; int nanCount = 0; for (int i = 0; i < m.length; i++) { - if (!Double.isNaN(m[i])) // ignore NaN values in the array + if (!Double.isNaN(m[i])) // ignore NaN values in the array { sum += m[i]; - } else { - nanCount++; + } + else + { + nanCount++; } } return sum / (double) (m.length - nanCount); } /** - * calculates the sum of an array - * - * @param m ~ array - * @return - */ + * calculates the sum of an array + * + * @param m + * ~ array + * @return + */ public static double sum(double[] m) { double sum = 0; for (int i = 0; i < m.length; i++) { - if (!Double.isNaN(m[i])) // ignore NaN values in the array + if (!Double.isNaN(m[i])) // ignore NaN values in the array { sum += m[i]; } @@ -87,14 +94,14 @@ public class MiscMath } /** - * calculates the square root of each element in an array - * - * @param m ~ array - * - * @return - * TODO - * make general with function passed -> apply function to each element - */ + * calculates the square root of each element in an array + * + * @param m + * ~ array + * + * @return TODO make general with function passed -> apply function to each + * element + */ public static double[] sqrt(double[] m) { double[] sqrts = new double[m.length]; @@ -106,16 +113,20 @@ public class MiscMath } /** - * calculate element wise multiplication of two arrays with the same length - * - * @param a ~ array - * @param b ~ array - * - * @return - */ - public static double[] elementwiseMultiply(byte[] a, double[] b) throws RuntimeException + * calculate element wise multiplication of two arrays with the same length + * + * @param a + * ~ array + * @param b + * ~ array + * + * @return + */ + public static double[] elementwiseMultiply(byte[] a, double[] b) + throws RuntimeException { - if (a.length != b.length) // throw exception if the arrays do not have the same length + if (a.length != b.length) // throw exception if the arrays do not have the + // same length { throw new SameLengthException(a.length, b.length); } @@ -126,9 +137,12 @@ public class MiscMath } return result; } - public static double[] elementwiseMultiply(double[] a, double[] b) throws RuntimeException + + public static double[] elementwiseMultiply(double[] a, double[] b) + throws RuntimeException { - if (a.length != b.length) // throw exception if the arrays do not have the same length + if (a.length != b.length) // throw exception if the arrays do not have the + // same length { throw new SameLengthException(a.length, b.length); } @@ -139,9 +153,12 @@ public class MiscMath } return result; } - public static byte[] elementwiseMultiply(byte[] a, byte[] b) throws RuntimeException + + public static byte[] elementwiseMultiply(byte[] a, byte[] b) + throws RuntimeException { - if (a.length != b.length) // throw exception if the arrays do not have the same length + if (a.length != b.length) // throw exception if the arrays do not have the + // same length { throw new SameLengthException(a.length, b.length); } @@ -152,6 +169,7 @@ public class MiscMath } return result; } + public static double[] elementwiseMultiply(double[] a, double b) { double[] result = new double[a.length]; @@ -163,16 +181,20 @@ public class MiscMath } /** - * calculate element wise division of two arrays ~ a / b - * - * @param a ~ array - * @param b ~ array - * - * @return - */ - public static double[] elementwiseDivide(double[] a, double[] b) throws RuntimeException + * calculate element wise division of two arrays ~ a / b + * + * @param a + * ~ array + * @param b + * ~ array + * + * @return + */ + public static double[] elementwiseDivide(double[] a, double[] b) + throws RuntimeException { - if (a.length != b.length) // throw exception if the arrays do not have the same length + if (a.length != b.length) // throw exception if the arrays do not have the + // same length { throw new SameLengthException(a.length, b.length); } @@ -185,16 +207,20 @@ public class MiscMath } /** - * calculate element wise addition of two arrays - * - * @param a ~ array - * @param b ~ array - * - * @return - */ - public static double[] elementwiseAdd(double[] a, double[] b) throws RuntimeException + * calculate element wise addition of two arrays + * + * @param a + * ~ array + * @param b + * ~ array + * + * @return + */ + public static double[] elementwiseAdd(double[] a, double[] b) + throws RuntimeException { - if (a.length != b.length) // throw exception if the arrays do not have the same length + if (a.length != b.length) // throw exception if the arrays do not have the + // same length { throw new SameLengthException(a.length, b.length); } @@ -206,6 +232,7 @@ public class MiscMath } return result; } + public static double[] elementwiseAdd(double[] a, double b) { double[] result = new double[a.length]; @@ -217,41 +244,59 @@ public class MiscMath } /** - * returns true if two arrays are element wise within a tolerance - * - * @param a ~ array - * @param b ~ array - * @param rtol ~ relative tolerance - * @param atol ~ absolute tolerance - * @param equalNAN ~ whether NaN at the same position return true - * - * @return - */ - public static boolean allClose(double[] a, double[] b, double rtol, double atol, boolean equalNAN) + * returns true if two arrays are element wise within a tolerance + * + * @param a + * ~ array + * @param b + * ~ array + * @param rtol + * ~ relative tolerance + * @param atol + * ~ absolute tolerance + * @param equalNAN + * ~ whether NaN at the same position return true + * + * @return + */ + public static boolean allClose(double[] a, double[] b, double rtol, + double atol, boolean equalNAN) { boolean areEqual = true; for (int i = 0; i < a.length; i++) { - if (equalNAN && (Double.isNaN(a[i]) && Double.isNaN(b[i]))) // if equalNAN == true -> skip the NaN pair + if (equalNAN && (Double.isNaN(a[i]) && Double.isNaN(b[i]))) // if equalNAN + // == true -> + // skip the + // NaN pair { - continue; + continue; } - if (Math.abs(a[i] - b[i]) > (atol + rtol * Math.abs(b[i]))) // check for the similarity condition -> if not met -> break and return false + if (Math.abs(a[i] - b[i]) > (atol + rtol * Math.abs(b[i]))) // check for + // the + // similarity + // condition + // -> if not + // met -> + // break and + // return + // false { - areEqual = false; - break; + areEqual = false; + break; } } return areEqual; } /** - * returns the index of the maximum and the maximum value of an array - * - * @param a ~ array - * - * @return - */ + * returns the index of the maximum and the maximum value of an array + * + * @param a + * ~ array + * + * @return + */ public static int[] findMax(int[] a) { int max = 0; @@ -260,25 +305,30 @@ public class MiscMath { if (a[i] > max) { - max = a[i]; - maxIndex = i; + max = a[i]; + maxIndex = i; } } - return new int[]{maxIndex, max}; + return new int[] { maxIndex, max }; } /** - * returns the dot product of two arrays - * @param a ~ array a - * @param b ~ array b - * - * @return - */ + * returns the dot product of two arrays + * + * @param a + * ~ array a + * @param b + * ~ array b + * + * @return + */ public static double dot(double[] a, double[] b) { if (a.length != b.length) { - throw new IllegalArgumentException(String.format("Vectors do not have the same length (%d, %d)!", a.length, b.length)); + throw new IllegalArgumentException( + String.format("Vectors do not have the same length (%d, %d)!", + a.length, b.length)); } double aibi = 0; @@ -290,11 +340,13 @@ public class MiscMath } /** - * returns the euklidian norm of the vector - * @param v ~ vector - * - * @return - */ + * returns the euklidian norm of the vector + * + * @param v + * ~ vector + * + * @return + */ public static double norm(double[] v) { double result = 0; @@ -302,15 +354,17 @@ public class MiscMath { result += Math.pow(i, 2); } - return Math.sqrt(result); + return Math.sqrt(result); } /** - * returns the number of NaN in the vector - * @param v ~ vector - * - * @return - */ + * returns the number of NaN in the vector + * + * @param v + * ~ vector + * + * @return + */ public static int countNaN(double[] v) { int cnt = 0; @@ -318,20 +372,21 @@ public class MiscMath { if (Double.isNaN(i)) { - cnt++; + cnt++; } } return cnt; } /** - * recursively calculates the permutations of total n items with r items per combination - * according to n!/(n-r)! by only multiplying the relevant terms - * @param n - * @param r - * - * @return permutations - */ + * recursively calculates the permutations of total n items with r items per + * combination according to n!/(n-r)! by only multiplying the relevant terms + * + * @param n + * @param r + * + * @return permutations + */ public static long permutations(int n, int r) { if (n < r) @@ -340,13 +395,14 @@ public class MiscMath long result = 1l; for (int i = 0; i < r; i++) { - result *= (n-i); + result *= (n - i); } return result; } /** * calculate all unique combinations of n elements into r sized groups + * * @param n * @param r * @@ -357,13 +413,14 @@ public class MiscMath int result = 1; for (int i = 0; i < r; i++) { - result *= (n-1); + result *= (n - 1); } return (int) (result / MiscMath.factorial(r)); } /** * calculate the factorial of n (n >= 0) + * * @param n * * @return diff --git a/src/jalview/project/Jalview2XML.java b/src/jalview/project/Jalview2XML.java index 2a2225e..90a12f2 100644 --- a/src/jalview/project/Jalview2XML.java +++ b/src/jalview/project/Jalview2XML.java @@ -2011,13 +2011,14 @@ public class Jalview2XML } /** - * Writes PaSiMap viewer attributes and computed values to an XML model object and - * adds it to the JalviewModel. Any exceptions are reported by logging. + * Writes PaSiMap viewer attributes and computed values to an XML model object + * and adds it to the JalviewModel. Any exceptions are reported by logging. * uses the functions from PCA */ protected void savePaSiMap(PaSiMapPanel panel, JalviewModel object) { - // TODO: this should be merged with above savePCAPanel - otherwise it is essentially redundant code + // TODO: this should be merged with above savePCAPanel - otherwise it is + // essentially redundant code try { PcaViewer viewer = new PcaViewer(); @@ -2107,6 +2108,7 @@ public class Jalview2XML Console.error("Error saving PaSiMap: " + t.getMessage()); } } + /** * Stores values from a matrix into an XML element, including (if present) the * D or E vectors @@ -6751,9 +6753,9 @@ public class Jalview2XML private boolean isPasimap(PcaViewer viewer) { - return viewer.getTitle().toLowerCase(Locale.ROOT) - .startsWith("pasimap"); + return viewer.getTitle().toLowerCase(Locale.ROOT).startsWith("pasimap"); } + /** * Loads any saved PaSiMAp viewers using the function from PCA * @@ -6777,7 +6779,7 @@ public class Jalview2XML viewer.isIncludeGappedColumns(), viewer.isMatchGaps(), viewer.isIncludeGaps(), viewer.isDenominateByShortestLength()); - */ + */ /* * create the panel (without computing the PaSiMAp) @@ -6804,7 +6806,8 @@ public class Jalview2XML PaSiMap pasimap = new PaSiMap(null, scoreModel, null); PcaDataType pasimapData = viewer.getPcaData(); - MatrixI pairwise = loadDoubleMatrix(pasimapData.getPairwiseMatrix()); + MatrixI pairwise = loadDoubleMatrix( + pasimapData.getPairwiseMatrix()); pasimap.setPairwiseScores(pairwise); MatrixI result = loadDoubleMatrix(pasimapData.getEigenMatrix()); diff --git a/src/jalview/renderer/AnnotationRenderer.java b/src/jalview/renderer/AnnotationRenderer.java index 7c9ecd7..b9411c3 100644 --- a/src/jalview/renderer/AnnotationRenderer.java +++ b/src/jalview/renderer/AnnotationRenderer.java @@ -1560,8 +1560,6 @@ public class AnnotationRenderer * {profile type, #values, total count, char1, pct1, char2, pct2...} */ int profl[] = getProfileFor(_aa, column); - - // just try to draw the logo if profl is not null if (profl != null && profl[2] != 0) @@ -1648,7 +1646,7 @@ public class AnnotationRenderer } else { - + colour = profcolour.findColour(dc[0], column, null); } diff --git a/src/jalview/renderer/ResidueShader.java b/src/jalview/renderer/ResidueShader.java index 91f38c5..511a55c 100644 --- a/src/jalview/renderer/ResidueShader.java +++ b/src/jalview/renderer/ResidueShader.java @@ -63,13 +63,14 @@ public class ResidueShader implements ResidueShaderI * the consensus data for each column */ private ProfilesI consensus; - + /* * the ss consensus data for each column for each source */ private Map ssConsensusProfileMap; + /* * if true, apply shading of colour by conservation */ @@ -158,7 +159,7 @@ public class ResidueShader implements ResidueShaderI public void setConsensus(ProfilesI cons) { consensus = cons; - + } /** @@ -303,7 +304,7 @@ public class ResidueShader implements ResidueShaderI return colour; } - + @Override public Color findSSColour(char symbol, int position) { diff --git a/src/jalview/schemes/ClustalxColourScheme.java b/src/jalview/schemes/ClustalxColourScheme.java index 04097a8..8e64f8f 100755 --- a/src/jalview/schemes/ClustalxColourScheme.java +++ b/src/jalview/schemes/ClustalxColourScheme.java @@ -364,62 +364,72 @@ public class ClustalxColourScheme extends ResidueColourScheme { return false; } + public String toRuleRep() { makeColours(); - HashMap cols=new HashMap(); - for (String res:ResidueProperties.aa) { + HashMap cols = new HashMap(); + for (String res : ResidueProperties.aa) + { StringBuilder sb = new StringBuilder(); - - int rnum=ResidueProperties.aaIndex[res.charAt(0)]; - if (rnum<0 || rnum>=residueColour.length) + + int rnum = ResidueProperties.aaIndex[res.charAt(0)]; + if (rnum < 0 || rnum >= residueColour.length) { continue; } - + ConsensusColour cc = residueColour[rnum]; - if (cc==null) + if (cc == null) { continue; } - //sb.append("Residue "+res+" ("+rnum+")"); - //sb.append("\t"); + // sb.append("Residue "+res+" ("+rnum+")"); + // sb.append("\t"); sb.append(cc.c.toString()); - double f=0; + double f = 0; sb.append("\t"); - for (Consensus cons: cc.cons) { - if (cons.threshold==0 || f!=cons.threshold) + for (Consensus cons : cc.cons) + { + if (cons.threshold == 0 || f != cons.threshold) { - if (f!=0) + if (f != 0) { - sb.append("}, {"); - } else { - sb.append("{"); + sb.append("}, {"); + } + else + { + sb.append("{"); } - sb.append(cons.threshold); - sb.append(","); - f=cons.threshold; - } else { + sb.append(cons.threshold); + sb.append(","); + f = cons.threshold; + } + else + { sb.append(","); } sb.append(cons.maskstr); } sb.append("}"); - String clxrep=sb.toString(); + String clxrep = sb.toString(); String xres = cols.get(clxrep); - if (xres==null) { xres = "";} - xres+=res; + if (xres == null) + { + xres = ""; + } + xres += res; cols.put(clxrep, xres); } StringBuilder sb = new StringBuilder(); - for (String clxrep:cols.keySet()) + for (String clxrep : cols.keySet()) { sb.append(cols.get(clxrep)); sb.append("\t"); sb.append(clxrep); sb.append("\n"); - + } return sb.toString(); } diff --git a/src/jalview/schemes/ResidueProperties.java b/src/jalview/schemes/ResidueProperties.java index 2fcb95f..9d83069 100755 --- a/src/jalview/schemes/ResidueProperties.java +++ b/src/jalview/schemes/ResidueProperties.java @@ -41,7 +41,7 @@ public class ResidueProperties public static final int[] nucleotideIndex; public static final int[] purinepyrimidineIndex; - + public static final int[] secondaryStructureIndex; public static final Map aa3Hash = new HashMap<>(); @@ -197,13 +197,13 @@ public class ResidueProperties purinepyrimidineIndex['N'] = 2; purinepyrimidineIndex['n'] = 2; } - + static { secondaryStructureIndex = new int[255]; for (int i = 0; i < 255; i++) { - secondaryStructureIndex[i] = 3; + secondaryStructureIndex[i] = 3; } secondaryStructureIndex['H'] = 0; @@ -398,12 +398,12 @@ public class ResidueProperties Color.white, // all other nucleotides Color.white // Gap }; - - //Secondary structure - public static final Color[] secondarystructure = { Color.red, // H - Color.green, // E - Color.gray // C - }; + + // Secondary structure + public static final Color[] secondarystructure = { Color.red, // H + Color.green, // E + Color.gray // C + }; // Zappo public static final Color[] zappo = { Color.pink, // A diff --git a/src/jalview/util/ArgParserUtils.java b/src/jalview/util/ArgParserUtils.java index a71b462..710c054 100644 --- a/src/jalview/util/ArgParserUtils.java +++ b/src/jalview/util/ArgParserUtils.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.util; import java.util.ArrayList; diff --git a/src/jalview/util/Constants.java b/src/jalview/util/Constants.java index 27513ab..f066892 100644 --- a/src/jalview/util/Constants.java +++ b/src/jalview/util/Constants.java @@ -28,19 +28,22 @@ import java.util.Map; */ public class Constants { - - //character used to represent secondary structures + + // character used to represent secondary structures public static final char HELIX = 'H'; + public static final char SHEET = 'E'; + public static final char COIL = 'C'; - //label in secondary structure annotation data model from 3d structures + // label in secondary structure annotation data model from 3d structures public static final String SS_ANNOTATION_LABEL = "Secondary Structure"; - - //label in secondary structure annotation data model from JPred - public static final String SS_ANNOTATION_FROM_JPRED_LABEL = "jnetpred"; - + + // label in secondary structure annotation data model from JPred + public static final String SS_ANNOTATION_FROM_JPRED_LABEL = "jnetpred"; + public static final Map SECONDARY_STRUCTURE_LABELS = new HashMap<>(); + static { SECONDARY_STRUCTURE_LABELS.put(SS_ANNOTATION_LABEL, "3D Structures"); SECONDARY_STRUCTURE_LABELS.put(SS_ANNOTATION_FROM_JPRED_LABEL, "JPred"); diff --git a/src/jalview/util/ErrorLog.java b/src/jalview/util/ErrorLog.java index c204783..651073f 100644 --- a/src/jalview/util/ErrorLog.java +++ b/src/jalview/util/ErrorLog.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.util; import java.lang.reflect.InvocationTargetException; @@ -17,11 +37,18 @@ public class ErrorLog private static String prefix = null; + private static boolean quiet = false; + public static void setHasConsole(boolean b) { hasConsole = b; } + public static void setQuiet(boolean b) + { + quiet = b; + } + public static void setPrefix(String s) { prefix = s; @@ -45,6 +72,10 @@ public class ErrorLog public static void println(String message0, boolean err, boolean thisHasConsole) { + if (!err && quiet) + { + return; + } String message = prefix == null ? message0 : prefix + message0; if (thisHasConsole && hasConsole) { diff --git a/src/jalview/util/HttpUtils.java b/src/jalview/util/HttpUtils.java index ec35948..1d9f8d0 100644 --- a/src/jalview/util/HttpUtils.java +++ b/src/jalview/util/HttpUtils.java @@ -30,6 +30,8 @@ import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; +import jalview.bin.Console; + public class HttpUtils { public final static String JALVIEWSCHEMEPREFIX = "jalview"; @@ -129,7 +131,9 @@ public class HttpUtils } /** - * wrapper to follow a URL connection ALLOWING redirects from http to https + * wrapper to return a new HttpURLConnection to a new URL when there is a + * redirect from http to https, otherwise return the unused original + * HttpURLConnection * * @param HttpURLConnection * conn0 @@ -139,34 +143,54 @@ public class HttpUtils throws IOException { URL url = conn0.getURL(); - if (url == null) + // we are only checking for a redirect from http to https otherwise the java + // connection will follow when called (if not unset) + if (url == null || !"http".equals(url.getProtocol()) + || !conn0.getInstanceFollowRedirects()) { - return null; + return conn0; } - HttpURLConnection conn = null; - int response = conn0.getResponseCode(); - boolean followed = false; - if (response >= 300 && response < 400 && conn0.getFollowRedirects()) + + // check the response code + HttpURLConnection checkConn = (HttpURLConnection) url.openConnection(); + httpURLConnectionCopyAttributes(conn0, checkConn); + + boolean redirectToHttps = false; + int response = checkConn.getResponseCode(); + checkConn.disconnect(); + if (response >= 300 && response < 400) { // we are only checking for a redirect from http to https - if ("http".equals(url.getProtocol())) + URL loc = new URL(conn0.getHeaderField("Location")); + if (loc != null && "https".equals(loc.getProtocol())) { - URL loc = new URL(conn0.getHeaderField("Location")); - if (loc != null && "https".equals(loc.getProtocol())) - { - conn = (HttpURLConnection) loc.openConnection(); - conn.setRequestMethod(conn0.getRequestMethod()); - conn.setDoInput(conn0.getDoInput()); - conn.setUseCaches(conn0.getUseCaches()); - conn.setConnectTimeout(conn0.getConnectTimeout()); - conn.setReadTimeout(conn0.getReadTimeout()); - conn.setInstanceFollowRedirects( - conn0.getInstanceFollowRedirects()); - followed = true; - } + redirectToHttps = true; + url = loc; } } - return followed && conn != null ? conn : conn0; + + if (!redirectToHttps) + { + return conn0; + } + + // We want to return an HttpURLConnection to the new https URL that is + // unconnected in case further manipulation of the request is required + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + httpURLConnectionCopyAttributes(conn0, conn); + return conn; + } + + private static void httpURLConnectionCopyAttributes( + HttpURLConnection conn0, HttpURLConnection conn1) + throws ProtocolException + { + conn1.setRequestMethod(conn0.getRequestMethod()); + conn1.setDoInput(conn0.getDoInput()); + conn1.setUseCaches(conn0.getUseCaches()); + conn1.setConnectTimeout(conn0.getConnectTimeout()); + conn1.setReadTimeout(conn0.getReadTimeout()); + conn1.setInstanceFollowRedirects(conn0.getInstanceFollowRedirects()); } /** @@ -180,8 +204,11 @@ public class HttpUtils { if (url == null) { + Console.debug("HttpUtils.openConnection(url) called with null url"); return null; } + Console.debug("HttpUtils.openConnection(url) called with url=" + + url.toString()); URLConnection conn = null; String protocol = url.getProtocol(); if ("http".equals(protocol) || "https".equals(protocol)) diff --git a/src/jalview/util/LaunchUtils.java b/src/jalview/util/LaunchUtils.java index 186745d..ccf9992 100644 --- a/src/jalview/util/LaunchUtils.java +++ b/src/jalview/util/LaunchUtils.java @@ -621,7 +621,7 @@ public class LaunchUtils } String v0 = getJarImplementationVersion(f0); String v1 = getJarImplementationVersion(f1); - syserr(true, false, + syserr(v0 != null && !v0.equals(v1), false, "Got launcher versions '" + v0 + "' and '" + v1 + "'"); return compareGetdownLauncherJarVersions(v0, v1); } diff --git a/src/jalview/util/UserAgent.java b/src/jalview/util/UserAgent.java index b488b00..f943e2e 100644 --- a/src/jalview/util/UserAgent.java +++ b/src/jalview/util/UserAgent.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.util; import jalview.bin.Cache; diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 94a1424..2d34db5 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -757,7 +757,7 @@ public abstract class AlignmentViewport protected AlignmentAnnotation quality; protected AlignmentAnnotation[] groupConsensus; - + protected AlignmentAnnotation[] groupSSConsensus; protected AlignmentAnnotation[] groupConservation; @@ -768,8 +768,6 @@ public abstract class AlignmentViewport protected ProfilesI hconsensus = null; protected Map hSSConsensusProfileMap = null; - - /** * results of cDNA complement consensus visible portion of view @@ -833,13 +831,13 @@ public abstract class AlignmentViewport { this.hconsensus = hconsensus; } - + @Override public void setSequenceSSConsensusHash(Map hSSConsensusProfileMap) { this.hSSConsensusProfileMap = hSSConsensusProfileMap; } - + @Override public void setComplementConsensusHash( Hashtable[] hconsensus) @@ -898,13 +896,11 @@ public abstract class AlignmentViewport return consensus; } - @Override public List getAlignmentSecondaryStructureConsensusAnnotation() { return secondaryStructureConsensus; } - @Override public AlignmentAnnotation getAlignmentGapAnnotation() @@ -997,9 +993,6 @@ public abstract class AlignmentViewport } } } - - - /** * trigger update of Secondary Structure consensus annotation @@ -1043,7 +1036,8 @@ public abstract class AlignmentViewport if (calculator .getRegisteredWorkersOfClass(SecondaryStructureConsensusThread.class) == null) { - calculator.registerWorker(new SecondaryStructureConsensusThread(this, ap)); + calculator.registerWorker( + new SecondaryStructureConsensusThread(this, ap)); } ap.adjustAnnotationHeight(); @@ -1162,7 +1156,7 @@ public abstract class AlignmentViewport * should consensus profile be rendered by default */ protected boolean showSequenceLogo = false; - + /** * should consensus profile be rendered normalised to row height */ @@ -1172,7 +1166,7 @@ public abstract class AlignmentViewport * should consensus histograms be rendered by default */ protected boolean showConsensusHistogram = true; - + /** * @return the showConsensusProfile */ @@ -1181,7 +1175,7 @@ public abstract class AlignmentViewport { return showSequenceLogo; } - + /** * @param showSequenceLogo * the new value @@ -1203,7 +1197,7 @@ public abstract class AlignmentViewport } this.showSequenceLogo = showSequenceLogo; } - + /** * @param showConsensusHistogram * the showConsensusHistogram to set @@ -1501,7 +1495,7 @@ public abstract class AlignmentViewport protected boolean showQuality = true; - protected boolean showConsensus = true; + protected boolean showConsensus = true; protected boolean showSSConsensus = true; @@ -2169,7 +2163,6 @@ public abstract class AlignmentViewport } } - /** * If this is a protein alignment and there are mappings to cDNA, adds the * cDNA consensus annotation and returns true, else returns false. diff --git a/src/jalview/viewmodel/PaSiMapModel.java b/src/jalview/viewmodel/PaSiMapModel.java index a0e5174..8568af4 100644 --- a/src/jalview/viewmodel/PaSiMapModel.java +++ b/src/jalview/viewmodel/PaSiMapModel.java @@ -69,8 +69,8 @@ public class PaSiMapModel * @param modelName * @param params */ - public PaSiMapModel(AlignmentViewport seqData, SequenceI[] sqs, boolean nuc, - ScoreModelI modelName) + public PaSiMapModel(AlignmentViewport seqData, SequenceI[] sqs, + boolean nuc, ScoreModelI modelName) { inputData = seqData; seqs = sqs; @@ -79,8 +79,8 @@ public class PaSiMapModel } /** - * Performs the PaSiMap calculation (in the same thread) and extracts result data - * needed for visualisation by PaSiMapPanel + * Performs the PaSiMap calculation (in the same thread) and extracts result + * data needed for visualisation by PaSiMapPanel */ public void calculate(PairwiseAlignPanel pap) { @@ -100,7 +100,8 @@ public class PaSiMapModel top = width; points = new Vector<>(); - Point[] scores = pasimap.getComponents(width - 1, width - 2, width - 3, 1); + Point[] scores = pasimap.getComponents(width - 1, width - 2, width - 3, + 1); for (int i = 0; i < height; i++) { @@ -142,8 +143,9 @@ public class PaSiMapModel /** * Updates the 3D coordinates for the list of points to the given dimensions. * Principal dimension is getTop(). Next greatest eigenvector is getTop()-1. - * Note - pasimap.getComponents starts counting the spectrum from rank-2 to zero, - * rather than rank-1, so getComponents(dimN ...) == updateRcView(dimN+1 ..) + * Note - pasimap.getComponents starts counting the spectrum from rank-2 to + * zero, rather than rank-1, so getComponents(dimN ...) == updateRcView(dimN+1 + * ..) * * @param dim1 * @param dim2 @@ -207,13 +209,15 @@ public class PaSiMapModel csv.append("\"" + seqs[s].getName() + "\""); if (!transformed) { - double[] fl = pasimap.component(s); - for (int d = fl.length - 1; d >= 0; d--) - { - csv.append(","); - csv.append(fl[d]); - } - } else { + double[] fl = pasimap.component(s); + for (int d = fl.length - 1; d >= 0; d--) + { + csv.append(","); + csv.append(fl[d]); + } + } + else + { Point p = points.get(s).coord; csv.append(",").append(p.x); csv.append(",").append(p.y); diff --git a/src/jalview/workers/SecondaryStructureConsensusThread.java b/src/jalview/workers/SecondaryStructureConsensusThread.java index 6629f27..259d96b 100644 --- a/src/jalview/workers/SecondaryStructureConsensusThread.java +++ b/src/jalview/workers/SecondaryStructureConsensusThread.java @@ -186,7 +186,8 @@ public class SecondaryStructureConsensusThread extends AlignCalcWorker */ protected List getSSConsensusAnnotation() { - return alignViewport.getAlignmentSecondaryStructureConsensusAnnotation(); + return alignViewport + .getAlignmentSecondaryStructureConsensusAnnotation(); } /** diff --git a/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java b/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java index c299a4d..1ead049 100644 --- a/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java +++ b/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.ws.datamodel.alphafold; import java.awt.Color; diff --git a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java index 397a84b..017a20f 100644 --- a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java +++ b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.ws.datamodel.alphafold; import java.io.File; diff --git a/test/jalview/analysis/AlignSeqTest.java b/test/jalview/analysis/AlignSeqTest.java index 03bdd0b..1f94601 100644 --- a/test/jalview/analysis/AlignSeqTest.java +++ b/test/jalview/analysis/AlignSeqTest.java @@ -76,16 +76,18 @@ public class AlignSeqTest String s = "aArRnNzZxX *.-?"; assertArrayEquals(expected, as.indexEncode(s)); } - @Test(groups= {"Functional"}) + + @Test(groups = { "Functional" }) public void testGlobalAlignment() { - String seq1="CAGCTAGCG",seq2="CCATACGA"; - Sequence sq1=new Sequence("s1",seq1),sq2=new Sequence("s2",seq2); + String seq1 = "CAGCTAGCG", seq2 = "CCATACGA"; + Sequence sq1 = new Sequence("s1", seq1), sq2 = new Sequence("s2", seq2); // AlignSeq doesn't report the unaligned regions at either end of sequences - //String alseq1="-CAGCTAGCG-",alseq2="CCA--TA-CGA"; + // String alseq1="-CAGCTAGCG-",alseq2="CCA--TA-CGA"; // so we check we have the aligned segment correct only - String alseq1="CAGCTAGCG",alseq2="CA--TA-CG"; - AlignSeq as = AlignSeq.doGlobalNWAlignment(sq1,sq2,AlignSeq.DNA); - assertEquals(as.getAStr1()+"\n"+as.getAStr2(),alseq1+"\n"+alseq2); + String alseq1 = "CAGCTAGCG", alseq2 = "CA--TA-CG"; + AlignSeq as = AlignSeq.doGlobalNWAlignment(sq1, sq2, AlignSeq.DNA); + assertEquals(as.getAStr1() + "\n" + as.getAStr2(), + alseq1 + "\n" + alseq2); } } diff --git a/test/jalview/analysis/AlignmentUtilsTests.java b/test/jalview/analysis/AlignmentUtilsTests.java index 1cf9a80..863356e 100644 --- a/test/jalview/analysis/AlignmentUtilsTests.java +++ b/test/jalview/analysis/AlignmentUtilsTests.java @@ -83,25 +83,29 @@ public class AlignmentUtilsTests { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); - - AlignmentAnnotation ann1 = new AlignmentAnnotation("Secondary Structure", "Secondary Structure", - new Annotation[] {}); - AlignmentAnnotation ann2 = new AlignmentAnnotation("jnetpred", "jnetpred", + + AlignmentAnnotation ann1 = new AlignmentAnnotation( + "Secondary Structure", "Secondary Structure", new Annotation[] {}); + AlignmentAnnotation ann2 = new AlignmentAnnotation("jnetpred", + "jnetpred", new Annotation[] {}); AlignmentAnnotation ann3 = new AlignmentAnnotation("Temp", "Temp", new Annotation[] {}); AlignmentAnnotation ann4 = new AlignmentAnnotation("Temp", "Temp", new Annotation[] {}); - - AlignmentAnnotation[] anns1 = new AlignmentAnnotation[] {ann1, ann3, ann4}; - AlignmentAnnotation[] anns2 = new AlignmentAnnotation[] {ann2, ann3, ann4}; - - AlignmentAnnotation[] anns3 = new AlignmentAnnotation[] {ann3, ann4}; - + AlignmentAnnotation[] anns1 = new AlignmentAnnotation[] { ann1, ann3, + ann4 }; + + AlignmentAnnotation[] anns2 = new AlignmentAnnotation[] { ann2, ann3, + ann4 }; + + AlignmentAnnotation[] anns3 = new AlignmentAnnotation[] { ann3, ann4 }; + AlignmentAnnotation[] anns4 = new AlignmentAnnotation[0]; - - AlignmentAnnotation[] anns5 = new AlignmentAnnotation[] {ann1, ann2, ann3, ann4}; + + AlignmentAnnotation[] anns5 = new AlignmentAnnotation[] { ann1, ann2, + ann3, ann4 }; } @Test(groups = { "Functional" }) @@ -2781,133 +2785,180 @@ public class AlignmentUtilsTests Assert.assertEquals(expectedSSPresent, AlignmentUtils.isSecondaryStructurePresent(annotations)); } - @DataProvider(name = "SecondaryStructureAnnotations") - public static Object[][] provideSecondaryStructureAnnotations() { - AlignmentAnnotation ann1 = new AlignmentAnnotation("Secondary Structure", "Secondary Structure", new Annotation[]{}); - AlignmentAnnotation ann2 = new AlignmentAnnotation("jnetpred", "jnetpred", new Annotation[]{}); - AlignmentAnnotation ann3 = new AlignmentAnnotation("Temp", "Temp", new Annotation[]{}); - AlignmentAnnotation ann4 = new AlignmentAnnotation("Temp", "Temp", new Annotation[]{}); - - List ssSources1 = new ArrayList<>(Arrays.asList("3D Structures")); - List ssSources2 = new ArrayList<>(Arrays.asList("JPred")); - List ssSources3 = new ArrayList<>(Arrays.asList("3D Structures", "JPred")); - List ssSources4 = new ArrayList<>(); - - return new Object[][]{ - {new AlignmentAnnotation[]{ann1, ann3, ann4}, true, ssSources1}, - {new AlignmentAnnotation[]{ann2, ann3, ann4}, true, ssSources2}, - {new AlignmentAnnotation[]{ann3, ann4}, false, ssSources4}, - {new AlignmentAnnotation[]{}, false, ssSources4}, - {new AlignmentAnnotation[]{ann1, ann2, ann3, ann4}, true, ssSources3} - }; - } - - @Test(dataProvider = "SecondaryStructureAnnotationColours") - public void testSecondaryStructureAnnotationColour(char symbol, Color expectedColor) { - Color actualColor = AlignmentUtils.getSecondaryStructureAnnotationColour(symbol); - Assert.assertEquals(actualColor, expectedColor); - } + @Test( + groups = "Functional", + dataProvider = "SecondaryStructureAnnotations") + public void testSecondaryStructurePresentAndSources( + AlignmentAnnotation[] annotations, boolean expectedSSPresent, + ArrayList expectedSSSources) + { + Assert.assertEquals(expectedSSPresent, + AlignmentUtils.isSecondaryStructurePresent(annotations)); + Assert.assertEquals(expectedSSSources, + AlignmentUtils.getSecondaryStructureSources(annotations)); + } - @DataProvider(name = "SecondaryStructureAnnotationColours") - public static Object[][] provideSecondaryStructureAnnotationColours() { - return new Object[][]{ - {'C', Color.gray}, - {'E', Color.green}, - {'H', Color.red}, - {'-', Color.gray} - }; - } - - @Test(dataProvider = "SSAnnotationPresence") - public void testIsSSAnnotationPresent(Map> annotations, boolean expectedPresence) { - boolean actualPresence = AlignmentUtils.isSSAnnotationPresent(annotations); - Assert.assertEquals(actualPresence, expectedPresence); - } + @DataProvider(name = "SecondaryStructureAnnotations") + public static Object[][] provideSecondaryStructureAnnotations() + { + AlignmentAnnotation ann1 = new AlignmentAnnotation( + "Secondary Structure", "Secondary Structure", + new Annotation[] {}); + AlignmentAnnotation ann2 = new AlignmentAnnotation("jnetpred", + "jnetpred", new Annotation[] {}); + AlignmentAnnotation ann3 = new AlignmentAnnotation("Temp", "Temp", + new Annotation[] {}); + AlignmentAnnotation ann4 = new AlignmentAnnotation("Temp", "Temp", + new Annotation[] {}); - @DataProvider(name = "SSAnnotationPresence") - public static Object[][] provideSSAnnotationPresence() { - Map> annotations1 = new HashMap<>(); - SequenceI seq1 = new Sequence("Seq1", "ASD---ASD---ASD", 37, 45); - List annotationsList1 = new ArrayList<>(); - annotationsList1.add(new AlignmentAnnotation("Secondary Structure", "Secondary Structure", new Annotation[]{})); - annotations1.put(seq1, annotationsList1); // Annotation present secondary structure for seq1 - - Map> annotations2 = new HashMap<>(); - SequenceI seq2 = new Sequence("Seq2", "ASD---ASD------", 37, 42); - List annotationsList2 = new ArrayList<>(); - annotationsList2.add(new AlignmentAnnotation("Other Annotation", "Other Annotation", new Annotation[]{})); - annotations2.put(seq2, annotationsList2); // Annotation not related to any of secondary structure for seq2 - - Map> annotations3 = new HashMap<>(); - // Empty annotation map - - Map> annotations4 = new HashMap<>(); - SequenceI seq4 = new Sequence("Seq4", "ASD---ASD---AS-", 37, 44); - List annotationsList4 = new ArrayList<>(); - annotationsList4.add(new AlignmentAnnotation("jnetpred", "jnetpred", new Annotation[]{})); - annotations4.put(seq4, annotationsList4); // Annotation present from JPred for seq4 - - - return new Object[][]{ - {annotations1, true}, // Annotations present secondary structure present - {annotations2, false}, // No annotations related to any of the secondary structure present - {annotations3, false}, // Empty annotation map - {annotations4, true}, // Annotations present from JPred secondary structure present - }; - } - - @Test - public void testGetSSSourceFromAnnotationDescription(AlignmentAnnotation[] annotations, String expectedSSSource) { - List actualSSSource = AlignmentUtils.extractSSSourceInAlignmentAnnotation(annotations); - Assert.assertEquals(actualSSSource, expectedSSSource); - } - - @DataProvider(name = "SSSourceFromAnnotationDescription") - public static Object[][] provideSSSourceFromAnnotationDescription() { - Map> annotations1 = new HashMap<>(); - SequenceI seq1 = new Sequence("Seq1", "ASD---ASD---ASD", 37, 45); - List annotationsList1 = new ArrayList<>(); - annotationsList1.add(new AlignmentAnnotation("jnetpred", "JPred Output", new Annotation[]{})); - annotations1.put(seq1, annotationsList1); // Annotation present from JPred for seq1 - - Map> annotations2 = new HashMap<>(); - SequenceI seq2 = new Sequence("Seq2", "ASD---ASD------", 37, 42); - List annotationsList2 = new ArrayList<>(); - annotationsList2.add(new AlignmentAnnotation("Secondary Structure", - "Secondary Structure for af-q43517-f1A", new Annotation[]{})); - annotations2.put(seq2, annotationsList2); // Annotation present secondary structure from Alphafold for seq2 - - Map> annotations3 = new HashMap<>(); - // Empty annotation map - - Map> annotations4 = new HashMap<>(); - SequenceI seq4 = new Sequence("Seq4", "ASD---ASD---AS-", 37, 44); - List annotationsList4 = new ArrayList<>(); - annotationsList4.add(new AlignmentAnnotation("Secondary Structure", - "Secondary Structure for 4zhpA", new Annotation[]{})); - annotations4.put(seq4, annotationsList4); // Annotation present secondary structure from pdb for seq4 - - Map> annotations5 = new HashMap<>(); - SequenceI seq5 = new Sequence("Seq5", "ASD---ASD---AS-", 37, 44); - List annotationsList5 = new ArrayList<>(); - annotationsList5.add(new AlignmentAnnotation("Secondary Structure", - "Secondary Structure for p09911_54-147__3a7wzn.1.p3502557454997462030P", - new Annotation[]{})); - annotations5.put(seq5, annotationsList5); // Annotation present secondary structure from Swiss model for seq5 - - - //JPred Output - JPred - //Secondary Structure for af-q43517-f1A - Alphafold - //Secondary Structure for 4zhpA - Experimental - //Secondary Structure for p09911_54-147__3a7wzn.1.p3502557454997462030P - Swiss Model - - return new Object[][]{ - {annotations1, "JPred"}, - {annotations2, "Alphafold"}, - {annotations3, null}, - {annotations4, "PDB"}, - {annotations5, "Swiss Model"} - }; - } + List ssSources1 = new ArrayList<>( + Arrays.asList("3D Structures")); + List ssSources2 = new ArrayList<>(Arrays.asList("JPred")); + List ssSources3 = new ArrayList<>( + Arrays.asList("3D Structures", "JPred")); + List ssSources4 = new ArrayList<>(); + + return new Object[][] { + { new AlignmentAnnotation[] + { ann1, ann3, ann4 }, true, ssSources1 }, + { new AlignmentAnnotation[] + { ann2, ann3, ann4 }, true, ssSources2 }, + { new AlignmentAnnotation[] + { ann3, ann4 }, false, ssSources4 }, + { new AlignmentAnnotation[] {}, false, ssSources4 }, + { new AlignmentAnnotation[] + { ann1, ann2, ann3, ann4 }, true, ssSources3 } }; + } + + @Test(dataProvider = "SecondaryStructureAnnotationColours") + public void testSecondaryStructureAnnotationColour(char symbol, + Color expectedColor) + { + Color actualColor = AlignmentUtils + .getSecondaryStructureAnnotationColour(symbol); + Assert.assertEquals(actualColor, expectedColor); + } + + @DataProvider(name = "SecondaryStructureAnnotationColours") + public static Object[][] provideSecondaryStructureAnnotationColours() + { + return new Object[][] { { 'C', Color.gray }, { 'E', Color.green }, + { 'H', Color.red }, + { '-', Color.gray } }; + } + + @Test(dataProvider = "SSAnnotationPresence") + public void testIsSSAnnotationPresent( + Map> annotations, + boolean expectedPresence) + { + boolean actualPresence = AlignmentUtils + .isSSAnnotationPresent(annotations); + Assert.assertEquals(actualPresence, expectedPresence); + } + + @DataProvider(name = "SSAnnotationPresence") + public static Object[][] provideSSAnnotationPresence() + { + Map> annotations1 = new HashMap<>(); + SequenceI seq1 = new Sequence("Seq1", "ASD---ASD---ASD", 37, 45); + List annotationsList1 = new ArrayList<>(); + annotationsList1.add(new AlignmentAnnotation("Secondary Structure", + "Secondary Structure", new Annotation[] {})); + annotations1.put(seq1, annotationsList1); // Annotation present secondary + // structure for seq1 + + Map> annotations2 = new HashMap<>(); + SequenceI seq2 = new Sequence("Seq2", "ASD---ASD------", 37, 42); + List annotationsList2 = new ArrayList<>(); + annotationsList2.add(new AlignmentAnnotation("Other Annotation", + "Other Annotation", new Annotation[] {})); + annotations2.put(seq2, annotationsList2); // Annotation not related to any + // of secondary structure for seq2 + + Map> annotations3 = new HashMap<>(); + // Empty annotation map + + Map> annotations4 = new HashMap<>(); + SequenceI seq4 = new Sequence("Seq4", "ASD---ASD---AS-", 37, 44); + List annotationsList4 = new ArrayList<>(); + annotationsList4.add(new AlignmentAnnotation("jnetpred", "jnetpred", + new Annotation[] {})); + annotations4.put(seq4, annotationsList4); // Annotation present from JPred + // for seq4 + + return new Object[][] { { annotations1, true }, // Annotations present + // secondary structure + // present + { annotations2, false }, // No annotations related to any of the + // secondary structure present + { annotations3, false }, // Empty annotation map + { annotations4, true }, // Annotations present from JPred secondary + // structure present + }; + } + + @Test + public void testGetSSSourceFromAnnotationDescription( + AlignmentAnnotation[] annotations, String expectedSSSource) + { + List actualSSSource = AlignmentUtils + .extractSSSourceInAlignmentAnnotation(annotations); + Assert.assertEquals(actualSSSource, expectedSSSource); + } + + @DataProvider(name = "SSSourceFromAnnotationDescription") + public static Object[][] provideSSSourceFromAnnotationDescription() + { + Map> annotations1 = new HashMap<>(); + SequenceI seq1 = new Sequence("Seq1", "ASD---ASD---ASD", 37, 45); + List annotationsList1 = new ArrayList<>(); + annotationsList1.add(new AlignmentAnnotation("jnetpred", "JPred Output", + new Annotation[] {})); + annotations1.put(seq1, annotationsList1); // Annotation present from JPred + // for seq1 + + Map> annotations2 = new HashMap<>(); + SequenceI seq2 = new Sequence("Seq2", "ASD---ASD------", 37, 42); + List annotationsList2 = new ArrayList<>(); + annotationsList2.add(new AlignmentAnnotation("Secondary Structure", + "Secondary Structure for af-q43517-f1A", new Annotation[] {})); + annotations2.put(seq2, annotationsList2); // Annotation present secondary + // structure from Alphafold for + // seq2 + + Map> annotations3 = new HashMap<>(); + // Empty annotation map + + Map> annotations4 = new HashMap<>(); + SequenceI seq4 = new Sequence("Seq4", "ASD---ASD---AS-", 37, 44); + List annotationsList4 = new ArrayList<>(); + annotationsList4.add(new AlignmentAnnotation("Secondary Structure", + "Secondary Structure for 4zhpA", new Annotation[] {})); + annotations4.put(seq4, annotationsList4); // Annotation present secondary + // structure from pdb for seq4 + + Map> annotations5 = new HashMap<>(); + SequenceI seq5 = new Sequence("Seq5", "ASD---ASD---AS-", 37, 44); + List annotationsList5 = new ArrayList<>(); + annotationsList5.add(new AlignmentAnnotation("Secondary Structure", + "Secondary Structure for p09911_54-147__3a7wzn.1.p3502557454997462030P", + new Annotation[] {})); + annotations5.put(seq5, annotationsList5); // Annotation present secondary + // structure from Swiss model for + // seq5 + + // JPred Output - JPred + // Secondary Structure for af-q43517-f1A - Alphafold + // Secondary Structure for 4zhpA - Experimental + // Secondary Structure for p09911_54-147__3a7wzn.1.p3502557454997462030P - + // Swiss Model + + return new Object[][] { { annotations1, "JPred" }, + { annotations2, "Alphafold" }, + { annotations3, null }, + { annotations4, "PDB" }, + { annotations5, "Swiss Model" } }; + } } diff --git a/test/jalview/analysis/scoremodels/ScoreModelsTest.java b/test/jalview/analysis/scoremodels/ScoreModelsTest.java index d0a8047..f82a18a 100644 --- a/test/jalview/analysis/scoremodels/ScoreModelsTest.java +++ b/test/jalview/analysis/scoremodels/ScoreModelsTest.java @@ -83,7 +83,7 @@ public class ScoreModelsTest assertFalse(sm instanceof PairwiseScoreModelI); assertTrue(sm instanceof DistanceScoreModel); assertEquals(sm.getName(), "Sequence Feature Similarity"); - + sm = models.next(); assertFalse(sm instanceof SimilarityScoreModel); assertFalse(sm instanceof PairwiseScoreModelI); diff --git a/test/jalview/analysis/scoremodels/SecondaryStructureDistanceModelTest.java b/test/jalview/analysis/scoremodels/SecondaryStructureDistanceModelTest.java index f32be37..03dcdc7 100644 --- a/test/jalview/analysis/scoremodels/SecondaryStructureDistanceModelTest.java +++ b/test/jalview/analysis/scoremodels/SecondaryStructureDistanceModelTest.java @@ -48,7 +48,7 @@ import org.testng.annotations.Test; // This class tests methods in Class SecondaryStructureDistanceModel public class SecondaryStructureDistanceModelTest { - + /** * Verify computed distances of sequences with gap */ @@ -62,7 +62,7 @@ public class SecondaryStructureDistanceModelTest ScoreModelI sm = new SecondaryStructureDistanceModel(); sm = ScoreModels.getInstance().getScoreModel(sm.getName(), af.alignPanel); - + /* * feature distance model always normalises by region width * gap-gap is always included (but scores zero) @@ -73,27 +73,28 @@ public class SecondaryStructureDistanceModelTest * include gaps * score = 0 + 0 + 1 + 0 = 1/4 */ - SimilarityParamsI params = new SimilarityParams(false, true, true, true); + SimilarityParamsI params = new SimilarityParams(false, true, true, + true); params.setSecondaryStructureSource("3D Structures"); MatrixI distances = sm.findDistances(view, params); assertEquals(distances.getValue(0, 0), 1d); assertEquals(distances.getValue(1, 1), 1d); - assertEquals(distances.getValue(0, 1), 0d); + assertEquals(distances.getValue(0, 1), 0d); assertEquals(distances.getValue(1, 0), 0d); - + /* * exclude gaps * score = 0 + 0 + 0 + 0 = 0/4 */ - - SimilarityParamsI params2 = new SimilarityParams(false, true, false, true); + + SimilarityParamsI params2 = new SimilarityParams(false, true, false, + true); params2.setSecondaryStructureSource("3D Structures"); MatrixI distances2 = sm.findDistances(view, params2); - assertEquals(distances2.getValue(0, 1), 0d); + assertEquals(distances2.getValue(0, 1), 0d); assertEquals(distances2.getValue(1, 0), 0d); } - - + /** * Verify computed distances of sequences with gap */ @@ -107,7 +108,7 @@ public class SecondaryStructureDistanceModelTest ScoreModelI sm = new SecondaryStructureDistanceModel(); sm = ScoreModels.getInstance().getScoreModel(sm.getName(), af.alignPanel); - + /* * feature distance model always normalises by region width * gap-gap is always included (but scores zero) @@ -118,27 +119,28 @@ public class SecondaryStructureDistanceModelTest * include gaps * score = 0 + 0 + 2 + 2 = 2/4 */ - SimilarityParamsI params = new SimilarityParams(false, true, true, true); + SimilarityParamsI params = new SimilarityParams(false, true, true, + true); params.setSecondaryStructureSource("3D Structures"); MatrixI distances = sm.findDistances(view, params); assertEquals(distances.getValue(0, 0), 1d); assertEquals(distances.getValue(1, 1), 1d); - assertEquals(distances.getValue(0, 1), 0d); + assertEquals(distances.getValue(0, 1), 0d); assertEquals(distances.getValue(1, 0), 0d); - + /* * exclude gaps * score = 0 + 0 + 2 + 2 = 2/4 */ - - SimilarityParamsI params2 = new SimilarityParams(false, true, false, true); + + SimilarityParamsI params2 = new SimilarityParams(false, true, false, + true); params2.setSecondaryStructureSource("3D Structures"); MatrixI distances2 = sm.findDistances(view, params2); - assertEquals(distances2.getValue(0, 1), 0d); + assertEquals(distances2.getValue(0, 1), 0d); assertEquals(distances2.getValue(1, 0), 0d); } - /** * Verify computed distances of sequences with gap */ @@ -152,7 +154,7 @@ public class SecondaryStructureDistanceModelTest ScoreModelI sm = new SecondaryStructureDistanceModel(); sm = ScoreModels.getInstance().getScoreModel(sm.getName(), af.alignPanel); - + /* * feature distance model always normalises by region width * gap-gap is always included (but scores zero) @@ -163,28 +165,28 @@ public class SecondaryStructureDistanceModelTest * include gaps * score = 0 + 0 + 2 + 2 = 2/4 */ - SimilarityParamsI params = new SimilarityParams(false, true, true, true); + SimilarityParamsI params = new SimilarityParams(false, true, true, + true); params.setSecondaryStructureSource("3D Structures"); MatrixI distances = sm.findDistances(view, params); assertEquals(distances.getValue(0, 0), 1d); assertEquals(distances.getValue(1, 1), 1d); - assertEquals(distances.getValue(0, 1), 0d); + assertEquals(distances.getValue(0, 1), 0d); assertEquals(distances.getValue(1, 0), 0d); - + /* * exclude gaps * score = 0 + 0 + 2 + 2 = 2/4 */ - - SimilarityParamsI params2 = new SimilarityParams(false, true, false, true); + + SimilarityParamsI params2 = new SimilarityParams(false, true, false, + true); params2.setSecondaryStructureSource("3D Structures"); MatrixI distances2 = sm.findDistances(view, params2); - assertEquals(distances2.getValue(0, 1), 0d); + assertEquals(distances2.getValue(0, 1), 0d); assertEquals(distances2.getValue(1, 0), 0d); } - - /** *
        * Set up
    @@ -214,18 +216,17 @@ public class SecondaryStructureDistanceModelTest
                 new SequenceFeature("metal", null, 1, 4, 0f, null));
         s2.addSequenceFeature(
                 new SequenceFeature("Pfam", null, 1, 4, 0f, null));
    -    
    -    
    +
         /*
          * Set up secondary structure annotations
          */
    -    Annotation ssE = new Annotation("","",'E',0);
    -    Annotation ssH = new Annotation("","",'H',0);
    -    Annotation ssC = new Annotation(".","",' ',0);
    -    
    +    Annotation ssE = new Annotation("", "", 'E', 0);
    +    Annotation ssH = new Annotation("", "", 'H', 0);
    +    Annotation ssC = new Annotation(".", "", ' ', 0);
    +
         Annotation[] anns1;
         Annotation[] anns2;
    -    
    +
         /* All secondary structure annotations are similar for each column
          * Set up
         *   column      1 2 3 4 
    @@ -235,13 +236,14 @@ public class SecondaryStructureDistanceModelTest
         *        seq s2 F S J L
         *        	 ss E H S E
         */
    -    if(similar == "All Similar") {
    -    
    -    	anns1 = new Annotation[] { ssE, ssH, ssC, ssE};
    -    	anns2 = new Annotation[] { ssE, ssH, ssC, ssE};
    -    
    +    if (similar == "All Similar")
    +    {
    +
    +      anns1 = new Annotation[] { ssE, ssH, ssC, ssE };
    +      anns2 = new Annotation[] { ssE, ssH, ssC, ssE };
    +
         }
    -    
    +
         /* All secondary structure annotations are dissimilar for each column
          * Set up
          *   column      1 2 3 4 
    @@ -251,13 +253,14 @@ public class SecondaryStructureDistanceModelTest
          *        seq s2 F S J L
          *        	  ss H E E C
          */
    -    else if(similar == "Not Similar") {
    -        
    -    	anns1 = new Annotation[] { ssE, ssE, ssC, ssE};
    -    	anns2 = new Annotation[] { ssH, ssH, ssE, ssC};
    -    
    +    else if (similar == "Not Similar")
    +    {
    +
    +      anns1 = new Annotation[] { ssE, ssE, ssC, ssE };
    +      anns2 = new Annotation[] { ssH, ssH, ssE, ssC };
    +
         }
    -    
    +
         /* All secondary structure annotations are dissimilar for each column
          * Set up
          *   column      1 2 3 4 
    @@ -267,13 +270,14 @@ public class SecondaryStructureDistanceModelTest
          *        seq s2 F S J L
          *            ss H E E C
          */
    -    else if(similar == "With Coil") {
    -        
    -      anns1 = new Annotation[] { ssE, ssE, null, ssE};
    -      anns2 = new Annotation[] { ssH, ssH, ssE, null};
    -    
    +    else if (similar == "With Coil")
    +    {
    +
    +      anns1 = new Annotation[] { ssE, ssE, null, ssE };
    +      anns2 = new Annotation[] { ssH, ssH, ssE, null };
    +
         }
    -    
    +
         /*  Set up
          *   column      1 2 3 4 
          *        seq s1 F R K S
    @@ -282,28 +286,27 @@ public class SecondaryStructureDistanceModelTest
          *        seq s2 F S J L
          *        	  ss H E E C
          */
    -    else {
    -    	
    -    	anns1 = new Annotation[] { ssH, ssE, ssC, ssE};
    -    	anns2 = new Annotation[] { ssH, ssE, ssE, ssC};
    +    else
    +    {
    +
    +      anns1 = new Annotation[] { ssH, ssE, ssC, ssE };
    +      anns2 = new Annotation[] { ssH, ssE, ssE, ssC };
         }
    -    
    -    
    -    AlignmentAnnotation ann1 = new AlignmentAnnotation("Secondary Structure",
    -            "Secondary Structure", anns1);
    -    AlignmentAnnotation ann2 = new AlignmentAnnotation("Secondary Structure",
    -            "Secondary Structure", anns2);
    -    
    +
    +    AlignmentAnnotation ann1 = new AlignmentAnnotation(
    +            "Secondary Structure", "Secondary Structure", anns1);
    +    AlignmentAnnotation ann2 = new AlignmentAnnotation(
    +            "Secondary Structure", "Secondary Structure", anns2);
    +
         s1.addAlignmentAnnotation(ann1);
    -    s2.addAlignmentAnnotation(ann2);    
    -    
    +    s2.addAlignmentAnnotation(ann2);
    +
         AlignmentI al = new Alignment(new SequenceI[] { s1, s2 });
         AlignFrame af = new AlignFrame(al, 300, 300);
         af.setShowSeqFeatures(true);
         af.getFeatureRenderer().findAllFeatures(true);
         return af;
       }
    -  
     
       /**
        * 
    @@ -320,7 +323,7 @@ public class SecondaryStructureDistanceModelTest
        */
       protected AlignFrame setupAlignmentViewWithGap()
       {
    -    
    +
         SequenceI s1 = new Sequence("s1", "FR S");
         SequenceI s2 = new Sequence("s2", "FSJL");
     
    @@ -334,39 +337,39 @@ public class SecondaryStructureDistanceModelTest
                 new SequenceFeature("metal", null, 1, 4, 0f, null));
         s2.addSequenceFeature(
                 new SequenceFeature("Pfam", null, 1, 4, 0f, null));
    -    
    -    
    -    Annotation ssE = new Annotation("","",'E',0);
    -    Annotation ssH = new Annotation("","",'H',0);
    -    Annotation ssC = new Annotation(".","",' ',0);
    -    
    +
    +    Annotation ssE = new Annotation("", "", 'E', 0);
    +    Annotation ssH = new Annotation("", "", 'H', 0);
    +    Annotation ssC = new Annotation(".", "", ' ', 0);
    +
         Annotation[] anns1;
         Annotation[] anns2;
    -    	
    -    anns1 = new Annotation[] { ssH, ssE, ssC};
    -    anns2 = new Annotation[] { ssH, ssE, ssE, ssC};    
    -    
    -    AlignmentAnnotation ann1 = new AlignmentAnnotation("Secondary Structure",
    -            "Secondary Structure", anns1);
    -    AlignmentAnnotation ann2 = new AlignmentAnnotation("Secondary Structure",
    -            "Secondary Structure", anns2);
    -    
    +
    +    anns1 = new Annotation[] { ssH, ssE, ssC };
    +    anns2 = new Annotation[] { ssH, ssE, ssE, ssC };
    +
    +    AlignmentAnnotation ann1 = new AlignmentAnnotation(
    +            "Secondary Structure", "Secondary Structure", anns1);
    +    AlignmentAnnotation ann2 = new AlignmentAnnotation(
    +            "Secondary Structure", "Secondary Structure", anns2);
    +
         s1.addAlignmentAnnotation(ann1);
    -    s2.addAlignmentAnnotation(ann2);    
    -        
    +    s2.addAlignmentAnnotation(ann2);
    +
         AlignmentI al = new Alignment(new SequenceI[] { s1, s2 });
         AlignFrame af = new AlignFrame(al, 300, 300);
         af.setShowSeqFeatures(true);
         af.getFeatureRenderer().findAllFeatures(true);
    -    
    +
         return af;
       }
    -  
    -  protected AlignFrame setupAlignmentViewWithoutSS(String type) {
    -    
    +
    +  protected AlignFrame setupAlignmentViewWithoutSS(String type)
    +  {
    +
         SequenceI s1 = new Sequence("s1", "FR S");
         SequenceI s2 = new Sequence("s2", "FSJL");
    -    
    +
         s1.addSequenceFeature(
                 new SequenceFeature("chain", null, 1, 3, 0f, null));
         s1.addSequenceFeature(
    @@ -377,60 +380,61 @@ public class SecondaryStructureDistanceModelTest
                 new SequenceFeature("metal", null, 1, 4, 0f, null));
         s2.addSequenceFeature(
                 new SequenceFeature("Pfam", null, 1, 4, 0f, null));
    -    
    -    if(!type.equals("both")) {    
    -      Annotation ssE = new Annotation("","",'E',0);
    -      Annotation ssH = new Annotation("","",'H',0);
    -      Annotation ssC = new Annotation(".","",' ',0);
    -      
    +
    +    if (!type.equals("both"))
    +    {
    +      Annotation ssE = new Annotation("", "", 'E', 0);
    +      Annotation ssH = new Annotation("", "", 'H', 0);
    +      Annotation ssC = new Annotation(".", "", ' ', 0);
    +
           Annotation[] anns1;
    -        
    -      anns1 = new Annotation[] { ssH, ssE, ssC};
    -          
    -      AlignmentAnnotation ann1 = new AlignmentAnnotation("Secondary Structure",
    -              "Secondary Structure", anns1);    
    -  
    -      s1.addAlignmentAnnotation(ann1);    
    +
    +      anns1 = new Annotation[] { ssH, ssE, ssC };
    +
    +      AlignmentAnnotation ann1 = new AlignmentAnnotation(
    +              "Secondary Structure", "Secondary Structure", anns1);
    +
    +      s1.addAlignmentAnnotation(ann1);
         }
    -    
    +
         AlignmentI al = new Alignment(new SequenceI[] { s1, s2 });
         AlignFrame af = new AlignFrame(al, 300, 300);
         af.setShowSeqFeatures(true);
         af.getFeatureRenderer().findAllFeatures(true);
         return af;
       }
    -  
    -  
    +
       @DataProvider(name = "testData")
    -  public Object[][] testData() {
    -      return new Object[][] {
    -              {"All Similar", 1d, 1d, 0d, 0d / 4},
    -              {"Partially Similar", 1d, 1d, 0d, 0d},
    -              {"Not Similar", 1d, 1d, 0d, 0d},
    -              {"With Coil", 1d, 1d, 0d, 0d},
    -      };
    +  public Object[][] testData()
    +  {
    +    return new Object[][] { { "All Similar", 1d, 1d, 0d, 0d / 4 },
    +        { "Partially Similar", 1d, 1d, 0d, 0d },
    +        { "Not Similar", 1d, 1d, 0d, 0d },
    +        { "With Coil", 1d, 1d, 0d, 0d }, };
       }
     
       @Test(dataProvider = "testData")
    -  public void testFindDistances(String scenario, double expectedValue00, double expectedValue11,
    -                                 double expectedValue01, double expectedValue10) {
    -      AlignFrame af = setupAlignmentView(scenario);
    -      AlignViewport viewport = af.getViewport();
    -      AlignmentView view = viewport.getAlignmentView(false);
    -
    -      ScoreModelI sm = new SecondaryStructureDistanceModel();
    -      sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
    -              af.alignPanel);
    -
    -      SimilarityParamsI params = new SimilarityParams(false, true, true, true);
    -      params.setSecondaryStructureSource("3D Structures");
    -      MatrixI distances = sm.findDistances(view, params);
    -
    -      assertEquals(distances.getValue(0, 0), expectedValue00);
    -      assertEquals(distances.getValue(1, 1), expectedValue11);
    -      assertEquals(distances.getValue(0, 1), expectedValue01);
    -      assertEquals(distances.getValue(1, 0), expectedValue10);
    +  public void testFindDistances(String scenario, double expectedValue00,
    +          double expectedValue11, double expectedValue01,
    +          double expectedValue10)
    +  {
    +    AlignFrame af = setupAlignmentView(scenario);
    +    AlignViewport viewport = af.getViewport();
    +    AlignmentView view = viewport.getAlignmentView(false);
    +
    +    ScoreModelI sm = new SecondaryStructureDistanceModel();
    +    sm = ScoreModels.getInstance().getScoreModel(sm.getName(),
    +            af.alignPanel);
    +
    +    SimilarityParamsI params = new SimilarityParams(false, true, true,
    +            true);
    +    params.setSecondaryStructureSource("3D Structures");
    +    MatrixI distances = sm.findDistances(view, params);
    +
    +    assertEquals(distances.getValue(0, 0), expectedValue00);
    +    assertEquals(distances.getValue(1, 1), expectedValue11);
    +    assertEquals(distances.getValue(0, 1), expectedValue01);
    +    assertEquals(distances.getValue(1, 0), expectedValue10);
       }
     
    -  
     }
    diff --git a/test/jalview/commands/EditCommandTest.java b/test/jalview/commands/EditCommandTest.java
    index 1255c58..2e36111 100644
    --- a/test/jalview/commands/EditCommandTest.java
    +++ b/test/jalview/commands/EditCommandTest.java
    @@ -1182,12 +1182,14 @@ public class EditCommandTest
         assertEquals(10, sf.getBegin());
         assertEquals(11, sf.getEnd());
       }
    +
       private SequenceI mkDs(SequenceI as)
       {
         SequenceI ds = as.createDatasetSequence();
         ds.setSequence(ds.getSequenceAsString().toUpperCase(Locale.ROOT));
         return ds;
       }
    +
       /**
        * Test that mimics 'remove all gapped columns' action. This generates a
        * series Delete Gap edits that each act on all sequences that share a gapped
    @@ -1210,35 +1212,38 @@ public class EditCommandTest
          * and check we are preserving data - if the calls below fail, something has broken the Jalview dataset derivation process
          */
         assertEquals("ABCDEF", seq1.getDatasetSequence().getSequenceAsString());
    -    assertEquals(original1,seq1.getSequenceAsString());
    -    SequenceI seq2 = new Sequence("sq2",original2);
    +    assertEquals(original1, seq1.getSequenceAsString());
    +    SequenceI seq2 = new Sequence("sq2", original2);
         SequenceI ds2 = mkDs(seq2);
         SequenceI seq3 = new Sequence("sq3", original3);
         SequenceI ds3 = mkDs(seq3);
    -    List sqs = Arrays.asList( seq1, seq2, seq3 );
    +    List sqs = Arrays.asList(seq1, seq2, seq3);
         Alignment al = new Alignment(sqs.toArray(new SequenceI[0]));
    -    EditCommand lefj = new JustifyLeftOrRightCommand("Left J", true, sqs, 1, 7, al);
    +    EditCommand lefj = new JustifyLeftOrRightCommand("Left J", true, sqs, 1,
    +            7, al);
         String exp = "-ABcD---EF";
         // check without case conservation
    -    assertEquals(exp.toUpperCase(Locale.ROOT),seq1.getSequenceAsString().toUpperCase(Locale.ROOT));
    +    assertEquals(exp.toUpperCase(Locale.ROOT),
    +            seq1.getSequenceAsString().toUpperCase(Locale.ROOT));
         // check case
    -    assertEquals(exp,seq1.getSequenceAsString());
    +    assertEquals(exp, seq1.getSequenceAsString());
         // and other seqs
    -    assertEquals("-GHiJ---",seq2.getSequenceAsString());
    -    assertEquals("-MNoP---Q",seq3.getSequenceAsString());
    -    lefj.undoCommand(new AlignmentI[] { al});
    -    assertEquals(original3,seq3.getSequenceAsString());
    -    assertEquals(original1,seq1.getSequenceAsString());
    -    assertEquals(original2,seq2.getSequenceAsString());
    -    
    -    EditCommand righj = new JustifyLeftOrRightCommand("Right J", false, sqs, 2, 7, al);
    -    assertEquals("----ABcDEF",seq1.getSequenceAsString());
    -    assertEquals("-G---HiJ",seq2.getSequenceAsString());
    -    assertEquals("-M---NoPQ",seq3.getSequenceAsString());
    -    righj.undoCommand(new AlignmentI[] { al});
    -    assertEquals(original3,seq3.getSequenceAsString());
    -    assertEquals(original1,seq1.getSequenceAsString());
    -    assertEquals(original2,seq2.getSequenceAsString());
    -        
    +    assertEquals("-GHiJ---", seq2.getSequenceAsString());
    +    assertEquals("-MNoP---Q", seq3.getSequenceAsString());
    +    lefj.undoCommand(new AlignmentI[] { al });
    +    assertEquals(original3, seq3.getSequenceAsString());
    +    assertEquals(original1, seq1.getSequenceAsString());
    +    assertEquals(original2, seq2.getSequenceAsString());
    +
    +    EditCommand righj = new JustifyLeftOrRightCommand("Right J", false, sqs,
    +            2, 7, al);
    +    assertEquals("----ABcDEF", seq1.getSequenceAsString());
    +    assertEquals("-G---HiJ", seq2.getSequenceAsString());
    +    assertEquals("-M---NoPQ", seq3.getSequenceAsString());
    +    righj.undoCommand(new AlignmentI[] { al });
    +    assertEquals(original3, seq3.getSequenceAsString());
    +    assertEquals(original1, seq1.getSequenceAsString());
    +    assertEquals(original2, seq2.getSequenceAsString());
    +
       }
     }
    diff --git a/test/jalview/ext/ensembl/EnsemblGeneTest.java b/test/jalview/ext/ensembl/EnsemblGeneTest.java
    index 4a6036f..4923c8f 100644
    --- a/test/jalview/ext/ensembl/EnsemblGeneTest.java
    +++ b/test/jalview/ext/ensembl/EnsemblGeneTest.java
    @@ -326,7 +326,10 @@ public class EnsemblGeneTest
         assertTrue(geneIds.contains("ENSRNOG00000010957")); // rat
         assertTrue(geneIds.contains("ENSXETG00000004845")); // xenopus
         assertTrue(geneIds.contains("ENSDARG00000017661")); // zebrafish
    -    assertTrue(geneIds.contains("ENSGALG00000012865")); // chicken
    +    // was ENSGALG00000012865 - which is still the canonical uniprot BRAF cross
    +    // reference via GRCg6a
    +    assertTrue(geneIds.contains("ENSGALG00010013466")); // chicken BRAF
    +                                                        // bGalGal1.mat.broiler.GRCg7b
         assertEquals(8, geneIds.size());
     
       }
    diff --git a/test/jalview/gui/AssociatePDBFileTest.java b/test/jalview/gui/AssociatePDBFileTest.java
    index 0e6791b..c1b5b6e 100644
    --- a/test/jalview/gui/AssociatePDBFileTest.java
    +++ b/test/jalview/gui/AssociatePDBFileTest.java
    @@ -20,7 +20,6 @@
      */
     package jalview.gui;
     
    -
     import java.awt.Color;
     import java.io.File;
     import java.util.Iterator;
    @@ -92,18 +91,14 @@ public class AssociatePDBFileTest
                 + "KVRLYSIASSAIGDFGDSKTVSLCVKRLIYTNDAGEIVKGVCSNFLCDLQPGDNVQITGPVGKEMLMPKDPN\n"
                 + "ATIIMLATGTGIAPFRSFLWKMFFEKHDDYKFNGLGWLFLGVPTSSSLLYKEEFGKMKERAPENFRVDYAVS\n"
                 + "REQTNAAGERMYIQTRMAEYKEELWELLKKDNTYVYMCGLKGMEKGIDDIMVSLAEKDGIDWFDYKKQLKRG\n"
    -            + "DQWNVEVY\n"
    -            + ">1GAQ|B/1-98\n"
    +            + "DQWNVEVY\n" + ">1GAQ|B/1-98\n"
                 + "ATYNVKLITPEGEVELQVPDDVYILDQAEEDGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSYLDDGQIADG\n"
    -            + "WVLTCHAYPTSDVVIETHKEEELTGA\n"
    -            + ">1GAQ|C/19-314\n"
    +            + "WVLTCHAYPTSDVVIETHKEEELTGA\n" + ">1GAQ|C/19-314\n"
                 + "ESKKQEEGVVTNLYKPKEPYVGRCLLNTKITGDDAPGETWHMVFSTEGKIPYREGQSIGVIADGVDKNGKPH\n"
                 + "KVRLYSIASSAIGDFGDSKTVSLCVKRLIYTNDAGEIVKGVCSNFLCDLQPGDNVQITGPVGKEMLMPKDPN\n"
                 + "ATIIMLATGTGIAPFRSFLWKMFFEKHDDYKFNGLGWLFLGVPTSSSLLYKEEFGKMKERAPENFRVDYAVS\n"
                 + "REQTNAAGERMYIQTRMAEYKEELWELLKKDNTYVYMCGLKGMEKGIDDIMVSLAEKDGIDWFDYKKQLKRG\n"
    -            + "DQWNVEVY\n"
    -            ,
    -            DataSourceType.PASTE);
    +            + "DQWNVEVY\n", DataSourceType.PASTE);
     
         /*
          * wait for Consensus thread to complete
    @@ -128,15 +123,15 @@ public class AssociatePDBFileTest
       @Test(groups = "Functional")
       public void testAssociatePDBFile()
       {
    -    String assoc_file="examples/1gaq.txt";
    -    for (SequenceI toassoc:af.getViewport().getAlignment().getSequences())
    +    String assoc_file = "examples/1gaq.txt";
    +    for (SequenceI toassoc : af.getViewport().getAlignment().getSequences())
         {
    -      PDBEntry pe = new AssociatePdbFileWithSeq()
    -              .associatePdbWithSeq(assoc_file,
    -                      DataSourceType.FILE, toassoc, false,
    -                      Desktop.instance);
    +      PDBEntry pe = new AssociatePdbFileWithSeq().associatePdbWithSeq(
    +              assoc_file, DataSourceType.FILE, toassoc, false,
    +              Desktop.instance);
           Assert.assertNotNull(pe);
    -      Assert.assertNotEquals(toassoc.getDatasetSequence().getAnnotation().length,0);
    +      Assert.assertNotEquals(
    +              toassoc.getDatasetSequence().getAnnotation().length, 0);
         }
       }
     }
    diff --git a/test/jalview/gui/CalculationChooserTest.java b/test/jalview/gui/CalculationChooserTest.java
    index ac02c03..e6316f3 100644
    --- a/test/jalview/gui/CalculationChooserTest.java
    +++ b/test/jalview/gui/CalculationChooserTest.java
    @@ -55,29 +55,33 @@ public class CalculationChooserTest
          * peptide models for PCA
          */
         List filtered = CalculationChooser
    -            .getApplicableScoreModels(false, true, true,false);
    +            .getApplicableScoreModels(false, true, true, false);
         assertEquals(filtered.size(), 5);
         assertSame(filtered.get(0), blosum62);
         assertSame(filtered.get(1), pam250);
         assertEquals(filtered.get(2).getName(), "PID");
         assertEquals(filtered.get(3).getName(), "Sequence Feature Similarity");
    -    assertEquals(filtered.get(4).getName(), "Secondary Structure Similarity");
    +    assertEquals(filtered.get(4).getName(),
    +            "Secondary Structure Similarity");
     
         /*
          * peptide models for Tree are the same
          */
    -    filtered = CalculationChooser.getApplicableScoreModels(false, false, true,false);
    +    filtered = CalculationChooser.getApplicableScoreModels(false, false,
    +            true, false);
         assertEquals(filtered.size(), 5);
         assertSame(filtered.get(0), blosum62);
         assertSame(filtered.get(1), pam250);
         assertEquals(filtered.get(2).getName(), "PID");
         assertEquals(filtered.get(3).getName(), "Sequence Feature Similarity");
    -    assertEquals(filtered.get(4).getName(), "Secondary Structure Similarity");
    +    assertEquals(filtered.get(4).getName(),
    +            "Secondary Structure Similarity");
     
         /*
          * nucleotide models for PCA
          */
    -    filtered = CalculationChooser.getApplicableScoreModels(true, true, false,false);
    +    filtered = CalculationChooser.getApplicableScoreModels(true, true,
    +            false, false);
         assertEquals(filtered.size(), 3);
         assertSame(filtered.get(0), dna);
         assertEquals(filtered.get(1).getName(), "PID");
    @@ -86,7 +90,8 @@ public class CalculationChooserTest
         /*
          * nucleotide models for Tree are the same
          */
    -    filtered = CalculationChooser.getApplicableScoreModels(true, false, false,false);
    +    filtered = CalculationChooser.getApplicableScoreModels(true, false,
    +            false, false);
         assertEquals(filtered.size(), 3);
         assertSame(filtered.get(0), dna);
         assertEquals(filtered.get(1).getName(), "PID");
    @@ -101,30 +106,37 @@ public class CalculationChooserTest
         /*
          * nucleotide models for Tree are unchanged
          */
    -    filtered = CalculationChooser.getApplicableScoreModels(true, false, true,false);
    +    filtered = CalculationChooser.getApplicableScoreModels(true, false,
    +            true, false);
         assertEquals(filtered.size(), 4);
         assertSame(filtered.get(0), dna);
         assertEquals(filtered.get(1).getName(), "PID");
         assertEquals(filtered.get(2).getName(), "Sequence Feature Similarity");
    -    assertEquals(filtered.get(3).getName(), "Secondary Structure Similarity");
    +    assertEquals(filtered.get(3).getName(),
    +            "Secondary Structure Similarity");
     
         /*
          * nucleotide models for PCA add BLOSUM62 as last option
          */
    -    filtered = CalculationChooser.getApplicableScoreModels(true, true, false,false);
    +    filtered = CalculationChooser.getApplicableScoreModels(true, true,
    +            false, false);
         assertEquals(filtered.size(), 4);
         assertSame(filtered.get(0), dna);
         assertEquals(filtered.get(1).getName(), "PID");
         assertEquals(filtered.get(2).getName(), "Sequence Feature Similarity");
         assertSame(filtered.get(3), blosum62);
    -    
    -    filtered = CalculationChooser.getApplicableScoreModels(true, true, false,true);
    +
    +    filtered = CalculationChooser.getApplicableScoreModels(true, true,
    +            false, true);
         assertEquals(filtered.size(), 1); // DNA matrix for DNA pasimap
    -    for (int i=0; i<=8;i++)
    +    for (int i = 0; i <= 8; i++)
         {
    -      boolean isDna = (i & 1) != 0,isPca = (i & 2) != 0,isSS = (i & 4) != 0;
    -     
    -      assertEquals(CalculationChooser.getApplicableScoreModels(isDna,isPca,isSS,true).size(), (isDna) ? 1: 2);
    +      boolean isDna = (i & 1) != 0, isPca = (i & 2) != 0,
    +              isSS = (i & 4) != 0;
    +
    +      assertEquals(CalculationChooser
    +              .getApplicableScoreModels(isDna, isPca, isSS, true).size(),
    +              (isDna) ? 1 : 2);
         }
       }
     }
    diff --git a/test/jalview/project/Jalview2xmlTests.java b/test/jalview/project/Jalview2xmlTests.java
    index 8b2fa74..ca90d8a 100644
    --- a/test/jalview/project/Jalview2xmlTests.java
    +++ b/test/jalview/project/Jalview2xmlTests.java
    @@ -250,9 +250,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase
     
         boolean diffseqcols = false, diffgseqcols = false;
         SequenceI[] sqs = af.getViewport().getAlignment().getSequencesArray();
    -    for (int p = 0,
    -            pSize = af.getViewport().getAlignment().getWidth(); p < pSize
    -                    && (!diffseqcols || !diffgseqcols); p++)
    +    for (int p = 0, pSize = af.getViewport().getAlignment()
    +            .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++)
         {
           if (_rcs.findColour(sqs[0].getCharAt(p), p, sqs[0], null, 0f) != _rcs
                   .findColour(sqs[5].getCharAt(p), p, sqs[5], null, 0f))
    @@ -271,9 +270,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase
         assertTrue(__rcs.isSeqAssociated(),
                 "Group Annotation colourscheme wasn't sequence associated");
     
    -    for (int p = 0,
    -            pSize = af.getViewport().getAlignment().getWidth(); p < pSize
    -                    && (!diffseqcols || !diffgseqcols); p++)
    +    for (int p = 0, pSize = af.getViewport().getAlignment()
    +            .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++)
         {
           if (_rgcs.findColour(sqs[1].getCharAt(p), p, sqs[1], null,
                   0f) != _rgcs.findColour(sqs[2].getCharAt(p), p, sqs[2], null,
    diff --git a/test/jalview/renderer/ResidueShaderTest.java b/test/jalview/renderer/ResidueShaderTest.java
    index 9ff93e1..a198d3c 100644
    --- a/test/jalview/renderer/ResidueShaderTest.java
    +++ b/test/jalview/renderer/ResidueShaderTest.java
    @@ -345,7 +345,7 @@ public class ResidueShaderTest
                       SecondaryStructureCount secondaryStructureCount)
               {
                 // TODO Auto-generated method stub
    -            
    +
               }
     
               @Override
    diff --git a/test/jalview/schemes/ClustalxColourSchemeTest.java b/test/jalview/schemes/ClustalxColourSchemeTest.java
    index d476d6e..983f94c 100644
    --- a/test/jalview/schemes/ClustalxColourSchemeTest.java
    +++ b/test/jalview/schemes/ClustalxColourSchemeTest.java
    @@ -151,6 +151,7 @@ public class ClustalxColourSchemeTest
         // viewport
         // assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink);
       }
    +
       @Test
       public void testDocString()
       {
    diff --git a/test/jalview/util/FileUtilsTest.java b/test/jalview/util/FileUtilsTest.java
    index 3cc9ca6..62dc73e 100644
    --- a/test/jalview/util/FileUtilsTest.java
    +++ b/test/jalview/util/FileUtilsTest.java
    @@ -77,6 +77,11 @@ public class FileUtilsTest
                   + d + "' contains '" + notInDirname + "' when it shouldn't");
       }
     
    +  /**
    +   * these need to be maintained as jalview's source base grows
    +   * 
    +   * @return
    +   */
       @DataProvider(name = "patternsAndMinNumFiles")
       public Object[][] patternsAndMinNumFiles()
       {
    @@ -90,7 +95,7 @@ public class FileUtilsTest
             { "test/jalview/**/F*.java", 18, 30 }, // 20 at time of writing
             { "test/jalview/util/F**.java", 1, 5 }, // 2 at time of writing
             { "src/jalview/b*/*.java", 14, 19 }, // 15 at time of writing
    -        { "src/jalview/b**/*.java", 20, 25 }, // 22 at time of writing
    +        { "src/jalview/b**/*.java", 23, 26 }, // 22 at time of writing
         };
       }
     
    diff --git a/utils/channels/default/channel_gradle.properties b/utils/channels/default/channel_gradle.properties
    index cfb5ab0..04acbc3 100644
    --- a/utils/channels/default/channel_gradle.properties
    +++ b/utils/channels/default/channel_gradle.properties
    @@ -36,3 +36,4 @@ install4j_background_image_text_suffix_cmd = font-size 30 text 194,218 '%s'
     install4j_background_image_text_commit_cmd = text 18,170 '%s'
     install4j_background_image_text_date_cmd = text 18,190 '%s'
     
    +install4j_title_icon = jalview_logo-64.png
    diff --git a/utils/channels/default/images/jalview_logo-64.png b/utils/channels/default/images/jalview_logo-64.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..c5b5a3c20ff8d49b5a5b6ab5e1a6b6c6da3446ad
    GIT binary patch
    literal 10430
    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
    gam|2%=NE(fDKHqC=y4leEzkn#V)PFd96aWAK
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/default/images/jalview_logo-64@2x.png b/utils/channels/default/images/jalview_logo-64@2x.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..34748eda812369b358ccb17a41c59c6de10f9c38
    GIT binary patch
    literal 11834
    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
    F{{l<<`_}*f
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/develop-SUFFIX/channel_gradle.properties b/utils/channels/develop-SUFFIX/channel_gradle.properties
    index b39dc99..671a339 100644
    --- a/utils/channels/develop-SUFFIX/channel_gradle.properties
    +++ b/utils/channels/develop-SUFFIX/channel_gradle.properties
    @@ -48,3 +48,4 @@ install4j_background_image_text_suffix_cmd = font-size 30 text 194,218 '%s'
     install4j_background_image_text_commit_cmd = text 18,250 '%s'
     install4j_background_image_text_date_cmd = text 18,270 '%s'
     
    +install4j_title_icon = jalview_develop_logo-64.png
    diff --git a/utils/channels/develop-SUFFIX/images/jalview_develop_logo-64.png b/utils/channels/develop-SUFFIX/images/jalview_develop_logo-64.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..54d7f899c21595ca59609df3a674f8bf15680465
    GIT binary patch
    literal 7986
    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
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/develop/channel_gradle.properties b/utils/channels/develop/channel_gradle.properties
    index 2c152d0..cd356ab 100644
    --- a/utils/channels/develop/channel_gradle.properties
    +++ b/utils/channels/develop/channel_gradle.properties
    @@ -48,3 +48,4 @@ install4j_background_image_text_suffix_cmd = font-size 30 text 194,218 '%s'
     install4j_background_image_text_commit_cmd = text 18,250 '%s'
     install4j_background_image_text_date_cmd = text 18,270 '%s'
     
    +install4j_title_icon = jalview_develop_logo-64.png
    diff --git a/utils/channels/develop/images/jalview_develop_logo-64.png b/utils/channels/develop/images/jalview_develop_logo-64.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..54d7f899c21595ca59609df3a674f8bf15680465
    GIT binary patch
    literal 7986
    zcmcIp2|SeDzkkNQ6%$huMk#ADV=25CvMaj?^;!p$Wvp4kP{|U>+hWNdS+bNQN=3#N
    z5-AatvZN6rTh=ji&oipG_ulU3bN}~q?_;2oXWh(J?2ux0GU)2+IC
    z!uPoJiuq2&+K3$9w|-h;lTqUN{2_b48P|%5p^;lR&)gK_h>BKGRg->Xm_R?oCFi29
    zGTmBpDy1eQ+FV|-b3%|^>HU7Iga_$QZzmov=g`(dHws?Nz;_r~ZmIh?DT=83@Fesq
    z{UOfaXr~PpEz3-kx&gxkJ{yfGf&hpE?S*kIOzgR-~H5vbBPRbC-a%
    z#lh|SU8*JujvBs<8fe9huI>qt9+innbw!{&FCND&qp8!c+s#ZvjjpS_SQ$}4i);1m
    zdr_?Ve5vB2l4(Mz`_AuoYyO_!GJ;dlUI!;wuZzeUrPWyhH8dU70MM22ifM}aa5ejgJ
    zn5&_s2?T{pKv48q2wDYQ(VrnG7z05QP7tJ)4nf=evL0Eeg8?>|Lk7CgH2jxHm=ORy
    zoPLIOfxw$1a6yC%9IFSN>_J8*dhDM$Sot~kc5FL{17i*0)<=UZokPU@0*LMeZ@gGg
    zm>*t@;eM6mLMw+0!aI4WV*;wDXDd}rd6g`uNil*v^Kai6UORf?`aahh?``8DW#fGq
    z<--^rvlpcWogC>B1t#*YI@oX&=
    z0+WV4Q=+#~OG5^-XH42=Q{y8QwNZ-YTtkSQS>kk&cCWbu_0`EcU5%`F?EOy4s}KiH
    zdSwaUmRPMTeEhUDFD?GX=A*u5L*gv^XsVps9d;y7m}f4JZ~k`3wXOd(9TjqJH;XM(
    zgycoqbFmy=Hl~|``W1F(^EfIcyER46l2#fZQL~Y!=S~ls)Zdogvnyh&+qrh6^wdNX
    z2cG7T!E;I$Gy5)M?2XNy6TuRt&qw%~r(SLs(b!_S(kAe5!Ko+ZVe&N_S~}l(6SByB
    zhe4oL
    z-8AG>KhZ00ol?i~6}ROv7j_+yf)YC%>7)fxm!-f+SKB)D?bJ1mlmTmjbB=2tP@Z~o
    zyjy4pCBuZ=4`ugxr1VNr#~;OSP2X>MnTha+E^=q8_dz75r>C@yw%A{TTcppcYf8rA
    zD64Dznu|#x)3RmzE9Zh+y0VrA0xxJpr~Q0viL8H}$sR!x*OFyq+-K6*;z&`kYsA*<
    zy#tHA-r5pcGs4UC&%z$)WQ{kPOe~O&7%F~^i_dW9mJcH2<|Z#4v%6goq8?Hqu?H?F
    z+VsU`ISnG1q??(AH=q8DkWfgPdBYbkI;6k38QsjMQJ-fSpXL%T>U88BvJP{UB%|7Y
    zg4Pu>n_OJ^(Abid1ENBg?nR#EL-M@#{%a5u?}YSUB%TQ#4-TjezA#w(oZj-zX9
    z@ZoD$)HqN4lcS-&p^ompFMaj5K7Hie0Zy&WmZ4W=7WdR-
    zQybp}jpfzEjzY`dwlZ<56GWug1$Xbz-`vI5uY&YU3mmJw%`DyYs*IVL&5kLfzk(o9W>#aItSl1r?@zqlN&h^M0
    z-Q4FdlvbDX$DFi7_Oq1}MWmj^Fs<#AX4*4jeE_*1+i!j|vi0PyKw~Dex7$k4m
    zwKHeo8Y;Q4@a6{cs8m+Ti*7ktrkWwbnAS(#+)GOXSA8vzQqe_kxhqXVhAlq?a!=s(
    zoHS~mPA6P6nyd#MA#R-s3!@P0%;jf-MVoK!z!zFP5CD)jTR*(dFFoCMsFWEj9_UmP
    zDa~Fhpxh)o{d@~&9H-CX@joSZ#T41I8-KYr)!1vXK3y_poh6C#ja}yx4C*fN?%CV^g{CFM0+(buYPG1Il~gbHNh2~nPoTaqVm48L}{gDGPV}Iw=6kGV!%~eBtpx~hdgfSbZCHH2#o1DDSLh9IhckZq8f2Ofs
    zJICkab#EA9enyh5-@CzO`b4GEJYQaz&tR)wLHB9UIe7Y7ZJ+Ylw)!KlO;xg9BoUk?
    z4@NUzklVSBDi>Cjf8U#P$D{NYE6@P%N3ra^b2mIwbs<|bTK~$Tx5HnX9-ETrJUi*E
    zLuY)*!^bau8P2;#qMuL4vHLxoI#BEN7vfkM2bw;QcA+tex@gbEbtuLQuNnsRe3f4B
    zP4xTN>&5GzPjd{M;o}xs)IjoL`)1_dj`Dqce6HABEHL`jpr*FqF=*NE-L`^Kv>9c&
    zF}Qwtd~{Phk+>HAxc29>HE(IaB4ogQsniLAwyffh8o3)8$v_r$iTX=92UU@Z36F$peTSgd>&?lLWtX#|1M}Z
    zgTlf1V+Ac(^T*r3$i!SsVILN=532(7F$x$ptb!UwK@5994XdJtRRYq8+>O;>J@^6m
    zzvG3c`hgv8|G+K-+RWcE!j~_zL7py
    z2!;+S`a4Jm;$UNAXJh4HXJ_Z+iZOx6yQk^oSd9I+&qGtHVG>16yB-uZ$I>U2+09sVn*zO
    zn2-o&B!b=yp#e@-1moGD0{+d!%)-jX&cVsW4FvA-!IolXVqs=wWnlrMkzgERL9%Yy
    ziPdJ~w{T|PD|hzd-tm!JbcvH)cmBSwe4wp_p6@X*M0qO-VTp^9Q{NY`#e4|J2$`ZZE*Vf%i!+U07Y7A!oGh(OzSImAA`}Wm)o%*Bb8Tod7VWnFA@58i@EBUpYON1%sPC17)IO4u(VE=QgxYMI@1XgPYq2E}99Kgo6QL*-<1
    zmN5DkL>gR)Qsw!Y3mZTx@0nP^3SF>5MUv~g4>tmn#5?7ZCVFF~R6E~@>nEl?r9)l|
    z`HZ^!k2P0TDjhmQhs0m3o)cdop=fT_)^%oUj)kIdg?=X}KSo8bu=ilm&z8&QcjXn%
    zk>0LLF)CVr0|_@ohuSo+$I~32kTOsx`Af9EaRWxR*uuR+huCS_-*^n>XtLC{;*yA*
    zMY6FvT;c9x9J`irbG*eaxU^YEik{w~Q95*Q)ncPwuQ*L3HPE4pkvd2!Igt)2$jCTK
    zu9tVGFsiAfZSyo<>X`|_luuOKl~fDM72H(R#&i|FWmB?sBpck%zmsy8ufP#Q0p(Y
    zYw7f!CU;x_?sRk36EH_uHc^kD4)M;~W@M2bntfWyuSC#h(K(}ChIxsyb5_4e1!rZ8
    z1cfWnnFJ+%6G`Qlf?0DH`7;Tsxmm9`Z>KkpU1p3NmU!gKoN38KD0pF_l=(TylyI2y
    z#wBf~Mz0%K)j~0eOcRz@Mhx-#OlPG6pc>yyxqQI};40S~g2PP4v!=(%x)_@|R~biZ
    z#ida$+M6Og=BJG{
    zVThCsh$a$`#QDEN#AJ>Gh=vS^-7v&43}d1VSU(s!198<-ke2D|EYkHZ(b7ZK#`*yl
    z5tedd0$*Heliu1k!WJx&3whE6V7~YaVBTR^Sr65@T>d0yCMojLI`Pn%IVwtjOW{rFB&4WoI#uuK7>_Jh+M(&d++;r%Y<9e(lRnBqsG#wi4qeITe
    zC#70Qk|5@W!s>V#v2T#iZz54UN!wbqu1%ivqCdYbdiQV=}-@v4oQ&LxXhOA(cjqV(9;}RWAz1x1V;~$Fs^%_@zDC<
    z#C&L6W`Z_+-ZHk?v=kLxkf5_7u7<5DcNB7(-S=*1&cH^#aJeXGR)*FU&5h{9M|zc>^0;*^fKt
    zsTrRIEcBw>d_fJND0B!#hK=GwUNl}voF^p?&U4VA`-5wH!tD&!Mm0&7)CUIFpOfS}
    zMg8>zY~P^;V7(tD9M_n$a-I&oL$7B)-c>s|Y({-Tho(|!U4N!JqOQ@QIuKyuO)VrL
    zNBK4o|MR9!;G9CX9i>Ch%$inv^G+1z%+gR!S$&@;4tR7wv_q)ES=a5AhsFGzm>`T5
    zSXH==Sw-J2Fzea8
    z1@Mlsds^rTK(^PYHgqW6VEsNFdL!E{+ewopb%@j6k-l6R$D_YqT%jGF4G%z+teK`ia7+EpPP=u91
    zVb7;Z13Qt|D}bFQVLJ)Xp$|L;@EwtO~E>`9HcBXh7o6sqZjIl%*N)OqlNTUnewOG};
    zK-3bR^&Bo|ZLFEHr-C^Ei@K*W{
    zC;q2EzMHbt2HPg=A$cu}=9sBI0-)a4l=^iGUigO>!^poza-Hk}Iuw!fY|bDqiKbNN
    zc+o-+MagOa77|Z5|5!cqg66`A*SFfeL=(}gGB(BFOi;gy?yZW45m
    zUA@2*kOPss5@xurzzEx1t9pi0&obQ&{>n>-d?Rz#WuMN4ke+G0d9Kk~=nY3eAmP1m
    zuh5B(9-%tYr#Kpp4!thgWQ&_?r9+~0Xwt?Bq`U4NLHr_V8_nZzU3KZoEpWKzW;!c>)|cE}z|w7@=Y1t<$HP#rP=RQx`tpR!
    zDX;dx83BHQ#_+~wRi6tWbV&=(T?A`KOV`_~7dT79mWE28+XRp_XPL6uq+of*MhN7;
    z+dUf0$$-n)I)=7P-RvI`5>7QD@Yfv&rM)
    z((U!81gX3l%Zf80KrcNRBRyn^utYc_q|y1t8_|q7)}7k*6AvSaH@IvhG-xy63w{@m
    zVTeNlGm2WkTiKSXpBVXX`FhhpLk+NNQy#PaI;)>=BGm|f+u{XwT4&^@jX=Qp#uGB|NK$ZzXNRqOd4KG#l;P3AmawMkn{
    zTUVe%t>o2S%Bn>5dNN3|{FM*BgCE}|dGxRLogDx4F^f{Wcayr@p(1qH3R&^RleKVV
    zjipmx7Wzhy)4J)<4aemrI%J>ncgV$}#v_g6=4g9AEq?nW4cvjq<7qSv5XAXwhrY+%
    zbv?A@bt?HhFVX5D>1QwQr(~&s#Wxvnx4!d#K0`6>Jskqqf!T=?J>9v1y)-GBJhj0^
    zW?vz>n)C`s4Nuv4m0H+=JrrCeF3plCxLdu`4r?LniojIG-`}N$0;C_~XuF#O)r((O
    zJwVP`rJ29WdC$nMLOtt%+TF){aNB6k-xB}z6zoWgBztv6otXG}wQS#DMpt{nKf5(=
    z9;ybP!P3CR#p7E(qb@GapQx&da&C`%Dna#6vXaWXpJaU`)nou{XV+OlZizbEzx}V?
    zdu@W6t+;glk!D?)RPXt-y{|NkUb(A2CtPXr%p6=ikV8uu3#%ce_+oQhCy#%;(Gi%{
    z_i|`9@$RRqV;v)Y-A&J~+80$$D@utz)OGL2F3i4funP277|^
    zjt03o2jSIR1MuJle{)ij!>Gt%l&!%BC#3^w3aYXgj2Z^x>@O$(4+S5h8^Jy7zgOVf
    zd*u>Pkovho5Wxo@8075Z_YWOaHH@m7lG4T^m)P~mKt~AH!G{vu)eaJZ0?qLORzS-e
    z52@@GgMVA5G$nx)@~4yz(VG}x<>%~*hp@cYn2f;S&Yy$2fR;5_`gfnx&NF@C1;YG4
    zh4sLqX728R_#g;-KxN>yP1HYzjeMLv@Q3lf9zmYaex*0FR}H}MmY>>;VOxS5V>A#o
    zBnC$R=3+&34+?P(z(c=&rC+eJ$JDk3syj0_&4%8L?6EZ
    zd|)7f=nL&%!TZ?)Inm$9{YpYXdB3?I2L5m<^502r@BxDHY^(6sOol@l&iNavvALds
    zk#7(_z}3^)*8{Il4DfLdf)p`Iw+y;GfsXudCjYI@ciSo{D=RU38i)c_nct|IdlG|)
    zKKP&jf-7THKs(4eh{1acDp3e%iTy@vBZ%N|GAD%My&=WnzD|1}y91U5|LdscO7sg0
    zAb5BNLFU0O-UL@MU80XO!S{YD)&Yp^`XT0q4|EM6_%YUFxY8w<;2k7K@D&TRG&p$J
    zLz^E+qkc&HIQs^>JG%x22jBx3oG%Ae|L5~Q?>jnkpPBQ$mhW}Wb)9qH(>Ysf^NpNaIUxwzh_x`W
    z2iGD-<6r~t$(`OiAP5oVYiw-m>*)zWa_OhicUv?Xh`hi#n5J(w+?A+(tEMPG%!EDf!yafnc)d{VzkG|G0DdjyOkjjJA%h{1c0F@E*<`hxN2)
    zo1R9dK0Og*tD@fiMTl8rV5h^m$9XOHlHAKU3=M=%#%olYO}1g*}8XK3F(raQJlICWo#Ye8jbw&q+5PUzK?VyoK?op_eb_gRpV0*-b@
    z!aEOFd?|6U=!*W>gqd8H4wWBOh)wrI2>PVCV<;%v?7LSsDUsN#+OMgfwNZ@*y~?j|
    z>U8|LKcZnBGo&6|T1Cs&MSsIa+$}XtjrkNX^!Z7td}Q4iH=2B;`TAE&!+axso|?ig
    zEw5O*Yms;R^xf*zH|*k8?$SXqr;QJl81zl+&&>wT%?zry)1#q-wV{RngHOD`bclOe
    z*jqtRgbW15#6!?B_$p=+g2K=c^yLr)>E=Pumf(UXc6wld?eHFR69{Jf71iFz1m7To
    zE%xIfC@_W55a)-VcY`n430Nyr_DK#_eomCjm*6j8w(BDtT?qCbC&Yt8gO2+8dx;ZH
    z278IGO~3Z}QU})yA`)D*2?3qB`G-2zJR0`1#8@G&Zy)+BF1Z*bsy%AGZb9<1BAvbE
    z5$6#e=Oi6qR;M8m5Fxyc^MR^lvxKQNOL_8uyLna_TiPjEY<_kMm-YsZ;4{SX*?sKS
    zYGTda&$dPTOeOrd^dKqS>}pq!#@W&Hu~$R12|5<-QAXwSp)6PWsABpT&J_9yxMZf{
    zFQ|&l@RH+j-!Js@KSS#1^W7)ywSCcchbg?yn|5i%*H-iGX73N&OZy)~P8&LAStri-
    z2cFMt>@gX{`I3(8>)K=D!>&{%OXg+Tg0nVydFQ-Yn4DGAiG<}+)g%7XQ7TO^jqK6uvqje+-)okd#COKE+3HA^x}Ord
    z+V(KJrM!xXpLF@;Y{0%^C-34fO8Tm=#V&VsZI{SS-J8CL$80sPEac5A6#wD-Q&pa`
    zR3C1i<9#3dMb0ga+6^2%sJG*+xEGs!GnaLB?WA(baY^l4?FPe}gnD&Va_l?yN${Px
    zH8>T>voh1?0avRutfZQh8SN!PS##o6j&B8rAc(^lYhvga{$b|w{d*rx1kS>$HSDik
    zM_CQTOIgmv#Yu{a7MmKNy6nX5&E#066w&5pu_CcP({cSAG7
    zzShp?s^dEf=2_!68F5Jbmf22C2br`j@Wx&rkhbOAS
    zzk5vc@ES9To%Tj6TxHSYmXXeiX=*5l=Oc&bW!N%_@vHM$){PuCGD3#?=kJk2m^vV(
    zi=eHRa)=iO{GiLx=VpYIyY3H!1ypxt+A<{xT(SUzB0WHnr1?Gok-M57&u5#pz*VOb
    zH2=kO94lSq(!dUVQnj(@%W^#3Ie)(IvRhn&WRXu&ABXl3>1AM5)Y9bZ#$f`r^2fl;
    zbXTNk1S;y(Ntm$vUSrGCmdMPqQ=?Sn
    z*|YvZZ*c_HWsmkT(`WruK}366W)R`@DFy1|+_{6@m!eK|XUXh}HlrEbD~Pf*N}HN+(yeRst|RAF(+0vm#^+32BddcEvg&8lcdTR
    z&6(&siI&fZpd|`T5z>P$&sNRrgsFeDul0uuxbl&c1LB{kW2d(iT-GTPr8a!4$_?t}
    zB`Y03CH4;TZSwZ!mZRD)%(&F;qPn3>jCbJ;T5@xOs*K4N`V(*Pb!V9(py(S5rm5f5
    zdzI5v{P*TvNvJ={bZ{clxVG$}7JE%@(D+NM(WFn$`c8>dL4zc~(LZ
    zrXCkWtnRBpzp@&S@sRS*VvT&SDV3(^k;hx4{COyOuU6@ym_jRjrx`>~11Qk#t*@JdN^u{(A^cyjA+xQD;mUQO(s7td6f67BcjjDVU39eerrz)Zkw7p{4$T
    z3%qXK?YGr!zT~HOIuSh$V(T9%DCY5y`Vq}l_GG#oCQt7u)Y4+H>BT$yTk>o_w0yGTFmm%4^Gznc
    zoWTkK=Z(n=hzcWu!paV!RR7}RITG#pmU9LDsUn*jCv+c}4``q1TIrhJY4Jeml{r89
    zvWwDS7M+s$9T{n7(G|J$?D02bvJUdNyOrYP2>+G!O
    z=5-5^Ezw)FR4MK)>~$qk&{J+7@s)v+a~|y2rh(mRfHZCcci^UKovT=WW2K~7Tm9DH
    z>6p8hkfFUZoMo4iK4qkG2jR+Fx$xEBdo`P?1)IXgCitV|!s_Ne(LC^R5^aqanK|dh
    z3*1APRfxUX(wplq#B?HP{mYm5R$>*0rneB8!;x4y&f!jk^i>yw%TgwMNk(71>N9Kw
    zY^%7oBTdgPhZ$hyj=sOXX$R6YZpO(->S|*7jD3NW0RJQ0hMaiGA}jScDS<5?!Wu1%
    zV&BcUWRS@fbL?613D;|5Vx;uYJ6Twyh7Ip;7Z*qJB!Z+`L7VPImOEbdlZXRfH)WjN^n?Yfe@e<
    z0~+GDJ`;i&Vg}zufVLIE`U|t|XFm~qF9$FTSq4rO!31pt*EG=7Kwkh{uYl&8u&)0B
    z=syRIW9@Gn5MxOGc{Rsc*@~+vtD==vwShcZ4XvxHri)e+S5?_8;C{#$;$UNAXJh4HXJ)cfIfXJ`8^z866v+n4J1DzwmAG
    z`_c~zb(z77!Sm18IBe?~0sf5q$Ne=oKjY((d!uaO1UIW|0gtre?hCI1&S>`g@Y1g%&$Fz+D>Mz5m-7C%Yct1A0
    zZhLwy@S0TQ(!D4%QKy66Y`d6693!#*Fl0VP71=0=w|i6a<~nB+A>aop_UZNTPSInR
    z!!weT$8si`9d9Uv2IoICG!<}6ix3pB!&yeh3D}uJ|F-?j5v~6+>G$a7MBJ{t1H!q4
    zfVW3dqkB3N8*jI^4K*F|OiK0LQ8-B>ZI3O!cTAU%PpEg9J^yTktVQS)9=YpK#%C82
    z_246wGi%J+n%~K1Q9-WwS<1@LdMNYXz4L30ud1?Icy|1rK?hsps=TFLyj#iFv`t+H
    zh~(5`q;FF&l)i=L14HqV`(UWhhL%VgaU*>Y!cbRvXxx}_MHq5Ym%EFhm{;Pci!juj
    zOxGYb?7j^{oj2$vxcO@<#_TYJxe7zEO|%9W>PdN}XhY|nai*WbEJ(u8dDQP_=&$R6
    z;3RP<1cuP0@1AN&Z~nuwIc@ugGTJh6)D(ucVk*$YZ_6l(2(e9N)upYt0)~dgdWaK1
    zL{f#)1w$N5cVI}rkjhJZnL5LTqR|uR?5J-W{;wX((zY+(pe@7De|RB4Y;$XFFRmb!
    zYhtM1*8@@bUbm38vhFSMU;~lC%nmS{FbfmBwtD6kv9pSBA5OSUitM%r^zfILv@g@`Vu2oeHYO%$>Ds&Q
    zqN93SA6`h3yZ5b^Q?59M^DTLfmT;Fegj+`b@#M{4AMWWjt-h+FNW)M``L5e?#U!zv
    zYj}ptuXde(pU}sPmUUJd`N->;?weve!mb)SvMBW2K*dsW{6QBk}8xYP2*cq_?Y7WTTDS>-S4*{ou
    zKlc*rCbDAkJv4wnPdu2f;F)|&UR$B_r{cMNEdU2Yjc&hURh=8?H8}EKp20YP`~DX^
    z#riKeT4zlCVsVn(8EJpC!)l|xr55zhcTI4?%
    z=&7<~IXIk4&uGi49X*}}{I))^?zdAQ=?>9jvTAE;`ozgy#1o{z(E5m>9HGr>@oz#jkWlTATDmkHQZ$6jdw^%;`6fF8c?+
    zgIQ`Rq&K9|tU758m<4a((cO{UUYz&5nOf6pq955i3V_Rs24E=ACujLW=k|_)m73X?
    zLS+YcD;o5nsM9cXp;x`kvY$}U=!s8T;4|rfi5PLn-iQYh*D5LMP(mjb;=!YRu
    z7@B@}|D{JR!wZpx_TbbRIu9-B$Q$e(QeP825{5V+8~i=!BZqq
    z@zPTsDk**-o(6^MoJO~AcaxNw(3tx@-IVcSnOdKE!imM6sQj*6o#UW$YT9gVG5h{n
    z%xNH^V5KgkcRIurafS=dSej3Ery*>ZV&sRM^-A!s3|M`9uF++WlgOA=mL72hdJ5)q
    z7?>Vr7_o+_lY5EXQep
    zg`^XxM__+kJlt!|vpQZ#$sNagVg_y#&(O`2>`VoJOw|3p?8SPARH%HQHm~>sC0iLv
    zSQ$zRVJHBz=;@5bF{i-L$y;<;YT<5I%7gD7rUK5YdB8j({SL9&I*7uvAZU{R^v?Wk
    zD;PommrZSDp8Y_emW~mJap`j&V=IXfD$U62{EUR@PGMb73%ytllVCWNIdM?^~
    zr~2xL8x-7VcqxczbQA|8qCXpACYp(%#0DrSTvojUl+@uCq=DQL*uBg&3E5=r&L8=O
    zpNSX0^^lTPoIp9j3p2th^rVw^224i`3{6TtY`L=x_PKK)x@6QUi&Kc^va&mB=>Tpx
    zbu{&03JH%grLL8=JgbP1SpK}9m2dB1yrt$s96SJuf>yjF<+
    zzC5sQgQ>((%eR=BLVC)9DX`FM06RWfhrjnqr45<&X|
    z?M*aL1Plf9tfDXFn6F;QrFc@eKPw=eK$-l^qAzALq3eN(@7;R{|H>1r5CefB#ip#(
    z?ox54D~u|7@1#Y8J)|(3gZb>s{%2gOuY=Xev$kGN3#)u|grNnXJp?b_G4CsD!c!dQ^CYJ4H$Y(QokfjpK+k6Ea=&Th?4YK059mz
    zwnRb@o3n4gP`}NpP!CY?x0IrYc(1hE%wyW9Uj|>~-T~35PH6zPxrsQ;yzb*aR}1p4
    z$|hoS;0PTgeo<1Z49W4;2>pdQO_i43B^;Uj`ezQki|6tZ|80*t7sH4MS#fM^`(lg5
    zT6oBcSL}7b#&YGnl)u=PKJm%-9T;W{u$;yVGQ0A0DrV28&g6CO*-PxVp;yW-m17p>
    zQYoN(A9zrABle&}EBTHOU4_%VsF<
    zsw@5DN>B=&SWisPeCaet6@J2&xtdViKlO=td31JlyuG@0^Hk>a0Y|%oQ4{hl9j>+3
    zzSx#WV3KcbVwB1bO5%un_0NfZfW2$OTj1A=St|-y&E;_i)Y4YWQ0izxd-2ax#`h6^
    zWE--iIH^xjNGp^qK$ZvGaJ=%U>y`#!9>E7Uu%XC90%SQr1pmrhuLL9lV|(e87g~cD
    zC>SW_gH<2_-GWN~3nQ}d*AC>dt|q5EaD3xOu%h
    zEZ7d5Gm2fW`HZd4DAtB4ZO!T59b#;W>m0k&6eTte6HcMoh$QXtwSRC(-$fS`ahbUVCrO^
    zJOA)>ociet-$#aT4ux2LD;4u1Jt4IQH7}`Z-hc1x)03;%|A{z38uvYam_}?R(n5$0
    zS$+p%rb58UMTN4DQ}M=%BG@$bB|w177IefsQzGBx(pf+XbZwn2!HiA7kO+=kx|M!?
    ztuIkVaS9M1JqSj9`;4M+5u0;UUtp+_Dl{axX}GCpdiz2yj=B-p2+ws!E&Ko#_6VrKG8jVYmt)4h!H|S3#UUZ7@@hB0gT9ld0O|h1+%o$*
    z{_`EuBl=PR&*tgVbR2Pkk9bBqoaByLSOv;Kik$mHSC0O&l{hJeqObse4&GU@nbR^)
    zsRVZ}D&Q2zhM~)(QubDYF5~y%W{`{XnrBQ^zPeS>V}}82bK031?}1As@q-<&3M08n9A9Tft{-~5K+)Zb!o`h!jN)4w_L
    z4`D;SuMS#e1{*1qN@cGo383$eEO{Tcyl-^Dxg4ww?O2?Ex*piT6=fp&`GVAgVFkI
    zUzslihrE0GG&1qt(Eg!Q^N)gq&4NQdJJYY#1d&k8#}Q51+S875x8ui<@}_;o-W(muYR-EX@BGb`
    z(lSi@2~)m@uUf+E`%c<1TS6BP%m&{JO$R+f!5xE
    z)^t?W(M9X%YHBH>(Yk1~#l{zd{~-_%bj0`Q$^RD6&{!9E&gXpy2*~}iK=2Ll!V^3K
    zg8wF?iq=(EU6)z%$l3s8wlZYA!hMhG8u=3NwqBtQK+4|>(pC~@{NtO^mjx)^Unt`s
    z|DaHZU=L3(NR{Uj6BZ0g{2DX?v>buye|o^pA7Y*k!2G|!rogDp(W7`T0;H;?{qdbs
    zG#D26HH;1L@b=p473fXyfmGGB4GE2v{~^9M?(BPHeK>>T4S25p8ykn9ql6P4p3~)Gs3hpRj<#fgZm8|IA)|+oA)&i~IxLI4B@E)C-UI4GM&IQoVwm0Z!~6
    zaKF<~)7)trjAs0pAo~A9t`h>lM7CwdFAQr_x;8z3xoT-^YK{#gc!hfUcm#TTnFWOg
    zcn~0Uw8kIiojyQD3-1}~8@y(3Z7L6k`T7%f_y&sO?aht$dK>ZswBVoU0FS`1
    tqaL1wuu!kiwVB_0CG8aeaQ^}X9RbcTL|qSIjll?nHMKUmXLKm;{{e;uTdV*8
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/jalviewjs/channel_gradle.properties b/utils/channels/jalviewjs/channel_gradle.properties
    index 6f3991b..4367f3f 100644
    --- a/utils/channels/jalviewjs/channel_gradle.properties
    +++ b/utils/channels/jalviewjs/channel_gradle.properties
    @@ -32,3 +32,5 @@ install4j_background_image_text_suffix_cmd = font-size 30 text 194,218 '%s'
     install4j_background_image_text_commit_cmd = text 18,170 '%s'
     install4j_background_image_text_date_cmd = text 18,190 '%s'
     
    +install4j_title_icon = jalview_logo-64.png
    +install4j_title_icon = jalview_logo-64.png
    diff --git a/utils/channels/jalviewjs/images/jalview_logo-64.png b/utils/channels/jalviewjs/images/jalview_logo-64.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..57c7a9e3c7f7197b49ac5072b38e161fe432af12
    GIT binary patch
    literal 10441
    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
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/jalviewjs/images/jalview_logo-64@2x.png b/utils/channels/jalviewjs/images/jalview_logo-64@2x.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..869701dc0167cc5f0c66794f3076ad08ed88fea3
    GIT binary patch
    literal 11874
    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
    A!~g&Q
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/release/channel_gradle.properties b/utils/channels/release/channel_gradle.properties
    index 27fc1a4..904edf1 100644
    --- a/utils/channels/release/channel_gradle.properties
    +++ b/utils/channels/release/channel_gradle.properties
    @@ -37,3 +37,4 @@ install4j_background_image_text_suffix_cmd = font-size 30 text 194,218 '%s'
     install4j_background_image_text_commit_cmd = text 18,250 '%s'
     install4j_background_image_text_date_cmd = text 18,270 '%s'
     
    +install4j_title_icon = jalview_logo-64.png
    diff --git a/utils/channels/release/images/jalview_logo-64.png b/utils/channels/release/images/jalview_logo-64.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..23a9ce22c934c0efac06139e7364f6da80c41231
    GIT binary patch
    literal 10430
    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
    z
    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
    E1#F}H;Q#;t
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/test-release/channel_gradle.properties b/utils/channels/test-release/channel_gradle.properties
    index f0c8e2a..b774de5 100644
    --- a/utils/channels/test-release/channel_gradle.properties
    +++ b/utils/channels/test-release/channel_gradle.properties
    @@ -37,3 +37,4 @@ install4j_background_image_text_suffix_cmd = font-size 30 text 194,218 '%s'
     install4j_background_image_text_commit_cmd = text 18,250 '%s'
     install4j_background_image_text_date_cmd = text 18,270 '%s'
     
    +install4j_title_icon = jalview_test-release_logo-64.png
    diff --git a/utils/channels/test-release/images/jalview_test-release_logo-64.png b/utils/channels/test-release/images/jalview_test-release_logo-64.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..5f79cb93488f2735e416d58daff1176cd5189194
    GIT binary patch
    literal 1928
    zcmZ{lcTm&W7RP_|7#0i>2t-hdR0$>#l->+&sj@&oiG~tbnj{biy{(2Kuts2!Drf{3
    z2%ty{gox5*(N%E~L5LzPbZ`Y1!p3>CZ)V@jJ7>=Q&i$VIIp@!t~N`DdQgCW9|Z{&sFo01&SZ0I632;49xsT>yY+BmgYo0l?@M0KkZ4%=0Gv
    zhNz!|Ee1IFmX)lUe7yp_YAjbbT_zvyZ}Tw6kNXaG>u+
    zEs4I5m{1x|=t^()!bHgNA77ubX6P5boEREOD!YAssP{xGi!wL*vHJbtK*}*nx8eNW
    zC|6SYpV&K2qYK{-i`%l3wtbpBO1^Akum)c%)No$ePsB&7tL+e9apNC&51>YgEA(Bo
    zO3qH9ss|hWc|2<|LewqDEnVm=tJ+cleSu|Wxbfmg^I{bhP^5G~$o$Y^qnO7QAy~YN
    z6d+C8)AqTpZJXBZpf_b&Hpde(5->_2az~Q(rN>F)?%~l#6zplnFom%f&MPLnR+lf_
    zdFQ0QA@M0(HS^>G@zaSTTnv%9!LuxX%Zlp$0_}um3TPQ)f=VBRkF%8rj)`POH_OFw
    zXAmtxl!`K5Ls1_^1M*mVV|QVG{pbE;Ic4WI-&GY+6@+xQnaispf^tjnMa}^1PoBPx
    z;nV6m%`QP-*43M4G>@5siZI*`^mS0{GK97=YuHpjXGe(V*|ilX=t5#2$}c{nd2~vC
    zZH>)Sz}1IO{ZL%77LxtyaGH9ijH=wg?ByyDGE7jCauKdw!rS+LkFO_a{S$27mvSM2FS6~?H^*%EQepx5usc?{fW65hFK3F6(Oj}Q3OPT+ZlL3&NwwGJ6jPCseS
    zMvhwQF&1<4JVs&q3metnC4d1uS6B@l95rj)m>kC9s;1`?I|fL9W;*NPSZK~*a^viz
    ztXCLU$J#;$eqBj)hGQbGa~7T}29uTTH#xO0ZRn!}>CZiCJPZ>S
    z=-;D&UAD)1TDi)A04JntQ>z+!O|YuvQ?izPk^konLJ1f;{A_*M@b+~H
    zs?KSu72XD%Ca)zNNQc~_{qF@@6sZz9RL2U5j+>u1kMpd)cu8YX=8s=2A@oZn(T{St
    zr?Ui4UfRvL$!+8brm5X(G>$=;DXRtjHe7E0tYSnyn6Yq=)h9b9G7_BA8JU8pb=THN
    zoQC=5tYEUa%m&mPmYSGeqS-VXpPvq?!*#!}qd_ZzRVuP_H0H6@FplZ;;6UyD*3$c+
    zUMJTUzsW)@XO!9SR{@tf)pbtULg>vE)~w^qUAD
    zAv-^D6LQ!9BlRxE0f%nGRF?jdrz&Q1$3o^9bR;To5~*TP^6}y+@CB4xB!l|a!NGnr
    z@6m*Jug}R3%cl#5pXwEe)+u|I3e}xDKQsI1+R@7jol)x9&$R~4ly>QAV)SGL!au`B
    z2BY4VGL50DKS`F7eV5NQNpZ_3VZK+qrZI5%Y#O}jI2m=Z1$$VreApD3+#a{ElLuF-
    z{aV}N9{KPNQ-w6i&RE{@in9Okogk^ck(xG_?CAcOB>a^~sHuzM#5imxZk5h2##G)7
    zl|N@;p+l_yLxhsl#CyEM5ncZsa&MbziQ&|hSXy(^9bUcbM2XD_k8xdn!d5>v3*Pls
    z-1eL~?LRCQm2VTf3!iq+oi%RPY$vF;5f-T|cKN+TDiJ$I!`hf?&F`3oRmz+zsl^?<
    zWWm}K>V1P!61k4}kJoM_J(PSi3dZ0h4fZ>Z8$>6(>NdwVgDbg#Lg~6ZSWU|L*e_m3
    zs;Gm>7}BfT>xkw_yX^1P?J<-dUNh=Ab0xc?6*i7)T-
    z0nPtzAP0vNqR77C#D6h{Mo2>=J-z=d$rrO>^BMVX%nuQPWQuPj0iaMQy1`dMqx^k|
    Y1l@?ppwd+nIR6n~Z|#g}u)?SR4ac)rp#T5?
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/channels/test-release/images/jalview_test-release_logo-64@2x.png b/utils/channels/test-release/images/jalview_test-release_logo-64@2x.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..8185b9bf1763abe7d8640daaebf0b8f3a0577898
    GIT binary patch
    literal 2802
    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
    G5&bW}rzJK3
    
    literal 0
    HcmV?d00001
    
    diff --git a/utils/getdown/bin/jalview.ps1 b/utils/getdown/bin/jalview.ps1
    index 1098010..ade0089 100755
    --- a/utils/getdown/bin/jalview.ps1
    +++ b/utils/getdown/bin/jalview.ps1
    @@ -2,7 +2,6 @@
     
     # save args and first parameter
     $myArgs = $args.Clone()
    -$myArg1 = $args[0]
     
     # setup for powershell version < 6.0
     [bool] $myIsWindows = 0
    @@ -16,35 +15,67 @@ if ( $IsWindows -eq $null ) {
       $myIsMacOS = $IsMacOS
     }
     
    -# parent dir of this actual script (which should be the getdown appdir/bin). Follow all symlinks.  Like GNU readlink -f
    +[bool] $headless = 0
    +[bool] $gui = 0
    +[bool] $help = 0
    +[bool] $debug = 0
    +Switch -Regex ($args) {
    +  "--help|--help-|--version|-h" {
    +    $help = 1
    +    $headless = 1
    +    Continue
    +  }
    +  "--gui" {
    +    $gui = 1
    +    Continue
    +  }
    +  "--headless" {
    +    $headless = 1
    +    Continue
    +  }
    +  "--debug" {
    +    $debug = 1
    +    Continue
    +  }
    +}
    +if ( $help ) {
    +  # --help takes precedence
    +  $gui = 0
    +} elseif ( $gui ) {
    +  # --gui takes precedence over --headless
    +  $headless = 0
    +}
    +
    +# actual path of this script (which should be the getdown appdir/bin). Follow all symlinks.  Like GNU readlink -f
     function Readlink-f {
    -  Param($Link)
    -  $Return = $null
    -  $c = 0
    -  $max = 100 # just in case we end up in a loop
    -  [bool] $found = 0
    -  $file = Get-Item -Path $Link
    -  $prevfile = $null
    -  While ( $c -lt $max -and "${file}" -ne "${prevfile}" -and -not $found ) {
    -    $prevfile = $file
    -    [string] $target = ( $file ).Target
    -    If ( $target -eq $null -or ( $file ).LinkType -ne "SymbolicLink" ) {
    -      $Return = $file
    -      $found = 1
    -    } Else {
    -      If ( $( Split-Path -Path $target -IsAbsolute ) ) {
    -        $file = Get-Item -Path $target
    -      } Else {
    -# symbolic link is relative: combine previous link parent dir with the link target and resolve
    -        $file = Get-Item -Path ( Join-Path -Path ( Split-Path -Path $prevfile -Parent ) -ChildPath $target -Resolve )
    -      }
    +  Param(
    +    [Parameter(mandatory=$true, ValueFromPipeline=$true)]$Link,
    +    [Parameter()]$iteration_count = 1
    +  )
    +  if ( $iteration_count -ge 100 ) {
    +    Write-Error "Readlink-f iterated 100 times"
    +    return $Link
    +  }
    +  if ( $Link -eq "" -or $Link -eq $null ) {
    +    return $null
    +  }
    +  $path_components = @()
    +  $dir = Get-Item $Link
    +  while ( $dir -ne $null ) {
    +    while ( $dir.Target -ne $null ) {
    +      # [System.IO.Path]::Combine caters for a multitude of sins that it's almost impossible to deal with with Join-Path
    +      $dir = Get-Item ([System.IO.Path]::GetFullPath( [System.IO.Path]::Combine( (Split-Path $dir -Parent), $dir.Target )))
         }
    -    $c++
    +    $parent = Split-Path -Path $dir -Parent
    +    $path_components = @( (Split-Path -Path $dir -Leaf) ) + $path_components
    +    $dir = Readlink-f $parent ($iteration_count + 1)
       }
    -  if ( -not $found ) {
    -    throw "Could not determine path to actual file $( Split-Path -Path $Link -Leaf )"
    +  $real = Get-Item "/"
    +  foreach ( $component in $path_components) {
    +    # [System.IO.Path]::Combine caters for a multitude of sins that it's almost impossible to deal with with Join-Path
    +    $real = Get-Item ([System.IO.Path]::GetFullPath( [System.IO.Path]::Combine( $real, $component )))
       }
    -  $Return
    +  $real
     }
     
     # Avert problem with unix version of powershell and tell user the reason (Windows must always have .ps1 extension)
    @@ -52,14 +83,28 @@ if ( $MyInvocation.MyCommand.Path -eq $null ) {
       throw "Script or link to script must have extension .ps1"
     }
     
    +# args for the JVM
    +$JVMARGS = @()
     
     $CMDPATH = ( Get-Item $MyInvocation.MyCommand.Path )
     $SCRIPTPATH = Readlink-f -Link $CMDPATH
    +$SCRIPT = $SCRIPTPATH
     $DIR = Split-Path -Path $SCRIPTPATH -Parent
    -
     $APPDIR = If ( ( Split-Path -Path $DIR -Leaf ) -eq "bin" ) { Split-Path -Path $DIR -Parent } Else { $DIR }
     $JAVAEXE = If ( $myIsWindows ) { "java.exe" } Else { "java" }
     $JAVA = Join-Path -Path $APPDIR -ChildPath ( "jre/" + $( If ( $myIsMacOS ) { "Contents/Home/" } Else { "" } ) + "bin/${JAVAEXE}" )
    +
    +if ( $headless ) {
    +  # not setting java.awt.headless in java invocation of running jalview due to problem with Jmol
    +  if ( $help ) {
    +    $JVMARGS += "-Djava.awt.headless=true"
    +  }
    +  # this suppresses the Java icon appearing in the macOS Dock
    +  if ( $myIsMacOS ) {
    +    $JVMARGS += "-Dapple.awt.UIElement=true"
    +  }
    +}
    +
     $GETDOWNTXT = Join-Path -Path $APPDIR -ChildPath "getdown.txt"
     
     # look for getdown.txt -- needed to create classpath
    @@ -67,22 +112,39 @@ if ( -not ( Test-Path -Path "${GETDOWNTXT}" ) ) {
       throw "Cannot find ${GETDOWNTXT}"
     }
     
    +# launching Jalview with jalview.bin.Launcher instead of getdown-launcher.jar
    +$CLASS = "jalview.bin.Launcher"
    +
    +# get CLASSPATH from the code= entries in getdown.txt
    +$CLASSPATH = ( Select-String -Path "${GETDOWNTXT}" -AllMatches -Pattern "code\s*=\s*(.*)$" | foreach { Join-Path -Path $APPDIR -ChildPath $($_.Matches.Groups[1].Value ) } ) -join $( If ( $myIsWindows ) { ";" } Else { ":" } )
    +
    +# get console width
    +$COLUMNS = $Host.UI.RawUI.WindowSize.Width
    +$JVMARGS += "-DCONSOLEWIDTH=${COLUMNS}"
    +$JVMARGS += "-Dgetdownappdir=${APPDIR}"
    +$JVMARGS += "-Dinstaller.appdir=${APPDIR}"
    +$JVMARGS += "-Dlauncher.script=${SCRIPT}"
    +
     # look for bundled JRE. Might not be there if unix installer used in which case just invoke "java"
     if ( -not ( Test-Path -Path "${JAVA}" ) ) {
    -  Write-Host "Cannot find bundled ${JAVAEXE}. Using system ${JAVAEXE} and hoping for the best!"
    +  Write-Host "Cannot find bundled ${JAVA}. Using system ${JAVAEXE} and hoping for the best!"
       $JAVA = $JAVAEXE
     }
     
    -$CLASSPATH = ( Select-String -Path "${GETDOWNTXT}" -AllMatches -Pattern "code\s*=\s*(.*)$" | foreach { Join-Path -Path $APPDIR -ChildPath $($_.Matches.Groups[1].Value ) } ) -join $( If ( $myIsWindows ) { ";" } Else { ":" } )
    -
    -# get console width
    -$CONSOLEWIDTH = $Host.UI.RawUI.WindowSize.Width
    +# we should always have at least one JVMARGS so this is okay
    +$myJvmArgsString = '"' + $($JVMARGS -join '" "') + '"'
     
    -# quote the args and the command (in case of spaces) with escape chars (`) and precede with & to indicate command not string
    +# quote the args and the command (in case of spaces) with escape chars (`) and precede with & to indicate a command not string
     if ( $myArgs.count -eq 0 ) {
    -  Invoke-Expression -Command "& `"${JAVA}`" `"-DCONSOLEWIDTH=${CONSOLEWIDTH}`" `"-Dgetdownappdir=${APPDIR}`" -cp `"${CLASSPATH}`" jalview.bin.Launcher"
    +  $COMMAND = "& `"${JAVA}`" ${myJvmArgsString} -cp `"${CLASSPATH}`" $CLASS"
     } else {
       $myArgsString = '"' + $($myArgs -join '" "') + '"'
    -  Invoke-Expression -Command "& `"${JAVA}`" `"-DCONSOLEWIDTH=${CONSOLEWIDTH}`" `"-Dgetdownappdir=${APPDIR}`" -cp `"${CLASSPATH}`" jalview.bin.Launcher ${myArgsString}"
    +  $COMMAND = "& `"${JAVA}`" ${myJvmArgsString} -cp `"${CLASSPATH}`" $CLASS ${myArgsString}"
     }
     
    +if ( $debug -or $help ) {
    +  Write-Error -Message "Shell running: ${COMMAND}"
    +}
    +
    +Invoke-Expression -Command ${COMMAND}
    +
    diff --git a/utils/getdown/bin/jalview.sh b/utils/getdown/bin/jalview.sh
    index 90d1558..3880faf 100755
    --- a/utils/getdown/bin/jalview.sh
    +++ b/utils/getdown/bin/jalview.sh
    @@ -2,34 +2,6 @@
     
     declare -a ARGS=("${@}")
     
    -# this whole next part is because there's no readlink -f in Darwin
    -function readlinkf() {
    -  FINDFILE="$1"
    -  FILE="${FINDFILE}"
    -  PREVFILE=""
    -  C=0
    -  MAX=100 # just in case we end up in a loop
    -  FOUND=0
    -  while [ "${C}" -lt "${MAX}" -a "${FILE}" != "${PREVFILE}" -a "${FOUND}" -ne 1 ]; do
    -    PREVFILE="${FILE}"
    -    FILE="$(readlink "${FILE}")"
    -    if [ -z "${FILE}" ]; then
    -      # the readlink is empty means we've arrived at the script, let's canonicalize with pwd
    -      FILE="$(cd "$(dirname "${PREVFILE}")" &> /dev/null && pwd -P)"/"$(basename "${PREVFILE}")"
    -      FOUND=1
    -    elif [ "${FILE#/}" = "${FILE}" ]; then
    -      # FILE is not an absolute path link, we need to add the relative path to the previous dir
    -      FILE="$(dirname "${PREVFILE}")/${FILE}"
    -    fi
    -    C=$((C+1))
    -  done
    -  if [ "${FOUND}" -ne 1 ]; then
    -    echo "Could not determine path to actual file '$(basename "${FINDFILE}")'" >&2
    -    exit 1
    -  fi
    -  echo "${FILE}"
    -}
    -
     ISMACOS=0
     if [ "$( uname -s )" = "Darwin" ]; then
       ISMACOS=1
    @@ -48,6 +20,7 @@ for RAWARG in "${@}"; do
           ;;
         --help|--help-*|--version|-h)
           HELP=1
    +      HEADLESS=1
           ;;
         --gui)
           GUI=1
    @@ -56,33 +29,85 @@ for RAWARG in "${@}"; do
           DEBUG=1
           ;;
       esac
    -  
    -  if [ "${HELP}" = 1 ]; then
    -    # --help takes precedence
    -    HEADLESS=1
    -    GUI=0
    -  elif [ "${GUI}" = 1 ]; then
    -    # --gui takes precedence over --headless
    -    HEADLESS=0
    -  fi
     done
    +if [ "${HELP}" = 1 ]; then
    +  # --help takes precedence
    +  GUI=0
    +elif [ "${GUI}" = 1 ]; then
    +  # --gui takes precedence over --headless
    +  HEADLESS=0
    +fi
    +
    +# this whole next part is because there's no readlink -f in Darwin
    +function readlinkf() {
    +  FINDFILE="$1"
    +  FILE="${FINDFILE}"
    +  PREVFILE=""
    +  C=0
    +  MAX=100 # just in case we end up in a loop
    +  FOUND=0
    +  while [ "${C}" -lt "${MAX}" -a "${FILE}" != "${PREVFILE}" -a "${FOUND}" -ne 1 ]; do
    +    PREVFILE="${FILE}"
    +    FILE="$(readlink "${FILE}")"
    +    if [ -z "${FILE}" ]; then
    +      # the readlink is empty means we've arrived at the script, let's canonicalize with pwd
    +      FILE="$(cd "$(dirname "${PREVFILE}")" &> /dev/null && pwd -P)"/"$(basename "${PREVFILE}")"
    +      FOUND=1
    +    elif [ "${FILE#/}" = "${FILE}" ]; then
    +      # FILE is not an absolute path link, we need to add the relative path to the previous dir
    +      FILE="$(dirname "${PREVFILE}")/${FILE}"
    +    fi
    +    C=$((C+1))
    +  done
    +  if [ "${FOUND}" -ne 1 ]; then
    +    echo "Could not determine path to actual file '$(basename "${FINDFILE}")'" >&2
    +    exit 1
    +  fi
    +  echo "${FILE}"
    +}
     
    +# args for the JVM
     declare -a JVMARGS=()
     
    +JAVABIN=""
     # set vars for being inside the macos App Bundle
     if [ "${ISMACOS}" = 1 ]; then
     # MACOS ONLY
    -  DIR="$(dirname "$(readlinkf "$0")")"
    +  SCRIPT="$(readlinkf "$0")"
    +  DIR="$(dirname "${SCRIPT}")"
       APPDIR="${DIR%/bin}"
    -  JAVA="${APPDIR}/jre/Contents/Home/bin/java"
    -  JVMARGS=( "${JVMARGS[@]}" "-Xdock:icon=${APPDIR}/resource/jalview_logo.png" )
    +
    +  if [ -d "${APPDIR}/jre" ]; then
    +    JREDIR="${APPDIR}/jre"
    +  elif [ -e "${APPDIR}/installer.properties" ]; then
    +    INSTALLERAPPDIR="$( grep -E "^installer.appdir[[:space:]]*=[[:space:]]*" "${APPDIR}/installer.properties" | sed -E 's/^installer.appdir[[:space:]]*=[[:space:]]*//' )"
    +    if [ -d "${INSTALLERAPPDIR}/jre" ]; then
    +      JREDIR="${INSTALLERAPPDIR}/jre"
    +    fi
    +  fi
    +  if [ ! -z "$JREDIR" ]; then
    +    JAVABIN="${JREDIR}/Contents/Home/bin"
    +  fi
    +  if [ "${HEADLESS}" != 1 ]; then
    +    JVMARGS=( "${JVMARGS[@]}" "-Xdock:icon=${APPDIR}/resource/jalview_logo.png" )
    +  fi
     else
     # NOT MACOS
    -  DIR="$(dirname "$(readlink -f "$0")")"
    +  SCRIPT="$(readlink -f "$0")"
    +  DIR="$(dirname "${SCRIPT}")"
       APPDIR="${DIR%/bin}"
    -  JAVA="${APPDIR}/jre/bin/java"
    +  if [ -d "${APPDIR}/jre" ]; then
    +    JAVABIN="${APPDIR}/jre/bin"
    +  elif [ -e "${APPDIR}/installer.properties" ]; then
    +    INSTALLERAPPDIR="$( grep -E "^installer.appdir[[:space:]]*=[[:space:]]*" "${APPDIR}/installer.properties" | sed -E 's/^installer.appdir[[:space:]]*=[[:space:]]*//' )"
    +    if [ ! -z "$INSTALLERAPPDIR" -a -d "${INSTALLERAPPDIR}/jre" ]; then
    +      JAVABIN="${INSTALLERAPPDIR}/jre/bin"
    +    fi
    +  fi
     fi
    +JAVA="${JAVABIN}/java"
     
    +# headless java arguments
     if [ "${HEADLESS}" = 1 ]; then
       # not setting java.awt.headless in java invocation of running jalview due to problem with Jmol
       if [ "${HELP}" = 1 ]; then
    @@ -96,27 +121,50 @@ fi
     
     SYSJAVA=java
     GETDOWNTXT="${APPDIR}/getdown.txt"
    +CHANNELPROPS="${APPDIR}/channel.props"
    +NAME="$( grep app_name= "${CHANNELPROPS}" | cut -d= -f2 )"
     
     CLASSPATH=""
     # save an array of JAR paths in case we're in WSL (see later)
     declare -a JARPATHS=()
    -if [ -e "${GETDOWNTXT}" ]; then
    -  # always check grep and sed regexes on macos -- they're not the same
    -for JAR in $(grep -e '^code[[:space:]]*=[[:space:]]*' "${GETDOWNTXT}" | while read -r line; do echo $line | sed -E -e 's/code[[:space:]]*=[[:space:]]*//;'; done);
    -  do
    -    [ -n "${CLASSPATH}" ] && CLASSPATH="${CLASSPATH}:"
    -    CLASSPATH="${CLASSPATH}${APPDIR}/${JAR}"
    -    JARPATHS=( "${JARPATHS[@]}" "${APPDIR}/${JAR}" )
    -  done
    -else
    -  echo "Cannot find getdown.txt" >&2
    +
    +# look for getdown.txt -- needed to create classpath
    +if [ ! -e "${GETDOWNTXT}" ]; then
    +  echo "Cannot find ${GETDOWNTXT}" >&2
       exit 3
     fi
     
    -# WINDOWS ONLY (Cygwin or WSL)
    -# change paths for Cygwin or Windows Subsystem for Linux (WSL)
    +# launching Jalview with jalview.bin.Launcher instead of getdown-launcher.jar
    +CLASS="jalview.bin.Launcher"
    +
    +# get classpath from the code= entries in getdown.txt
    +# always check grep and sed regexes on macos -- they're not the same
    +for JAR in $(grep -e '^code[[:space:]]*=[[:space:]]*' "${GETDOWNTXT}" | while read -r line; do echo $line | sed -E -e 's/code[[:space:]]*=[[:space:]]*//;'; done);
    +do
    +  [ -n "${CLASSPATH}" ] && CLASSPATH="${CLASSPATH}:"
    +  CLASSPATH="${CLASSPATH}${APPDIR}/${JAR}"
    +  JARPATHS=( "${JARPATHS[@]}" "${APPDIR}/${JAR}" )
    +done
    +
    +COLUMNS=80
    +# get console width -- three ways to try, just in case (not needed for update)
    +if command -v tput 2>&1 >/dev/null; then
    +  COLUMNS=$(tput cols) 2>/dev/null
    +elif command -v stty 2>&1 >/dev/null; then
    +  COLUMNS=$(stty size | cut -d" " -f2) 2>/dev/null
    +elif command -v resize 2>&1 >/dev/null; then
    +  COLUMNS=$(resize -u | grep COLUMNS= | sed -e 's/.*=//;s/;//') 2>/dev/null
    +fi
    +JVMARGS=( "${JVMARGS[@]}" "-DCONSOLEWIDTH=${COLUMNS}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dgetdownappdir=${APPDIR}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dlauncher.script=${SCRIPT}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dinstaller.appdir=${APPDIR}" )
    +
    +JAVAEXT=""
    +# WINDOWS ONLY in Cygwin or Windows Subsystem for Linux (WSL)
    +# change paths for Cygwin or WSL
     if [ "${ISMACOS}" != 1 ]; then # older macos doesn't like uname -o, best to avoid
    -  if [ "$(uname -o)" = "Cygwin" ]; then
    +  if [ "$(uname -o)" = "Cygwin" ]; then # Cygwin
       # CYGWIN
         CLASSPATH=$(cygpath -pw "${CLASSPATH}")
         # now for some arg paths fun. only translating paths starting with './', '../', '/' or '~'
    @@ -128,7 +176,7 @@ if [ "${ISMACOS}" != 1 ]; then # older macos doesn't like uname -o, best to avoi
             ARGS=( "${ARGS[@]}" "${ARG}" )
           fi
         done
    -  elif uname -r | grep -i microsoft | grep -i wsl >/dev/null; then
    +  elif uname -r | grep -i microsoft | grep -i wsl >/dev/null; then # WSL
       # WSL
         CLASSPATH=""
         for JARPATH in "${JARPATHS[@]}"; do
    @@ -146,32 +194,27 @@ if [ "${ISMACOS}" != 1 ]; then # older macos doesn't like uname -o, best to avoi
             ARGS=( "${ARGS[@]}" "${ARG}" )
           fi
         done
    -    JAVA="${JAVA}.exe"
    -    SYSJAVA="java.exe"
    +    JAVAEXT=".exe"
    +    JAVA="${JAVA}${JAVAEXT}"
    +    SYSJAVA="java${JAVAEXT}"
       fi
     fi
     
    -# get console width -- three ways to try, just in case
    -if command -v tput 2>&1 >/dev/null; then
    -  COLUMNS=$(tput cols) 2>/dev/null
    -elif command -v stty 2>&1 >/dev/null; then
    -  COLUMNS=$(stty size | cut -d" " -f2) 2>/dev/null
    -elif command -v resize 2>&1 >/dev/null; then
    -  COLUMNS=$(resize -u | grep COLUMNS= | sed -e 's/.*=//;s/;//') 2>/dev/null
    +# look for bundled JRE. Might not be there if unix installer used in which case just invoke "java"
    +if [ ! -z "${JAVABIN}" -a -e "${JAVABIN}/${NAME}${JAVAEXT}" ]; then
    +  JAVA="${JAVABIN}/${NAME}${JAVAEXT}"
     fi
    -JVMARGS=( "${JVMARGS[@]}" "-DCONSOLEWIDTH=${COLUMNS}" )
    -JVMARGS=( "${JVMARGS[@]}" "-Dgetdownappdir=${APPDIR}" )
    -
    -# Is there a bundled Java?  If not just try one in the PATH (do need .exe in WSL)
    -if [ \! -e "${JAVA}" ]; then
    -  JAVA=$SYSJAVA
    -  echo "Cannot find bundled java, using system ${JAVA} and hoping for the best!" >&2
    +# If not just try one in the PATH (we need .exe in WSL, added above)
    +if [ -z "${JAVABIN}" -o ! -e "${JAVA}" ]; then
    +  JAVA="${SYSJAVA}"
    +  echo "Cannot find bundled ${JAVA}, using system ${SYSJAVA} and hoping for the best!" >&2
     fi
     
    +# This is just needed for display purposes
     function quotearray() {
       QUOTEDVALS=""
       for VAL in "${@}"; do
    -    if [ \! "$QUOTEDVALS" = "" ]; then
    +    if [ ! "$QUOTEDVALS" = "" ]; then
           QUOTEDVALS="${QUOTEDVALS} "
         fi
         QUOTEDVALS="${QUOTEDVALS}\"${VAL}\""
    @@ -179,11 +222,12 @@ function quotearray() {
       echo $QUOTEDVALS
     }
     
    +# for the debug command display
     JVMARGSSTR=$(quotearray "${JVMARGS[@]}")
     ARGSSTR=$(quotearray "${ARGS[@]}")
     
     if [ "${DEBUG}" = 1 ]; then
    - echo Shell running: \""${JAVA}"\" ${JVMARGSSTR} -cp \""${CLASSPATH}"\" jalview.bin.Launcher ${ARGSSTR}
    + echo Shell running: \""${JAVA}"\" ${JVMARGSSTR} -cp \""${CLASSPATH}"\" \""${CLASS}"\" ${ARGSSTR} >&2
     fi
     
    -"${JAVA}" "${JVMARGS[@]}" -cp "${CLASSPATH}" jalview.bin.Launcher "${ARGS[@]}"
    +"${JAVA}" "${JVMARGS[@]}" -cp "${CLASSPATH}" "${CLASS}" "${ARGS[@]}"
    diff --git a/utils/getdown/bin/run_other_script.ps1 b/utils/getdown/bin/run_other_script.ps1
    new file mode 100755
    index 0000000..1c00beb
    --- /dev/null
    +++ b/utils/getdown/bin/run_other_script.ps1
    @@ -0,0 +1,49 @@
    +#!/usr/bin/env pwsh
    +
    +$OTHERSCRIPT = "__OTHERSCRIPT__"
    +
    +# actual path of this script (which should be the getdown appdir/bin). Follow all symlinks.  Like GNU readlink -f
    +function Readlink-f {
    +  Param(
    +    [Parameter(mandatory=$true, ValueFromPipeline=$true)]$Link,
    +    [Parameter()]$iteration_count = 1
    +  )
    +  if ( $iteration_count -ge 100 ) {
    +    Write-Error "Readlink-f iterated 100 times"
    +    return $Link
    +  }
    +  if ( $Link -eq "" -or $Link -eq $null ) {
    +    return $null
    +  }
    +  $path_components = @()
    +  $dir = Get-Item $Link
    +  while ( $dir -ne $null ) {
    +    while ( $dir.Target -ne $null ) {
    +      # [System.IO.Path]::Combine caters for a multitude of sins that it's almost impossible to deal with with Join-Path
    +      $dir = Get-Item ([System.IO.Path]::GetFullPath( [System.IO.Path]::Combine( (Split-Path $dir -Parent), $dir.Target )))
    +    }
    +    $parent = Split-Path -Path $dir -Parent
    +    $path_components = @( (Split-Path -Path $dir -Leaf) ) + $path_components
    +    $dir = Readlink-f $parent ($iteration_count + 1)
    +  }
    +  $real = Get-Item "/"
    +  foreach ( $component in $path_components) {
    +    # [System.IO.Path]::Combine caters for a multitude of sins that it's almost impossible to deal with with Join-Path
    +    $real = Get-Item ([System.IO.Path]::GetFullPath( [System.IO.Path]::Combine( $real, $component )))
    +  }
    +  $real
    +}
    +
    +$CMDPATH = ( Get-Item $MyInvocation.MyCommand.Path )
    +$SCRIPTPATH = Readlink-f -Link $CMDPATH
    +$SCRIPTBIN = Split-Path -Path $SCRIPTPATH -Parent
    +$SCRIPT = Join-Path $SCRIPTBIN -ChildPath $OTHERSCRIPT
    +
    +if ( $args.Count -eq 0 ) {
    +  & $SCRIPT
    +} else {
    +  if ($args.Contains("--debug")) {
    +    Write-Host "Running: $SCRIPT $args"
    +  }
    +  & $SCRIPT @args
    +}
    diff --git a/utils/getdown/bin/jalview.bat b/utils/getdown/bin/run_powershell.bat
    similarity index 100%
    rename from utils/getdown/bin/jalview.bat
    rename to utils/getdown/bin/run_powershell.bat
    diff --git a/utils/getdown/bin/update.ps1 b/utils/getdown/bin/update.ps1
    new file mode 100755
    index 0000000..82b74d4
    --- /dev/null
    +++ b/utils/getdown/bin/update.ps1
    @@ -0,0 +1,204 @@
    +#!/usr/bin/env pwsh
    +
    +# setup for powershell version < 6.0
    +[bool] $myIsWindows = 0
    +[bool] $myIsMacOS = 0
    +if ( $IsWindows -eq $null ) {
    +  # for powershell version < 6.0 let's assume Windows
    +  $myIsWindows = 1
    +  $myIsMacOS = 0
    +} else {
    +  $myIsWindows = $IsWindows
    +  $myIsMacOS = $IsMacOS
    +}
    +
    +$USAGE = "Please use either --installation or --userspace."
    +
    +[bool] $debug = 0
    +[bool] $userspace = 0
    +[bool] $installation = 0
    +Switch ($args) {
    +  "--debug" {
    +    $debug = 1
    +    Continue
    +  }
    +  "--installation" {
    +    $installation = 1
    +    Continue
    +  }
    +  "--userspace" {
    +    $userspace = 1
    +    Continue
    +  }
    +  Default {
    +    throw "Unknown option '$_'.  ${USAGE}."
    +  }
    +}
    +
    +if ( -not ( $userspace -or -$installation ) ) {
    +  Write-Output "${USAGE}."
    +  Exit
    +}
    +
    +# actual path of this script (which should be the getdown appdir/bin). Follow all symlinks.  Like GNU readlink -f
    +function Readlink-f {
    +  Param(
    +    [Parameter(mandatory=$true, ValueFromPipeline=$true)]$Link,
    +    [Parameter()]$iteration_count = 1
    +  )
    +  if ( $iteration_count -ge 100 ) {
    +    Write-Error "Readlink-f iterated 100 times"
    +    return $Link
    +  }
    +  if ( $Link -eq "" -or $Link -eq $null ) {
    +    return $null
    +  }
    +  $path_components = @()
    +  $dir = Get-Item $Link
    +  while ( $dir -ne $null ) {
    +    while ( $dir.Target -ne $null ) {
    +      # [System.IO.Path]::Combine caters for a multitude of sins that it's almost impossible to deal with with Join-Path
    +      $dir = Get-Item ([System.IO.Path]::GetFullPath( [System.IO.Path]::Combine( (Split-Path $dir -Parent), $dir.Target )))
    +    }
    +    $parent = Split-Path -Path $dir -Parent
    +    $path_components = @( (Split-Path -Path $dir -Leaf) ) + $path_components
    +    $dir = Readlink-f $parent ($iteration_count + 1)
    +  }
    +  $real = Get-Item "/"
    +  foreach ( $component in $path_components) {
    +    # [System.IO.Path]::Combine caters for a multitude of sins that it's almost impossible to deal with with Join-Path
    +    $real = Get-Item ([System.IO.Path]::GetFullPath( [System.IO.Path]::Combine( $real, $component )))
    +  }
    +  $real
    +}
    +
    +# Avert problem with unix version of powershell and tell user the reason (Windows must always have .ps1 extension)
    +if ( $MyInvocation.MyCommand.Path -eq $null ) {
    +  throw "Script or link to script must have extension .ps1"
    +}
    +
    +# args for the JVM
    +$JVMARGS = @()
    +
    +$CMDPATH = ( Get-Item $MyInvocation.MyCommand.Path )
    +$SCRIPTPATH = Readlink-f -Link $CMDPATH
    +$SCRIPT = $SCRIPTPATH
    +$DIR = Split-Path -Path $SCRIPTPATH -Parent
    +$APPDIR = If ( ( Split-Path -Path $DIR -Leaf ) -eq "bin" ) { Split-Path -Path $DIR -Parent } Else { $DIR }
    +$JAVAEXE = If ( $myIsWindows ) { "java.exe" } Else { "java" }
    +if ( $myIsMacOS ) {
    +  $JAVABIN = Join-Path -Path $APPDIR -ChildPath "jre/Contents/Home/bin"
    +  $APPFOLDER = ( $APPDIR -Replace "\.app.*", "" ) + ".app"
    +  $VMOPTIONS = Join-Path -Path $APPFOLDER -ChildPath "Contents/vmoptions.txt"
    +} else {
    +  $JAVABIN = Join-Path -Path $APPDIR -ChildPath "jre" | Join-Path -ChildPath "bin"
    +  $APPFOLDER = $APPDIR
    +  $VMOPTIONS = Join-Path -Path $APPDIR -ChildPath "jalviewg.vmoptions"
    +}
    +$JAVA = Join-Path -Path $JAVABIN -ChildPath $JAVAEXE
    +
    +$JVMARGS += "-Djava.awt.headless=true"
    +if ( $myIsMacOS ) {
    +  $JVMARGS += "-Dapple.awt.UIElement=true"
    +}
    +
    +$GETDOWNLAUNCHERJAR = Join-Path -Path $APPDIR -ChildPath "getdown-launcher.jar"
    +$GETDOWNCOREJAR = Join-Path -Path $APPDIR -ChildPath "resource" | Join-Path -ChildPath "getdown-core.jar"
    +$CHANNELPROPS = Join-Path -Path $APPDIR -ChildPath "channel.props"
    +$NAME = ( Select-String -Path "${CHANNELPROPS}" -Pattern "^app_name=(.*)$" ).Matches.Groups[1].Value
    +$US_NAME = $NAME -Replace " ", "_"
    +
    +# getdown-launcher classpath
    +if ( Test-Path -Path $GETDOWNLAUNCHERJAR ) {
    +  $GDL_CLASSPATH = "${GETDOWNLAUNCHERJAR}"
    +} else {
    +  throw "Cannot find ${GETDOWNLAUNCHERJAR} to run update"
    +}
    +
    +# getdown-core classpath
    +if ( Test-Path -Path $GETDOWNCOREJAR ) {
    +  $GDC_CLASSPATH = "${GETDOWNCOREJAR}"
    +} else {
    +  throw "Cannot find ${GETDOWNCOREJAR} to run update"
    +}
    +
    +# USER space update
    +if ( $userspace ) {
    +  if ( Test-Path -Path $VMOPTIONS ) {
    +    $LINENUM = 0
    +    $lines = Get-Content -Path $VMOPTIONS
    +    foreach ( $line in $lines ) {
    +      # remove comments
    +      $line -Replace "#.*", "" | Out-Null
    +      # remove leading and trailing whitespace
    +      $line -Replace "(^\s+|\s+$)", "" | Out-Null
    +      $LINENUM++
    +
    +      if ( $line -Match "^-Dsetuserappdirpath=" ) {
    +        $JVMARGS += $line
    +      }
    +      if ( $line -Match "^-Dnouserdefaultappdir=" ) {
    +        $NOUSERUPDATEVALUE = ( $line -Replace ".*=", "" ).ToLower()
    +        if ( $NOUSERUPDATEVALUE -eq "true" ) {
    +          throw "Cannot perform manual user-space update when user-space updates are disabled.`nSee line ${LINENUM} (${line}) in file '${VMOPTIONS}'."
    +        }
    +        $JVMARGS += $line
    +      }
    +    }
    +  } else {
    +    echo "Could not find VMOPTIONS file '${VMOPTIONS}'"
    +  }
    +  $JVMARGS += "-Duserdefaultappdir=true"
    +  $JVMARGS += "-Dnouserdefaultappdir=false"
    +}
    +
    +# INSTALLATION update
    +if ( $installation ) {
    +  $JVMARGS += "-Duserdefaultappdir=false"
    +  $JVMARGS += "-Dnouserdefaultappdir=true"
    +  $JVMARGS += "-Dlauncher.appdir=${APPDIR}"
    +  $JVMARGS += "-Dappdir=${APPDIR}"
    +}
    +
    +# setting the appdir arg[0] and appid arg[1] to blank values
    +# so appDir is determined by EnvConfig.getUserAppdir() or appdir property
    +# and appId is passed as system property appid
    +$GDL_ARGS = @( "", "" )
    +
    +# both USER and INSTALLATION updates
    +$JVMARGS += "-Dinstaller.appdir=${APPDIR}"
    +$JVMARGS += "-Dinstaller.application_folder=${US_NAME}"
    +$JVMARGS += "-Dlauncher.script=${SCRIPT}"
    +$JVMARGS += "-Dlauncher.update=true"
    +$JVMARGS += "-Dchannel.app_name=${NAME}"
    +$JVMARGS += "-Dappid=jalview"
    +
    +# IMPORTANT! tell getdown to update jalview withouth launching
    +$JVMARGS += "-Dsilent=true"
    +
    +# add these Just In Case although jalview shouldn't be launched due to -Dsilent=true
    +$GDL_ARGS += ( "--headless", "--quit", "--nojavaconsole", "--nosplash", "--nonews" )
    +
    +# look for bundled JRE. Might not be there if unix installer used in which case just invoke "java"
    +if ( -not ( Test-Path -Path $JAVA ) ) {
    +  Write-Host "Cannot find bundled ${JAVA}. Using system ${JAVAEXE} and hoping for the best!"
    +  $JAVA = $JAVAEXE
    +}
    +
    +# we should always have at least one JVMARGS and GDL_ARGS so this is okay
    +$myJvmArgsString = '"' + $($JVMARGS -join '" "') + '"'
    +$myGdlArgsString = '"' + $($GDL_ARGS -join '" "') + '"'
    +
    +# quote the args and the command (in case of spaces) with escape chars (`) and precede with & to indicate a command not string
    +$COMMAND = "& `"${JAVA}`" ${myJvmArgsString} -cp `"${GDL_CLASSPATH}`" com.threerings.getdown.launcher.GetdownApp ${myGdlArgsString}"
    +if ( $debug ) {
    +  Write-Output "Shell running: ${COMMAND}"
    +}
    +Invoke-Expression -Command $COMMAND
    +
    +# move updated getdown-launcher.jar into place
    +$COMMAND = "& `"${JAVA}`" ${myJvmArgsString} -cp `"${GDC_CLASSPATH}`" jalview.bin.GetdownLauncherUpdate"
    +if ( $debug ) {
    +  Write-Output "Shell running: ${COMMAND}"
    +}
    +Invoke-Expression -Command $COMMAND
    diff --git a/utils/getdown/bin/update.sh b/utils/getdown/bin/update.sh
    new file mode 100755
    index 0000000..03f369e
    --- /dev/null
    +++ b/utils/getdown/bin/update.sh
    @@ -0,0 +1,253 @@
    +#!/usr/bin/env bash
    +
    +declare -a ARGS=("${@}")
    +
    +ISMACOS=0
    +if [ "$( uname -s )" = "Darwin" ]; then
    +  ISMACOS=1
    +fi
    +
    +USAGE="Please use either --installation or --userspace"
    +
    +DEBUG=0
    +USERSPACE=0
    +INSTALLATION=0
    +DISABLEROOTCHECK=0
    +for RAWARG in "${@}"; do
    +  ARG="${RAWARG%%=*}"
    +  case "${ARG}" in
    +    --debug)
    +      DEBUG=1
    +      ;;
    +    --installation)
    +      INSTALLATION=1
    +      ;;
    +    --userspace)
    +      USERSPACE=1
    +      ;;
    +    --norootcheck)
    +      DISABLEROOTCHECK=1
    +      ;;
    +    *)
    +      echo "Unknown option '${ARG}'.  ${USAGE}." >&2
    +      exit 2
    +  esac
    +done
    +
    +if [ "${USERSPACE}${INSTALLATION}" = "00" ]; then
    +  echo "${USAGE}."
    +  exit
    +fi
    +
    +# this whole next part is because there's no readlink -f in Darwin
    +function readlinkf() {
    +  FINDFILE="$1"
    +  FILE="${FINDFILE}"
    +  PREVFILE=""
    +  C=0
    +  MAX=100 # just in case we end up in a loop
    +  FOUND=0
    +  while [ "${C}" -lt "${MAX}" -a "${FILE}" != "${PREVFILE}" -a "${FOUND}" -ne 1 ]; do
    +    PREVFILE="${FILE}"
    +    FILE="$(readlink "${FILE}")"
    +    if [ -z "${FILE}" ]; then
    +      # the readlink is empty means we've arrived at the script, let's canonicalize with pwd
    +      FILE="$(cd "$(dirname "${PREVFILE}")" &> /dev/null && pwd -P)"/"$(basename "${PREVFILE}")"
    +      FOUND=1
    +    elif [ "${FILE#/}" = "${FILE}" ]; then
    +      # FILE is not an absolute path link, we need to add the relative path to the previous dir
    +      FILE="$(dirname "${PREVFILE}")/${FILE}"
    +    fi
    +    C=$((C+1))
    +  done
    +  if [ "${FOUND}" -ne 1 ]; then
    +    echo "Could not determine path to actual file '$(basename "${FINDFILE}")'" >&2
    +    exit 1
    +  fi
    +  echo "${FILE}"
    +}
    +
    +# args for the JVM
    +declare -a JVMARGS=()
    +
    +# set vars for being inside the macos App Bundle
    +if [ "${ISMACOS}" = 1 ]; then
    +# MACOS ONLY
    +  SCRIPT="$(readlinkf "$0")"
    +  DIR="$(dirname "${SCRIPT}")"
    +  APPDIR="${DIR%/bin}"
    +  JAVABIN="${APPDIR}/jre/Contents/Home/bin"
    +  # e.g. APPFOLDER=/Applications/Jalview.app
    +  APPFOLDER="${APPDIR%%.app/*}.app"
    +  VMOPTIONS="${APPFOLDER}/Contents/vmoptions.txt"
    +else
    +# NOT MACOS
    +  SCRIPT="$(readlink -f "$0")"
    +  DIR="$(dirname "${SCRIPT}")"
    +  APPDIR="${DIR%/bin}"
    +  JAVABIN="${APPDIR}/jre/bin"
    +  # e.g. APPFOLDER=/opt/jalview
    +  APPFOLDER="${APPDIR}"
    +  VMOPTIONS="${APPDIR}/jalviewg.vmoptions"
    +fi
    +JAVA="${JAVABIN}/java"
    +
    +# headless java arguments
    +JVMARGS=( "${JVMARGS[@]}" "-Djava.awt.headless=true" )
    +if [ "${ISMACOS}" = 1 ]; then
    +  JVMARGS=( "${JVMARGS[@]}" "-Dapple.awt.UIElement=true" )
    +fi
    +
    +SYSJAVA=java
    +GETDOWNLAUNCHERJAR="${APPDIR}/getdown-launcher.jar"
    +GETDOWNCOREJAR="${APPDIR}/resource/getdown-core.jar"
    +CHANNELPROPS="${APPDIR}/channel.props"
    +NAME="$( grep app_name= "${CHANNELPROPS}" | cut -d= -f2 )"
    +US_NAME="${NAME// /_}"
    +
    +GDL_CLASSPATH=""
    +GDC_CLASSPATH=""
    +# save an array of JAR paths in case we're in WSL (see later)
    +declare -a GDL_JARPATHS=()
    +declare -a GDC_JARPATHS=()
    +declare -a GDL_ARGS=()
    +
    +# getdown-launcher classpath
    +if [ -e "${GETDOWNLAUNCHERJAR}" ]; then
    +  GDL_CLASSPATH="${GETDOWNLAUNCHERJAR}"
    +  GDL_JARPATHS=( "${GDL_JARPATHS[@]}" "${GETDOWNLAUNCHERJAR}" )
    +else
    +  echo "Cannot find ${GETDOWNLAUNCHERJAR} to run update" >&2
    +  exit 3
    +fi
    +
    +# getdown-core classpath
    +if [ -e "${GETDOWNCOREJAR}" ]; then
    +  GDC_CLASSPATH="${GETDOWNCOREJAR}"
    +  GDC_JARPATHS=( "${GDC_JARPATHS[@]}" "${GETDOWNCOREJAR}" )
    +else
    +  echo "Cannot find $( basename "${GETDOWNCOREJAR}" ) to run update" >&2
    +  exit 4
    +fi
    +
    +# USER space update
    +if [ "${USERSPACE}" = 1 ]; then
    +  if [ -e "${VMOPTIONS}" ]; then
    +    LINENUM=0
    +    while IFS= read -r line; do
    +      # remove comments
    +      line=${line%%#*}
    +      # remove leading and trailing whitespace
    +      line="${line%"${line##*[![:space:]]}"}"
    +      line="${line#"${line%%[![:space:]]*}"}"
    +      LINENUM=$((LINENUM+1))
    +
    +      # add settings for user appdir
    +      if [ "${line}" != "${line#-Dsetuserappdirpath=}" ]; then # starts with -Dsetuserappdirpath=
    +        JVMARGS=( "${JVMARGS[@]}" "${line}" )
    +      fi
    +      if [ "${line}" != "${line#-Dnouserdefaultappdir=}" ]; then # starts with -Dnouserdefaultappdir=
    +        # don't perform user update if user updates are disabled
    +        NOUSERUPDATEVALUE="$(echo "${line#-Dnouserdefaultappdir=}" | tr '[:upper:]' '[:lower:]')"
    +        if [ "${NOUSERUPDATEVALUE}" = "true" ]; then
    +          echo "Cannot perform manual user-space update when user-space updates are disabled." >&2
    +          echo "See line ${LINENUM} (${line}) in file '${VMOPTIONS}'." >&2
    +          exit 5
    +        fi
    +        JVMARGS=( "${JVMARGS[@]}" "${line}" )
    +      fi
    +    done < "${VMOPTIONS}"
    +  fi
    +  JVMARGS=( "${JVMARGS[@]}" "-Duserdefaultappdir=true" )
    +  JVMARGS=( "${JVMARGS[@]}" "-Dnouserdefaultappdir=false" )
    +fi
    +
    +# INSTALLATION update
    +if [ "${INSTALLATION}" = 1 ]; then
    +  # root permissions check
    +  if [ "${DISABLEROOTCHECK}" != 1 -a "${EUID}" != 0 ]; then
    +    echo "--installation updates should be run with root permissions, or disable this root check with --norootcheck" >&2
    +    exit 6
    +  fi
    +  JVMARGS=( "${JVMARGS[@]}" "-Duserdefaultappdir=false" )
    +  JVMARGS=( "${JVMARGS[@]}" "-Dnouserdefaultappdir=true" )
    +  JVMARGS=( "${JVMARGS[@]}" "-Dlauncher.appdir=${APPDIR}" )
    +  JVMARGS=( "${JVMARGS[@]}" "-Dappdir=${APPDIR}" )
    +fi
    +
    +# setting the appdir arg[0] and appid arg[1] to blank values
    +# so appDir is determined by EnvConfig.getUserAppdir() or appdir property
    +# and appId is passed as system property appid
    +GDL_ARGS=( "" "" )
    +
    +# both USER and INSTALLATION updates
    +JVMARGS=( "${JVMARGS[@]}" "-Dinstaller.appdir=${APPDIR}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dinstaller.application_folder=${US_NAME}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dlauncher.script=${SCRIPT}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dlauncher.update=true" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dchannel.app_name=${NAME}" )
    +JVMARGS=( "${JVMARGS[@]}" "-Dappid=jalview" )
    +
    +# IMPORTANT! tell getdown to update jalview withouth launching
    +JVMARGS=( "${JVMARGS[@]}" "-Dsilent=true" )
    +
    +# add these Just In Case although jalview shouldn't be launched due to -Dsilent=true
    +GDL_ARGS=( "${GDL_ARGS[@]}" "--headless" "--quit" "--nojavaconsole" "--nosplash" "--nonews" )
    +
    +# WINDOWS ONLY in Cygwin or Windows Subsystem for Linux (WSL)
    +# change paths for Cygwin or WSL
    +if [ "${ISMACOS}" != 1 ]; then # older macos doesn't like uname -o, best to avoid
    +  if [ "$(uname -o)" = "Cygwin" ]; then
    +    # CYGWIN
    +    GDL_CLASSPATH=$(cygpath -pw "${GDL_CLASSPATH}")
    +    GDC_CLASSPATH=$(cygpath -pw "${GDC_CLASSPATH}")
    +  elif uname -r | grep -i microsoft | grep -i wsl >/dev/null; then
    +    # WSL
    +    GDL_CLASSPATH=""
    +    for JARPATH in "${GDL_JARPATHS[@]}"; do
    +      [ -n "${GDL_CLASSPATH}" ] && GDL_CLASSPATH="${GDL_CLASSPATH};"
    +      GDL_CLASSPATH="${GDL_CLASSPATH}$(wslpath -aw "${JARPATH}")"
    +    done
    +    GDC_CLASSPATH=""
    +    for JARPATH in "${GDC_JARPATHS[@]}"; do
    +      [ -n "${GDC_CLASSPATH}" ] && GDC_CLASSPATH="${GDC_CLASSPATH};"
    +      GDC_CLASSPATH="${GDC_CLASSPATH}$(wslpath -aw "${JARPATH}")"
    +    done
    +    JAVA="${JAVA}.exe"
    +    SYSJAVA="java.exe"
    +  fi
    +fi
    +
    +# Is there a bundled Java?  If not just try one in the PATH (we need .exe in WSL, added above)
    +if [ \! -e "${JAVA}" ]; then
    +  JAVA=$SYSJAVA
    +  echo "Cannot find bundled ${JAVA}, using system ${SYSJAVA} and hoping for the best!" >&2
    +fi
    +
    +# This is just needed for display purposes
    +function quotearray() {
    +  QUOTEDVALS=""
    +  for VAL in "${@}"; do
    +    if [ \! "$QUOTEDVALS" = "" ]; then
    +      QUOTEDVALS="${QUOTEDVALS} "
    +    fi
    +    QUOTEDVALS="${QUOTEDVALS}\"${VAL}\""
    +  done
    +  echo $QUOTEDVALS
    +}
    +
    +JVMARGSSTR=$(quotearray "${JVMARGS[@]}")
    +ARGSSTR=$(quotearray "${GDL_ARGS[@]}")
    +
    +if [ "${DEBUG}" = 1 ]; then
    + echo Shell running: \""${JAVA}"\" ${JVMARGSSTR} -cp \""${GDL_CLASSPATH}"\" com.threerings.getdown.launcher.GetdownApp ${ARGSSTR} >&2
    +fi
    +
    +"${JAVA}" "${JVMARGS[@]}" -cp "${GDL_CLASSPATH}" com.threerings.getdown.launcher.GetdownApp "${GDL_ARGS[@]}"
    +
    +# move updated getdown-launcher.jar into place
    +if [ "${DEBUG}" = 1 ]; then
    +  echo Shell running: \""${JAVA}"\" ${JVMARGSSTR} -cp \""${GDC_CLASSPATH}"\" jalview.bin.GetdownLauncherUpdate >&2
    +fi
    +
    +"${JAVA}" "${JVMARGS[@]}" -cp "${GDC_CLASSPATH}" jalview.bin.GetdownLauncherUpdate
    diff --git a/utils/install4j/default.vmoptions b/utils/install4j/default.vmoptions
    new file mode 100644
    index 0000000..9989aa7
    --- /dev/null
    +++ b/utils/install4j/default.vmoptions
    @@ -0,0 +1,21 @@
    +# Enter one VM parameter per line
    +# For example, to adjust the maximum memory usage to 512 MB, uncomment the following line:
    +# -Xmx512m
    +# To include another file, uncomment the following line:
    +# -include-options [path to other .vmoption file]
    +
    +# Jalview specific options below
    +
    +# Jalview options added by __INSTALLERFILENAME__ at __INSTALLDATETIME__
    +# 
    +# Uncomment the following line to disable user-space updates
    +#-Dnouserdefaultappdir=true
    +# 
    +# Uncomment the below line to set a custom path for user-space updates -- use with caution.
    +# A leading ~/ or %h anywhere will be substituted with the user's home path, and %u by the username.
    +# If not set, the default is ${installer:userDefaultAppdirBase} for ${installer:osName}
    +#-Dsetuserappdirpath=/tmp/jalview/%u
    +# 
    +# Uncomment the following line to also disable all updates
    +#-Dsilent=noupdate 
    +
    diff --git a/utils/install4j/file_associations_auto-install4j10.xml b/utils/install4j/file_associations_auto-install4j10.xml
    index 4a87364..7364320 100644
    --- a/utils/install4j/file_associations_auto-install4j10.xml
    +++ b/utils/install4j/file_associations_auto-install4j10.xml
    @@ -1,5 +1,5 @@
     
    -                  
    +                  
                         
                           Jalview (.jvp)
                           Creating file associations...
    @@ -8,13 +8,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Jalview File
                           jvp
    @@ -44,7 +44,7 @@
     
     
     
    -                  
    +                  
                         
                           Jalview Launch (.jvl)
                           Creating file associations...
    @@ -53,13 +53,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Jalview Launch File
                           jvl
    @@ -89,7 +89,7 @@
     
     
     
    -                  
    +                  
                         
                           CIF (.cif)
                           Creating file associations...
    @@ -98,13 +98,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           CIF File
                           cif
    @@ -134,7 +134,7 @@
     
     
     
    -                  
    +                  
                         
                           mmCIF (.mcif, .mmcif)
                           Creating file associations...
    @@ -143,13 +143,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           mmCIF File
                           mcif,mmcif
    @@ -179,7 +179,7 @@
     
     
     
    -                  
    +                  
                         
                           PDB (.ent, .pdb)
                           Creating file associations...
    @@ -188,13 +188,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           PDB File
                           ent,pdb
    @@ -224,7 +224,7 @@
     
     
     
    -                  
    +                  
                         
                           AMSA (.amsa)
                           Creating file associations...
    @@ -233,13 +233,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           AMSA File
                           amsa
    @@ -269,7 +269,7 @@
     
     
     
    -                  
    +                  
                         
                           Jalview Annotations (.annotations, .jvannotations)
                           Creating file associations...
    @@ -278,13 +278,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Jalview Annotations File
                           annotations,jvannotations
    @@ -314,7 +314,7 @@
     
     
     
    -                  
    +                  
                         
                           BioJSON (.biojson)
                           Creating file associations...
    @@ -323,13 +323,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           BioJSON File
                           biojson
    @@ -359,7 +359,7 @@
     
     
     
    -                  
    +                  
                         
                           BLC (.blc)
                           Creating file associations...
    @@ -368,13 +368,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           BLC File
                           blc
    @@ -404,7 +404,7 @@
     
     
     
    -                  
    +                  
                         
                           Clustal (.aln)
                           Creating file associations...
    @@ -413,13 +413,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Clustal File
                           aln
    @@ -449,7 +449,7 @@
     
     
     
    -                  
    +                  
                         
                           Fasta (.fa, .fasta)
                           Creating file associations...
    @@ -458,13 +458,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Fasta File
                           fa,fasta
    @@ -494,7 +494,7 @@
     
     
     
    -                  
    +                  
                         
                           Jalview Features (.features, .jvfeatures)
                           Creating file associations...
    @@ -503,13 +503,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Jalview Features File
                           features,jvfeatures
    @@ -539,7 +539,7 @@
     
     
     
    -                  
    +                  
                         
                           Jalview Feature Settings File (.fc)
                           Creating file associations...
    @@ -548,13 +548,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Jalview Feature Settings File File
                           fc
    @@ -584,7 +584,7 @@
     
     
     
    -                  
    +                  
                         
                           GenBank Flatfile (.gb, .gbk)
                           Creating file associations...
    @@ -593,13 +593,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           GenBank Flatfile File
                           gb,gbk
    @@ -629,7 +629,7 @@
     
     
     
    -                  
    +                  
                         
                           Generic Features Format v2 (.gff2)
                           Creating file associations...
    @@ -638,13 +638,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Generic Features Format v2 File
                           gff2
    @@ -674,7 +674,7 @@
     
     
     
    -                  
    +                  
                         
                           Generic Features Format v3 (.gff3)
                           Creating file associations...
    @@ -683,13 +683,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Generic Features Format v3 File
                           gff3
    @@ -719,7 +719,7 @@
     
     
     
    -                  
    +                  
                         
                           JnetFile (.concise, .jnet)
                           Creating file associations...
    @@ -728,13 +728,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           JnetFile File
                           concise,jnet
    @@ -764,7 +764,7 @@
     
     
     
    -                  
    +                  
                         
                           MSF (.msf)
                           Creating file associations...
    @@ -773,13 +773,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           MSF File
                           msf
    @@ -809,7 +809,7 @@
     
     
     
    -                  
    +                  
                         
                           PFAM (.pfam)
                           Creating file associations...
    @@ -818,13 +818,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           PFAM File
                           pfam
    @@ -854,7 +854,7 @@
     
     
     
    -                  
    +                  
                         
                           PHYLIP (.phy)
                           Creating file associations...
    @@ -863,13 +863,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           PHYLIP File
                           phy
    @@ -899,7 +899,7 @@
     
     
     
    -                  
    +                  
                         
                           PileUp (.pileup)
                           Creating file associations...
    @@ -908,13 +908,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           PileUp File
                           pileup
    @@ -944,7 +944,7 @@
     
     
     
    -                  
    +                  
                         
                           PIR (.pir)
                           Creating file associations...
    @@ -953,13 +953,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           PIR File
                           pir
    @@ -989,7 +989,7 @@
     
     
     
    -                  
    +                  
                         
                           RNAML (.rnaml)
                           Creating file associations...
    @@ -998,13 +998,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           RNAML File
                           rnaml
    @@ -1034,7 +1034,7 @@
     
     
     
    -                  
    +                  
                         
                           Substitution Matrix (.mat)
                           Creating file associations...
    @@ -1043,13 +1043,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Substitution Matrix File
                           mat
    @@ -1079,7 +1079,7 @@
     
     
     
    -                  
    +                  
                         
                           Stockholm (.stk, .sto)
                           Creating file associations...
    @@ -1088,13 +1088,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           Stockholm File
                           stk,sto
    diff --git a/utils/install4j/file_associations_template-install4j10.xml b/utils/install4j/file_associations_template-install4j10.xml
    index 8663ed9..078076f 100644
    --- a/utils/install4j/file_associations_template-install4j10.xml
    +++ b/utils/install4j/file_associations_template-install4j10.xml
    @@ -1,5 +1,5 @@
     
    -                  
    +                  
                         
                           $$NAME$$ ($$DISPLAYEXTENSION$$)
                           Creating file associations...
    @@ -8,13 +8,13 @@
                         
                       
     
    -                  
    +                  
                         
                           
                         
                       
     
    -                  
    +                  
                         
                           $$NAME$$ File
                           $$EXTENSION$$
    diff --git a/utils/install4j/install4j10_template.install4j b/utils/install4j/install4j10_template.install4j
    index 6172279..9531fc6 100644
    --- a/utils/install4j/install4j10_template.install4j
    +++ b/utils/install4j/install4j10_template.install4j
    @@ -1,7 +1,7 @@
     
     
    -  
    -  
    +  
    +  
         
           
           
    @@ -45,6 +45,9 @@
           
           
           
    +      
    +      
    +      
           
           
           
    @@ -66,15 +69,14 @@
           
           
           
    -      
    -      
    -      
    -      
    +      
    +      
           
           
    -      
    -      
    -      
    +      
    +      
    +      
    +      
           
         
         
    @@ -131,7 +133,7 @@
           
         
         
    -      
    +      
                   
                     
    +                  
                       
                         
                           ArrayList<String> tryPaths = new ArrayList<> ();
    @@ -375,27 +719,216 @@ return null;
                       
                       unixBinDir
                     
    -                context.getBooleanVariable("makeSymbolicLink")
    +                if (!context.getBooleanVariable("makeSymbolicLink")) {
    +    return false;
    +}
    +String unixBinDir = (String) context.getVariable("unixBinDir");
    +if (unixBinDir != null && unixBinDir.length() > 0) {
    +    if (unixBinDir.startsWith("~/")) {
    +        unixBinDir = (String)context.getVariable("sys.userHome") + unixBinDir.substring(1);
    +        context.setVariable("unixBinDir", unixBinDir);
    +    }
    +    return false;
    +}
    +return true;
                   
    -              
    +              
                     
                       
                         
                           String javaHome = System.getProperty("java.home");
     String appName = ((String)context.getCompilerVariable("JALVIEW_APPLICATION_NAME")) + ".app";
     int i = javaHome.indexOf(appName);
    -String wrapperLink = null;
    +String MacOSDir = null;
     if (i > -1) {
    -    wrapperLink = javaHome.substring(0, i) + appName + File.separator + "Contents" + File.separator + "MacOS" + File.separator + ((String)context.getCompilerVariable("WRAPPER_LINK"));
    +    MacOSDir = javaHome.substring(0, i) + appName + File.separator + "Contents" + File.separator + "MacOS";
     }
    -return wrapperLink;
    +return MacOSDir;
     
                         
                       
    -                  macWrapperLinkLocation
    +                  MacOSDir
                     
                     Util.isMacOS() && !context.getBooleanVariable("isAdmin") // Admin on macOS will add path to /etc/paths.d in Create File action
                   
    +              
    +                
    +                  
    +                  
    +                  
    +                    
    +                      Boolean.FALSE
    +                    
    +                  
    +                  advancedOptions
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                  
    +                    
    +                      Boolean.TRUE
    +                    
    +                  
    +                  allowUserDefaultAppdirUpdates
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                  
    +                    
    +                      Boolean.FALSE
    +                    
    +                  
    +                  allowSetUserAppdirPath
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                  
    +                    
    +                      ""
    +                    
    +                  
    +                  userAppdirPath
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                  
    +                    
    +                      Boolean.FALSE
    +                    
    +                  
    +                  allowInstallerAppdirUpdates
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      getOsAppDataPath(context)
    +                    
    +                  
    +                  userDefaultAppdirBase
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      if (Util.isWindows()) {
    +    return "Windows";
    +} else if (Util.isMacOS()) {
    +    return "macOS";
    +} else if (Util.isLinux()) {
    +    return "Linux";
    +}
    +return context.getCompilerVariable("sys.platform");
    +                    
    +                  
    +                  osName
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      Boolean.FALSE
    +                    
    +                  
    +                  consoleDisableUserAppdir
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      Boolean.FALSE
    +                    
    +                  
    +                  consoleDisableAllUpdates
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      Boolean.FALSE
    +                    
    +                  
    +                  consoleAllowUserAppdirPath
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      String[] args = context.getExtraCommandLineArguments();
    +
    +for (int i = 0; i < args.length; i++) {
    +    String arg = args[i];
    +    switch(arg) {
    +        case "-a":
    +            if (args.length - 1 < i + 1) {
    +                System.out.println("Option " + arg + " requires a value.  Ignoring.");
    +            }
    +            context.setInstallationDirectory(new File(args[i + 1]));
    +            i++;
    +            break;
    +        case "-u":
    +            if (args.length - 1 < i + 1) {
    +                System.out.println("Option " + arg + " requires a value.  Ignoring.");
    +            }
    +            context.setVariable("userAppdirPath", args[i + 1]);
    +            context.setVariable("consoleAllowUserAppdirPath", true);
    +            i++;        
    +            break;
    +        case "-U":
    +            context.setVariable("consoleDisableUserAppdir", true);
    +            break;
    +        case "-S":
    +            context.setVariable("consoleDisableAllUpdates", true);
    +            break;
    +        default:
    +            System.out.println("Option " + arg + " not recognised.  Ignoring.");
    +            break;
    +    }
    +}
    +
    +return true;
    +                    
    +                  
    +                
    +                context.isConsole() || context.isUnattended()
    +              
    +              
    +                
    +                  
    +                    
    +                      String[] extensions = (String[]) context.getVariable("sys.fileAssociation.extensions");
    +if (extensions == null) {
    +    return false;
    +}
    +int num = extensions.length;
    +String[] launchers = new String[num];
    +for (int i = 0; i < num; i++) {
    +    launchers[i] = "JALVIEW";
    +}
    +context.setVariable("sys.fileAssociation.launchers", launchers);
    +return true;
    +                    
    +                  
    +                
    +              
                 
               
             
    @@ -468,14 +1001,24 @@ return wrapperLink;
                 
                   
                     
    -                  
    +                  
                         sys.installationDir
    +                    sys.adminRights$Boolean
    +                    sys.adminRightsUiRootUnix$Boolean
    +                    sys.component.1031$Boolean
    +                    sys.fileAssociation.launchers$StringArray
                       
                     
                     context.getBooleanVariable("sys.confirmedUpdateInstallation")
                   
                 
                 
    +              
    +                
    +                  <strong>Administrator mode</strong>
    +                
    +                context.getBooleanVariable("isAdmin")
    +              
                   
                     
                       ${form:welcomeMessage}
    @@ -505,19 +1048,29 @@ return console.askOkCancel(message, true);
                   
                 
               
    -          
    +          
                 !context.getBooleanVariable("sys.confirmedUpdateInstallation")
                 
                   
                     
    -                  
    +                  
                         sys.installationDir
    +                    sys.adminRights$Boolean
    +                    sys.adminRightsUiRootUnix$Boolean
    +                    sys.component.1031$Boolean
    +                    sys.fileAssociation.launchers$StringArray
                       
                     
                     context.getVariable("sys.responseFile") == null
                   
                 
                 
    +              
    +                
    +                  <strong>Administrator mode</strong>
    +                
    +                context.getBooleanVariable("isAdmin")
    +              
                   
                     
                       ${i18n:SelectDirLabel(${compiler:sys.fullName})}
    @@ -545,27 +1098,61 @@ return console.askOkCancel(message, true);
               
               
                 
    +              
    +                
    +                  <strong>Administrator mode</strong>
    +                
    +                context.getBooleanVariable("isAdmin")
    +              
                   
                     
                       ${i18n:SelectAssociationsLabel}
                     
                   
    -              
    +              
    +                
    +                  
    +                    
    +                      Screen s = formEnvironment.getScreen();
    +
    +FormComponent fc = formEnvironment.getFormComponentById("FILE_ASSOCIATIONS_SELECTOR");
    +com.install4j.api.actions.Action a0 = context.getActionById("FA_FILEASSOCIATION-CIF-false");
    +Screen s2 = context.getScreenById("EXTENSIONS_REPLACED_BY_GRADLE_PARENT_GROUP");
    +
    +for (com.install4j.api.actions.Action a : context.getActions(s2)) {
    +    String aid = context.getId(a);
    +    if (aid.startsWith("FA_FILEASSOCIATION-")) {
    +        com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction aa = (com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction) a;
    +        boolean set = aid.endsWith("-true");
    +        boolean got = aa.isSelected();
    +        aa.setSelected(set);
    +        System.err.println("Setting '"+aid+"' from "+got+" to "+set);
    +    }
    +}
    +
    +context.gotoScreen(s);
    +//formEnvironment.reinitializeFormComponents();
    +                    
    +                  
    +                  Reset
    +                
    +              
    +              
                     
                       
                       
                       
                     
                     
    -                  showSelectionButtons
                       selectionButtonPosition
    +                  showSelectionButtons
                     
                   
                 
               
               
                 
    -              User account
    +              Additional tasks for user installation (${installer:sys.userName})
                   ${i18n:WizardSelectTasks}
                 
                 !context.getBooleanVariable("isAdmin")
    @@ -610,19 +1197,144 @@ return console.askOkCancel(message, true);
          || Util.isUnixInstaller()
          || (
               ( Util.isMacOS() && !Util.hasFullAdminRights() ) // Admin on macOS will add path to /etc/paths.d
    -          && context.getVariable("macWrapperLinkLocation") != null
    +          && context.getVariable("MacOSDir") != null
             )
         )
                   
    +              
    +              
    +                
    +                  Enable advanced options for user installation
    +                  
    +                    2980
    +                    3014
    +                    2975
    +                    2989
    +                  
    +                  
    +                    
    +                      validateUserSpaceAdvancedOptionsForm(formEnvironment)
    +                    
    +                  
    +                  advancedOptions
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      128
    +                      128
    +                      128
    +                      255
    +                    
    +                  
    +                  
    +                  
    +                  Advanced options will not be used
    +                
    +                !context.getBooleanVariable("advancedOptions")
    +
    +              
    +              
    +                
    +                  
    +                    
    +                      FormComponent fc_advancedOptions = formEnvironment.getFormComponentById("US_ADVANCED_OPTIONS");
    +
    +JCheckBox jcb_advancedOptions = (JCheckBox) fc_advancedOptions.getConfigurationObject();
    +boolean advancedOptions = jcb_advancedOptions.isSelected();
    +
    +return advancedOptions;
    +                    
    +                  
    +                
    +                
    +                  
    +                    
    +                      
    +                        
    +                          
    +                          
    +                          
    +                          
    +                        
    +                      
    +                      
    +                        
    +                          4
    +                          4
    +                          4
    +                          4
    +                        
    +                      
    +                    
    +                    
    +                      
    +                        
    +                          <html>The following option is <strong>strongly recommended</strong>
    +to be left as default unless there is a particular
    +reason to change it.</html>
    +                        
    +                      
    +                      
    +                      
    +                        
    +                          Allow user-space updates for ${compiler:JALVIEW_APPLICATION_NAME} components
    +                          <html>This option allows updates to ${compiler:JALVIEW_APPLICATION_NAME}
    +<br>
    +components to be automatically downloaded
    +<br>
    +under the user's home space, separately from
    +<br>
    +the installation location.
    +<br>
    +<strong>This option is strongly recommended.</strong>
    +<br>
    +<br>
    +On ${installer:osName}, user updates will be installed under
    +<br>
    +<pre>${installer:userDefaultAppdirBase}</pre>
    +</html>
    +                          
    +                          
    +                            
    +                              validateUserSpaceAdvancedOptionsForm(formEnvironment)
    +                            
    +                          
    +                          allowUserDefaultAppdirUpdates
    +                        
    +                      
    +                      
    +                        
    +                          
    +                            
    +                              ${compiler:JALVIEW_DIR}/${compiler:INSTALL4J_UTILS_DIR}/warning.png
    +                            
    +                          
    +                          No automatic updates will occur when Jalview is launched
    +                        
    +                        !( context.getBooleanVariable("allowUserDefaultAppdirUpdates") || context.getBooleanVariable("allowInstallerAppdirUpdates") )
    +                      
    +                    
    +                  
    +                
    +              
                 
               
               
                 
    -              System
    +              Additional tasks for administrator installation
                   ${i18n:WizardSelectTasks}
                 
                 context.getBooleanVariable("isAdmin")
                 
    +              
    +                
    +                  <strong>Administrator mode</strong>
    +                
    +                context.getBooleanVariable("isAdmin")
    +              
                   
                     
                       ${i18n:SelectTasksLabel2(${compiler:JALVIEW_APPLICATION_NAME})}
    @@ -649,14 +1361,313 @@ return console.askOkCancel(message, true);
          || Util.isUnixInstaller()
          || (
               ( Util.isMacOS() && !Util.hasFullAdminRights() ) // Admin on macOS will add path to /etc/paths.d
    -          && context.getVariable("macWrapperLinkLocation") != null
    +          && context.getVariable("MacOSDir") != null
             )
         )
     
                   
    +              
    +              
    +                
    +                  Enable advanced options for system installation
    +                  
    +                    3030
    +                    2985
    +                    3013
    +                    2986
    +                    2974
    +                    2988
    +                  
    +                  
    +                    
    +                      validateSystemSpaceAdvancedOptionsForm(context, formEnvironment)
    +                    
    +                  
    +                  advancedOptions
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      128
    +                      128
    +                      128
    +                      255
    +                    
    +                  
    +                  
    +                  
    +                  Advanced options will not be used
    +                
    +                !context.getBooleanVariable("advancedOptions")
    +
    +              
    +              
    +                
    +                  
    +                    
    +                      context.getBooleanVariable("advancedOptions")
    +
    +                    
    +                  
    +                
    +                
    +                  
    +                    
    +                      
    +                        
    +                          
    +                          
    +                          
    +                          
    +                        
    +                      
    +                      
    +                        
    +                          4
    +                          4
    +                          4
    +                          4
    +                        
    +                      
    +                      
    +                        
    +                          
    +                        
    +                      
    +                    
    +                    
    +                      
    +                        
    +                          <html>The following options are <strong>strongly recommended</strong> to be left as default unless there is a particular reason to change them.</html>
    +                        
    +                      
    +                      
    +                      
    +                        
    +                          Allow user-space updates for ${compiler:JALVIEW_APPLICATION_NAME} components
    +                          
    +                            3021
    +                          
    +                          <html>This option allows updates to ${compiler:JALVIEW_APPLICATION_NAME}
    +<br>
    +components to be automatically downloaded
    +<br>
    +under the user's home space, separately from
    +<br>
    +the installation location.
    +<br>
    +<strong>This option is strongly recommended.</strong>
    +<br>
    +<br>
    +On ${installer:osName}, user updates will be installed under
    +<pre>${installer:userDefaultAppdirBase}</pre>
    +unless customised below.
    +</html>
    +                          
    +                            
    +                              validateSystemSpaceAdvancedOptionsForm(context, formEnvironment)
    +                            
    +                          
    +                          allowUserDefaultAppdirUpdates
    +                        
    +                      
    +                      
    +                        
    +                          
    +                            
    +                              0
    +                              32
    +                              0
    +                              0
    +                            
    +                          
    +                          
    +                            
    +                              
    +                            
    +                          
    +                        
    +                        
    +                          
    +                            
    +                              Customise the user-space path
    +                              
    +                                
    +                                  validateSystemSpaceAdvancedOptionsForm(context, formEnvironment)
    +                                
    +                              
    +                              allowSetUserAppdirPath
    +                            
    +                            component.setEnabled( context.getBooleanVariable("allowUserDefaultAppdirUpdates") )
    +                          
    +                          
    +                            
    +                              <html>The base path where individual users' updates
    +<br>
    +will be stored.
    +<br>
    +<strong>Only change this option if you need to!</strong>
    +<br>
    +The following substitutions will be made:
    +<table>
    +<tr><td>%u</td><td>The user's username</td></tr>
    +<tr><td>%h</td><td>The user's home directory path</td></tr>
    +<tr><td>~${installer:sys.fileSeparator}</td><td>(at start) The user's home directory path${installer:sys.fileSeparator}</td></tr>
    +</table>
    +At least one of the above substitutions should be
    +<br>
    +used, e.g. <tt>/tmp/${compiler:UNIX_APPLICATION_FOLDER}/%u/app</tt>
    +<br>
    +The default value on ${installer:osName} is
    +<br>
    +<pre>${installer:userDefaultAppdirBase}</pre>
    +</html>
    +                              
    +                                
    +                                  validateSystemSpaceAdvancedOptionsForm(context, formEnvironment, true)
    +                                
    +                              
    +                              
    +                                
    +                                  showInvalidUserAppdirPathWarning(context, formEnvironment)
    +
    +                                
    +                              
    +                              
    +                                
    +                                  
    +                                
    +                              
    +                              userAppdirPath
    +                            
    +                            component.setEnabled( context.getBooleanVariable("allowUserDefaultAppdirUpdates") && context.getBooleanVariable("allowSetUserAppdirPath") );
    +
    +                          
    +                        
    +                      
    +                      
    +                        
    +                          Allow installation updates for ${compiler:JALVIEW_APPLICATION_NAME} components
    +                          <html>This option allows updates to ${compiler:JALVIEW_APPLICATION_NAME}
    +<br>
    +components to be automatically downloaded
    +<br>
    +into the installation location.
    +<br>
    +If you are installing into a system location,
    +<br>
    +a non-administrator user may have problems
    +<br>
    +launching ${compiler:JALVIEW_APPLICATION_NAME}.
    +<br>
    +<strong>
    +It is strongly recommended to use the
    +<br>
    +user-space updates option above.
    +</strong>
    +<br>
    +<br>
    +Installation updates will be installed into
    +<br>
    +<pre>${installer:sys.contentDir}</pre>
    +</html>
    +                          
    +                            
    +                              validateSystemSpaceAdvancedOptionsForm(context, formEnvironment)
    +                            
    +                          
    +                          allowInstallerAppdirUpdates
    +                        
    +                        component.setEnabled( !context.getBooleanVariable("allowUserDefaultAppdirUpdates") )
    +                      
    +                      
    +                        
    +                          
    +                            
    +                              FormComponent fc_userUpdates = formEnvironment.getFormComponentById("SS_ALLOW_USER_APPDIR_UPDATES");
    +FormComponent fc_installerUpdates = formEnvironment.getFormComponentById("SS_ALLOW_INSTALLER_APPDIR_UPDATES");
    +FormComponent fc_allowUserAppdirPath = formEnvironment.getFormComponentById("SS_ALLOW_USER_APPDIR_PATH");
    +FormComponent fc_userAppdirPath = formEnvironment.getFormComponentById("SS_USER_APPDIR_PATH");
    +
    +// set defaults
    +((JCheckBox) fc_userUpdates.getConfigurationObject()).setSelected(true);
    +((JCheckBox) fc_allowUserAppdirPath.getConfigurationObject()).setSelected(false);
    +((JTextField) fc_userAppdirPath.getConfigurationObject()).setText("");
    +((JCheckBox) fc_installerUpdates.getConfigurationObject()).setSelected(false);
    +
    +// revalidate
    +validateSystemSpaceAdvancedOptionsForm(context, formEnvironment);
    +
    +                            
    +                          
    +                          Reset advanced options to defaults
    +                        
    +                        FormComponent fc_advancedOptions = formEnvironment.getFormComponentById("SS_ADVANCED_OPTIONS");
    +FormComponent fc_userUpdates = formEnvironment.getFormComponentById("SS_ALLOW_USER_APPDIR_UPDATES");
    +FormComponent fc_userAppdirPath = formEnvironment.getFormComponentById("SS_USER_APPDIR_PATH");
    +FormComponent fc_installerUpdates = formEnvironment.getFormComponentById("SS_ALLOW_INSTALLER_APPDIR_UPDATES");
    +FormComponent fc_allowUserAppdirPath = formEnvironment.getFormComponentById("SS_ALLOW_USER_APPDIR_PATH");
    +
    +JCheckBox jcb_user = (JCheckBox) fc_userUpdates.getConfigurationObject();
    +boolean userUpdates = jcb_user.isSelected();
    +
    +JCheckBox jcb_allowUserAppdirPath = (JCheckBox) fc_allowUserAppdirPath.getConfigurationObject();
    +boolean allowUserAppdirPath = jcb_allowUserAppdirPath.isSelected();
    +
    +JTextField jtf_userAppdirPath = (JTextField) fc_userAppdirPath.getConfigurationObject();
    +String userAppdirPath = jtf_userAppdirPath.getText();
    +
    +JCheckBox jcb_installer = (JCheckBox) fc_installerUpdates.getConfigurationObject();
    +boolean installerUpdates = jcb_installer.isSelected();
    +
    +
    +// set whether "Set defaults" button should be enabled
    +boolean enableSetDefaults = !( userUpdates && !allowUserAppdirPath && userAppdirPath.length() == 0 && !installerUpdates );
    +component.setEnabled(enableSetDefaults);
    +                      
    +                      
    +                        
    +                          
    +                            
    +                              ${compiler:JALVIEW_DIR}/${compiler:INSTALL4J_UTILS_DIR}/warning.png
    +                            
    +                          
    +                          No automatic updates will occur when ${compiler:JALVIEW_APPLICATION_NAME} is launched
    +                        
    +                        !( context.getBooleanVariable("allowUserDefaultAppdirUpdates") || context.getBooleanVariable("allowInstallerAppdirUpdates") )
    +                      
    +                      
    +                        
    +                          
    +                            
    +                              ${compiler:JALVIEW_DIR}/${compiler:INSTALL4J_UTILS_DIR}/warning.png
    +                            
    +                          
    +                          The user-space path should contain one of "~${installer:sys.fileSeparator}" (at the start), "%u" or "%h"
    +                        
    +                        String userAppdirPath = (String) context.getVariable("userAppdirPath");
    +
    +if (userAppdirPath == null) {
    +  return false;
    +}
    +
    +boolean u = userAppdirPath.contains("%u");
    +boolean h = userAppdirPath.contains("%h");
    +boolean t = userAppdirPath.startsWith("~" + (String)context.getVariable("sys.fileSeparator"));
    +
    +boolean showInvalidPathWarning = !( userAppdirPath.length() == 0 || u || h || t );
    +
    +return context.getBooleanVariable("allowUserDefaultAppdirUpdates") && context.getBooleanVariable("allowSetUserAppdirPath") && showInvalidPathWarning;
    +                      
    +                    
    +                  
    +                
    +              
                 
               
    -          
    +          
                 
                   
                   
    @@ -694,7 +1705,7 @@ return console.askOkCancel(message, true);
                       ${compiler:sys.fullName} ${compiler:sys.version}
                     
                   
    -              
    +              
                     
                       
                         
    @@ -728,11 +1739,23 @@ return console.askOkCancel(message, true);
                       
                       
                         
    -                      
    +                      
                         
                       
                     
                   
    +              
    +                
    +                  ${i18n:FinishedHeadingLabel(${compiler:JALVIEW_APPLICATION_NAME})}
    +                  
    +                  
    +                
    +              
    +              
    +                
    +                  
    +                
    +              
                   
                     
                       
    @@ -776,7 +1799,7 @@ return console.askOkCancel(message, true);
                       
                     
                     
    -                  
    +                  
                         
                           
                           ${compiler:APPLICATION_CATEGORIES}
    @@ -798,7 +1821,7 @@ return console.askOkCancel(message, true);
                             
                           
                         
    -                    !Util.hasFullAdminRights() && !context.getBooleanVariable("sys.programGroupDisabled")
    +                    !context.getBooleanVariable("sys.programGroupDisabled")
                       
                       
                         
    @@ -821,7 +1844,7 @@ return console.askOkCancel(message, true);
                             
    - !Util.hasFullAdminRights() && context.getBooleanVariable("createDesktopLinkAction") + context.getBooleanVariable("createDesktopLinkAction") @@ -831,9 +1854,7 @@ return console.askOkCancel(message, true);
    - !Util.hasFullAdminRights() -&& -context.getBooleanVariable("addToDockAction") + context.getBooleanVariable("addToDockAction") @@ -841,13 +1862,53 @@ context.getBooleanVariable("addToDockAction") ${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR} Path - !Util.hasFullAdminRights() && context.getBooleanVariable("appendToPathAction") + context.getBooleanVariable("appendToPathAction") - + - ${installer:macWrapperLinkLocation} + ../Resources/app/${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_WRAPPER_SCRIPT} + + + + + ${installer:MacOSDir}/${compiler:WRAPPER_LINK} + + + + Util.isMacOS() && +( + context.getBooleanVariable("makeSymbolicLinkAction") + && context.getVariable("unixBinDir") != null + && context.getVariable("MacOSDir") != null +) + + + + + + ../Resources/app/${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_UPDATE_SCRIPT} + + + + + ${installer:MacOSDir}/update_${compiler:WRAPPER_LINK} + + + + Util.isMacOS() && +( + context.getBooleanVariable("makeSymbolicLinkAction") + && context.getVariable("unixBinDir") != null + && context.getVariable("MacOSDir") != null +) + + + + + + ${installer:MacOSDir}/${compiler:WRAPPER_LINK} @@ -856,12 +1917,31 @@ context.getBooleanVariable("addToDockAction")
    - Util.isMacOS() && !Util.hasFullAdminRights() // Admin on macOS will add path to /etc/paths.d -&& + Util.isMacOS() && ( context.getBooleanVariable("makeSymbolicLinkAction") && context.getVariable("unixBinDir") != null - && context.getVariable("macWrapperLinkLocation") != null + && context.getVariable("MacOSDir") != null +) + + + + + + ${installer:MacOSDir}/update_${compiler:WRAPPER_LINK} + + + + + ${installer:unixBinDir}/update_${compiler:WRAPPER_LINK} + + + + Util.isMacOS() && +( + context.getBooleanVariable("makeSymbolicLinkAction") + && context.getVariable("unixBinDir") != null + && context.getVariable("MacOSDir") != null ) @@ -875,7 +1955,7 @@ context.getBooleanVariable("addToDockAction") - + ${compiler:APPLICATION_CATEGORIES} ${compiler:JALVIEW_APPLICATION_NAME} @@ -922,7 +2002,7 @@ context.getBooleanVariable("addToDockAction") context.getBooleanVariable("createDesktopLinkAction") - + @@ -931,14 +2011,27 @@ context.getBooleanVariable("addToDockAction") context.getBooleanVariable("appendToPathAction") + + + + + String dir = (String)context.getVariable("sys.installationDir"); +String hash = getCanonicalFullPathToDirectoryHash(dir); +return (Object) hash; + + + + installationAppdirHash + + - /etc/paths.d/${compiler:APPLICATION_FOLDER} + /etc/paths.d/${compiler:APPLICATION_FOLDER}-${installer:installationAppdirHash} - /Applications/${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/MacOS + ${installer:sys.installationDir}/${installer:sys.contentDir}/${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/MacOS Util.isMacOS() @@ -946,7 +2039,7 @@ context.getBooleanVariable("addToDockAction") - + @@ -965,6 +2058,177 @@ context.getBooleanVariable("addToDockAction") + + + + + + + boolean advanced = context.getBooleanVariable("advancedOptions"); +boolean allowUser = context.getBooleanVariable("allowUserDefaultAppdirUpdates"); +boolean consoleDisableUserAppdir = context.getBooleanVariable("consoleDisableUserAppdir"); +if (consoleDisableUserAppdir) { + return true; +} +return advanced ? !allowUser : false; + + + disableUserDefaultAppdirUpdates + + + + + + + boolean advanced = context.getBooleanVariable("advancedOptions"); +boolean allowUser = context.getBooleanVariable("allowUserDefaultAppdirUpdates"); +boolean allowSetUserAppdirPath = context.getBooleanVariable("allowSetUserAppdirPath"); +String userAppdirPath = (String)context.getVariable("userAppdirPath"); +boolean saneValue = userAppdirPath != null && userAppdirPath.length() > 0; +boolean consoleAllowUserAppdirPath = context.getBooleanVariable("consoleAllowUserAppdirPath"); +if (consoleAllowUserAppdirPath && saneValue) { + return userAppdirPath; +} +return advanced && allowUser && allowSetUserAppdirPath && saneValue ? userAppdirPath : null; + + + setUserAppdirPath + + + + + + + boolean advanced = context.getBooleanVariable("advancedOptions"); +boolean allowUser = context.getBooleanVariable("allowUserDefaultAppdirUpdates"); +boolean allowInstaller = context.getBooleanVariable("allowInstallerAppdirUpdates"); +boolean consoleDisableAllUpdates = context.getBooleanVariable("consoleDisableAllUpdates"); +if (consoleDisableAllUpdates) { + return true; +} +return advanced ? !( allowUser || allowInstaller ) : false; + + + disableUpdates + + + + + + + String file = (String)context.getVariable("sys.mediaFile"); +int i = file.lastIndexOf(File.separator); +return file.substring(i+1); + + + installerFilename + + + + + + + String date = (String)context.getVariable("sys.date"); +String time = (String)context.getVariable("sys.time"); +StringBuilder sb = new StringBuilder(); +sb.append(date.substring(0,4)); +sb.append("-"); +sb.append(date.substring(4,6)); +sb.append("-"); +sb.append(date.substring(6,8)); +sb.append(" "); +sb.append(time.substring(0,2)); +sb.append(":"); +sb.append(time.substring(2,4)); +sb.append(":"); +sb.append(time.substring(4,6)); +return sb.toString(); + + + + installDateTime + + + + + 2823 + + # Jalview options added by ${installer:installerFilename} at ${installer:installDateTime} + + + + + + 2823 + + # + # Uncomment the following line to disable user-space updates + #-Dnouserdefaultappdir=true + + + !context.getBooleanVariable("disableUserDefaultAppdirUpdates") + + + + 2823 + + # + # Comment out the following line to allow user-space updates + -Dnouserdefaultappdir=true + + + context.getBooleanVariable("disableUserDefaultAppdirUpdates") + + + + 2823 + + # + # The below line sets a custom path for user-space updates -- use with caution. + # A leading ~/ or %h anywhere will be substituted with the user's home path, and %u by the username. + # If unset, the default is ${installer:userDefaultAppdirBase} for ${installer:osName} + -Dsetuserappdirpath=${installer:setUserAppdirPath} + + + (String)context.getVariable("setUserAppdirPath") != null + + + + 2823 + + # + # Uncomment the below line to set a custom path for user-space updates -- use with caution. + # A leading ~/ or %h anywhere will be substituted with the user's home path, and %u by the username. + # If not set, the default is ${installer:userDefaultAppdirBase} for ${installer:osName} + #-Dsetuserappdirpath=/tmp/jalview/%u + + + (String)context.getVariable("setUserAppdirPath") == null + + + + 2823 + + # + # Uncomment the following line to also disable all updates + #-Dsilent=noupdate + + + !context.getBooleanVariable("disableUpdates") + + + + 2823 + + # + # Comment out the following line to enable updates + -Dsilent=noupdate + + + context.getBooleanVariable("disableUpdates") + + + @@ -981,7 +2245,7 @@ context.getBooleanVariable("addToDockAction") - Util.isLinux() || Util.isMacOS() + Util.isLinux() || ( Util.isMacOS() && !Util.isUnixInstaller() ) @@ -997,14 +2261,14 @@ context.getBooleanVariable("addToDockAction") - (Util.isLinux() || Util.isMacOS()) + ( Util.isLinux() || ( Util.isMacOS() && !Util.isUnixInstaller() ) ) && !((String)context.getCompilerVariable("JALVIEW_APPLICATION_NAME")).equals((String)context.getCompilerVariable("JALVIEW_NAME")) - + @@ -1019,48 +2283,41 @@ context.getBooleanVariable("addToDockAction") Util.isLinux() || Util.isUnixInstaller() || Util.isMacOS() - - - - - + - + - ${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}.bat + ${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_UPDATE_SCRIPT} - - - - ${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BATCH_WRAPPER_SCRIPT} - - - - - Util.isWindows() && !(((String)context.getCompilerVariable("WRAPPER_LINK")+".bat").equals((String)context.getCompilerVariable("BATCH_WRAPPER_SCRIPT"))) - - - - + - ${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}.ps1 + ${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}_update - - - - ${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:POWERSHELL_WRAPPER_SCRIPT} - - - - Util.isWindows() && !(((String)context.getCompilerVariable("WRAPPER_LINK")+".ps1").equals((String)context.getCompilerVariable("POWERSHELL_WRAPPER_SCRIPT"))) + Util.isLinux() || Util.isUnixInstaller() || Util.isMacOS() + + + + + + + + + + + + + <strong>Administrator mode</strong> + + context.getBooleanVariable("isAdmin") + ${i18n:WizardPreparing} @@ -1070,6 +2327,12 @@ context.getBooleanVariable("addToDockAction") + + + <strong>Administrator mode</strong> + + context.getBooleanVariable("isAdmin") + ${form:finishedMessage} @@ -1468,7 +2731,7 @@ return console.askYesNo(message, true); ( Util.isLinux() || Util.isUnixInstaller() || ( Util.isMacOS() - && context.getVariable("macWrapperLinkLocation") != null + && context.getVariable("MacOSDir") != null ) ) && context.getVariable("unixBinDir") != null @@ -1514,7 +2777,7 @@ ${compiler:JALVIEW_APPLICATION_NAME} will now launch. - + @@ -1765,9 +3028,13 @@ ${compiler:JALVIEW_APPLICATION_NAME} will now launch. + + + + @@ -1786,9 +3053,13 @@ ${compiler:JALVIEW_APPLICATION_NAME} will now launch. + + + + @@ -1802,7 +3073,7 @@ ${compiler:JALVIEW_APPLICATION_NAME} will now launch. - + @@ -1817,7 +3088,7 @@ ${compiler:JALVIEW_APPLICATION_NAME} will now launch. - + @@ -1844,13 +3115,7 @@ ${compiler:JALVIEW_APPLICATION_NAME} will now launch. - - - - - - - - + + diff --git a/utils/install4j/macos-install-jalview.sh b/utils/install4j/macos-install-jalview.sh new file mode 100755 index 0000000..60dc70c --- /dev/null +++ b/utils/install4j/macos-install-jalview.sh @@ -0,0 +1,414 @@ +#!/usr/bin/env bash + +usage() { + echo "Usage: $( basename $0 ) [-h] [ [-d] [-m arch] [-c channel] | [-i filename] ] [-a folder] [-u] [-U] [-S] [-P] [-R]" + echo "" + echo " This script downloads and installs Jalview in macOS, or installs from a previously downloaded Jalview DMG file." + echo " One of -d or -i should be specified, whichever comes last is used." + echo " Default behaviour with -d is to download the latest release version of Jalview for your architecture and install" + echo " the .app in /Applications with user-space updates enabled." + echo " These can be adjusted with the following options." + echo "" + echo " -h Show help" + echo " -d Download the latest DMG for the channel" + echo " -m arch (with -d) Download specific JVM architecture. Should be one of 'arm64' or 'x86_64' (defaults to \`uname -m\`)" + echo " -c channel (with -d) Download from channel. Should be one of 'release', 'test-release', 'develop' (defaults to 'release')." + echo " -i filename Use filename as DMG image file instead of downloading." + echo " -a folder Install the application .app bundle in folder (default '/Applications')." + echo " -v Verbose output." + echo " -y Assume 'yes' to confirmation." + echo " -q No output other than errors. Assumes -y." + echo "" + echo " Advanced options:" + echo "" + echo " -u template Use template for user-space updates path (defaults to '~/Library/Application Support/Jalview-Desktop')." + echo " template should contain one of: a leading '~/', '%u' (user's username) or '%h' (user's home path)." + echo " -U Disable user-space updates (updates will be attempted in the installation folder)." + echo " -S Disable all user-space and installation updates." + echo " -P Do not add the jalview command-line path to /etc/paths.d." + echo " -R Do not perform the check for root privileges." + echo " -t tmpdir Use tmpdir for installation files (defaults to /tmp)" +} + +# check OS +UOS="$(uname -s)" +if [ "$UOS" != "Darwin" ]; then + echo "This install script is for macOS." + echo "Jalview can be installed on other OSes using the installers found at" + echo "https://www.jalview.org/download/" + exit 1 +fi + +# set defaults +DOWNLOAD=0 +UARCH=$(uname -m) +CHANNEL="release" +DMGFILE="" +INSTALLERNAME="$(basename $0)" +APPLICATIONFOLDER="/Applications" +VERBOSE=0 +YES=0 +QUIET=0 +USERAPPDIRTEMPLATE="" +DISABLEUSERAPPDIR=0 +DISABLEALLUPDATES=0 +DISABLEGLOBALPATH=0 +DISABLEROOTCHECK=0 +USETEMPDIR="" +TMP="/tmp" + +CURLOPT="" +RSYNCOPT="" +DITTOOPT="" +HDIUTILOPT="-quiet" + +# set options +while getopts "hdi:a:vyqu:c:USPR" opt; do + case ${opt} in + h) + usage + exit 0 + ;; + d) + DOWNLOAD=1 + ;; + m) + UARCH="${OPTARG}" + ;; + c) + CHANNEL="${OPTARG}" + ;; + i) + DMGFILE="${OPTARG}" + DOWNLOAD=0 + ;; + a) + APPLICATIONFOLDER="${OPTARG}" + ;; + v) + VERBOSE=1 + CURLOPT="-v" + RSYNCOPT="-v" + DITTOOPT="-V" + HDIUTILOPT="-verbose" + ;; + y) + YES=1 + ;; + q) + QUIET=1 + CURLOPT="-s" + RSYNCOPT="-q" + HDIUTILOPT="-quiet" + YES=1 + ;; + u) + USERAPPDIRTEMPLATE="${OPTARG}" + ;; + U) + DISABLEUSERAPPDIR=1 + ;; + S) + DISABLEALLUPDATES=1 + ;; + P) + DISABLEGLOBALPATH=1 + ;; + R) + DISABLEROOTCHECK=1 + ;; + t) + TMP="${OPTARG}" + ;; + *) + echo "Unrecognised option. Run with -h for help." + exit 2 + ;; + esac +done + +myecho() { + if [ "${QUIET}" != 1 ]; then + echo "* $1" + fi +} + +# no -d or -i arguments +if [ "${DOWNLOAD}" = 0 -a -z "${DMGFILE}" ]; then + echo "Please use one of -d or -i options" + echo "" + usage + exit 0 +fi + +# root permissions check +if [ "${DISABLEROOTCHECK}" != 1 -a "${EUID}" != 0 ]; then + echo "This script should be run with root permissions, or disable this root check with -R." + exit 5 +fi + +# check channel +if [ ! -z "$DMGFILE" -a -e "$DMGFILE" ]; then + myecho "Using DMG file '${DMGFILE}'" + CHANNEL="dmg" +else + case "$CHANNEL" in + release|test-release|develop) + myecho "Using channel ${CHANNEL}" + ;; + *) + echo "-c channel must be one of 'release', 'test-release' or 'develop'" + exit 3 + ;; + esac +fi + +# convert uarch to jarch +case $UARCH in + x86_64) + JARCH=x64 + ;; + arm64) + JARCH=aarch64 + ;; + *) + echo "Unknown architecture '$UARCH'. Exiting." + exit 4; + ;; +esac + +# dir for downloads and volume mount +TEMPDIR=$(mktemp -d -p "${TMP}" -t "${INSTALLERNAME%.sh}_${CHANNEL}") +if [ "${DOWNLOAD}" = 1 ]; then + myecho "Using directory '${TEMPDIR}' to download and mount disk image" +else + myecho "Using directory '${TEMPDIR}' to mount disk image" +fi +FILEBASE="${TEMPDIR}/jalview-${CHANNEL}-latest-macos-${JARCH}" +VOLUMEDIR="${FILEBASE}.vol" + +# Confirmation of what's about to happen +if [ "${YES}" != 1 ]; then + if [ "${DOWNLOAD}" = 1 ]; then + myecho "This script will download Jalview from the '${CHANNEL}' channel and install it into the '${APPLICATIONFOLDER}' folder." + else + myecho "This script will install Jalview from the '${DMGFILE}' disk image file into the '${APPLICATIONFOLDER}' folder." + fi + + read -r -p "Continue? [y/N] " response + case $(echo "${response}" | tr '[:upper:]' '[:lower:]') in + yes|y) + myecho "Excellent! Continuing." + ;; + *) + echo "Aborting due to negative confirmation." && exit + ;; + esac +fi + +if [ "${DOWNLOAD}" = 1 ]; then + DMGFILE="${FILEBASE}.dmg" + SHA256="" + + URL="https://www.jalview.org/downloads/${CHANNEL}/installer/macos-${JARCH}" + + myecho "Downloading '${URL}' to '${DMGFILE}'" + curl ${CURLOPT} -f -L -o "${DMGFILE}" "${URL}" + [ $? != 0 ] && echo "Could not download '$URL' to '$DMGFILE'" && exit 6 + SHA256=$( curl ${CURLOPT} -f -s -L "${URL}.sha256" ) + [ $? != 0 ] && echo "Could not download '$URL.sha256'" && exit 7 + + CHECK=$( shasum -a 256 "${DMGFILE}" | cut -d" " -f1 ) + if [ "${CHECK}" = "${SHA256}" ]; then + myecho "Downloaded file '$DMGFILE' checksum matches downloaded checksum '$SHA256'" + else + echo "Downloaded file '$DMGFILE' checksum does not match downloaded checksum '$SHA256'" + exit 8 + fi +fi + +# mount the DMG image +myecho "Mounting disk image '${DMGFILE}' on '${VOLUMEDIR}'" +hdiutil attach ${HDIUTILOPT} -mountpoint "${VOLUMEDIR}" "${DMGFILE}" +[ $? != 0 ] && echo "Could not mount '${DMGFILE}' on mount point '${VOLUMEDIR}'" && exit 9 + +myecho "MOUNTED" + +# difficult to use a wildcard for a non-user-readable folder without inserting sudo directly into the command +# i.e. what I really want to do here is +# APP=$( sudo sh -c "ls -1d ${VOLUMEDIR}/Jalview*.app" | head -1 ) +# but don't want to put sudo in the script because of the -R option. We'll loop through instead. +VOLUMEFILES=$( ls -1 ${VOLUMEDIR} ) +while IFS= read -r VOLUMEFILE; do + FILE=$( basename "${VOLUMEFILE}" ) + if [ "$FILE" != "${FILE#Jalview}" -a "$FILE" != "${FILE%.app}" ]; then + APP="$FILE" + break + fi +done <<< "$VOLUMEFILES" +[ -z "$APP" ] && echo "Could not find Jalview\*.app in the volume '${VOLUMEDIR}'" && exit 10 + +APPNAME=$( basename "$APP" ) +myecho "Found application '${APP}'" + +# ensure no trailing slash on APPNAME or APPLICATIONFOLDER (important for rsync) +while [ "${APPLICATIONFOLDER}" != "${APPLICATIONFOLDER%/}" -a "${APPLICATIONFOLDER}" != "/" ]; do + myecho "Removing trailing slash from APPLICATIONFOLDER='${APPLICATIONFOLDER}'" + APPLICATIONFOLDER="${APPLICATIONFOLDER%/}" +done +while [ "${APPNAME}" != "${APPNAME%/}" ]; do + myecho "Removing trailing slash from APPNAME='${APPNAME}'" + APPNAME=${APPNAME%/} +done +[ -z "$APPNAME" -o "${APPNAME%.app}" = "$APPNAME" ] && echo "Could not find suitable Jalview\*.app in the volume '${VOLUMEDIR}'" && exit 11 + +## rsync .app from mounted volume to application folder +#myecho "Rsyncing '${VOLUMEDIR}/${APPNAME}' to '${APPLICATIONFOLDER}/${APPNAME}'" +#rsync ${RSYNCOPT} -ah --delete "${VOLUMEDIR}/${APPNAME}" "${APPLICATIONFOLDER}/" +#[ $? != 0 ] && echo "Possible problem when rsyncing '${APP}' to '${APPLICATIONFOLDER}'" && exit 12 +#myecho "Finished rsync" + +# using ditto +APPPATH="${APPLICATIONFOLDER}/${APPNAME}" +OLDAPPPATH="${APPPATH}.old" +myecho "Copying '${VOLUMEDIR}/${APPNAME}' to '${APPPATH}'" +if [ -e "$APPPATH" ]; then + if [ -e "$OLDAPPPATH" ]; then + rm -Rf "$OLDAPPPATH" + fi + mv "$APPPATH" "$OLDAPPPATH" +fi +ditto ${DITTOOPT} "${VOLUMEDIR}/${APPNAME}" "$APPPATH" && [ -e "$OLDAPPPATH" ] && rm -Rf "$OLDAPPPATH" +myecho "Finished copying '${APPNAME}'" + +EXIT=0 +declare -a WARNINGS=() +addwarning() { + local W=$1 + local N=$2 + myecho "${W}" + WARNINGS=( "${WARNINGS[@]}" "${W}" ) + # exit with the first warning value + [ "${EXIT}" = 0 ] && EXIT=$N +} + +# unmount the DMG image +myecho "Unmounting '${VOLUMEDIR}'" +hdiutil detach ${HDIUTILOPT} "${VOLUMEDIR}" || addwarning "Possible problem when unmounting/deleting '${VOLUMEDIR}'. I'm continuing the install but you should look at it later." 13 + +# delete the image file and temp dir +if [ "${DOWNLOAD}" = 1 ]; then + myecho "Deleting downloaded disk image file '${DMGFILE}'" + rm "${DMGFILE}" +fi +myecho "Removing temporary directory '${TEMPDIR}'" +rmdir "${TEMPDIR}" + +VMOPTIONS="${APPLICATIONFOLDER}/${APPNAME}/Contents/vmoptions.txt" + +VMOPTIONS_START="" +if [ -e "${VMOPTIONS}" ]; then + while IFS= read -r line; do + VMOPTIONS_START="${VMOPTIONS_START}${line}"$'\n' + if [ "${line}" != "${line/Jalview/}" ]; then # i.e. $line contains "Jalview" + break + fi + done < "${VMOPTIONS}" +fi + +LONGHASH=$( printf %s "${APPLICATIONFOLDER}/${APPNAME}/Contents/Resources/app" | shasum -a 256 -b ) +HASH=${LONGHASH:0:8} +NAME=${APPNAME%.app} + +myecho "Writing vmoptions files '${VMOPTIONS}'" +VMOPTIONS_COMMENT=$( cat << EOM +# Jalview options added by $( basename $0 ) at $( date +"%F %T") +EOM +) + +# -Dnouserdefaultappdir=false +if [ "${DISABLEUSERAPPDIR}" = 1 ]; then + myecho "- User-space updates DISABLED" + VMOPTIONS_USERAPPDIR=$( cat << EOM +# +# Comment out the following line to allow user-space updates +-Dnouserdefaultappdir=true +EOM +) +else + myecho "- User-space updates enabled" + VMOPTIONS_USERAPPDIR=$( cat << EOM +# +# Uncomment the following line to disable user-space updates +#-Dnouserdefaultappdir=true +EOM +) +fi + +# -Dsetuserappdirpath +if [ -z "${USERAPPDIRTEMPLATE}" ]; then + myecho "- Default user-space updates path (~/Library/Application Support/Jalview-Desktop/${NAME}/${HASH})" + VMOPTIONS_USERAPPDIRPATH=$( cat << EOM +# +# Uncomment the below line to set a custom path for user-space updates -- use with caution. +# A leading ~/ or %h anywhere will be substituted with the user's home path, and %u by the username. +# If not set, the default is ~/Library/Application Support/Jalview-Desktop for macOS +#-Dsetuserappdirpath=/tmp/jalview/%u +EOM +) +else + myecho "- CUSTOMISED user-space updates path (${USERAPPDIRTEMPLATE})" + VMOPTIONS_USERAPPDIRPATH=$( cat << EOM +# +# The below line sets a custom path for user-space updates -- use with caution. +# A leading ~/ or %h anywhere will be substituted with the user's home path, and %u by the username. +# If unset, the default is ~/Library/Application Support/Jalview-Desktop for macOS +-Dsetuserappdirpath=${USERAPPDIRTEMPLATE} +EOM +) +fi + +# -Dsilent=noupdate +if [ "${DISABLEALLUPDATES}" = 1 ]; then + myecho "- All automatic updates DISABLED" + VMOPTIONS_UPDATES=$( cat << EOM +# +# Comment out the following line to enable updates +-Dsilent=noupdate +EOM +) +else + if [ "${DISABLEUSERAPPDIR}" = 1 ]; then + myecho "- Automatic updates enabled IN INSTALLATION" + else + myecho "- Automatic updates enabled in user-space" + fi + VMOPTIONS_UPDATES=$( cat << EOM +# +# Uncomment the following line to also disable all updates +#-Dsilent=noupdate +EOM +) +fi + +printf "%s\n%s\n%s\n%s\n%s\n" "${VMOPTIONS_START}" "${VMOPTIONS_COMMENT}" "${VMOPTIONS_USERAPPDIR}" "${VMOPTIONS_USERAPPDIRPATH}" "${VMOPTIONS_UPDATES}" > "${VMOPTIONS}" || addwarning "Possible problem adding options to '${VMOPTIONS}'" 14 + +# set a global path in /etc/paths.d +if [ "${DISABLEGLOBALPATH}" != 1 ]; then + US_NAME="${NAME// /_}" + PATHFILE="/etc/paths.d/${US_NAME}-${HASH}" + myecho "Writing global PATH to '${PATHFILE}'" + echo "${APPLICATIONFOLDER}/${APPNAME}/Contents/MacOS" > "${PATHFILE}" || addwarning "Possible problem writing path file '${PATHFILE}'" 15 +fi + +# show accumulated warnings +if [ "${#WARNINGS[@]}" != 0 ]; then + myecho "-----------------" + myecho "Installation complete." + myecho "Warnings summary:" + myecho "$( printf -- '- %s\n' "${WARNINGS[@]}" )" +else + myecho "Successful installation!" +fi + +exit $EXIT diff --git a/utils/install4j/warning.png b/utils/install4j/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2063df2fd6f6224c4a9cbf1ab63a194ea84be2c3 GIT binary patch literal 3255 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 literal 0 HcmV?d00001 diff --git a/utils/osx_signing/sign_dmg.sh b/utils/osx_signing/sign_dmg.sh new file mode 100755 index 0000000..1b3973c --- /dev/null +++ b/utils/osx_signing/sign_dmg.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +if [[ "$GITDIR" == "" ]]; then + GITDIR=~/uod-development/jalview-builds/git/jalview +fi; + +if [[ "$DEVELOPERID" == "" ]]; then + DEVELOPERID="Developer ID" +fi; + +if [[ "$TMPDMG" == "" ]]; then + TMPDMG="signingDMG" +fi; + +echo APPNAME $APPNAME like Jalview Test +echo doing ARCH $ARCH +echo using entitlements from $GITDIR +echo using key $DEVELOPERID + +FAPPNAME="${APPNAME/ /\\ }" +FAPPNAMEESC="${APPNAME/ /\\\\\\ }" +FWAPP="${APPNAME/ [A-Za-z]*/}" +ARCHNAME="${APPNAME// /_}-${APPVER//\./_}-macos-$ARCH-java_$JVER" +DMGNAME="${APPNAME/ /_}-${APPVER//\./_}-macos-$ARCH-java_$JVER.dmg" +VOLNAME="${APPNAME// /_}\\ Installer\\ \\(${APPVER//\./_}\\ $ARCH\\ $JVER\\)" +VLNAME="${APPNAME// /_} Installer (${APPVER//\./_} $ARCH $JVER)" +BORINGVLNAME="${APPNAME} Installer" + + + +echo "will mount $DMGNAME as $VOLNAME" +if [[ -d $TMPDMG ]]; then + echo "'$TMPDMG' is in the way. Please delete it or set TMPDMG" + exit 1; +fi + +if [[ -f $DMGNAME ]]; then + hdiutil attach $DMGNAME + ditto /Volumes/${FWAPP}* $TMPDMG + hdiutil eject /Volumes/${FWAPP}* + mkdir -p unsigned + mv -v $DMGNAME unsigned/ + echo Moved $DMGNAME to unsigned/$DMGNAME + codesign --remove-signature --force --deep -vvvv -s "Developer ID" --options runtime --entitlements $GITDIR/utils/osx_signing/entitlements.txt $TMPDMG/${FWAPP}*.app/Contents/Resources/app/jre/Contents/MacOS/libjli.dylib + + codesign --verify --deep -v ./$TMPDMG/${FWAPP}*.app/Contents/Resources/app/jre/Contents/MacOS/libjli.dylib + + codesign --remove-signature --force --deep -vvvv -s "Developer ID" --options runtime --entitlements $GITDIR/utils/osx_signing/entitlements.txt $TMPDMG/${FWAPP}*.app/Contents/MacOS/JavaApplicationStub + + hdiutil create -megabytes 260 -srcfolder ./$TMPDMG -volname "$BORINGVLNAME" $ARCHNAME.dmg + + codesign --force --deep -vvvv -s "Developer ID" --options runtime --entitlements $GITDIR/utils/osx_signing/entitlements.txt $ARCHNAME.dmg + + codesign --deep -vvvv $ARCHNAME.dmg + + rm -Rf $TMPDMG +else + echo Can\'t find $DMGNAME - dit you set APPNAME APPVER ARCH and JVER correctly ? +fi + diff --git a/utils/osx_signing/staple_dmg.sh b/utils/osx_signing/staple_dmg.sh new file mode 100755 index 0000000..0eb24dc --- /dev/null +++ b/utils/osx_signing/staple_dmg.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +if [[ "$GITDIR" == "" ]]; then + GITDIR=~/uod-development/jalview-builds/git/jalview +fi; + + +if [[ "$DEVELOPERID" == "" ]]; then + DEVELOPERID="Developer ID" +fi; + +if [[ "$TMPDMG" == "" ]]; then + TMPDMG="staplingDMG" +fi; + + +echo APPNAME $APPNAME like Jalview Test +echo doing ARCH $ARCH +echo using entitlements from $GITDIR + +FAPPNAME="${APPNAME/ /\\ }" +FAPPNAMEESC="${APPNAME/ /\\\\\\ }" +FWAPP="${APPNAME/ [A-Za-z]*/}" +ARCHNAME="${APPNAME// /_}-${APPVER//\./_}-macos-$ARCH-java_$JVER" +DMGNAME="${APPNAME/ /_}-${APPVER//\./_}-macos-$ARCH-java_$JVER.dmg" +VOLNAME="${APPNAME// /_}\\ Installer\\ \\(${APPVER//\./_}\\ $ARCH\\ $JVER\\)" +VLNAME="${APPNAME// /_} Installer (${APPVER//\./_} $ARCH $JVER)" +BORINGVLNAME="${APPNAME} Installer" +echo "will mount $DMGNAME as $VOLNAME" + +if [[ -d $TMPDMG ]]; then + echo "'$TMPDMG' is in the way. Please delete it or set TMPDMG" + exit 1; +fi + +if [[ -f $DMGNAME ]]; then + hdiutil attach $DMGNAME + ditto /Volumes/${FWAPP}* $TMPDMG + hdiutil eject /Volumes/${FWAPP}* + xcrun stapler staple $TMPDMG/${FWAPP}*.app + mkdir -p stapled + hdiutil create -megabytes 240 -srcfolder $TMPDMG -volname "$BORINGVLNAME" stapled/$DMGNAME + codesign --force --deep -vvvv -s "$DEVELOPERID" --options runtime --entitlements ${GITDIR}/utils/osx_signing/entitlements.txt stapled/$DMGNAME + codesign --deep -vvvv stapled/$DMGNAME + echo "Stapled DMG is in stapled/$DMGNAME" + rm -Rf $TMPDMG +else + echo Can\'t find $DMGNAME - dit you set APPNAME APPVER ARCH and JVER correctly ? +fi + -- 1.7.10.2