diff --git a/Contents.m b/Contents.m index 616eee7..41ea2d7 100644 --- a/Contents.m +++ b/Contents.m @@ -1,5 +1,5 @@ % megconnectome -% Version 2.1 www.humanconnectome.org 9-Sep-2014 +% Version 2.2 www.humanconnectome.org 10-Nov-2014 % Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) % diff --git a/LICENSE.external b/LICENSE.external new file mode 100644 index 0000000..4788d41 --- /dev/null +++ b/LICENSE.external @@ -0,0 +1,4 @@ +The software in the external directory is not copyright by the Human +Connectome Project and its coworkers, but rather by external authors. +Please see the respective README and LICENCE files in the external +directory for details. diff --git a/analysis_functions/getdimord.m b/analysis_functions/getdimord.m new file mode 100644 index 0000000..f243c78 --- /dev/null +++ b/analysis_functions/getdimord.m @@ -0,0 +1,425 @@ +function dimord = getdimord(data, field, varargin) + +% GETDIMORD +% +% Use as +% dimord = getdimord(data, field) +% +% See also GETDIMSIZ + +if ~isfield(data, field) + error('field "%s" not present in data', field); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ATTEMPT 1: the specific dimord is simply present +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +if isfield(data, [field 'dimord']) + dimord = data.([field 'dimord']); + return +end + +% if not present, we need some additional information about the data strucure + +% nan means that the value is not known and might remain unknown +% inf means that the value is not known and but should be known +ntime = inf; +nfreq = inf; +nchan = inf; +nchancmb = inf; +nsubj = nan; +nrpt = nan; +nrpttap = nan; +npos = inf; +nori = nan; % this will be 3 in many cases +ntopochan = inf; +nspike = inf; % this is only for the first spike channel +nlag = nan; + +% use an anonymous function +assign = @(var, val) assignin('caller', var, val); +% it is possible to pass additional ATTEMPTs such as nrpt, nrpttap, etc +for i=1:2:length(varargin) + assign(varargin{i}, varargin{i+1}); +end + +% try to determine the size of each possible dimension in the data +if isfield(data, 'label') + nchan = length(data.label); +end + +if isfield(data, 'labelcmb') + nchancmb = size(data.labelcmb, 1); +end + +if isfield(data, 'time') + if iscell(data.time) && ~isempty(data.time) + tmp = getdimsiz(data, 'time'); + ntime = tmp(3); % raw data may contain variable length trials + else + ntime = length(data.time); + end +end + +if isfield(data, 'freq') + nfreq = length(data.freq); +end + +if isfield(data, 'trial') && ft_datatype(data, 'raw') + nrpt = length(data.trial); +end + +if isfield(data, 'trialtime') && ft_datatype(data, 'spike') + nrpt = size(data.trialtime,1); +end + +if isfield(data, 'cumtapcnt') + nrpt = size(data.cumtapcnt,1); + if numel(data.cumtapcnt)==length(data.cumtapcnt) + % it is a vector, hence it only represents repetitions + nrpttap = sum(data.cumtapcnt); + else + % it is a matrix, hence it is repetitions by frequencies + % this happens after mtmconvol with keeptrials + nrpttap = sum(data.cumtapcnt,2); + if any(nrpttap~=nrpttap(1)) + warning('unexpected variation of the number of tapers over trials') + nrpttap = nan; + else + nrpttap = nrpttap(1); + end + end +end + +if isfield(data, 'pos') + npos = size(data.pos,1); +end + +if isfield(data, 'csdlabel') + % this is used in PCC beamformers + nori = length(data.csdlabel); +elseif isfinite(npos) + % assume that there are three dipole orientations per source + nori = 3; +end + +if isfield(data, 'topolabel') + % this is used in ICA and PCA decompositions + ntopochan = length(data.topolabel); +end + +if isfield(data, 'timestamp') && iscell(data.timestamp) + nspike = length(data.timestamp{1}); % spike data: only for the first channel +end + +if ft_datatype(data, 'mvar') && isfield(data, 'coeffs') + nlag = size(data.coeffs,3); +end + +% determine the size of the actual data +datsiz = getdimsiz(data, field); + +tok = {'subj' 'rpt' 'rpttap' 'chan' 'chancmb' 'freq' 'time' 'pos' 'ori' 'topochan' 'lag'}; +siz = [nsubj nrpt nrpttap nchan nchancmb nfreq ntime npos nori ntopochan nlag]; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ATTEMPT 2: a general dimord is present and might apply +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +if isfield(data, 'dimord') + dimtok = tokenize(data.dimord, '_'); + if length(dimtok)==length(datsiz) + success = false(size(dimtok)); + for i=1:length(dimtok) + sel = strcmp(tok, dimtok{i}); + if any(sel) && datsiz(i)==siz(sel) + success(i) = true; + elseif strcmp(dimtok{i}, 'subj') + % the number of subjects cannot be determined, and will be indicated as nan + success(i) = true; + elseif strcmp(dimtok{i}, 'rpt') + % the number of trials is hard to determine, and might be indicated as nan + success(i) = true; + end + end % for + if all(success) + dimord = data.dimord; + return + end + end +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ATTEMPT 3: look at the size of some common fields that are known +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +switch field + case {'individual'} + if isequalwithoutnans(datsiz, [nsubj nchan ntime]) + dimord = 'subj_chan_time'; + end + + case {'avg' 'var' 'dof'} + if isequalwithoutnans(datsiz, [nrpt nchan ntime]) + dimord = 'rpt_chan_time'; + elseif isequalwithoutnans(datsiz, [nchan ntime]) + dimord = 'chan_time'; + end + + case {'powspctrm' 'fourierspctrm'} + if isequalwithoutnans(datsiz, [nrpt nchan nfreq ntime]) + dimord = 'rpt_chan_freq_time'; + elseif isequalwithoutnans(datsiz, [nrpt nchan nfreq]) + dimord = 'rpt_chan_freq'; + elseif isequalwithoutnans(datsiz, [nchan nfreq ntime]) + dimord = 'chan_freq_time'; + elseif isequalwithoutnans(datsiz, [nchan nfreq]) + dimord = 'chan_freq'; + end + + case {'crsspctrm' 'cohspctrm'} + if isequalwithoutnans(datsiz, [nrpt nchancmb nfreq ntime]) + dimord = 'rpt_chancmb_freq_time'; + elseif isequalwithoutnans(datsiz, [nrpt nchancmb nfreq]) + dimord = 'rpt_chancmb_freq'; + elseif isequalwithoutnans(datsiz, [nchancmb nfreq ntime]) + dimord = 'chancmb_freq_time'; + elseif isequalwithoutnans(datsiz, [nchancmb nfreq]) + dimord = 'chancmb_freq'; + elseif isequalwithoutnans(datsiz, [nrpt nchan nchan nfreq ntime]) + dimord = 'rpt_chan_chan_freq_time'; + elseif isequalwithoutnans(datsiz, [nrpt nchan nchan nfreq]) + dimord = 'rpt_chan_chan_freq'; + elseif isequalwithoutnans(datsiz, [nchan nchan nfreq ntime]) + dimord = 'chan_chan_freq_time'; + elseif isequalwithoutnans(datsiz, [nchan nchan nfreq]) + dimord = 'chan_chan_freq'; + end + + case {'cov' 'coh' 'csd' 'noisecov' 'noisecsd'} + % these occur in timelock and in source structures + if isequalwithoutnans(datsiz, [nrpt nchan nchan]) + dimord = 'rpt_chan_chan'; + elseif isequalwithoutnans(datsiz, [nchan nchan]) + dimord = 'chan_chan'; + elseif isequalwithoutnans(datsiz, [npos nori nori]) + if iscell(data.(field)) + dimord = '{pos}_ori_ori'; + else + dimord = 'pos_ori_ori'; + end + elseif isequalwithoutnans(datsiz, [npos nrpt nori nori]) + if iscell(data.(field)) + dimord = '{pos}_rpt_ori_ori'; + else + dimord = 'pos_rpt_ori_ori'; + end + end + + case {'pow'} + if isequalwithoutnans(datsiz, [npos ntime]) + if iscell(data.(field)) + dimord = '{pos}_time'; + else + dimord = 'pos_time'; + end + elseif isequalwithoutnans(datsiz, [npos nfreq]) + if iscell(data.(field)) + dimord = '{pos}_freq'; + else + dimord = 'pos_freq'; + end + elseif isequal(datsiz, [npos 1]) % in case there are no repetitions + if iscell(data.(field)) + dimord = '{pos}'; + else + dimord = 'pos'; + end + elseif isequalwithoutnans(datsiz, [npos nrpt]) % only if nrpt is known + if iscell(data.(field)) + dimord = '{pos}_rpt'; + else + dimord = 'pos_rpt'; + end + end + + case {'mom'} + if isequalwithoutnans(datsiz, [npos ntime]) + if iscell(data.(field)) + dimord = '{pos}_time'; + else + dimord = 'pos_time'; + end + elseif isequalwithoutnans(datsiz, [npos nori ntime]) + if iscell(data.(field)) + dimord = '{pos}_ori_time'; + else + dimord = 'pos_ori_time'; + end + elseif isequalwithoutnans(datsiz, [npos nori nrpt]) + if iscell(data.(field)) + dimord = '{pos}_ori_rpt'; + else + dimord = 'pos_ori_rpt'; + end + end + + case {'trial'} + if ~iscell(data.(field)) && isequalwithoutnans(datsiz, [nrpt nchan ntime]) + dimord = 'rpt_chan_time'; + elseif isequalwithoutnans(datsiz, [nrpt nchan ntime]) + dimord = '{rpt}_chan_time'; + elseif isequalwithoutnans(datsiz, [nchan nspike]) || isequalwithoutnans(datsiz, [nchan 1 nspike]) + dimord = '{chan}_spike'; + end + + case {'sampleinfo' 'trialinfo' 'trialtime'} + if isequalwithoutnans(datsiz, [nrpt nan]) + dimord = 'rpt_other'; + end + + case {'cumtapcnt' 'cumsumcnt'} + if isequalwithoutnans(datsiz, [nrpt nan]) + dimord = 'rpt_other'; + end + + case {'topo'} + if isequalwithoutnans(datsiz, [ntopochan nchan]) + dimord = 'topochan_chan'; + end + + case {'unmixing'} + if isequalwithoutnans(datsiz, [nchan ntopochan]) + dimord = 'chan_topochan'; + end + + case {'inside'} + if isequalwithoutnans(datsiz, [npos]) + dimord = 'pos'; + end + + case {'timestamp' 'time'} + if ft_datatype(data, 'spike') && iscell(data.(field)) && datsiz(1)==nchan + dimord = '{chan}_spike'; + elseif ft_datatype(data, 'raw') && iscell(data.(field)) && datsiz(1)==nrpt + dimord = '{rpt}_time'; + elseif isvector(data.(field)) && isequal(datsiz, [1 ntime]) + dimord = 'time'; + end + + case {'freq'} + if isvector(data.(field)) && isequal(datsiz, [1 nfreq]) + dimord = 'freq'; + end + +end % switch field + +if ~exist('dimord', 'var') + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % ATTEMPT 4: there is only one way that the dimensions can be interpreted + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + dimtok = cell(size(datsiz)); + + for i=1:length(datsiz) + sel = find(siz==datsiz(i)); + if length(sel)==1 + % there is exactly one corresponding dimension + dimtok{i} = tok{sel}; + else + % there are zero or multiple corresponding dimensions + dimtok{i} = []; + end + end + + if all(~cellfun(@isempty, dimtok)) + if iscell(data.(field)) + dimtok{1} = ['{' dimtok{1} '}']; + end + dimord = sprintf('%s_', dimtok{:}); + dimord = dimord(1:end-1); + return + end +end % if dimord does not exist + +if ~exist('dimord', 'var') + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % ATTEMPT 5: compare the size with the known size of each dimension + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + sel = ~isnan(siz) & ~isinf(siz); + % nan means that the value is not known and might remain unknown + % inf means that the value is not known and but should be known + if length(unique(siz(sel)))==length(siz(sel)) + % this should only be done if there is no chance of confusing dimensions + dimtok = cell(size(datsiz)); + dimtok(datsiz==npos) = {'pos'}; + dimtok(datsiz==nori) = {'ori'}; + dimtok(datsiz==nrpttap) = {'rpttap'}; + dimtok(datsiz==nrpt) = {'rpt'}; + dimtok(datsiz==nsubj) = {'subj'}; + dimtok(datsiz==nchancmb) = {'chancmb'}; + dimtok(datsiz==nchan) = {'chan'}; + dimtok(datsiz==nfreq) = {'freq'}; + dimtok(datsiz==ntime) = {'time'}; + + if isempty(dimtok{end}) && datsiz(end)==1 + % remove the unknown trailing singleton dimension + dimtok = dimtok(1:end-1); + end + + if all(~cellfun(@isempty, dimtok)) + if iscell(data.(field)) + dimtok{1} = ['{' dimtok{1} '}']; + end + dimord = sprintf('%s_', dimtok{:}); + dimord = dimord(1:end-1); + return + end + end +end % if dimord does not exist + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ATTEMPT 6: return "unknown_unknown" +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if ~exist('dimord', 'var') + % this should not happen + % if it does, it might help in diagnosis to have a very informative warning message + % since there have been problems with trials not being selected correctly due to the warning going unnoticed + % it is better to throw an error than a warning + warning('could not determine dimord of "%s" in the following data', field) + disp(data); + + dimtok = repmat({'unknown'}, size(datsiz)); + if all(~cellfun(@isempty, dimtok)) + if iscell(data.(field)) + dimtok{1} = ['{' dimtok{1} '}']; + end + dimord = sprintf('%s_', dimtok{:}); + dimord = dimord(1:end-1); + end +end + +end % function + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function ok = isequalwithoutnans(a, b) +% this is *only* used to compare matrix sizes, so we can ignore any +% singleton last dimension +numdiff = numel(b)-numel(a); + +if numdiff > 0 + % assume singleton dimensions missing in a + a = [a(:); ones(numdiff, 1)]; + b = b(:); +elseif numdiff < 0 + % assume singleton dimensions missing in b + b = [b(:); ones(abs(numdiff), 1)]; + a = a(:); +end + +c = ~isnan(a(:)) & ~isnan(b(:)); +ok = isequal(a(c), b(c)); + +end % function isequalwithoutnans diff --git a/analysis_functions/getdimsiz.m b/analysis_functions/getdimsiz.m new file mode 100644 index 0000000..7dbc6ed --- /dev/null +++ b/analysis_functions/getdimsiz.m @@ -0,0 +1,31 @@ +function dimsiz = getdimsiz(data, field) + +% GETDIMSIZ +% +% Use as +% dimsiz = getdimsiz(data, field) +% +% See also GETDIMORD + +if ~isfield(data, field) + error('field "%s" not present in data', field); +end + +dimsiz = cellmatsize(data.(field)); + +end % main function + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION to determine the size of data representations like {pos}_ori_time +% FIXME this will fail for {xxx_yyy}_zzz +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function siz = cellmatsize(x) +if iscell(x) + cellsize = numel(x); % the number of elements in the cell-array + [dum, indx] = max(cellfun(@numel, x)); + matsize = size(x{indx}); % the size of the content of the cell-array + siz = [cellsize matsize]; % concatenate the two +else + siz = size(x); +end +end % function cellmatsize \ No newline at end of file diff --git a/analysis_functions/hcp_ICA_plot.m b/analysis_functions/hcp_ICA_plot.m index 6cd2758..e27b55c 100644 --- a/analysis_functions/hcp_ICA_plot.m +++ b/analysis_functions/hcp_ICA_plot.m @@ -184,8 +184,8 @@ function hcp_ICA_plot(comp_freq, options) subplot(2,2,2); timeic=cell2mat(comp_freq.time); trialic=cell2mat(comp_freq.trial); - plot(timeic(1,:),trialic(ix,:)); - sig = trialic(ix,:); + plot(timeic(1,:),trialic(selcomp(ix),:)); + sig = trialic(selcomp(ix),:); base = timeic; axis([base(1) base(end) min(sig)-0.1*(max(sig)-min(sig)) max(sig)+0.1*(max(sig)-min(sig))]); ylabel(['amplitude']); diff --git a/analysis_functions/hcp_avgspecmanualalphabetagui.m b/analysis_functions/hcp_avgspecmanualalphabetagui.m new file mode 100644 index 0000000..24da07c --- /dev/null +++ b/analysis_functions/hcp_avgspecmanualalphabetagui.m @@ -0,0 +1,774 @@ +function [parH]=hcp_avgspecmanualalphabetagui(subjID,inspectra_Restin,inspectra_Motort,inspectra_Wrkmem,inspectra_StoryM,infreqs,outSaveDir) + + +hasRestin=~isempty(inspectra_Restin); +hasMotort=~isempty(inspectra_Motort); +hasWrkmem=~isempty(inspectra_Wrkmem); +hasStoryM=~isempty(inspectra_StoryM); + +curspectra_Restin=inspectra_Restin; +curspectra_Motort=inspectra_Motort; +curspectra_Wrkmem=inspectra_Wrkmem; +curspectra_StoryM=inspectra_StoryM; + +%curspectra=inspectra; +curfreqs=infreqs; +Nfreqs=length(curfreqs); + +%% +range_alpha=[6 14]; +range_beta=[15 30]; +Xlim_default=[1 50]; + +peakinfo_alpha=[]; +peakinfo_beta=[]; + + + +outSaveFile=[outSaveDir,'/',subjID,'_ABpeakfile.mat']; + +%% +%======================================================================== +% CREATE GUI LAYOUT +parH=[]; +parH.Fig =figure('position',[ 13 15 1481 683]); +%-- Main Panels for plotting +parH.panel_plot = uipanel( 'Parent', parH.Fig,'position',[0 0.2 1 0.8]); +parH.panel_fsave = uipanel( 'Parent', parH.Fig,'position',[0 0 1 0.199]); +%------------------------------------------------- +Nsubplots_W=7; +Nsubplots_H=2; +subpan_W=1/Nsubplots_W; +subpan_H=1/Nsubplots_H; + +subpan_Wpos=0:subpan_W:1-subpan_W; +subpan_Hpos=1-subpan_H:-subpan_H:0; +%------------------------------------------------- +%=============================== +subTitles{1,1}='MOT Post.Raw'; +subTitles{1,2}='MOT Post.Relative'; +subTitles{1,3}='WM Post.Raw'; +subTitles{1,4}='WM Post.Relative'; +subTitles{1,5}='STM Post.Raw'; +subTitles{1,6}='STM Post.Relative'; +subTitles{1,7}='RESTIN Post.Raw'; + +subTitles=[]; +subTitles{2,1}='MOT Ant.Raw'; +subTitles{2,2}='MOT Ant.Relative'; +subTitles{2,3}='WM Ant.Raw'; +subTitles{2,4}='WM Ant.Relative'; +subTitles{2,5}='STM Ant.Raw'; +subTitles{2,6}='STM Ant.Relative'; +subTitles{2,7}='RESTIN Ant.Raw'; + + +%=============================== + +parH.subplotplanel=[]; +for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + parH.subplotpanel(iH,iW)=uipanel( 'Parent', parH.panel_plot,'position',[subpan_Wpos(iW) subpan_Hpos(iH) subpan_W subpan_H]); + end +end + + +parH.subplotaxes=[]; +parH.subplottitles=[]; +parH.subplotselpeakpos=[]; +parH.subplotXhairpos=[]; +parH.subplotselpeak=[]; +parH.subplotXhair=[]; +for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + parH.subplotaxes(iH,iW)=axes( 'Parent', parH.subplotpanel(iH,iW),'position',[0.1 0.2 0.9 0.7],'ButtonDownFcn',{@getclickposonaxes}); + hold on; + parH.subplottitles(iH,iW)=title(subTitles{iH,iW}); + parH.subplotselpeakpos{iH,iW}=[0,0]; + parH.subplotXhairpos{iH,iW}=[0,0]; + parH.subplotselpeak(iH,iW)=plot(parH.subplotselpeakpos{iH,iW}(1),parH.subplotselpeakpos{iH,iW}(2),'m+','markersize',30); + parH.subplotXhair(iH,iW)=plot(parH.subplotXhairpos{iH,iW}(1),parH.subplotXhairpos{iH,iW}(2),'k+','markersize',20); + + end +end + + +%------------------------------------------------- +% Alpha Get Button +Ngetbutton_W=7; +Ngetbutton_H=2; +getbutton_W=0.25; +getbutton_H=0.1; + +getbutton_Wpos=0.25; %0+getbutton_W:subpan_W:1-subpan_W+getbutton_W; +getbutton_Hpos=0.01; %01-subpan_H:-subpan_H:0; +%------------------------------------------------- +parH.getbutton_A=[]; +for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + parH.getbutton_A(iH,iW) = uicontrol('Style','pushbutton','Parent',parH.subplotpanel(iH,iW),'Units','normalized','Position',[getbutton_Wpos getbutton_Hpos getbutton_W getbutton_H],'String','Aget','BackgroundColor',[205,92,92]./255,'Callback',{@getA_fromXhair}); + end +end +%------------------------------------------------- +% Beta Get Button +getbutton_Wpos=0.6; %0+getbutton_W:subpan_W:1-subpan_W+getbutton_W; +%------------------------------------------------- +parH.getbutton_B=[]; +for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + parH.getbutton_B(iH,iW) = uicontrol('Style','pushbutton','Parent',parH.subplotpanel(iH,iW),'Units','normalized','Position',[getbutton_Wpos getbutton_Hpos getbutton_W getbutton_H],'String','Bget','BackgroundColor',[100,149,237]./255,'Callback',{@getB_fromXhair}); + end +end + + +%============================================================ +Neditbox_W=7; +Neditbox_H=2; +editbox_W=1/Neditbox_W; +editbox_H=0.6/Neditbox_H; + +editbox_Wpos=0:editbox_W:1-editbox_W; +editbox_Hpos=1-editbox_H:-editbox_H:0.4; + +parH.editfreq_alpha_panel=[]; +for iH=1, %:Neditbox_H, + for iW=1:Neditbox_W, + parH.editfreq_alpha_panel(iH,iW)=uipanel( 'Parent', parH.panel_fsave,'position',[editbox_Wpos(iW) editbox_Hpos(iH) editbox_W editbox_H]); + end +end + +parH.editfreq_beta_panel=[]; +for iH=2, %:Neditbox_H, + for iW=1:Neditbox_W, + parH.editfreq_beta_panel(iH-1,iW)=uipanel( 'Parent', parH.panel_fsave,'position',[editbox_Wpos(iW) editbox_Hpos(iH) editbox_W editbox_H]); + end +end +%% ==================================== +editboxinlet_W=0.6; +editboxinlet_H=0.9; +editboxinlet_Wpos=0.2; +editboxinlet_Hpos=0.05; + + +parH.editfreq_alpha_inlet=[]; +for iH=1, %:Neditbox_H, + for iW=1:Neditbox_W, + parH.editfreq_alpha_inlet(iH,iW)=uicontrol('Style','edit','Parent', parH.editfreq_alpha_panel(iH,iW) ,'Units','normalized' ,'position',[editboxinlet_Wpos editboxinlet_Hpos editboxinlet_W editboxinlet_H],'String',num2str(nan)); + end +end + + +parH.editfreq_beta_inlet=[]; +for iH=2, %:Neditbox_H, + for iW=1:Neditbox_W, + parH.editfreq_beta_inlet(iH-1,iW)=uicontrol('Style','edit','Parent', parH.editfreq_beta_panel(iH-1,iW) ,'Units','normalized' ,'position',[editboxinlet_Wpos editboxinlet_Hpos editboxinlet_W editboxinlet_H],'String',num2str(nan)); + end +end +%% +%============================================================================== +% Make the button that updates stored list of freqs. +parH.subjIDtext=uicontrol('Style','edit','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0 0.1 0.09 0.2],'String',subjID); +parH.computepeakbutton = uicontrol('Style','pushbutton','Parent',parH.panel_fsave,'Units','normalized','Position',[0.1 0.1 0.1 0.2],'String','Compute','Callback',{@resetpeakfreqs}); +parH.freqrangebutton = uicontrol('Style','pushbutton','Parent',parH.panel_fsave,'Units','normalized','Position',[0.33 0.1 0.1 0.2],'String','Set Range','Callback',{@setallplotfreqrange}); +parH.editfreqrangeLow=uicontrol('Style','edit','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0.23 0.1 0.05 0.2],'String',num2str(Xlim_default(1))); +parH.editfreqrangeHigh=uicontrol('Style','edit','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0.28 0.1 0.05 0.2],'String',num2str(Xlim_default(2))); +parH.updatebutton = uicontrol('Style','pushbutton','Parent',parH.panel_fsave,'Units','normalized','Position',[0.45 0.1 0.1 0.2],'String','Update','Callback',{@getfromeditboxalphabetapeaks}); +parH.exitbutton = uicontrol('Style','pushbutton','Parent',parH.panel_fsave,'Units','normalized','Position',[0.9 0.1 0.1 0.2],'String','EXIT','Callback',{@exitaftersave2file}); + + +parH.textfreqFinalA=uicontrol('Style','text','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0.63 0.1 0.05 0.2],'String','final A:'); +parH.textfreqFinalB=uicontrol('Style','text','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0.73 0.1 0.05 0.2],'String','final B:'); + +parH.editfreqFinalA=uicontrol('Style','edit','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0.68 0.1 0.05 0.2],'String',' '); +parH.editfreqFinalB=uicontrol('Style','edit','Parent', parH.panel_fsave ,'Units','normalized' ,'position',[0.78 0.1 0.05 0.2],'String',' '); + + +avgspectracell=getavgspectra(); +plotavgspectra(avgspectracell); +curavgpeaksraw=computeallpeaks(avgspectracell); +plotavgrawpeaks(curavgpeaksraw); +[peakinfo_alpha,peakinfo_beta]=assignalphabetafromrawpeaks(avgspectracell,curavgpeaksraw); +plotalphabetapeaks(peakinfo_alpha,peakinfo_beta); +putineditboxalphabetapeaks(peakinfo_alpha,peakinfo_beta); + + +% Initialize the final alpha and beta values with the median values: +alphapeak=[]; +betapeak=[]; +alphapeak=nanmedian(peakinfo_alpha(3,:)); +betapeak=nanmedian(peakinfo_beta(3,:)); +set(parH.editfreqFinalA,'String',num2str(alphapeak)); +set(parH.editfreqFinalB,'String',num2str(betapeak)); + +disp('DONE'); + + +%% CREATE FREQ Edit boxes +%{ +parH. + +parH.freqband_edit_lower = uicontrol('Style','edit','Parent',parH.panel_ctrl_L,'Units','normalized','Position',[0.01 0.3 0.1 0.2],'String',num2str(freqRange(1))); +parH.freqband_edit_upper = uicontrol('Style','edit','Parent',parH.panel_ctrl_L,'Units','normalized','Position',[0.121 0.3 0.1 0.2],'String',num2str(freqRange(2))); +parH.button_freqband_set = uicontrol('Style','pushbutton','Parent',parH.panel_ctrl_L,'Units','normalized','Position',[0.23 0.3 0.2 0.2],'String','set band'); +parH.freqband_text_title = uicontrol('Style','text','Parent',parH.panel_ctrl_L,'Units','normalized','Position',[0.01 0.5 0.42 0.2],'String',['Current: ',num2str(freqRange(1)),' to ',num2str(freqRange(2)),' Hz']); +%====================================================================== +%} +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +%######################################################################################### +% END OF MAIN FUNCTION - START NESTED FUNCTIONS + + function[avgspectracell]=getavgspectra(hObject,~) + + avgspectracell=[]; + dumNanMat=nan(1,Nfreqs); + for iD1=1:2, + for iD2=1:7, + avgspectracell{iD1,iD2}=dumNanMat; + end + end + + + if hasMotort, + % Motort- Raw Post - Avg Motor and Front + iCase=2; jCase=1; + curspectra=curspectra_Motort; + indIn=find((curspectra(:,4)==2)&(ismember(curspectra(:,2),[1]))&(ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Motort- Raw Post - Occ + iCase=1; jCase=1; + curspectra=curspectra_Motort; + indIn=find((curspectra(:,4)==2)&(ismember(curspectra(:,2),[2]))&(ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Motort- Ratio - Avg Motor and Front + iCase=2; jCase=2; + curspectra=curspectra_Motort; + indIn=find((curspectra(:,4)==3)&(ismember(curspectra(:,2),[1]))&(ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Motort- Ratio - Occ + iCase=1; jCase=2; + curspectra=curspectra_Motort; + indIn=find((curspectra(:,4)==3)&(ismember(curspectra(:,2),[2]))&(ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + end + %============================================================== + if hasWrkmem + % Wrkmem- Raw Post - Avg Motor and Front + iCase=2; jCase=3; + curspectra=curspectra_Wrkmem; + indIn=find((curspectra(:,4)==2)&(ismember(curspectra(:,2),[2]))&(ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Wrkmem- Raw Post - Occ + iCase=1; jCase=3; + curspectra=curspectra_Wrkmem; + indIn=find((curspectra(:,4)==2)&(ismember(curspectra(:,2),[1]))&(ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Wrkmem- Ratio - Avg Motor and Front + iCase=2; jCase=4; + curspectra=curspectra_Wrkmem; + indIn=find((curspectra(:,4)==3)&(ismember(curspectra(:,2),[2]))&(ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Wrkmem- Ratio - Occ + iCase=1; jCase=4; + curspectra=curspectra_Wrkmem; + indIn=find((curspectra(:,4)==3)&(ismember(curspectra(:,2),[1]))&(ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + end + %============================================================== + if hasStoryM, + % StoryM- Raw Post - Avg Motor and Front + iCase=2; jCase=5; + curspectra=curspectra_StoryM; + indIn=find((curspectra(:,4)==2)&(ismember(curspectra(:,2),[1]))&(ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % StoryM- Raw Post - Occ + iCase=1; jCase=5; + curspectra=curspectra_StoryM; + indIn=find((curspectra(:,4)==2)&(ismember(curspectra(:,2),[2]))&(ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % StoryM- Ratio - Avg Motor and Front + iCase=2; jCase=6; + curspectra=curspectra_StoryM; + indIn=find((curspectra(:,4)==3)&(ismember(curspectra(:,2),[1]))&(ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % StoryM- Ratio - Occ + iCase=1; jCase=6; + curspectra=curspectra_StoryM; + indIn=find((curspectra(:,4)==3)&(ismember(curspectra(:,2),[2]))&(ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + end + %============================================================== + if hasRestin + % Restin- Raw Post - Avg Motor and Front + iCase=2; jCase=7; + curspectra=curspectra_Restin; + indIn=find((ismember(curspectra(:,3),[2 3 4]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + % Restin- Raw Post - Occ + iCase=1; jCase=7; + curspectra=curspectra_Restin; + indIn=find((ismember(curspectra(:,3),[1]))); avgspectracell{iCase,jCase}=mean(curspectra(indIn,5:end),1); + %------------------ + end + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + + + function[]=plotavgspectra(plotspectracell) + for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + axes(parH.subplotaxes(iH,iW)); + hold on; + plot(curfreqs,plotspectracell{iH,iW},'k'); + end + end + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + + + function[outavgpeaksraw]=computeallpeaks(inavgspectracell) + + outavgpeaksraw=[]; + allFreqs=curfreqs; + for iW=1:Nsubplots_W, + for iH=1:2, + + outavgpeaksraw{iH,iW}=[]; + + + tmpSpec=inavgspectracell{iH,iW}; + if ~isnan(tmpSpec(1)) + + if rem(iW,2)==1, + xlog=log(allFreqs([1:3 end-15:end])); + ylog=log(tmpSpec([1:3 end-15:end])); + linmodel=polyfit(xlog,ylog,1); + allx=allFreqs; + allxlog=log(allFreqs); + allylog=log(tmpSpec); + modylog=linmodel(2)+linmodel(1)*allxlog; + remy=exp(allylog-modylog); + + else + allx=allFreqs; + ally=-(tmpSpec-mean(tmpSpec));%./std(tmpSpec); + remy=ally; + end + + meandif=mean(abs(diff(remy))); + stddif=std(abs(diff(remy))); + thresdif=meandif; + [PKS,LOCS]= findpeaks(remy); + + signPeakLocs=[]; + countSign=1; + for iPeak=1:length(LOCS), + if (LOCS(iPeak)>4)&(LOCS(iPeak)thresdif, + signPeakLocs(countSign)=LOCS(iPeak); + countSign=countSign+1; + end + end; + end + outavgpeaksraw{iH,iW}=[signPeakLocs; curfreqs(signPeakLocs) ; tmpSpec(signPeakLocs) ]; + + + end + end + end + + disp('peaks computed...') + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function[]=plotavgrawpeaks(inavgpeaksraw) + + for iW=1:Nsubplots_W, + for iH=1:2, + axes(parH.subplotaxes(iH,iW)); + + hold on; + if ~isempty(inavgpeaksraw{iH,iW}) + curPeakIndx=inavgpeaksraw{iH,iW}(1,:); + curPeakFreq=inavgpeaksraw{iH,iW}(2,:); + curPeakVals=inavgpeaksraw{iH,iW}(3,:); + + NcurPeaks=length(curPeakVals); + if NcurPeaks>0 + + for iPeak=1:NcurPeaks, + plot(curPeakFreq(iPeak),curPeakVals(iPeak),'.b','markersize',5); + end + + end + end + end + end + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function[totalpeakinfo_alpha,totalpeakinfo_beta]=assignalphabetafromrawpeaks(inavgspectracell,inavgpeaksraw) + + totalpeakinfo_alpha=[]; + totalpeakinfo_beta=[]; + + for iW=1:Nsubplots_W, + + tmpPeakInfo_A=[nan(9,1) ;0]; + tmpPeakInfo_B=[nan(9,1) ;0]; + tmppeakinfo_alpha=[]; + tmppeakinfo_beta=[]; + curPeakIndx=[]; + curPeakFreq=[]; + curPeakVals=[]; + curPeakValsZ=[]; + NcurPeaks=[]; + + + + + for iH=1:2 + tmpSpec=inavgspectracell{iH,iW}; + tmpSpecMean=mean(tmpSpec); + tmpSpecStd=std(tmpSpec); + if isempty(inavgpeaksraw{iH,iW}), + tmppeakinfo_alpha=tmpPeakInfo_A; + tmppeakinfo_beta=tmpPeakInfo_B; + else + curPeakIndx=inavgpeaksraw{iH,iW}(1,:); + curPeakFreq=inavgpeaksraw{iH,iW}(2,:); + curPeakVals=inavgpeaksraw{iH,iW}(3,:); + + curPeakValsZ=(curPeakVals-tmpSpecMean)./tmpSpecStd; + if rem(iW,2)==0 + curPeakValsZ=-curPeakValsZ; + end + NcurPeaks=length(curPeakVals); + + %==================================================== + + %------------------------------------------------------- + indRin=find((curPeakFreq>=range_alpha(1))&(curPeakFreq<=range_alpha(2))); + Nrangepeaks=length(indRin); + if Nrangepeaks==1, + tmpPeakInfo_A(iH,1)=curPeakFreq(indRin); + tmpPeakInfo_A(iH+3,1)=curPeakVals(indRin); + tmpPeakInfo_A(iH+6,1)=curPeakValsZ(indRin); + elseif Nrangepeaks>1, + multiPfreq_a=curPeakFreq(indRin); + multiPvals_a=curPeakVals(indRin); + multiPvalsZ_a=curPeakValsZ(indRin); + [maxV,maxInd]=max(multiPvalsZ_a); + tmpPeakInfo_A(iH,1)=multiPfreq_a(maxInd); + tmpPeakInfo_A(iH+3,1)=multiPvals_a(maxInd); + tmpPeakInfo_A(iH+6,1)=multiPvalsZ_a(maxInd); + end + tmppeakinfo_alpha=tmpPeakInfo_A; + %------------------------------------------------------- + + indRin=find((curPeakFreq>=range_beta(1))&(curPeakFreq<=range_beta(2))); + Nrangepeaks=length(indRin); + if Nrangepeaks==1, + tmpPeakInfo_B(iH,1)=curPeakFreq(indRin); + tmpPeakInfo_B(iH+3,1)=curPeakVals(indRin); + tmpPeakInfo_B(iH+6,1)=curPeakValsZ(indRin); + elseif Nrangepeaks>1, + multiPfreq_a=curPeakFreq(indRin); + multiPvals_a=curPeakVals(indRin); + multiPvalsZ_a=curPeakValsZ(indRin); + [maxV,maxInd]=max(multiPvalsZ_a); + tmpPeakInfo_B(iH,1)=multiPfreq_a(maxInd); + tmpPeakInfo_B(iH+3,1)=multiPvals_a(maxInd); + tmpPeakInfo_B(iH+6,1)=multiPvalsZ_a(maxInd); + end + tmppeakinfo_beta=tmpPeakInfo_B; + end + end + %------------------------- + for iRangeCase=1:2 + if iRangeCase==1, + tmpPeakInfo=tmppeakinfo_alpha; + else + tmpPeakInfo=tmppeakinfo_beta; + end + % Get the freq for each Case + allpeakfreqs=tmpPeakInfo(1:2,1); + allpeakvals=tmpPeakInfo(4:5,1); + allpeakvalsZ=tmpPeakInfo(7:8,1); + [maxV,maxInd]=max(allpeakvalsZ); + tmpPeakInfo(3,1)=allpeakfreqs(maxInd); + tmpPeakInfo(6,1)=allpeakvals(maxInd); + tmpPeakInfo(9,1)=allpeakvalsZ(maxInd); + if iRangeCase==1, + tmppeakinfo_alpha=tmpPeakInfo; + else + tmppeakinfo_beta=tmpPeakInfo; + end + %------------------------- + + end + + %---------------------- + totalpeakinfo_alpha(:,iW)=tmppeakinfo_alpha; + totalpeakinfo_beta(:,iW)=tmppeakinfo_beta; + + end + + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function[]=plotalphabetapeaks(inpeakinfo_alpha,inpeakinfo_beta) + + for iW=1:Nsubplots_W, + curSelPeakFreq_A=inpeakinfo_alpha(3,iW); + curSelPeakFreq_B=inpeakinfo_beta(3,iW); + + %curSelPeakVal_A=inpeakinfo_alpha(4+4,iW); + %curSelPeakVal_B=inpeakinfo_beta(4+4,iW); + + parH.subplotselpeakpos{1,iW}=[curSelPeakFreq_A inpeakinfo_alpha(4,iW)]; + parH.subplotselpeakpos{2,iW}=[curSelPeakFreq_A inpeakinfo_alpha(5,iW)]; + + iH=1; + curPeakFreq_A=inpeakinfo_alpha(iH,iW); + curPeakVal_A=inpeakinfo_alpha(iH+3,iW); + curPeakFreq_B=inpeakinfo_beta(iH,iW); + curPeakVal_B=inpeakinfo_beta(iH+3,iW); + + axes(parH.subplotaxes(iH,iW));hold on; + plot(curPeakFreq_A,curPeakVal_A,'o','color',[205,92,92]./255,'markersize',10); + plot(curPeakFreq_B,curPeakVal_B,'o','color',[100,149,237]./255,'markersize',10); + set(parH.subplotselpeak(1,iW),'XData',curSelPeakFreq_A,'YData',parH.subplotselpeakpos{1,iW}(2)); + text(curPeakFreq_A,curPeakVal_A,num2str(curPeakFreq_A),'color',[0 0 0]./255,'Fontweight','Bold'); + text(curPeakFreq_B,curPeakVal_B,num2str(curPeakFreq_B),'color',[0 0 0]./255,'Fontweight','Bold'); + + + iH=2; + curPeakFreq_A=inpeakinfo_alpha(iH,iW); + curPeakVal_A=inpeakinfo_alpha(iH+3,iW); + curPeakFreq_B=inpeakinfo_beta(iH,iW); + curPeakVal_B=inpeakinfo_beta(iH+3,iW); + + axes(parH.subplotaxes(iH,iW));hold on; + plot(curPeakFreq_A,curPeakVal_A,'o','color',[205,92,92]./255,'markersize',10); + plot(curPeakFreq_B,curPeakVal_B,'o','color',[100,149,237]./255,'markersize',10); + set(parH.subplotselpeak(2,iW),'XData',curSelPeakFreq_A,'YData',parH.subplotselpeakpos{2,iW}(2)); + text(curPeakFreq_A,curPeakVal_A,num2str(curPeakFreq_A),'color',[0 0 0]./255,'Fontweight','Bold'); + text(curPeakFreq_B,curPeakVal_B,num2str(curPeakFreq_B),'color',[0 0 0]./255,'Fontweight','Bold'); + + end + + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function[]=putineditboxalphabetapeaks(inpeakinfo_alpha,inpeakinfo_beta) + + for iW=1:Nsubplots_W, + curSelPeakFreq_A=inpeakinfo_alpha(3,iW); + curSelPeakFreq_B=inpeakinfo_beta(3,iW); + set(parH.editfreq_alpha_inlet(1,iW),'String',num2str(curSelPeakFreq_A)); + set(parH.editfreq_beta_inlet(1,iW),'String',num2str(curSelPeakFreq_B)); + + end + + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function[]=getfromeditboxalphabetapeaks(hObject,~) + origButColor=get(parH.updatebutton,'Backgroundcolor'); + origButStr=get(parH.updatebutton,'String'); + for iW=1:Nsubplots_W, + + peakinfo_alpha(3,iW)=str2num(get(parH.editfreq_alpha_inlet(1,iW),'String')); + peakinfo_beta(3,iW)=str2num(get(parH.editfreq_beta_inlet(1,iW),'String')); + end + set(parH.updatebutton,'String','...getting in vars','BackgroundColor',[1 0 0]); + pause(1); + set(parH.updatebutton,'String',origButStr,'BackgroundColor',origButColor); + + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function getclickposonaxes(hObject,~) + [indH,indW]=find(ismember(parH.subplotaxes,hObject)); + %axIndx=find(ismember([[parH.panel_plot_L_Axes{:}] [parH.panel_plot_R_Axes{:}] [parH.panel_plot_A_Axes{:}] [parH.panel_plot_S_Axes{:}]],hObject)); + pos=get(hObject,'CurrentPoint'); + disp(['You clicked X:',num2str(pos(1,1)),', Y:',num2str(pos(1,2)), ': axes:', num2str(indH), '-', num2str(indW)]); + + parH.subplotXhairpos{indH,indW}=[round(pos(1,1)) pos(1,2)]; + set(parH.subplotXhair(indH,indW),'XData',round(pos(1,1)),'YData',pos(1,2)); + if indH==1 + acindH=2; + else + acindH=1; + end + set(parH.subplotXhair(acindH,indW),'XData',round(pos(1,1)),'YData',parH.subplotXhairpos{acindH,indW}(1,2)); + parH.subplotXhairpos{acindH,indW}(1)=round(pos(1,1)); + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function resetpeakfreqs(hObject,~) + for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + axes(parH.subplotaxes(iH,iW)); + hold off; + parH.subplotselpeakpos{iH,iW}=[0,0]; + parH.subplotXhairpos{iH,iW}=[0,0]; + parH.subplotselpeak(iH,iW)=plot(parH.subplotselpeakpos{iH,iW}(1),parH.subplotselpeakpos{iH,iW}(2),'m+','markersize',30); + hold on + parH.subplotXhair(iH,iW)=plot(parH.subplotXhairpos{iH,iW}(1),parH.subplotXhairpos{iH,iW}(2),'k+','markersize',20); + end + end + + avgspectracell=getavgspectra(); + plotavgspectra(avgspectracell); + curavgpeaksraw=computeallpeaks(avgspectracell); + plotavgrawpeaks(curavgpeaksraw); + [peakinfo_alpha,peakinfo_beta]=assignalphabetafromrawpeaks(avgspectracell,curavgpeaksraw); + plotalphabetapeaks(peakinfo_alpha,peakinfo_beta); + putineditboxalphabetapeaks(peakinfo_alpha,peakinfo_beta); + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function getA_fromXhair(hObject,~) + + [indH,indW]=find(ismember(parH.getbutton_A,hObject)); + + if indH==1, + multiindH=[1 2]; + else + multiindH=[2 1]; + end + for iSCase=1:2, + + manPeakFreq=parH.subplotXhairpos{multiindH(iSCase),indW}(1); + indManFreq=nearest(curfreqs,manPeakFreq); + + tmpSpec=[]; + tmpSpec(1,:)=avgspectracell{multiindH(iSCase),indW}; + + manPeakVal=tmpSpec(indManFreq); + manPeakValZ=(manPeakVal-mean(tmpSpec))./std(tmpSpec); + if rem(indW,2) + manPeakValZ=-manPeakValZ; + end + + + set(parH.subplotselpeak(multiindH(iSCase),indW),'XData',manPeakFreq,'YData',manPeakVal); + + + peakinfo_alpha(3,indW)=manPeakFreq; + peakinfo_alpha(6,indW)=manPeakVal; + peakinfo_alpha(9,indW)=manPeakValZ; + peakinfo_alpha(10,indW)=1; + end + %plotalphabetapeaks(peakinfo_alpha,peakinfo_beta); + putineditboxalphabetapeaks(peakinfo_alpha,peakinfo_beta); + end +%=============================================================================== +%=============================================================================== +%=============================================================================== + function getB_fromXhair(hObject,~) + + [indH,indW]=find(ismember(parH.getbutton_B,hObject)); + + if indH==1, + multiindH=[1 2]; + else + multiindH=[2 1]; + end + for iSCase=1:2, + + manPeakFreq=parH.subplotXhairpos{multiindH(iSCase),indW}(1); + indManFreq=nearest(curfreqs,manPeakFreq); + + tmpSpec=[]; + tmpSpec(1,:)=avgspectracell{multiindH(iSCase),indW}; + + manPeakVal=tmpSpec(indManFreq); + manPeakValZ=(manPeakVal-mean(tmpSpec))./std(tmpSpec); + if rem(indW,2) + manPeakValZ=-manPeakValZ; + end + + + %set(parH.subplotselpeak(multiindH(iSCase),indW),'XData',manPeakFreq,'YData',manPeakVal); + + + peakinfo_beta(3,indW)=manPeakFreq; + peakinfo_beta(6,indW)=manPeakVal; + peakinfo_beta(9,indW)=manPeakValZ; + peakinfo_beta(10,indW)=1; + end + %plotalphabetapeaks(peakinfo_alpha,peakinfo_beta); + putineditboxalphabetapeaks(peakinfo_alpha,peakinfo_beta); + end + +%=============================================================================== +%=============================================================================== +%=============================================================================== + function setallplotfreqrange(hObject,~) + tmpXlimLow=str2num(get(parH.editfreqrangeLow,'String')); + tmpXlimHigh=str2num(get(parH.editfreqrangeHigh,'String')); + + for iH=1:Nsubplots_H, + for iW=1:Nsubplots_W, + set(parH.subplotaxes(iH,iW),'Xlim',[tmpXlimLow tmpXlimHigh]); + end + end + + end + +%=============================================================================== +%=============================================================================== +%=============================================================================== + function[]=exitaftersave2file(hObject,~) + + alphapeak=str2num(get(parH.editfreqFinalA,'String')); + betapeak=str2num(get(parH.editfreqFinalB,'String')); + + save(outSaveFile,'alphapeak','betapeak','peakinfo_alpha', 'peakinfo_beta'); + + origButColor=get(parH.exitbutton,'Backgroundcolor'); + origButStr=get(parH.exitbutton,'String'); + + set(parH.exitbutton,'String','...saving in file','BackgroundColor',[1 0 0]); + pause(1); + set(parH.exitbutton,'String',origButStr,'BackgroundColor',origButColor); + pause(1); + close all; + + + end + +end + diff --git a/analysis_functions/hcp_check_pipelineoutput.m b/analysis_functions/hcp_check_pipelineoutput.m index c11cab9..78058dd 100644 --- a/analysis_functions/hcp_check_pipelineoutput.m +++ b/analysis_functions/hcp_check_pipelineoutput.m @@ -58,293 +58,303 @@ function hcp_check_pipelineoutput(pipeline, varargin) contrasts = ft_getopt(varargin, 'contrasts', ''); avgmode = ft_getopt(varargin, 'avgmode', ''); gridtype = ft_getopt(varargin, 'gridtype', ''); +savedir = ft_getopt(varargin, 'savedir', ''); sourcemodel_type = ft_getopt(varargin, 'sourcemodel', ''); switch pipeline - - case 'baddata' - assert_file('%s_%s_baddata_badchannels.txt', experiment, scan); - assert_file('%s_%s_baddata_badsegments.txt', experiment, scan); - assert_file('%s_%s_baddata_manual_badsegments.txt', experiment, scan); - assert_file('%s_%s_baddata_manual_badchannels.txt', experiment, scan); - assert_file('%s_%s_baddata_badchan_cor_scatter.png', experiment, scan); - assert_file('%s_%s_baddata_badchan_cor_topo3D.png', experiment, scan); - assert_file('%s_%s_baddata_badchan_cor_topo.png', experiment, scan); - assert_file('%s_%s_baddata_badchan_std_scatter.png', experiment, scan); - assert_file('%s_%s_baddata_badchan_std_topo.png', experiment, scan); - - tok=tokenize(scan,'-'); - scanmnem=tok{2}; - isTask=strcmp(scanmnem,'Wrkmem')|strcmp(scanmnem,'Motort')|strcmp(scanmnem,'StoryM'); - if isTask, - assert_file('%s_%s_baddata_rawtrialinfo_QC.txt', experiment, scan); - end - - case 'icaclass' - assert_file('%s_%s_icaclass.mat', experiment, scan); - assert_file('%s_%s_icaclass_1.png', experiment, scan); % there can be more figures, but at least one is expected - - %------------------------------------------------------- - % ---- Check if the data is from MOTOR TASK for which no ECG EOG channels - % are available and construct pseudo ECG EOG channels based on topology - % templates. As we do not use EEG anymore in Phase 2 , MOTOR task data - % should also have EO/CG channels and this part should not be necessary - oldMotorExperimentIds = { - 'CP10128_MEG_v1' % Glasgow scan - 'CP10129_MEG_v1' % Glasgow scan - 'CP10141_MEG_v1' % There are 2 scans with 2 difference EMG electrode locations. For each scan there are 3 blocks for each hand and foot with 12 trials in each block. So each condition has only 36 trials. - 'CP10138_MEG' % There are 6 different scan with variable ISI and time jittering in some. For each scan there are 3 blocks for each hand and foot with beween 8 to 12 trials in each block. So each condition has only 24 to 36 trials. - 'CP10167_MEG' % 1 scan with the latest protocol. 8 blocks per hand and foot with 10 trials each. 1200 msec ISI. However there is no MRI - 'CP10113_MEG_v2' % There are 2 different scans. NOt clear what the difference is between the two. There are 8 blocks for each hand and foot, with 10 trials per block. Unfortunately EMG signal is bad for both Hands and trials cannot be extracted based on the EMG signal - }; - - isMotorTask = ~isempty(regexp(scan,'Motor', 'once')); - isScanWithOldMotor = ismember(experiment, oldMotorExperimentIds); - if isMotorTask && isScanWithOldMotor - assert_file('%s_%s_icaclass_virtchanVEOG.png', experiment, scan); % there can be more figures, but at least one is expected - assert_file('%s_%s_icaclass_virtchanECG.png', experiment, scan); % there can be more figures, but at least one is expected - end - %------------------------------------------------------- - - case 'icaqc' - error('the "icaqc" pipeline has been deprecated, please use the "baddata" pipeline instead'); - - case 'rmegpreproc' - assert_file('%s_%s_rmegpreproc.mat', experiment, scan); - - case 'tmegpreproc' - %---------------- - tmpscan = scan; - isInCell = iscell(tmpscan); - if isInCell, - Nfiles = length(tmpscan); - else - Nfiles = 1; - tmpscan = {tmpscan}; - end - for iScan = 1:Nfiles, - assert_file('%s_%s_tmegpreproc_trialinfo.mat', experiment, tmpscan{iScan}); - end - %---------------- - if ~isempty(datagroup) - tmpgroup = datagroup; - isInCell = iscell(tmpgroup); - if isInCell, - Ngroups = length(tmpgroup); - else - Ngroups = 1; - tmpgroup = {tmpgroup}; - end - %---------------- - for iFile = 1:Nfiles - for iGroup = 1:Ngroups - assert_file('%s_%s_tmegpreproc_%s.mat', experiment, tmpscan{iFile}, tmpgroup{iGroup}); + case 'baddata' + assert_file('%s_%s_baddata_badchannels.txt', experiment, scan); + assert_file('%s_%s_baddata_badsegments.txt', experiment, scan); + assert_file('%s_%s_baddata_manual_badsegments.txt', experiment, scan); + assert_file('%s_%s_baddata_manual_badchannels.txt', experiment, scan); + + assert_file('%s_%s_baddata_badchan_cor_scatter.png', experiment, scan); + assert_file('%s_%s_baddata_badchan_cor_topo3D.png', experiment, scan); + assert_file('%s_%s_baddata_badchan_cor_topo.png', experiment, scan); + assert_file('%s_%s_baddata_badchan_std_scatter.png', experiment, scan); + assert_file('%s_%s_baddata_badchan_std_topo.png', experiment, scan); + + tok=tokenize(scan,'-'); + scanmnem=tok{2}; + isTask=strcmp(scanmnem,'Wrkmem')|strcmp(scanmnem,'Motort')|strcmp(scanmnem,'StoryM'); + if isTask, + assert_file('%s_%s_baddata_rawtrialinfo_QC.txt', experiment, scan); end - end - else - disp('No datagroup names provided - Checking only for trialinfo information'); - end - %---------------- - - case 'eravg' - %---------------- - tmpscan = scan; - isInCell = iscell(tmpscan); - if isInCell, - Nfiles = length(tmpscan); - else - Nfiles = 1; - tmpscan = {tmpscan}; - end - - %---------------- - tmpcontr = contrasts; - isInCell = iscell(tmpcontr); - if isInCell, - Ncontr = length(tmpcontr); - else - Ncontr = 1; - tmpcontr = {tmpcontr}; - end - %---------------- - tmpavgmode = avgmode; - isInCell = iscell(tmpavgmode); - if isInCell, - Navgmodes = length(tmpavgmode); - else - Navgmodes = 1; - tmpavgmode = {tmpavgmode}; - end - %---------------- - for iFile = 1:Nfiles - for iCntr = 1:Ncontr - for iAvgMode = 1:Navgmodes - if strcmp(tmpavgmode{iAvgMode},'mag') - assert_file('%s_%s_%s_[MODE-mag].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); - elseif strcmp(tmpavgmode{iAvgMode},'planar') - assert_file('%s_%s_%s_[MODE-planar].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); - end + + case 'icaclass' + assert_file('%s_%s_icaclass.mat', experiment, scan); + assert_file('%s_%s_icaclass_1.png', experiment, scan); % there can be more figures, but at least one is expected + + %------------------------------------------------------- + % ---- Check if the data is from MOTOR TASK for which no ECG EOG channels + % are available and construct pseudo ECG EOG channels based on topology + % templates. As we do not use EEG anymore in Phase 2 , MOTOR task data + % should also have EO/CG channels and this part should not be necessary + oldMotorExperimentIds = { + 'CP10128_MEG_v1' % Glasgow scan + 'CP10129_MEG_v1' % Glasgow scan + 'CP10141_MEG_v1' % There are 2 scans with 2 difference EMG electrode locations. For each scan there are 3 blocks for each hand and foot with 12 trials in each block. So each condition has only 36 trials. + 'CP10138_MEG' % There are 6 different scan with variable ISI and time jittering in some. For each scan there are 3 blocks for each hand and foot with beween 8 to 12 trials in each block. So each condition has only 24 to 36 trials. + 'CP10167_MEG' % 1 scan with the latest protocol. 8 blocks per hand and foot with 10 trials each. 1200 msec ISI. However there is no MRI + 'CP10113_MEG_v2' % There are 2 different scans. NOt clear what the difference is between the two. There are 8 blocks for each hand and foot, with 10 trials per block. Unfortunately EMG signal is bad for both Hands and trials cannot be extracted based on the EMG signal + }; + + isMotorTask = ~isempty(regexp(scan,'Motor', 'once')); + isScanWithOldMotor = ismember(experiment, oldMotorExperimentIds); + if isMotorTask && isScanWithOldMotor + assert_file('%s_%s_icaclass_virtchanVEOG.png', experiment, scan); % there can be more figures, but at least one is expected + assert_file('%s_%s_icaclass_virtchanECG.png', experiment, scan); % there can be more figures, but at least one is expected end - end - end - - case 'tfavg' - %---------------- - tmpscan = scan; - isInCell = iscell(tmpscan); - if isInCell, - Nfiles = length(tmpscan); - else - Nfiles = 1; - tmpscan = {tmpscan}; - end - %---------------- - tmpcontr = contrasts; - isInCell = iscell(tmpcontr); - if isInCell, - Ncontr = length(tmpcontr); - else - Ncontr = 1; - tmpcontr = {tmpcontr}; - end - %---------------- - tmpavgmode = avgmode; - isInCell = iscell(tmpavgmode); - if isInCell, - Navgmodes = length(tmpavgmode); - else - Navgmodes = 1; - tmpavgmode = {tmpavgmode}; - end - %---------------- - for iFile = 1:Nfiles - for iCntr = 1:Ncontr - for iAvgMode = 1:Navgmodes - if strcmp(tmpavgmode{iAvgMode},'mag') - assert_file('%s_%s_%s_[MODE-mag].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); - elseif strcmp(tmpavgmode{iAvgMode},'planar') - assert_file('%s_%s_%s_[MODE-planar].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); - end + %------------------------------------------------------- + + case 'icaclass_qc' + assert_file('%s_%s_icaclass_vs.mat', experiment, scan); + assert_file('%s_%s_icaclass_vs.txt', experiment, scan); + assert_file('%s_%s_icaclass_vs_1.png', experiment, scan); % there can be more figures, but at least one is expected + + case 'icaqc' + error('the "icaqc" pipeline has been deprecated, please use the "baddata" pipeline instead'); + + case 'rmegpreproc' + assert_file('%s_%s_rmegpreproc.mat', experiment, scan); + + case 'tmegpreproc' + %---------------- + tmpscan = scan; + isInCell = iscell(tmpscan); + if isInCell, + Nfiles = length(tmpscan); + else + Nfiles = 1; + tmpscan = {tmpscan}; end - end - end - - case 'tfsens' - %---------------- - tmpscan = scan; - isInCell = iscell(tmpscan); - if isInCell, - Nfiles = length(tmpscan); - else - Nfiles = 1; - tmpscan = {tmpscan}; - end - %---------------- - tmpgroup = datagroup; - isInCell = iscell(tmpgroup); - if isInCell, - Ngroups = length(tmpgroup); - else - Ngroups = 1; - tmpgroup = {tmpgroup}; - end - %---------------- - tmpband = band; - isInCell = iscell(tmpband); - if isInCell, - Nbands = length(tmpband); - else - Nbands = 1; - tmpband = {tmpband}; - end - %---------------- - for iFile = 1:Nfiles - for iGroup = 1:Ngroups - for iBand = 1:Nbands - assert_file('%s_%s_tfsens_%s_%s.mat', experiment, tmpscan{iFile}, tmpgroup{iGroup}, tmpband{iBand}); + for iScan = 1:Nfiles, + assert_file('%s_%s_tmegpreproc_trialinfo.mat', experiment, tmpscan{iScan}); end - end - end - - case 'srcavglcmv' - %---------------- - tmpscan = scan; - isInCell = iscell(tmpscan); - if isInCell, - Nfiles = length(tmpscan); - else - Nfiles = 1; - tmpscan = {tmpscan}; - end - %---------------- - tmpcontr = contrasts; - isInCell = iscell(tmpcontr); - if isInCell, - Ncontr = length(tmpcontr); - else - Ncontr = 1; - tmpcontr = {tmpcontr}; - end - %---------------- - for iFile = 1:Nfiles - for iCntr = 1:Ncontr - assert_file('%s_%s_%s_%s.mat', experiment, tmpscan{iFile}, tmpcontr{iCntr},gridtype); - end - end - - case 'anatomy' - assert_file('%s_MEG_anatomy_anatomical.nii', subject); - assert_file('%s_MEG_anatomy_fiducials.txt', subject); - assert_file('%s_MEG_anatomy_landmarks.txt', subject); - assert_file('%s_MEG_anatomy_transform.txt', subject); - assert_file('%s_MEG_anatomy_sourcemodel_2d.mat', subject); - assert_file('%s_MEG_anatomy_sourcemodel_3d4mm.mat', subject); - assert_file('%s_MEG_anatomy_sourcemodel_3d6mm.mat', subject); - assert_file('%s_MEG_anatomy_sourcemodel_3d8mm.mat', subject); - assert_file('%s_MEG_anatomy_headshape.mat', subject); - assert_file('%s_MEG_anatomy_headshapemri.mat', subject); - assert_file('%s_MEG_anatomy_headmodel.mat', subject); - assert_file('%s_MEG_anatomy_headmodel.png', subject); - assert_file('%s_MEG_anatomy_sourcemodel_2d.png', subject); - assert_file('%s_MEG_anatomy_sourcemodel_3d4mm.png', subject); - assert_file('%s_MEG_anatomy_slice1.png', subject); - assert_file('%s_MEG_anatomy_slice2.png', subject); - assert_file('%s_MEG_anatomy_slice3.png', subject); - assert_file('%s_MEG_anatomy_headshape.png', subject); - - case 'datacheck' - assert_file('%s_%s_datacheck_info.txt', experiment, scan); - % assert_file('%s_%s_datacheck_headshape.png', experiment, scan); % this one does not exist for empty room recordings - assert_file('%s_%s_datacheck_jumps.png', experiment, scan); - assert_file('%s_%s_datacheck_MEG_lowfreq_power.png', experiment, scan); - assert_file('%s_%s_datacheck_MEG_powerline_noise.png',experiment, scan); - assert_file('%s_%s_datacheck_MEG_powspctrm.png', experiment, scan); - % assert_file('%s_%s_datacheck_EEG_powspctrm.png', experiment, scan); % not relevant any more in the Phase 2 protocol - assert_file('%s_%s_datacheck_MEGREF_powspctrm.png', experiment, scan); - assert_file('%s_%s_datacheck_neighb_correlation.png', experiment, scan); - - case 'icamne' - assert_file('%s_%s_icamne_%s.mat', experiment, scan, sourcemodel_type); - assert_file('%s_%s_icamne_%s_1.png', experiment, scan, sourcemodel_type);% there can be more figures, but at least one is expected - - case 'icaimagcoh' - assert_file('%s_%s_icaimagcoh_%sHz.mat', experiment, scan, freq); - - case 'icapowenv' - assert_file('%s_%s_blp_%s_%s.mat', experiment, scan, sourcemodel_type, band); - - case 'icamcw' - assert_file('%s_%s_mcw_%s_%s_%s.mat', experiment, scan, sourcemodel_type, net_seed, band); - - case 'powavg' - assert_file('%s_%s_powavg.mat', experiment, scan); - assert_file('%s_%s_powavg_multiplot.png', experiment, scan); - assert_file('%s_%s_powavg_singleplot.png', experiment, scan); - - otherwise - error('unknown pipeline "%s"', pipeline); - + %---------------- + if ~isempty(datagroup) + tmpgroup = datagroup; + isInCell = iscell(tmpgroup); + if isInCell, + Ngroups = length(tmpgroup); + else + Ngroups = 1; + tmpgroup = {tmpgroup}; + end + %---------------- + for iFile = 1:Nfiles + for iGroup = 1:Ngroups + assert_file('%s_%s_tmegpreproc_%s.mat', experiment, tmpscan{iFile}, tmpgroup{iGroup}); + end + end + else + disp('No datagroup names provided - Checking only for trialinfo information'); + end + %---------------- + + case 'eravg' + %---------------- + tmpscan = scan; + isInCell = iscell(tmpscan); + if isInCell, + Nfiles = length(tmpscan); + else + Nfiles = 1; + tmpscan = {tmpscan}; + end + + %---------------- + tmpcontr = contrasts; + isInCell = iscell(tmpcontr); + if isInCell, + Ncontr = length(tmpcontr); + else + Ncontr = 1; + tmpcontr = {tmpcontr}; + end + %---------------- + tmpavgmode = avgmode; + isInCell = iscell(tmpavgmode); + if isInCell, + Navgmodes = length(tmpavgmode); + else + Navgmodes = 1; + tmpavgmode = {tmpavgmode}; + end + %---------------- + for iFile = 1:Nfiles + for iCntr = 1:Ncontr + for iAvgMode = 1:Navgmodes + if strcmp(tmpavgmode{iAvgMode},'mag') + assert_file('%s_%s_%s_[MODE-mag].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); + elseif strcmp(tmpavgmode{iAvgMode},'planar') + assert_file('%s_%s_%s_[MODE-planar].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); + end + end + end + end + + case 'tfavg' + %---------------- + tmpscan = scan; + isInCell = iscell(tmpscan); + if isInCell, + Nfiles = length(tmpscan); + else + Nfiles = 1; + tmpscan = {tmpscan}; + end + %---------------- + tmpcontr = contrasts; + isInCell = iscell(tmpcontr); + if isInCell, + Ncontr = length(tmpcontr); + else + Ncontr = 1; + tmpcontr = {tmpcontr}; + end + %---------------- + tmpavgmode = avgmode; + isInCell = iscell(tmpavgmode); + if isInCell, + Navgmodes = length(tmpavgmode); + else + Navgmodes = 1; + tmpavgmode = {tmpavgmode}; + end + %---------------- + for iFile = 1:Nfiles + for iCntr = 1:Ncontr + for iAvgMode = 1:Navgmodes + if strcmp(tmpavgmode{iAvgMode},'mag') + assert_file('%s_%s_%s_[MODE-mag].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); + elseif strcmp(tmpavgmode{iAvgMode},'planar') + assert_file('%s_%s_%s_[MODE-planar].mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); + end + end + end + end + + case 'tfsens' + %---------------- + tmpscan = scan; + isInCell = iscell(tmpscan); + if isInCell, + Nfiles = length(tmpscan); + else + Nfiles = 1; + tmpscan = {tmpscan}; + end + %---------------- + tmpgroup = datagroup; + isInCell = iscell(tmpgroup); + if isInCell, + Ngroups = length(tmpgroup); + else + Ngroups = 1; + tmpgroup = {tmpgroup}; + end + %---------------- + tmpband = band; + isInCell = iscell(tmpband); + if isInCell, + Nbands = length(tmpband); + else + Nbands = 1; + tmpband = {tmpband}; + end + %---------------- + for iFile = 1:Nfiles + for iGroup = 1:Ngroups + for iBand = 1:Nbands + assert_file('%s_%s_tfsens_%s_%s.mat', experiment, tmpscan{iFile}, tmpgroup{iGroup}, tmpband{iBand}); + end + end + end + + case 'srcavglcmv' + %---------------- + tmpscan = scan; + isInCell = iscell(tmpscan); + if isInCell, + Nfiles = length(tmpscan); + else + Nfiles = 1; + tmpscan = {tmpscan}; + end + %---------------- + tmpcontr = contrasts; + isInCell = iscell(tmpcontr); + if isInCell, + Ncontr = length(tmpcontr); + else + Ncontr = 1; + tmpcontr = {tmpcontr}; + end + %---------------- + if ~isempty(savedir) + experiment=[savedir,experiment]; + end + %---------------- + for iFile = 1:Nfiles + for iCntr = 1:Ncontr + assert_file('%s_%s_%s.mat', experiment, tmpscan{iFile}, tmpcontr{iCntr}); + end + end + + case 'anatomy' + assert_file('%s_MEG_anatomy_anatomical.nii', subject); + assert_file('%s_MEG_anatomy_fiducials.txt', subject); + assert_file('%s_MEG_anatomy_landmarks.txt', subject); + assert_file('%s_MEG_anatomy_transform.txt', subject); + assert_file('%s_MEG_anatomy_sourcemodel_2d.mat', subject); + assert_file('%s_MEG_anatomy_sourcemodel_3d4mm.mat', subject); + assert_file('%s_MEG_anatomy_sourcemodel_3d6mm.mat', subject); + assert_file('%s_MEG_anatomy_sourcemodel_3d8mm.mat', subject); + assert_file('%s_MEG_anatomy_headshape.mat', subject); + assert_file('%s_MEG_anatomy_headshapemri.mat', subject); + assert_file('%s_MEG_anatomy_headmodel.mat', subject); + assert_file('%s_MEG_anatomy_headmodel.png', subject); + assert_file('%s_MEG_anatomy_sourcemodel_2d.png', subject); + assert_file('%s_MEG_anatomy_sourcemodel_3d4mm.png', subject); + assert_file('%s_MEG_anatomy_slice1.png', subject); + assert_file('%s_MEG_anatomy_slice2.png', subject); + assert_file('%s_MEG_anatomy_slice3.png', subject); + assert_file('%s_MEG_anatomy_headshape.png', subject); + + case 'datacheck' + assert_file('%s_%s_datacheck_info.txt', experiment, scan); + % assert_file('%s_%s_datacheck_headshape.png', experiment, scan); % this one does not exist for empty room recordings + assert_file('%s_%s_datacheck_jumps.png', experiment, scan); + assert_file('%s_%s_datacheck_MEG_lowfreq_power.png', experiment, scan); + assert_file('%s_%s_datacheck_MEG_powerline_noise.png',experiment, scan); + assert_file('%s_%s_datacheck_MEG_powspctrm.png', experiment, scan); + % assert_file('%s_%s_datacheck_EEG_powspctrm.png', experiment, scan); % not relevant any more in the Phase 2 protocol + assert_file('%s_%s_datacheck_MEGREF_powspctrm.png', experiment, scan); + assert_file('%s_%s_datacheck_neighb_correlation.png', experiment, scan); + + case 'icamne' + assert_file('%s_%s_icamne.mat', experiment, scan); + assert_file('%s_%s_icamne_1.png', experiment, scan);% there can be more figures, but at least one is expected + + case 'icaimagcoh' + assert_file('%s_%s_icaimagcoh_%s.mat', experiment, scan, band); + + case 'icablpenv' + assert_file('%s_%s_icablpenv_%s.mat', experiment, scan, band); + + case 'icamcw' + assert_file('%s_%s_mcw_%s_%s_%s.mat', experiment, scan, sourcemodel_type, net_seed, band); + + case 'powavg' + assert_file('%s_%s_powavg.mat', experiment, scan); + assert_file('%s_%s_powavg_multiplot.png', experiment, scan); + assert_file('%s_%s_powavg_singleplot.png', experiment, scan); + + otherwise + error('unknown pipeline "%s"', pipeline); + end % switch pipeline %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -354,7 +364,7 @@ function assert_file(varargin) % the following will check for the file being present anywhere on the path filename = sprintf(varargin{:}); if ~exist(filename, 'file') - error('the file "%s" does not exist', filename); + error('the file "%s" does not exist', filename); else - fprintf('found "%s"\n', filename); + fprintf('found "%s"\n', filename); end diff --git a/analysis_functions/hcp_extract_allfromrun.m b/analysis_functions/hcp_extract_allfromrun.m index c2a3456..801b100 100644 --- a/analysis_functions/hcp_extract_allfromrun.m +++ b/analysis_functions/hcp_extract_allfromrun.m @@ -1,13 +1,13 @@ function [cleanTrl] = hcp_extract_allfromrun(inCfg) %% This function performs the core processing of the tmegpreproc and rmegpreproc pipelines. % It extracts trial data for a give data group and fuses them with the -% results from hcp_baddata.m pipeline so that bad channels and trials that -% coincide with noisy periods are removed. In the case that a trial spans -% a long block of data, in order to avoid removing it entirely, the bad -% segments in the trials are replaced with nan. (This is the case for the Story/Math data groups BSENT and BUN). -% Then the IC components identified as related to heart or eye activity by hcp_icaclass.m pipeline are removed. -% Then the data is resampled to one fourth of the original sampling frequency in order to reduce the size of the -% dataset. +% results from hcp_baddata.m pipeline so that bad channels and trials that +% coincide with noisy periods are removed. In the case that a trial spans +% a long block of data, in order to avoid removing it entirely, the bad +% segments in the trials are replaced with nan. (This is the case for the Story/Math data groups BSENT and BUN). +% Then the IC components identified as related to heart or eye activity by hcp_icaclass.m pipeline are removed. +% Then the data is resampled to one fourth of the original sampling frequency in order to reduce the size of the +% dataset. % % % INPUT: @@ -17,8 +17,8 @@ % Fields: % .datafile: This is the raw data filename for a given scan. % .trl: This is the trials definition matrix. It has 3 columns and number of rows equal to number of trials. The -% first column is the start sample, the second is the end sample and time offset of the start of the trial -% relative to the 0 reference point. This information is created by the trial definition functions. +% first column is the start sample, the second is the end sample and time offset of the start of the trial +% relative to the 0 reference point. This information is created by the trial definition functions. % .badchanfile: This is the file containing information about bad channels. This information is created by % hcp_baddata.m pipeline. % .badsegmfile: This is the file containing information about bad segments. This information is created by @@ -30,9 +30,9 @@ % for replacing with NANs. This field is set in the alltrialdefparams_*.m scripts. % % .montage: This is the montage containing the emg channels. This -% variable is constructed by the hcp_exgmontage.m function. -% In .labelnew subfield , the expected emg channels names are expected to be -% {'EMG_LH','EMG_LF','EMG_RH','EMG_RF'} +% variable is constructed by the hcp_exgmontage.m function. +% In .labelnew subfield , the expected emg channels names are expected to be +% {'EMG_LH','EMG_LF','EMG_RH','EMG_RF'} % .lineFreq: Numerical array that contain the frequencies % of line current to be filtered out i.e. [60 120]. % .outputfile: The filename of the data file where the cleaned data will be saved. @@ -40,10 +40,10 @@ % % OUTPUT %----------------------------------------------------------- -% cleanTrl : % This is a numerical matrix similar to the input inCfg.trl trials definition matrix described above. -% It has 3 columns and number of rows equal to number of CLEAN trials that remained after the cleaning performed. -% The first column is the start sample, the second is the end sample and time offset of the start of the trial -% relative to the 0 reference point. +% cleanTrl : % This is a numerical matrix similar to the input inCfg.trl trials definition matrix described above. +% It has 3 columns and number of rows equal to number of CLEAN trials that remained after the cleaning performed. +% The first column is the start sample, the second is the end sample and time offset of the start of the trial +% relative to the 0 reference point. %------------------------------------------------------------- % Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) @@ -168,9 +168,9 @@ cfg.artfctdef.all.artifact = badSegments; origDataNEURO = dataNEURO; % rmfield(dataNEURO, 'trial'); - if hasELEC - origDataELEC = dataRawELEC; % rmfield(dataRawELEC, 'trial'); - end +% if hasELEC +% origDataELEC = dataRawELEC; % rmfield(dataRawELEC, 'trial'); +% end end @@ -222,6 +222,7 @@ end % if hasELEC end +clear dataRawELEC dataNEURO; % ======================================= cfg = []; cfg.demean = 'yes'; @@ -231,11 +232,11 @@ end if strcmp(badsegmode, 'repnan') origDataNEURO = ft_preprocessing(cfg, origDataNEURO); - if hasELEC - origDataELEC = ft_preprocessing(cfg, origDataELEC); - end +% if hasELEC +% origDataELEC = ft_preprocessing(cfg, origDataELEC); +% end end - +%clear origDataELEC; % =================================================== % -- Denoise with Reference Sensors -- cfg = []; @@ -254,13 +255,13 @@ dataCleanELEC1 = ft_preprocessing(cfg, dataCleanELEC1); end end -dataCleanNEURO2 = denDataNEURO; +dataCleanNEURO2 = denDataNEURO; clear denDataNEURO; if hasELEC - dataCleanELEC2 = dataCleanELEC1; + dataCleanELEC2 = dataCleanELEC1; clear dataCleanELEC1; end % ======================================= -denDataNEURO = dataCleanNEURO2; +%denDataNEURO = dataCleanNEURO2; % ======================================= % --- identify trials that have high std @@ -280,7 +281,7 @@ denDataNEURO = ft_preprocessing(cfg, dataCleanNEURO2); clear dataCleanNEURO2 dataCleanELEC2 = ft_preprocessing(cfg, dataCleanELEC2); else - denDataNEURO = dataCleanNEURO2; clear dataCleanNEURO2 + denDataNEURO = dataCleanNEURO2; clear dataCleanNEURO2; end % ====================================== @@ -297,20 +298,47 @@ dataNEURO = denDataNEURO; clear denDataNEURO; end % ========================================== +% Do resampling +% -- Resample to 500 Hz +rscfg = []; +rscfg.detrend = 'no'; +rscfg.resamplefs = newFs; +dataNEUROres = ft_resampledata(rscfg, dataNEURO); %clear dataNEURO; % clear data; +if hasELEC + dataCleanELEC2res = ft_resampledata(rscfg, dataCleanELEC2); clear dataCleanELEC2;% clear data; +end + if strcmp(badsegmode, 'repnan') - [dataNEURO, trlNanFlag] = replaceorigwithnans(origDataNEURO, dataNEURO); clear origDataNEURO; + + onechdatorig=ft_selectdata(origDataNEURO,'channel',1); + onechdatorigres = ft_resampledata(rscfg, onechdatorig); clear onechdatorig; + + resOrigStartSamps=round(origDataNEURO.sampleinfo(:,1)./4); + resOrigSampsPerTrl=cellfun(@(x) length(x),onechdatorigres.time); + resStartSamps=round(dataNEURO.sampleinfo(:,1)./4); + resSampsPerTrl=cellfun(@(x) length(x),dataNEUROres.time); + + onechdatorigres.sampleinfo=[resOrigStartSamps resOrigStartSamps+resOrigSampsPerTrl'-1]; + dataNEUROres.sampleinfo=[resStartSamps resStartSamps+resSampsPerTrl'-1]; + + [dataNEUROres, trlNanFlag] = replaceorigwithnans(onechdatorigres, dataNEUROres); if hasELEC - dataCleanELEC2 = replaceorigwithnans(origDataELEC, dataCleanELEC2); clear origDataELEC; + dataCleanELEC2res.sampleinfo=[resStartSamps resStartSamps+resSampsPerTrl'-1]; + dataCleanELEC2res = replaceorigwithnans(onechdatorigres, dataCleanELEC2res); clear dataCleanELEC2res; end + clear onechdatorigres; + end + +clear dataNEURO origDataNEURO; % clear data; % ======================================= % -- Append ELEC and MEG/EEG if hasELEC - data = ft_appenddata([], dataNEURO, dataCleanELEC2); - clear dataCleanELEC2; + data = ft_appenddata([], dataNEUROres, dataCleanELEC2res); + clear dataCleanELEC2res; else - data = dataNEURO; + data = dataNEUROres; end; % ======================================= if strcmp(badsegmode, 'repnan') @@ -320,17 +348,8 @@ end data.trialinfo = [data.trialinfo addTrlColmn]; % ======================================= -data.grad = dataNEURO.grad; -clear dataNEURO; - - -% ===================== -% -- Resample to 500 Hz -data.fsample = origFs; -rscfg = []; -rscfg.detrend = 'no'; -rscfg.resamplefs = newFs; -data = ft_resampledata(rscfg, data); % clear data; +data.grad = dataNEUROres.grad; +clear dataNEUROres; % ========================= cleanTrl = data.trialinfo; diff --git a/analysis_functions/hcp_ica_blp.m b/analysis_functions/hcp_ica_blp.m index 6d9ce8c..9e11f52 100644 --- a/analysis_functions/hcp_ica_blp.m +++ b/analysis_functions/hcp_ica_blp.m @@ -23,20 +23,25 @@ subject = ft_getopt(options_blp, 'dataprefix'); band_prefix = ft_getopt(options_blp, 'band_prefix'); +dofiltcheck = ft_getopt(options_blp, 'dofiltcheck', 'no'); +blp_band = ft_getopt(options_blp, 'blp_band', [6.3 16.5]); -blp_band = ft_getopt(options_blp, 'blp_band', [6 15]); -if strcmp(band_prefix,'beta') - N_hp=8; N_lp=10 ; +if strcmp(band_prefix,'betalow') + N_hp=9; N_lp=10 ; +elseif strcmp(band_prefix,'betahigh') + N_hp=9; N_lp=12 ; elseif strcmp(band_prefix,'alpha') N_hp=7; N_lp=8 ; elseif strcmp(band_prefix,'theta') - N_hp=7; N_lp=7 ; + N_hp=6; N_lp=7 ; elseif strcmp(band_prefix,'delta') - N_hp=6; N_lp=6 ; -elseif strcmp(band_prefix,'lowgamma') - N_hp=10; N_lp=14 ; -elseif strcmp(band_prefix,'highgamma') - N_hp=12; N_lp=14 ; + N_hp=6; N_lp=7 ; +elseif strcmp(band_prefix,'gammalow') + N_hp=9; N_lp=13 ; +elseif strcmp(band_prefix,'gammamid') + N_hp=11; N_lp=14 ; +elseif strcmp(band_prefix,'gammahigh') + N_hp=13; N_lp=14 ; end step = ft_getopt(options_blp, 'blp_step', 20); @@ -46,14 +51,16 @@ disp(['blp band -> ' band_str ' Hz']) disp(['power calculation step -> ' num2str(step) ' ms']) disp(['power calculation window -> ' num2str(window) ' ms']) -% brainic_indx=comp.class.brain_ic; -if(~isfield(comp.class,'brain_ic_vs')) comp.class.brain_ic_vs=comp.class.brain_ic; end + +if(~isfield(comp.class,'brain_ic_vs')) + comp.class.brain_ic_vs=comp.class.brain_ic; +end brainic_indx=comp.class.brain_ic_vs; nsource = numel(source.inside); -% Reading from file and filtering +% filtering if(strcmp(band_prefix,'delta')) cfgin = []; @@ -61,12 +68,6 @@ cfgin.lpfreq = blp_band(1,2); cfgin.lpfiltord=N_lp; comp_blp = ft_preprocessing(cfgin,comp); -elseif(strcmp(band_prefix,'highgamma')) - cfgin = []; - cfgin.hpfilter = 'yes'; - cfgin.hpfreq = blp_band(1,1); - cfgin.hpfiltord=N_hp; - comp_blp = ft_preprocessing(cfgin,comp); elseif(strcmp(band_prefix,'whole')) comp_blp=comp; else @@ -84,30 +85,30 @@ end clear junk -% % % % % compappo=comp; -% % % % % compappo.trial=comp_blp.trial; -% % % % % options = {'doplot', 'no', 'grad', comp.grad, 'plottype', 'components'}; % perform frequency analysis -% % % % % disp('STARTING ft_ICA_freq'); -% % % % % comp_freq = hcp_ICA_freq(compappo, options); -% % % % % disp('DONE ft_ICA_freq'); -% % % % % -% % % % % options = {'doplot', 'no', 'grad', comp.grad, 'plottype', 'components'}; % perform frequency analysis -% % % % % disp('STARTING ft_ICA_freq'); -% % % % % comp_freq2 = hcp_ICA_freq(comp, options); -% % % % % disp('DONE ft_ICA_freq'); -% % % % % % -% % % % % -% % % % % -% % % % % imgname=[subject '_blp_iccheck_' band_prefix]; -% % % % % options={'plottype','components','component',9,'saveres','no','grad', comp.grad,'modality','MEG','saveformat','png','fileout',imgname,'visible','on'}; -% % % % % hcp_ICA_plot(comp_freq2,options) % summary plots of the IC -% % % % % -% % % % % mspec = sqrt(comp_freq.freq_comp.powspctrm(9,:)); -% % % % % F = comp_freq.freq_comp.freq; -% % % % % -% % % % % subplot(2,2,[3 4]) -% % % % % hold on -% % % % % plot(F,mspec,'r') +if strcmp(dofiltcheck,'yes') + compappo=comp; + compappo.trial=comp_blp.trial; + options = {'doplot', 'no', 'grad', comp.grad, 'plottype', 'components'}; + disp('STARTING ft_ICA_freq'); + comp_freq = hcp_ICA_freq(compappo, options); + disp('DONE ft_ICA_freq'); + + options = {'doplot', 'no', 'grad', comp.grad, 'plottype', 'components'}; + disp('STARTING ft_ICA_freq'); + comp_freq2 = hcp_ICA_freq(comp, options); + disp('DONE ft_ICA_freq'); + + imgname=[subject '_blp_iccheck_' band_prefix]; + options={'plottype','components','component',9,'saveres','no','grad', comp.grad,'modality','MEG','saveformat','png','fileout',imgname,'visible','on'}; + hcp_ICA_plot(comp_freq2,options) % summary plots of the IC + + mspec = sqrt(comp_freq.freq_comp.powspctrm(9,:)); + F = comp_freq.freq_comp.freq; + + subplot(2,2,[3 4]) + hold on + plot(F,mspec,'r') +end junk=cell2mat(comp_blp.trial); @@ -123,7 +124,7 @@ nwin=fix((size(sigt,2)-window_pnt)/step_pnt); -for k=1:nwin +for k=1:nwin-1 time_power(k)=(1/comp.fsample)*mean((k-1)*step_pnt+1:(k-1)*step_pnt+window_pnt); % in seconds end @@ -137,9 +138,9 @@ ix = zeros(window_pnt*(nwin-1),1); iy = zeros(window_pnt*(nwin-1),1); for k = 1:(nwin-1) - indx = (k-1)*window_pnt+(1:window_pnt); - ix(indx) = (k-1)*step_pnt+(1:window_pnt); - iy(indx) = k; + indx = (k-1)*window_pnt+(1:window_pnt); + ix(indx) = (k-1)*step_pnt+(1:window_pnt); + iy(indx) = k; end iz = ones(numel(iy),1)./window_pnt; P = sparse(ix,iy,iz); @@ -148,20 +149,18 @@ for is=1:nsource ft_progress(is/nsource, 'evaluating power voxel %d from %d\n', is, nsource); - - source_sig(:,:)=source.avg.mom{source.inside(is)'}(:,brainic_indx)*(IC*1E15); + source_sig(:,:)=source.avg.mom{source.inside(is)'}(:,brainic_indx)*IC; sigt=sum(source_sig.^2,1); - - %for k=1:(nwin-1) - % power(is,k)=mean(sigt((k-1)*step_pnt+1:(k-1)*step_pnt+window_pnt)); - %end power(is,:) = sigt*P; end +% remove some unwanted stuff from the data structure that was output of hcp_icamne.m if isfield(source,'avg'); source=rmfield(source,'avg'); end if isfield(source,'time'); source=rmfield(source,'time'); end if isfield(source,'val'); source=rmfield(source,'val'); end -if isfield(source,'noise'); source=rmfield(source,'noise'); end +if isfield(source,'snr'); source=rmfield(source,'snr'); end + +% add some relevant stuff source.power=power; source.blp_band=blp_band; source.step=step; diff --git a/analysis_functions/hcp_icaemcw_estimate.m b/analysis_functions/hcp_icaemcw_estimate.m index b7890ed..1d7e580 100644 --- a/analysis_functions/hcp_icaemcw_estimate.m +++ b/analysis_functions/hcp_icaemcw_estimate.m @@ -1,4 +1,4 @@ -function [connect_mcw] = hcp_icaemcw_estimate(source, sourcemodel, options) +function [connect_mcw] = hcp_icaEmcw_estimate(source, sourcemodel, options) % Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) % @@ -19,7 +19,7 @@ subject= ft_getopt(options, 'subjectid'); outputfile = ft_getopt(options, 'outputfile'); -label=ft_getopt(options, 'label'); +net_seeds=ft_getopt(options, 'net_seeds'); step = ft_getopt(options, 'mcw_step', 200); window = ft_getopt(options, 'mcw_window', 10000); dofig = ft_getopt(options, 'dofig', 'yes'); @@ -28,26 +28,12 @@ extnode=ft_getopt(options, 'extnode'); % outputfile=[outputfile '_test'] -disp('reading mri template') -mri=ft_read_mri('mni_icbm152_t1_tal_nlin_sym_09a.nii'); -mri=ft_convert_units(mri, 'mm'); +mni_pos=net_seeds.pos; +emcw_order=net_seeds.emcw_order; -sourcemodel=ft_convert_units(sourcemodel, 'mm'); -sourcemodel.inside=source.inside; -sourcemodel.outside=source.outside; - -source=ft_convert_units(source, 'mm'); -% oldpos=source.pos; - -source.pos=sourcemodel.pos; -source.coordsys = 'spm'; - -X = 45; % -Y = 20; % -xMargin = 1; % -yMargin = 1; % -xSize = X - 2*xMargin; % -ySize = Y - 2*yMargin; % +X = 45; Y = 20; +xMargin = 1; yMargin = 1; +xSize = X - 2*xMargin; ySize = Y - 2*yMargin; %________________ MCW sampling details _______ Fs = 50; % hard coded... to be retrievied from the blp structure @@ -55,95 +41,59 @@ window2=round(Fs*window/1000); % in points; %______________________________________________ - -% % % % % % label1=label(1,:)'; -% % % % % % label2=label(2,:)'; -% % % % % % label3=label(3,:)'; -% % % % % % label4=label(4,:)'; -% % % % % % % %____________ EXT NODE -% % % % % % label5=label(5,:)'; - - -%_____________ SETTINGS (THESE WILL BE MANAGED FROM SOMEWHERE ELSE) _______ - -% % % % % % % % % % % % xdim = source.dim(1); -% % % % % % % % % % % % ydim = source.dim(2); -% % % % % % % % % % % % zdim = source.dim(3); - - %__________________________________________________________________________ %_______ all power is mean removed and divided for std once and for all %_______ here, not needed later disp('removing mean from power') -source.power=source.power.*1e15; +% source.power=source.power.*1e15; source.power = (source.power-... repmat(squeeze(mean(source.power,2)),1,size(source.power,2)))./... (repmat(std(source.power,1,2),1,size(source.power,2))); %________________________________________________________________________ -position = source.pos(source.inside,:); +position = sourcemodel.pnt(source.inside,:); if ~isempty(extnode) -% label(5,:)=[-35, -88, 4]; -label(5,:)=extnode; -end -for inode=1:5 - ref_p=label(inode,:)'; - - disp('finding seed voxels') - abs2=sqrt((position(:,1)-ref_p(1)*ones(length(position(:,1)),1)).^2+... - (position(:,2)-ref_p(2)*ones(length(position(:,2)),1)).^2+... - (position(:,3)-ref_p(3)*ones(length(position(:,3)),1)).^2); - - [x, iref(inode)]=min(abs2); - - ref(inode,:) = source.power(iref(inode),:); - seed_pos(inode,:)=position(iref(inode),:); + mni_pos(5,:)=extnode; end -ntp=size(ref,2); -nwin=fix((ntp-window2)/step2); +inode=5 +ref_p=mni_pos(inode,:)'; +disp('finding seed out') +abs2=sqrt((position(:,1)-ref_p(1)*ones(length(position(:,1)),1)).^2+... + (position(:,2)-ref_p(2)*ones(length(position(:,2)),1)).^2+... + (position(:,3)-ref_p(3)*ones(length(position(:,3)),1)).^2); +[x, iref(4)]=min(abs2); + +ntp=size(source.power,2); +nwin=fix((ntp-window2)/step2); disp('estimating seed correlations') +for iemcw=1:size(emcw_order,1) for k=1:nwin + iref(1:3)=net_seeds.cortex_index(emcw_order(iemcw,:)); + ref=source.power(iref,:); + vect1=[(k-1)*step2+1:(k-1)*step2+window2]; corr_wins(k,:)=[(k-1)*step2+1 (k-1)*step2+window2]; time_corr(k)=(1/Fs)*mean(vect1); % in seconds tmp=find(vect1 >= 1 & vect1 <= ntp); - r=corrcoef(ref(1,vect1(tmp)),ref(2,vect1(tmp))); c_p1(1,k)=r(1,2); - r=corrcoef(ref(1,vect1(tmp)),ref(3,vect1(tmp))); c_p1(2,k)=r(1,2); - r=corrcoef(ref(1,vect1(tmp)),ref(4,vect1(tmp))); c_p1(3,k)=r(1,2); - r=corrcoef(ref(1,vect1(tmp)),ref(5,vect1(tmp))); c_p1(4,k)=r(1,2); - - r=corrcoef(ref(2,vect1(tmp)),ref(1,vect1(tmp))); c_p2(1,k)=r(1,2); - r=corrcoef(ref(2,vect1(tmp)),ref(3,vect1(tmp))); c_p2(2,k)=r(1,2); - r=corrcoef(ref(2,vect1(tmp)),ref(4,vect1(tmp))); c_p2(3,k)=r(1,2); - r=corrcoef(ref(2,vect1(tmp)),ref(5,vect1(tmp))); c_p2(4,k)=r(1,2); - - r=corrcoef(ref(3,vect1(tmp)),ref(1,vect1(tmp))); c_p3(1,k)=r(1,2); - r=corrcoef(ref(3,vect1(tmp)),ref(2,vect1(tmp))); c_p3(2,k)=r(1,2); - r=corrcoef(ref(3,vect1(tmp)),ref(4,vect1(tmp))); c_p3(3,k)=r(1,2); - r=corrcoef(ref(3,vect1(tmp)),ref(5,vect1(tmp))); c_p3(4,k)=r(1,2); - - r=corrcoef(ref(4,vect1(tmp)),ref(1,vect1(tmp))); c_p4(1,k)=r(1,2); - r=corrcoef(ref(4,vect1(tmp)),ref(2,vect1(tmp))); c_p4(2,k)=r(1,2); - r=corrcoef(ref(4,vect1(tmp)),ref(3,vect1(tmp))); c_p4(3,k)=r(1,2); - r=corrcoef(ref(4,vect1(tmp)),ref(5,vect1(tmp))); c_p4(4,k)=r(1,2); + r=corrcoef(ref(1,vect1(tmp)),ref(2,vect1(tmp))); c_p(1,k)=r(1,2); + r=corrcoef(ref(1,vect1(tmp)),ref(3,vect1(tmp))); c_p(2,k)=r(1,2); + r=corrcoef(ref(1,vect1(tmp)),ref(4,vect1(tmp))); c_p(3,k)=r(1,2); +end + c_sn(iemcw,:)=min(abs(c_p(1:2,:))); + c_out(iemcw,:)=c_p(3,:); end -c_sn(1,:)=min(abs(c_p1(1:3,:))); -c_sn(2,:)=min(abs(c_p2(1:3,:))); -c_sn(3,:)=min(abs(c_p3(1:3,:))); -c_sn(4,:)=min(abs(c_p4(1:3,:))); -c_out=[c_p1(4,:) ; c_p2(4,:) ; c_p3(4,:) ; c_p4(4,:)]; disp('finding mcw') -iii=[]; +iii=[]; junk=[]; -for inode=1:1 +for inode=1:size(emcw_order,1) t_n=max(abs(c_sn(inode,:))); while(t_n>thresh_tn) t_e=t_n-0.9; @@ -158,77 +108,77 @@ iii=unique(iii); tmpindx=[]; cindx=1; iw=[]; -% % % % % if isempty(iii)==0 -% % % % % % if isempty(find(diff(iii)>5))==0 -% % % % % tmpindx=iii(1); iw(1)=iii(1); -% % % % % if(size(iii,2)>1) -% % % % % for ip=2:size(iii,2) -% % % % % if(iii(ip)>(tmpindx+5)) -% % % % % cindx=cindx+1; -% % % % % iw(cindx)=iii(ip); -% % % % % tmpindx=iii(ip); -% % % % % end -% % % % % end -% % % % % end -% % % % % % else -% % % % % % iw=iii(1); -% % % % % % end -% % % % % end - - - if isempty(iii)==0 - if isempty(find(diff(iii)>5))==0 - iw=[iii(1) iii(find(diff(iii)>5)+ones(1,length(find(diff(iii)>5))))]; - - else - iw=iii(1); +if isempty(iii)==0 + % if isempty(find(diff(iii)>5))==0 + tmpindx=iii(1); iw(1)=iii(1); + if(size(iii,2)>1) + for ip=2:size(iii,2) + if(iii(ip)>(tmpindx+9)) + cindx=cindx+1; + iw(cindx)=iii(ip); + tmpindx=iii(ip); + end end end - - time_corr_win=(1/Fs)*window2/2; + % else + % iw=iii(1); + % end +end -if(~isempty(iw)) - % if(strcmp(dofig,'yes')) - h=figure; set(gcf, 'Units','centimeters', 'Position',[1 1 xSize ySize],'Color',[0.8 0.8 0.8]) - set(h, 'paperposition', [1 1 24 6]); - plot(time_corr,c_p1(1,:),'b'); hold on; - plot(time_corr,c_p1(2,:),'r') - plot(time_corr,c_p1(3,:),'g') - plot(time_corr,c_p1(4,:),'k') - % plot(time_corr,c_mean,'k:') - axis([0 time_corr(1,end) 0 1]) -% plot(time_corr,repmat(0.6,1,size(time_corr,2)),'-') - line([time_corr(1) time_corr(end)], [0.6 0.6],'color','k') - line([time_corr(1) time_corr(end)], [0.5 0.5],'color','k') - for il=1:size(iii,2) - line([time_corr(iii(il)) time_corr(iii(il))], [0 c_p1(4,iii(il))],'color','y') - end -% for il=1:size(iw,2) -% max_corr= max([c_p1(1,iw(il)) c_p1(2,iw(il)),c_p1(3,iw(il))]) -% line([time_corr(iw(il)) time_corr(iw(il))], [0 1],'color','k') + +time_corr_win=(1/Fs)*window2/2; + +% if(~isempty(iw)) +% % if(strcmp(dofig,'yes')) +% h=figure; set(gcf, 'Units','centimeters', 'Position',[1 1 xSize ySize],'Color',[0.8 0.8 0.8]) +% set(h, 'paperposition', [1 1 24 6]); +% plot(time_corr,c_sn(1,:),'b'); hold on; +% plot(time_corr,c_sn(2,:),'r') +% plot(time_corr,c_sn(3,:),'k') +% plot(time_corr,c_p1(4,:),'k') +% plot(time_corr,c_p1(4,:),'k') +% +% % plot(time_corr,c_mean,'k:') +% axis([0 time_corr(1,end) 0 1]) +% % plot(time_corr,repmat(0.6,1,size(time_corr,2)),'-') +% line([time_corr(1) time_corr(end)], [0.6 0.6],'color','k') +% line([time_corr(1) time_corr(end)], [0.5 0.5],'color','k') +% for il=1:size(iii,2) +% line([time_corr(iii(il)) time_corr(iii(il))], [0 c_p1(4,iii(il))],'color','y') % end - % grid on - xlabel('time (s)'); - ylabel('corr over windows'); - % legend('rpips','lfef','rfef','out','mean') - legend('rpips','lfef','rfef','out','Location','NorthEastOutside') - plot(time_corr(iw),c_p1(1,iw),'*'); - plot(time_corr(iw),c_p1(2,iw),'r*') - plot(time_corr(iw),c_p1(3,iw),'g*') - plot(time_corr(iw),c_p1(4,iw),'m*') - plot(time_corr(iw),c_p1(1,iw),'o'); - plot(time_corr(iw),c_p1(2,iw),'ro') - plot(time_corr(iw),c_p1(3,iw),'go') - plot(time_corr(iw),c_p1(4,iw),'mo') - % if(~isempty(tmpindx)) - % plot(time_corr(tmpindx),c_p1(tmpindx),'ro') - % end - set(gca,'Color',[0.5 0.5 0.5]); - imgname = [outputfile '_seed_correlations.png']; - hcp_write_figure(imgname, h); - close(h) - % end -end +% % for il=1:size(iw,2) +% % max_corr= max([c_p1(1,iw(il)) c_p1(2,iw(il)),c_p1(3,iw(il))]) +% % line([time_corr(iw(il)) time_corr(iw(il))], [0 1],'color','k') +% % end +% % grid on +% xlabel('time (s)'); +% ylabel('corr over windows'); +% % legend('rpips','lfef','rfef','out','mean') +% legend(net_seeds.seeds_string{2:5},'Location','NorthEastOutside') +% +% % legend('rpips','lfef','rfef','out','Location','NorthEastOutside') +% plot(time_corr(iw),c_p1(1,iw),'*'); +% plot(time_corr(iw),c_p1(2,iw),'r*') +% plot(time_corr(iw),c_p1(3,iw),'g*') +% plot(time_corr(iw),c_p1(4,iw),'m*') +% plot(time_corr(iw),c_p1(1,iw),'o'); +% plot(time_corr(iw),c_p1(2,iw),'ro') +% plot(time_corr(iw),c_p1(3,iw),'go') +% plot(time_corr(iw),c_p1(4,iw),'mo') +% % if(~isempty(tmpindx)) +% % plot(time_corr(tmpindx),c_p1(tmpindx),'ro') +% % end +% set(gca,'Color',[0.5 0.5 0.5]); +% imgname = [outputfile '_seed_correlations.png']; +% hcp_write_figure(imgname, h); +% close(h) +% % end +% end + +load('parcellations_VGD11b_4k.mat') +mask1=find(strcmp(atlas.parcellation2label,'L_MEDIAL.WALL')); +mask2=find(strcmp(atlas.parcellation2label,'R_MEDIAL.WALL')); +mask_wall=[find(atlas.parcellation2==mask1); find(atlas.parcellation2==mask2)]; if isempty(iii)==0 xp=time_corr(iw); @@ -242,260 +192,53 @@ extr2(1)=1; end - ref1 = ref(1,:); %_________________________________________________________________ %_____________________ CONNECTIVITY MAP COMPUTATION ______________ + iref_c=net_seeds.cortex_index; + ref1=source.power(iref_c(1),:); - dm1_pre = zeros(size(extr2,1),size(source.power,1)); - z_fisher_dm1 = zeros(size(extr2,1),size(source.power,1)); + mcw_corrmap = zeros(size(extr2,1),size(source.power,1)); disp('Connectivity map Computation') for w=1:size(extr2,1) - disp(num2str(w)) - - - dm1_pre(w,:) = corr(ref1(1,extr2(w,1):extr2(w,2))',source.power(:,extr2(w,1):extr2(w,2))'); - - - z_fisher_dm1(w,:)=0.5.*log((1+dm1_pre(w,:))./(1-dm1_pre(w,:))); - -% if(strcmp(dofig,'yes')) -% -% h=figure; set(gcf, 'Units','centimeters', 'Position',[5 5 xSize ySize],'Color',[0.8 0.8 0.8]) -% plot(dm1_pre(w,:),'m') ; hold on -% plot(iref,dm1_pre(w,iref),'k*') -% plot(iref2,dm1_pre(w,iref2),'*') -% plot(iref3,dm1_pre(w,iref3),'r*') -% plot(iref4,dm1_pre(w,iref4),'g*') -% plot(iref5,dm1_pre(w,iref5),'y*') -% xlabel('voxel'); -% ylabel('correlation with seed'); -% legend('seed', 'ref1','ref2','ref3','ref4','out') -% set(gca,'Color',[0.5 0.5 0.5]); -% line([1 size(dm1_pre,2)], [0.6 0.6]) -% imgname = [outputfile '_voxel_correlations_' num2str(w) '.png']; -% hcp_write_figure(imgname, h); -% close(h) -% end + mcw_corrmap(w,:) = corr(ref1(1,extr2(w,1):extr2(w,2))',source.power(:,extr2(w,1):extr2(w,2))'); end -% for izf=1:size(z_fisher_dm1,1) -% [junk seed_indx]=max(z_fisher_dm1(izf,:)); -% z_fisher_dm1(izf,seed_indx)=0; -% z_fisher_dm1(izf,seed_indx)=max(z_fisher_dm1(izf,:)); -% end - connect_mcw=source; connect_mcw=rmfield(connect_mcw,'power') connect_mcw=rmfield(connect_mcw,'time_power') if(isfield(connect_mcw,'avg')) connect_mcw=rmfield(connect_mcw,'avg'); end - connect_mcw.time=[1:size(dm1_pre,1)]; - connect_mcw.mcw=dm1_pre; + connect_mcw.time=[1:size(mcw_corrmap,1)]; + connect_mcw.mcw=mcw_corrmap; connect_mcw.mcwextr=extr2; - - connect_mcw.seeds_indx=iref; + connect_mcw.seeds_indx=net_seeds.cortex_index; disp('Evaluating Z-Score MAP') -% mu_base=mean(mean(z_fisher_dm1,2),1); -% mu_s=mean(z_fisher_dm1,1); -% sigma_s=std(z_fisher_dm1,1,1); -% z_s=(mu_s-mu_base).*sqrt(size(z_fisher_dm1,1))./sigma_s; -% - mu_base=mean(mean(dm1_pre,2),1); - mu_s=mean(dm1_pre,1); - sigma_s=std(dm1_pre,1,1); - z_s=(mu_s-mu_base).*sqrt(size(dm1_pre,1))./sigma_s; - - for iz=1:5 + tmp_mcwcorr=mcw_corrmap; + tmp_mcwcorr(:,mask_wall)=NaN; + mu_base=nanmean(nanmean(tmp_mcwcorr,2),1); + mu_s=mean(mcw_corrmap,1); + sigma_s=std(mcw_corrmap,1,1); + z_s=(mu_s-mu_base).*sqrt(size(mcw_corrmap,1))./sigma_s; + + for iz=1:5 [junk seed_indx(iz)]=max(z_s); z_s(seed_indx(iz))=0; - end - z_s(seed_indx)=max(z_s); - connect_mcw.z_s=z_s; - - - - if(strcmp(dofig,'yes')) - h=figure; set(gcf, 'Units','centimeters', 'Position',[5 5 xSize ySize],'Color',[0.8 0.8 0.8]) - - plot(z_s,'m') ; hold on - plot(iref(1,1),z_s(1,iref(1,1)),'k*') - plot(iref(1,2),z_s(1,iref(1,2)),'*') - plot(iref(1,3),z_s(1,iref(1,3)),'r*') - plot(iref(1,4),z_s(1,iref(1,4)),'g*') - plot(iref(1,5),z_s(1,iref(1,5)),'y*') - xlabel('voxel'); - ylabel('z-score'); - legend('seed', 'ref1','ref2','ref3','ref4','out') - set(gca,'Color',[0.5 0.5 0.5]); - % line([1 size(dm1_pre,2)], [0.6 0.6]) - imgname = [outputfile '_voxel_z_score.png']; - hcp_write_figure(imgname, h); - close(h) end + z_s(seed_indx)=max(z_s); + connect_mcw.z_s=z_s; if(strcmp(dofig,'yes')) + + imgname = [outputfile '_z_score_view.png']; + color_extr= [0 5]; + options_pl={'outputfile',imgname, 'mask','yes','color_extr',color_extr,'color_map','jet'}; - intcfg=[]; - intcfg.parameter = 'avg.pow'; - tmp = connect_mcw; - % tmp.pos=oldpos; - tmp.avg.pow=zeros(size(source.pos,1),1); - tmp.avg.pow(source.inside) = z_s; - s_interp = ft_sourceinterpolate(intcfg, tmp, mri); - [junk thr_ind junk2 thr_ind_dep]= hcp_mcw_fdr(z_s,0.05,size(connect_mcw.mcw,1)); % [z_thr thr3 z_thr_dep thr3_dep] - - -% indxmask=find(s_interp.avg.pow>thr_ind_dep); - indxmask=find(s_interp.avg.pow>0); - - s_interp.avg.mask=zeros(size(s_interp.avg.pow)); - s_interp.avg.mask(indxmask)=1; - % s_interp.avg.mask=zeros(size(s_interp.avg.pow)); - % maxabs=max(max(max(s_interp.avg.pow))); - % indxmask=find(s_interp.avg.pow>1.5); - % s_interp.avg.mask(indxmask)=1; - % - intcfg=[]; - intcfg.parameter = 'avg.pow'; - % intcfg.downsample = 1; - - tmp = connect_mcw; - - for k = 1:numel(connect_mcw.time) - tmp.avg.pow=zeros(size(source.pos,1),1); - tmp.avg.pow(connect_mcw.inside) = connect_mcw.mcw(k,:); - s_interp2(k) = ft_sourceinterpolate(intcfg, tmp, mri); - s_interp2(k).avg.mask=zeros(size(s_interp2(k).avg.pow)); - maxabs=max(max(max(s_interp2(k).avg.pow))); - indxmask=find(s_interp2(k).avg.pow>0.4*maxabs); - s_interp2(k).avg.mask(indxmask)=1; - end - - - tmp = connect_mcw; - tmp.time=1; - - tmp.avg.pow=zeros(size(tmp.pos,1),1); - tmp.avg.pow(:,:)=0; - - tmp.avg.pow(tmp.inside(iref(1,1))) = -10; - tmp.avg.pow(tmp.inside(iref(1,2))) = 10; - tmp.avg.pow(tmp.inside(iref(1,3))) = 10; - tmp.avg.pow(tmp.inside(iref(1,4))) = 10; - tmp.avg.pow(tmp.inside(iref(1,5))) = 10; - - s_interp_seed = ft_sourceinterpolate(intcfg, tmp, mri); - s_interp_seed.avg.mask=zeros(size(s_interp_seed.avg.pow)); - maxabs=max(max(max(s_interp_seed.avg.pow))); - indxmask=find(abs(s_interp_seed.avg.pow)>0.4*maxabs); - s_interp_seed.avg.mask(indxmask)=1; + hcp_icaplotcortex(z_s, subject, options_pl) - % netstring=net_seed{seed_indx}; - % tmpindx=strfind(netstring, '_') - % netstring(tmpindx)='-'; - % imgname = ['mcw_netseed_' net_seed{seed_indx}]; - - - - cfg = []; - cfg.method = 'slice'; - cfg.funcolormap='jet'; - cfg.nslices=36; - % cfg.method = 'surface'; - % cfg.anaparameter = 'anatomy'; - % cfg.coordsys = 'mni'; - % cfg.anaparameter = 'mri'; - cfg.funparameter = 'avg.pow'; - % cfg.method = 'ortho'; - cfg.projmethod = 'nearest'; - cfg.interactive = 'no'; -% % % % % cfg.funcolorlim=[-10 10]; - cfg.maskparameter='avg.mask'; -% % % % % ft_sourceplot(cfg, s_interp_seed); -% % % % % -% % % % % ax1 = gca; - - cfg.funcolorlim=[0 10]; - % % % % % cfg.maskparameter='avg.mask'; - - imgname = [outputfile '_z_score']; - ft_sourceplot(cfg, s_interp); -% hcp_write_figure(imgname, gcf, 'format', 'fig') - disp('step1') -% % % % % ax2 = gca; - h3=gcf; -% % % % % h3 = figure; %create new figure -% % % % % set(gca, 'XTickLabel',[], 'YTickLabel',[], ... -% % % % % 'Units','normalized', 'Position',[0 0 1 1]) -% % % % % -% % % % % %# figure size on screen (50% scaled, but same aspect ratio) -% % % % % set(gcf, 'Units','centimeters', 'Position',[5 5 xSize ySize]) -% % % % % -% % % % % %# figure size printed on paper -% % % % % set(gcf, 'visible', 'on') -% % % % % set(gcf, 'PaperUnits','centimeters') -% % % % % set(gcf, 'PaperSize',[X Y]) -% % % % % set(gcf, 'PaperPosition',[xMargin yMargin xSize ySize]) -% % % % % set(gcf, 'PaperOrientation','portrait') - - disp('step2') - -% % % % % s1 = subplot(1,2,1); %create and get handle to the subplot axes -% % % % % fig1 = get(ax1,'children'); %get handle to all the children in the figure -% % % % % copyobj(fig1,s1); %copy children to new parent axes i.e. the subplot axes -% % % % % caxis([-10,10]) -% % % % % colorbar - - disp('step3') - -% % % % % s2 = subplot(1,2,2); -% % % % % fig2 = get(ax2,'children'); -% % % % % copyobj(fig2,s2); -% % % % % colorbar -% % % % % caxis(cfg.funcolorlim) - - disp('step4') - - imgname = [outputfile '_z_score.png']; - - hcp_write_figure(imgname, h3); - hcp_write_figure(imgname, h3, 'format' ,'fig'); - - - disp('step5') - - close(h3) - - disp('step6') - -% close all - - for i = 1:size(s_interp2, 2) - imgname = [outputfile '_' num2str(i) '.png']; - % maxVal=max(s_interp2(i).avg.pow(:)); - % minVal=min(s_interp2(i).avg.pow(:)); - % maxAbs=max([maxVal;minVal]) - % limSign=unique(sign([minVal maxVal])); - % if (length(limSign)==1)&limSign>0, - % funLim=maxAbs*[0 1]; - % elseif (length(limSign)==1)&limSign<0, - % funLim=maxAbs*[-1 0]; - % else - % funLim=maxAbs*[-1 1]; - % end - funLim=[0 1]; - cfg.funcolorlim=funLim; - - ft_sourceplot(cfg, s_interp2(i)); - h1=gcf; -% set(h1, 'paperposition', [1 1 10 7]); - hcp_write_figure(imgname, h1); - close(h1) - end end diff --git a/analysis_functions/hcp_icamcw_estimate.m b/analysis_functions/hcp_icamcw_estimate.m new file mode 100644 index 0000000..1c4f91e --- /dev/null +++ b/analysis_functions/hcp_icamcw_estimate.m @@ -0,0 +1,288 @@ +function [connect_mcw] = hcp_icamcw_estimate(source, sourcemodel, options) + +% Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) +% +% This file is part of megconnectome. +% +% megconnectome 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. +% +% megconnectome 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 megconnectome. If not, see . + +subject= ft_getopt(options, 'subjectid'); +outputfile = ft_getopt(options, 'outputfile'); +net_seeds=ft_getopt(options, 'net_seeds'); +step = ft_getopt(options, 'mcw_step', 200); +window = ft_getopt(options, 'mcw_window', 10000); +dofig = ft_getopt(options, 'dofig', 'yes'); +ac=ft_getopt(options, 'ac', 0.1); +thresh_tn=ft_getopt(options, 'thresh', 0.6); +extnode=ft_getopt(options, 'extnode'); +% outputfile=[outputfile '_test'] + +mni_pos=net_seeds.pos; + +X = 45; Y = 20; +xMargin = 1; yMargin = 1; +xSize = X - 2*xMargin; ySize = Y - 2*yMargin; + +%________________ MCW sampling details _______ +Fs = 50; % hard coded... to be retrievied from the blp structure +step2=round(Fs*step/1000); +window2=round(Fs*window/1000); % in points; +%______________________________________________ + +%__________________________________________________________________________ +%_______ all power is mean removed and divided for std once and for all +%_______ here, not needed later +disp('removing mean from power') +% source.power=source.power.*1e15; +source.power = (source.power-... + repmat(squeeze(mean(source.power,2)),1,size(source.power,2)))./... + (repmat(std(source.power,1,2),1,size(source.power,2))); + +%________________________________________________________________________ +position = sourcemodel.pnt(source.inside,:); +if ~isempty(extnode) + mni_pos(5,:)=extnode; +end + +inode=5 +ref_p=mni_pos(inode,:)'; +disp('finding seed out') +abs2=sqrt((position(:,1)-ref_p(1)*ones(length(position(:,1)),1)).^2+... + (position(:,2)-ref_p(2)*ones(length(position(:,2)),1)).^2+... + (position(:,3)-ref_p(3)*ones(length(position(:,3)),1)).^2); + +[x, iref(inode)]=min(abs2); + +iref(1:4)=net_seeds.cortex_index +ref=source.power(iref,:); +seed_pos=position(iref,:); + +ntp=size(ref,2); +nwin=fix((ntp-window2)/step2); + + +disp('estimating seed correlations') +for k=1:nwin + vect1=[(k-1)*step2+1:(k-1)*step2+window2]; + corr_wins(k,:)=[(k-1)*step2+1 (k-1)*step2+window2]; + time_corr(k)=(1/Fs)*mean(vect1); % in seconds + + tmp=find(vect1 >= 1 & vect1 <= ntp); + + r=corrcoef(ref(1,vect1(tmp)),ref(2,vect1(tmp))); c_p1(1,k)=r(1,2); + r=corrcoef(ref(1,vect1(tmp)),ref(3,vect1(tmp))); c_p1(2,k)=r(1,2); + r=corrcoef(ref(1,vect1(tmp)),ref(4,vect1(tmp))); c_p1(3,k)=r(1,2); + r=corrcoef(ref(1,vect1(tmp)),ref(5,vect1(tmp))); c_p1(4,k)=r(1,2); + + r=corrcoef(ref(2,vect1(tmp)),ref(1,vect1(tmp))); c_p2(1,k)=r(1,2); + r=corrcoef(ref(2,vect1(tmp)),ref(3,vect1(tmp))); c_p2(2,k)=r(1,2); + r=corrcoef(ref(2,vect1(tmp)),ref(4,vect1(tmp))); c_p2(3,k)=r(1,2); + r=corrcoef(ref(2,vect1(tmp)),ref(5,vect1(tmp))); c_p2(4,k)=r(1,2); + + r=corrcoef(ref(3,vect1(tmp)),ref(1,vect1(tmp))); c_p3(1,k)=r(1,2); + r=corrcoef(ref(3,vect1(tmp)),ref(2,vect1(tmp))); c_p3(2,k)=r(1,2); + r=corrcoef(ref(3,vect1(tmp)),ref(4,vect1(tmp))); c_p3(3,k)=r(1,2); + r=corrcoef(ref(3,vect1(tmp)),ref(5,vect1(tmp))); c_p3(4,k)=r(1,2); + + r=corrcoef(ref(4,vect1(tmp)),ref(1,vect1(tmp))); c_p4(1,k)=r(1,2); + r=corrcoef(ref(4,vect1(tmp)),ref(2,vect1(tmp))); c_p4(2,k)=r(1,2); + r=corrcoef(ref(4,vect1(tmp)),ref(3,vect1(tmp))); c_p4(3,k)=r(1,2); + r=corrcoef(ref(4,vect1(tmp)),ref(5,vect1(tmp))); c_p4(4,k)=r(1,2); +end +c_sn(1,:)=min(abs(c_p1(1:3,:))); +c_sn(2,:)=min(abs(c_p2(1:3,:))); +c_sn(3,:)=min(abs(c_p3(1:3,:))); +c_sn(4,:)=min(abs(c_p4(1:3,:))); +c_out=[c_p1(4,:) ; c_p2(4,:) ; c_p3(4,:) ; c_p4(4,:)]; + +disp('finding mcw') +iii=[]; + +junk=[]; + +for inode=1:1 + t_n=max(abs(c_sn(inode,:))); + while(t_n>thresh_tn) + t_e=t_n-0.9; + while(t_e<(thresh_tn-ac)) + junk=[find(abs(c_sn(inode,:))>t_n & abs(c_out(inode,:))5))==0 + tmpindx=iii(1); iw(1)=iii(1); + if(size(iii,2)>1) + for ip=2:size(iii,2) + if(iii(ip)>(tmpindx+9)) + cindx=cindx+1; + iw(cindx)=iii(ip); + tmpindx=iii(ip); + end + end + end + % else + % iw=iii(1); + % end +end + + +time_corr_win=(1/Fs)*window2/2; + +if(~isempty(iw)) + % if(strcmp(dofig,'yes')) + h=figure; set(gcf, 'Units','centimeters', 'Position',[1 1 xSize ySize],'Color',[0.8 0.8 0.8]) + set(h, 'paperposition', [1 1 24 6]); + plot(time_corr,c_p1(1,:),'b'); hold on; + plot(time_corr,c_p1(2,:),'r') + plot(time_corr,c_p1(3,:),'g') + plot(time_corr,c_p1(4,:),'k') + % plot(time_corr,c_mean,'k:') + axis([0 time_corr(1,end) 0 1]) + % plot(time_corr,repmat(0.6,1,size(time_corr,2)),'-') + line([time_corr(1) time_corr(end)], [0.6 0.6],'color','k') + line([time_corr(1) time_corr(end)], [0.5 0.5],'color','k') + for il=1:size(iii,2) + line([time_corr(iii(il)) time_corr(iii(il))], [0 c_p1(4,iii(il))],'color','y') + end + % for il=1:size(iw,2) + % max_corr= max([c_p1(1,iw(il)) c_p1(2,iw(il)),c_p1(3,iw(il))]) + % line([time_corr(iw(il)) time_corr(iw(il))], [0 1],'color','k') + % end + % grid on + xlabel('time (s)'); + ylabel('corr over windows'); + % legend('rpips','lfef','rfef','out','mean') + legend(net_seeds.seeds_string{2:5},'Location','NorthEastOutside') + + % legend('rpips','lfef','rfef','out','Location','NorthEastOutside') + plot(time_corr(iw),c_p1(1,iw),'*'); + plot(time_corr(iw),c_p1(2,iw),'r*') + plot(time_corr(iw),c_p1(3,iw),'g*') + plot(time_corr(iw),c_p1(4,iw),'m*') + plot(time_corr(iw),c_p1(1,iw),'o'); + plot(time_corr(iw),c_p1(2,iw),'ro') + plot(time_corr(iw),c_p1(3,iw),'go') + plot(time_corr(iw),c_p1(4,iw),'mo') + % if(~isempty(tmpindx)) + % plot(time_corr(tmpindx),c_p1(tmpindx),'ro') + % end + set(gca,'Color',[0.5 0.5 0.5]); + imgname = [outputfile '_seed_correlations.png']; + hcp_write_figure(imgname, h); + close(h) + % end +end + +load('parcellations_VGD11b_4k.mat') +mask1=find(strcmp(atlas.parcellation2label,'L_MEDIAL.WALL')); +mask2=find(strcmp(atlas.parcellation2label,'R_MEDIAL.WALL')); +mask_wall=[find(atlas.parcellation2==mask1); find(atlas.parcellation2==mask2)]; + +if isempty(iii)==0 + xp=time_corr(iw); + clear extr extr2 + + %____ extremes in seconds _________________________________________ + extr=[xp'-window/2000*ones(size(xp))' xp'+window/2000*ones(size(xp))']; + %____ extremes in points _____________________ + extr2=round(Fs*extr); + if extr2(1)==0 + extr2(1)=1; + end + + ref1 = ref(1,:); + %_________________________________________________________________ + + %_____________________ CONNECTIVITY MAP COMPUTATION ______________ + + mcw_corrmap = zeros(size(extr2,1),size(source.power,1)); + + disp('Connectivity map Computation') + for w=1:size(extr2,1) + disp(num2str(w)) + + mcw_corrmap(w,:) = corr(ref1(1,extr2(w,1):extr2(w,2))',source.power(:,extr2(w,1):extr2(w,2))'); + end + + connect_mcw=source; + connect_mcw=rmfield(connect_mcw,'power') + connect_mcw=rmfield(connect_mcw,'time_power') + if(isfield(connect_mcw,'avg')) connect_mcw=rmfield(connect_mcw,'avg'); end + + connect_mcw.time=[1:size(mcw_corrmap,1)]; + connect_mcw.mcw=mcw_corrmap; + connect_mcw.mcwextr=extr2; + connect_mcw.seeds_indx=iref; + + disp('Evaluating Z-Score MAP') + + tmp_mcwcorr=mcw_corrmap; + tmp_mcwcorr(:,mask_wall)=NaN; + mu_base=nanmean(nanmean(tmp_mcwcorr,2),1); + mu_s=mean(mcw_corrmap,1); + sigma_s=std(mcw_corrmap,1,1); + z_s=(mu_s-mu_base).*sqrt(size(mcw_corrmap,1))./sigma_s; + + for iz=1:5 + [junk seed_indx(iz)]=max(z_s); + z_s(seed_indx(iz))=0; + end + z_s(seed_indx)=max(z_s); + connect_mcw.z_s=z_s; + + if(strcmp(dofig,'yes')) + h=figure; + set(gcf, 'Units','centimeters', 'Position',[5 5 xSize ySize],'Color',[0.8 0.8 0.8]) + + plot(z_s,'m') ; hold on + plot(iref(1,1),z_s(1,iref(1,1)),'k*') + plot(iref(1,2),z_s(1,iref(1,2)),'*') + plot(iref(1,3),z_s(1,iref(1,3)),'r*') + plot(iref(1,4),z_s(1,iref(1,4)),'g*') + plot(iref(1,5),z_s(1,iref(1,5)),'y*') + xlabel('voxel'); + ylabel('z-score'); + legend('seed', 'ref1','ref2','ref3','ref4','out') + set(gca,'Color',[0.5 0.5 0.5]); + imgname = [outputfile '_voxel_z_score.png']; + hcp_write_figure(imgname, h); + close(h) + end + + if(strcmp(dofig,'yes')) + + imgname = [outputfile '_z_score_view.png']; + color_extr= [0 5]; + options_pl={'outputfile',imgname, 'mask','yes','color_extr',color_extr,'color_map','jet'}; + + hcp_icaplotcortex(z_s, subject, options_pl) + + end + + +else + connect_mcw=[]; +end +close all +end + + + diff --git a/analysis_functions/hcp_icaplotconnectome.m b/analysis_functions/hcp_icaplotconnectome.m new file mode 100644 index 0000000..8fbdf7b --- /dev/null +++ b/analysis_functions/hcp_icaplotconnectome.m @@ -0,0 +1,107 @@ +function []=hcp_icaplotconnectome(connectome, sourcemodel2d, options) + +outputfile=ft_getopt(options, 'outputfile'); +sortindx=ft_getopt(options, 'sorting','yes'); +atlas_label=ft_getopt(options, 'parcel_type','RSN'); +rm_wall=ft_getopt(options, 'mask', 'yes'); +rm_dist=ft_getopt(options, 'mask_edist','yes'); +edist_radius=ft_getopt(options, 'edist_radius', 3.5); +plot_parc=ft_getopt(options, 'plot_parc','yes'); +color_extr=ft_getopt(options, 'color_extr'); +fig_type=ft_getopt(options, 'fig_type','png'); + +if strcmp(sortindx,'yes') + if strcmp(atlas_label,'RSN') + atlas_rsn_l=ft_read_atlas('RSN-networks.L.4k_fs_LR.label.gii'); + atlas_rsn_r=ft_read_atlas('RSN-networks.R.4k_fs_LR.label.gii'); + ordering_n=[4 7 8 15 25 5 17 16 6 21 12 14 3 10 20 11 18 26 13 22 23 27 24 9 19 2 1]; + atlaslabel_rtemp=atlas_rsn_r.parcellation4label; atlasindex_r=atlas_rsn_r.parcellation4; + for it=1:numel(atlaslabel_rtemp) ; atlaslabel_r{it}=atlaslabel_rtemp{ordering_n(it)} ; end + atlaslabel_ltemp=atlas_rsn_l.parcellation4label; atlasindex_l=atlas_rsn_l.parcellation4; + for it=1:numel(atlaslabel_ltemp) ; atlaslabel_l{it}=atlaslabel_ltemp{ordering_n(it)} ; end + + elseif strcmp(atlas_label,'VGD11b') + atlas_rsn_l=ft_read_atlas('parcellations_VGD11b.L.4k_fs_LR.label.gii'); + atlas_rsn_r=ft_read_atlas('parcellations_VGD11b.R.4k_fs_LR.label.gii'); + atlaslabel_r=atlas_rsn_r.parcellation2label; atlasindex_r=atlas_rsn_r.parcellation2; + atlaslabel_l=atlas_rsn_l.parcellation2label; atlasindex_l=atlas_rsn_l.parcellation2; + ordering_n=[1:numel(atlaslabel_r)]; + end + + indexvoxels=[]; + jn=0; + for in=1:numel(atlaslabel_r) + jn=jn+1; + networkl{jn}=atlaslabel_r{in}; +% nindxl=find(strcmp(atlaslabel_l,atlaslabel_r{in})); + nindxl=ordering_n(in); nindxr=ordering_n(in); + if ~isempty(nindxl) + indexvoxels=[indexvoxels ; find(atlasindex_l==nindxl)]; + indxvoxels_net{jn}=find(atlasindex_l==nindxl); + end + indexvoxels=[indexvoxels ; (find(atlasindex_r==nindxr)+numel(atlasindex_l))]; + indxvoxels_net{jn}=[indxvoxels_net{jn} ; (find(atlasindex_r==nindxr)+numel(atlasindex_l))]; + label_net_n{jn}=atlaslabel_r{in}; + if (jn==1) + net_max(jn,:)=[1 numel(indexvoxels)]; + else + net_max(jn,:)=[(net_max(jn-1,2)+1) numel(indexvoxels)]; + end + end + +else + indexvoxels=[1:size(connectome,1)]; +end + +if strcmp(rm_dist,'yes') + eudist=squareform(pdist(sourcemodel2d.pos)); + mask_c=find(eudist. +outStatus=-1; +global saveExtraDir; + +%================================================ +% Get inputs +if isfield(inCfg,'savedir') + saveExtraDir=inCfg.savedir; +else + saveExtraDir=[]; +end + +subjectid=inCfg.subjectid; +experimentid=inCfg.experimentid; +multiscanid=inCfg.multiscanid; % cell with the scan id of both files. They shoudl be in scannning order +contrastlist=inCfg.contrastlist; +anatomydir = inCfg.anatomydir; +gridtype=inCfg.gridtype; %Can be '3D'(using 8mm) or '2D'% +bandinfo=inCfg.bandinfo; + +%------------------------------------------ +% Arrange input frequency bands +freqBands=reshape([bandinfo{:,2}],2,size(bandinfo,1))'; +freqBandCents=mean(freqBands,2); +freqBandCents=round(freqBandCents*2)./2; +freqBandSmoothF=(freqBands(:,2)-freqBands(:,1)); +freqBandNames=bandinfo(:,1); + +%================================================ +% Get basic information about input contrasts +Nfiles=length(contrastlist); % 1 (Motor) or 2(WM and SM) files +Ncontr=length(contrastlist{1}); % Check how many contrasts from the first file's contrasts + + +contrnames=[]; +datagroups=[]; +for iC=1:Ncontr, + contrnames{iC}=contrastlist{1}{iC}.mnemprint; + datagroups=unique([datagroups,contrastlist{1}{iC}.lockmode]); +end + +Ngroups=length(datagroups); + +%============================================================= +% Sort contralist list so that contrasts with the same datagroup of the +% first condition are in sequence. This is to avoid reloading data files +% all the time +sortcontrlist=[]; +countcontr=1; +for iGroup=1:Ngroups + for iC=1:Ncontr, + if strcmp(contrastlist{1}{iC}.lockmode{1},datagroups{iGroup}), + sortcontrlist{1}{countcontr}=contrastlist{1}{iC}; + if Nfiles==2 + sortcontrlist{2}{countcontr}=contrastlist{2}{iC}; + end + countcontr=countcontr+1; + end + end +end +sortcontrnames=[]; +sortgroupnames=[]; +isCompCntr=[]; % It says if it is a comparison between conditions +isDifGroups=[]; % It says if there are 2 different groups in each contrast +for iC=1:Ncontr, + sortcontrnames{iC}=sortcontrlist{1}{iC}.mnemprint; + sortgroupnames{iC}=sortcontrlist{1}{iC}.lockmode; + isCompCntr(iC,1)=length(sortgroupnames{iC})-1; + isDifGroups(iC,1)=length(unique(sortgroupnames{iC}))-1; +end +if Nfiles==2 + is2Files=1; +else + is2Files=0; +end +%============================================================= +%============================================================= +%============================================================= +%% LOOP OVER CONTRASTS +gridAllLF=[]; % Initialize variable where the source space with LeadFields will be placed +prevGroups={'' ''}; +for iC=1:Ncontr + + %===================================================================== + % Srcavglcmv is only computing single condition contrasts. Check and + % if comparison between 2 different conditions the skip to next + if isCompCntr(iC), + disp(['Srcavglvmc pipeline is only computing single condition contrasts , NOT between different conditions. Skipping contrast: ', sortcontrnames{iC}]); + continue; + end + %-------------------------------------------------------------------- + + tmpTok=tokenize(multiscanid{1},'-'); + scanmnem=tmpTok{2}; + %------- The following is just for the cases where the suffix "_Run1 or + %Run2" has been added to the scanid in order to differentiate between 2 + %different runs of the same paradigm. i.e. The way Robert has saved data in + %his database for subject CP10168. + indRunStr=regexp(scanmnem,'_Run'); + if ~isempty(indRunStr), + scanmnem=scanmnem(1:indRunStr(1)-1); + end + + + + + %--------------------------------------------------------- + % Check if the current data group is the same as the one loaded for + % the preceeding processed contrast + prevMatchIndx=[]; + tmpIndx=find(strcmp(sortgroupnames{iC},prevGroups)); + if ~isempty(tmpIndx) + prevMatchIndx{1}=tmpIndx(1); + else + prevMatchIndx{1}=[]; + end + %--------------------------------------------------------- + + % if the same don't load anything else load data group for current contrast + if ~isempty(prevMatchIndx{1}) + eval(['tmpdata1A=alldata',num2str(prevMatchIndx{1}),'A;']); + eval(['tmpdata1B=alldata',num2str(prevMatchIndx{1}),'B;']); + else + tmpdata1A=[]; + tmpdata1B=[]; + end + + %---If contrast from new datagroup then load data ---------------- + if isempty(tmpdata1A) + genprefix = sprintf('%s_%s', experimentid, multiscanid{1}); tmpdatafile=[genprefix,'_tmegpreproc_',sortgroupnames{iC}{1}]; + hcp_read_matlab(tmpdatafile,'data'); + + %================================================================= + %{ + % ADDHOCK REMOVING SUPINE BALANCING - TEMPORARY - REMOVE BEFORE COMMITING + tmpgrad1 = ft_datatype_sens(ft_apply_montage(data.grad, data.grad.balance.invcomp, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad1, tmpgrad1.balance.pca, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad3 = ft_datatype_sens(ft_apply_montage(tmpgrad2, tmpgrad2.balance.Supine, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad3, data.grad.balance.pca,'balancename','pca', 'keepunused', 'yes')); + tmpgrad1 = ft_datatype_sens(ft_apply_montage(tmpgrad2, data.grad.balance.invcomp, 'balancename','invcomp', 'keepunused', 'yes')); + tmpgrad1.balance.invcomp=tmpgrad1.balance.invcomp2; + tmpgrad1.balance.pca=tmpgrad1.balance.pca2; + tmpgrad1.balance.previous{1}='pca'; + tmpgrad1.balance.current='invcomp'; + tmpgrad1.balance=rmfield(tmpgrad1.balance,{'invcomp1','invcomp2','pca1','pca2'}); + tmpgrad1.balance.pca=rmfield(tmpgrad1.balance.pca,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + tmpgrad1.balance.invcomp=rmfield(tmpgrad1.balance.invcomp,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + data.grad=tmpgrad1; + %} + %================================================================= + alldata1A=data; + Fsample=data.fsample; + if isempty(gridAllLF), % If this is the first processed contrast then the grid variable is empty and the grid should be loaded and processed for inverse solution. + %-------------------------- + % At the moment the grad is taken from the first scan and it is assumed that the + % subject has not moved significantly in the other one. Maybe a check should be made and if the difference is above a threshold then a filter should be derived for each file separately; + + grad=ft_convert_units(data.grad,'cm'); + fileGrid2D=[anatomydir,'/',experimentid,'_anatomy_sourcemodel_2d.mat']; + fileGrid3D=[anatomydir,'/',experimentid,'_anatomy_sourcemodel_3d8mm.mat']; + fileGrid3DStandard=['standard_sourcemodel3d8mm']; % Add in the compilation of the executable + %fileAnat=[anatomydir,'/',experimentid,'_anatomy_anatomical.nii']; + fileAnatTemplMcGill='mni_icbm152_t1_tal_nlin_sym_09a.nii'; + fileVol=[anatomydir,'/',experimentid,'_anatomy_headmodel.mat']; + + mriTempl=ft_read_mri(fileAnatTemplMcGill); + + %mriSubj=ft_read_mri(fileAnat); + if strcmp(gridtype,'2D') + hcp_read_matlab(fileGrid2D,'sourcemodel2d'); + grid=ft_convert_units(sourcemodel2d,'cm'); + elseif strcmp(gridtype,'3D') + hcp_read_matlab(fileGrid3D,'sourcemodel3d'); + grid=ft_convert_units(sourcemodel3d,'cm'); + hcp_read_matlab(fileGrid3DStandard,'sourcemodel'); + gridStand=sourcemodel;% already in cm + end + + hcp_read_matlab(fileVol,'headmodel'); + vol=ft_convert_units(headmodel,'cm'); + + %----- Create Leadfields --------------------------------------- + allChansMEG=ft_channelselection({'MEG'},grad.label); + cfg=[]; + cfg.grid=grid; % Grid for Individual's Brain in MEG sensor space + cfg.vol=vol; + cfg.grad=grad; + cfg.reducerank = 2; %(default = 3 for EEG, 2 for MEG) + cfg.normalize = 'yes' ; %Normalise Leadfield: 'yes' for beamformer , 'no' for MNE + cfg.normalizeparam = 1; %depth normalization parameter (default = 0.5) + cfg.feedback='no'; + cfg.channel=allChansMEG; + if strcmp(gridtype,'2D') %JUST TO MAKE SURE ENTIRE CORTICAL SHEET IN SOURCE SPACE + cfg.inwardshift=-1; + end + gridAllLF= ft_prepare_leadfield(cfg); + gridAllLF.label=allChansMEG; + + + + end + clear data; + + % ------ Load data from the second session of the same task ------ + + if is2Files + genprefix = sprintf('%s_%s', experimentid, multiscanid{2}); tmpdatafile=[genprefix,'_tmegpreproc_',sortgroupnames{iC}{1}]; + hcp_read_matlab(tmpdatafile,'data'); + + %================================================================= + %{ + % ADDHOCK REMOVING SUPINE BALANCING - TEMPORARY - REMOVE BEFORE COMMITING + tmpgrad1 = ft_datatype_sens(ft_apply_montage(data.grad, data.grad.balance.invcomp, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad1, tmpgrad1.balance.pca, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad3 = ft_datatype_sens(ft_apply_montage(tmpgrad2, tmpgrad2.balance.Supine, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad3, data.grad.balance.pca,'balancename','pca', 'keepunused', 'yes')); + tmpgrad1 = ft_datatype_sens(ft_apply_montage(tmpgrad2, data.grad.balance.invcomp, 'balancename','invcomp', 'keepunused', 'yes')); + tmpgrad1.balance.invcomp=tmpgrad1.balance.invcomp2; + tmpgrad1.balance.pca=tmpgrad1.balance.pca2; + tmpgrad1.balance.previous{1}='pca'; + tmpgrad1.balance.current='invcomp'; + tmpgrad1.balance=rmfield(tmpgrad1.balance,{'invcomp1','invcomp2','pca1','pca2'}); + tmpgrad1.balance.pca=rmfield(tmpgrad1.balance.pca,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + tmpgrad1.balance.invcomp=rmfield(tmpgrad1.balance.invcomp,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + data.grad=tmpgrad1; + %} + %================================================================= + + + alldata1B=data; clear data; + + + else + alldata1B=[]; + end + + + + else + alldata1A=tmpdata1A;clear tmpdata1A; + alldata1B=tmpdata1B;clear tmpdata1B; + end + %==================================================================== + %==================================================================== + % Up to this point data for the data group of the current contrast + % has been either loaded ot retained from previous contrast. This data + % contains all possible conditions defined in it. The trials of the + % current contrast will be extracted from this data. + %==================================================================== + %==================================================================== + + + + %==================================================================== + %==================================================================== + % Now Start processing the contrast at hand + + %------------------------------------------------------ + % Get data from constrast conditions and merge from different files + sel=sortcontrlist{1}{iC}.selection{1}; + datacntr1A=ft_selectdata(alldata1A,'rpt',sel); + if is2Files, + sel=sortcontrlist{2}{iC}.selection{1}; + datacntr1B=ft_selectdata(alldata1B,'rpt',sel); + cfg=[]; % + [indChA,indChB]=match_str(datacntr1A.label,datacntr1B.label); datacntr1A=ft_selectdata(datacntr1A,'channel',indChA); datacntr1B=ft_selectdata(datacntr1B,'channel',indChB); + datacntr1=ft_appenddata(cfg,datacntr1A,datacntr1B); clear datacntr1A datacntr2A + else + datacntr1=datacntr1A; + end + %------------------------------------------------------ + %========================================================= + % Get Spatial Filter Type; + % 0 : filter computed from covariance matrix of the average over trials + % 1 : filter computed from covariance matrix from all data points + invFiltFlag=0; + + invfiltertype=sortcontrlist{1}{iC}.invfiltertype; + if isempty(invfiltertype) + invFiltFlag=1; + else + if strcmp(invfiltertype,'avg') + invFiltFlag=0; + elseif strcmp(invfiltertype,'all') + invFiltFlag=1; + else + error(['invfiltertype can be : avg or all. Change it in contrast ']); + end + end + + %------------------------------------------------------ + %==================================================== + %==================================================== + + + %=================================================================== + % Get timing and baseline settings for current contrast + %------------------------------------------- + % --- Check Time Settings + timeperiods=[]; + isTimeWin=[]; + timepoints=[]; + Ntimepoints=[]; + Ntimeperiods=[]; + + iCond=1; + timeperiods{iCond}=sortcontrlist{1}{iC}.timeperiods{iCond}; + if ~isempty(timeperiods{iCond}) + Ntimeperiods=size(timeperiods{iCond},1); + if size(timeperiods{iCond},2)==2, % If timeperiods has 2 columns then it means that the processing is to be preformed in periods rather than in time points + isTimeWin{iCond}=1; + timepoints{iCond}=mean(timeperiods{iCond},2)'; + else % Processing to be performed at time points + isTimeWin{iCond}=0; + timepoints{iCond}=timeperiods{iCond}'; + end + Ntimepoints=length(timepoints{iCond}); + + else + isTimeWin{iCond}=0; + timepoints{iCond}=[]; % Leave empty as timeperiods to signify that the original time axis must be kept + %Ntpts=length(avg1.time); + end + + %----------------------------------------------- + % Get baseline Settings + baseline{1}=sortcontrlist{1}{iC}.baseline{1}; + hasBaseline=0; + if ~isempty(baseline{1}), + hasBaseline=1; + end + %================================================================== + + %================================================================== + + datacntrtrim1=datacntr1; clear datacntr1; + Ntrials1=length(datacntrtrim1.trial); + + %================================================================== + %Check if the datasets have fixed or variable size variables (this is important for the computation of the covariavce matrix) + isFixedLen1=[]; + + npointsMat1=cellfun(@(x) size(x,2),datacntrtrim1.trial); %,'UniformOutput','false'); + if length(unique(npointsMat1))==1, + isFixedLen1=1; + else + isFixedLen1=0; + end + + if (~isFixedLen1)&(~isempty(timeperiods{1})) + error('The trials for the specified timeperiods do not have fixed time lengths. This is not yet supported. WHat is supported is variable length trials with the entire trials used. For this case, do not set the timeperiods field in the contrast.'); + end + + %========================================================= + %--------------------------------- + % If is a time window then just sample the data so no more than 200 + % points are processed for speed. + newtimepoints=[]; + if ~isFixedLen1 + % Here it is assumed that each trial has variable length bit each + % trial is starting from the same point (i.e. Story blocks in story/math task) + + %Check how many points you get with 25 msec interval between timepoints + iniTimeStep=0.025; + maxAllowedTimes=20000; + + tmpTimeStep=iniTimeStep; + isMoreThanMax=1; + while isMoreThanMax, + uniqidealTimes=[]; + idealTimesPerTrl=[]; + NtotalIdealTimes=0; + for iTrl=1:Ntrials1, + curTrlTime=datacntrtrim1.time{:}; + totPeriodRange=[curTrlTime(1) curTrlTime(end)]; + if hasBaseline + totPeriodRange=[[min(baseline{1}(2),min(totPeriodRange))] [max(baseline{1}(2),max(totPeriodRange))]]; + end + if (totPeriodRange(1)<0)&(totPeriodRange(end)>=0) + tmpIdealTimes=[fliplr([0:-tmpTimeStep:totPeriodRange(1)]) [tmpTimeStep:tmpTimeStep:totPeriodRange(end)]]; + elseif (totPeriodRange(1)>=0)&(totPeriodRange(end)>=0) + tmpStartTime=round(totPeriodRange(1)./tmpTimeStep)*tmpTimeStep; + tmpIdealTimes=[tmpStartTime:tmpTimeStep:totPeriodRange(end)]; + elseif (totPeriodRange(1)<0)&(totPeriodRange(end)<=0) + tmpEndTime=round(totPeriodRange(end)./tmpTimeStep)*tmpTimeStep; + tmpIdealTimes=[fliplr([tmpEndTime:-tmpTimeStep:totPeriodRange(1)])]; + end + idealTimesPerTrl{iTrl}=tmpIdealTimes; + uniqidealTimes=unique([uniqidealTimes tmpIdealTimes]); + NtotalIdealTimes=NtotalIdealTimes+length(tmpIdealTimes); + end + if NtotalIdealTimes > maxAllowedTimes, + overNumRatio=NtotalIdealTimes./maxAllowedTimes; + tmpTimeStep=(ceil(ceil(1000*tmpTimeStep*overNumRatio)./5)*5)./1000; + else + isMoreThanMax=0; + end + + end + newtimepoints{1}=uniqidealTimes; + else + + if isTimeWin{1} + if ~isFixedLen1 + error('This is time windowed case but the data has no fixed length. No supported yet'); + end + iniTimeStep=0.025; + maxAllowedTimes=20000; + + tmpTimeStep=iniTimeStep; + isMoreThanMax=1; + while isMoreThanMax, + uniqidealTimes=[]; + idealTimes=[]; + NtotalIdealTimes=0; + + curTrlTime=datacntrtrim1.time{1}; + totPeriodRange=[curTrlTime(1) curTrlTime(end)]; + if hasBaseline + totPeriodRange=[[min(baseline{1}(2),min(totPeriodRange))] [max(baseline{1}(2),max(totPeriodRange))]]; + end + if (totPeriodRange(1)<0)&(totPeriodRange(end)>=0) + tmpTotalTimes=[fliplr([0:-tmpTimeStep:totPeriodRange(1)]) [tmpTimeStep:tmpTimeStep:totPeriodRange(end)]]; + elseif (totPeriodRange(1)>=0)&(totPeriodRange(end)>=0) + tmpTotalTimes=[totPeriodRange(1):tmpTimeStep:totPeriodRange(end)]; + elseif (totPeriodRange(1)<0)&(totPeriodRange(end)<0) + tmpTotalTimes=[fliplr([totPeriodRange(end):-tmpTimeStep:totPeriodRange(1)])]; + end + + for iPer=1:Ntimeperiods + [indIn]=find((tmpTotalTimes>=timeperiods{1}(iPer,1))&(tmpTotalTimes maxAllowedTimes, + overNumRatio=NtotalIdealTimes./maxAllowedTimes; + tmpTimeStep=(ceil(ceil(1000*tmpTimeStep*overNumRatio)./5)*5)./1000; + else + isMoreThanMax=0; + end + end + newtimepoints{1}=idealTimes; + else + if isempty(timepoints{1}) + iniTimeStep=0.025; + maxAllowedTimes=20000; + + tmpTimeStep=iniTimeStep; + isMoreThanMax=1; + while isMoreThanMax, + uniqidealTimes=[]; + idealTimes=[]; + NtotalIdealTimes=0; + + curTrlTime=datacntrtrim1.time{1}; + totPeriodRange=[curTrlTime(1) curTrlTime(end)]; + if hasBaseline + totPeriodRange=[[min(baseline{1}(2),min(totPeriodRange))] [max(baseline{1}(2),max(totPeriodRange))]]; + end + if (totPeriodRange(1)<0)&(totPeriodRange(end)>=0) + tmpTotalTimes=[fliplr([0:-tmpTimeStep:totPeriodRange(1)]) [tmpTimeStep:tmpTimeStep:totPeriodRange(end)]]; + elseif (totPeriodRange(1)>=0)&(totPeriodRange(end)>=0) + tmpTotalTimes=[totPeriodRange(1):tmpTimeStep:totPeriodRange(end)]; + elseif (totPeriodRange(1)<0)&(totPeriodRange(end)<0) + tmpTotalTimes=[fliplr([totPeriodRange(end):-tmpTimeStep:totPeriodRange(1)])]; + end + idealTimes=tmpTotalTimes; + idealTimes=unique(idealTimes); + NtotalIdealTimes=Ntrials1*length(idealTimes); + if NtotalIdealTimes > maxAllowedTimes, + overNumRatio=NtotalIdealTimes./maxAllowedTimes; + tmpTimeStep=(ceil(ceil(1000*tmpTimeStep*overNumRatio)./5)*5)./1000; + else + isMoreThanMax=0; + end + end + newtimepoints{1}=idealTimes; + + + else + % Here it is assumes that the baseline period is INCLUDED in + % the timepoints + + newtimepoints{1}=timepoints{1}; + NtotalIdealTimes=Ntrials1*Ntimepoints; + end + end + end + + %========================================================= + %========================================================= + % Set output type + outtype='pow'; + curCM=[]; + if isfield(sortcontrlist{1}{iC},'connemetric'), + if strcmp(sortcontrlist{1}{iC}.connemetric,'emgcoh') + outtype='emgcoh'; + end + end + + emgRefChan=[]; + if strcmp(outtype,'emgcoh') + emgRefChan=['EMG_',sortcontrlist{1}{iC}.mnemtrl{1}]; + end + + refchan = emgRefChan; + %========================================================= + %========================================================= + % Perform time frequency analysis perf Frequency and do source + % localization + %------------------------------------------------------ + Nbands=size(freqBands,1); + + %membCase='LH'; + %timeperiods{1}=[-0.6:0.015:0.6]; + + + %--- LOOP over Frequencies + for iBand=1:Nbands, + + + curWin=freqBandSmoothF(iBand)./2; + curFreq=freqBandCents(iBand); + curBand=freqBands(iBand,:); + curBandName=freqBandNames{iBand}; + + %{ + K=3; + tw=1./curWin; + fw=curWin; + + K = 2*tw*fw-1; + fw=(K+1)./(2*tw); + tw=(K+1)./(2*fw); + %} + %========================================================= + % Define freq analysis setting and do freq analysis + if curFreq<30 + K=1; + else + K=3; + end + tw=min(3./curWin,0.5); + fw=floor((K+1)./(2*tw)); + + %------------------------------------ + % Check padding + trlTimeRangeMax=max(cellfun(@(x) diff(x([1 end])), datacntrtrim1.time )); + if trlTimeRangeMax >8 + tfreqPad=8*(ceil(trlTimeRangeMax./8)); + else + tfreqPad=8; + end + + %-------------------------------------- + % Perform Time Freq + cfg=[]; + cfg.output='fourier'; + cfg.pad=tfreqPad; + cfg.method='mtmconvol'; + cfg.foi = curFreq; %vector 1 x numfoi, frequencies of interest + cfg.taper = 'hanning'; %'dpss', 'hanning' or many others, see WINDOW (default = 'dpss') + cfg.tapsmofrq = fw; + cfg.t_ftimwin = tw; %vector 1 x numfoi, length of time window (in seconds) + cfg.toi = newtimepoints{1};% timeperiods{1}; %vector 1 x numtoi, the times on which the analysis windows + cfg.keeptrials='yes'; + tmpfreq=ft_freqanalysis(cfg,datacntrtrim1); + + channelsMEGEMG=tmpfreq.label; + channelsMEG=ft_channelselection('MEG',tmpfreq.label); + + + %================================================================= + % Compute Total ross spectral density + if (~isFixedLen1) + %--------------------------------------------------------------- + % If trial dont have a fixed length compute cross spectral + % density from all the data points + tmpTotFour=reshape(squeeze(tmpfreq.fourierspctrm),length(tmpfreq.label),Ntrials1*length(newtimepoints{1})); + [indNan1,indNan2]=find(isnan(tmpTotFour)); + tmpTotFour(:,unique(indNan2))=[]; + tmpTotSpec=tmpTotFour*ctranspose(tmpTotFour)./Ntrials1*length(newtimepoints{1}); clear tmpTotFour; + tmpspec=ft_checkdata(tmpfreq,'cmbrepresentation','fullfast'); clear tmpfreq; + tmpspecavg=ft_selectdata(tmpspec,'avgovertime','yes'); + tmpspecavg.crossspctrm=tmpTotSpec; clear tmpTotSpec; + + specavg4src=tmpspecavg; + specavg4src=rmfield(specavg4src,'time'); + specavg4src.dimord='chan_chan_freq'; + %--------------------------------------------------------------- + % If Baseline is given compute cross spec for baseline. Here is + % is assumed the the baseline is at the beginning of the trial + % so all trials will contain the baseline + if hasBaseline + indActFirst=find(tmpspecavg.time>baseline{1}(2),1,'first'); + indActLast=length(tmpspecavg.time); + indBaseFirst=find(tmpspecavg.time>=baseline{1}(1),1,'first'); + indBaseLast=find(tmpspecavg.time<=baseline{1}(2),1,'last'); + timeActFirst=tmpspecavg.time(indActFirst); + timeActLast=tmpspecavg.time(indActLast); + timeBaseFirst=tmpspecavg.time(indBaseFirst); + timeBaseLast=tmpspecavg.time(indBaseLast); + else + indActFirst=1; + indActLast=length(tmpspecavg.time); + indBaseFirst=nan; + indBaseLast=nan; + timeActFirst=tmpspecavg.time(indActFirst); + timeActLast=tmpspecavg.time(indActLast); + timeBaseFirst=nan; + timeBaseLast=nan; + end + if hasBaseline + specavg4src_base=ft_selectdata(tmpspec,'toilim',[timeBaseFirst timeBaseLast],'avgovertime','yes'); + specavg4src_base=rmfield(specavg4src_base,'time'); + specavg4src_base.dimord='chan_chan_freq'; + else + specavg4src_base=nan; + end + + + else + %------------------------------------------------ + % If trial have fixed length then just average for each time + % point in the trial first + tmpspec=ft_checkdata(tmpfreq,'cmbrepresentation','fullfast'); clear tmpfreq; + + %------------------------------------------------ + % Compute total cross spectral density + tmpspecavg=ft_selectdata(tmpspec,'avgovertime','yes'); + specavg4src=tmpspecavg; + specavg4src=rmfield(specavg4src,'time'); + specavg4src.dimord='chan_chan_freq'; + %--------------------------------------------------------- + % Compute cross spectral density for baseline + if hasBaseline + indActFirst=find(tmpspec.time>baseline{1}(2),1,'first'); + indActLast=length(tmpspec.time); + indBaseFirst=find(tmpspec.time>=baseline{1}(1),1,'first'); + indBaseLast=find(tmpspec.time<=baseline{1}(2),1,'last'); + timeActFirst=tmpspec.time(indActFirst); + timeActLast=tmpspec.time(indActLast); + timeBaseFirst=tmpspec.time(indBaseFirst); + timeBaseLast=tmpspec.time(indBaseLast); + else + indActFirst=1; + indActLast=length(tmpspec.time); + indBaseFirst=nan; + indBaseLast=nan; + timeActFirst=tmpspec.time(indActFirst); + timeActLast=tmpspec.time(indActLast); + timeBaseFirst=nan; + timeBaseLast=nan; + end + if hasBaseline + specavg4src_base=ft_selectdata(tmpspec,'toilim',[timeBaseFirst timeBaseLast],'avgovertime','yes'); + specavg4src_base=rmfield(specavg4src_base,'time'); + specavg4src_base.dimord='chan_chan_freq'; + else + specavg4src_base=nan; + end + + end; + + %----------------------------------------- + % Do source analysis + srcCfg=[]; + %srcCfg.latency=timeperiods{1}([1 2]); + srcCfg.realfilter='yes'; + srcCfg.vol=vol; + srcCfg.grad=grad; + srcCfg.method='dics'; + srcCfg.frequency = curFreq; + srcCfg.fixedori='yes'; + srcCfg.feedback='text'; + srcCfg.lambda='100%'; + srcCfg.projectnoise='yes'; + srcCfg.keepfilter='yes'; + srcCfg.keepleadfield='yes'; + srcCfg.keepmom='no'; + %srcCfg.refchan = ['EMG_LH']; + + [indA,indB]=match_str(channelsMEG,gridAllLF.label); + + NsrcIn=length(gridAllLF.inside); + Nsrc=size(gridAllLF.pos,1); + + gridCase=gridAllLF; + gridCase.leadfield(gridCase.inside)=cellfun(@(x,y) x(y,:),gridAllLF.leadfield(gridAllLF.inside),repmat({indB},1,NsrcIn),'UniformOutput',false); + + srcCfg.grid=gridCase; + disp('...beamforming...'); + + %[indA,indB]=match_str(specavg4src.label,channelsMEG); + + if strcmp(outtype,'emgcoh') + srcCfg.refchan=refchan; + end + sourceLocAll=ft_sourceanalysis(srcCfg,specavg4src); + clear specavg4src; + srcCfg.filter=sourceLocAll.avg.filter; % any subsequent localization is performed with computed filters + + %-------------------------------------------------------------------- + % Assign output source structure + sourceLocOut=sourceLocAll; + sourceLocOut.freq=curFreq; + sourceLocOut.band=curBand; + sourceLocOut.bandname=curBandName; + + if (~isFixedLen1), + totalMetric=sourceLocAll.avg.pow; + else + + if (isTimeWin{1}) + totalMetric=nan(Nsrc,Ntimeperiods); + + for iPer=1:Ntimeperiods + perspecavg=ft_selectdata(tmpspec,'toilim',timeperiods{1}(iPer,:),'avgovertime','yes'); + perspecavg=rmfield(perspecavg,'time'); + perspecavg.dimord='chan_chan_freq'; + tmpSourceLoc=ft_sourceanalysis(srcCfg,perspecavg);clear perspecavg; + totalMetric(:,iPer)=tmpSourceLoc.avg.pow; + end + sourceLocOut.time=mean(timeperiods{1},2); + sourceLocOut.period=timeperiods{1}; + + else + if ~isempty(timepoints{1}) + + NelecTot=length(channelsMEGEMG); + dummyInd=1:NelecTot; + [indA,indB]=match_str(tmpspec.label,channelsMEG); + dummyInd(indA)=[]; + indMEG=indA; + indEMG=dummyInd; + channelsEMG=tmpspec.label(indEMG); + + + NelecMEG=length(indMEG); + NelecEMG=length(indEMG); + + totFilter=reshape([sourceLocAll.avg.filter{sourceLocAll.inside}],NelecMEG,NsrcIn)'; + totFilterT=totFilter'; + + + Ntimes=length(tmpspec.time); + + %---- Loop over time and project cross spec density matrix --------- + + totalMetric=nan(Nsrc , Ntimeperiods); + + tic; + for iTime=1:Ntimes, + iTime + tmpSens_X=squeeze(tmpspec.crsspctrm(:,:,:,iTime)); + tmpSensM_X=tmpSens_X(indMEG,indMEG); + if strcmp(outtype,'pow') + tmpSrc_X=totFilter*tmpSensM_X*(totFilterT); clear tmpSensM_X; + tmpSrc_A=real(diag(tmpSrc_X))'; clear tmpSrc_X; + totalMetric(sourceLocAll.inside,iTime)=tmpSrc_A; + + elseif strcmp(outtype,'emgcoh') + + tmpSensE_X=tmpSens_X(indEMG,indEMG); + tmpSensEM_X=tmpSens_X(indEMG,indMEG); + %tmpSensME_X=tmpSens_X(indMEG,indEMG); clear tmpSens_X; + + + tmpSrc_X=totFilter*tmpSensM_X*(totFilterT); clear tmpSensM_X; + tmpSrc_A=real(diag(tmpSrc_X))'; clear tmpSrc_X; + tmpSensE_A=real(diag(tmpSensE_X))'; clear tmpSensE_X; + tmpSrcEM_X=tmpSensEM_X*totFilterT; clear tmpSensEM_X; + %tmpSrcME_X=totFilter*tmpSensME_X; + + refchanInd = match_str(channelsEMG,refchan); + + + totalMetric(sourceLocAll.inside,iTime)=(abs(tmpSrcEM_X(refchanInd,:)))./(sqrt(tmpSrc_A).*sqrt(tmpSensE_A(refchanInd))); + + clear tmpSrcEM_X tmpSensE_A ; + + + end + end + + sourceLocOut.time=mean(timeperiods{1},2); + sourceLocOut.period=timeperiods{1}; + else + sourceLocOut.period='all'; + if strcmp(outtype,'pow') + totalMetric=sourceLocOut.avg.pow; + elseif strcmp(outtype,'emgcoh') + totalMetric=sourceLocOut.avg.coh; + sourceLocOut.avg=rmfield(sourceLocOut.avg,'coh'); + end + + + end + end + + end + clear sourceLocAll; + if strcmp(outtype,'pow') + sourceLocOut.avg.pow=totalMetric; + elseif strcmp(outtype,'emgcoh') + sourceLocOut.avg=rmfield(sourceLocOut.avg,'pow'); + sourceLocOut.avg.emgcoh=totalMetric; + end + + + %-------------------------------------------------------------------- + %Assign baseline source structure if baseline is given + if hasBaseline + if strcmp(outtype,'emgcoh') + srcCfg.refchan=refchan; + sourceLocBase=ft_sourceanalysis(srcCfg,specavg4src_base); + sourceLocBase.avg.emgcoh=sourceLocBase.avg.coh; + sourceLocBase.avg=rmfield(sourceLocBase.avg,{'coh','pow'}); + else + sourceLocBase=ft_sourceanalysis(srcCfg,specavg4src_base); + + end + + sourceLocBase.time=mean(baseline{1}); + sourceLocBase.period=baseline{1}; + sourceLocBase.freq=curFreq; + sourceLocBase.band=curBand; + sourceLocBase.bandname=curBandName; + + else + sourceLocBase=[]; + end + clear tmpspec tmpspecavg specavg4src specavg4src_base; + %========================================== + % Now the sourceLocOut should contain the source Localisation results for the desired time points/ periods + % and if baseline provided sourceLocBase should have the baseline power + % ============================================================ + %% PLOT SOME FIGURES + % If 3D plot on tweaked spm8's T1.nii + % If 2D plot on the subject's surface in Head Space (Shouldn't we use the freesurfer template or another template of cortex?) + % + + %---------------------------------- + % Need to select a time period to plot + source2Plot=sourceLocOut; + if ~isFixedLen1 % This case power has been computed from the entire data + time2plot=[nan nan]; + source2Plot=sourceLocOut; + else + if isTimeWin{1}, + if Ntimeperiods>1 % If more than one time periods find the first one with time >0 + indFirst=find(sourceLocOut.time>0,1,'first'); + if isempty(indFirst), % if not higher than 0 then take the first + indFirst=1; + end + %source2Plot=sourceLocOut; + if strcmp(outtype,'emgcoh') + source2Plot.avg.pow=source2Plot.avg.emgcoh; + end + source2Plot.time=sourceLocOut.time(indFirst); + source2Plot.period=sourceLocOut.period(indFirst,:); + source2Plot.avg.pow=sourceLocOut.avg.pow(:,indFirst); + time2plot=source2Plot.period; + else + time2plot=sourceLocOut.period; + source2Plot=sourceLocOut; + if strcmp(outtype,'emgcoh') + source2Plot.avg.pow=source2Plot.avg.emgcoh; + end + + end + + else + if ~isempty(timepoints{1}) + % in Time Points. Assuming time has a part >0 relative to reference. + % Plotting what happens in 350 msec + indFirst=find(sourceLocOut.time>0,1,'first'); + if isempty(indFirst), % if not higher than 0 then take the first + indFirst=1; + end + timeStart=sourceLocOut.time(indFirst); + timeEnd=timeStart+0.350; + indEnd=find(sourceLocOut.time>timeEnd,1,'last'); + + %source2Plot=sourceLocOut; + if strcmp(outtype,'emgcoh') + source2Plot.avg.pow=source2Plot.avg.emgcoh; + end + source2Plot.time=mean([timeStart timeEnd]); + source2Plot.period=[timeStart timeEnd]; + source2Plot.avg.pow=nanmean(source2Plot.avg.pow(:,indFirst:indEnd),2); + time2plot=source2Plot.period; + else + time2plot=[nan nan]; + if strcmp(outtype,'emgcoh') + source2Plot.avg.pow=source2Plot.avg.emgcoh; + end + end + end + end + + + %--------------------------------------- + % Just set the baseline source + source2PlotBase=sourceLocBase; + if hasBaseline + if strcmp(outtype,'emgcoh') + source2PlotBase.avg.pow=source2PlotBase.avg.emgcoh; + end + end + + %--------------------------------------- + % Do the plot + if strcmp(gridtype,'3D') + source2Plot.pos=gridStand.pos; + plotsource3D(source2Plot,mriTempl,invFiltFlag,experimentid, scanmnem,sortcontrlist{1}{iC}, curBandName, time2plot,source2PlotBase); + elseif strcmp(gridtype,'2D') + plotsource2D(source2Plot,invFiltFlag,experimentid, scanmnem,sortcontrlist{1}{iC},curBandName,time2plot,source2PlotBase); + end + + % ============================================================ + %% SAVE results + + %--- Save the Source results + source=rmfield(sourceLocOut,{'cfg','freq'}); % save some space + %------------------ + if strcmp(gridtype,'2D') + source.brainstructure=sourcemodel2d.brainstructure; + source.brainstructurelabel=sourcemodel2d.brainstructurelabel; %{'CORTEX_LEFT' ; 'CORTEX_RIGHT'}; + end + %------------------ + if isfield(source,'time') + source.dimord='pos_time'; + sourcetype='dtseries'; + else + source.dimord='pos'; + sourcetype='dscalar'; + end + + if strcmp(outtype,'emgcoh') + source.emgcoh=source.avg.emgcoh; + source.avg=rmfield(sourceLocOut.avg,'emgcoh'); % save some space + outparameter='emgcoh'; + + else + %========================================== + % Apply Weighting to the data so that the colorscale works in Workbench + % The scaling is (10^21)^2 the square stands for power + scaleWeight=(10^21)^2; + source.power=scaleWeight.*source.avg.pow; + %========================================== + source.avg=rmfield(sourceLocOut.avg,'pow'); % save some space + outparameter='power'; + end + saveFnameData=[saveExtraDir,experimentid,'_',scanmnem,'_',sortcontrlist{1}{iC}.mnemprint,'_[FB-',curBandName,']']; + + + %{ + % --- Save the baseline + if ~isempty(sourceLocBase) + tmpsource=rmfield(sourceLocBase,'cfg'); % save some space + if isfield(tmpsource,'time') + tmpsource.dimord='pos_time'; + tmpsourcetype='dtseries'; + else + tmpsource.dimord='pos'; + tmpsourcetype='dscalar'; + end + + if strcmp(outtype,'emgcoh') + tmpsource.baselineemgcoh=tmpsource.avg.emgcoh; + tmpsource.avg=rmfield(sourceLocBase.avg,'emgcoh'); % save some space + outparameter='baselineemgcoh'; + source.baselineemgcoh=tmpsource.baselineemgcoh; + + else + tmpsource.baselinepower=tmpsource.avg.pow; + tmpsource.avg=rmfield(sourceLocBase.avg,'pow'); % save some space + outparameter='baselinepower'; + source.baselinepower=tmpsource.baselinepower; + end + + source.baselinetime=sourceLocBase.time; + source.baselineperiod=sourceLocBase.period; + + + + % save it as a cifti file + hcp_write_cifti([saveFnameData '.' outparameter],tmpsource, 'parameter',outparameter, 'type', tmpsourcetype,'precision','double'); + + clear tmpsource; + + end + %} + + + %Save in Mat + hcp_write_matlab(saveFnameData,'source'); clear sourceLocOut source2Plot sourceLocOutBase source2PlotBase; + % save it as a cifti file + hcp_write_cifti([saveFnameData,'.',outparameter],source, 'parameter', outparameter, 'type', sourcetype,'precision','double'); clear source; + + + end + clear datacntrtrim1; + + % ============================================================ + %% VERY IMPORTANT - update previoius data group variable for next iteration + + prevGroups=sortgroupnames{iC}; + + + +end + + + +end +%--- END OF MAIN -------------------------- +%===================================================== +%===================================================== +%===================================================== +function[]=plotsource3D(source2Plot,mri2interp,invFiltType,experimentid, scanmnem,curContrast,curBandName, timeofplot,source2PlotBase) +global saveExtraDir; + + +source2Plot=ft_convert_units(source2Plot,'mm'); +dumSrc=source2Plot;clear source2Plot; +%------------------------------------------------------------------ +% If baseline provided then subtract from condition source power +if ~isempty(source2PlotBase) + Ntimepoints=size(dumSrc.avg.pow,2); + dumSrc.avg.pow=dumSrc.avg.pow-repmat(source2PlotBase.avg.pow,1,Ntimepoints); + basetimeofplot=source2PlotBase.period; +else + basetimeofplot=[nan nan]; +end + +%---------------------------------------------------------------- +% Interpolate with MRI + + +intCfg=[]; +intCfg.parameter = 'avg.pow'; +[dumSrcInterp] = ft_sourceinterpolate(intCfg,dumSrc, mri2interp); + +%---------------------------------------------------------------- +% Define the plot color limits +[maxabsVal,maxabsInd]=max(abs(dumSrc.avg.pow(dumSrc.inside))); +maxabsIndTot=dumSrc.inside(maxabsInd); + +[minVal,minInd]=min((dumSrc.avg.pow(dumSrc.inside))); +[maxVal,maxInd]=max((dumSrc.avg.pow(dumSrc.inside))); +if sign(maxVal)~=sign(minVal) + subclim=0.75*maxabsVal*[-1 1]; + %subAlim=0.05*maxabsVal*[-1 1]; +else + meanVal=mean([minVal maxVal]); + demMinVal=minVal-meanVal; + demMaxVal=maxVal-meanVal; + subclim=meanVal+0.75.*[demMinVal demMaxVal]; + %subAlim=meanVal+0.05.*[demMinVal demMaxVal]; +end + +%subclim=0.75*maxabsVal*[-1 1]; + + +%--------------------------------------------------------- +% Plotting settings +plotCfg=[]; +plotCfg.nslices = 25; +plotCfg.method = 'slice'; +plotCfg.funcolormap ='jet'; +plotCfg.funcolorlim = subclim; +%plotCfg.opacitylim = subAlim; +%plotCfg.maskparameter = 'avg.pow'; +plotCfg.funparameter = 'avg.pow'; + +ft_sourceplot(plotCfg,dumSrcInterp); +h1=gcf; + +clear dumSrc dumSrcInterp; + + +set(h1,'papertype','A4'); +set(h1,'paperunits','centimeters') +papersize=get(h1,'PaperSize'); +paperposition = [1 1 papersize-1 ]; +set(h1,'papersize',papersize); +set(h1,'paperposition',paperposition); +set(h1,'position',[10 10 15*papersize]); + +fax(1)=gca; +set(fax(1),'position',[0.25 0.1 0.5 0.5]); + +Toph1=axes(); +set(Toph1,'position',[0.1 0.8 0.8 0.19]);axis off +dispStringTop1=sprintf('%s',[' experimentid: ',regexprep(experimentid,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' scan: ',regexprep(scanmnem,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' contrast: ',regexprep(curContrast.mnemprint,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Freq Band: ',curBandName]); +%if invFiltType>0, +% dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Filter type: ',curContrast.invfiltertype]); +% dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Contrast Operation: ',curContrast.operation]); +%end +if ~isempty(timeofplot) + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: ',num2str(timeofplot(1)),' to ',num2str(timeofplot(2))]); +else + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: all ']); +end +%if invFiltType==0, +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Baseline period: ',num2str(basetimeofplot(1)),' to ',num2str(basetimeofplot(2))]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Baseline operation: ',num2str(curContrast.baselinetype)]); +%end +htTop1=text(0,0.2,dispStringTop1); +set(htTop1,'Fontsize',10) + +saveFnameImage=[saveExtraDir,experimentid,'_',scanmnem,'_',curContrast.mnemprint,'_[FB-',curBandName,']_plot.png']; +disp('Saving the figure'); +hcp_write_figure(saveFnameImage, h1); +disp('Done Saving'); +close(h1); + +end + +%===================================================== +%===================================================== +%===================================================== +%===================================================== +function[]=plotsource2D(source2Plot,invFiltType,experimentid, scanmnem,curContrast,curBandName,timeofplot,source2PlotBase) +global saveExtraDir; + +dumSrc=source2Plot;clear source2Plot; +%------------------------------------------------------------------ +% If baseline provided then subtract from condition source power +if ~isempty(source2PlotBase) + Ntimepoints=size(dumSrc.avg.pow,2); + dumSrc.avg.pow=dumSrc.avg.pow-repmat(source2PlotBase.avg.pow,1,Ntimepoints); + basetimeofplot=source2PlotBase.period; +else + basetimeofplot=[nan nan]; +end + + +%-------------------------------------------------------- +% Define plot color limits +[maxabsVal,maxabsInd]=max(abs(dumSrc.avg.pow(dumSrc.inside))); +maxabsIndTot=dumSrc.inside(maxabsInd); + +[minVal,minInd]=min((dumSrc.avg.pow(dumSrc.inside))); +[maxVal,maxInd]=max((dumSrc.avg.pow(dumSrc.inside))); +if sign(maxVal)~=sign(minVal) + subclim=0.75*maxabsVal*[-1 1]; +else + meanVal=mean([minVal maxVal]); + demMinVal=minVal-meanVal; + demMaxVal=maxVal-meanVal; + subclim=meanVal+0.75.*[demMinVal demMaxVal]; +end + +%subclim=0.75*maxabsVal*[-1 1]; + + +cfg = []; +cfg.method = 'surface'; +cfg.funparameter = 'avg.pow'; +cfg.funcolorlim=subclim; +ft_sourceplot(cfg,dumSrc); +figsurf=gcf; +axsurf=gca; + +clear dumSrc; + +h1=figure; +set(h1,'papertype','A4'); +set(h1,'paperunits','centimeters') +papersize=get(h1,'PaperSize'); +paperposition = [1 1 papersize-1 ]; +set(h1,'papersize',papersize); +set(h1,'paperposition',paperposition); +set(h1,'position',[10 10 15*papersize]); + +fxa1=axes('Position',[0.1 0.3 0.4 0.3]);axis off; +fxa2=axes('Position',[0.5 0.3 0.4 0.3]);axis off; +fxa3=axes('Position',[0.1 0 0.4 0.3]);axis off; +fxa4=axes('Position',[0.5 0 0.4 0.3]);axis off; + + +axes(fxa1); +curchild=get(axsurf,'children'); +copyobj(curchild([3 2 1]),fxa1); + +view(-90,0); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); +hcol1=colorbar('West'); +set(hcol1,'Position',[[0.05 0.3 0.05 0.28]]); + +axes(fxa2); +copyobj(curchild(1:2),fxa2); +view(-90,90); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); + +axes(fxa3); +curchild=get(axsurf,'children'); +copyobj(curchild(1:2),fxa3); +view(180,0); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); + +axes(fxa4); +copyobj(curchild(1:2),fxa4); +view(0,0); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); + +close(figsurf); + + +%=============================================================================== +Toph1=axes(); +set(Toph1,'position',[0.1 0.8 0.8 0.19]);axis off +dispStringTop1=sprintf('%s',[' experimentid: ',regexprep(experimentid,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' scan: ',regexprep(scanmnem,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' contrast: ',regexprep(curContrast.mnemprint,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Freq Band: ',curBandName]); +%if invFiltType>0, +% dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Filter type: ',curContrast.invfiltertype]); +% dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Contrast Operation: ',curContrast.operation]); +%end +if ~isempty(timeofplot) + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: ',num2str(timeofplot(1)),' to ',num2str(timeofplot(2))]); +else + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: all ']); +end +%if invFiltType==0, +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Baseline period: ',num2str(basetimeofplot(1)),' to ',num2str(basetimeofplot(2))]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Baseline operation: ',num2str(curContrast.baselinetype)]); + +%end +htTop1=text(0,0.2,dispStringTop1); +set(htTop1,'Fontsize',10) + +saveFnameImage=[saveExtraDir,experimentid,'_',scanmnem,'_',curContrast.mnemprint,'_[FB-',curBandName,']_plot.png']; +disp('Saving the figure'); +hcp_write_figure(saveFnameImage, h1); +disp('Done Saving'); +close(h1); + +end + diff --git a/analysis_functions/hcp_srcavglcmv_contrasts.m b/analysis_functions/hcp_srcavglcmv_contrasts.m new file mode 100644 index 0000000..8b11ce5 --- /dev/null +++ b/analysis_functions/hcp_srcavglcmv_contrasts.m @@ -0,0 +1,1079 @@ +function[outStatus]=hcp_srcavglcmv_contrasts(inCfg) + +% This function loads time frequency data and computes its trial average as well +% as the average of its planar gradient +% outdatafile is the file where the averaged data will be save +% outinfofile is the ZIP file where any plotted figures will be saved + +% Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) +% +% This file is part of megconnectome. +% +% megconnectome 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. +% +% megconnectome 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 megconnectome. If not, see . +outStatus=-1; +global saveExtraDir; % This variable is externally set by the user or by default to the pipelinedir and contains the directory where the pipeline results will be saved + +%================================================ +% Get inputs +if isfield(inCfg,'savedir') + saveExtraDir=inCfg.savedir; +else + saveExtraDir=[]; +end + +subjectid=inCfg.subjectid; +experimentid=inCfg.experimentid; % Experiment ID +multiscanid=inCfg.multiscanid; % Cell with the scan id of both files. They shoudl be in scannning order +contrastlist=inCfg.contrastlist; % Cell with list of contrasts +anatomydir = inCfg.anatomydir; % Directory where anatomy file are source space models are located. +gridtype=inCfg.gridtype; % Can be '3D'(using 8mm) or '2D'% + +%=================================================================== +% Set basic filtering settings for sensor level preprocessing + +% ----------------- +% Settings for filtering when localization is gonna be based on the avg of +% trials - ERFs are clearer when data is filtered above 40 Hz +flowcfg_avg=[]; +flowcfg_avg.hpfilter='yes'; +flowcfg_avg.hpfreq=[1]; +flowcfg_avg.hpfiltord=4; + +fhighcfg_avg=[]; +fhighcfg_avg.lpfilter='yes'; +fhighcfg_avg.lpfreq=[40]; + +% ----------------- +% Settings for filtering when localization is gonna be based on all the trial data +% Keeping Frequencies up to 100 Hz +flowcfg_all=[]; +flowcfg_all.hpfilter='yes'; +flowcfg_all.hpfreq=[0.5]; +flowcfg_all.hpfiltord=4; + +fhighcfg_all=[]; +fhighcfg_all.lpfilter='yes'; +fhighcfg_all.lpfreq=[100]; +%===================================================================== +%================================================ +% Get basic information about input contrasts +Nfiles=length(contrastlist); % Number of files to be read for a given task. Should be 2 for each Task Type +Ncontr=length(contrastlist{1}); % Check how many contrasts from the first file's contrasts + +contrnames=[]; +datagroups=[]; +for iC=1:Ncontr, + contrnames{iC}=contrastlist{1}{iC}.mnemprint; + datagroups=unique([datagroups,contrastlist{1}{iC}.lockmode]); +end + +Ngroups=length(datagroups); + +%============================================================= +% Sort contralist list so that contrasts with the same datagroup of the +% first condition are in sequence. This is to avoid reloading data files +% all the time +sortcontrlist=[]; +countcontr=1; +for iGroup=1:Ngroups + for iC=1:Ncontr, + if strcmp(contrastlist{1}{iC}.lockmode{1},datagroups{iGroup}), + sortcontrlist{1}{countcontr}=contrastlist{1}{iC}; + if Nfiles==2 + sortcontrlist{2}{countcontr}=contrastlist{2}{iC}; + end + countcontr=countcontr+1; + end + end +end + +sortcontrnames=[]; +sortgroupnames=[]; +isCompCntr=[]; % It says if it is a comparison between conditions +isDifGroups=[]; % It says if there are 2 different groups in each contrast +for iC=1:Ncontr, + sortcontrnames{iC}=sortcontrlist{1}{iC}.mnemprint; + sortgroupnames{iC}=sortcontrlist{1}{iC}.lockmode; + isCompCntr(iC,1)=length(sortgroupnames{iC})-1; + isDifGroups(iC,1)=length(unique(sortgroupnames{iC}))-1; +end +if Nfiles==2 + is2Files=1; +else + is2Files=0; +end +%============================================================= +%============================================================= +%============================================================= +%% LOOP OVER CONTRASTS +gridAllLF=[]; % Initialize variable where the source space with LeadFields will be placed +prevGroups={'' ''}; +for iC=1:Ncontr + + %===================================================================== + % Srcavglcmv is only computing single condition contrasts. Check and + % if comparison between 2 different conditions the skip to next + if isCompCntr(iC), + disp(['Srcavglvmc pipeline is only computing single condition contrasts , NOT between different conditions. Skipping contrast: ', sortcontrnames{iC}]); + continue; + end + %-------------------------------------------------------------------- + + tmpTok=tokenize(multiscanid{1},'-'); + scanmnem=tmpTok{2}; + %------- The following is just for the cases where the suffix "_Run1 or + %Run2" has been added to the scanid in order to differentiate between 2 + %different runs of the same paradigm. i.e. The way Robert has saved data in + %his database for subject CP10168. + indRunStr=regexp(scanmnem,'_Run'); + if ~isempty(indRunStr), + scanmnem=scanmnem(1:indRunStr(1)-1); + end + + + %============================================================= + % Load the time data for the corresponding group and from both + % files + + %--------------------------------------------------------- + % Check if the current data group is the same as the one loaded for + % the preceeding processed contrast + prevMatchIndx=[]; + tmpIndx=find(strcmp(sortgroupnames{iC},prevGroups)); + if ~isempty(tmpIndx) + prevMatchIndx{1}=tmpIndx(1); + else + prevMatchIndx{1}=[]; + end + %--------------------------------------------------------- + + % if the same don't load anything else load data group for current contrast + if ~isempty(prevMatchIndx{1}) + eval(['tmpdata1A=alldata',num2str(prevMatchIndx{1}),'A;']); + eval(['tmpdata1B=alldata',num2str(prevMatchIndx{1}),'B;']); + else + tmpdata1A=[]; + tmpdata1B=[]; + end + + + %---If contrast from new datagroup then load data ---------------- + if isempty(tmpdata1A) + genprefix = sprintf('%s_%s', experimentid, multiscanid{1}); tmpdatafile=[genprefix,'_tmegpreproc_',sortgroupnames{iC}{1}]; + hcp_read_matlab(tmpdatafile,'data'); + + %================================================================= + %{ + % ADDHOCK REMOVING SUPINE BALANCING - TEMPORARY - REMOVE BEFORE COMMITING + tmpgrad1 = ft_datatype_sens(ft_apply_montage(data.grad, data.grad.balance.invcomp, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad1, tmpgrad1.balance.pca, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad3 = ft_datatype_sens(ft_apply_montage(tmpgrad2, tmpgrad2.balance.Supine, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad3, data.grad.balance.pca,'balancename','pca', 'keepunused', 'yes')); + tmpgrad1 = ft_datatype_sens(ft_apply_montage(tmpgrad2, data.grad.balance.invcomp, 'balancename','invcomp', 'keepunused', 'yes')); + tmpgrad1.balance.invcomp=tmpgrad1.balance.invcomp2; + tmpgrad1.balance.pca=tmpgrad1.balance.pca2; + tmpgrad1.balance.previous{1}='pca'; + tmpgrad1.balance.current='invcomp'; + tmpgrad1.balance=rmfield(tmpgrad1.balance,{'invcomp1','invcomp2','pca1','pca2'}); + tmpgrad1.balance.pca=rmfield(tmpgrad1.balance.pca,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + tmpgrad1.balance.invcomp=rmfield(tmpgrad1.balance.invcomp,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + data.grad=tmpgrad1; + %} + %================================================================= + alldata1A=data; + Fsample=data.fsample; + if isempty(gridAllLF), % If this is the first processed contrast then the grid variable is empty and the grid should be loaded and processed for inverse solution. + %-------------------------- + % At the moment the grad is taken from the first scan and it is assumed that the + % subject has not moved significantly in the other one. Maybe a check should be made and if the difference is above a threshold then a filter should be derived for each file separately; + + grad=ft_convert_units(data.grad,'cm'); + fileGrid2D=[anatomydir,'/',experimentid,'_anatomy_sourcemodel_2d.mat']; % Subject's 2D cortical sheet source model + fileGrid3D=[anatomydir,'/',experimentid,'_anatomy_sourcemodel_3d8mm.mat']; % Subject's 3D volumetric source model with 8mm resolution + fileGrid3DStandard=['standard_sourcemodel3d8mm']; % template 3D grid + %fileAnat=[anatomydir,'/',experimentid,'_anatomy_anatomical.nii']; % Subject's MRI + fileAnatTemplMcGill='mni_icbm152_t1_tal_nlin_sym_09a.nii'; % Template T1 MRI from McGill + fileVol=[anatomydir,'/',experimentid,'_anatomy_headmodel.mat']; % Subject's brain volume + + mriTempl=ft_read_mri(fileAnatTemplMcGill); + + %mriSubj=ft_read_mri(fileAnat); + if strcmp(gridtype,'2D') + hcp_read_matlab(fileGrid2D,'sourcemodel2d'); + grid=ft_convert_units(sourcemodel2d,'cm'); + elseif strcmp(gridtype,'3D') + hcp_read_matlab(fileGrid3D,'sourcemodel3d'); + grid=ft_convert_units(sourcemodel3d,'cm'); + hcp_read_matlab(fileGrid3DStandard,'sourcemodel'); + gridStand=sourcemodel;% already in cm + end + + hcp_read_matlab(fileVol,'headmodel'); + vol=ft_convert_units(headmodel,'cm'); + + %----- Create Leadfields --------------------------------------- + allChansMEG=ft_channelselection({'MEG'},grad.label); + cfg=[]; + cfg.grid=grid; % Grid for Individual's Brain in MEG sensor space + cfg.vol=vol; + cfg.grad=grad; + cfg.reducerank = 2; %(default = 3 for EEG, 2 for MEG) + cfg.normalize = 'yes' ; %Normalise Leadfield: 'yes' for beamformer + cfg.normalizeparam = 1; %depth normalization parameter (default = 0.5). + cfg.feedback='no'; + cfg.channel=allChansMEG; + if strcmp(gridtype,'2D') %JUST TO MAKE SURE ENTIRE CORTICAL SHEET IN SOURCE SPACE + cfg.inwardshift=-1; + end + gridAllLF= ft_prepare_leadfield(cfg); + gridAllLF.label=allChansMEG; + + + + end + clear data; + + + %----- As the data was just loaded apply filtering at sensor level data + %alldata1A=ft_preprocessing(flowcfg,alldata1A); + %alldata1A=ft_preprocessing(fhighcfg,alldata1A); + + + % ------ Load data from the second session of the same task ------ + + if is2Files + genprefix = sprintf('%s_%s', experimentid, multiscanid{2}); tmpdatafile=[genprefix,'_tmegpreproc_',sortgroupnames{iC}{1}]; + hcp_read_matlab(tmpdatafile,'data'); + + %================================================================= + %{ + % ADDHOCK REMOVING SUPINE BALANCING - TEMPORARY - REMOVE BEFORE COMMITING + tmpgrad1 = ft_datatype_sens(ft_apply_montage(data.grad, data.grad.balance.invcomp, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad1, tmpgrad1.balance.pca, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad3 = ft_datatype_sens(ft_apply_montage(tmpgrad2, tmpgrad2.balance.Supine, 'inverse', 'yes', 'keepunused', 'yes')); + tmpgrad2 = ft_datatype_sens(ft_apply_montage(tmpgrad3, data.grad.balance.pca,'balancename','pca', 'keepunused', 'yes')); + tmpgrad1 = ft_datatype_sens(ft_apply_montage(tmpgrad2, data.grad.balance.invcomp, 'balancename','invcomp', 'keepunused', 'yes')); + tmpgrad1.balance.invcomp=tmpgrad1.balance.invcomp2; + tmpgrad1.balance.pca=tmpgrad1.balance.pca2; + tmpgrad1.balance.previous{1}='pca'; + tmpgrad1.balance.current='invcomp'; + tmpgrad1.balance=rmfield(tmpgrad1.balance,{'invcomp1','invcomp2','pca1','pca2'}); + tmpgrad1.balance.pca=rmfield(tmpgrad1.balance.pca,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + tmpgrad1.balance.invcomp=rmfield(tmpgrad1.balance.invcomp,{'chantypeorg','chantypenew','chanunitorg','chanunitnew'}); + data.grad=tmpgrad1; + %} + %================================================================= + + + alldata1B=data; clear data; + %----- As the data was just loaded apply filtering at sensor level data + %alldata1B=ft_preprocessing(flowcfg,alldata1B); + %alldata1B=ft_preprocessing(fhighcfg,alldata1B); + else + alldata1B=[]; + end + + + + else % if the datagroup of the current contrast is the same as the previous, then just keep using te same data. + alldata1A=tmpdata1A;clear tmpdata1A; + alldata1B=tmpdata1B;clear tmpdata1B; + end + %==================================================================== + %==================================================================== + % Up to this point data for the data group of the current contrast + % has been either loaded ot retained from previous contrast. This data + % contains all possible conditions defined in it. The trials of the + % current contrast will be extracted from this data. + %==================================================================== + %==================================================================== + + + + %==================================================================== + %==================================================================== + % Now Start processing the contrast at hand + + %------------------------------------------------------ + % Get data from constrast conditions and merge from different files + sel=sortcontrlist{1}{iC}.selection{1}; + datacntr1A=ft_selectdata(alldata1A,'rpt',sel); + if is2Files, + sel=sortcontrlist{2}{iC}.selection{1}; + datacntr1B=ft_selectdata(alldata1B,'rpt',sel); + cfg=[]; % + [indChA,indChB]=match_str(datacntr1A.label,datacntr1B.label); datacntr1A=ft_selectdata(datacntr1A,'channel',indChA); datacntr1B=ft_selectdata(datacntr1B,'channel',indChB); + datacntr1=ft_appenddata(cfg,datacntr1A,datacntr1B); clear datacntr1A datacntr2A + else + datacntr1=datacntr1A; + end + %------------------------------------------------------ + %========================================================= + % Get Spatial Filter Type; + % 0 : filter computed from covariance matrix of the average over trials + % 1 : filter computed from covariance matrix from all data points + invFiltFlag=0; + + invfiltertype=sortcontrlist{1}{iC}.invfiltertype; + if isempty(invfiltertype) + invFiltFlag=1; + else + if strcmp(invfiltertype,'avg') + invFiltFlag=0; + elseif strcmp(invfiltertype,'all') + invFiltFlag=1; + else + error(['invfiltertype can be : avg or all. Change it in contrast ']); + end + end + + %========================================================= + %------------------------------------------------------- + % Apply filters according to if the source localization will be based + % on the ERF or on the entire data + if invFiltFlag==0, % avg + flowcfg=flowcfg_avg; + fhighcfg=fhighcfg_avg; + elseif invFiltFlag==1, % all + flowcfg=flowcfg_all; + fhighcfg=fhighcfg_all; + end + datacntr1=ft_preprocessing(flowcfg,datacntr1); + datacntr1=ft_preprocessing(fhighcfg,datacntr1); + + + %=================================================================== + % Get timing and baseline settings for current contrast + %------------------------------------------- + % --- Check Time Settings + timeperiods=[]; + isTimeWin=[]; + timepoints=[]; + Ntimepoints=[]; + Ntimeperiods=[]; + + iCond=1; + timeperiods{iCond}=sortcontrlist{1}{iC}.timeperiods{iCond}; + if ~isempty(timeperiods{iCond}) + Ntimeperiods=size(timeperiods{iCond},1); + if size(timeperiods{iCond},2)==2, % If timeperiods has 2 columns then it means that the processing is to be preformed in periods rather than in time points + isTimeWin{iCond}=1; + timepoints{iCond}=mean(timeperiods{iCond},2)'; + else % Processing to be performed at time points + isTimeWin{iCond}=0; + timepoints{iCond}=timeperiods{iCond}'; + end + Ntimepoints=length(timepoints{iCond}); + + else + isTimeWin{iCond}=0; + timepoints{iCond}=[]; % Leave empty as timeperiods to signify that the original time axis must be kept + %Ntpts=length(avg1.time); + end + + %----------------------------------------------- + % Get baseline Settings + baseline{1}=sortcontrlist{1}{iC}.baseline{1}; + hasBaseline=0; + if ~isempty(baseline{1}), + hasBaseline=1; + end + %================================================================== + + + %=================================================================== + % Select data portion that spans from the earliest to the latest + % timepoints or timeperiod boundaries asked( and baseline boundaries if provided). + % Here is is assumed that timepoints and time periods are in ascending + % order. + + Ntrials1=length(datacntr1.trial); + datacntrtrim1=[]; + + iCond=1; + eval(['tmpdat=datacntr',num2str(iCond),';']); + eval(['tmpNtrials=Ntrials',num2str(iCond),';']); + + earliestTimeBase=nan; + latestTimeBase=nan; + if hasBaseline + earliestTimeBase=baseline{iCond}(1,1); + latestTimeBase=baseline{iCond}(1,2); + end + if isTimeWin{iCond}==1, + + earliestTimeAct=timeperiods{iCond}(1,1); + latestTimeAct=timeperiods{iCond}(Ntimeperiods,2); + + earliestTime=min([earliestTimeBase earliestTimeAct latestTimeBase latestTimeAct]); + latestTime=max([earliestTimeBase earliestTimeAct latestTimeBase latestTimeAct]); + + tmpdattrim=ft_selectdata(tmpdat,'toilim',[earliestTime latestTime]); + + else + if ~isempty(timepoints{iCond}) + earliestTimeAct=timepoints{iCond}(1); + latestTimeAct=timepoints{iCond}(Ntimepoints); + + earliestTime=min([earliestTimeBase earliestTimeAct latestTimeBase latestTimeAct]); + latestTime=max([earliestTimeBase earliestTimeAct latestTimeBase latestTimeAct]); + + tmpdattrim=ft_selectdata(tmpdat,'toilim',[earliestTime latestTime]); + + else + tmpdattrim=tmpdat; + end + + end + eval(['datacntrtrim',num2str(iCond),'=tmpdattrim;']); clear tmpdat; clear tmpdattrim; + clear datacntr1; + %================================================================== + %Check if the datasets have fixed or variable size variables (this is important for the computation of the covariavce matrix) + isFixedLen1=[]; + + npointsMat1=cellfun(@(x) size(x,2),datacntrtrim1.trial); %,'UniformOutput','false'); + if length(unique(npointsMat1))==1, + isFixedLen1=1; + else + isFixedLen1=0; + end + + if (~isFixedLen1)&(~isempty(timeperiods{1})) + error('The trials for the specified timeperiods do not have fixed time lengths. This is not yet supported. WHat is supported is variable length trials with the entire trials used. For this case, do not set the timeperiods field in the contrast.'); + end + + %========================================================= + % Do a quick check if the data has variable length and filter type is + % avg . This aint possible + if (~isFixedLen1)&(invFiltFlag==0) + error('Variable length trials but inverse type filter is avg. This cannot be processed'); + end + %========================================================= + + + + + %========================================================= + %========================================================= + % Compute total covariance Matrix + % If invFiltFlag =0 (avg) then compute covariance from averaged trials + % If invFiltFlag =1 (all) then compute covariance from NON-averaged trials + datap=datacntrtrim1; + + %-------------------------------------------------------- + %First check if there are any nans in the data - This check is mostly thought for the Story Math task where trials span entire blocks with variable length and bad segmetns have been replaced with nans + tmpdat=datap; + for iTr=1:Ntrials1, + [tmpIndx1,tmpIndx2]=find(isnan(tmpdat.trial{iTr})); + if ~isempty(tmpIndx2) + tmpdat.trial{iTr}(:,unique(tmpIndx2))=[];% Remove nans so they do not affect the computation + tmpdat.time{iTr}(unique(tmpIndx2))=[]; + end + end + + tmptotdat=[tmpdat.trial{:}]; + if isempty(tmptotdat) + error('All your data is nan - Check in the early steps'); + end + clear tmptotdat datap; + %-------------------------------------------------------- + % Then demean and apply baseline if available + cfg=[]; + cfg.demean='yes'; + %cfg.channel='MEG'; + if hasBaseline, + cfg.baselinewindow=baseline{1}; + end + tmpdat=ft_preprocessing(cfg,tmpdat); + %-------------------------------------------------------- + + %-------------------------------------------------------- + % Compute covariance + if invFiltFlag==0, % filter to be computed from trial avg covariance + + cfg=[]; + cfg.covariance='no'; + cfg.keeptrials='no'; + cfg.removemean='no'; + cfg.vartrllength=2; + datavg1=ft_timelockanalysis(cfg,tmpdat); + + cfg=[]; + cfg.covariance='yes'; + datavg1=ft_timelockanalysis(cfg,datavg1); + datavgall=datavg1; + + elseif invFiltFlag==1, % filter to be computed from all trial covariance + cfg=[]; + cfg.covariance='yes'; + cfg.keeptrials='no'; + cfg.removemean='no'; + cfg.vartrllength=2; + datavg1=ft_timelockanalysis(cfg,tmpdat); + datavgall=datavg1; + end + clear datavg1; + + if ~isFixedLen1 + tmpconcatdat=[tmpdat.trial{:}]; + [ind1,ind2]=find(isnan(tmpconcatdat)); + ind2un=unique(ind2); + tmpconcatdat(:,ind2)=[]; + tmpNconcat=size(tmpconcatdat,2); + tmpCov=(tmpconcatdat*transpose(tmpconcatdat))./tmpNconcat; + datavgall.cov=tmpCov; + clear tmpconcatdat ind1 ind2 ind2un tmpNconcat tmpCov; + end + + + %-------------------------------------------------------- + + %========================================================= + %========================================================= + %========================================================= + % Now Compute Inverse Solution + + + %----- Set initial source localization settings + srcCfg=[]; + srcCfg.vol=vol; + srcCfg.method='lcmv'; + srcCfg.fixedori='yes'; + srcCfg.feedback='text'; + srcCfg.lambda='100%'; + srcCfg.projectnoise='no'; + srcCfg.keepfilter='yes'; + srcCfg.keepleadfield='yes'; + srcCfg.keepmom='no'; + + + %--- Select only channels of current data set in already computed leadfields ----------- + [indA,indB]=match_str(datavgall.label,gridAllLF.label); + Nsrc=length(gridAllLF.inside); + gridCase=gridAllLF; + gridCase.leadfield(gridCase.inside)=cellfun(@(x,y) x(y,:),gridAllLF.leadfield(gridAllLF.inside),repmat({indB},1,Nsrc),'UniformOutput',false); + + %----- Add grid to source localization settings + srcCfg.grid=gridCase; + + %----- Compute Inverse Solution from Covariance matrix ------------ + + % this provides the spatial filters that will project the data for the + % time points and time periods of interest + datavgall.grad=grad; + disp('beamforming starting...'); + datavgall.grad=grad; + sourceLocAll=ft_sourceanalysis(srcCfg,datavgall); + disp('...beamforming ended'); + + + %=================================================================== + %=================================================================== + % Here the Inverse Solution has been computed and data can now be + % projected through the Spatial Filters + + NsrcTotal=size(sourceLocAll.pos,1); + NsrcIn=length(sourceLocAll.inside); + if (~isFixedLen1) % if data has no fixed length then only the total power from the entire data will be provided + sourceLocOut=rmfield(sourceLocAll,'time'); + sourceLocOut.period='all'; + else + + sourceLocOut=sourceLocAll; + if isTimeWin{1} % If output is in time periods compute covariance for each and project + sourceLocOut.avg.pow=nan(NsrcTotal,Ntimeperiods); + for iPeriod=1:Ntimeperiods + + cfg=[]; + cfg.covariance='yes'; + cfg.covariancewindow=timeperiods{1}(iPeriod,:); + cfg.keeptrials='no'; + cfg.removemean='no'; + cfg.vartrllength=2; + if invFiltFlag==0, + tmpDatAvg=ft_timelockanalysis(cfg,datavgall); + else + tmpDatAvg=ft_timelockanalysis(cfg,tmpdat); + end + srcCfg.keepmom='no'; + srcCfg.filter=sourceLocAll.avg.filter; + tmpSourceLoc=ft_sourceanalysis(srcCfg,datavgall); + sourceLocOut.avg.pow(sourceLocOut.inside,iPeriod)=tmpSourceLoc.avg.pow(tmpSourceLoc.inside); + sourceLocOut.time=mean(timeperiods{1},2); + sourceLocOut.period=timeperiods{1}; + clear tmpSourceLoc tmpDatAvg; + end + + else % if output in time points then project all initial data and + % extract time points while also smoothing with a window equal + % to the average inter-point distance + if ~isempty(timepoints{1}) + + srcCfg.keepmom='yes'; + srcCfg.filter=sourceLocAll.avg.filter; + tmpSourceLoc=ft_sourceanalysis(srcCfg,datavgall); + Ndattimes=length(datavgall.time); + tmpPowAll=nan(NsrcIn,Ndattimes); + tmpPowAll(tmpSourceLoc.inside,:)=reshape([tmpSourceLoc.avg.mom{tmpSourceLoc.inside}].^2,Ndattimes,NsrcIn)'; + + + + dattimes=datavgall.time; + smoothHalfTime=mean(diff(timepoints{iCond})./2); + smoothHalfWin=floor(smoothHalfTime*Fsample); % TODO: When songle points are selected a smoothing window of 30msec is applies around them to avoid outlier effects. The length of this window is hard coded. This can be made dynamic. FIX!!! + tmpIndMat=[]; + for iTime=1:Ntimepoints, + tmpIndMat(iTime)=nearest(dattimes,timepoints{iCond}(iTime)); + end + tmpIndMat=unique(tmpIndMat); + NtimesOut=length(tmpIndMat); + + % Downsample to get the desired points + sourceLocOut.time=tmpSourceLoc.time(tmpIndMat); + tmpPowDown=nan(NsrcIn,NtimesOut); + for iTime=1:NtimesOut, + tmpPowDown(:,iTime)=mean(tmpPowAll(:,(max(1,(tmpIndMat(iTime)-smoothHalfWin)):min(size(tmpPowAll,2),(tmpIndMat(iTime)+smoothHalfWin)))),2); + end + sourceLocOut.avg.pow=nan(NsrcTotal,NtimesOut); + sourceLocOut.avg.pow(sourceLocOut.inside,:)=tmpPowDown; + clear tmpPowDown tmpPowAll dattimes; + else + sourceLocOut=rmfield(sourceLocOut,'time'); + end + + + end + + + + end + + %% + %------------------------------------------------------------------------ + % If Baseline has been provided then compute the power in the baseline + % period + if hasBaseline + sourceLocBase=sourceLocAll; + sourceLocBase.avg.pow=nan(NsrcTotal,1); + sourceLocBase.time=mean(baseline{1}); + sourceLocBase.period=baseline{1}; + cfg=[]; + cfg.covariance='yes'; + cfg.covariancewindow=baseline{1}; + cfg.keeptrials='no'; + cfg.removemean='no'; + cfg.vartrllength=2; + if invFiltFlag==0, + tmpDatAvg=ft_timelockanalysis(cfg,datavgall); + else + tmpDatAvg=ft_timelockanalysis(cfg,tmpdat); + end + srcCfg.keepmom='no'; + tmpSourceLoc=ft_sourceanalysis(srcCfg,datavgall); + sourceLocBase.avg.pow(sourceLocOut.inside)=tmpSourceLoc.avg.pow(tmpSourceLoc.inside); + clear tmpSourceLoc tmpDatAvg; + else + sourceLocBase=[]; + end + %---------------------------------- + % Do some cleaning after source localization + clear sourceLocAll; + clear tmpdat; + clear datavgall; + %------------------------------------------------------------------------ + + + %========================================== + % Now the sourceLocOut should contain the source Localisation results for the desired time points/ periods + % and if baseline provided sourceLocBase should have the baseline power + % ============================================================ + %% PLOT SOME FIGURES + % If 3D plot on tweaked spm8's T1.nii + % If 2D plot on the subject's surface in Head Space (Shouldn't we use the freesurfer template or another template of cortex?) + % + + + + %---------------------------------- + % Need to select a time period to plot + if ~isFixedLen1 % This case power has been computed from the entire data + time2plot=[nan nan]; + source2Plot=sourceLocOut; + else + if isTimeWin{1}, + if Ntimeperiods>1 % If more than one time periods find the first one with time >0 + indFirst=find(sourceLocOut.time>0,1,'first'); + if isempty(indFirst), % if not higher than 0 then take the first + indFirst=1; + end + source2Plot=sourceLocOut; + source2Plot.time=sourceLocOut.time(indFirst); + source2Plot.period=sourceLocOut.period(indFirst,:); + source2Plot.avg.pow=sourceLocOut.avg.pow(:,indFirst); + time2plot=source2Plot.period; + else + time2plot=sourceLocOut.period; + source2Plot=sourceLocOut; + end + + else % in Time Points. Assuming time has a part >0 relative to reference. + % Plotting what happens in 350 msec + if ~isempty(timepoints{1}) + indFirst=find(sourceLocOut.time>0,1,'first'); + if isempty(indFirst), % if not higher than 0 then take the first + indFirst=1; + end + timeStart=sourceLocOut.time(indFirst); + timeEnd=timeStart+0.350; + indEnd=find(sourceLocOut.time>timeEnd,1,'last'); + + source2Plot=sourceLocOut; + source2Plot.time=mean([timeStart timeEnd]); + source2Plot.period=[timeStart timeEnd]; + source2Plot.avg.pow=mean(sourceLocOut.avg.pow(:,indFirst:indEnd),2); + time2plot=source2Plot.period; + else + source2Plot=sourceLocOut; + time2plot=[nan nan]; + end + + end + end + + %--------------------------------------- + % Just set the baseline source + source2PlotBase=sourceLocBase; + %--------------------------------------- + % Do the plot + if strcmp(gridtype,'3D') + source2Plot.pos=gridStand.pos; + plotsource3D(source2Plot,mriTempl,invFiltFlag,experimentid, scanmnem,sortcontrlist{1}{iC},time2plot,source2PlotBase); + elseif strcmp(gridtype,'2D') + plotsource2D(source2Plot,invFiltFlag,experimentid, scanmnem,sortcontrlist{1}{iC},time2plot,source2PlotBase); + end + + + % ============================================================ + %% SAVE results + + %--- Save the Source results + source=rmfield(sourceLocOut,'cfg'); % save some space + %------------------ + if strcmp(gridtype,'2D') + source.brainstructure=sourcemodel2d.brainstructure; + source.brainstructurelabel=sourcemodel2d.brainstructurelabel; %{'CORTEX_LEFT' ; 'CORTEX_RIGHT'}; + end + %------------------ + if isfield(source,'time') + source.dimord='pos_time'; + sourcetype='dtseries'; + else + source.dimord='pos'; + sourcetype='dscalar'; + end + + + %========================================== + % Apply Weighting to the data so that the colorscale works in Workbench + % The scaling is (10^21)^2 the square stands for power + scaleWeight=(10^21)^2; + source.power=scaleWeight.*source.avg.pow; + %========================================== + + source.avg=rmfield(sourceLocOut.avg,'pow'); % save some space + saveFnameData=[saveExtraDir,experimentid,'_',scanmnem,'_',sortcontrlist{1}{iC}.mnemprint]; + + %{ + % --- Save the baseline + if ~isempty(sourceLocBase) + tmpsource=rmfield(sourceLocBase,'cfg'); % save some space + tmpsource.baselinepower=sourceLocBase.avg.pow; + tmpsource.avg=rmfield(sourceLocBase.avg,'pow'); % save some space + source.baselinepower=sourceLocBase.avg.pow; + + if isfield(tmpsource,'time') + tmpsource.dimord='pos_time'; + source.baselinetime=sourceLocBase.time; + source.baselineperiod=sourceLocBase.period; + tmpsourcetype='dtseries'; + else + tmpsource.dimord='pos'; + tmpsourcetype='dscalar'; + end + + % save it as a cifti file + hcp_write_cifti([saveFnameData 'baselinepower'],tmpsource, 'parameter','baselinepower', 'type', tmpsourcetype,'precision','double'); + + clear tmpsource; + + end + %} + %save as mat file + hcp_write_matlab(saveFnameData,'source'); clear sourceLocOut source2Plot sourceLocBase source2PlotBase; + % save it as a cifti file + hcp_write_cifti([saveFnameData '.power'], source, 'parameter', 'power', 'type', sourcetype,'precision','double'); clear source; + + + + % ============================================================ + %% VERY IMPORTANT - update previoius data group variable for next iteration + + prevGroups=sortgroupnames{iC}; + + + % ============================================================ + % end of processing for current contrast + + +end % End of loop over contrasts + + + +end % End of main function + + +%--- END OF MAIN -------------------------- +%===================================================== +%===================================================== +%===================================================== +%===================================================== +%===================================================== +%===================================================== +%===================================================== +%===================================================== +%===================================================== +function[]=plotsource3D(source2Plot,mri2interp,invFiltType,experimentid, scanmnem,curContrast,timeofplot,source2PlotBase) +global saveExtraDir; + +source2Plot=ft_convert_units(source2Plot,'mm'); +dumSrc=source2Plot; clear source2Plot; +%------------------------------------------------------------------ +% If baseline provided then subtract from condition source power +if ~isempty(source2PlotBase) + Ntimepoints=size(dumSrc.avg.pow,2); + dumSrc.avg.pow=dumSrc.avg.pow-repmat(source2PlotBase.avg.pow,1,Ntimepoints); + basetimeofplot=source2PlotBase.period; +else + basetimeofplot=[nan nan]; +end + +%---------------------------------------------------------------- +% Interpolate with MRI +intCfg=[]; +intCfg.parameter = 'avg.pow'; +[dumSrcInterp] = ft_sourceinterpolate(intCfg,dumSrc, mri2interp); + +%---------------------------------------------------------------- +% Define the plot color limits +[maxabsVal,maxabsInd]=max(abs(dumSrc.avg.pow(dumSrc.inside))); +maxabsIndTot=dumSrc.inside(maxabsInd); + +[minVal,minInd]=min((dumSrc.avg.pow(dumSrc.inside))); +[maxVal,maxInd]=max((dumSrc.avg.pow(dumSrc.inside))); +if sign(maxVal)~=sign(minVal) + subclim=0.75*maxabsVal*[-1 1]; + %subAlim=0.05*maxabsVal*[-1 1]; +else + meanVal=mean([minVal maxVal]); + demMinVal=minVal-meanVal; + demMaxVal=maxVal-meanVal; + subclim=meanVal+0.75.*[demMinVal demMaxVal]; + %subAlim=meanVal+0.05.*[demMinVal demMaxVal]; +end + + +%--------------------------------------------------------- +% Plotting settings +plotCfg=[]; +plotCfg.nslices = 25; +plotCfg.method = 'slice'; +plotCfg.funcolormap ='jet'; +plotCfg.funcolorlim = subclim; +plotCfg.funparameter = 'avg.pow'; + +ft_sourceplot(plotCfg,dumSrcInterp); +h1=gcf; + +clear dumSrc dumSrcInterp; +%---- Put figure in correct format and add text +set(h1,'papertype','A4'); +set(h1,'paperunits','centimeters') +papersize=get(h1,'PaperSize'); +paperposition = [1 1 papersize-1 ]; +set(h1,'papersize',papersize); +set(h1,'paperposition',paperposition); +set(h1,'position',[10 10 15*papersize]); + +fax(1)=gca; +set(fax(1),'position',[0.25 0.1 0.5 0.5]); + +Toph1=axes(); +set(Toph1,'position',[0.1 0.8 0.8 0.19]);axis off +dispStringTop1=sprintf('%s',[' experimentid: ',regexprep(experimentid,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' scan: ',regexprep(scanmnem,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' contrast: ',regexprep(curContrast.mnemprint,'_','\\_')]); +if invFiltType>0, + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Filter type: ',curContrast.invfiltertype]); + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Contrast Operation: ',curContrast.operation]); +end +if ~isempty(timeofplot) + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: ',num2str(timeofplot(1)),' to ',num2str(timeofplot(2))]); +else + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: all ']); +end +if invFiltType==0, + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Baseline period: ',num2str(basetimeofplot(1)),' to ',num2str(basetimeofplot(2))]); + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Baseline operation: ',num2str(curContrast.baselinetype)]); +end +htTop1=text(0,0.2,dispStringTop1); +set(htTop1,'Fontsize',10) + +%------ Save Figure -------------- +saveFnameImage=[saveExtraDir,experimentid,'_',scanmnem,'_',curContrast.mnemprint,'_plot.png']; +disp('Saving the figure'); +hcp_write_figure(saveFnameImage, h1); +disp('Done Saving'); +close(h1); + +end + +%===================================================== +%===================================================== +%===================================================== +%===================================================== +function[]=plotsource2D(source2Plot,invFiltType,experimentid, scanmnem,curContrast,timeofplot,source2PlotBase) +global saveExtraDir; + + + +dumSrc=source2Plot;clear source2Plot; +%------------------------------------------------------------------ +% If baseline provided then subtract from condition source power +if ~isempty(source2PlotBase) + Ntimepoints=size(dumSrc.avg.pow,2); + dumSrc.avg.pow=dumSrc.avg.pow-repmat(source2PlotBase.avg.pow,1,Ntimepoints); + basetimeofplot=source2PlotBase.period; +else + basetimeofplot=[nan nan]; +end + + +%-------------------------------------------------------- +% Define plot color limits +[maxabsVal,maxabsInd]=max(abs(dumSrc.avg.pow(dumSrc.inside))); +maxabsIndTot=dumSrc.inside(maxabsInd); + +[minVal,minInd]=min((dumSrc.avg.pow(dumSrc.inside))); +[maxVal,maxInd]=max((dumSrc.avg.pow(dumSrc.inside))); +if sign(maxVal)~=sign(minVal) + subclim=0.75*maxabsVal*[-1 1]; +else + meanVal=mean([minVal maxVal]); + demMinVal=minVal-meanVal; + demMaxVal=maxVal-meanVal; + subclim=meanVal+0.75.*[demMinVal demMaxVal]; +end + + +%------------------------------------ +% Plot figure; +cfg = []; +cfg.method = 'surface'; +cfg.funparameter = 'avg.pow'; +cfg.funcolorlim=subclim; +ft_sourceplot(cfg,dumSrc); +figsurf=gcf; +axsurf=gca; + +clear dumSrc; +%------------------------------ +% Set figure in correct format +h1=figure; +set(h1,'papertype','A4'); +set(h1,'paperunits','centimeters') +papersize=get(h1,'PaperSize'); +paperposition = [1 1 papersize-1 ]; +set(h1,'papersize',papersize); +set(h1,'paperposition',paperposition); +set(h1,'position',[10 10 15*papersize]); + +fxa1=axes('Position',[0.1 0.3 0.4 0.3]);axis off; +fxa2=axes('Position',[0.5 0.3 0.4 0.3]);axis off; +fxa3=axes('Position',[0.1 0 0.4 0.3]);axis off; +fxa4=axes('Position',[0.5 0 0.4 0.3]);axis off; + + +axes(fxa1); +curchild=get(axsurf,'children'); +copyobj(curchild([3 2 1]),fxa1); + +view(-90,0); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); +hcol1=colorbar('West'); +set(hcol1,'Position',[[0.05 0.3 0.05 0.28]]); + +axes(fxa2); +copyobj(curchild(1:2),fxa2); +view(-90,90); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); + +axes(fxa3); +curchild=get(axsurf,'children'); +copyobj(curchild(1:2),fxa3); +view(180,0); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); + +axes(fxa4); +copyobj(curchild(1:2),fxa4); +view(0,0); +set(gca,'CLim',subclim);set(gca,'ALimMode','manual');set(gca,'ALim',[0 1]); + +close(figsurf); + + +%----------------------------------------------------------- +Toph1=axes(); +set(Toph1,'position',[0.1 0.8 0.8 0.19]);axis off +dispStringTop1=sprintf('%s',[' experimentid: ',regexprep(experimentid,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' scan: ',regexprep(scanmnem,'_','\\_')]); +dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' contrast: ',regexprep(curContrast.mnemprint,'_','\\_')]); +if invFiltType>0, + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Filter type: ',curContrast.invfiltertype]); + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Contrast Operation: ',curContrast.operation]); +end +if ~isempty(timeofplot) + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: ',num2str(timeofplot(1)),' to ',num2str(timeofplot(2))]); +else + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Power in period: all ']); +end +if invFiltType==0, + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Averaged Baseline period: ',num2str(basetimeofplot(1)),' to ',num2str(basetimeofplot(2))]); + dispStringTop1=sprintf('%s\n%s',dispStringTop1,[' Baseline operation: ',num2str(curContrast.baselinetype)]); +end +htTop1=text(0,0.2,dispStringTop1); +set(htTop1,'Fontsize',10) + + + +%----------------------------- +%Save Figure + +saveFnameImage=[saveExtraDir,experimentid,'_',scanmnem,'_',curContrast.mnemprint,'_plot.png']; +disp('Saving the figure'); +hcp_write_figure(saveFnameImage, h1); +disp('Done Saving'); +close(h1); + +end + diff --git a/analysis_functions/hcp_write_cifti.m b/analysis_functions/hcp_write_cifti.m new file mode 100644 index 0000000..d03bceb --- /dev/null +++ b/analysis_functions/hcp_write_cifti.m @@ -0,0 +1,142 @@ +function hcp_write_cifti(filename, source, varargin) + +% HCP_WRITE_CIFTI writes a MATLAB source estimate of activity or connectivity to a +% CIFTI format 2 file. It works just like ft_write_cifti, but also stores the +% corresponding providence information in an XML file. +% +% Use as +% hcp_write_cifti(filename, source, ...) +% where the input source should be a valid FieldTrip source-level data structure. +% +% Additional input arguments should be specified as key-value pairs +% and may include +% 'parameter' = string, fieldname that contains the functional data +% 'brainstructure' = string, fieldname that describes the brain structures (default = 'brainstructure') +% 'parcellation' = string, fieldname that describes the parcellation (default = 'parcellation') +% 'precision' = string, can be 'single', 'double', 'int32', etc. (default ='single') +% 'writesurface' = boolean, can be false or true (default = true) +% +% See also HCP_WRITE_ASCII, HCP_WRITE_MATLAB, HCP_WRITE_PROVENANCE + +% Copyright (C) 2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) +% +% This file is part of megconnectome. +% +% megconnectome 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. +% +% megconnectome 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 megconnectome. If not, see . + +parameter = ft_getopt(varargin, 'parameter'); +brainstructure = ft_getopt(varargin, 'brainstructure'); +parcellation = ft_getopt(varargin, 'parcellation'); +precision = ft_getopt(varargin, 'precision'); +writesurface = ft_getopt(varargin, 'writesurface'); + +%% some data handling, this part is copied from ft_sourcewrite + +% keep the transformation matrix +if isfield(source, 'transform') + transform = source.transform; +elseif isfield(source, 'brainordinate') && isfield(source.brainordinate, 'transform') + transform = source.brainordinate.transform; +else + transform = []; +end + +if isfield(source, 'brainordinate') + % it is a parcellated source representation, i.e. the main structure one channel for each parcel + brainordinate = source.brainordinate; + source = rmfield(source, 'brainordinate'); + + % split them and check individually + source = ft_checkdata(source, 'datatype', {'timelock', 'freq', 'chan'}, 'feedback', 'yes'); + brainordinate = ft_checkdata(brainordinate, 'datatype', 'parcellation', 'parcellationstyle', 'indexed', 'hasunit', 'yes'); + + % merge them again + source = copyfields(brainordinate, source, setdiff(fieldnames(brainordinate), {'cfg'})); +else + source = ft_checkdata(source, 'datatype', 'source', 'hasunit', true, 'feedback', 'yes'); +end + +% keep the transformation matrix +if ~isempty(transform) + source.transform = transform; +end + +%% fix the filename, this section is consistent with ft_write_cifti + +switch getdimord(source, parameter) + case {'pos' 'pos_scalar'} + % NIFTI_INTENT_CONNECTIVITY_DENSE_SCALARS + extension = '.dscalar.nii'; + case 'pos_pos' + % NIFTI_INTENT_CONNECTIVITY_DENSE + extension = '.dconn.nii'; + case 'pos_time' + % NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES + extension = '.dtseries.nii'; + case 'pos_freq' + % NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES + extension = '.dtseries.nii'; + case {'chan' 'chan_scalar'} + % NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SCALARS + extension = '.pscalar.nii'; + case 'chan_chan' + % NIFTI_INTENT_CONNECTIVITY_PARCELLATED + extension = '.pconn.nii'; + case 'chan_time' + % NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SERIES + extension = '.ptseries.nii'; + case 'chan_freq' + % NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SERIES + extension = '.ptseries.nii'; + + otherwise + error('unsupported dimord "%s"', dimord); +end % switch + +[p, f, x] = fileparts(filename); +if isequal(x, '.nii') + filename = fullfile(p, f); % strip the extension +end + +[p, f, x] = fileparts(filename); +if any(isequal(x, {'.dtseries', '.ptseries', '.dconn', '.pconn', '.dscalar', '.pscalar'})) + filename = fullfile(p, f); % strip the extension +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the extension does not need to be added for ft_write_cifti + +%% add the full cifti extension to the filename +%[p, f, x] = fileparts(filename); +%filename = fullfile(p, [f x extension]); + +%% write the nii and xml file + +% brainstructure should represent the global anatomical structure, such as CortexLeft, Thalamus, etc. +% parcellation should represent the detailled parcellation, such as BA1, BA2, BA3, etc. +ft_write_cifti(filename, source, 'parameter', parameter, 'brainstructure', brainstructure, 'parcellation', parcellation, 'precision', precision, 'writesurface', writesurface); + +% by now the filename has some additional +% dscalar,dtseries,dconn,pscalar,ptseries,or pconn, just before the .nii + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the extension needs to be added for provenance writing + +% add the full cifti extension to the filename +[p, f, x] = fileparts(filename); +filename = fullfile(p, [f x extension]); + +% write the corresponding provenance information +hcp_write_provenance(filename); + diff --git a/bin/hcp_icablpcorr.sh b/bin/hcp_icablpcorr.sh new file mode 100755 index 0000000..1d1ea34 --- /dev/null +++ b/bin/hcp_icablpcorr.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# +# This bash script allows you to run the analysis pipeline using the +# compiled megconnectome application. +# +# The distribution of the jobs is not performed in this script, but is +# handled in the MATLAB script, which can use the PBS_ARRAYID environment +# variable to select the subject and/or scan. You can run it like this +# +# qsub -l walltime=4:00:00,mem=8gb,vmem=8gb -t 1-100 +# +# This executes the present script in parallel, each instance having a different +# value of PBS_ARRAYID. + +#export DISPLAY="" + +# process the command line arguments, keep spaces intact +shift 0 +args= +while [ $# -gt 0 ]; do + token=`echo "$1" | sed 's/ /\\\\ /g'` # Add blackslash before each blank + args="${args} ${token}" + shift +done + +if [ -d /export/matlab/MCR/R2012b/v80 ]; then +# this applies to the CHPC cluster in St Louis +MCRROOT=/export/matlab/MCR/R2012b/v80 +fi + +if [ -d /opt/MCR/R2012b/v80 ]; then +# this applies to the Nijmegen cluster +MCRROOT=/opt/MCR/R2012b/v80 +fi + +# determine where the shell and MATLAB scripts are located +MEGCONNECTOME_ROOT=$HOME/matlab/megconnectome +#MEGCONNECTOME_ROOT=$HOME/projects/megconnectome +MEGCONNECTOME_BIN=$MEGCONNECTOME_ROOT/bin +MEGCONNECTOME_SCRIPT=$MEGCONNECTOME_ROOT/pipeline_scripts + +# determine the name of the pipeline script that should run +PIPELINE=hcp_icablpcorr + +$MEGCONNECTOME_BIN/megconnectome.sh $MCRROOT $MEGCONNECTOME_SCRIPT/$PIPELINE.m $args + + diff --git a/bin/hcp_icablpenv.sh b/bin/hcp_icablpenv.sh new file mode 100755 index 0000000..eb8478f --- /dev/null +++ b/bin/hcp_icablpenv.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# +# This bash script allows you to run the analysis pipeline using the +# compiled megconnectome application. +# +# The distribution of the jobs is not performed in this script, but is +# handled in the MATLAB script, which can use the PBS_ARRAYID environment +# variable to select the subject and/or scan. You can run it like this +# +# qsub -l walltime=4:00:00,mem=8gb,vmem=8gb -t 1-100 +# +# This executes the present script in parallel, each instance having a different +# value of PBS_ARRAYID. + +#export DISPLAY="" + +# process the command line arguments, keep spaces intact +shift 0 +args= +while [ $# -gt 0 ]; do + token=`echo "$1" | sed 's/ /\\\\ /g'` # Add blackslash before each blank + args="${args} ${token}" + shift +done + +if [ -d /export/matlab/MCR/R2012b/v80 ]; then +# this applies to the CHPC cluster in St Louis +MCRROOT=/export/matlab/MCR/R2012b/v80 +fi + +if [ -d /opt/MCR/R2012b/v80 ]; then +# this applies to the Nijmegen cluster +MCRROOT=/opt/MCR/R2012b/v80 +fi + +# determine where the shell and MATLAB scripts are located +MEGCONNECTOME_ROOT=$HOME/matlab/megconnectome +#MEGCONNECTOME_ROOT=$HOME/projects/megconnectome +MEGCONNECTOME_BIN=$MEGCONNECTOME_ROOT/bin +MEGCONNECTOME_SCRIPT=$MEGCONNECTOME_ROOT/pipeline_scripts + +# determine the name of the pipeline script that should run +PIPELINE=hcp_icablpenv + +$MEGCONNECTOME_BIN/megconnectome.sh $MCRROOT $MEGCONNECTOME_SCRIPT/$PIPELINE.m $args + + diff --git a/bin/hcp_icaimagcoh.sh b/bin/hcp_icaimagcoh.sh new file mode 100755 index 0000000..729265f --- /dev/null +++ b/bin/hcp_icaimagcoh.sh @@ -0,0 +1,73 @@ +#!/bin/sh +# +# This bash script allows you to run the analysis pipeline using the +# compiled megconnectome application. +# +# The distribution of the jobs is not performed in this script, but is +# handled in the MATLAB script, which can use the PBS_ARRAYID environment +# variable to select the subject and/or scan. You can run it like this +# +# qsub -l walltime=4:00:00,mem=8gb,vmem=8gb -t 1-100 +# +# This executes the present script in parallel, each instance having a different +# value of PBS_ARRAYID. + +#------------------------------ +# CODE THAT FINDS AVAILABLE Xvfb PORT AND STARTS THE VIRTUAL BUFFER +xPort=0; +tmpPort=0; +Xfiles=/tmp/.X*-lock +doneFlag=0; +while [ $doneFlag -ne 1 ] +do + for f in $Xfiles + do + tmpPort=$(echo "$f" | awk -F"X" '{print $2}' | awk -F"-" '{print $1}'); + if [[ "$tmpPort" == "$xPort" ]] + then + xPort=$((xPort+1)); + doneFlag=0; + break; + else + doneFlag=1; + fi + done +done +Xvfb :$xPort -screen 0 2760x1960x16 & +export curPID=$! +export DISPLAY=:$xPort +#------------------------------ + +# process the command line arguments, keep spaces intact +shift 0 +args= +while [ $# -gt 0 ]; do + token=`echo "$1" | sed 's/ /\\\\ /g'` # Add blackslash before each blank + args="${args} ${token}" + shift +done + +if [ -d /export/matlab/MCR/R2012b/v80 ]; then +# this applies to the CHPC cluster in St Louis +MCRROOT=/export/matlab/MCR/R2012b/v80 +fi + +if [ -d /opt/MCR/R2012b/v80 ]; then +# this applies to the Nijmegen cluster +MCRROOT=/opt/MCR/R2012b/v80 +fi + +# determine where the shell and MATLAB scripts are located +MEGCONNECTOME_ROOT=$HOME/matlab/megconnectome +MEGCONNECTOME_BIN=$MEGCONNECTOME_ROOT/bin +MEGCONNECTOME_SCRIPT=$MEGCONNECTOME_ROOT/pipeline_scripts + +# determine the name of the pipeline script that should run +PIPELINE=hcp_icaimagcoh + +$MEGCONNECTOME_BIN/megconnectome.sh $MCRROOT $MEGCONNECTOME_SCRIPT/$PIPELINE.m $args + +#------------------------------ +#CLOSE VIRTUAL BUFFER +kill $curPID + diff --git a/bin/hcp_icamne.sh b/bin/hcp_icamne.sh new file mode 100755 index 0000000..98b1439 --- /dev/null +++ b/bin/hcp_icamne.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# This bash script allows you to run the analysis pipeline using the +# compiled megconnectome application. +# +# The distribution of the jobs is not performed in this script, but is +# handled in the MATLAB script, which can use the PBS_ARRAYID environment +# variable to select the subject and/or scan. You can run it like this +# +# qsub -l walltime=4:00:00,mem=8gb,vmem=8gb -t 1-100 +# +# This executes the present script in parallel, each instance having a different +# value of PBS_ARRAYID. + +#------------------------------ +# CODE THAT FINDS AVAILABLE Xvfb PORT AND STARTS THE VIRTUAL BUFFER +xPort=0; +tmpPort=0; +Xfiles=/tmp/.X*-lock +doneFlag=0; +while [ $doneFlag -ne 1 ] +do + for f in $Xfiles + do + tmpPort=$(echo "$f" | awk -F"X" '{print $2}' | awk -F"-" '{print $1}'); + if [[ "$tmpPort" == "$xPort" ]] + then + xPort=$((xPort+1)); + doneFlag=0; + break; + else + doneFlag=1; + fi + done +done +Xvfb :$xPort -screen 0 2760x1960x16 & +export curPID=$! +export DISPLAY=:$xPort +#------------------------------ + +# process the command line arguments, keep spaces intact +shift 0 +args= +while [ $# -gt 0 ]; do + token=`echo "$1" | sed 's/ /\\\\ /g'` # Add blackslash before each blank + args="${args} ${token}" + shift +done + +if [ -d /export/matlab/MCR/R2012b/v80 ]; then +# this applies to the CHPC cluster in St Louis +MCRROOT=/export/matlab/MCR/R2012b/v80 +fi + +if [ -d /opt/MCR/R2012b/v80 ]; then +# this applies to the Nijmegen cluster +MCRROOT=/opt/MCR/R2012b/v80 +fi + +# determine where the shell and MATLAB scripts are located +MEGCONNECTOME_ROOT=$HOME/matlab/megconnectome +MEGCONNECTOME_BIN=$MEGCONNECTOME_ROOT/bin +MEGCONNECTOME_SCRIPT=$MEGCONNECTOME_ROOT/pipeline_scripts + +# determine the name of the pipeline script that should run +PIPELINE=hcp_icamne + +$MEGCONNECTOME_BIN/megconnectome.sh $MCRROOT $MEGCONNECTOME_SCRIPT/$PIPELINE.m $args + +#------------------------------ +#CLOSE VIRTUAL BUFFER +kill $curPID + diff --git a/bin/hcp_megrelease.sh b/bin/hcp_megrelease.sh index 39c83c8..68d3d0b 100755 --- a/bin/hcp_megrelease.sh +++ b/bin/hcp_megrelease.sh @@ -24,6 +24,12 @@ # --eravg include the specific pipeline results # --tfavg include the specific pipeline results # --powavg include the specific pipeline results +# --icamne include the specific pipeline results +# --icablpenv include the specific pipeline results +# --icablpcorr include the specific pipeline results +# --icaimagcoh include the specific pipeline results +# --srcavglcmv include the specific pipeline results +# --srcavgdics include the specific pipeline results # The default behaviour when none of these options is specified # is to include all types of data. # @@ -86,7 +92,6 @@ function copy { raw="true" anatomy="true" eprime="true" - datacheck="true" baddata="true" icaclass="true" @@ -95,6 +100,12 @@ tmegpreproc="true" eravg="true" tfavg="true" powavg="true" +icamne="true" +icablpenv="true" +icablpcorr="true" +icaimagcoh="true" +srcavglcmv="true" +srcavgdics="true" noise="true" restin="true" @@ -106,10 +117,11 @@ motort="true" for ARG in $@ do case $ARG in - --raw | --anatomy | --eprime | --datacheck | --baddata | --icaclass | --rmegpreproc | --tmegpreproc | --eravg | --tfavg | --powavg) + --raw | --anatomy | --eprime | --datacheck | --baddata | --icaclass | --rmegpreproc | --tmegpreproc | --eravg | --tfavg | --powavg | --icamne | --icablpenv | --icablpcorr | --icaimagcoh | --srcavglcmv | --srcavgdics) # an explicit subselection has been made for the data type raw="false" anatomy="false" + eprime="false" datacheck="false" baddata="false" icaclass="false" @@ -118,6 +130,12 @@ do eravg="false" tfavg="false" powavg="false" + icamne="false" + icablpenv="false" + icablpcorr="false" + icaimagcoh="false" + srcavglcmv="false" + srcavgdics="false" ;; --noise | --restin | --wrkmem | --storym | --motort) @@ -201,6 +219,36 @@ do shift ;; + --icamne) + icamne="true" + shift + ;; + + --icablpenv) + icablpenv="true" + shift + ;; + + --icablpcorr) + icablpcorr="true" + shift + ;; + + --icaimagcoh) + icaimagcoh="true" + shift + ;; + + --srcavglcmv) + srcavglcmv="true" + shift + ;; + + --srcavgdics) + srcavgdics="true" + shift + ;; + --noise) noise="true" shift @@ -281,6 +329,7 @@ echo "inputdir =" $inputdir echo "outputdir =" $outputdir echo "subject =" $subject echo "experiment =" $experiment + echo "raw =" $raw echo "anatomy =" $anatomy echo "eprime =" $eprime @@ -292,6 +341,13 @@ echo "tmegpreproc =" $tmegpreproc echo "eravg =" $eravg echo "tfavg =" $tfavg echo "powavg =" $powavg +echo "icamne =" $icamne +echo "icablpenv =" $icablpenv +echo "icablpcorr =" $icablpcorr +echo "icaimagcoh =" $icaimagcoh +echo "srcavglcmv =" $srcavglcmv +echo "srcavgdics =" $srcavgdics + echo "noise =" $noise echo "restin =" $restin echo "wrkmem =" $wrkmem @@ -327,7 +383,7 @@ mkdir -p $outputdir/MEG/anatomy/provenance mkdir -p $outputdir/MEG/anatomy/figures/provenance for scan in Rnoise Pnoise Restin Wrkmem StoryM Motort; do -for pipeline in datacheck baddata icaclass rmegpreproc tmegpreproc eravg tfavg powavg ; do +for pipeline in datacheck baddata icaclass rmegpreproc tmegpreproc eravg tfavg powavg icamne icablpenv icablpcorr icaimagcoh srcavglcmv srcavgdics; do mkdir -p $outputdir/MEG/$scan/$pipeline/provenance mkdir -p $outputdir/MEG/$scan/$pipeline/figures/provenance done @@ -341,9 +397,8 @@ rm -f $outputdir/release-notes/MEG.txt date >> $outputdir/release-notes/MEG.txt cat << EOF >> $outputdir/release-notes/MEG.txt -The following data processing pipelines were executed with megconnectome v1.0 +The following data processing pipelines were executed with megconnectome version 2.0 or 2.1 -datacheck --anatomy -baddata -icaclass -rmegpreproc @@ -352,9 +407,18 @@ The following data processing pipelines were executed with megconnectome v1.0 -tfavg -eravg +The following data processing pipelines were executed with megconnectome version 2.2 +-anatomy +-icamne +-icablpenv +-icablpcorr +-icaimagcoh +-srcavglcmv +-srcavgdics + EOF -cat /HCP/scratch/meg/release-notes/${experiment} >> $outputdir/release-notes/MEG.txt +cat /HCP/scratch/meg/release/notes/${experiment} >> $outputdir/release-notes/MEG.txt cat << EOF >> $outputdir/release-notes/MEG.txt These data were generated and made available by the Human Connectome Project, WU-Minn Consortium (Principal Investigators: David Van Essen and Kamil Ugurbil; 1U54MH091657), which is funded by the 16 NIH Institutes and Centers that support the NIH Blueprint for Neuroscience Research and by the McDonnell Center for Systems Neuroscience at Washington University. @@ -366,7 +430,7 @@ As a reminder, users of these datasets must comply with the Data Use Terms that EOF ################################################################################################### -echo processing raw data ... +echo packaging raw data ... if [ $raw = true ] ; then @@ -425,7 +489,7 @@ fi fi ################################################################################################### -echo processing anatomy ... +echo packaging anatomy ... if [ $anatomy = true ] ; then @@ -433,6 +497,7 @@ copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_transform.txt $ou copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_fiducials.txt $outputdir/MEG/anatomy copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_landmarks.txt $outputdir/MEG/anatomy copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_headmodel.mat $outputdir/MEG/anatomy +copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_2d.mat $outputdir/MEG/anatomy copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d4mm.mat $outputdir/MEG/anatomy copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d6mm.mat $outputdir/MEG/anatomy copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d8mm.mat $outputdir/MEG/anatomy @@ -441,18 +506,26 @@ copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_transform.txt.xml copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_fiducials.txt.xml $outputdir/MEG/anatomy/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_landmarks.txt.xml $outputdir/MEG/anatomy/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_headmodel.mat.xml $outputdir/MEG/anatomy/provenance +copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_2d.mat.xml $outputdir/MEG/anatomy/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d4mm.mat.xml $outputdir/MEG/anatomy/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d6mm.mat.xml $outputdir/MEG/anatomy/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d8mm.mat.xml $outputdir/MEG/anatomy/provenance +copy $inputdir/RESOURCES/anatomy/${subject}.L.inflated.4k_fs_LR.surf.gii $outputdir/MEG/anatomy +copy $inputdir/RESOURCES/anatomy/${subject}.R.inflated.4k_fs_LR.surf.gii $outputdir/MEG/anatomy +copy $inputdir/RESOURCES/anatomy/${subject}.L.midthickness.4k_fs_LR.surf.gii $outputdir/MEG/anatomy +copy $inputdir/RESOURCES/anatomy/${subject}.R.midthickness.4k_fs_LR.surf.gii $outputdir/MEG/anatomy + for ext in png ; do copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_headmodel.$ext $outputdir/MEG/anatomy/figures +copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_2d.$ext $outputdir/MEG/anatomy/figures copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d4mm.$ext $outputdir/MEG/anatomy/figures copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d6mm.$ext $outputdir/MEG/anatomy/figures copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d8mm.$ext $outputdir/MEG/anatomy/figures copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_headmodel.$ext.xml $outputdir/MEG/anatomy/figures/provenance +copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_2d.$ext.xml $outputdir/MEG/anatomy/figures/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d4mm.$ext.xml $outputdir/MEG/anatomy/figures/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d6mm.$ext.xml $outputdir/MEG/anatomy/figures/provenance copy $inputdir/RESOURCES/anatomy/${subject}_MEG_anatomy_sourcemodel_3d8mm.$ext.xml $outputdir/MEG/anatomy/figures/provenance @@ -462,6 +535,7 @@ done fi ################################################################################################### +# copy txt/mat/png files pipeline=() if [ $datacheck = true ]; then pipeline=("${pipeline[@]}" datacheck ) ; fi @@ -480,7 +554,7 @@ if [ $wrkmem = true ]; then scan=("${scan[@]}" Wrkmem ) ; fi if [ $storym = true ]; then scan=("${scan[@]}" StoryM ) ; fi if [ $motort = true ]; then scan=("${scan[@]}" Motort ) ; fi -echo processing processed data for ${pipeline[*]} ${scan[*]} ... +echo packaging processed data for ${pipeline[*]} ${scan[*]} ... for s in "${scan[@]}" ; do for p in "${pipeline[@]}" ; do @@ -506,6 +580,50 @@ done done done +################################################################################################### +# copy nii files + +pipeline=() +if [ $icamne = true ]; then pipeline=("${pipeline[@]}" icamne ) ; fi +if [ $icablpenv = true ]; then pipeline=("${pipeline[@]}" icablpenv ) ; fi +if [ $icablpcorr = true ]; then pipeline=("${pipeline[@]}" icablpcorr) ; fi +if [ $icaimagcoh = true ]; then pipeline=("${pipeline[@]}" icaimagcoh) ; fi +if [ $srcavglcmv = true ]; then pipeline=("${pipeline[@]}" srcavglcmv) ; fi +if [ $srcavgdics = true ]; then pipeline=("${pipeline[@]}" srcavgdics) ; fi + +scan=() +if [ $restin = true ]; then scan=("${scan[@]}" Restin ) ; fi +if [ $wrkmem = true ]; then scan=("${scan[@]}" Wrkmem ) ; fi +if [ $storym = true ]; then scan=("${scan[@]}" StoryM ) ; fi +if [ $motort = true ]; then scan=("${scan[@]}" Motort ) ; fi + +echo packaging source reconstructed data for ${pipeline[*]} ${scan[*]} ... + +for s in "${scan[@]}" ; do +for p in "${pipeline[@]}" ; do + +for ext in nii ; do +for file in $inputdir/RESOURCES/?meg/*"$s"_"$p"*."$ext" ; do +copy "$file" $outputdir/MEG/$s/$p/ +done +for file in $inputdir/RESOURCES/?meg/*"$s"_"$p"*."$ext".xml ; do +copy "$file" $outputdir/MEG/$s/$p/provenance +done +done + +for ext in png ; do +for file in $inputdir/RESOURCES/?meg/*"$s"_"$p"*."$ext" ; do +copy "$file" $outputdir/MEG/$s/$p/figures/ +done +for file in $inputdir/RESOURCES/?meg/*"$s"_"$p"*."$ext".xml ; do +copy "$file" $outputdir/MEG/$s/$p/figures/provenance/ +done +done + +done +done + + ################################################################################################### echo cleaning up empty directories ... diff --git a/bin/hcp_srcavgdics.sh b/bin/hcp_srcavgdics.sh new file mode 100755 index 0000000..5f1a6c9 --- /dev/null +++ b/bin/hcp_srcavgdics.sh @@ -0,0 +1,73 @@ +#!/bin/sh +# +# This bash script allows you to run the analysis pipeline using the +# compiled megconnectome application. +# +# The distribution of the jobs is not performed in this script, but is +# handled in the MATLAB script, which can use the PBS_ARRAYID environment +# variable to select the subject and/or scan. You can run it like this +# +# qsub -l walltime=4:00:00,mem=8gb,vmem=8gb -t 1-100 +# +# This executes the present script in parallel, each instance having a different +# value of PBS_ARRAYID. + +#------------------------------ +# CODE THAT FINDS AVAILABLE Xvfb PORT AND STARTS THE VIRTUAL BUFFER +xPort=0; +tmpPort=0; +Xfiles=/tmp/.X*-lock +doneFlag=0; +while [ $doneFlag -ne 1 ] +do + for f in $Xfiles + do + tmpPort=$(echo "$f" | awk -F"X" '{print $2}' | awk -F"-" '{print $1}'); + if [[ "$tmpPort" == "$xPort" ]] + then + xPort=$((xPort+1)); + doneFlag=0; + break; + else + doneFlag=1; + fi + done +done +Xvfb :$xPort -screen 0 2760x1960x16 & +export curPID=$! +export DISPLAY=:$xPort +#------------------------------ + +# process the command line arguments, keep spaces intact +shift 0 +args= +while [ $# -gt 0 ]; do + token=`echo "$1" | sed 's/ /\\\\ /g'` # Add blackslash before each blank + args="${args} ${token}" + shift +done + +if [ -d /export/matlab/MCR/R2012b/v80 ]; then +# this applies to the CHPC cluster in St Louis +MCRROOT=/export/matlab/MCR/R2012b/v80 +fi + +if [ -d /opt/MCR/R2012b/v80 ]; then +# this applies to the Nijmegen cluster +MCRROOT=/opt/MCR/R2012b/v80 +fi + +# determine where the shell and MATLAB scripts are located +MEGCONNECTOME_ROOT=$HOME/matlab/megconnectome +MEGCONNECTOME_BIN=$MEGCONNECTOME_ROOT/bin +MEGCONNECTOME_SCRIPT=$MEGCONNECTOME_ROOT/pipeline_scripts + +# determine the name of the pipeline script that should run +PIPELINE=hcp_srcavgdics + +$MEGCONNECTOME_BIN/megconnectome.sh $MCRROOT $MEGCONNECTOME_SCRIPT/$PIPELINE.m $args + +#------------------------------ +#CLOSE VIRTUAL BUFFER +kill $curPID + diff --git a/bin/hcp_srcavglcmv.sh b/bin/hcp_srcavglcmv.sh new file mode 100755 index 0000000..35134eb --- /dev/null +++ b/bin/hcp_srcavglcmv.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# +# This bash script allows you to run the analysis pipeline using the +# compiled megconnectome application. +# +# The distribution of the jobs is not performed in this script, but is +# handled in the MATLAB script, which can use the PBS_ARRAYID environment +# variable to select the subject and/or scan. You can run it like this +# +# qsub -l walltime=4:00:00,mem=8gb,vmem=8gb -t 1-100 +# +# This executes the present script in parallel, each instance having a different +# value of PBS_ARRAYID. + +export DISPLAY="" + +# process the command line arguments, keep spaces intact +shift 0 +args= +while [ $# -gt 0 ]; do + token=`echo "$1" | sed 's/ /\\\\ /g'` # Add blackslash before each blank + args="${args} ${token}" + shift +done + +if [ -d /export/matlab/MCR/R2012b/v80 ]; then +# this applies to the CHPC cluster in St Louis +MCRROOT=/export/matlab/MCR/R2012b/v80 +fi + +if [ -d /opt/MCR/R2012b/v80 ]; then +# this applies to the Nijmegen cluster +MCRROOT=/opt/MCR/R2012b/v80 +fi + +# determine where the shell and MATLAB scripts are located +MEGCONNECTOME_ROOT=$HOME/matlab/megconnectome +MEGCONNECTOME_BIN=$MEGCONNECTOME_ROOT/bin +MEGCONNECTOME_SCRIPT=$MEGCONNECTOME_ROOT/pipeline_scripts + +# determine the name of the pipeline script that should run +PIPELINE=hcp_srcavglcmv + +$MEGCONNECTOME_BIN/megconnectome.sh $MCRROOT $MEGCONNECTOME_SCRIPT/$PIPELINE.m $args + + diff --git a/bin/megconnectome b/bin/megconnectome index 89d4391..9e3223b 100755 Binary files a/bin/megconnectome and b/bin/megconnectome differ diff --git a/pipeline_scripts/hcp_anatomy.m b/pipeline_scripts/hcp_anatomy.m index ced964f..ab025f8 100644 --- a/pipeline_scripts/hcp_anatomy.m +++ b/pipeline_scripts/hcp_anatomy.m @@ -724,7 +724,12 @@ system(str); sourcemodel2d = ft_read_headshape({outputsurffile strrep(outputsurffile,'.L','.R')}); - + if isfield(sourcemodel2d, 'hemisphere') + sourcemodel2d.brainstructure = sourcemodel2d.hemisphere; + sourcemodel2d.brainstructurelabel = {'CORTEX_LEFT' 'CORTEX_RIGHT'}; + sourcemodel2d = rmfield(sourcemodel2d, {'hemisphere', 'hemispherelabel'}); + end + % convert to mm units and change the coordinate system sourcemodel2d = ft_convert_units(sourcemodel2d, 'mm'); sourcemodel2d = ft_transform_geometry(transform.spm2bti, sourcemodel2d); diff --git a/pipeline_scripts/hcp_avgspecextract.m b/pipeline_scripts/hcp_avgspecextract.m new file mode 100644 index 0000000..f268d87 --- /dev/null +++ b/pipeline_scripts/hcp_avgspecextract.m @@ -0,0 +1,732 @@ +opengl software; + +% ensure that the time and date of execution are not stored in the provenance information +global ft_default +ft_default.trackcallinfo = 'no'; + +% allow the user to specify the path where additional data is present, e.g. the channel layout or anatomy files +%if exist('path', 'var') +% addpath(path) +%end + +%% +%------------------------------------------------------------------------------- +% The subject list file should be an ascii file with 5 columns and each row corresponding to a single subject +% COLUMNS: +% 1: Subject ID +% 2: 0 or 1. flag signifying if this subject has good RESTING STATE data from ALL 3 scans +% 3: 0 or 1. flag signifying if this subject has good MOTOR TASK data from BOTH scans +% 4: 0 or 1. flag signifying if this subject has good WORKING MEMORY data from BOTH scans +% 5: 0 or 1. flag signifying if this subject has good STORY MATH data from BOTH scans +if ~exist( 'subjlistfile','var') + error('subjlistfile should be specified') +end +subjlistmat=load(subjlistfile); +if size(subjlistmat,2)~=5, + error('subjlistfile should have 5 columns'); +end + +%% +if ~exist( 'datamaindir','var') + error('datamaindir should be specified. This is the main data directory where raw and processed data for all subjects is saved. i.e. /HCP/scratch/meg/intradb/archive1/HCP_Phase2/arc001/'); +end + +if ~exist( 'avgspecdir','var') + error('avgspecdir should be specified. This is the directory where the files with the averaged spectra will be saved for all subjects is saved. i.e. /HCP/scratch/meg/frankenstein/workspace/hcp/findpeaks/analysis/'); +end +% Files with the averaged spectra are saved with the naming +%[casespectra_',subjID,'_Motort.mat']; +%[casespectra_',subjID,'_Wrkmem.mat']; +%[casespectra_',subjID,'_StoryM.mat']; +%[casespectra_',subjID,'_Restin.mat']; + +%% +%-------------------------------------------------------------------- + + +numListMat=subjlistmat; +numList=numListMat(:,1); +subjList=cellfun(@(x) num2str(x) , num2cell(numList),'Uniformoutput',false); + +%% +%========================================================================== +% DEFINE SENSOR GROUPS +%subjList={'177746'}; +Nsubj=length(subjList); + + +chanLists=[]; +chanLists.Occ_L ={'A104', 'A238', 'A202', 'A220', 'A160', 'A219', 'A186', 'A105', 'A234', 'A215', 'A235', 'A181', 'A137', 'A135', 'A200', 'A102', 'A183', 'A199', 'A203', 'A103', 'A163', 'A236', 'A161', 'A218', 'A201', 'A164', 'A217', 'A136', 'A184', 'A237', 'A182', 'A185', 'A162', 'A133', 'A134', 'A216'}'; +chanLists.Occ_R = {'A241', 'A138', 'A207', 'A224', 'A239', 'A165', 'A204', 'A242', 'A168', 'A223', 'A222', 'A188', 'A189', 'A167', 'A240', 'A206', 'A107', 'A139', 'A166', 'A225', 'A205', 'A243', 'A190', 'A208', 'A140', 'A106', 'A187', 'A221'}'; +chanLists.Occ_All=[chanLists.Occ_L; chanLists.Occ_R]; +chanLists.SeMoAud_L = {'A22', 'A214', 'A71', 'A26', 'A9', 'A8', 'A95', 'A28', 'A233', 'A98', 'A25', 'A70', 'A72', 'A11', 'A47', 'A3', 'A155', 'A10', 'A127', 'A67', 'A12', 'A231', 'A45', 'A180', 'A99', 'A230', 'A24', 'A66', 'A42', 'A96', 'A27', 'A130', 'A100', 'A43', 'A132', 'A21', 'A49', 'A156', 'A128', 'A68', 'A159', 'A4', 'A6', 'A74', 'A232', 'A69', 'A157', 'A97', 'A101', 'A40', 'A179', 'A73', 'A129', 'A131', 'A198', 'A197', 'A46', 'A41', 'A7', 'A23', 'A48', 'A196', 'A158', 'A44'}'; +chanLists.SeMoAud_R = {'A114', 'A16', 'A35', 'A170', 'A112', 'A82', 'A13', 'A115', 'A78', 'A31', 'A245', 'A76', 'A50', 'A57', 'A56', 'A80', 'A210', 'A143', 'A113', 'A84', 'A55', 'A32', 'A146', 'A79', 'A54', 'A145', 'A14', 'A15', 'A30', 'A109', 'A172', 'A81', 'A171', 'A173', 'A29', 'A33', 'A147', 'A52', 'A142', 'A211', 'A53', 'A192', 'A226', 'A51', 'A77', 'A83', 'A34', 'A17', 'A18', 'A144', 'A209', 'A110', 'A111', 'A244'}'; +chanLists.SeMoAud_All=[chanLists.SeMoAud_L; chanLists.SeMoAud_R]; +chanLists.Front_All = {'A93', 'A39', 'A125', 'A175', 'A228', 'A64', 'A177', 'A63', 'A194', 'A176', 'A38', 'A91', 'A86', 'A116', 'A151', 'A120', 'A122', 'A62', 'A60', 'A88', 'A121', 'A61', 'A193', 'A150', 'A227', 'A59', 'A195', 'A124', 'A123', 'A153', 'A178', 'A117', 'A148', 'A87', 'A89', 'A119', 'A92', 'A90', 'A154', 'A149', 'A118', 'A152'}'; +%========================================================================== + + +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( + +% START AVERAGING THE SPECTRA IN SENSOR GROUPS + +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + +%% +%######################################################################################################## +%######################################################################################################## +%######################################################################################################## +% MOTOR TASK + +% A variable called casespectra is saved whis contains the speactra for different sensor subsets and different trial cases. +% COLUMN 1: Member flag ( 1:LH 2:RH 3:LF 4:RF) +% COLUMN 2: Trial Lock data group ( 1: TMEG 2:TFLA ); +% COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal) +% COLUMN 4: Spectrum Type (1: Pre-stim(Baseline) 2:Post-stim 3: relative Change in Post-stim vs Pre-stim) +% REMANING COLUMNS : Spectrum per frequency + +columnDescr={ + 'COLUMN 1: Member flag ( 1: LH 2: RH 3: LF 4: RF )' + 'COLUMN 2: Trial Lock data group ( 1: TMEG 2:TFLA )' + 'COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal)' + 'COLUMN 4: Spectrum Type (1: Pre-stim(Baseline) 2:Post-stim 3: relative Change in Post-stim vs Pre-stim)' + 'REMANING COLUMNS : Spectrum per frequency'}; + +%---------------------------------------------------------------------------- +caseMnems={'LH' + 'RH' + 'LF' + 'RF'}; + + +subjLogFile=[avgspecdir,'SubjectsLog_Motort_tfavg.txt']; +logfid=fopen(subjLogFile,'w+'); + + +outDir=avgspecdir; + +for iSubj=1:Nsubj, + %-------------- + subjID=subjList{iSubj}; + isRESTIN=subjlistmat(iSubj,2); + isMOTOR=subjlistmat(iSubj,3); + isWORKMEM=subjlistmat(iSubj,4); + isSTORYM=subjlistmat(iSubj,5); + %-------------- + if isMOTOR, + + + + disp(['===========================================================================================']); + disp(['MOTOR - ',num2str(iSubj),' : ',subjID]); + disp(['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@']); + %analDir=['/HCP/scratch/meg/intradb/archive1/HCP_Phase2/arc001/',subjID,'_MEG/RESOURCES/analysis/']; + + dataDir=[datamaindir,subjID,'_MEG/RESOURCES/analysis/']; + outputFile=[outDir,'casespectra_',subjID,'_Motort.mat']; + + countEntry=1; + totalSpecCases=[]; + + isAnyFileFound=0; + for iCase=1:4, + + curMnem=caseMnems{iCase}; + + datafile1=[dataDir,subjID,'_MEG_Motort_tfavg_[LM-TEMG-',curMnem,']_[MODE-mag].mat']; + datafile2=[dataDir,subjID,'_MEG_Motort_tfavg_[LM-TFLA-',curMnem,']_[MODE-mag].mat']; + + isFile1=exist(datafile1,'file'); + isFile2=exist(datafile2,'file'); + + + logChar=[subjID,' ',num2str(iCase),' ',num2str(isFile1),' ',num2str(isFile2)]; + fprintf(logfid,'%s\n',logChar); + if (isFile1==0)|(isFile2==0), + logChar=['OOOPS - tfavg files not found for Motor task of subject: ',subjID]; + fprintf(logfid,'%s\n',logChar); + warning(['OOOPS - tfavg files not found for Motor task of subject: ',subjID]); + continue; + else + isAnyFileFound=1; + end + + load(datafile1); + + %=================================================================================================== + tmpdata_post_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + %----------------------------------- + tmpdata_pre_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + %=================================================================================================== + totalSpecCases(countEntry,:)=[iCase 1 1 1 tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 1 tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 1 tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 1 tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 1 1 2 tmpdata_post_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 2 tmpdata_post_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 2 tmpdata_post_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 2 tmpdata_post_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 1 1 3 -1+tmpdata_post_occ.powspctrm./tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 3 -1+tmpdata_post_semoaud_L.powspctrm./tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 3 -1+tmpdata_post_semoaud_R.powspctrm./tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 3 -1+tmpdata_post_front.powspctrm./tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + allFreqs=tmpdata_post_occ.freq; + %% + + load(datafile2); + + %=================================================================================================== + tmpdata_post_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + %----------------------------------- + tmpdata_pre_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + %=================================================================================================== + totalSpecCases(countEntry,:)=[iCase 2 1 1 tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 1 tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 1 tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 1 tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 2 1 2 tmpdata_post_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 2 tmpdata_post_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 2 tmpdata_post_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 2 tmpdata_post_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 2 1 3 -1+tmpdata_post_occ.powspctrm./tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 3 -1+tmpdata_post_semoaud_L.powspctrm./tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 3 -1+tmpdata_post_semoaud_R.powspctrm./tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 3 -1+tmpdata_post_front.powspctrm./tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + allFreqs=tmpdata_post_occ.freq; + %######################################################################################################## + end + + if isAnyFileFound + casespectra=totalSpecCases; + allfreqs=allFreqs; + save(outputFile,'casespectra','columnDescr','allfreqs'); + end + + + end +end + +fclose(logfid); + + +%% +%######################################################################################################## +%######################################################################################################## +%######################################################################################################## + +% WORKING MEMORY + +% A variable called casespectra is saved whis contains the speactra for different sensor subsets and different trial cases. +% 'COLUMN 1: Member flag ( 1: 0-Back 2: 2-Back )' +% 'COLUMN 2: Trial Lock data group ( 1: TIM 2:TRESP )' +% COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal) +% COLUMN 4: Spectrum Type (1: Pre-stim(Baseline) 2:Post-stim 3: relative Change in Post-stim vs Pre-stim) +% REMANING COLUMNS : Spectrum per frequency + +columnDescr={ + 'COLUMN 1: Member flag ( 1: 0-Back 2: 2-Back )' + 'COLUMN 2: Trial Lock data group ( 1: TIM 2:TRESP )' + 'COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal)' + 'COLUMN 4: Spectrum Type (1: Pre-stim(Baseline) 2:Post-stim 3: relative Change in Post-stim vs Pre-stim)' + 'REMANING COLUMNS : Spectrum per frequency'}; + +%---------------------------------------------------------------------------- +caseMnems={'0B' + '2B'}; + + +subjLogFile=[avgspecdir,'SubjectsLog_Wrkmem_tfavg.txt']; +logfid=fopen(subjLogFile,'w+'); + +outDir=avgspecdir; + +for iSubj=1:Nsubj, + %-------------- + subjID=subjList{iSubj}; + isRESTIN=subjlistmat(iSubj,2); + isMOTOR=subjlistmat(iSubj,3); + isWORKMEM=subjlistmat(iSubj,4); + isSTORYM=subjlistmat(iSubj,5); + %-------------- + if isWORKMEM, + + + + disp(['===========================================================================================']); + disp(['WORKING MEM - ',num2str(iSubj),' : ',subjID]); + disp(['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@']); + %analDir=['/HCP/scratch/meg/intradb/archive1/HCP_Phase2/arc001/',subjID,'_MEG/RESOURCES/analysis/']; + + dataDir=[datamaindir,subjID,'_MEG/RESOURCES/analysis/']; + outputFile=[outDir,'casespectra_',subjID,'_Wrkmem.mat']; + + countEntry=1; + totalSpecCases=[]; + + isAnyFileFound=0; + for iCase=1:2, + + disp('WM : STAGE 1'); + curMnem=caseMnems{iCase}; + + datafile1=[dataDir,subjID,'_MEG_Wrkmem_tfavg_[LM-TIM-',curMnem,']_[MODE-mag].mat']; + datafile2=[dataDir,subjID,'_MEG_Wrkmem_tfavg_[LM-TRESP-',curMnem,']_[MODE-mag].mat']; + + isFile1=exist(datafile1,'file'); + isFile2=exist(datafile2,'file'); + + + logChar=[subjID,' ',num2str(iCase),' ',num2str(isFile1),' ',num2str(isFile2)]; + fprintf(logfid,'%s\n',logChar); + if (isFile1==0)|(isFile2==0), + logChar=['OOOPS - tfavg files not found for Workmem task of subject: ',subjID]; + fprintf(logfid,'%s\n',logChar); + warning(['OOOPS - tfavg files not found for Workmem task of subject: ',subjID]); + continue; + else + isAnyFileFound=1; + end + + load(datafile1); + disp('WM : STAGE 2'); + %=================================================================================================== + tmpdata_post_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + %----------------------------------- + tmpdata_pre_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + %=================================================================================================== + disp('WM : STAGE 3'); + totalSpecCases(countEntry,:)=[iCase 1 1 1 tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 1 tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 1 tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 1 tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 1 1 2 tmpdata_post_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 2 tmpdata_post_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 2 tmpdata_post_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 2 tmpdata_post_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 1 1 3 -1+tmpdata_post_occ.powspctrm./tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 3 -1+tmpdata_post_semoaud_L.powspctrm./tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 3 -1+tmpdata_post_semoaud_R.powspctrm./tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 3 -1+tmpdata_post_front.powspctrm./tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + allFreqs=tmpdata_post_occ.freq; + %% + disp('WM : STAGE 4'); + load(datafile2); + disp('WM : STAGE 5'); + %=================================================================================================== + tmpdata_post_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + %----------------------------------- + tmpdata_pre_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + %=================================================================================================== + disp('WM : STAGE 6'); + totalSpecCases(countEntry,:)=[iCase 2 1 1 tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 1 tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 1 tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 1 tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 2 1 2 tmpdata_post_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 2 tmpdata_post_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 2 tmpdata_post_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 2 tmpdata_post_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 2 1 3 -1+tmpdata_post_occ.powspctrm./tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 3 -1+tmpdata_post_semoaud_L.powspctrm./tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 3 -1+tmpdata_post_semoaud_R.powspctrm./tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 3 -1+tmpdata_post_front.powspctrm./tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + allFreqs=tmpdata_post_occ.freq; + disp('WM : STAGE 7'); + %######################################################################################################## + end + + disp('WM : STAGE 8'); + if isAnyFileFound + casespectra=totalSpecCases; + allfreqs=allFreqs; + save(outputFile,'casespectra','columnDescr','allfreqs'); + disp('WM : STAGE 10'); + end + + + end +end + +fclose(logfid); + +%% + +%######################################################################################################## +%######################################################################################################## +%######################################################################################################## +% STORYMATH + +% A variable called casespectra is saved whis contains the speactra for different sensor subsets and different trial cases. +% COLUMN 1: Member flag ( 1: Math Sentence onset 2: Story Sentence onset 3: all (this only for TRESP case))' +% COLUMN 2: Trial Lock data group ( 1: TEV (For cases 1 and 2 of Columns1 only ) 2:TRESP (for case 3 of Column 1 only) )' +% COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal) +% COLUMN 4: Spectrum Type (1: Pre-stim(Baseline) 2:Post-stim 3: relative Change in Post-stim vs Pre-stim) +% REMANING COLUMNS : Spectrum per frequency + +columnDescr={ + 'COLUMN 1: Member flag ( 1: Math Sentence onset 2: Story Sentence onset 3: all (this only for TRESP case))' + 'COLUMN 2: Trial Lock data group ( 1: TEV (For cases 1 and 2 of Columns1 only ) 2:TRESP (for case 3 of Column 1 only) )' + 'COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal)' + 'COLUMN 4: Spectrum Type (1: Pre-stim(Baseline) 2:Post-stim 3: relative Change in Post-stim vs Pre-stim)' + 'REMANING COLUMNS : Spectrum per frequency'}; + +%---------------------------------------------------------------------------- +caseMnems={'mathsentnon' + 'storsentnon' + 'all'}; + + +subjLogFile=[avgspecdir,'SubjectsLog_StoryM_tfavg.txt']; +logfid=fopen(subjLogFile,'w+'); + +outDir=avgspecdir; + +for iSubj=1:Nsubj, + %-------------- + subjID=subjList{iSubj}; + isRESTIN=subjlistmat(iSubj,2); + isMOTOR=subjlistmat(iSubj,3); + isWORKMEM=subjlistmat(iSubj,4); + isSTORYM=subjlistmat(iSubj,5); + %-------------- + if isSTORYM, + + + + disp(['===========================================================================================']); + disp(['STORY MATH - ',num2str(iSubj),' : ',subjID]); + disp(['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@']); + %analDir=['/HCP/scratch/meg/intradb/archive1/HCP_Phase2/arc001/',subjID,'_MEG/RESOURCES/analysis/']; + + dataDir=[datamaindir,subjID,'_MEG/RESOURCES/analysis/']; + outputFile=[outDir,'casespectra_',subjID,'_StoryM.mat']; + + countEntry=1; + totalSpecCases=[]; + + isAnyFileFound=0; + for iCase=1:3, + + disp('SM : STAGE 1'); + curMnem=caseMnems{iCase}; + + + if iCase<3, + datafile1=[dataDir,subjID,'_MEG_StoryM_tfavg_[LM-TEV-',curMnem,']_[MODE-mag].mat']; + isFile1=exist(datafile1,'file'); + + + + logChar=[subjID,' ',num2str(iCase),' ',num2str(isFile1)]; + fprintf(logfid,'%s\n',logChar); + if (isFile1==0) + logChar=['OOOPS - tfavg files not found for StoryM TEV task of subject: ',subjID]; + fprintf(logfid,'%s\n',logChar); + + warning(['OOOPS - tfavg files not found for StoryM TEV task of subject: ',subjID]); + disp(datafile1) + disp(datafile2); + continue; + else + isAnyFileFound=1; + end + + load(datafile1); + disp('SM : STAGE 2'); + %=================================================================================================== + tmpdata_post_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + %----------------------------------- + tmpdata_pre_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + %=================================================================================================== + disp('SM : STAGE 3'); + totalSpecCases(countEntry,:)=[iCase 1 1 1 tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 1 tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 1 tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 1 tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 1 1 2 tmpdata_post_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 2 tmpdata_post_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 2 tmpdata_post_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 2 tmpdata_post_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 1 1 3 -1+tmpdata_post_occ.powspctrm./tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 2 3 -1+tmpdata_post_semoaud_L.powspctrm./tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 3 3 -1+tmpdata_post_semoaud_R.powspctrm./tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 1 4 3 -1+tmpdata_post_front.powspctrm./tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + allFreqs=tmpdata_post_occ.freq; + + elseif iCase==3 + + datafile2=[dataDir,subjID,'_MEG_StoryM_tfavg_[LM-TRESP-',curMnem,']_[MODE-mag].mat']; + + isFile2=exist(datafile2,'file'); + + + logChar=[subjID,' ',num2str(iCase),' ',num2str(isFile2)]; + fprintf(logfid,'%s\n',logChar); + if (isFile2==0), + logChar=['OOOPS - tfavg files not found for StoryM TRESP task of subject: ',subjID]; + fprintf(logfid,'%s\n',logChar); + + warning(['OOOPS - tfavg files not found for StoryM TRESP task of subject: ',subjID]); + disp(datafile1) + disp(datafile2); + continue; + else + isAnyFileFound=1; + end + + + + disp('SM : STAGE 4'); + load(datafile2); + disp('SM : STAGE 5'); + %=================================================================================================== + tmpdata_post_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + tmpdata_post_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[0 0.8],'avgovertime','yes'); + %----------------------------------- + tmpdata_pre_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + tmpdata_pre_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes','toilim',[-0.8 0],'avgovertime','yes'); + %=================================================================================================== + disp('SM : STAGE 6'); + totalSpecCases(countEntry,:)=[iCase 2 1 1 tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 1 tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 1 tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 1 tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 2 1 2 tmpdata_post_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 2 tmpdata_post_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 2 tmpdata_post_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 2 tmpdata_post_front.powspctrm];countEntry=countEntry+1; + + totalSpecCases(countEntry,:)=[iCase 2 1 3 -1+tmpdata_post_occ.powspctrm./tmpdata_pre_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 2 3 -1+tmpdata_post_semoaud_L.powspctrm./tmpdata_pre_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 3 3 -1+tmpdata_post_semoaud_R.powspctrm./tmpdata_pre_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase 2 4 3 -1+tmpdata_post_front.powspctrm./tmpdata_pre_front.powspctrm];countEntry=countEntry+1; + allFreqs=tmpdata_post_occ.freq; + end + + + disp('SM : STAGE 7'); + + + %######################################################################################################## + end + + disp('SM : STAGE 8'); + if isAnyFileFound + casespectra=totalSpecCases; + allfreqs=allFreqs; + save(outputFile,'casespectra','columnDescr','allfreqs'); + disp('SM : STAGE 10'); + end + + + end +end + +fclose(logfid); + + +%% +%######################################################################################################## +%######################################################################################################## +%######################################################################################################## +% RESTING STATE + +% A variable called casespectra is saved whis contains the speactra for different sensor subsets and different trial cases. +% COLUMN 1: Scan Number ( 1 2 or 3) +% COLUMN 2: Nan +% COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal) +% COLUMN 4: NAN +% REMANING COLUMNS : Spectrum per frequency + +columnDescr={ + 'COLUMN 1: Scan Number ( 1 2 or 3)' + 'COLUMN 2: Nan' + 'COLUMN 3: Sensor group (1: Occ/Posterior 2:SensoryMotor/Auditory Left 3:SensoryMotor/Auditory Right 4:Frontal)' + 'COLUMN 4: Nan' + 'REMANING COLUMNS : Spectrum per frequency'}; + +%---------------------------------------------------------------------------- +caseMnems={'scan1' + 'scan2' + 'scan3'}; + +defaultFreqs=[1:31 33:2:99]; + +subjLogFile=[avgspecdir,'SubjectsLog_Restin_powavg.txt']; +logfid=fopen(subjLogFile,'w+'); + +outDir=avgspecdir; + +for iSubj=1:Nsubj, + %-------------- + subjID=subjList{iSubj}; + isRESTIN=subjlistmat(iSubj,2); + isMOTOR=subjlistmat(iSubj,3); + isWORKMEM=subjlistmat(iSubj,4); + isSTORYM=subjlistmat(iSubj,5); + %-------------- + if isRESTIN, + + + + disp(['===========================================================================================']); + disp(['RESTING STATE - ',num2str(iSubj),' : ',subjID]); + disp(['@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@']); + %analDir=['/HCP/scratch/meg/intradb/archive1/HCP_Phase2/arc001/',subjID,'_MEG/RESOURCES/analysis/']; + + dataDir=[datamaindir,subjID,'_MEG/RESOURCES/analysis/']; + outputFile=[outDir,'casespectra_',subjID,'_Restin.mat']; + + countEntry=1; + totalSpecCases=[]; + + isAnyFileFound=0; + for iCase=1:3, + + disp('SM : STAGE 1'); + curMnem=caseMnems{iCase}; + + + + datafile1=[dataDir,subjID,'_MEG_',num2str(iCase+2),'-Restin_powavg.mat']; + isFile1=exist(datafile1,'file'); + + + + logChar=[subjID,' ',num2str(iCase),' ',num2str(isFile1)]; + fprintf(logfid,'%s\n',logChar); + if (isFile1==0) + logChar=['OOOPS - tfavg files not found for Resting state of subject: ',subjID]; + fprintf(logfid,'%s\n',logChar); + warning(['OOOPS - tfavg files not found for Resting state of subject: ',subjID]); + disp(datafile1) + continue; + else + isAnyFileFound=1; + end + + load(datafile1,'freq'); + data=freq; + disp('SM : STAGE 2'); + %=================================================================================================== + tmpdata_rest_occ=ft_selectdata(data,'channel',chanLists.Occ_All,'avgoverchan','yes'); + tmpdata_rest_semoaud_L=ft_selectdata(data,'channel',chanLists.SeMoAud_L,'avgoverchan','yes'); + tmpdata_rest_semoaud_R=ft_selectdata(data,'channel',chanLists.SeMoAud_R,'avgoverchan','yes'); + tmpdata_rest_front=ft_selectdata(data,'channel',chanLists.Front_All,'avgoverchan','yes'); + %=================================================================================================== + + adjustFreqsIndx=[]; + for iDFs=1:length(defaultFreqs), + adjustFreqsIndx(iDFs)=nearest(data.freq,defaultFreqs(iDFs)); + end + + tmpdata_rest_occ.powspctrm=tmpdata_rest_occ.powspctrm(adjustFreqsIndx); + tmpdata_rest_occ.freq=defaultFreqs; + tmpdata_rest_semoaud_L.powspctrm=tmpdata_rest_semoaud_L.powspctrm(adjustFreqsIndx); + tmpdata_rest_semoaud_L.freq=defaultFreqs; + tmpdata_rest_semoaud_R.powspctrm=tmpdata_rest_semoaud_R.powspctrm(adjustFreqsIndx); + tmpdata_rest_semoaud_R.freq=defaultFreqs; + tmpdata_rest_front.powspctrm=tmpdata_rest_front.powspctrm(adjustFreqsIndx); + tmpdata_rest_front.freq=defaultFreqs; + + + %=================================================================================================== + disp('SM : STAGE 3'); + totalSpecCases(countEntry,:)=[iCase nan 1 nan tmpdata_rest_occ.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase nan 2 nan tmpdata_rest_semoaud_L.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase nan 3 nan tmpdata_rest_semoaud_R.powspctrm];countEntry=countEntry+1; + totalSpecCases(countEntry,:)=[iCase nan 4 nan tmpdata_rest_front.powspctrm];countEntry=countEntry+1; + + + allFreqs=tmpdata_rest_occ.freq; + %% + + + disp('SM : STAGE 7'); + + + %######################################################################################################## + end + + disp('SM : STAGE 8'); + if isAnyFileFound + casespectra=totalSpecCases; + allfreqs=allFreqs; + save(outputFile,'casespectra','columnDescr','allfreqs'); + disp('SM : STAGE 10'); + end + + + end +end + +fclose(logfid); + +%% +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( + +% END OF EXTRACTING SPECTRA IN SENSOR GROUPS + +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) \ No newline at end of file diff --git a/pipeline_scripts/hcp_avgspecmanualalphabeta.m b/pipeline_scripts/hcp_avgspecmanualalphabeta.m new file mode 100644 index 0000000..10df723 --- /dev/null +++ b/pipeline_scripts/hcp_avgspecmanualalphabeta.m @@ -0,0 +1,111 @@ +% ensure that the time and date of execution are not stored in the provenance information +global ft_default +ft_default.trackcallinfo = 'no'; + +% allow the user to specify the path where additional data is present, e.g. the channel layout or anatomy files +%if exist('path', 'var') +% addpath(path) +%end + +%% +%------------------------------------------------------------------------------- +% The subject list file should be an ascii file with 5 columns and each row corresponding to a single subject +% COLUMNS: +% 1: Subject ID +% 2: 0 or 1. flag signifying if this subject has good RESTING STATE data from ALL 3 scans +% 3: 0 or 1. flag signifying if this subject has good MOTOR TASK data from BOTH scans +% 4: 0 or 1. flag signifying if this subject has good WORKING MEMORY data from BOTH scans +% 5: 0 or 1. flag signifying if this subject has good STORY MATH data from BOTH scans +if ~exist( 'subjlistfile','var') + error('subjlistfile should be specified') +end +subjlistmat=load(subjlistfile); +if size(subjlistmat,2)~=5, + error('subjlistfile should have 5 columns'); +end + +%% +%------------------------------------------------------------------------------- +if ~exist( 'avgspecdir','var') + error('avgspecdir should be specified. This is the directory where the files with the averaged spectra will be saved for all subjects have been saved. i.e. /HCP/scratch/meg/frankenstein/workspace/hcp/findpeaks/analysis/'); +end +if ~exist( 'savealphabetadir','var') + error('savealphabetadir should be specified. This is the directory where the files with peak alpha and beta frequencis for each subject will be saved . i.e. /HCP/scratch/meg/frankenstein/workspace/hcp/findpeaks/genericpeaks/'); +end +% Files with the averaged spectra are saved with the naming +%[subjID,'_ABpeakfile.mat']; + +%{ +if runSite==1, + avgspecdir=['/mnt/hps/slurm/michalareasg/pipeline/TestDetectFreqPeaks/analysis/']; + savealphabetadir=['/mnt/hps/slurm/michalareasg/pipeline/TestDetectFreqPeaks/genericpeaks']; + +elseif runSite==2, + avgspecdir=['/HCP/scratch/meg/frankenstein/workspace/hcp/findpeaks/analysis/']; + savealphabetadir=['/HCP/scratch/meg/frankenstein/workspace/hcp/findpeaks/genericpeaks']; +end; +%} + + +subjLogInfo=subjlistmat; +indWithIn=find((subjLogInfo(:,2)>0)|(subjLogInfo(:,3)>0)|(subjLogInfo(:,4)>0)|(subjLogInfo(:,5)>0)); +numList=unique(subjLogInfo(:,1)); + +subjList=cellfun(@(x) num2str(x) , num2cell(numList),'Uniformoutput',false); + +Nsubj=length(indWithIn); + +for iSubj=1:Nsubj + %subjID=subjList{indWithIn(iSubj)}; + + subjID=num2str(subjLogInfo(indWithIn(iSubj),1)); + + hasRestin=subjLogInfo(indWithIn(iSubj),2); + hasMotort=subjLogInfo(indWithIn(iSubj),3); + hasWrkmem=subjLogInfo(indWithIn(iSubj),4); + hasStoryM=subjLogInfo(indWithIn(iSubj),5); + + + inspectra_Restin=[]; + inspectra_Motort=[]; + inspectra_Wrkmem=[]; + inspectra_StoryM=[]; + + if hasMotort, + spefile=[avgspecdir,'casespectra_',subjID,'_Motort.mat']; + load(spefile,'casespectra','allfreqs'); + inspectra_Motort=casespectra; + end + if hasWrkmem, + spefile=[avgspecdir,'casespectra_',subjID,'_Wrkmem.mat']; + load(spefile,'casespectra','allfreqs'); + inspectra_Wrkmem=casespectra; + end + if hasStoryM, + spefile=[avgspecdir,'casespectra_',subjID,'_StoryM.mat']; + load(spefile,'casespectra','allfreqs'); + inspectra_StoryM=casespectra; + end + if hasRestin, + spefile=[avgspecdir,'casespectra_',subjID,'_Restin.mat']; + load(spefile,'casespectra','allfreqs'); + inspectra_Restin=casespectra; + end + + + infreqs=allfreqs; + + + [parH]=hcp_avgspecmanualalphabetagui(subjID,inspectra_Restin,inspectra_Motort,inspectra_Wrkmem,inspectra_StoryM,infreqs,savealphabetadir); + + + is6in=0; + while ~is6in + inNumber=input('Input number 6 to continue:'); + if inNumber==6, + is6in=1; + end + end + + +end \ No newline at end of file diff --git a/pipeline_scripts/hcp_icablpcorr.m b/pipeline_scripts/hcp_icablpcorr.m index cd4ce87..e8b1b5e 100644 --- a/pipeline_scripts/hcp_icablpcorr.m +++ b/pipeline_scripts/hcp_icablpcorr.m @@ -47,10 +47,6 @@ experimentid = tok{end-5}; end -% if ~exist('scanid', 'var') -% scanid = tok{end-3}; -% end - scanid={'3-Restin' ; '4-Restin' ; '5-Restin'}; if ~exist('pipelinedatadir', 'var') @@ -58,24 +54,24 @@ end if ~exist('aband', 'var') - aband=[1 2 3 4 5 6 7]; + aband=[1 2 3 4 5 6 7 8 9]; end % print the matlab and megconnectome version to screen for provenance ver('megconnectome') -% % print the value of all local variables to screen for provenance -% w = whos; -% w = {w.name}; -% w = setdiff(w, {'w', 'ans'}); -% for i=1:length(w) -% fprintf(hcp_printstruct(w{i}, eval(w{i}))); -% end +% print the value of all local variables to screen for provenance +w = whos; +w = {w.name}; +w = setdiff(w, {'w', 'ans'}); +for i=1:length(w) + fprintf(hcp_printstruct(w{i}, eval(w{i}))); +end % change to the location of the processed data (input and output) cd(pipelinedatadir) -% hcp_check_pipelineoutput('anatomy', 'subject', subjectid); +hcp_check_pipelineoutput('anatomy', 'subject', subjectid); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % execute the pipeline @@ -83,124 +79,96 @@ hcp_read_matlab([subjectid '_MEG_anatomy_sourcemodel_2d']); sourcemodelsubj = sourcemodel2d; -head=ft_read_headshape([subjectid '.L.midthickness.8k_fs_LR.surf.gii']); -head2=ft_read_headshape([subjectid '.R.midthickness.8k_fs_LR.surf.gii']); +head=ft_read_headshape([subjectid '.L.midthickness.4k_fs_LR.surf.gii']); +head2=ft_read_headshape([subjectid '.R.midthickness.4k_fs_LR.surf.gii']); sourcemodel=head; sourcemodel.pnt=[head.pnt ; head2.pnt]; sourcemodel.tri=[head.tri ; head2.tri]; -blp_bands = [ 1.3 4 ; 3 8 ; 6 15 ; 12.5 28.5 ; 30 75 ; 70 150 ; 1 150]; band_prefix={ 'delta' 'theta' 'alpha' - 'beta' - 'lowgamma' - 'highgamma' + 'betalow' + 'betahigh' + 'gammalow' + 'gammamid' + 'gammahigh' 'whole' }; -window_corr=25; %window for stationary corr in sec -Fs=50; + +window_corr=25; % window for stationary corr in sec +Fs=50; % BLP sampling frequency in Hz window_corr2=window_corr*Fs; source_blp=[]; +r_dist=3.5; % radius of the mask related to the vertices euclidean distance for ib=aband nwin_tot=0; for i_scan=1:3 clear source_blp - resultprefix = sprintf('%s_%s', experimentid, scanid{i_scan}); + % check whether the band-limited power envelope time courses exist + hcp_check_pipelineoutput('icablpenv', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid{i_scan}, 'band', band_prefix{ib}); - outputfile=[experimentid '_blpcorr_' band_prefix{ib}]; - - % hcp_check_pipelineoutput('icapowenv', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid,'band',band_prefix{ib}); - outstr=[resultprefix '_icablpenv_' band_prefix{ib}]; + % load the data + outstr = sprintf('%s_%s_icablpenv_%s', experimentid, scanid{i_scan}, band_prefix{ib}); disp(['loading blp file ' outstr]) - hcp_read_matlab([resultprefix '_icablpenv_' band_prefix{ib}]) - % hcp_read_matlab([resultprefix '_blp_2D_' band_prefix{ib}]) - + hcp_read_matlab(outstr) if (i_scan==1) + % allocate memory for the connectivity matrix in the first iteration for the first scan connect_stat=zeros(size(source_blp.power,1)); end ntp=size(source_blp.power,2); - nwin=floor(ntp/(Fs*window_corr)) + nwin=floor(ntp/(Fs*window_corr)); + + % compute a running sum for i=1:nwin vect=[((i-1)*window_corr2)+1:window_corr2*i]; connect_stat=corr(source_blp.power(:,vect)')+connect_stat; - end + end % for each window nwin_tot=nwin_tot+nwin; - end + end % for each resting-state scan - connect_stat=connect_stat/nwin_tot; - connect_stat = cast(connect_stat,'single'); + % normalise with the number of windows and cast to single precision + connect_stat = connect_stat/nwin_tot; - atlas_rsn_l=ft_read_atlas('RSN-networks.L.8k_fs_LR.label.gii'); - atlas_rsn_r=ft_read_atlas('RSN-networks.R.8k_fs_LR.label.gii'); - indxvoxels=[]; - jn=0; - for in=3:numel(atlas_rsn_r.parcellation4label) - jn=jn+1; - networkl{jn}=atlas_rsn_r.parcellation4label{in}; - nindxl=find(strcmp(atlas_rsn_l.parcellation4label,atlas_rsn_r.parcellation4label{in})); - if ~isempty(nindxl) - indxvoxels=[indxvoxels ; find(atlas_rsn_l.parcellation4==nindxl)]; - indxvoxels_net{jn}=find(atlas_rsn_l.parcellation4==nindxl); - end - indxvoxels=[indxvoxels ; (find(atlas_rsn_r.parcellation4==in)+numel(atlas_rsn_l.parcellation4))]; - indxvoxels_net{jn}=[indxvoxels_net{jn} ; (find(atlas_rsn_r.parcellation4==in)+numel(atlas_rsn_l.parcellation4))]; - label_net_n{jn}=atlas_rsn_r.parcellation4label{in}; - if (jn==1) - net_max(jn,:)=[1 numel(indxvoxels)]; - else - net_max(jn,:)=[(net_max(jn-1,2)+1) numel(indxvoxels)]; - end - end + % create the output structure + connect.pos = source_blp.pos; + connect.dimord = 'pos_pos'; + connect.blpcorr = connect_stat; + connect.blp_band = source_blp.blp_band; + if isfield(source_blp, 'tri'), connect.tri = source_blp.tri; end + if isfield(source_blp, 'brainstructure'), connect.brainstructure = source_blp.brainstructure; end + if isfield(source_blp, 'brainstructurelabel'), connect.brainstructurelabel = source_blp.brainstructurelabel; end - netmean_eval='yes'; - if(strcmp(netmean_eval,'yes')) - for imean=1:numel(indxvoxels_net) - net_pos=source_blp.pos(indxvoxels_net{imean},:); - eudist=squareform(pdist(net_pos)); - mask_c=find(eudist<3.5); - net_matrix=connect_stat(indxvoxels_net{imean},indxvoxels_net{imean}); - net_matrix_v=net_matrix; - net_matrix_v(mask_c)=[]; - net_corr.mean(imean)=mean(net_matrix_v); - net_corr.label{imean}=label_net_n{imean}; - net_matrix(mask_c)=NaN; - h=imagesc(net_matrix); - set(h,'alphadata',~isnan(net_matrix)) - caxis([0 1]); colorbar - imgname = [outputfile '_' label_net_n{imean} '.png']; - imgname=strrep(imgname,'"',''); - hcp_write_figure(imgname, gcf) - - close all - end - connect.net_corr=net_corr; - hcp_write_matlab([outputfile '_mean'],'net_corr') - - end - + % save it as a cifti + outputfile = [experimentid '_Restin_icablpcorr_' band_prefix{ib} '.blpcorr']; + hcp_write_cifti(outputfile, connect, 'parameter', 'blpcorr', 'type', 'dconn'); - connect.networkl=networkl; - connect.connect_stat=connect_stat; - connect.net_extr=net_max; - connect.indxvoxels=indxvoxels; - hcp_write_matlab(outputfile,'connect') + % also save it as a matlab file + hcp_write_matlab(outputfile,'connect'); dofig='yes'; if strcmp(dofig,'yes') - figure - imagesc(connect_stat(indxvoxels,indxvoxels)); - caxis([0.5 1]) - colorbar - imgname = [outputfile '.png']; - hcp_write_figure(imgname, gcf) - close all + imgname = outputfile; + options_pl={'outputfile',imgname, 'sorting', 'yes','parcel_type','RSN','mask','yes','mask_edist','yes','edist_radius',r_dist,'color_extr',[0 1]}; + hcp_icaplotconnectome(connect_stat, sourcemodel2d, options_pl) + + % extract the index of a vertex that belongs to a node in the DMN (PCC) + net_seeds=hcp_mcw_netdef('DMN', []); + z_s=connect.blpcorr(net_seeds.cortex_index(1),:); + + imgname = [outputfile '_view_' net_seeds.label{1} '.png']; + color_extr= [0 1]; + options_pl={'outputfile',imgname, 'mask','yes','color_extr',color_extr,'color_map','jet'}; + + hcp_icaplotcortex(z_s, subjectid, options_pl) + end - clear source_blp connect -end \ No newline at end of file + clear source_blp connect connect_stat; + +end % for each frequency band diff --git a/pipeline_scripts/hcp_icablpenv.m b/pipeline_scripts/hcp_icablpenv.m index 9b6adc9..60c3c7f 100644 --- a/pipeline_scripts/hcp_icablpenv.m +++ b/pipeline_scripts/hcp_icablpenv.m @@ -56,7 +56,7 @@ end if ~exist('aband', 'var') - aband=[]; + aband=[1 2 3 4 5 6 7 8 9]; end @@ -66,9 +66,9 @@ cd(pipelinedatadir) % ensure that the output from the previous pipelines is present -% hcp_check_pipelineoutput('baddata', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -% hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -% hcp_check_pipelineoutput('icamne', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('baddata', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('icamne', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); % print the matlab and megconnectome version to screen for provenance ver('megconnectome') @@ -89,8 +89,8 @@ % declare the input files inputfile1 = fullfile([resultprefix,'_baddata_badsegments.txt']); inputfile2 = fullfile([resultprefix,'_baddata_badchannels.txt']); -inputfile4 = fullfile([resultprefix,'_icaclass_vs.mat']); -inputfile5 = fullfile([resultprefix,'_icamne.mat']); +inputfile3 = fullfile([resultprefix,'_icaclass_vs.mat']); +inputfile4 = fullfile([resultprefix,'_icamne.mat']); %------------------------ % declare the output file @@ -109,41 +109,32 @@ % the options: I suggest to create a text file just like the one specifying % the badchannels/segments -hcp_read_matlab(inputfile4); -hcp_read_matlab(inputfile5, 'source'); +hcp_read_matlab(inputfile3); +hcp_read_matlab(inputfile4, 'source'); comp=comp_class; mixing = comp_class.topo; if(max(size(source.val))>2) -for i = 1:size(mixing, 2) - mixing(:, i) = mixing(:, i)/source.val(i); - for jic=1:size(comp.trial,2) - comp.trial{jic}(i,:)=comp.trial{jic}(i,:)*source.val(i); + for i = 1:size(mixing, 2) + mixing(:, i) = mixing(:, i)/source.val(i); + for jic=1:size(comp.trial,2) + comp.trial{jic}(i,:)=comp.trial{jic}(i,:)*source.val(i); + end end end -end comp.topo=mixing; -% adjust the time axis to avoid memory problems during resampling: -% exact time information is discarded anyway - -% old_time=comp.time; -% for k = 1:numel(comp.time) -% comp.time{k} = comp.time{k} - comp.time{k}(1); -% end - -if isempty(aband) - aband=[1 2 3 4 5 6 7]; -end -blp_bands = [ 1.3 4 ; 3 8 ; 6 15 ; 12.5 28.5 ; 30 75 ; 70 150 ; 1 150]; +blp_bands = [ 1.3 4.5 ; 3 9.5 ; 6.3 16.5 ; 12.5 29 ; 22.5 39 ; 30 55 ; 45 82 ; 70 125 ; 1 150]; band_prefix={ 'delta' 'theta' 'alpha' - 'beta' - 'lowgamma' - 'highgamma' + 'betalow' + 'betahigh' + 'gammalow' + 'gammamid' + 'gammahigh' 'whole' }; @@ -158,10 +149,13 @@ source_blp = hcp_ica_blp(source,comp,options_blp); disp('saving icapowenv results') - hcp_write_matlab([outputfile '_' band_prefix{ib}],'source_blp'); -% save([outputfile '_' band_prefix{ib}],'source_blp','-v7.3'); - - % hcp_check_pipelineoutput('icapowenv', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid, 'sourcemodel', sourcemodel_type, 'band', band_prefix{ib}); + % save it as a cifti file + hcp_write_cifti([outputfile,'_' band_prefix{ib} '.power'],source_blp, 'parameter', 'power', 'type', 'dtseries'); + + % save it as a matlab file as well + hcp_write_matlab([outputfile '_' band_prefix{ib}],'source_blp'); + + hcp_check_pipelineoutput('icablpenv', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid, 'band', band_prefix{ib}); clear source_blp; -end \ No newline at end of file +end diff --git a/pipeline_scripts/hcp_icaclass.m b/pipeline_scripts/hcp_icaclass.m index e54882a..fdb64ab 100644 --- a/pipeline_scripts/hcp_icaclass.m +++ b/pipeline_scripts/hcp_icaclass.m @@ -259,6 +259,3 @@ % ensure that the expected output files were created hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -%catch me -% save([resultprefix '_montageerror'],'resultprefix') -%end diff --git a/pipeline_scripts/hcp_icaimagcoh.m b/pipeline_scripts/hcp_icaimagcoh.m index b66632d..7440adf 100644 --- a/pipeline_scripts/hcp_icaimagcoh.m +++ b/pipeline_scripts/hcp_icaimagcoh.m @@ -35,11 +35,6 @@ error('filename should be specified') end -if ~exist('f', 'var') - error('frequency should be specified as "f"') -end -freque = f; - % the filename is assumed to be something like % 'rawdatadir/Phase1MEG/Subjects/CP10018/Experiments/CP10018_MEG/Scans/1-Rnoise_MNN_V1/Resources/4D/c,rfDC' tok = tokenize(filename, '/'); @@ -60,6 +55,26 @@ pipelinedatadir = hcp_pathdef; end +% This is not default anymore, as of October 28 +%if ~exist('freque', 'var') +% freque=[1:80]; +%end + +if exist('freque', 'var') + blp_bands = freque(:); + aband=1:size(blp_bands); + for i = 1:numel(freque) + band_prefix{i,1} = sprintf('%02dHz',freque(i)); + end +else + blp_bands = [1 4;4 8;8 15;15 26;26 35;35 50;50 76;76 120]; + band_prefix={ 'delta'; 'theta' ; 'alpha' ; 'betalow' ; 'betahigh' ; 'gammalow' ; 'gammamid' ; 'gammahigh'}; + + if ~exist('aband', 'var') + aband=[1 2 3 4 5 6 7 8]; + end +end + % print the matlab and megconnectome version to screen for provenance ver('megconnectome') @@ -78,15 +93,6 @@ % execute the pipeline %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -smodel_type = {'2D';'3D'}; dimindx=1; % 1 for 2D cortical sheet and 2 for 3D gird -griddim = {'4mm';'6mm';'8mm'}; gridindx=1; % $ 1,2,3 for 3D 4mm,6mm and 8mm grid - -if(strcmp(smodel_type{dimindx},'2D')) - sourcemodel_type=smodel_type{dimindx}; -elseif(strcmp(smodel_type{dimindx},'3D')) - sourcemodel_type=[smodel_type{dimindx} griddim{gridindx}]; -end - %------------------------ % declare the output file resultprefix = sprintf('%s_%s', experimentid, scanid); @@ -94,115 +100,51 @@ % ------------------------------------------------------------ % ensure that the output from the previous pipelines is present -% hcp_check_pipelineoutput('baddata', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -% hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -% hcp_check_pipelineoutput('icamne', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid, 'sourcemodel', sourcemodel_type); +hcp_check_pipelineoutput('baddata', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('icamne', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -inputfile4 = fullfile([resultprefix '_icaclass_vs.mat']); -hcp_read_matlab(inputfile4); +inputfile1 = fullfile([resultprefix '_icaclass_vs.mat']); +hcp_read_matlab(inputfile1); -inputfile5 = fullfile([resultprefix '_icamne.mat']); -hcp_read_matlab(inputfile5,'source'); +inputfile2 = fullfile([resultprefix '_icamne.mat']); +hcp_read_matlab(inputfile2,'source'); -if(~isfield(comp_class,'trial')) - - cfg = []; - cfg.dataset = filename; - dataraw=ft_preprocessing(cfg); - - badsegments = hcp_read_ascii([resultprefix '_baddata_badsegments.txt']); - - disp('bad segments concatenation') - % collect the results in a structure - maxsmp2 = max(badsegments.badsegment.ica(:)); - maxsmp3 = max(badsegments.badsegment.manual(:)); - maxsmp = max([maxsmp2, maxsmp3]); - badsample = zeros(1,maxsmp); - if ~isempty(badsegments.badsegment.ica) - for j=1:size(badsegments.badsegment.ica,1) - badsample(badsegments.badsegment.ica(j,1):badsegments.badsegment.ica(j,2)) = 1; - end - end - if ~isempty(badsegments.badsegment.manual) - for j=1:size(badsegments.badsegment.manual,1) - badsample(badsegments.badsegment.manual(j,1):badsegments.badsegment.manual(j,2)) = 1; - end - end - - if ~isempty(badsample) - flank = diff([0 badsample 0]); - badsegment_ica=[]; - badsegment_ica(:,1) = find(flank== 1); - badsegment_ica(:,2) = find(flank==-1) - 1; - - badsegments.badsegment.ica = badsegment_ica; - end - - badsegments = badsegments.badsegment.ica; - - badchannels = hcp_read_ascii([resultprefix '_baddata_badchannels.txt']); - badchannels = badchannels.badchannel.all; - - sel_channels={'MEG'}; - grad=dataraw.grad; - - - %------------------------------------------ - - if ~(isempty([badchannels{:}])), - for ich=1:size(badchannels,2) - sel_channels(1,ich+1)={['-' badchannels{1,ich}]}; - end - end - - bandpass = [1.3 150]; % band pass frequency - if strcmp(subjectid,'CP10128') || strcmp(subjectid,'CP10129') - bandstop = [49 51 ; 99 101]; % band stop frequency, these were recorded in Glasgow - else - bandstop = [59 61 ; 119 121]; % band stop frequency, all others were recorded at SLU - end - - options = {'dataprefix', resultprefix, 'channels', sel_channels, 'skipped_intervals', badsegments, 'bandpass', bandpass, 'bandstop', bandstop}; - - data = hcp_ICA_preprocessing(dataraw, options); - - cfg = []; - cfg.unmixing = comp_class.unmixing; - cfg.topolabel = comp_class.topolabel; - comp = ft_componentanalysis(cfg, data); - comp.class = comp_class.class; - comp.topo = comp_class.topo; - clear data -else - comp = comp_class; -end +% rename for convenience +comp = comp_class; +clear comp_class; -mixing = comp_class.topo; +% weight the topographies and the component time series (in opposite +% directions, so the mixing stays correct) +mixing = comp.topo; +unmixing = comp.unmixing; if(max(size(source.val))>2) for i = 1:size(mixing, 2) - mixing(:, i) = mixing(:, i)/source.val(i); - for jic=1:size(comp.trial,2) - comp.trial{jic}(i,:)=comp.trial{jic}(i,:)*source.val(i); + unmixing(i, :) = unmixing(i, :)*source.val(i); + mixing(:, i) = mixing(:, i)/source.val(i); + for jic = 1:size(comp.trial,2) + comp.trial{jic}(i,:) = comp.trial{jic}(i,:)*source.val(i); end end end -comp.topo = mixing; +comp.topo = mixing; +comp.unmixing = unmixing; +clear mixing unmixing % get only the brain ICs -comp_bic=comp; +comp_bic = rmfield(comp, 'trial'); -comp_bic=rmfield(comp_bic,'trial'); -for j=1:numel(comp.trial) - comp_bic.trial{j}(:,:)=comp.trial{j}(comp.class.brain_ic_vs,:); +for k = 1:numel(comp.trial) + comp_bic.trial{k}(:,:) = comp.trial{k}(comp.class.brain_ic_vs,:); end -comp_bic.topo=comp.topo(:,comp.class.brain_ic_vs); -comp_bic.unmixing=comp.unmixing(comp.class.brain_ic_vs,:); -comp_bic.label=comp.label(comp.class.brain_ic_vs,:); - +comp_bic.topo = comp.topo(:,comp.class.brain_ic_vs); +comp_bic.unmixing = comp.unmixing(comp.class.brain_ic_vs,:); +comp_bic.label = comp.label(comp.class.brain_ic_vs,:); +clear comp % adjust the time axis to avoid memory problems during resampling: % exact time information is discarded anyway -old_time=comp_bic.time; +old_time = comp_bic.time; for k = 1:numel(comp_bic.time) comp_bic.time{k} = comp_bic.time{k} - comp_bic.time{k}(1); end @@ -212,151 +154,183 @@ % get the topographies of the components at the level of the % sources from the mne pipeline -source_bic=source; -source_bic.time=1:comp_bic.class.brain_ic_vs_number; -source_bic.avg.pow=zeros(size(source.pos,1),comp_bic.class.brain_ic_vs_number); -source_bic.avg=rmfield(source_bic.avg,'mom'); +source_bic = source; +source_bic.time = 1:comp_bic.class.brain_ic_vs_number; +source_bic.avg.pow = zeros(size(source.pos,1),comp_bic.class.brain_ic_vs_number); +source_bic.avg = rmfield(source_bic.avg,'mom'); -for ii=1:numel(source.inside) - source_bic.avg.mom{source.inside(ii)}=source.avg.mom{source.inside(ii)}(:,comp_bic.class.brain_ic_vs); - source_bic.avg.pow(source.inside(ii),:)=source.avg.pow(source.inside(ii),comp_bic.class.brain_ic_vs); +for k = source.inside(:)' + source_bic.avg.mom{k} = source.avg.mom{k}(:,comp_bic.class.brain_ic_vs); + source_bic.avg.pow(k,:) = source.avg.pow(k,comp_bic.class.brain_ic_vs); end - - -%%hack to remove balancing -% gradBalanced = comp_bic.grad; -% gradBalanced = ft_apply_montage(gradBalanced, gradBalanced.balance.comp, 'keepunused', 'yes', 'inverse', 'yes'); -% gradBalanced = ft_apply_montage(gradBalanced, gradBalanced.balance.Supine, 'keepunused', 'yes', 'inverse', 'yes'); -% -% comp_bic.grad=gradBalanced; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% working piece of code to test ft function behaviour on components -cfg = []; -cfg.length = 1; -cfg.overlap = 0.5; -cfg.trials = 'all'; -[comp1] = ft_redefinetrial(cfg, comp_bic); - -cfg = []; +% create component-level cross-spectral density matrices + +% create 1-second snippets of data with 50% overlap +cfg = []; +cfg.length = 1; +cfg.overlap = 0.5; +cfg.trials = 'all'; +comp1 = ft_redefinetrial(cfg, comp_bic); +clear comp_bic; + +% spectral analysis +cfg = []; cfg.output = 'fourier'; cfg.method = 'mtmfft'; cfg.taper = 'hanning'; -[comp2] = ft_freqanalysis(cfg, comp1); -comp2=ft_selectdata(comp2,'foilim',[1:80]); +cfg.foilim = [1 max(blp_bands(:))]; +comp2 = ft_freqanalysis(cfg, comp1); +clear comp1; -[ntrials nic nfreq]=size(comp2.fourierspctrm); -cfg = []; -cfg.method = 'csd'; -cfg.complex = 'complex'; -[comp3] = ft_connectivityanalysis(cfg, comp2); -%comp_csd dimord=[chan x chan x freq] - -nsource = numel(source_bic.inside); -nfreq = length(freque); +% get some sizes +[ntrials, nic, dummy] = size(comp2.fourierspctrm); +nfreq = numel(comp2.freq); +nsource = numel(source_bic.inside); +[ndim, nbic] = size(source_bic.avg.mom{source_bic.inside(1)}); -nsource = numel(source_bic.inside); -[ndim,nbic] = size(source_bic.avg.mom{source_bic.inside(1)}); - +% compute csd-matrices +cfg = []; +cfg.method = 'csd'; +cfg.complex = 'complex'; +comp3 = ft_connectivityanalysis(cfg, comp2); +%comp_csd dimord=[chan x chan x freq] +clear comp2; -rpi=20; +% allocate some other stuff +rpi = 20; allit = ceil(nsource/rpi); count = 0; -% tStart = tic; -% dispstat('','init'); % One time only initialization -% dispstat(sprintf('MIM - Beginning ...'),'keepthis','timestamp'); - -for f=freque - % allocate memory for single frequency connectomes - mimf = zeros(nsource, nsource,'single'); - + +for fband=aband - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - WlfAic = cat(1,source_bic.avg.mom{source_bic.inside(:)'}); - WlfAic = reshape( permute( reshape(WlfAic,ndim,nsource,[]),[2 1 3]),nsource*ndim,[]) ; - ndum = size(WlfAic,1); + % allocate memory for single frequency-band connectome + mimf_band = zeros(nsource, nsource,'single'); - CS = comp3.crsspctrm(:,:,f); + fbeg = blp_bands(fband,1) + fend = blp_bands(fband,end) - cs_bb = hcp_cs2csvv(CS,WlfAic,ndim); - pro_prcsbb = zeros(ndim,ndum); - for iv=1:nsource - pro_prcsbb(:,(iv-1)*ndim + [1:ndim]) = pinv(real( full(cs_bb((iv-1)*ndim + [1:ndim],(iv-1)*ndim + [1:ndim])))); - end - pro_prcsbb = repmat(pro_prcsbb,1,rpi); + % decision: if the lower edge is in between two frequency bins, round to the ceiling + % decision: if the upper edge is in between two frequency bins, round to the floor + % rationale: a frequency bin captures energy at frequencies +/- 0.5*Rayleigh frequency - iBD = reshape(padarray(reshape(1:ndum*rpi,ndim,[]),ndim,'circular'),[],1); - jBD = reshape(padarray(1:ndum*rpi,1,'replicate'),[],1); - prcsbb = sparse(iBD,jBD,reshape(pro_prcsbb,[],1),ndum*rpi,ndum*rpi); + % decision: if a single frequency bin is requested which is in between the sampled frequencies, + % take the nearest + if fbeg==fend + fbegindx = nearest(comp3.freq, fbeg); + findx = fbegindx; + else + fbegindx = find(comp3.freq-fbeg>=0, 1, 'first'); + fendindx = find(comp3.freq-fend<=0, 1, 'last'); + findx = fbegindx:fendindx; + end - iv_set = reshape( padarray([1:nsource]',(rpi*ceil(nsource/rpi))-nsource,'post'),rpi,[])' ; - for iset = 1:size(iv_set,1) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + for f=findx + disp(['f ' num2str(f)]) + mimf = zeros(nsource, nsource, 'single'); - iv = nonzeros(iv_set(iset,:))'; - jv = iv(1):nsource; + WlfAic = cat(1,source_bic.avg.mom{source_bic.inside(:)'}); + WlfAic = reshape( permute( reshape(WlfAic,ndim,nsource,[]),[2 1 3]),nsource*ndim,[]) ; + ndum = size(WlfAic,1); - niv = length(iv); - njv = length(jv); + CS = comp3.crsspctrm(:,:,f); - pro_prcsaa = zeros(ndim,ndim,niv); - for i = 1:niv - pro_prcsaa(:,:,i) = prcsbb((iv(i)-1)*ndim + [1:ndim],(iv(i)-1)*ndim + [1:ndim]); + cs_bb = hcp_cs2csvv(CS,WlfAic,ndim); + pro_prcsbb = zeros(ndim,ndum); + for iv=1:nsource + pro_prcsbb(:,(iv-1)*ndim + [1:ndim]) = pinv(real( full(cs_bb((iv-1)*ndim + [1:ndim],(iv-1)*ndim + [1:ndim])))); end - pro_prcsaa = repmat(pro_prcsaa,[1 njv 1]); - prcsaa = sparse(iBD(1:ndim*ndim*njv*niv),jBD(1:ndim*ndim*njv*niv),reshape(pro_prcsaa,[],1),ndim*njv*niv,ndim*njv*niv); - - indA = reshape(repmat(iv',1,ndim) + repmat([0 nsource 2*nsource],niv,1),1,[]); - indB = reshape(repmat(jv',1,ndim) + repmat([0 nsource 2*nsource],njv,1),1,[]); - - CSso_iv = WlfAic(indA,:)* CS * (WlfAic(indB,:)'); - - nvox_iv = size(CSso_iv,1)/ndim; - nvox_jv = size(CSso_iv,2)/ndim; - - CSso_iv = reshape(CSso_iv,niv,ndim,ndim*njv); - CSso_iv = permute(CSso_iv,[1 3 2]); - CSso_iv = reshape(CSso_iv,niv,njv,ndim,ndim); - CSso_iv = permute(CSso_iv,[1 2 4 3]); + pro_prcsbb = repmat(pro_prcsbb,1,rpi); - cs_ab = sparse(iBD(1:ndim*ndim*njv*niv),jBD(1:ndim*ndim*njv*niv),reshape(permute(CSso_iv,[3 4 2 1]),[],1),ndim*njv*niv,ndim*njv*niv); + iBD = reshape(padarray(reshape(1:ndum*rpi,ndim,[]),ndim,'circular'),[],1); + jBD = reshape(padarray(1:ndum*rpi,1,'replicate'),[],1); + prcsbb = sparse(iBD,jBD,reshape(pro_prcsbb,[],1),ndum*rpi,ndum*rpi); - sub_ind = zeros(niv,njv*3); - for i=1:niv - sub_ind(i,:) = (i-1)*nsource*ndim + reshape( ( repmat((jv-1)'*ndim,1,ndim) + repmat([1:ndim],njv,1) )',1,[]); + iv_set = reshape( padarray([1:nsource]',(rpi*ceil(nsource/rpi))-nsource,'post'),rpi,[])' ; + for iset = 1:size(iv_set,1) + + iv = nonzeros(iv_set(iset,:))'; + jv = iv(1):nsource; + + niv = length(iv); + njv = length(jv); + + pro_prcsaa = zeros(ndim,ndim,niv); + for i = 1:niv + pro_prcsaa(:,:,i) = prcsbb((iv(i)-1)*ndim + [1:ndim],(iv(i)-1)*ndim + [1:ndim]); + end + pro_prcsaa = repmat(pro_prcsaa,[1 njv 1]); + prcsaa = sparse(iBD(1:ndim*ndim*njv*niv),jBD(1:ndim*ndim*njv*niv),reshape(pro_prcsaa,[],1),ndim*njv*niv,ndim*njv*niv); + + indA = reshape(repmat(iv',1,ndim) + repmat([0 nsource 2*nsource],niv,1),1,[]); + indB = reshape(repmat(jv',1,ndim) + repmat([0 nsource 2*nsource],njv,1),1,[]); + + CSso_iv = WlfAic(indA,:)* CS * (WlfAic(indB,:)'); + + nvox_iv = size(CSso_iv,1)/ndim; + nvox_jv = size(CSso_iv,2)/ndim; + + CSso_iv = reshape(CSso_iv,niv,ndim,ndim*njv); + CSso_iv = permute(CSso_iv,[1 3 2]); + CSso_iv = reshape(CSso_iv,niv,njv,ndim,ndim); + CSso_iv = permute(CSso_iv,[1 2 4 3]); + + cs_ab = sparse(iBD(1:ndim*ndim*njv*niv),jBD(1:ndim*ndim*njv*niv),reshape(permute(CSso_iv,[3 4 2 1]),[],1),ndim*njv*niv,ndim*njv*niv); + + sub_ind = zeros(niv,njv*3); + for i=1:niv + sub_ind(i,:) = (i-1)*nsource*ndim + reshape( ( repmat((jv-1)'*ndim,1,ndim) + repmat([1:ndim],njv,1) )',1,[]); + end + sub_ind = reshape(sub_ind',1,[]); + + pro_MIM = full( diag(prcsaa * imag(cs_ab) * prcsbb(sub_ind,sub_ind) * imag(cs_ab)')) ; + + mimf(iv,jv) = cast( squeeze(permute(sum( reshape(pro_MIM,ndim,[],niv),1),[3 2 1])),'single'); + + count = count+1; + end - sub_ind = reshape(sub_ind',1,[]); - - pro_MIM = full( diag(prcsaa * imag(cs_ab) * prcsbb(sub_ind,sub_ind) * imag(cs_ab)')) ; - - mimf(iv,jv) = cast( squeeze(permute(sum( reshape(pro_MIM,ndim,[],niv),1),[3 2 1])),'single'); - - count = count+1; - % dispstat(sprintf('Progress - % %d%%',round(100*count/allit)),'timestamp'); + mimf = ( triu(mimf) + triu(mimf,1)' ); + mimf = mimf - diag(0.5*diag(mimf)); + mimf_band = mimf_band + mimf; end - mimf = ( triu(mimf) + triu(mimf,1)' ); - mimf = mimf - diag(0.5*diag(mimf)); - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % normalize with the number of frequency bins + mimf_band = mimf_band./numel(findx); - imagcoh=[]; - imagcoh.freq = comp2.freq(f); - imagcoh.dimord = 'pos_pos'; - imagcoh.mimspctrm = mimf; - imagcoh.pos = source.pos(source.inside,:); + % get the data in 'full' representation, i.e. also allocate nans to the + % outside vertices + tmp = nan+zeros(size(source.pos,1)); + tmp(source.inside, source.inside) = mimf_band; - hcp_write_matlab([outputfile,'_',num2str(round(comp3.freq(f))),'Hz'], 'imagcoh'); - hcp_check_pipelineoutput('icaimagcoh', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid, 'freq', num2str(round(comp3.freq(f)))); + % create the output structure + imagcoh = []; + imagcoh.freq = mean(comp3.freq(findx)); + imagcoh.dimord = 'pos_pos'; + imagcoh.mimspctrm = tmp; + imagcoh.pos = source.pos; + if isfield(source, 'tri'), imagcoh.tri = source.tri; end + if isfield(source, 'inside'), imagcoh.inside = source.inside; end + if isfield(source, 'outside'), imagcoh.outside = source.outside; end + if isfield(source, 'brainstructure'), imagcoh.brainstructure = source.brainstructure; end + if isfield(source, 'brainstructure'), imagcoh.brainstructurelabel = source.brainstructurelabel; end -end % nfreq - -% dispstat('Finished.','keepprev'); -% tElapsed = toc(tStart); -% disp(['Elapsed time = ',num2str(floor(tElapsed/60)),' min and ',num2str(round(tElapsed - floor(tElapsed/60)*60)),' sec.']); + % write as a cifti + hcp_write_cifti([outputfile,'_',band_prefix{fband}], imagcoh, 'parameter', 'mimspctrm', 'type', 'dconn'); + + % also write as a mat file + hcp_write_matlab([outputfile,'_',band_prefix{fband}], 'imagcoh'); + + % check the output + hcp_check_pipelineoutput('icaimagcoh', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid, 'band', band_prefix{fband}); + +end % fband diff --git a/pipeline_scripts/hcp_icamne.m b/pipeline_scripts/hcp_icamne.m index 06108d8..650cca1 100644 --- a/pipeline_scripts/hcp_icamne.m +++ b/pipeline_scripts/hcp_icamne.m @@ -60,9 +60,10 @@ % change to the location of the processed data (input and output) cd(pipelinedatadir) -% hcp_check_pipelineoutput('baddata', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -% hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); -% hcp_check_pipelineoutput('anatomy', 'subject', subjectid); +hcp_check_pipelineoutput('baddata', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('icaclass', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('icaclass_qc', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); +hcp_check_pipelineoutput('anatomy', 'subject', subjectid); % print the matlab and megconnectome version to screen for provenance ver('megconnectome') @@ -80,7 +81,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hcp_read_matlab([resultprefix '_icaclass_vs.mat']) -% comp_class.grad=rmfield(comp_class.grad,'balance'); % read the source and volume conduction model from current dir with % outputs of previous pipelines @@ -94,12 +94,7 @@ hcp_read_matlab(sprintf('%s.mat', [subjectid '_MEG_anatomy_headmodel'])); headmodel = ft_convert_units(headmodel, 'cm'); -mri = ft_read_mri([subjectid '_MEG_anatomy_anatomical.nii']); -mri=ft_convert_units(mri, 'cm'); - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ensure the correct geometrical units -% sourcemodel = ft_convert_units(sourcemodelsubj, 'mm'); grad = ft_read_sens(filename); gradBalanced = grad; gradBalanced = ft_apply_montage(gradBalanced, gradBalanced.balance.Supine, 'keepunused', 'yes', 'inverse', 'yes'); @@ -108,42 +103,26 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% deal with the component data in order for ft_sourceanalysis to be able to +% Prepare the component data in order for ft_sourceanalysis to be able to % swallow it -mixing = comp_class.topo; +mixing = comp_class.topo; channels = comp_class.topolabel; % normalisation of the topographies for i = 1:size(mixing, 2) - val(i) = 0.01*max(abs(mixing(:, i))); - mixing(:, i) = mixing(:, i)/val(i); + val(i) = 0.01*max(abs(mixing(:, i))); + mixing(:, i) = mixing(:, i)/val(i); end - % create a 'timelock' structure tlck = []; tlck.label = channels; -tlck.cov = eye(numel(tlck.label)); % perhaps this one should be scaled +tlck.cov = eye(numel(tlck.label)); tlck.time=1; tlck.grad = grad; tlck.dimord = 'chan_time'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% prepare the leadfields: this needs to be done only once: -% if I understand the method well, each component will be reconstructed by -% using an MNE with different regularisation - -% keep parcel info if present -if isfield(sourcemodelsubj, 'label') - % parcellation.label = sourcemodelsubj.label; - % parcellation.labelindx = sourcemodelsubj.labelindx; - % parcellation.annotation = sourcemodelsubj.annotation; - % parcellation.ctable = sourcemodelsubj.ctable; - parcellation.label = sourcemodelsubj.aparclabel; - parcellation.labelindx = sourcemodelsubj.aparc; - % parcellation.annotation = sourcemodelsubj.annotation; - % parcellation.ctable = sourcemodelsubj.ctable; -end - +% compute the forward solution cfg = []; cfg.vol = headmodel; @@ -155,54 +134,58 @@ gridLF = ft_prepare_leadfield(cfg); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% do the source reconstruction. In this case all components are -% reconstructed using the same amount of regularisation +% do an MNE with different regularisation for each component -noise_level=8; +% this parameter is hard-coded here +noise_level = 8; -cfg = []; -cfg.method = 'mne'; -cfg.grid = gridLF; -cfg.vol = headmodel; -cfg.channel = channels; +% specify the static part of the cfg for the source reconstruction +cfg = []; +cfg.method = 'mne'; +cfg.grid = gridLF; +cfg.vol = headmodel; +cfg.channel = channels; cfg.mne.prewhiten = 'yes'; -cfg.mne.noisecov=eye(numel(channels))*noise_level; - -nic=size(mixing,2); -for i=1:nic - tlck.avg = mixing(:,i); - - mgfp(i)=sqrt(mean((mixing(:,i)-mean(mixing(:,i))).^2)); - cfg.mne.snr=mgfp(i)/noise_level; - - noisevec(i)=cfg.mne.snr; - - tmp = ft_sourceanalysis(cfg, tlck); - if i==1 - source=tmp; - else - % concatenate the mom here - for k = 1:numel(tmp.inside) - source.avg.mom{source.inside(k)} = cat(2,source.avg.mom{source.inside(k)}, tmp.avg.mom{source.inside(k)}); - end - source.avg.pow = horzcat(source.avg.pow,tmp.avg.pow); +cfg.mne.noisecov = eye(numel(channels))*noise_level; + +% loop over components, due to component-specific regularisation +for i=1:size(mixing,2) + + % use the channel-level topography of the current component + tlck.avg = mixing(:,i); + + % estimate the snr of the current component + cfg.mne.snr = sqrt(mean((mixing(:,i)-mean(mixing(:,i))).^2))/noise_level; + noisevec(i) = cfg.mne.snr; + + tmp = ft_sourceanalysis(cfg, tlck); + if i==1 + % create the output source structure in the first iteration + source=tmp; + else + % concatenate the reconstructed source level topography to the previously computed ones + for k = 1:numel(tmp.inside) + source.avg.mom{source.inside(k)} = cat(2,source.avg.mom{source.inside(k)}, tmp.avg.mom{source.inside(k)}); end + source.avg.pow = horzcat(source.avg.pow,tmp.avg.pow); + end end -source.val=val; -source.time=1:size(mixing,2); -source.noise=noisevec; +% add some relevant fields +source.val = val; +source.time = 1:size(mixing,2); +source.snr = noisevec; +if isfield(sourcemodelsubj,'tri'), source.tri = sourcemodelsubj.tri; end +if isfield(sourcemodelsubj,'brainstructure'), source.brainstructure = sourcemodelsubj.brainstructure; end +if isfield(sourcemodelsubj,'brainstructurelabel'), source.brainstructurelabel = sourcemodelsubj.brainstructurelabel; end -if(isfield(sourcemodelsubj,'tri')) source.tri=sourcemodelsubj.tri; end - -if exist('parcellation', 'var') - % store them back in the source structure - source.label = parcellation.label; - source.labelindx = parcellation.labelindx; - % source.annotation = parcellation.annotation; -end +% save the data as a mat-file +hcp_write_matlab([resultprefix,'_icamne'],'source'); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Plotting and QC is done here +% this is for plotting cfgtopo =[]; cfgtopo.grad=grad; cfgtopo.zlim='maxabs'; @@ -222,7 +205,6 @@ yMargin = 1; %# bottom/top margins from page borders xSize = X - 2*xMargin; %# figure size on paper (widht & hieght) ySize = Y - 2*yMargin; %# figure size on paper (widht & hieght) -% figure('Menubar','none'); cfg = []; @@ -235,10 +217,7 @@ for k = 1:numel(source.time) tmp.avg.pow = source.avg.pow(:, k); tmp.time=source.time(k); - % tmp.avg.mask=zeros(size(tmp.avg.pow)); maxabs=max(max(max(tmp.avg.pow))); - % indxmask=find(tmp.avg.pow>0.4*maxabs); - % tmp.avg.mask(indxmask)=1; imgname = [resultprefix '_icamne_' num2str(k) '.png']; ft_plot_mesh(tmp,'vertexcolor',tmp.avg.pow) @@ -268,9 +247,6 @@ hcp_write_figure(imgname, h1) close(h1) end -hcp_write_matlab([resultprefix,'_icamne'],'source'); - - % ensure that the expected output files were created -% hcp_check_pipelineoutput('icamne', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); \ No newline at end of file +hcp_check_pipelineoutput('icamne', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); diff --git a/pipeline_scripts/hcp_srcavgdics.m b/pipeline_scripts/hcp_srcavgdics.m new file mode 100644 index 0000000..882ea33 --- /dev/null +++ b/pipeline_scripts/hcp_srcavgdics.m @@ -0,0 +1,478 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) +% +% This file is part of megconnectome. +% +% megconnectome 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. +% +% megconnectome 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 megconnectome. If not, see . +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% setup the execution environment +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ensure that the time and date of execution are not stored in the provenance information +opengl software; + + +% ensure that the time and date of execution are not stored in the provenance information +global ft_default +ft_default.trackcallinfo = 'no'; + +% allow the user to specify the path where additional data is present, e.g. the channel layout or anatomy files +if exist('path', 'var') + addpath(path) +end + +%% INPUT +% Here 2 filenames are required for Working Memory and Story Math and 1 for +% Motor. So there are 2 variables + +if ~exist('filename1', 'var') + error('filename1 at least should be specified') +end + +if ~exist('filename2', 'var') + filename2=''; +end + +% the filename is assumed to be something like +% 'rawdatadir/Phase1MEG/Subjects/CP10018/Experiments/CP10018_MEG/Scans/1-Rnoise_MNN_V1/Resources/4D/c,rfDC' + +tokF1 = tokenize(filename1, '/'); if ~isempty(filename2), tokF2 = tokenize(filename2, '/');end; + +if ~exist('experimentid', 'var') + experimentid1 = tokF1{end-4}; + if ~isempty(filename2), + experimentid2 = tokF2{end-4}; + if ~strcmp(experimentid1,experimentid2), + error('the two filenames provided have different experimentid'); + else + experimentid=experimentid1; + end + else + experimentid=experimentid1; + end +end + + + +if ~exist('subjectid', 'var') + dumInd=regexp(experimentid,'_MEG'); + subjectid1 = experimentid(1:dumInd-1); + if ~isempty(filename2), + dumInd=regexp(experimentid,'_MEG'); + subjectid2 = experimentid(1:dumInd-1); + + if ~strcmp(subjectid1,subjectid2), + error('the two filenames provided are from different subjects'); + else + subjectid=subjectid1; + end + else + subjectid=subjectid1; + end +end + +%-------------------------------- +%------------------------------------------------ +if ~exist('scanid1', 'var') + scanid1 = tokF1{end-2}; +end +tmptok1 = tokenize(scanid1, '-'); +scanmnem1 = tmptok1{2}; +%------- The following is just for the cases where the suffix "_Run1 or +%Run2" has been added to the scanid in order to differentiate between 2 +%different runs of the same paradigm. i.e. The way Robert has saved data in +%his database for subject CP10168. +indRunStr=regexp(scanmnem1,'_Run'); +if ~isempty(indRunStr), + scanmnem1=scanmnem1(1:indRunStr(1)-1); +end + + +if ~exist('scanid2', 'var') + if ~isempty(filename2), + scanid2 = tokF2{end-2}; + else + scanid2=''; + end +end +if ~isempty(scanid2) + tmptok2 = tokenize(scanid2, '-'); + scanmnem2 = tmptok2{2}; + %------- The following is just for the cases where the suffix "_Run1 or + %Run2" has been added to the scanid in order to differentiate between 2 + %different runs of the same paradigm. i.e. The way Robert has saved data in + %his database for subject CP10168. + indRunStr=regexp(scanmnem2,'_Run'); + if ~isempty(indRunStr), + scanmnem2=scanmnem2(1:indRunStr(1)-1); + end +else + scanmnem2=''; +end; +%------------------------------------------------ +%-------------------------------- +if ~isempty(scanmnem2) + if ~strcmp(scanmnem1,scanmnem2) + error('the two scan mnemonics do not seem to agree'); + end +end +scanmnem=scanmnem1; + +if ~exist('anatomydir', 'var') + disp('No anatomydir provided - Assuming is in experimentid/Resources/anatomy/'); + indExpStr=regexp(filename1,experimentid); + anatomydir=[filename1(1:indExpStr-1),experimentid,'/RESOURCES/anatomy/']; + %error('No anatomy directory was provided. Anatomical information is required for this pipeline.'); +end + +% Check if anatomy files are present +dummysubjid=[anatomydir,subjectid]; % TODO! This is a temporary solution because the hcp_checkpipeoutput for anatomy assume that the files are always in the current directory +%hcp_check_pipelineoutput('anatomy', 'subject', dummysubjid); + +if ~exist('srcgridtype', 'var') + srcgridtype='3D'; +end + +if ~exist('datagroupstr', 'var') + datagroupstr=[]; +end + +if ~exist('contrastidstr', 'var') + contrastidstr=[]; +end + +if ~exist('freqbandstr', 'var') + freqbandstr=''; +end + +if ~exist('pipelinedatadir', 'var') + pipelinedatadir = hcp_pathdef; +end +if ~exist('savedir', 'var') + if strcmp(pipelinedatadir(end),'/') + savedir=pipelinedatadir; + else + savedir=[pipelinedatadir,'/']; + end +end +% print the matlab and megconnectome version to screen for provenance +ver('megconnectome') + +% print the value of all local variables to screen for provenance +w = whos; +w = {w.name}; +w = setdiff(w, {'w', 'ans'}); +for i=1:length(w) + fprintf(hcp_printstruct(w{i}, eval(w{i}))); +end + +% change to the location of the processed data (input and output) +cd(pipelinedatadir) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% execute the pipeline +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%====================================================== +%% THOROUGH CHECKS OF INPUTS BEFORE ANALYSIS + +Nfiles=1+(~isempty(filename2)); + +%================================ +% Should this stop the pipeline? +if Nfiles==1, + if (~isempty( strfind( scanid1 , 'Wrkmem' ) ))|(~isempty( strfind( scanid1 , 'StoryM' ))) + disp('WARNING!!! Only 1 file provided for Working memory or Story Math'); + end +end +%================================ +contrastid=tokenize(contrastidstr, ','); +if isempty(contrastid{1}) + contrastid=''; +end + +datagroupid=tokenize(datagroupstr, ','); +if isempty(datagroupid{1}) + datagroupid=''; +end +if (~isempty(contrastid))&(~isempty(datagroupid)) + error('Both constrast and datagroup have been provided. The contrastid contains the datagroupid aswell'); +end + +%-------- +freqbandid=tokenize(freqbandstr, ','); +if isempty(freqbandid{1}) + freqbandid=''; +end +if (~isempty(contrastid))&(~isempty(freqbandid)) + error('Both constrast and freq. bands have been provided. The contrastid contains the freqbandid aswell'); +end + + + + + +resultprefix = sprintf('%s_%s', experimentid, scanmnem); +savesuffix_general='srcavgdics'; + +% the location of the dataset, i.e. the c,rfDC file with full path + +%========================================= +%-- Load all contrasts lists +contrastfun = ['contrast_', scanmnem]; +%------------------ +for iFile=1:Nfiles, + eval(['scanid=scanid',num2str(iFile)]); + hcp_check_pipelineoutput('tmegpreproc', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); % Checking for trialinfo only + inputTrialInfoFile = sprintf('%s_%s_tmegpreproc_trialinfo',experimentid, scanid); + hcp_read_matlab(inputTrialInfoFile,'trlInfo'); + + + eval(['cntrstList{iFile}=',contrastfun,'(trlInfo)']); +end +%-------------------------------------------- +% CHeck that the 2 all contrast lists have the same number of contrasts +% and extract all the datagroupids + +Nallcontr1=length(cntrstList{1}); +callnames1=[]; +pipenames=[]; +for iC=1:Nallcontr1, + callnames1{iC}=cntrstList{1}{iC}.mnemprint; + pipenames{iC}=cntrstList{1}{iC}.pipeline; +end +if Nfiles==2, + Nallcontr2=length(cntrstList{2}); + if Nallcontr1~=Nallcontr2 + error('The two files do not have the same number of contrasts in their all contrast lists'); + end + + callnames2=[];for iC=1:Nallcontr2, callnames2{iC}=cntrstList{2}{iC}.mnemprint;end +end +%-----------Find only the contrasts that are flagged for this pipeline +[indxPipe,ind2]=match_str(pipenames,'srcavgdics'); + +if isempty(indxPipe) + error('No srcavgdics constasts were found in the allcontrast list'); +else + curPipecntrList{1}=cntrstList{1}(indxPipe); + curPipecallnames=callnames1(indxPipe); + if Nfiles==2, + curPipecntrList{2}=cntrstList{2}(indxPipe); + end +end +curPipeBandNames=[]; +for iA=1:length(curPipecntrList{1}) + curPipeBandNames{iA}=curPipecntrList{1}{iA}.freqband; +end + +Nsrcavgdicscontr=length(curPipecntrList{1}); +%--- End of checking the all contrast list +%------------------------------------------------------- +%======================================================================= +%======================================================================= +%======================================================================= +%% FUSE all contrasts list with inputs (if present otherwise use all contrasts) +procCntrList=[]; +if ~isempty(contrastid) + NcontrIn=length(contrastid); + [indAll,indIn]=match_str(curPipecallnames,contrastid); + if length(indIn)~=NcontrIn + error(['Some contrast from the provided input were not found ']); + end + procCntrList{1}=curPipecntrList{1}(indAll); + procCntrNames=curPipecallnames(indAll); + procCntrBandNames=curPipecallnames(indAll); + if Nfiles==2, + procCntrList{2}=curPipecntrList{2}(indAll); + end +else + if isempty(datagroupid) + procCntrList=curPipecntrList; + procCntrNames=curPipecallnames; + procCntrBandNames=curPipeBandNames; + else + procCntrList=[]; + procCntrNames=[]; + procCntrBandNames=[]; + countCntr=1; + for iC=1:Nsrcavgdicscontr + iGr=1; + while iGr<=length(datagroupid) + + if strcmp(curPipecntrList{1}{iC}.lockmode,datagroupid{iGr}) + procCntrList{1}{countCntr}=curPipecntrList{1}{iC}; + procCntrNames{countCntr}=curPipecallnames{iC}; + procCntrBandNames{countCntr}=curPipeBandNames{iC}; + if Nfiles==2, + procCntrList{2}{countCntr}=curPipecntrList{2}{iC}; + end + countCntr=countCntr+1; + iGr=length(datagroupid)+1; + else + iGr=iGr+1; + end + end + end + + + + end + if ~isempty(freqbandid) + tmpprocCntrList=[]; + tmpprocCntrNames=[]; + tmpprocCntrBandNames=[]; + countCntr=1; + for iC=1:length(procCntrBandNames) + iFB=1; + while iFB<=length(freqbandid) + + if strcmp(procCntrBandNames(iC),freqbandid{iFB}) + tmpprocCntrList{1}{countCntr}=procCntrList{1}{iC}; + tmpprocCntrNames{countCntr}=procCntrNames{iC}; + tmpprocCntrBandNames{countCntr}=procCntrBandNames{iC}; + if Nfiles==2, + tmpprocCntrList{2}{countCntr}=procCntrList{2}{iC}; + end + countCntr=countCntr+1; + iFB=length(freqbandid)+1; + else + iFB=iFB+1; + end + end + + + end + + procCntrList=tmpprocCntrList; + procCntrNames=tmpprocCntrNames; + procCntrBandNames=tmpprocCntrBandNames; + + end +end +%---- +if isempty(procCntrList) + procCntrList=curPipecntrList; + procCntrNames=curPipecallnames; + procCntrBandNames=curPipeBandNames; +end + +%--- END OF constructing the contrast list +%========================================================================== +%--- END OF checking phase before analysis +%========================================================================== +%========================================================================== +%========================================================================== +%-- Check if tfsens data is available for the data groups involved +Nproccontr=length(procCntrNames); +procGroups=[]; +for iC=1:Nproccontr, + procGroups=unique([procGroups,procCntrList{1}{iC}.lockmode]); +end +%{ +for iGr=1:length(procGroups) + curGroup=procGroups{iGr}; + curBands=[]; + for iC=1:Nproccontr + if strcmp(procCntrList{1}{iC}.lockmode,curGroup) + curBands=[curBands procCntrBandNames(iC)]; + end + end + if ~isempty(curBands) + curBands=unique(curBands); +% hcp_check_pipelineoutput('tfsens', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid1,'datagroup',curGroup,'band',curBands); + if Nfiles==2, + % hcp_check_pipelineoutput('tfsens', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid2,'datagroup',curGroup,'band',curBands); + end + else + warning('No contrasts were found'); + end +end +%} +%============================================================ + +% bandDef={'D', [1 3] +% 'TH', [4 7] +% 'A', [8 14] +% 'Blow',[15 25] +% 'Bhigh',[26 34] +% 'Glow',[35 49] +% 'Gmid',[50 75] +% 'Ghigh', [76 120]}; + + +bandDef={'delta' [1 4] + 'theta' [4 8] + 'alpha' [8 15] + 'betalow' [15 26] + 'betahigh' [26 35] + 'gammalow' [35 50] + 'gammamid' [50 76] + 'gammahigh' [76 120]}; + + +%{ +bandDef={'D1', [1 3] + 'D2', [2 4] + 'TH1', [3 6] + 'TH2', [4 7] + 'A1', [6 11] + 'A2', [8 13] + 'A3', [10 15] + 'B1', [12 18] + 'B2', [15 23] + 'B3', [20 28] + 'B4', [25 35] + 'G1', [30 40] + 'G2', [35 50] + 'G3', [45 60] + 'G4', [55 75] + 'G5', [65 85] + 'G6', [75 95] + 'G7', [85 110]}; +%} +%========================================================================== +% procCntrList; +% procCntrNames; +% procGroups; + +if Nfiles==1, + multiscanid={scanid1}; +elseif Nfiles==2, + multiscanid={scanid1 scanid2}; +end +% + +% allprocCntrList= procCntrList; +% procCntrList{1}=allprocCntrList{1}(1); +% procCntrList{2}=allprocCntrList{2}(1); + + +cfg = []; +cfg.contrastlist = procCntrList; +cfg.subjectid = subjectid; +cfg.experimentid = experimentid; +cfg.multiscanid = multiscanid; +cfg.bandinfo = bandDef; +cfg.anatomydir = anatomydir; +cfg.gridtype = srcgridtype; +cfg.savedir = savedir; + +[outStatus] = hcp_srcavgdics_contrasts(cfg); + +% hcp_check_pipelineoutput('srcavgdics', 'subject', subjectid, 'experiment', experimentid, 'scan', scanmnem,'avgmode',avgmode,'contrasts',procCntrNames); + + diff --git a/pipeline_scripts/hcp_srcavglcmv.m b/pipeline_scripts/hcp_srcavglcmv.m new file mode 100644 index 0000000..9dea910 --- /dev/null +++ b/pipeline_scripts/hcp_srcavglcmv.m @@ -0,0 +1,360 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Copyright (C) 2011-2014 by the Human Connectome Project, WU-Minn Consortium (1U54MH091657) +% +% This file is part of megconnectome. +% +% megconnectome 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. +% +% megconnectome 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 megconnectome. If not, see . +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% setup the execution environment +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +opengl software; + + +% ensure that the time and date of execution are not stored in the provenance information +global ft_default +ft_default.trackcallinfo = 'no'; + +% allow the user to specify the path where additional data is present, e.g. the channel layout or anatomy files +if exist('path', 'var') + addpath(path) +end + +%% INPUT +% Here 2 filenames are required for Working Memory and Story Math and 1 for +% Motor. So there are 2 variables + +if ~exist('filename1', 'var') + error('filename1 at least should be specified') +end + +if ~exist('filename2', 'var') + filename2=''; +end + +% the filename is assumed to be something like +% 'rawdatadir/Phase1MEG/Subjects/CP10018/Experiments/CP10018_MEG/Scans/1-Rnoise_MNN_V1/Resources/4D/c,rfDC' + +tokF1 = tokenize(filename1, '/'); if ~isempty(filename2), tokF2 = tokenize(filename2, '/');end; + +if ~exist('experimentid', 'var') + experimentid1 = tokF1{end-4}; + if ~isempty(filename2), + experimentid2 = tokF2{end-4}; + if ~strcmp(experimentid1,experimentid2), + error('the two filenames provided have different experimentid'); + else + experimentid=experimentid1; + end + else + experimentid=experimentid1; + end +end + + + +if ~exist('subjectid', 'var') + dumInd=regexp(experimentid,'_MEG'); + subjectid1 = experimentid(1:dumInd-1); + if ~isempty(filename2), + dumInd=regexp(experimentid,'_MEG'); + subjectid2 = experimentid(1:dumInd-1); + + if ~strcmp(subjectid1,subjectid2), + error('the two filenames provided are from different subjects'); + else + subjectid=subjectid1; + end + else + subjectid=subjectid1; + end +end + +%-------------------------------- +%------------------------------------------------ +if ~exist('scanid1', 'var') + scanid1 = tokF1{end-2}; +end +tmptok1 = tokenize(scanid1, '-'); +scanmnem1 = tmptok1{2}; +%------- The following is just for the cases where the suffix "_Run1 or +%Run2" has been added to the scanid in order to differentiate between 2 +%different runs of the same paradigm. i.e. The way Robert has saved data in +%his database for subject CP10168. +indRunStr=regexp(scanmnem1,'_Run'); +if ~isempty(indRunStr), + scanmnem1=scanmnem1(1:indRunStr(1)-1); +end + + +if ~exist('scanid2', 'var') + if ~isempty(filename2), + scanid2 = tokF2{end-2}; + else + scanid2=''; + end +end +if ~isempty(scanid2) + tmptok2 = tokenize(scanid2, '-'); + scanmnem2 = tmptok2{2}; + %------- The following is just for the cases where the suffix "_Run1 or + %Run2" has been added to the scanid in order to differentiate between 2 + %different runs of the same paradigm. i.e. The way Robert has saved data in + %his database for subject CP10168. + indRunStr=regexp(scanmnem2,'_Run'); + if ~isempty(indRunStr), + scanmnem2=scanmnem2(1:indRunStr(1)-1); + end +else + scanmnem2=''; +end; +%------------------------------------------------ +%-------------------------------- +if ~isempty(scanmnem2) + if ~strcmp(scanmnem1,scanmnem2) + error('the two scan mnemonics do not seem to agree'); + end +end +scanmnem=scanmnem1; + +if ~exist('anatomydir', 'var') + disp('No anatomydir provided - Assuming is in experimentid/Resources/anatomy/'); + indExpStr=regexp(filename1,experimentid); + anatomydir=[filename1(1:indExpStr-1),experimentid,'/RESOURCES/anatomy/']; + %error('No anatomy directory was provided. Anatomical information is required for this pipeline.'); +end + +% Check if anatomy files are present +dummysubjid=[anatomydir,subjectid]; % TODO! This is a temporary solution because the hcp_checkpipeoutput for anatomy assume that the files are always in the current directory +%hcp_check_pipelineoutput('anatomy', 'subject', dummysubjid); + +if ~exist('srcgridtype', 'var') + srcgridtype='3D'; +end + +if ~exist('datagroupstr', 'var') + datagroupstr=[]; +end + +if ~exist('contrastidstr', 'var') + contrastidstr=[]; +end + +if ~exist('pipelinedatadir', 'var') + pipelinedatadir = hcp_pathdef; +end +if ~exist('savedir', 'var') + if strcmp(pipelinedatadir(end),'/') + savedir=pipelinedatadir; + else + savedir=[pipelinedatadir,'/']; + end +end + + +% print the matlab and megconnectome version to screen for provenance +ver('megconnectome') + +% print the value of all local variables to screen for provenance +w = whos; +w = {w.name}; +w = setdiff(w, {'w', 'ans'}); +for i=1:length(w) + fprintf(hcp_printstruct(w{i}, eval(w{i}))); +end + +% change to the location of the processed data (input and output) +cd(pipelinedatadir) + +%====================================================== +%% THOROUGH CHECKS OF INPUTS BEFORE ANALYSIS + +Nfiles=1+(~isempty(filename2)); + +%================================ +% Should this stop the pipeline? +if Nfiles==1, + if (~isempty( strfind( scanid1 , 'Wrkmem' ) ))|(~isempty( strfind( scanid1 , 'StoryM' ))) + disp('WARNING!!! Only 1 file provided for Working memory or Story Math'); + end +end +%================================ +contrastid=tokenize(contrastidstr, ','); +if isempty(contrastid{1}) + contrastid=''; +end + +datagroupid=tokenize(datagroupstr, ','); +if isempty(datagroupid{1}) + datagroupid=''; +end +if (~isempty(contrastid))&(~isempty(datagroupid)) + error('Both constrast and datagroup have been provided. The contrastid contains the datagroupid aswell'); +end + +resultprefix = sprintf('%s_%s', experimentid, scanmnem); +savesuffix_general='srcavglcmv'; + +% the location of the dataset, i.e. the c,rfDC file with full path + +%========================================= +%-- Load all contrasts lists +contrastfun = ['contrast_', scanmnem]; +%------------------ +for iFile=1:Nfiles, + eval(['scanid=scanid',num2str(iFile)]); + hcp_check_pipelineoutput('tmegpreproc', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid); % Checking for trialinfo only + inputTrialInfoFile = sprintf('%s_%s_tmegpreproc_trialinfo',experimentid, scanid); + hcp_read_matlab(inputTrialInfoFile,'trlInfo'); + + + eval(['cntrstList{iFile}=',contrastfun,'(trlInfo)']); +end +%-------------------------------------------- +% CHeck that the 2 all contrast lists have the same number of contrasts +% and extract all the datagroupids + +Nallcontr1=length(cntrstList{1}); +callnames1=[]; +pipenames=[]; +for iC=1:Nallcontr1, + callnames1{iC}=cntrstList{1}{iC}.mnemprint; + pipenames{iC}=cntrstList{1}{iC}.pipeline; +end +if Nfiles==2, + Nallcontr2=length(cntrstList{2}); + if Nallcontr1~=Nallcontr2 + error('The two files do not have the same number of contrasts in their all contrast lists'); + end + + callnames2=[];for iC=1:Nallcontr2, callnames2{iC}=cntrstList{2}{iC}.mnemprint;end +end +%-----------Find only the contrasts that are flagged for this pipeline +[indxPipe,ind2]=match_str(pipenames,'srcavglcmv'); + +if isempty(indxPipe) + error('No srcavglcmv constrasts were found in the allcontrast list'); +else + curPipecntrList{1}=cntrstList{1}(indxPipe); + curPipecallnames=callnames1(indxPipe); + if Nfiles==2, + curPipecntrList{2}=cntrstList{2}(indxPipe); + end +end + +Nsrcavgcontr=length(curPipecntrList{1}); +%--- End of checking the all contrast list +%------------------------------------------------------- +%======================================================================= +%======================================================================= +%======================================================================= +%% FUSE all contrasts list with inputs (if present otherwise use all contrasts) +procCntrList=[]; +if ~isempty(contrastid) + NcontrIn=length(contrastid); + [indAll,indIn]=match_str(curPipecallnames,contrastid); + if length(indIn)~=NcontrIn + error(['Some contrast from the provided input were not found ']); + end + procCntrList{1}=curPipecntrList{1}(indAll); + procCntrNames=curPipecallnames(indAll); + if Nfiles==2, + procCntrList{2}=curPipecntrList{2}(indAll); + end +else + if isempty(datagroupid) + procCntrList=curPipecntrList; + procCntrNames=curPipecallnames; + else + procCntrList=[]; + procCntrNames=[]; + countCntr=1; + for iC=1:Nsrcavgcontr + iGr=1; + while iGr<=length(datagroupid) + + if strcmp(curPipecntrList{1}{iC}.lockmode,datagroupid{iGr}) + procCntrList{1}{countCntr}=curPipecntrList{1}{iC}; + procCntrNames{countCntr}=curPipecallnames{iC}; + if Nfiles==2, + procCntrList{2}{countCntr}=curPipecntrList{2}{iC}; + end + countCntr=countCntr+1; + iGr=length(datagroupid)+1; + + end + iGr=iGr+1; + end + end + end +end + +if isempty(procCntrList) + procCntrList=curPipecntrList; + procCntrNames=curPipecallnames; +end +%--- END OF constructing the contrast list +%========================================================================== +%--- END OF checking phase before analysis +%========================================================================== +%========================================================================== +%========================================================================== +%-- Check if clean data is available for the data groups involved +Nproccontr=length(procCntrNames); +procGroups=[]; +for iC=1:Nproccontr, + procGroups=unique([procGroups,procCntrList{1}{iC}.lockmode]); +end + + + +%--- Checking if the clean data is there +for iG=1:length(procGroups), + hcp_check_pipelineoutput('tmegpreproc', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid1,'datagroup',procGroups{iG}); + if Nfiles==2, + hcp_check_pipelineoutput('tmegpreproc', 'subject', subjectid, 'experiment', experimentid, 'scan', scanid2,'datagroup',procGroups{iG}); + end +end + +%========================================================================== +%========================================================================== +% procCntrList; +% procCntrNames; +% procGroups; + +if Nfiles==1, + multiscanid={scanid1}; +elseif Nfiles==2, + multiscanid={scanid1 scanid2}; +end + + +%allprocCntrList= procCntrList; +%procCntrList{1}=allprocCntrList{1}(1); +%procCntrList{2}=allprocCntrList{2}(1); + +cfg = []; +cfg.contrastlist = procCntrList; +cfg.subjectid = subjectid; +cfg.experimentid = experimentid; +cfg.multiscanid = multiscanid; +cfg.anatomydir = anatomydir; +cfg.gridtype = srcgridtype; +cfg.savedir = savedir; + +[outStatus] = hcp_srcavglcmv_contrasts(cfg); + +hcp_check_pipelineoutput('srcavglcmv', 'subject', subjectid, 'experiment', experimentid, 'scan', scanmnem,'contrasts',procCntrNames,'gridtype',cfg.gridtype,'savedir',savedir); + diff --git a/template/Conte69.L.inflated.4k_fs_LR.surf.gii b/template/Conte69.L.inflated.4k_fs_LR.surf.gii new file mode 100644 index 0000000..665e706 --- /dev/null +++ b/template/Conte69.L.inflated.4k_fs_LR.surf.gii @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 + 0 0 0 1 + + + eJwMl3c80F0Uxu29914hklIppeJ3TkORBqUdbygttNFC9qpQqVTSliQhGvzOTUVUFA2lVEgRkU15/Xf/uPdz7z333Od5vjvlxPFzrx57H2AJb15HgumPPnKrjsc04/dknZsHp/coo7NgC+zuX4bOWivRyfI7t2bjc6by6xl/2fsTLdIyYxaiCpgVms7HSb/E7BIFertYA3/vmo7n7D/Q+UgDeBjlzSSejGfSljrsnMMlmiQoya4ezqSL48o5JaVS/kVca/GER9ZY8HkLa6+SRK9HimxevDpMCZDB/2yEmLavAGRKyKO02jfCwWpuSZci+m3lyXRcJvdvhyoucjpL/50K5+JmaKLw7l3kEWrPPc7VwaJl46jtYIP9y8X62K79ku+tE7LXqDPADr3h4slt7sWp0YZY9cKAswvQ5g3vG2KsYD0XXBTBL3hhiIr6NrDn2lO+9rshvvl8APoqxWlzlyH6JabD/X3jaNcjQ3SofQIZY5aTncHInNct0P8mmNZ91cfWeAnMET9Jx9t1MaRbC+3VsijGSRsPBo3FgajHFPZaDOdMMGeb0ns4iQYR/B1gzRSsQ7jiXQJ45I89W79Z1+5ueifkRTixzIbt/I3ez7BhzXL2XaaL19Arh8RcT2ata017Ft4F0Wh/FnrPh065XIOk5QfYo5mxlP/qAnjEhrFTd86R9PfLoDMcxbZ3ZtHSCzlgLBjLbNru04lVDB7ciWGJ9k9prFQlxKpFs3Um1WSr8xbOqkWyhSsbST79NehYhbNK3wHSFXwMyk6HWamtBLsWchOKGoOZZZUSkyk5Aj/rgtj2dzqMq1sLG0ZtZ2MTTFnMVC3cNFUf71V9oakG2rhzxl84saeVVulq4RiTe6D6fIAUzdVwp892aL4myhzs5bBXrI07/lGWadQI4rRLcvZB71XYyfHf4NjkLN6xQZPJ3SiCmgXmZNuqw4KMz8C9G37kk6THAlL2gdbRE7S0V58F7HeDlWtyyNbbiHlucoIpP8ppaqApO6e7FN44N9ADcQt2/IMHfLwyTCYR45hZgBcM18qzMhcrltG9Gro4Q5YSaMUk5i+Aj5aTWMqd8cxQeTpMtprDZrePY25DFpCe7MYEGsaxZDdJvPtHmyWK3OV6c6Rx6TcZ9lA9hPP2ksM3a/rp5p1R3K8ningz+i19PHXefkWBKhqa5VGymO7My2c0sfxYIoH1sWLhBzrYNcuddHeq8Ksy9fDyUg26ccKT3xekj4JrLvC/21L51hP6+GOiSvHTjS94rQR9LOvayc1bLUIr8/QxJk8Q3gqZ0gIFA7ycNAcyJjrRJB8DnNARBvtP7KC4wJHxi6sQcDqe2sQNsPxSOTguTifpFj3ctfE36Ky8SxoiujhRRRqr0yso6Y8Y7lg0mjXaN9p3zpJEw2gNJqp38uHleTLolijBltVXFaepKaD27XbS1LHn101WwSn7nlPS7gi+ul4dmx9l0P71N3i5nVpoeTCSQjNe8t9ztVEjzoESB7r4wi5tlNARIMHZ8qRUo41NCRv5l1PNSKlJG8sljew1Ls6lCet0cGL9Se6X8GbS0NTFghcy0L82iuY900W9rQthbFQqbR6th8eNouHdl2xa2aWLFS8yIUb5MQkJ6aLr8CuY2vOOHCcL4V6ZSey1qgJvelEERWKNmVZSJD9+WByn5quw8A/3+WxZGVzVJ8xWNHznXxopoJF7I+ksFafpI9qXIM3os4QmJUaooovVOVJ7Y06DS9RQL3AX7beaTkqr1bDlsiV9T19ElUvVUHnPK/7lhU2kdU8NN1Tp8zuEw2nSaXW8V5Zvv4qdpOp7GrhWM4M72nuDeis0MaxRBZ6d4SkxXgujtq6AQ23VdOKBFg4OHIXkLc205mM3rBewZ13Npfw4lUHQvmPFbBaI0hVzQYx/ZcA+iRuQwApRdH4pz7osp1CniyQOmw/RoOp8EvOQQaPPb2nHlZXkZCiHX13vUIPCJrpSLIfecIQePAgk9zdyuO3pCpq0O5L8FeXx8xU12hJ0nDyey2N+eDa/o+MKzRFVxItzvxT7Vt8j/cNK6PBOgBN485JkpFRQuqeIO/CqgYpWq6KpvTEYfekjW/lvMMvSiY13NqLulGbY8W4GM5s5i9xn/AaZM2NZ9I+1tPNxH9CwFksq3knliwTQ5rgEu9UdSpNthPHT9RbquhtDP1+L4LddT2inZiJt8hbFGzvTae+d07Q6XhT5dcE0zuEKZTSLYoo+kE5uHp17Koa0TpROxpeS63gJ1Fx+gv99sI5miUvh96zAYj+DP7TOWAYTSznOT1uEzVN4ATURy9nk2atpsPY1XM2fx34t2EenXn2ANTdsWHdmDA1FNkCOvgmrcztO41xawe+5Ihtvdo7S33fAjvIh6np8mZZc74KbMm8p0O8mFS/rhgvL79Ci7nxqMuuGNKtE2tjziCas7YZWjY30d+R9s4t6YPR4SxKT/kGnz/aDRvZ3/t6Lf8SJ/4Pc2R68lJcU26J+D9wfe7KCqgjiFHkY89OVaWqcoDjbUkg9B0yyKJ1cvleC6UtLVjX/JvU4vQPD7ZosfUo+nRergxWeoqwAiqgp4xMU326gx6+e0N7vdXBjN9G03Crab/oR5k24QMqz62nwRy04LDtMQqc6SWTFB5gV4Ew2VcLMQ3Zk7Udl8vgpx1w7MyB7qx/L8kwlk3fZoKmxjpn8yKDvOQUwd6wjuzeiIQ0XebB6Z832WTBSvfcEmhfrs0WPyikipgz2XJFi595U04OiUjCUaien4k9UbfUYMuZWkJteC5nd4eFxQiZ1Cg/SKeuHsLo5gayNxdlFhwfQqOlFlnWKTH3mJah8GMi4yCwqW3EdMtgGtn7TA1J5fAsOSSxho+XLSC89DwSGp7GK8mpS7CyAnbNGsZP8Z5q/sgBWy8gxTc+f9C31Dswr6Cbnum6yEs4Elymvac1TQfbg3UXYH32HvltIsdTTZ8F+73GS7lNm8Y+uwqfIYKY57yHFNmXAn8StbGLjMyqdkQWptsvYk2PvaPL0bGBZM9hRyyaaqn4LtAeMmZLdH9KIvw41HvJsQu0wzc89D2IL+6h7pxjztUwCL6qhpgpZNvVLBAifzCPHlWrsgMgd2HovhL0yLiMviTvwqnQbk9/1lmZ134Y3gcuY7NzvVJGTBbLWM5jI+V5KfHcVdA2NWeYlYbb/aCqs9JVjC/5Jsa168dDs1kN5oMTEFPdCvu9r8uzUZGdn8JBeEMzunq+mo/MeQPLXzcyktoEEdPNBxsKFxQX10jP1m+DSOpXtdxZlSWFpwP0zYBcc5NhAxRHoc5Rma2LVWNaXPZCS3k6/AvTYcedn4G9ygBkIfqOtBwlmDniztFvdFF6VB5UTnNneZaLM7PBVeGZjzSofyzONqSfg/lodph+kyf6LDAFfFzGms8OILQ2pAOeAAHbzRze5ORRBw08PpqQkyrZfuwnZCvOY9LA8i5l/BrpEx7MlD7WYxlAEHCI1lvPNmPm+fwTShrtYNi/KFovcBkuxNUylQZ69LkgF0SvI8nktVlceCQv+mbE/F03YCe3bcG2vH0s/rMBymk+D0hI3dspLix0fFwarWqYzq8kmLPnRCdBbvomtfKTF4o7shwvlC5nmEWNm3O0L+Z0eLCDHmLXslsB8Uxn2PH0xnFGWwl9xrSRiHgAzyqWxb3cxXd90FJxFZXFTaBJ53L8E9X9k8McFV0r3K4BsKWnUjRahiPfPwHSHOC7scOffXfkAK3qFcFzqBftNu1qgy/sv5M98xBk9GYTAOb2w1twKrraK4aX7XZCx5yC0Vigg7OoGnfLLUPlXC1OGe2FpdjlIapmgBj8Ap6t+g+vQODx8dghe75LCvsip+EL8L6hVaaN/MODbnEHIWjUW3Y/Px0nz+uBrw3Q8sX0xPjjcCfl6jrjj0TIs/94BIc0euPjaAsS1vRAzcyv+1JuJU84OwKuZe9HsuQWeLhqEyLZgzJmtiW+1BsFaJALV2kUxY1I/mJXE4K+ZDSOZrweEhxNw6bQHcLO1Cwr9EtF7STLEPOyCoqfJ+EdvFbwZ2wsdT45jprgcDEYNgZDjcXwWE8MlGwph46okFFDwmyZ3SQxT1I+ig38Yv3ecNN68FjvCKEIUai+PS6wisCbanvSilHDynkOoNCuILHpV8Opxf/RNSaHBS2q4osQdT2fdptT76rhwgzN+GltKlg3S6IVdZKtiB60PZHHsmBJ6pbwRVFzlceOBZLq7JAqSjRXwfaAzhX1JheBUeZy17xdvVpwNzX6yGPVenqfAR/D4oyS+XzKRuz1YDd0Johjd0cfJv2yEkPWC+D51AdT+6gFrGIJ47wSYu18E75zqg+ky+dD8URbfPOyFx00fYaqNOvIlfaA9siZlgQGeDx6AW/eUMVTeHM8PDcK71Sa4afsEbBupzyzjKZjkNg0/xQyC/s852BnL4bWFfaDosxQHWuaiS4kcGvlXkovCGOi6MJJtWCrd45dC2T9FXGe+jPrGHoI9gUq43qyFT3FLhvpsRVz09U2x2MprMDFIHl9a+3NL3O+Dm4wMFp5UgLR1z0GxWRyf1nnCtdOfoL5AGGvsz0BmTDssMhfAtAklUGsngI2HBmGTf+uIt0mgy+x+WPJCEl1/KWCPZT8Y39HBcQ0a+HXRAMx7Mg43nDbACzcHoaTNHjkdM7zmMgRL5Bbj3//Go+ncQVjVuw7vrJ6CzF8R30tlkvtGNVhpo4zL07fQLnWEsMUqGDEgRMMvtsKMYBW8eWig+JBRLNhFK6P15oPcP7XzILdYEQ1uaUGdcg7Y9Mtik8xOONj5CN59lsTPpZdA+mY1nIwTxRj3l7BzZwPsOSeIt536QTbyD1xa+xdk9BWxQkEQh/QHoOaLMZZZSuDFdf1wLtcGh8aM1IkbgPid83HPCNOMPzUI7yVXYTqni+tNh0DJfRMm7jXGGg8V3LM9khZPEQbj36oY+VGPrsuOh6VZamiLjry/z0r4EKqGQriUC9ULAYkFqjjGWAM+XEyGnj9KeMtxL2wRuQqDsfL4q+A6nO26C/Uu0vj20hs4t/gp2D4UQy8XQTxnUwPO24RQslYNm5W/grblPxAttMCOgDb47DYAey7Z44nqATBa2g/ZLi74+6kwXhs/AFZnPfHIISk8e3AQbgTtxO7rijg1Vx1LcC5FTaznFn3RwLe6V/kDbtogbaKJ14Xr7XWvz4ascA0c7yMO8qpboa9DDf8G+0Lp2SjY5KKCwbXXICP/FLzLUMA/n97BY5Hr8J+ZDHZVCOPeDfmw31Yc61O08Iwug/3HhLDskRXeqqkA246/ECg5F9s3v4Wb3/uhRHwVTj4zcpfOPrDw2Yo7W9oAG/vhoNwBnJExBO+0tXHhryG+UbmQy3mqjfwJ9WKjCDEYF6aNYyRfceYa4+CJtxZ+/bocBm1cwXKtBr7aegGC/9sN6S6qaKZQA3090ZALipiVJIxbzE5C0VIZ/NiujSuc0uGBsDiOPjMJf3y4AUcVhVDN1xHtWS7I3RuCb8IeqDC6CO687INP33ZifkspiOn2gVhdKPol18Cwmh4m7l7NK706woU76OGQTTAXL1TPTYvXRW+dybBQVxXqR5hIKSEJFmjZQOQ2TYxoegaFB5fBhzpVNHYVwP25ftAwRxFFg7Qw/UEoNNdK4+1vk7DzYiw4m4pho98CPDUnCdSFBPHtS09c9uY0XMgYgO/7A7HsxkUo1+sF4aAIHJudBRmOBjhmfbR94d853MLRI+NCScg0yuJOq46w5NZgGGvVyZ1S0kX9r/egxl8d/ohr4Ti9Lsg6OwGefVPFExJqaDHdASLzFFDcZQKS5wr49VgKw5gTPhnwhun3RHCrtDfOkNkBjn//gX/+fpTacwjmdvRCmGI0Pj0WBRMvG+KekDvc7U0l9klrDPFvkitEWW/l3sgb4NZ1V8DE/Q6ne0MX+1d9hdELmjkNbS2sKZPDlF5JMF+riumfLbBgQAu8jo9o/vR56HB+NEy0kEThEE8s2jgBVtUJoZnNAYxvs4Uw50FY4hmDB6MdRnreCL8mGUHyUp8iM0EjVP+eAAdE6+xHBxvgvdsV0G6wmhMo0MV71qLYn3Saq03TxM63o3CSx0Puy3wV1OkB9JV/w3l3yaLeaHcsv97EqY8Sxw3fglDE+w+nnSWAXx1i8JmnIPCnjLDVbwtcPyLLa0w2Qhf3XJja+b1IZrsB7njwB8x2H7bfOF0XrW5pYoerNDf/tAZWOU7Dj0Z23MlcJRSzWoGpu9ZwXt+ksaN8NzaVbOXKS0TQ7kEUWicEcQNXjFDL4TRsnRrPe8gaocaBWrh4fDL/46c+TqqXxVPW5cV7purg84vjkP8zrfiHnDrW9y9EkVfBRQ1XFJBN8cWljdkPi/wlMeZNODoqnnu4KtwIV88rBr3C9/zFGEOULRJAhaCbfGGLHj5ebYQ2cxN469taaFY7C3e0BvFSgqoouc8LO5R28l9N5FDyYQiu1t/P/9M3wmyRRlj8UpXOnTHA2usqWJYsTKc26eIlBRv8+rmTb07VwPsfVmBSWhufsVkJg8YH4v7YHn78EkO0KhLFzmggg9H6GMSb4ce91vR6oTYOhDphkNwEsvmpitrDW9H382R61qWP/WqaOGGVP7XL6uL8sBl4pHsT1YdoYMK/dfjJw5cm/tTFBvWxKMEdoxdTtNDKbhFeMk6k5FHamC5mh91NN+jVZRGMWG7AXj9dCT4HBbHnhSHrbQ+H6P1DwC8exRJ008C0ugeMXhuzZsv7sPJUJ8jYmbJI7bew6FE77No+mgm0/oGs3F8wYZUZ83sigX3nWmDqoBnjvqqjcW0zoJc5s1YfjeXSjbDllDm7MW4KlknUw7tD5uznwGysL3wP++vNWM4qVwwQfQVxO0aznZb/4brGUpjxy5hVzPNF6f1FMEbVkM31C8JJWndAo1ibPUgPxb9zrsLaVhV22yoSz1wd8eSPMuzh1Rj81HwUFk0XYTL1cXjIIQVywlso9VUC5m24AbMf1NF/uxJwUVcRxJ+upEt743B/RBWkPmK0EKMxufMLtKTcplMnw3H/1zb4qHuGChaH4sXgXvAQOUT8r0Oo0jfi3fM46tE8gIEmfyEss49fE7EPdRoH4cSPRfxQUhAOPOqDGW5l9ks7AlFkRhfcOv2WOx0biHxvG5zdMhuq3AJxR9cPSHA8BrekA9F4fBO83czgq1IA+mMD7EjrgsyM3ThmagO4blLGCbgdE6kRjtdYoGrmZnzm0gxKtxDHTl+Pz/JEcWmaNLt6LBSiV454ygsZtmx5Kuwq+AuOdXLswpJ8cBnJ0mE7FJl9aSXcKe6ACZNVWEtXC5iN/gXK99XYOzER7FH9AUpPNBgfrITjJjaCup0WAzTEoYVfQM1MmxUqW6G9ex1IRWqzI8V2WDT3PXxw0GZTjZxR5EU1eDhqjfTGatQ49xLWb9BgyXE+eMqjDDJ2qrJsx934uYXAfYEi64sKxgNGhXCsSpqZ8+E4NPkWtMmKskTpGAxbewm4+wOUZRKPs0EctTpbaGjOSfC/J4zBWe2UsvU2pKQMQ8a4HvppUA53w3uhz/4fNX1oAMX77VC9QJiVaw1DyvFmGBAXZ3m6spi29CuEd0myLTraOMeuDkTapZnNenP8s+c9uAvJMqmRTHPvyxuImC3LxL7MwWOKNdDLyzD7EleU8HkNkgHSTJn7DyXNq2DNKknmN9UXN+U/h05HMfbyUBCqxZbCR0MhdqI5FDXmENzZ0k+hdZG4O+su7BnXShavY7G/VALn2xMduHwDhItFUCnnKc0OewyrHg9D4YQqWuz9CTwmdsN8zY/0prkHtIt/QmtlE0mMZE+NuC9Q8q2djn5QQf+oWjh2oIeilhhhIrwB2fABslGywpdnqmGNzxAZ1M7EgT/VUHB5iEJ3OWHznDfgdHiQ3jxagTKH30KfUj/F3PZG37y3MDSpm6YY7EBX4Tcw5UQ7OX47gCH3q0DvyXcaWhqGzVOeQZFLHU3uiUJRN0ncfSOFlqwrhsXTRfDUwnTSMX0HEeZDsO98Ft3c0Q4x5u1g/vg+rdIVxgTuG0i8ekqbPsrhuYm14D6xiua5aGOtbg3M3f6WJFeYYbtwNRzR+0DpJybjzMEa+ClZR62liHjlPVTk1NHj8kV4JbUOKm3q6HrcGswurIcpiR9IuMMHNfu/gFXcO3J4twtzdtRDBXtN90WD8bv9B8i9UEFmquF4TVwCx//zojm5VRB4UhC3iR+kyKPNsPtJF/gGxNPvF3+hQvo7fM46Q88TJJFWfYRZp67S2G4VtAl+A3q22eRlYYg1mTUwXjOf9Motcf/9d1Bnco8OHrbF97114PPzAU2a4IB1T7/BuOgiuljsiuX1zRDUX0TzlDywwa4VAi2L6KDwVjz9qxUuDNynNK+9eP3zD5jQf5c+9gfjvEIRtGjWprXSX+FZ5gBcGTWNiu70wFK9Vsh8t5waZovifwfqgY/ZSRZP5fGrei0cehpGj6y0MXrNe1A0jiduzGg8PfQRmjKTyNV9ElpKfoOeFykknGePCY9/gODpVArQXICeX9vBQuo8Hdi0Aps2dsER/TQy3jXiZ4E9UNt6npYK+aO5YjcMrT1H2bVB+GuKACqNvsons9/gXd4B1jqNvLWWEOZVN0LQRQXSUZHB2FGfwbh2DO35oIYeaz5B8GOOdo34f63+V/A2caW53yxx4apm8NuxngJqp2HMjHb4kuJLASpz8VNgN7gf2kseW12wYfoA/OEOjDDrOkx7OQSpWsGEgZvx/ggfTfEMpoMjerj/ci9w3arFPteHwfduC+wdZciXl0qiS10DbPCM5a3tVPDSz2+glMnzJw310T/sO2BrOz9u8RjMOfgLulfJ0Movk7Gu789IvtSluV8BEzL7YVnwGPo9eSGatPyFo2rWlJ+yCoX0BPC/IFtSuLcBBXqH4aeLHc1YsgN/X+mAyZciOMM1Euh28SckRypwB7uUsG3dD7jfXmgnkKOLOqmtoDvxTrFGghmu0O6E8zft+OziSWjS1Av3K2L4CXvssTp7CIaOZPFRV5zQ4vcw5Hg/4w8qrUC8K4B5PZ94Sy8vnL1RAO+X/OKlF/ijp9hv8C1UgI9mSngM26DJr57bPlUXL/b+hmcSFzj3EZY839ANzxcs4O7qT0Kr3wPQI/3Evv6oHa598A+4M+J2fw87oq+XAE5fEVZsWuGG9vECmPDfQHG1lifaZg7DGUEL/oyeH25c1AlCLmvhbrYO5i/qgleh02GnnhnuGeF3+qkF/ismYWTvELT59HMFD+0w7/MwbDJ4xEUcdMRL/wkgWSRzGOOGc/lhSPu3kvO9vB5rjf+CmbwWtzjKF3ee6QGzA8mwfe9oPGQ5AFKTDsMH30n4aoSDQuy9YcEUe9yuLoC3VsyFAGkn3CcngH1bx4BqtxsmjPzb5dpKMKZqPbpQP5z9NcD1bfbFk08HwPt7IQzPm4iJQ3/BdfU1mNtrhz9GNNY5+CRMcHNCN6VhuFYUCeq7luPVrEF4KbITSuw9MXgk6F7RXwVVJ30xaONfsLvxCX70zcCHDf/A+H0FCKx2HPH3vzD6yX1YPmo5slf9sK39BozhPNGhpRO8H5+F3OO+mPZ55I6TBNFpmgPG1AxB9frf4KG4DDUi++Co92fobv0Ph0t+w1GhSqi/sA0PqAzBgS1KaJa8eITxesFvvyQOBK5Di5F/es9LEON+bsa4tl4Q6zRC18QVuMTiN7w+rIVKHd7YOL8D7lRPxDF569D8TBTUD3yhzPsJaGoVBVX6z+jalwSMvRIG0iq5tG90AgY+D4CBW2lkcCwOJfPXws3+IyQ5JwblVKdBrWEITQyPxP/cZCEywJvSUsLQ5X0BV1o/l7RyQ9D9tx43I8+Y6usO4KkH24svKI+wp2cARkjG8oLrL/FPNu3A/LjffIe4CB89dQvulTAhH6tL9kdmr0fRuQtIXTCFi/Ffjl3x2yn1vhAc0XHC9QfjKOf1FKhUt8PrjRcouWwjhO+YgMvP36UKvViwHzJBA81yst55ARR/aaN1QxkNUBEcdDLAovN3yP1aGXy5a4kK5idJfU41/B6ahrJqW2jdgjoYwNnov9uQ3txpgN2KCzByVia/Nb8Fzm5egkkLVxS/GNUFVd1L0e6wCyd7fBjelS7Hee3vuf/2iqOB4mq8JqMJ/oMKqHLAHX+aT4OGdG388MULuwVcYGqkKWpt2YydYzfDOckJ6KLkh/F7DoPTHVsM+LYdg58kQ5HMLLy+fAfm9l2FZ5XzMSbaHztO3IeNCotwZ9tWbPN4AUJ1LhiXtxFvNXyCSotlWP/eAw0SzsDR6VWkFXgES+kMPDtcSMG9Cbj+1El4FHaJHHfHY7xYAohbJNLpqbH4ecFBSIkPoZUXorD33HK4lbmesmUicGq6Obj/4ugVHcZPl39y4Yq6tLImBBVc/DnX8F/8Lu1gPGrybob65NN82o79uOfmRj7Fvae41G8vuhd/4p8aX7ZP2+WPR6bq0dUvJ7mLFhsxWn0eZRwQgbCq1ej1xZ+Sn06HMaMXoWZBPL1c6A8tcxFLjlwk2+6j4DhhCpqOL6CjCdfAxcICc3ffgrhzj2jawQR86HwL0hZlUphfPNbmXAftyJPUnBqLl9zOwbs1YeS8NxqbKR4qrD1pxbZItNTcDkGjZ9Lx5+EYFGY3kp/V6OK1MEwyEQXX5jp+8uPDuKIggXM4EMs7Fofidy0Z+y+nS4vH64agiKkjn97/yN6gbj/+rn/BTzpxlnvQsgunFqjSkV5xENm/GdfN4GjPBYA6m3X45vRmut0WCLumL8FnUrHk23oSkm/MRrHlaTTq6G2ol5mG1S8YZJnfpa3acZi8hGBj9HmqlYzFiORCeDs9mkozozHtxQ1A+Y2U6xeFdC0F5k2eQdPPRaLUx2B4oKxE8raROGGbI9wqruQbJCLRKEQWgoQD+L5rEeg5O5Xrkogp/nExHH8rHbYXbxm0Z5GHsThPn49yvs6JSgSjfGAO72wqC4ud9yCaiFL9Ggfw9dqMQfbjSaY3GM7sXIsnNVaR6Jez8KdwMWZkhJL1+0LwFZqDJkuqQan5Gh1VjEb5o5VwYu8RelIUhTKfH8Mnq2208HgU3pfMA6lpMymRovDvtPNg7SZPBpOjcYtnOFQ+eswL3orGuT2LwatyJX/ibTR2pCqDq5R4sTJE47ZnmdwKYyPu1YFIvDbzp/3fm4XcWwxD/ccZxd4flGG5wSF0+naYf/xxASj47sRwubf8larDkHN8A26Zo0qqbRdgW+tKNF/A0dxRPIzatxBbb32F4LbjlDgrAp9//gCRC3ZRh3MkqnY8B59qOzK6EYVTgu5B9F0Z8jeMwROf0qFi6T1+tncsCqhEgc3jaXygXhy+CnADh/enZiq0xuKNx9rw8qoTl7k5ZkR/n3LOF59z1isjcfnqOVyqpw6M40NR8cIZu/wjrjCrORDfbJHn3ZMjwEZrGwprpfC5kpehKNgDw9tb+N4PJbB33TLUfN0KrwqDKGdRGBb+/QprDTmaWBuBpedfgdQYSdq+Pxq56IcwpvsGH/IgFl1kL8NEDWV+vk08ukAM5P6Za98aG483VNeCd94+zt47DoOnjh7x/UbuZUI05r9u4YLKRoOVVjhyd5M5VrIWVPiDWGYow62QigXtzu0448W8orVzr0PkLG9cd3Esv7O+DHQtVqHDxU6Y+JQjJ8fDOPZaEygLidKy3ghM/1ENQUWn+ftLYzCntwhOcKXFC1/GYYTVFVBdUGkf0BOPrn9j4drv05zh9ngUGusF+r8EIVwlFn3HWEPGbBs42B2BH55Lwq6AbeC2LQSTMko564eJsNdsD344FcItvJINzQs2ocTjj/bN86rg9Ie1OO5bF4hVCpDQu1C8f+I73JSJ5lE/EkdL1UD2JK6Yy4lBmZgiWHp/NKfUFYdX71yGVLsiTmdHPI7fGQe/3qlAza9Y3OC7CV6edYKUvVHom2kPM++FgNH6w2hcrg1Hlp2DVyFBOPpmD+e8+AEcPr4NC6flckcuf4SEhP/w1fouaK3x5/8kh6KLZBN4Z66eWSAWicK3XsGPp1s4/+0xuCXpPjw92sT9Ny0Oz1WkQ/V2CzjQHYtznsaAZagX3ImLxjzBLeC38wgozQrH9bscQMXxJgjbH8J7m8xhpmgFyJ3bgYPvZWDW6lbYqTGSJ5M6YJBbbD+8IBQHRlgmZ+FJLvZSBC6OfQ773CXgQV40DlfmwW+H2bC+JQYHtpwFz3nBcPx3NCbqRkJO/zmwrIrAeXqbwHtRETwYDsGxp5ygxO0T6FsH4L2jE8HKcxhKz2xBp7utcMDjLpfWH4JDRz/AzhYdkFKOwCrhJyC3cS1oZEehm2YW/G5MgAnzo1H1zQlwWXkL1C5HYmV1KDyzrYRFfYfRduEGSCzoAOOUA2g/fiHU/JNEqdDtGLWsCY4fswKfSyEYdu81nJu0GxZ7hOOa8w/hwVAqyG2ORKGDV6BtTzEML4lE5I5BhNpXOCkVjuGNh2AgSginfwvG5V+8wXa5Cuq+3YO7Ij6D7Jdw2MuFYK5xBeS3X4fbfmHYEZEPQS4vwDk/HMfYXIBxbzpha3UY5qQkQAUvjTsbQzDrxyEYO0sPrY4HYei99/BAJR92nBxhw2NP4OypDxA9EIplO3JAo1oAy5ccxofp5+HysDK+OxqC5aVHIHr+aBz1Zx96Kr+Bf93fIeHaQbQVL4HDTuLYWhCMNYo5sFpMGy1HeDNQOB0MhsZhz6MgNBSpgVSUxY5VQaiaUwJhQwY43B2E+rPywGb+ZGzZvRd93N+A71JTxJ6d+GlmKaz2sMW53iNMcf89WMfaYXHQFuz08Yeoij56HxaHk+46QdfJfqrFGLR6YQTpewYpxCsSLwa0cF+i/1GZehiObYrhircJsos+wUgT0+wXmYmwoxEBeMTvQ/ESEGdDkn64fCiGb1gjxSYbeaHrmpe8v7gsa/i6HM+WCNKENjkWVuSITQJqVKCmwHatmokBAWaU3K3AsjytsO/CTPrEKbG5x4wxQH0l5SapsOKXWljwYh/FNaizbxNU0OvqMXocps0iZyqilcAVutyrx54oK+JtgXsUP8uIGfxTxGtOz2nFbhN2XFkJddo+UPOVC2CzWRp3bP9ASZ/jIKRLCMc+raUTOX4wlNwHY6/XUfOxWbAC/kDL40YqWqQFq7/0gZ5TB8136eTWLxTGury/lO6dz63aI42/PUTYnon/cVtClLCJxNmzb7Psk/zVENvE2W0rVf51ghqKLxRlKVdu8fpPlHFASpD9a5WmZXflUca7j4R/zqZ2WRl04NrJPCyUtjpJ4Y6C75Q3+zI5Skuj2eivFKFXRnywLMKhT9Q26xddGqeA1YUfaWuEBMuoU8TZrz/ShURNFlariCWLt8LU858pWiMeN+bPAuPJ9TQqKQYfv1KDiZlfqeFgJErvLuc6zjSRrngYyg7M4VyvttDlycFonvRfUZpbBwk07cXmNSv479K91DTeF3MXP+bDRIdIWs4TlxSKERc/TPZn3fD+KCOaeFmArVo9H1dxNnT8nQBT7ZiOrzlHyu0XYFPFxmPgHXdy/CTIzi4ahS5z9tEYSxGWXqqJ05oSSKx0pEZpyqjkkE5uX6RZ9nxF3KyYTy3CCuzrWUWceb6MCteqsBnJSlij5g1dcqV0UD0eM55Mhtszy6gyLgaH3YVAOK2CvoVGYsaDE5zD9io6oBGGoyYl2i/8/YZMHINxy0VNXmXtR9rUsheFX+Tz4T31lN+wDZXmSJKHcgNtX7keK8osKW12I+0NX4ba4+dTTWYDOQ45YLPBOgox+kbSPrZYMOhPo0y+ksYmS6yeeJjOxn2jXXcNcazEMYq73EwZmzWwdV46uX7/TT6lSjhnVx5tPDxAlyUUMUC5jMBfiPHxijjuzzL4OpBD5X5xuMxBD/6Y5pGabgy+U33CmcYU0r5lkWjhrMZVihSTsF4YJl9kxckhJdTnEYwr5K/xU6TKyO/7XpyyTIrcv5XTxm3bsE1jKi05XUG5bv9hbNZqOjitnC5JLR3huN3U4VpKlWPm4t+BMIozfExpq6Zio3ECqS5/RH8mWmDzsxSa0lBCoQH6uLfwCj0SKKfdG9XQ8d9dKnpUTQedFdFRsJxsuHry6pRHoRczQPFmGu1TiMUU2X7u5YOL9EE7Gkv/beCGCq7Rq9sRuCZdq3iNfRb9LTiMhgYn+Yl/c8hSMhjfjZckjc48mtWxB20P2lNpVD6p9mzBgM9bKKAgl6xXueOF4gii/mzyv7wEl/1LpDqHTFIMmoXNfqk0WvUaHd42GZ+tu0w2FlforZoZpqpnk+yBa5SzRAcTJxeRl1o2TTmsjGd9X9K51Ps0760c1jzRhF/NRym2Pwov7b7EtTkm0+1Vkeh4VsXepStl5O3D0ftREC+w6yzNDg7F3TbCdCckjV7cOoCKG4Bc4AIdW7gLVwbuocW7z9Oe3z6Y73CUNmw/Q/YDq1Hw+3mKlz1BJiIL8b7DDWoJOkpHLtmj9qJc2j0ljt54TcC+2Q/JYTiGPn8bhQ8WldK0nASao6uBt2++oR+SKRScII/jPtRx8+tC6S9G4O1ACc7pdzgZloRhgrMF7zg6mlhlKPqc/8k3usZSqHEwyl63pfGpsZQnFojLRQKoMT+azJL8cErocVpG4WSr6oVBTtfprGswmYkuR+evd6mL30VNA/OQu8NojcFmehJsi+l3ygl3e9IMnbFoLV9Dt3s8ye2A3khmq6c1f3xpwkMl/HF3H7dw8WZy0z6MR1Qji10/+dI0vxA0Kirid+f5U3vOQWyuN6c/i3wpdFIgRvRso1ePN9K8ju2YeD6ZXO3XUfo5HxTpzyRnOVcKcF6Ll58V08wdDjTFazEeqX5Oca9GmMUf0ebCO3r6zpqoaxLOVPlK07Mn0LqDJqgwppUOGk2hcy/V8YIN2DdGLiBf10O4+EIUX5q3kGqHgnBhiSLJSTtR8L/dGPpyJX1eCpTf7YerFsfT/MOTyDfSByN2XKd9j42p2dsdz1fyVH9dnSwDlmIMvKZ1jrK097cDau3+QjHfRElvhi3ufNtKG+WECD9ZYO2oXpKcK0zm23TxQIcen9ZrTl6yAZhb1MK3yZrTZtUdqPTQnuaIGZDhoy2ofjaESFCBdCq9MJzO023nfr6rew0u4u6Rzt9qPvuHKyYOVZJ2RSFf5T8fm/hvVP3kOr90z0wc97qTjEdd5JMnWGGhwzC9jbjED6kbYcrtXD7RWZCkXPxxptkoSpUZ4H0m+2Cn0UYqeP6Zz9L1wFmBiWS2poDf274cD6zJott1cfw+v0X4Me4pfa9x5rUXzcVYg08ktVCLl7adge8KOyhogjCv2GCFf+UE2altwnyFrTGyBZIk9nJk33cbsalnPv2pPsHbzF6Ls9cdppndO/ivuq5oe+o81awbxd8NHTl/bSH53korNrLlUMDvFSWkGxbJ/pyCdtwP2m6iZL/B0BJzK/5S5qm19i82GaHQiolUa9JVPM1qHe46s4kG1ucV245egrOfHqH1O9SLM1pnY71+BlXGt9m5fZyGP7Mf0aWkUvstFeOxZvZHeplkyB2aa4qd+/6QpoEz15+ng5HLlpHw1mL7Jk1XHGsaSmPV/tgf/zML44+fpqpr+pzb+8mYL5RLxs+WcH17zLE49DklGYdzlll6aDS3ieZuTuN2t6rgmnm7KToolRPMmotW7kdIS+AS97h9MlosvkLjIm5xiz1M8YF9ManrEHegTgMFr76j/eHvuGNesli+M5YWRwnBZo9pKNB1jnhpETDKHI0S3bnUKiIBEfrqmKX1nKr85WHpDQn0rDhH88ZbQ4rkWNzceJsETCbDYLcmig89ocLttvDykwQa2OeS6nVPeJKsj9D9hA57bYDncbIokF5Gf22iYdYpFdwx9id9PDeBje2URCzqph/Vtkxr9z9w9f1HlkHIxMO+wI3bguzo+HnMeHwx6KwVYjtynFiE7yl4elyQGTxcwFL6PSFNUIDFOzqxt3dU4OajIbp60YEt107gDF4PUOpSZLvUDxZFTBik0X+ms4lnT/IePv9oT5s1OxcuT0NWQuxCkCUzKHemflsxJnLAhI19HkqFD6WY50Ud1n37DElpybP2M0rszM4cuvBBiXVOFWd831PS+aTKhlW7yXAk46jM0WAni9/T/ejfJL9Ci8k+fEhN6wWZ+NQ2ehNnyL5YymK2kQAz/aXJKhQksGS5JJvaq8i+twjgJA0lNjAkycLet0PVRU0WZy3EVCNq4Yq+PpNL7KYrTgyO1RqyF3nfqXDgKvyONmSLy2qp4G4ccPv1WNvkFxRj6Qm96zTZGH0in3XjYOl7JRZVk0Njtvdy8zdLs/z2dNIuTeFifYRZ1OBRktghya1166H9bwLIGNIeTDBron0X5pOv85vior9vaL6+CsWoT+WzF5dRo1oO/2b6Dr7G9yE9y3tevGJqIu+VeofkZ+hzW17c4O1M1VifXCJdGivNfOUU2MMfgVSTL8P+bZBhDmLzKU5dhl12lGW7stRpT5IEC1ykxBS9PvLKVULMIEyTvRw+xS8e6qHfpQbsgtQ8XvlfI/X1mbBt9K3YVf01HcsxZV1JW4uz1hZTzUFDNrvIr3hlQRbJx6szJfOe4oNnL9K5ICl2aeomnvafIZdrPWRwt4APfZFI8UffkFX6AD8qK4KyWu7SkjYl+ie4hb5anydVe0XyGbKjE9ePUYPjZ17XUoHmz0ukW3dm8Rsuv+fnh54lvaJ6+5L6h/yJ7kF6KWrBUj4Lo89KYeZ5ZBI7+3WEVzXFWVWkLbtxuxwarSSZZao987K7AvBIkgluRfbk9X5IHC3JLE4hS/xsAZN/i7Ovihz79KmAS3ggxk4bT2en74fY68iJMQEfa1Z5y4P/aiHGnu0cyx509PHXjcVZW+ko5rRqBlU+l2DhmVpsjd1emvBJimmMU2TSB07QBAFZtsxMnPno3iLZBjk2qaCP9ps8oRshCuzohBFvMPhIQkOKLPbKU9o7voNSspXZtPOZJLNdiHlfFmPmbqOYkncfeByUZklHLFj+jPfwukKOLbeYyGqf5ELaDQUmwqYwcdF4UJyvyE7UTGWKeQ5Q3aXA/nXbMOGqFq7RXIFVaFkzCQFdbq27PFt93ZKdPSLNqzTKMYE5JuyQRyV/5IUcqzmhzRZ8MaOuYTmWZKjIvEy96ZatPNOZIcYkzyTQutnyrMO6h3zYNcrtk2Pnoj+Tjw9R/S459m9JKQUMvaMhdTnmY5NNAvfaSWqLHOttO0HzHwixH6rybOkybear2wRHZiuzYO9RLOT9I2Dqaswmx5wVGJyFyCJ1djPTki3s2ggdWzXYr3vj2JJoFZi6RYPZ7hnLSqIiOE0VDRY5ZMoUD2oUv72lzjJe6zGv5Av8ihXqTOOhCuMzlEizV42N95JkF58toklL1RiXPkAyu8Lo/ERVVvnsC+X/d54u+yqzn8Wl1CRdSI6jFZkW3aITr6poXZEc2/T4BI0Z+kFBX2XYHPd9VFEmwMLK1ZjtKmW2YmEVTNXUYqNQm2VL34SIhTrMT9WQZWuEg/8NXfZRw5gFDE2BYl89tvH2KBZ8rJRrr9Rjnhn6bIb+dfskAX12ebUG61Ny4bsk9NmoQ3JsasBv3vaVHrteJ8SaYqeQiakeU5/bSj+C/KmiRId9yqgig6NJdCREi224lE8qBTdJbIM6a79xhtyMntK/ImV2rSGYknTqSUVXgZ05vIAyX/aRcq8OOxQjzWqW3IMBA322xUiZdVkcB6MYA3bFSINpyq2CBccM2aM8TbZsWBzU9hmxH5vV2cOv7py85yi2cq0iCz17unjjVGPmPV2CnUi5zXNPjVnRrX76nqxBDaXGbE37Z7p/xpV2dY9iY/xL6GpUOPUoGrHpRtdIUiKNvBX12eDNWPIvL6Q8PW0mRevoj9Vr+ntVjan6mlL7jlZqzjNgP4eEmUvaBQjwN2QtwtJMc2sgTG8xZJIjfan2eQzYpRsx/zg55lxyl1v0YhT7oiLFlB+F2M9YbcIiuwVZoPMKPnHAlBVMaqPMZb/47XZmzLismmb6TqTx+WZMUKGQpp3fTPLSZozkUslzzFG6K27K3lkcIFu7DHpRYMQq5iCVfn9Epev1mPNVcWK+dVTgYcjGxPVTv2IUbA83YIICwky2fR6Uaxqw2qWiTGDbIPc71YCtUhBmCXucODF9I9bU1Ecrvc4Xz3YzZtHUQCWfrvMGZaZs8ptyKj6oQEtazFh2yy16pzqPNowfw94uSKTTaw6Qj+YYFvl+Ix0pS6EobzPW0zyGSs7lkL+lCftS+JHvdq6g1OYRTyloocTla+F2gg6Td+0h1NOCgz7arLOvl8DtMvfivTZrvN1OLZ+m2/+4o8tm5X+iu8tW8RLBBuzMtKckl93Iv7g1iul636C3WeYUkGfKXjbEUUbJGnL9Y8aax62i4HGRdLLcnDVLadF53TSaUmbGTA/l8S0BhbTlkyajnjqyEx4L/tPVmFxRE43rec/djFNhy540Uul9I+7tsApL21JLg7feFkeMUWczAp7Q1385fN1eLaY7M5PUbyjS48V6LONRPC01mE3p2kbsRNBK0snbQXqTTNikiaok3H2E3v40ZfZm6byJ6lU6KqzMnp58Sd8S+rjtjnLsddsbWl8Ywk22lGEFEtX0M3z9Q9NrMmzDlifUM/8wL6AnzwTGZhMd7OcXflditceSyENuAi1ars5Ob/UmGx93entfm914rkeGn8Jox3J9trw3k/+56RQdGpZiT6152rgllWuZI8q6rj2h1pvZ9ia8EEs9zSg815ivQGEWvOkO/RR4wa8QFmMDDmdoarIeec6UYutmBZKN1iL6aiTP+JhJpHwzkCa9V2Zf1F7zV5cfJUUUYn8ib9H6vzJcu2UvUUoeiYXFFNss6iCxv9mkb3eGz3LvJO0RRh4aK0Fe7n0kKBdJ3WNn0IFCAbal2Jn+m7GJflaKstNnRWn0yShqcu6kEoOzFPFDuKgbvlGZ4UV6qjGff3fwI33yOkcZ72v4jO119HFbPLnoGNHV9G8k1OZN49pcqKS8lRJ2GdO3ugP0Qb+e1NZEkee+geKHI/U+fiCBlJKS+YCyp1T9J5r+o7/8OttSmvJnO5WLTKJP4i/o1pqZ1CS+nrbdf0HlG/8jke6F/Li2B7Tz7zZKX5HDX6q+QysKvckkY4QDJt6h2zpzaFHWdJpUUURKlRYUKxTKb/5xg4KNptLVjYzXW3eB9ktbUaOgHImWZZOxVz2/JzqZT7Y/S18mdPFz71bwj+ZcJveuabyX+RV+xc6zdN2zk9sw+hsv/yuBgs8qgJGuJI3dcJhe+FjAyWljKE84gJZkLYDPW1ypR3k7JcTthaqy4JGM5TfC2SfA7nIKybX7UuJ/+aAgmT3ibdtoyZX3YD/Su88zNlFU8D9oG/2RnMCLZror4ph7HRQ8bR3d0zPCpj5h5vVrOW24aoVShfLsu8Nist0wA1sW6LDbknOoQX4O5t8wZyvaJtGTw474NsyGFVVqU8mJBTgD57Aj2oN8sqETrjV0YaGed/lO6bn4ecFatn61D2/6bSbOFNnAKmoFSL/mGW4dViFXg4k0bqgE3d/rkOVbD3pLDzFPwYRKhiMo1j0Pu2rM6ezls2RpnImG983IaWkuNW1Kx7QxRrSvqoxyY1Lw12wt2qz+kQYrE3CclAbVljaTVXQ4uvYYUblYG0U2BWKAkh1lj+hN6PlNKB7hRQFjGuiV3wrU2BVON/trqe7ebJRsPEamq1+T4YFxaOaURC0tz6njsBp+V4ghAywjr5gBOBW2g+JGmMsan4DTlvn0Y/MD8os5BisH9Klz4A7Fuc8Ep8w+/sn0G3zBlcoRLnSjXtNcfv/TKqzZlUhnXxXxS2a9wtnXCqnNtZxf11OFr/98ohtr3/KR6ZV47pEAq1P4zF8ZfI6N2xXYC83P/NCbMpw5Xo9tWPSGfzOjBLfGmjMLl8f8hq0P0c5zIqtjmfyEgjxM0Z7GZv2J4wc9bmLqbjsmObCQz0+4hKGOs9hLCQH+yeIzaDN2HpuW5lH8K/sYFlg7s00lCx7aPo5EE3UXllV5w27T9n2Yt9+N3Q32s9sctxFn7lvF8p6dLJrluRSdStcxOdPY4iuPEUVCvNjy4Yu0rXY9uJyRoV8lySQkHwq7Mg3J/EkkPcxLhPo9MynTaD9Z7L4Mr1rcKZjzo8nJD+CE12FyYBuoxPQ9lOaepNZId+K2DUB1+w0qK19O7dPl0VyCp+0HFlHbBkM8fqiaZsc5kOqeiZgm/pNC7nM0uBaw/rwA27rBlqzXOOMfe1kmt3wiTZRzw9p6LTaQbEJb169Gi5nmbEqNInWsWouiZTbsttMvXvfvapxXOIfl+t/glxou/5/hMg8LsQuiOC1KOxVFEkqEskQh9c7Y2pQ1pBIiJSHZkkRpUbQilTaVKFKyt7wzJWVLfSQSISIhspO+/r/PPPfOc865v4P3Ji9kvmQlXs63w9T9TnzpWC5tXXUapi0wokNeSdQxowy8vQSSaIwkz2MPgDYuoYjoQNow4T2MNN1Enh4b6WKYBC7LDSHpjc40L7cfVpkeI+e19uQdMRwb7+bQlWtIHsrG+OTUdfL+YkIlLbOwcMF96rxrRJKPF+FOm1ZK+DGaLn9fidEbevFra12aeG49DvVW4kbzwZTVvBF1NgxhF0Ge3udsQsfnY9nifYtYO9kb7XuZ8bcPGWKapwcOb7biW6rjxLZ2V+zIXMLqgwvJwfUlJHctoXC9dCq064KBP1eRy8IYMlJQwN1Bm+jdt/309rEmfp8bSMXbvOhfxCjsGh1BXVsc6I+1KTZfTaAb9TMpP90Sy2ROk6HcZCo9sgzblxbTtBQD+tTHHdXf1FF1z503v/LB4oJ2+vl9KI3t0ZJQKMXHTmmS+7RA3DxGjb2SFci/7z6MnaPLHg1t4hC7QNSdY8zSX7NFjb7+mGY+k5WO64nLXmzF8WbzeYvNZbrRTxHXlPiRv2w2LcvUQu/VgSRbdIR224/FrptBJLcphD7ONMOTfcOps30zPfK0xdaAGNJNXkYO651w09AU+qg2mx7kbkA1zKfdZia0bOsuzGqpoNXfDWmm137cmv2MppoZUOWhELQt+0PRtbrU63cYDohX5NuKmqRyMxx/twzhOzoS5GUQjvvGGfJbKBYXjQpFs5QZPOKcmVi4OwhzF9nwUe9iMgrXx5GeEbTyZi6t3GmK8y9G0JBeyVS51wpt/kVSnOkhaoxwxKu2MdQ7Zy8NMtyARmaJdEDSg96X+mEi5VBC9VLaYRWM6W3FNNLJli7/Dse1o+rJZuRsstE7jBctO+nlQHOakReNZiv78iSjCWRwNgbNDmlyRboGzV4fg37Ro1n36ktxXGsU3qgw5bn3t4rGjZF4xX8OR+0up599BZylG0vbNxaRzLYFqKETQ9uHZpPGrdV47UEshdUlUPjNrbhp4XHKH3CIVNv3YeujLPrmH0QFuuH4M+0KHQzaSf0mR2H40FryP7mRLB/EoYrMR/r2ajVdenUUo6704csBCykxMAF/FPXw8qYp1P4moccjI/lfqxwt10vAsAvGXKqUIWa0HcHvN4DnHb5LgoIDTpGMJp2DIv0b6Y4qadEU+OUCVXXtQLnhR6kCc6h7QDBWfUgn5T4pNCMuAgvGFdHG3UcoVTcW382/Q9v1DtP50GMYMOQdrQoOoW+Hk7DSQYpvf9xBHaYpeNVBjUsNl9KZ06koEzqCJyrok3JzKmbABA6uvi+qHUnB5NUz+KjwmFx0PLDQNoR+Sdyj/lm7cOa0SLpXzPSkJRglLiRQZK8rdD82EtsKc0lx9DkanRGHutsrSOldJm1uPI4+pS8o+msiNcunoue7Xnzr4yF61/ckJoztx5lu22lZRRZqbtThnXJIq4adwrH3x7Hfvm6x41E2aptN5VeVL8lLwg+v97Ble3EDaY84gA7eoWTX7x5VKx/Ct9bJdNOinIaciMesmkvUaHKF7mQm4bNdD0lfJY/Gfk7H3zHf6ed/yfRUOIXV/+R57+QwylmYi7/yBnPBiOV08s1Z/Oo4mq+GqtHD/HNoXGrMS/Xf0CGbA5jYx5mygp+SZOwhXL/iAAXE1FJFxhG8MjiDbm+/QctcTuAdkenU5ct06FgmDln0mob2PkXFErn446skd2+KoSHzzmOCnRrXZHvSIs0iTHswnCVs9Kiw9yVU7TbkGU3NdMboMM59spBar9dT0cWjeLUklNrzbtGDrhTUVj5DHFZMP1uycVbPuycE5JKW0TmUev2ZDmodpf0HivCGlBwbr91GXXuv4tRETb6JE8gwuRgrBuvzWaf/qH/uMXSIWkINZlX0ZGEaetccolWV10izMAfF7EJy9jlDCqnnUc3lEbno9+is9jKKWb9pxtmdFPW0BF/fUuSKBhP6O4Ex8rQWB/wto48b0tHu7Uo6f+0CaaieQXweT/evZtKP9YVo/ukqJcn1dKMp11C+qadvJPuS1mBCs8/dlL7DlDaEVmLjf8ocYnOalk7IxcJvnrSkOIn8rlzAgPWJ5PPwIKk0XUeT+FJyD/IkX7tyfGf9gpR2TKLLh6vx18DeLIUxJF9QhJ/St9Clzn30/GMxvv6ZTHnlTrT2ZAX+Uxbpl4cBDV5zGy/mvSCfG1vI5WAJfqYt1NXLju7MuoEtFsnE14bSzOl3sMW9lCqlBTqw9AZOHOXV0wPV6brdHdx/OYFq/8lTUOVtHCC5ht6W+EFLuCw3h0bgtalrwPbBAFb2CcNbA2zg6w89fqJyACUqjMFx92Su8diH9ztGgMf02dxs5IcfSwbD0kFLWEJ+E4b/HgwVD9x4ZborBkToQOxiX9512w4zLEaAde/97FE3FVsNh4LNnIPsazEce3/vD8nj4nj7K1l0zu0NDw4l86PPTTBw00uh+n0WO7bmQt/194RVV85xzhl/WGd7W5A+fokjfcaBucxD4dPmEg60eSDUlL4UHLGcp6RaCG9c2gXd3zc5/U5m6eCKD4Lsxtt802ilaKkihWniBO4dNhJat/bCWZdmM7YNA4mnP0GoXsa1vYbDlR+foG2lJ9/boQ/uCW8g0MOP84UJML2mCbxOBLPJFzNIUH0ESbkR7F81F6Yk/gdFB2P5b5/5EBzxHzjMO85uGktg27WHoCGTxol9HEB3aAMceJjNR8fPh/o9DfC38ixXbxfgwfsHMO5aEXtN0wMnmztQvuI6b6jqFmhXKeguIjabkCMsupoLi1dVckrDQKFrYTwccbzFdkcaSt983wyvet3lr9nTRR40EWrk7nGpfqr4b4kpdNTeYo+gorK9hydBhV0lzwmSEa44jYLjd0X+kH5VGJs5GLy8rrGXjTYkm6jC6+EXWLfBAyreqkJj+xlOm5kGyVu0QUUygyfL34dsaSOIe5zAz3/0wjITC1D9HMVmpzTxYI4VaCeE8o1X4/Frhi2sCdrLVi2zsb3UGvxmb2aT4ctQXcEKXN658ohF7rjFzhbO2y/gnXu3Ys4eByjOBLabvAcr/NeBa++JfPnSfjyYtgsyvYfzvZ0hqPIhBEQNVR7xJRw1zmyB5cVVHFgTZ/Fs1joYl1jO+wuzhH1nF0NBZQmrsTqsuzsTco0uc6TBStgeNQ0uFuRz0LkE0NGcAbpLTrFB0w24b2MNqltSOBu+QdYhJ0jad4T1ZvTH9mYvkP0SyRuyRuHKou3wsSWYyzVm4OD8XTB2lR/L6drjrUm7wHfIBj4T4oIRt3dBcuEKVhU2YPalABg/wpb9i7bhyznB0LLLjGcXBuA4pQhYljeWz2wPwq5vsXC4RIt15oXiuupoUIq4wU/HHxCeJIRCvCDy2sHyICfuhK/u13jntSWge2EdqBdf4DNXYsFE2hWsVfP4SFYJ+Mx2h6z4k7wprg3e1u6EjsJE1syXx/1ZIXC+LYbfdepgyP3DEBsWziHexnjePg70Du9j05uz8XB2PHglbOXKpsV47Xw8zBvjxqoXVqHT/CMwPX8xW0Z54e+IY/Cs/2yuVd2OORuS4Kv5ZJ7yOAC78tLAWlePD4cFYfWSTHDwI1bq/0E4vSYBHKyLuUhtDly2joT4nZf4pFUEjEoJhmeZ+Wz3rwiUlwdDefEpDnv3HBptI2CIaiqfMZVGl3FHYfD4o7x4do+WitIgdO8htowYg1Y/T8HtMQfY5uV03LEwF27a+7HaQmtUaMmFdTme7PnZAY/uz4XXo1awx5dVmHgiF5RO2vD42xvw4608OP1hOkt1+OI8g3wI+DiGTcP34IJ/F+Ds4WJOGmYATvezoXjbZZ7nFQCT3iRB8r4CzlY+DcNO9bzd6QwPeFQHeYlJ0DE6g3dH/AGNw1nQuPY47ytWwYt9C0AhNpp31g/DJrNrcOR7KJcOmoC1HmUwdNFediw3x/z3Ikhab+KDvWywylyEuJyVrNnLARM/lYLfpPn8RtkV5zwvgRmFAsfu8cBfgSVg+nc8p7v64K3fZfD2wiXODFgGXlsvwKjAAs43PgZqj3PhsXEuf68VodwhD4QLJ/nqrrcwdFQRDFqWxCqb+2ClXRmYZsSyw7kBeHtbNVxqD2fnQXpo2F0DQz328Vb1iai7tw5KV/rwzo4ZOEy6DsTA1bz+uSVi7/tgJ7OI52guQs81d2Hi1ZkcVeWEftdvQewaY5btWIs/p1fBasXz/E9pD3y2LoXq6DM86XAOnPS5DlNfneR0xZ4ZySKsGp3Mh9s7gXNuwe+aOP59vy9qaz+Eh5Mi+Pftgbg1/SmkHd/PDU66OE+5GQLX+7LyZyO0lGuG6dPdeMn9aTj/eRMopi7mMWNn455NT+C5x2zWGmSPxyfXQ6HnFPYOW4ZvJ96F/T9z+OOGg/D2wE0YoHuSB1gW9vi4GpQMkvlHXD3siK8DaYd4Xhj2HXKUmsCyVyQvmNEX769+DXe2BLHaZXW0LHoH/V9u44yJw/CvWRusXbOWfZXG4uJpb+Fe6BKWDJ2Caw61wBicw9FnBfQMew6SW0zYyM0aM4zvQ9vtdB6gFg2LumpANzWJFeZchBqFRxDpFc+/beth36YXMDIwkrvlOuFFShus0Almuel98EbbJ1A23sEZD/vhUtXPYO29jo9UauF5h0+gaOHAm5z08Xn5e7hVPIdjL0zAISfegONzE1bIn44v5P4DvdOJXFYfDQXODXBnXDwfnn8Bpka8hIW3Izl9Ry3MOdsOtSXBPO7je3CZ1AnNyTt55/veaDPqGxTkuLOOuiKOok54NmQpe/43ELPWd8DAqXP505LhWBX7Hlz7mfKMw2NR9289xMTH8THTwzCwtBn8H0cyyZ2DLU/fw6fZB9j+RzUsaOmEyhF+7P3vJSz/8x2cxnmw+6DfsFDxO6y0X8Zp8rJY/PULiB/msmpJf/yd/RFS0ZSfjR6Cd7KfgkJoJM+ZGw7yyW/hatwB1r+bDYtXfIHdMbtZyoJgdc/MxGeePMX/Mbx++B1K7iznWuiAVXJfYeEbS07sL4mPrDpA9qAp3ypUxMnJr+DjxgN88fZ+GDqw50/39eeo4hR4mv4NGtZ48aXVV2D5hZ6ZK1Zw4Nz7UOj+Fbp6WfPND2/AU/8zGD02ZcuCv3DzaRvIz/Bn2407QDeiEzKMN/KUF0fhmf13WBTjxH+mnIfHz76C/S9rvv/jJtzW/QLxfafyZP9noO39GWouevFtB09YY/MdbFqd+LJONCiO/Q7tm2148pLTcGnoV/j62ZTb34owfOgP2FmzgqMDXMG/7CdYS9iwgm4EtJ36AfWrTfmKSiZM2/MXDG2t2EJ7BZw/+Rd0Z5iwmWwY+Br3xoG2kzmjbTmk7bcXvDfd4qcFZ8UzA3LKbPtXsuoXd1Fsvii61Im8qt2o7Nl9NRpjdJ0Tjy0Whpma04Tgi2xr3wu8fZfRnuZ81jpuB1Ny1pPasDMsGxsJvaV9SW1EJs/KOQuVJgH0r/EEJ7hUw5e0YLq05Bi/2vwc7HQiaGxGNHfrdUBmRywVPQxns7l/YemEZCqUCOKNqyTwTlI27dy0kz/YSKPavgJq6/Tk7StkcLFCMW0NdOaOblmMO3eDHDrsefZJOXRcc4+UJyOvC1XAecn19CncmDsOK+Elt5nCP5kqtu+jII7SvVD2q7qH/fQzSiqC88Tk96U8e9A8wWenDJVdu8oTOzqEAu1R5OJYxHlKc2Fb03RqPn+Or22IgOl7LckuMYc/JZ6HW50LyU02g3Wf3Yek8S40US6JPXq/hwV7NtCF4jhOOvEPXEftpteWkRwh0wdlI0Po+f1gnmggh6qboulwsx9buytgy4NEUl/vxY/8FPHFpCxSNXDhbmklfDEin0L/2nP1MSV8l36FLl0CNgpRxuLpTO3rJvGxxyqIDYJwcW8Fp3iHW/z6F1fmslnkg01OgvrBePHOx+t8dc0LYYJZi7hY9TJ3n50KVgPlSa6qgD36HICXEwfR/Ge5/Lo+D3zN9Wj5jCzeIV8L65aMpw8dJ1jf9RN89plB54Yf5Z8mktj+3ZZK+h/m1G9y+PCIS08nDeHS2cp4vGELjZjuzzES/bBQO4g+vfZicVI/nBZ/iP6+d+bSMhUcL59A69Xs+YSDCn4KzqApBgIXualgwJ6ztHL4BN4l0w/FTeZCwZUyvnYlSviRa1LWcOs6e0e9EjqHrhOH7r/MrxoNYdzr8+L4ikIevn4XzD5dL05eepajQjNh/5FPYpLUKX7U+zaILyQohlO59X07LAxVpuqLx/jRS0mUi9emB5Oi+L2GIoYXG9GikyF8eGR/7BeKNCDdn9VbVPF5qgM5JXlxXoIq/ruxgZb0dea+W/pjfGMgTUufx4Ot++Fm80iq1jNnlxQVrFiVQBdDDPllggqq1QpCWfFVjgiXguhzuSUnqi7y5N0ToPDeQJF6mKGqZhMo39ouup7J47W+yZCac1zc+DWbo9YxFGsWiCv00zhi2BtQ2FgtZsxM4EdjJVDz+WvxXFwUR6AivjWRJIWMEJ5eoYrbR6qT1vPd/BQG4NqMUbRr3gaeoj4ARxXMoD/zV7DaWTX0mLmYLA/Y8CNNVTRY7kVpGdM54mM/rDQMoq9xY/jQsn7o2bxI2BlbyF/PWsOFmfYW0zac487unWC2J7As8udpFl4lQuB3RdHhZSZXzCqBJTRblL+dwn2GN4NNr50i+RzjvnK9MMr2mGj68TDLf1DAvxKXxLaqAz08qY7DWx6J8xJ2sYO7JuZP6BLP56znZOlBmDJTlUoCl3HKMw28JGVATUctGaYPxOF1SHjIlO/VqOONx86kMGcUj36ohra+gUKQxRneb30YZlj1EkZQFnstywJ5xW/mVv/S+PJ3Are2UWUaIUm8qOf/NA6/W3b8dTwnOvXCPteGiatfRPJReyVkP1fR8UkQB4kaOEMyVjRJ3cYF0dpod+OSOOeiG1/01MH/Dj4XTcsWs07bUJTb2odGqs3mGQHaeHXTUIqaMZldpIageG8aPZXT4w33BmNr4klh4vc0nqDVw9vSy4Uq2WTWr/4PPjX/sJCsOcr2Bz/Cu8dGFsfFaF58VBrjzTtLHbzD+c4OVbwVVVuW3hnIJl3aqBBvLI4P7OlBC0di2Jh94h9NV27aPBqdtp8R9+TO5wWXR2OR7yMxPQb4XNooDPCUokScyKaj9TEkZCgp7B7ORdV6iLq3heuGxzhrYQf8bIkXHO7G8HZnSZyqOlM4KxHJmz8oY85ctvBccoAbb2mh2thLZsWLdvPiWaOwr++lMj/9DT25NB5X50wSP4Wv4J8Rxlg04YCowLYcHDUZPRsLxOYl5lx2xxj3p78Q7UqMeOKSSRgmI08T0nR6MG4CjsxpE2IPHeKsgP4o53FWkL0dyt0bhmDKBFdhUvg+Nn4/CmWf1Vg80NrGv89OwuGteqUnjNb17NYM/11rKTNcuJSbXwpYHzNfrOlvxV8OIXa9ixfPTJvOOYMRi+awqLBwHN9NFzA0qlMc81ubZd6bo53KL2FPcDB//TAGtQYVCGkd/uxlNAVHj1okXK/fxEH9BJznf8zi9t1V/NncEi/g5LJnuxex3tF52PhWTfyyfzb71Nvjkafe4tA/Jnzkmj1OupUuTjxiwO6Wdviz4p6o1anFURttccqNb0LujJ0833Am3nidKSxN2cAq9raYXTleWDzQhTUmLcbAX7oWj/rO57s1y/GxwuEyPWVk4wQn1Ns/TAwIMmaDZid0Wr5J1F+qz+MjVqDCqlTxjvkg7kpZjj6f3gpVeus5Z+NSLLxzRLD96shfVFai6KcpqEn2ZNEjN2zKVrAobzTnaPX1KLNjRRn3ncCvatdjwNffZf1vjeCLl93R2wvExh8DeFf9Wrxh0CykD1nG88eux9374oTXK615uaY3Hrg7VvDVNOOxFVvwoOUpi5cd49i391b0zkk2d1urw41WPpj+Rb2MD6myT/JmrLF5K3xun8ut07Yhu5wWntRP5fHOu/Bf405h/P4xXD15N36LMRPWJA9h7f67Uc9aQdizR4Vj/tuF+x0k4eR/JuzdEYD6BY+EsRdG88vKQGycelUYcHQwh2ntw8TYk8I0VSU+9iAQX24cDGYDR7HlxCA8elkOng0bxGNlgzHtQ7eg5aDAmycFY/9iE7Cr1uBnW0PwSu4YmDxYnrOGhuJqXAyx/eX4fkI4unmEC7zsDleOlCMj5QkWao7VXHljLLnq2ItuYgVvO2pJp76+E7/LlvGmOc5UMX4ybYm+wgazvMhRYzMlBBTwnH476dp/0TT3zWm2erGP8jQyyeRVOst+CyNjnwt0NO44uzTGUJ8kJqdf0eznnEwDTB+SnlwYq106RTct22lP8B6Olb5AU9ok+LqGJxc9KaFLk5TZJXIJPzOvoi9bNfniVQt22FtHZxJ0OL1oFFcMaqIVqrr8+LMKfyh7S7J3R/AW6U4K+/2NfsbqsG77Tbo1WYIVlXTL/hNv8si9reLmhVGir0M5dy2Vo7lrpCjlbAnf+zqIns2wIKdZl1lmrz5ZZW4jDbeejrZuItlaxNI0g9NssN2cdl7NpMm56fxZy47sOwrp1t/jrB2+mtJellH+0Fheormb7rjUkEyfg/y6/SCdCXhF0Zn7WHdQApWa/SGZp1vYdHEmXaroy4/Xr2THtHzqF6jG347Y8OqoazTEV4tzHaewW9sNelSrw4NVdDhgfx09WDOMveP68t/vzSRVpc3bzrWS5oTPtFovT4wfypyhd0RsyOlHQy8Vc6V+nhjoY0njN13i0a6l4p6pfuR9IZ+NjGrFng1T/ys5vDH8nZhtlkn68eksUyFN0ukFlOCYyOuTtahcpoQMFePYMcmUSt9Wk0liBPdNWEpeX57Qxi9BfCt4Oy0x7aDfSjvZKTCcvLMlOXKVOxctPkrqW5X4lNsSDlibQX1+D2CN18BvSs6R51QtrtEfx3HOxXSgZghn3x7IFe23yU9Piw3dJXje1iZapK1BN7uvs7PyvrJsz3nkpXiJ93tklpX08qc/Ifm8bmpjmdfgWFpXnMP7emmJkrEZ5PYwvScr1ohy9vn08U0iT/56UqzNvEq3fsbxpfUvRQuPClL+G8kmG9To+r46evrkAK+1N6WoJy20od8eFtqW05sPvyjuxkau69pBYWtk2NLVmQfVhpOCgQrnR9vwzuhj5D12AP/0MeVxS7PpeZsG//LV5Vd1l2hmjAa3PVfmA6rVFFBgTeavLnKbi6Mw3msnTSzNZ+tZdkJoVhStnXCaFySOFPrlppLs7gyeM6vYQntsHu0oSeJL7rNLz72/SF9kjvAsPzVxmXwZbVxymGUPJIiFDrcIo0LZS2gTjbc/ppzMQG5z06KlNe/J4p8PDxwk0N2B3bTv2Rq+Gu1KGVNkecPRRfzt/V7KqlLifQOQhxlE05cz/flghBGrRaXTgWZVtu2jxbOhiLz/eFGC9HmuniEBvZ0O0smnp3lm+nfh0sdEWuZ2kqfufSDMUc0ht9pkHi2fIsxUKKSdcJT/PRgjyJpfo9TrUfygn8qMbYPKKW98ONt2TRT33b5HfpH7eYPBBdH4bhMt89vBi70lSbbgI+2w9eD+t0dT54BuypvpyAl97Sjeow/bTLbmwQN8aIa9PG9SmcrW8RGUqaXEg3JH8qbKFBpns48Ml5/pyQQbmLYijhbPyeQPFjOgdXQGlX45wZcqh8Nu/7P0PuIYh1f/Eb6+u0g/RsewWkiG8HZmCb2sPsjyn3sLpx/foOeOwezrE1ZWMLKWoo/s5vuO+0T3zmf0TtmbL1o9ERMyPpDtt5W8/vcASl72h2bLL2AjLwuqcpbk6YOBhx90pwd5Mmxwz4jd7oYSzgujHYWZ7DgmFPptOk7i3RR+M2U77B10it7lJ/A0jYXwUKeABgTGsnyWLpj7XSHFeZE8yfqVsFy3jFYrh3B3pY+QMe4m6XvvZfUQWQu5o7V0wNOHSVtPjHvbREu/u/FIiQJR/Vkb9XvlwF0l0pRs/oMsW+dyZNIE8jHpzVOTTbjNzol0Dx+idZ9T2DLsJFTIpFDjkuO8tzwW+hacoT374zhNeRd0Z12gZ3E9HOI5G5InXqM/saH8bacSzHATyWD7Pl4Zc06YJl1F0au386vlfYQRdbX01ceDH+pGl232baLXf1dw7MxQsVO7jUxvzOO3qq2ijdEPeuBhzg2Fw8jFLpbS5I9z3Y1r8KtPBmk/jOOjKtmwr/QsTXU6zKPbIuHf94vkcimMV8esBnFmMeW17ufrNaNhbirT09pdPGfVK8Hh6C1a7bGR12h4CdJ3HtCRIFduGFtiXj/iBV3/u5DzmqeI1eM+UWPcLNb1LhOtlx+jX33ieJz1XTje49XguYe5//eLYLSrgCInhvOEqUnQeeoqVdcHsdnNPSAXJ9J5H39+EzYLwmSq6OXFzdzVLg8LFtWS1i43/rolR2hQbCKZC0u5Iey9hfHY97RwljX7qVNZxrYT5N4ayVVPG6FRO48Wnw7jazPLIXvNZRr8J4jL5HJgvUfPPuv38NHsCEiqqSIHxa18qM0ZLgyso8I8d3Y/rAuvlzaRS9UKnt9ULzj8a6PmlfY876mNYGudRamXQ3qyohWkrYoor2s/mwfcAysfkbq997DHxgsw89stSvy6lR8bHoNnJg/J/aIHx172Be09zZT0yIXnb58GQ5I/0AT/RfzUrBcEDsgnDAzk2YYdcPVfKZVE+3Fs+yM45HeH7j/w4YyFJVB/vIHudHtw3JJ0GJHYQgcWubJ3WDB4RXwm074OPKfQDj6tvEbZB3250PQHeHvdpil9N/HX9ufQMeEJxfxxZ89+lbA0v5X8z67krPwzMEjhG0kEOHDejsMgo1VJjd3uHCDfBYNHNJDGmDVsotEKPq2tJBvmxIu33oO6td/pW+hifmNfBENG1JK14QqWGNUbZ958RY05Dhxu8BFMjb7SM435bLvqEXjee0I7P87rEY4kvjz9gX5bWnHzo28QrPWKfEcKbFXXB503vqFlb0pgpiiNe5M6abzvTTBb8h4OuvXi88/vw+Hx1fB9pgz//t4AdRuy4ew+JT7p+wycBgfDzp/qfHh6M3xXngNZlkP40OMmOO0gAw6vRrDD7kewDY8LgdqjeRbdBdOJhRali8byvO0EUQ6NZR1tYzl1wwXotokSRwYb9HToTHj18LGYIKnHDapHYf0PWWoQtdj0UhisfqdJeu79mbt2wo1FQ2lqdh/uNWwV1E8aRF5TvtLzlXNhwghFWn/iCVHeaBij9FNsqyRSTJWBup0NolLpJ8rboMJTLZVxXFNvTumU4UVb5fDXNXmW9e+m/EWSuKZEjZ+kf6Kkr53gMkSLvyU10+KxTeCqPYz7Xqqjm1Ll4LpkBN+VraTA09lw+uZwjh15jUq3h0PQm6FsM/YcPdFdDvm2g3mYYTpZRA6D0K3qbOwdS+/HNAqry5RY3nEfeZrsFur3y7BjtSOts7pkMW1wL453HEuexoPLxv33mbxDP4oXvBTFWY4tVNC+WVSY7yq6yjSQsr6TedmCeLGV79CGgghBe+8lUaH2Mzn07SI3I2UcdVGS5/R5T1GGcvisnxL3mvuE/mVJoJbFQF5+6haNHPMZqoO1OdemmOoPNIDswhHc5phPUz2KwddPj88nnqSvDinQbqDHIdYJtDJ1L2yrHc4LXCNpgOYsmN6izX3FPTSqQx4kSZPTfjiT5LICQWRVzptoSlfaxgkLBEUedUKeQl+lmNcf68NfP+aL9QlPymSUenFazseymWkrxAd7OulnSR+hXjJVnD++lZy+VQvO7+6IK/S/0be8Bnr4WgGrX0vzsMmVtBBl0C5MhbudLtLhb12wmjV5lHQ2uRu8Bd+vOtxsnkBt7+5C5BU9tvwSQcnx52Gm/ChWOBxIBx7FgNmoUbzK2JManNaByoaRfE5qAVVvGgM9YuHlRZNI4vNbASu1eeRdFdKVOSDk79HkjCP3RO0B5y1sT6tyPztH8cbr8LLwSEUWYo/M0D80XzxvI8P66C8s/HxKrH/WiyXF3rDL8JV49+kvckgpomOT+mJuoCzHj8ggp0QJ/DxSlYc7xlBL2xf4MU2Lccp+enm1ESaZj+BIBw+aclqE0d/02erafPppchKO7jLg4C5TqvsbDM1yY5jH6pD9Mjuw+zaaw7dLUeFodTAJ0OeI21Vi8LFS4U7DCN5X5SeqFhgL1rOG8kbX2LITGUdLJDs12cNfWtA+biT2VVLjHdJXhMQH2aLhSUWO2a4Fhas6xJhX3USmMXQ/QBpTt8iz1Zc91Jz3B85VqfPJdCf6WNUK0Zu0+aWLOaler4EAdT2edmU4HT1ZBBPOjObW47KU0HwMvrmM5VHtT8UXC7ZB2JZxTFlZ4qp904EHjuNHjQvEOhlJeO0zhtNOx5RZ2icIA6JHcYNvroXlsqsWukG63Ls4VKhzbiwrcBvKeTmdQtXzI+KkRZpcdn0K4MsPYnmQJEt1OdOWTZK4J0yJW5Wn0bk136DeWIN/39EgDZlmcDHUYcnCTjF4+U04sGQkv5S+Kt5fkwd3Kwz4zpy94hmDaPC5PI5tnsuJp6vWwdsVRqyx6lDp+8Kx0CAasaLHc4vugBbh2CNDrngZIOQ+dRHm7xzLL4bUCU8Ot5f8PDaKb9zUhMepa0Q/qxG8eOlCqCx4JCa7yfAYe23aXC+Jc0L68eetX8WdTztBAQdxuv55ccy9p2C+YRh/dXcWTw8tBy91fV4Ye71MJf0UvN88hr0NJS12tRwE2/OGbCylIwxa5AidT8dzVFG0cE5mCGTUTeAFqQ+EW1HFQrX1BGYpFfiz+7fF1z+GnD/JDAqffyhreWDAu3w3Q2VVnminJ8/XuqrEm0p9sENLjVWad4smJ79BIA1mr66HZdeXPoUqreEsH9vX4l+TCO4u+izN44Su8ydh/eUx7F6aJMgoHIAyEyO+/+654DnYGoZfnMBus/qDW29ZsP5vIi87MQXepB4UBo+cyPB+Jdh2R5ovcTbi7OVh4DVopRilpsQvjkwTbfxl0b1YnU+9elaatOQHaNppsVdtlwVPbgT/H8N4WEqEkKdaAg2fRrLCvXphh/EJCLUew9scVKBf9g5IfWHIxTXGMECcCIYLJnCGjCNMmtUo7Oo/keMt98GnHt7emjeebx1NgLeTY8tUzZR5ZvlZ8xnL+uKyNHW+/maacDrgGzjOH8ycd04Yo1EP78N0uNy9W4h8XgSda/TY564+WI6LhUfXR/On/fZQYe0MfcaM434eO+Bs6wBw0TLi6anR4O+aIxR8M+RJeadAdrto0XBFkZVUVwifJsjgZBNVtrooChLnP4BRoAb3sZaDeuvbEH1uCDtKTQaPnFNgnjycmzxcISMqCEwej2QcEQLpZQK0VY7mI2nJcEOzWzhyyYCNHIogJTxS6M7qy71jWEhO7o1Sv5TYd5k8zB7QDCq+anyv1gSuDykGnw+a/N/tdRCglwAV77TZ40oETHPbAKMvDectvplQrTsOBhzR5bMnSyB1cIfgN1OKG49KgRDSCY/7y3HZxwmwq7YG6oeqcFXnGogtyAP5ZnW+mhUJ/a9GgHbYIH7z9BTcjHYG9RlDeOFnhuK0cbAzu4tcG0aC8olXUB4izQqvHCHxNcElPQXOexMOLUonYVpJP36hfQoG3wyDJGt1lusqhwHoDs15X6nXIHuwet8ABt292bkoGHbvKwaXQlme/zoDzn/OBK/xirzvswgBa2MhYsEnygz0h+Ce87azu+nYoGSIdy+HJ6bSrBN6DaY9LoSV1h8oWjseZB6+gr6fftNXiUKIm/IAjLPeU8SvHPiX8w0KVR7TcM/7oCOjikcP1NJIq0+wo29/nONTTgl+Mui0UgVHPyyg404D8Z2SEo7USSNpX30c0Fce/xrGkN93E3zTXwaTDoaQyitLLOjojbmOgXR8oCNKav6ATNhNM/duwM4+byF54y7aq78HR/yqh1HpO8gnPhS/vC0Htw8+dLY0Gp2CzsHZ/J7s/3McSz2OQnXsCpqjfxIHD98BvsOtyEU7D5cdMgNeMYmuXC7C55f/CIZBg2n4jWKcNWSToJwhQYMUKxD79Ss7klMnTrS9hS7pKWKviDt0SGYDSO1VpgE6D2n1g1Pg9WwqnfRrpCMlj6EqZS2dHdhM8ROlcWzzAXKa2NLTxbTwpXIsaU54R2Wak3CvaRzt7v+JZhyYiycUQunBkU7KM1uO1maraNC7Tgpe4YFHrQzp+OCPtOvhLtzwSYL6/HtBJ18cwMyGGjHwzX067B+F7huvi7JNxdTpeRwTM4vFpIunqMLhJK67XS7Wn4wltZY8TFK8IUo47KaLpRdREopF92P2dCO7BGdZ5onnNwyl2B0VODX/hIhbX1NrSggEX9Cjh3M+UK/Nl2GK20J6EfCFEqRaIS94N93s/Eb5eXJ4ICaSLE//pH/jh2H6mBiKbvpNZDMFX94OpfD5f6j5liW6Oa6hIt+fNHPIcox0MKAahc/UreiB3++/Fkc8bqE1un6I06JFu8sP6LpbCN5Wny6+sGV6AdE45qGyuGtIPmnbJKKehKQYqJBM+RqZWFf2pUz6RRhlLzqLpjFVZUL+esoqv4jzX4eWOeROpZQFJej2RKNM9W8X3ZaOh8V3TGnQdAlW0y+Hkn5rejhOiifAZzCfvJ/On5PinzOVMabfQcocJcUB7bpY8jKYYqZI8BAwxTQtN1Jw7aIwHSs8ZjaWQn58Idn3y9DrYpMY7PSanMw80G67q+hs9ZAed/thXujuslOaFbRAIxQvXFOxaO1zgU6oxqBR+0WLsWEZFNs7CX02/bWQexxD5/ZmosGnocKywwF0cPFZ7HVgttCnfgF98biI0W7rhGVn5fjrmlR4dX0m+b5W4BGBd2GevDs9XKzIuqP+wK323aR2W57TilTx+u9d9FdNli9X6ePCP840Z5MER86bihKvx5KBy3eaa22F4rZm0TL3NR0dsxw1H9qKiT//o3AFT5T4M33GietMXcv88YLTEGHzoAs08kUoOloFCeXTssihOAaPKeQI6gXH6ObiJMxSvyHI9wqjnZ6Z6JH5TNDe5k7Jr/JQbXSnsMdEnTduOwOyA2fS1Gfq3LWxAU4VrqBP3ar8rFoCj8muopwlyrw7YSAGZ9nRmKGyPKd8NCa+H0lfKrtoYe9pOG1Qs/i44S1tuGCF9YNtxM1H/yOdT8sxNP+reeV0kVbO34DPKtcIQSvOU+LjPbhpTJmwdVQm0d4wnGz3WzhUcpzEfzGYs0wNjp05RKEGSSgpqQ/R0rtoYutJ7KM/GZpeDeF5YZdAxmwyHRe0+J91C+g8EMhpy0Cec0kG34wwoexoZR57fhAujNCgU0rSXCOMwWW6/4leaz7TtWvTcOdXEF/ufUTH1lnjLPVJFntflNGGv4648NQBod+is3Q83QtH9X0jWHAapf0OQEOHwfDWIYGWXw7DuGVm8KUxihyrY1D7kwNIpOwn+ZOJeF5lA/T/NoLrzpfDy3mDKDB1KDf//ASKnRr0vW0gq3TK41kFScrQVOQjE4fg1IOXxfod3ZR1dCyGbxkuDrzzgiqipuOH/4ItHnZXkKy5DeptjBfMtpylC72c0GF+L9CpOEEuURvxo9QEuDLgCG1fuhdDVq2AnXJRNHxfGI7PDYBGOkBXrWPQxfAQuPbV58nd9wFXvRV3jdBh7YTfIDOkRpRrUueVscrYMSBaLA+X5XvuQ3F5+sOy3bc+08nn49DT96FFu3wt5XiZYXhwtjDxwgWykrTF77ny4OOVQq/OOeGcWwBrImOp8r+NeCV1K0SdiqSHnwNwf1IUGFqHkK9yGB7fnQ41U/RZLrAJng6KEOV1tHnGz974ttJM7H21Hytd7Y+7x0uUSblLcL3DMNQr0ROC4l7S/m5DbHtZJmC7SL90ZuDvaRqQMieLHu+1xfi788ElPo46Hjth2tsgWPHqIC3fthErx50AlaUHqGZYAH5pL4SZ93S5+ehbaLu9v+zbP02W/C6Nrx64W8zqkOcoW3UU7LyFxYnf6UT1cKxUbhY6Lf+j70VGGO6uDzvuFJKqzwwsdHYFNddEsj5oix9UDsGcKZHk7eeETv9yYERRMM057YWZugytljr88c5nkPUYJWhPU2NL2b4Y0DddKNKUZu+/AzDVVgJUG1pJxWsEWj03hXKTG2Rz3Qg1D26B2e6naOCkGWjT0+ddk2JJX9YWv+ZdgNCwEOqVsAIhrwaSpw3im+t+QqxpndCwRZH735JDW5kBcLDqD83xGogrXW3g/n+P6c6/4WjXuQ/kZlylI98MMXBmKuReTaEldmbYFF8CbicjKbHFGotONEKsrSoPSP4D89rHwJNFffjMWzlsH+wCRW8/0KYtA9BJPwKG+9+l3KBhWOiXAxeO5VPuunE48X0lxDcdo/2np+Hz7tcgM1yBNb7/hsycLXDiwz9a28OVlb/ioM73BbVPVkP/OQWgql9OGcOHYl12DRw7f4rmSY5BzS8fwW6qNNdlfQetgmTov/ELNXn0wTmLr8LoonqaKdkPTaIfwQ2Xa1TxYjDqp3+HkLQuWhD6CVxbRZCAVqrwl8Dxvs/gvxF36U9PJx44tAuGXP9MaklvoCWhBZbRU3JZ/QdoUm8M6PWGLDc9hcsOkrhZTUrUivsPX6+ZTvFu5Rb84RFufbeRyu7nCj/ONaJaQDSluqiDU/gznKeXQ+9mLwE92WZ0flNM/+6EQ/Pp59h99h7Nj8iGav0mdJF6RlOPl0JSbAOaJr+n8Z9qYKd7HaZO/kk+85/ADqvbmDFegt3ynkN7TDkKvWV5kcEruD7rOlb+VuCu9FbQsCxE35EqfLf0I8w/nIPnTqtwy/mfsFU6BW8KSjzYQQItD8TiZrO+/O6aLNp8P4Ca6yR4/Vsl/PF5M17b841uzFPDwqFLULfmDZUuHYAhRqaoePYrdaup4QepSdjmJssv6vphpeVYPOIxgJ/tVMZHAbro8mYEm2Qq4H57LVwdNp49i2VRdZ0anuqezrWjJfGCvyJqfJjNc2b8APNoWay5MY8jO1pA9UgfXKe2iA2f3wfPgzL4S9WB065eh7BkOVQoXcpa+7LgeJcSfp69nH1mH4Y9qIZVIStY454XNOkOQvMSF9bOM4PuBTrYN2I1h91TALsVI9HUYh1XnbguxPIYtBrnwcp6KMT3G4+dnZ4cXFltLkpOwvtnN7Bxc2fZgmMP8V1FKNku/1JWkVaP+QMLyGr3rzK52nrsnd9Az+9IiMW/H2JCUhfZ3+0julb/h0tSlfnVZUkx/mcNfvLSZumT7WXGQbcw/YYB/2daXDYgpxw9go150TePsqml11Ff0YwX/dIvlZC7gP/UkLe3z7SYdf00prrM5VfZLRbC21RcstuW268aCb7pRzD6xAL+5eAsOEpGoHG0Ax+ftFlQsghEy1ZHFstXCyFmG/Cmjwtv9pwsXLntgCeTVnHsxGcWitdm4trgtTxyym8Lh6THKLPvJLVo9xemTHyCLV/ukknbcKH94mO8mvWNGtLHC9jyCOUlFHnLlBmC5uYH2HvcEB6mYiPETavB9v8MWDPVSdi9swqF4sks/PEVCgJFPGxizp2FEcLEhMto0jGLN/hmCAYfz+LMRGveLFUinE86icXX7Fn5Vb0QeyEBJx5bzLu73wlTlh3C5wbL+ahMh+BQuQ9jJzhz3Z0W4cNZL2QfV9YaeVPovuGAh4es4SS/48IBR0S5gev40xUWPqY+xaamErI4+UgYvugppp94S25l7wTZc09wl4ost8v9FGZte4SBTZr8ybQ3XN5Th9unjub+WtKwvqXHO9cnc4RKX1D/VY4Xwyx41XEliPt3DW8ZzeXhpweAq04Bmi+bxz4dOuDsk43e/gu5Pn0MmEsnYWyrA1dnT4KQ34cxvMSRd66dDCeP7UfHv86sJGMIgce8MCzVlRNGagGqLMHTNav5R0Av6GdlgbLT1vLqbXrATs/w7fWHVLjcGIqvPkUpoRcXHheg++BjfPxYlQ+YWkHp+QfoZKTHFxbagabpPZwlTuJG1wXwzaUSu10s+F7IYujvVoLOay3ZeO9yqPe+gDtc7dm4whX2ROSgdvlirtLxgC9iMj5sWMb6VZsgbXQ0Pm7u8cv9zWAsG4S7VV34xPH1YHt5A3peXcmJdxfDqo0LcePoVVzsOBlSh0xHu67VrPdlPfxd9ww3Hm2jaPCDeaMacelpOVbMCYLp1vWYoajNi8+Ewt/GGkxpNeT61HB4pFCF1bVm/CvrIKT2K0OL8rnc+DECLFUuov/A+fxO9zAcUj6D3mMdeN6gGBAUUlDBzpFlC+JgbP8YPFPtxGa94+H60iDskHJh6Y9R0FXkiTMiXTiz/ABYR9njrj8unP7UA0bvm4JXpF359Nx4KPF+ir98/9KW58mw+OAjbAxW5babGcBatTgmbSS79M4GzQXVKCdpwlNcTsHyhSJucZ7F5wfnwKSZl/D3KTt2MDsNlQa5eEnNgbfK5oJC71S0bHLkebV58PpGDPo5OPO2T3ngnBSEc3u58Hij02DywgO1TzhzhEcqlHy2Rd0+zjzW9TDQnwlop+XMjxaeh+bVDXi+QZqtGi6Dk3wdZrwdxKrXiuHp/Fu4K2Uca1qXgccyQre9Mzh4swjHLC6jqoU1L55IEKyUh1cKFnHbRIa/ZakY/Wo5VwrlcGp+LN5Sc+a24eWw+kEQXq9z5q81ZaA+2wMlJZzZ8OUlqKu2RuNzK1gqKBtWfh6Hn5odefOFSvAPqcPfaxR4/5M7MET6Nn6XGsZLe9dC2njGVaMn8a3Q/8Bt+BVsWYksp/gQ4l7m4dRZdrx6RD0ob05DqXAH9v9cD3vuxKLttBU8qaweFvcNRusaJ3Z8+R+YPV2PdyycWF3mDnweZIVnrjvyoo5iUIsywO4NyzlrTj1EOt/GV1P6849DjVDaxLh57EhuqH4OAV1XcKGfCeuovYLQm2dxYdps/hfzGoyEdJQeM58XmrfCM+84HPfEgV3OtEK+RzBKdS7nF8dew7M361HFyZHDu57B+oGWeGL5ch4XVwtHpEbhQINl/O7sc3jvUo5uxwbyQNnXsPflVYyON+Azo9pArfkc/oqZxvOqPsLOtRm4VXou60R8gbP743ty1Z4H1X6F+/MPoPqGxWy87yuoDvXEUnTg7TWfYJiLJb5d6cCuYS1Q83gkRkk7sKPBa6grvYYTV2pxyer3YD3hPJq+GccH6z6Dzt+TuKhjOt9p+AH204/ilv5z2O7CX5iiFIq9l9vy7vHdcGbpRtQNt+fFcV3Q8Mwa13+az8PDv8Gib/qY+WQBq0W8g1G7C7D11lDWau+A+Y+z0AWN2D72J7TuSUD/2mk8NbMbwqLD0X4Ncuh+CXx/yAenFM1hjyBJXFfX46OhVmx8pjdubxuD/mNsWJT4BHtjTmFgow7vtfoBwqdEbH0wjpPyu2FhcCRurZjClgmS+FZlF9pNMWNZwz6ouc8BzfZasOy+Pjh/3ERcZ498+ux3GNz7BL7v1OYblt1wyTsKG1aO5nOtkpggEYgOuuM5KEQG/WRccICrMcfG90Wj61Mx7J4Jt8/phVJnY7BFbxDXbZXCdqMg/LVlONfulMVfB9di/yZ9fhIvj8PKADX+jGG339K4wuMAXtdT5f3VfXGvnBe6Sg3ihbMUccBWK/STHsofW+Xx9cLNuK1DjrePVkaXn/YYr9OPh+zrh6OcFuPvEAluWjGIHxzcQ+piP96boMG5NiNp6vLBnKgykJM1YkSt/nocvVGdR2TWWWT/MuSn41RZ6V4vCJ01la+9UuaZKe4QojyLRy6SZ9LPAg9Le55hKc3aL+og5bYjL+j7h9a6/IUt7us4MaWVklJUcO7dLaytdJ+wh1v6BPrzljNF5Jc2FqNb9rNzylHyO22M+5aF8Pe/m0lgE1TXDWOj6dNJY/UUnCkXxgn9VSjSfSK+7hPCIw80iR83GqLotp/Xb84WH78di++jd/P54lViuL0RKu3wYd+meuGpoh3rbZvKb/stEeYPnMCut2azgVK8uUVYP/YPWsRqv1TF6XIv6dmZVdznaqTYlZ9OUUGbuHbBNVFnryUpF/nzoyP3RD21c2J5XDCbLq4SDVq8LAoXH2Tz5bni7z+1wqYlUXz9SoA43WEqpBrG8Uy7wWJa730gu+0Ih8/2L1trkAES7Ue4ee6TGbs0RDidEM85e6daZBY+gbpbMbz/0EqLn5493us4xIpjhltkjZbC5Z7hrL9bylxFRhmbAoM5wV+q7M/FQTj2TgC3lyWWeV7WR4d8X05MfC3I4Vr+7mTC+dLewtyfq7lrtcCrW3eWlua48N/+VlyYcVRcv2MZ/1/BeYb1+LZxvKKhpVSk0lIiSjSQ9LvPq5BSiqzIVv1JRiRkNahoT9GQaGhpSVT3eZYkaYqkIntkZUc8PW+v4z6O6zrn9/t5c6/7sYSuHlZGlTuO9O3PMko95o5LZtvQzjJnstRPQiEDAW0PWErKvyvxRZQp3TN1oD32vbitTZ+eoA215Q1iv5s6RT1hNNNzFJUdlaPBxxYkvFOBMmaKkGyJGRn4qlJX5RukmUbUmaxFtnLt6OI0hawe6lLcFx5VQZs6vuiR87MifOCpSoqFetS3JgsvLFeis/K6tMAiHVPt5Sj+9jAbup/Hektp8jSYwSfJ6bCNpkfJ63UQf/iNLtMfGUTditf5eYP67ExtCLVWiuDdKCN2wiyMFv8yxbQnxky3J5zWWezFE1dmsoGV4RTwJgnX7ZzGnl85Ra2CCrQs0mJGG07SUNx9XL9Egf17c5wUln7En7+FWYjbfjKZIELbvLrhltI2KiqXpDFhhXDFdS09PSVP+28eg7RKB7qQOZZyfdVAqRxoobEKxRxbyQXmmpJDiBoNPjPntbP0SXKmOpUEjEbJ5ZoUn6xBLTXbUXnxWCrc97r6uqgqE0sPojjNhbzMGw3msPcUKc9I5dXMJzFJm0gqrBzkY37pM/OQGHK7YY5ixVPZy7BYOvf7KD7foseuSsaQCKZjxH/qrHRDBC2PrsGBffLsr3IoGW3ow7fzhVlERgCtivuN02V7QL/el/rfStDWRcWQt+E/+is8hvyrgyC2fjWNHTmeWiX14U6VLXUMTSDXzSHc3+cW9NRUi9LcRflvR4xovt5EssgTxWWOulSxWoek5Nxx1U0V+vR7T3V0+BjmZ3GKBGbjeN18ZfaURVFEbQLfaarOCoTj6euLkTg3UJN9yUwk3de2GDtVnT2OTyTufCh+lBjHvr6JI7dJBXg8SYrla0fR+1WtmDLuF3ReD6XJEz9h9/KO4fkKoBPbRSmV5cHi3n00zl+ODl04Dub9WyjfajwZ8rqwbpszKedpkOXTIE5MeT5FvJpIrf7SPGyYRaVLJlHl61G42HgqCW3To58aO7FojCbdmdBdleowijlsjKRZD+R52wFZNrQunl5Py+VHLh3D9sQkUfiS8ah2eZgDJ5yj5oKtGO0mzbJqkujB3zOoniDCtnfE07n8auz3fgNCrZEkY/oUF3C34LNVCJ0wFyJf+zSowWMU/EaaVjRvB1F+J9lJjqNGS3m4tHgdFaepU5XefO7Xb3tSapxIIxXs+fELBZRzaxJdPKGC/NyZpDikR0OPjqH/oUn0o+9blaD2D1x9HEuVFzl+xwIRlrwliWS2dvEfXogwmRPJFD15Np5L/wuLSpLJNyQQVbw/wN2hJNK+kYsRWzog7kYcjZrVhnItJZAYHE5Zi7/gx/RwKJY9QedOi5Pm/kXQLnaQoq6MoY3NTzhZSQ/iNFRpjkKcYNHYlVQorEXgnspXXFlIh0/q0I9sU1z+ew5tHdKlmzvDUSzPgNZ0nal+n/EU7BwSh71oBP932LucaD5HYW0yeMK0D2xDU2iE4jr0cboHZ22SSTQyEXusq6BixhnyEvD4MT4VYiujyTfvGTbq7oV5F0NpSrUQlY3XhO+lxyn6sjQ93hTGbXDYTReLlEjdsKTaQmQDjZBXo705H/ihiY50b0iDag6uwasvgezLtWhxWRoGqZpS4Udt3l6/FqSnJdG/x038R2GCb1wyjUdjdFcvB3ffZLpiFIBkchHibieRl0wuWvcFg8eROEpa2oqF+22g1TCc/L9/wquSrzjnoiAaoSlKJj68gDIP0OdMWVoVHsbPdPUgkY1KZPpaD93nraI/UcPMFheE2QmL6PcRVYp4dhUXrLGgOhbKu7w5D93KSZT+TRIFTUlgmXiWtmi44I/Jw1zhmEQq+XHYvnYz5G+Op12PrqPekBpkW0bSkXfdqH4vnFuVEExRcT/wYF95dfe8Y6TwUHRY07/wO4p2UvY7aYoEVyzKXE8ey+XpGabh9mE9qNqqQH5v23CliRVNn1PPv//iC05iieT3nwH6+GyA9z8SaP7+QzgrygTit8SRa/gFfLzqJacXE0kHJt3EqgffBDcUQsm1+gk+bA7kNyT4U2XTNxTdMQXvBu8jR1cR2nk3GMMU3ChNRpw8fW5g3+qV1Gs7iqau+ojvzy0i9SEhnGqkB0ZGsdR9YRE6zR8BLu3RdHlqCE5oieaOLY0gifk5qN/XXnVufCit+HMTNx5p5nuuB9AKv0foZb8UrUMO0Nyht6hblYoV87ZTzK+v6FrYgQt1XGn6v184cqwotScvof21Y9HtVSJ3Rj6C5MJcMDWhW6By9zTNEQ/Dio0z+a+9wSSnnoUvk0ZhV3kAOWypxNPee3FT2iES+tOIOoFFOOa7F4mseoDbqt5iy9BGsv7ajSK5cjRr4nIyEtZCkG+qHjkrhNTN16KhfyH/NfQExf47iZVbDHBxpj+Vh59DV9NQvHDrEN0rv4xHLhAqyu2mQyPKUM35D+okbiWJ78P19VahjHurSTNVDRs8pdFCIYBc+hfj+pKVaLjjGBW99sa6K2fx9LUD5L4sGNNC2lBNczfNkInGqHliVOLpTt/vJ+Blo4mkKeVKPfKj8KdaEO49f4AueRvgESjEYw/2ktxkG+R+P8OOA16km7sa7XbIkniZGz1P34z3kqdS/UdX8jFs4SVl67Gt2JNWdQjhxtM/sNLXgzT/jsbev2OJ5zfR4MxxqPHKmLJurKF6RW9+gYcYaeiupx/esfx+1CDtVWuoask5/nfVXMrUW0GNxWOrx+6YTHICJ5ohNat6VSkj2Sp7MtO35m6csSH7Gis6cEQRJts106xXEijqZgKmj1vooZcxVv6yhx71NnJQ3owXv66DGXLt1BRyCh//dIPlZ9tJxTATvwW5A4W2k1lnDWqJbgG7S20kfeYJOg9sAE1qoS+6fzC2dRPcqLtLinskKZ15gnL+bSo+o0i9a/xg7NFaUv+uSocFJwFXVA0zliaN2RMOVSuu0uRBbXp+Kgr+O1dAWd8mklBUBJTPyCRulQ55+gXDC9EU8nyhQxvHHYTzIrF0wHgSWbWvhWKdEDocOpm29FnAntWHyLR3KvlK6FLYsbs4Jl2UDhlMoseFf7Hgz1/8FTdxmJeUSXjSV3y9cgI1Jc4gkclvUaFXgabHLaI6lyc4+YU4FfhsoL/b72P4um9Is33o1IZGTOt5hFf3B9EXd8J//26i8PoIOt1ajovfF6NjdyLZqBdiYVc63vx0niqyslDhbjieOJtDn3anY2LANvS8VkRL285hfeo0NFevIIXoeLy/oJk/XsTTWN1wNJEcwddsqSN/U398fVSGOzrUQJp9m7HXiLi9qk1kE2COLUv0SOZTByYHSJJHvi7lKotRxn+iZL9Ok2aP0iKPIiHKqhtHuxzm0tyfP9BttzRZFTuTwYIPeC7wLy4V30Enw5+j4rZn+E3Znya7PELL5AaUVwmjk+rtGL2sFDdHJ1C2WiM2dp/HUSfOUxyrw8ai0/j3Qw5FTER0DNiKMgXFdOnNdVTZOQk1wq/T1K2l+Nypkh+5mWjINBdjghOrV6vX0+1xqTiouJabeb6RJqmEoeTdb9yT7GaSaNqOkWp6pF7Xh2uOy1EIatO8NzK0S0aaHORVaW+0Pi0NEafcYV/sGrmARteJkE3uCPqQvJH2P/+Nr/ze4W6vQyT7fQB3bW3Bno8hdCf8HWoJl+OFg3Hk9/MFatSfx/i1adRU04cxI0/hs+gcCpLuRcOlG9FZpIT+xT/EFyu1MdvnBrmqtqN6fzG/p6yG+tffxsEUy+pJGbfJxu06RrQFce06TXRlWRaOMpOBB1KttCg/Am+m6ZB/6CdcazCOpj6ZQAEwjkZ3jSFzdUVa99SUvA1k6XTTcAxXlpGV0yi6lfIFc6x2kVDzSFr/4j7euhBEYpwwPaq9jgXLo+lQ9xBKFaXjM7MU+jL5N9Z9DkFz62zqk/mFbypcMWJ7Mf3o+oa/BBqoeewGyXz/iNFYwPcvrCWY9BL9y9SqS+Ma6MnlBxiZG84ZWjXTxx81aHl7LMjqttG3lBxcMEWTvu8QJmcJdZJ3HEcTT2mTm9d42pkuRdpjrWivvyK1nfqNfps3ke690bSptAd/jDhGSydLE5vH4+1XYVQiJElSrhko1ZlEz41GkZJjCGo0XqIPHyXot7YL1hVfoQ96EjT6qio+3XmdVj4QpZbPl3n5xhpqGI43NlG1+l9iA21V/Yry/8K4ygvNlDfjCSY/VwbN0jYySqjD0JfjKaZQmsIKdGiR/Gjae2M6FWVrkEGUME3Mc6LFV1VoYf5zrHi0m+YVj6U3c27impHBZL1akUakXMI8qXjaUaZAXl+DccuPdMqUUaT6L8uxuDCftmorkr3vWKxWu0YTSsfQh6cX+BFKRF4PZEkkTLT6iddt2q0oQXvWn+JCfjQRXfyDIrVj4bdnG92e+Qx12+RJ8cV4uvBTn2SkRKlB35JaCnTpRMU7fHZ1A7nratGC3gYcGXuMlOep0+KibFxTHEEVthNIRCcEvTOSaW/9BPLzdkKVBTk0/7A6PdAbjWv3ltL3fxNockksf250NaVPVCWTP3OruofqKFagRHbnwrnPCnfJU1maSjIUIWBMK5HfPxzdIU7pcyaTxR8jmvjfAPI3F1N+01S6J9+KehY7KU5uMiV+zsPTNSfpqeMk2uYXit9oOD/LJ9EdFQfs2ppBFSp6tOatGN7ZXUjH5+hR94vDfFdVBT1cp0uzNnyzXGlVQ0LnNUnUKpn70n+bfE8qU2LxWNAPbqJv36Uprv4Hxu43o/BBMzIzeoCBp1zIkZtJR6cX4+RUP9q8fDqNPxSGPY7htHy+IU1/bY/pUskUtNqQtNYI4RKVHGrYaEienxz4aLNS6lcwoNnHCgWKq6soxWMKrXQu5+ZG3qQ/qdoUf04DjjU2UM9SZUqT6Mbd0VakqDaPbALL0VnMnbS7ZlPirShs3hpIr23MKPa1E/aaxNLavyZUp/yHv7g9nUKVTSjZaiovdSKf/js1k07z8tyfTeW0cPN02rW6i7uty9Okuin0WGk65AzcJM9BTdIJuYGzZy6hWB0rWmUej23L95DIK0s6+ncVFn0OoZV351LIYyE0XnWGdiyaQ6PeTOC5C5eoMt2MPH7M4Ry9rpD2NGMquPGLa2m7Rjs1DWnycoCFmjzdujiJDridwT+XV1PNahuadnEDxt/yI2UnKxrpKY5HnodT/S1L2uM4hd+xL5kObjanoGULuKPbsulKiymNviEGW9OL6GiYEfl/c4SlvtfoScMUCp7ghmlem2lqoR2ZjxuNzjoB5CM3nxTeLuBvDESTV7QlfSgx5YTM0qjCbjat3C4Bzsdz6I/8TNp0eDUYiheRgt1UGrlGCa0PepL+3MV0o9CTT9A+SRUpVjS/Tpa7WxlHV4b1JvCuMLguOU8rwo0p+eYqiK3Npsujp1FCYjCfYLuXLocvorX5pYLIfyHkNVtAI/tfcxe+xVNhmil51TiAQWIaXe+bRspuUoLy6QeJ+2lF0F/L3fU8RUIJs8mwxwJitsfTw2WGJBRxjnuTdpiCXSyoxEgX0mafItkrRuSWJwledkfIsM+YvusFQE5CIL3y0aIZFAv94RE0S1+dDLrSISrpDCUxNVoEuTChJ51KPVRpslkhqB26TAlDKtSZnQ+lgcVkbaRCtSFZYPCkgv5NVaaBUWnQuxKpdJYiOVskgmdlHc2+I0NHG2Pg9WADlRWNHGa1GAid0ETOh4a1qTEOiLXQx0mdmL8pERqiWsmw7Tp+qE2EfTPb6F1jCkqaxUGkbRstW+CPNl9Pw4mBVhINdcCFI45B0fRWSnCZgLqprrDwfTNpa7zghUozwEc6hOzcx5FicikI9sfQjn4Fkg1CCBg6R+OFxpDCpVvwve8iLfwrR8ve3YKFXD4dEJWjQP0aaPheSkVTZGlO8nVIuH6DdqVLUoVPCQTaEf3sGknWuYUgElpHZhK/kGZcgfext0k44xlqnCuBhXl36MmZBtSeXQ45anfpg3oBRntdg/phf+K8OBoTvMogsL6JxkVuQ+aZD0a6zaQUOBP9F5+H0UrN1Hl3iH/oGAFR25tI1CuD1y7kof7pKTrzV5rEPjeB3KM4+jNtFIlYP4CHGqnk9EyMFno9hP6uTLK1FSXZeffBtb+AEl1H0PUXzeAzVEYdOkJ0oeQ2TLh6g3Lzv2He3TpwecNTvuhL3LWsHmKv1ZBbTiteut8IvuE3yezqNZQ91AoLntTRP4NUjDrfDpIi9ST03B/Fhs8PKd+mZ1F2uHhqAwyoNBAvOQajPSvBrKuBntVf5bNXX4Z/Yndokf0MfjbdA5PmMFIWFSGLt72QG5JAIy/8xpy3T+F2ThpdUvmOSpv7YLJyNiV4f8Zsv2547FtIqYvf4aS9D+DO5jK67NmHahEdYBNeQXv82tBLoxM2ja+khfeq8Hd5D7yKqiLV4kx09XwG09KqacFQGB6Jfgli5Twl+W7BOftfQIgE0RQnfZxq+xgguIakdB/zzRfa4bnwTZqfuIb/tIYgSaWOVJZvrwoq6YXFOyNoIOc9zjV+DpcGE0nk3XPs8XwOu2vOU/DZXow37oPX+7MpW6MTM4J6YERGAdWcb8LYjG6w7y6m8WY8thg8gZFGZcTG5+Hyxy8h0+YqCWXGY3TVe7gkVE5jZxzCE0oDkPuhnCS3W2OK6QA0OVWQuLQkOnu/BzfNG6R19yxvuusZ8LpVlJcWU72lpR3GSvJk3a7AGS3tgdNyUTRh9kMU6D0GPcMkMjvRgndae0DbJJ32P6hHw+JH0FyQRUNK1ZjW/Qi+K+dRYW8h2s5+AmvWFtBMwxQMff8KkvULyX5VMOaofQLxk4XkWbAeH7/9BpuNr1DTkik4N/4HtAcVkUh+N698/Cuc2F9CQTzwG4/0Q2hLGf3M2iRYMfcxVHHXyDkzlnO92gbPT0XT0Uf16PKrDZZ3JZH27GoM9GwD1czz9M29BMelt0Pnxksk++wimuR3gnNzFr1aG4NjTPvgfVA2pb0/hPey34LjmWx60WGHAt0B6PyWTTG8Er7O/QaV4y6TnW4Jv/fsV8gQyaMDQW3VwS8+wKBvAamMU+fKDjwHiSlF9HpZKyekXAPZq2PoVOh1vL2/Bvr2J9FM0wLM2HkTtiWmUvTnVLT83AB/h7Uv3iIMw/60w70VF2jsu50I23vBceUFOujC4bgjryBhzwVKjZBEPYX3YOqUQWMbzvHTnD6A8phLpOK9tNrK6h3o+2SR3TtX7vKo52Ax8TIJLxrk9PKL4OWZaGoU5CPEl8BSLpEMzFMw8+s1WFp2lvrMT6HhJwIwSqbc1O146OZdcPBNpgY5C/T+/QDMTyfTm31i6LHvMSwc9sC7l8fyf/WewdfrqdSyS7j6mMgz6Og/T49OHuAGlj6Ge24Z1L5DHNbtuwSnD0VQY1oKfjidA5f6Ykj54ilk64rA2CGeJth74rroG7DSIYGe7rLA7xK3QKMqgdLrxXBJfTME7Uyko2pxfPPlDpjeeIYS2cjqAZ9OCOfPkoG8H8dv74TCz8mk0zsKuhUvgLNxKDnYn8YuvSwQHvbDaYu8cIN+IXiIR5KBlyVme18DSasoys+WQG4BwYq10TRz/Bl+9dHbENIYQ602etUzrjXByLQ4mi/szX2RagOHyAQ61ycOLX7ZsLMmgKwVvHDXuzzYP+skVVoJcNH+EnA8HUJ7hkZhcM11KHA7RXuyzvHh9wns54WRT659tbjlbbAyiKD709y4wL4mWCMeRQsKR4By21VomniQ/hRboNbTCqhNPUb3j4/CpX7VMHJnANVIpvLH+mph5tsgkrp4oLrnagMUmgVTQIgzxz1tAcXheCU7B7mgzgaQ37CD5i8SRTzYCGXT99F6ixT+68ZmqLp1iHQ/xVTvXNgOChXHSHvXPM5ctxPExQIoTOQtd+NdL1Sf2kh35WN5KfYYXilvG+7hhGrr9Cew1Wg3ScRN4STGPIMvxT5UdKWTs7v9CfIsV1B/mUP13qqPoKq6nubY6XHsv49Q27OVXObc5Vb9GYJ7T21J+gjjJnO/Qdl6GSn2N3JjrokwEBIQyndxCgdiBI9atFiDnTeJfqgV/PGTZx2Bh2hI8ZFgcrcIc1Pwp3/XngiaNr4D2VUnyEr2gSDDrg1mzAsl+0/lgh+3yqF9Rxi1vtsvcApIhtbYCHpkMt/S3P8opGyNpND6FdXFlpYgnRVBig4/qpMr+jmPpWGUecCE/+GozG09FUKnnR14SR8nPjU1kLLN5/E3a8cj5R8msbg/1XGBgTji4S5an1lcda2wGqUnbKaUUS8FrPUP2n52poG605yy8ARqEFlI9cfec4Pp5jQ4zpxSTDdzYzNVmd36XSTfs44rtpdgObE+5PNrPmci8QEcEg+T8Xo9Tnx7M3zf4E/pD6W4gfnFsCw1iFxuvRZI3UqATzrBFG9ULpjzyAfss0Lob/xeweUAc3j0M4Rcv1+1DDAf4Dy/BZPUyS1V4QHW3KOo4fyojq4uezlYzXX6U75WW5XfxC+8Z/8h+uxSbKm33hWj7HbRVvFugZNfBp5etZnUHd04x6/dqF+wnLQnVXIp3lJU/2sh6X8aBUEhk2mwz5wMVvJc1kNFVrLVkz6I5HO31/8F7+Jd1CIXwb3zfQBVCj6UvsiVW6VbCsp3D9F/x/U4U/F4GL//GM06JcwdKt0FJ1f40/i4ZoGyvCnocQHUEp8tyKl+z0VJB9C1wDBBYaET5557nMLcTgjUdqdWrzc9Qm0h2YK0m7f4jKs+FHhVlLtqZ4EXVXbQczcXznB9OAbc3EhXDmRynh2IBxyX00SbD1xZ0A902m1D6/w1oHjpOLpfM5dW9EhAbLgME7vmTtUbPnFz1vfDIZ9tZOiEXKcpwZR1XhT+JpL7dPMcWF7cQ2L9S7iNd/fB9vU+5GugxCn9MwWtFl9SPtwnGDn0nqvwPkAPP1QLLCRdODdxXwo/VCuoCFpWHeG9l1p+/xAYqVzmF9Z5kYeOCWdUNhFvTXQnfHiSu3TIF71bXal/Uh2XrZqDylOW0YCLBJh87sLTxQupTH8GbPwhRvPFLOihhjFYjBJj/o820aN8NYhv6ILOgC10fcZfTlgvH1bNdidbGeQMTU7A1UnbqHDVKe5FlxVo7PYky1JrTjzzH9ewYwe5HxzNmSzy4fKrPGmlzSdBTNn5qqE52yjFSJizdorh9zzaSvUJ07lpi+Xxdfl6ameB3L/StbhFeBWJ7L/JWXjF402JJZS7SQr8diHmGMyntc9mgefajxjQaU5vLNZDCxsCG991pDNlPtS+uQ0v/dYT/ZoIZ53OQpLjRvLeKgzO/CYwG7uZPIVqua1zx8Lagc0Et6O46p3JnP3KzbRNfx1XeWSCwE12IzmNt+AufvXgJ09zJRc9K85A+S//9slKEpl0iEs/NR832DvRg/QSzmbsSfwbvYheojBgUy4G/OYoP9kIRtbdw9ins4bZ4wQssP0Ip+XX0FfN3fBDtwISK9fQ1GIHuDAQAp/fraUzYfoQ1msBgQWuwyw5CmR7u7jzxq70VuwRp2wqy1n/dqE072Lu+Wgp/sbfFdS+KoUL29rE659yIntI5URspyITtqNt8te595a7sKnQinJnf+NGGJ1F1/q5ZM3pgGx/FYoeNqbqZckg3PIUPuAqCm+IgD1TciF00mpi2kegceM+GHl9Ncm2uIChtho0B6+mwXNzwLc2jtOrXEknzk+Ay3MGr3f+XEba3yTg4aYw/tEmB/JOGeQO+kjiL/eF9GLpL85Swh4XhQgox2oUDD45iaVGs4gF6ED+pWx0qjKkUr0SOHuuE5joSnJ+nAlXXqdB9O8VxBcngsYcV5B9uIKWBAbD5QsisP3scrL/sxuWTWbcliNLqV9yJdye1VHtamNPY3Yz0HRDfjwsoKi5ZuCxcCK2fJpHisEmUPB2M/r2mAzvHwEsEY7G4/5TKay2AfhnrfCk1Zms03j4U3cGQsc506ueYhiv4QAe0svoy+OL0BXzgovOdSSjHwlwzVmYW2S3mMZvOwWGQfr89Yb5tGvXcXhx/TGfHjGPJuz2AX+JGbhgkgl5pHjDjpSd+EtFn2JfPQE1zxbw/exI7j4PoXZ9IugsWELfTzZDaLktoJE9lQvXwjuLHs6hZBFt+HIVQl70CC6bWNOKyFww0rHgnS5b0NiZF2DWvZe8kb8xGSslw/qxxrhh0RRSOvQNvBw6YH+YLWX0fAI7m2RoaV1I3o1vYFHMMjheYE2JLU/ADfs5MyOO5PE+HEmR4rjbc0i3vRFYvTp/d/8Muu9RC5sW3ucts/TI1HMEC2p6DGrxQLsPi7CD0ZlwoWYePV8rxEjaHU4mzKEsu0Eo/SoBkw1NyH33AKSJLufqRhrQLYe3kL/1UnX2BB1yniDJln94D44RZqR3QJJdPV4KbakzyCFjFEvijsMkj2lUkSvOToTpwGelSeT9aiS7t+UC92+WOmnJjWa3+oeAG6VP7wLk2LkLN2HKv4n0tEGOHeqJAtcrE0jq02jWkbIQlnmOpb83xrCjC8VZ5n41miOqxKaPegDrVinRuoljWXtjBtS8liHbbCUW/t9odtNUlqb5KLNo2zcQKSJGtbrKLFBtHFMw+od/ql7CwUUe7ITXMjZU0gf7PP3Yt2Q7dn1HN7xaHcz8DzIm3HsfipZEs8i1s9mCqy1g+/4s63Q2YNsCb0OVxEX2YrYW827jIdM7jyV2KbDXVmVg86eE1VmIssD0bMgLus7y17yD9a+SYJ48si/GdyDDNhScM2+yNQU58OLKLvhsf5udsQyFAFs7UBFtZIvDnKHqqQ7wPXeZ4PpYaDUa5GaINLP8b+VceeIlTiSrmWXsVuX2/VXn2FAzG1GqV/1DL6DqjmwLSzy3hbeNmsXPrRv+xvkuv2nmCkF52z3m4DIG902O5gJdHjKlKoYh40TBY1YP0xq/G7fbA2QOPWZNamH4bM5hmK/Vx6aWp+Ae77PgqP+ELfqUh09FSmHdz252L/s6Glyuh/VPHrAXDfX4eVQHvI9pZRlPO1By3iOoTG9gBp+eYo5LL/w3uYZN0/iIN273gYnIdXam6Sca/n4FMtJFbMG4v3gk5TOMmZHFRj0YwuufhyBhaTIz0vqJk2+KsprFUUzzy3ssCZRme1QDWfefJxh0cQx7VbOddW5tx5zJ7pzzrg4m87ye7+15w+2b38VEg+TwmK8hLDDrZaoJs1Etzx3Erj1hs6eswZ1TIqFxQR9TkDuAx/JywOLUY/ZFJRTVC4Zrl/2I6a9OwKTGZthrcZ+Zvs7A0O4HsHGwmR26V4Qa6x7BTNPb7FoYj/Pe98CoFmTv7jTinNqnoB97jfWVd6DEzncwxrWQTSl7iI8jfsANmUvstmknnm4XYSWBSUysoxWtZSTZ0UthrOvJLVzbIsfWPTnCmO0NNPtVzx3O62C7Qm34aOMJoJTdxS65F/Dys5zBb3svKznxmX8bHQSxW5+wX2eUUN41DWZOe8L2PZ2O66AcxlzsYd8eLMKoTQ3wau5DdlN0K4qYdsCUvHZ27cEx9JLtgvzAu2zG8QjcM7cbDjfXMekzyeh88DGE2VWzwRPZOHHdS2ioKmNd26/gtG2foXxEHiuSKkFP139Q9Ps8m3PoCkqairPHoXEs6V4Ozjssy76kn2Rc/Xn8N0IGPA51sF+auZZKYlbw2LGLaX2oqy4x84W++B62BR34jefi4V5LL+svSeSVLxUA8T3sXfdtXs2/FpxCu5ht6F9+8vk2qGvsYEbPVDG69SEstGhhnhrmeOtwNzhrN7DWzFXotr4XRi2vYaC+D9+8fgrpx6+z16+C0KP1HaTsLGIZiaexPuMnTBzKZJ+/h+Go9hHMTv7ccF1C8aCvFKtLD2djdwaim58xeOTdY+cWBnKzA91BT/ohyymcwl3LD4M1Zx6xN6npAq9xmTAw+Ii1jPtZafmrEuy0ulhFZVv1ZbdmmL75PnuOK/n2ioeQerCVTfXK4kmoF15+uMM0RF7z4zY+huX1N5lisAK6J/bBmIoqJtEyHQ0iXkHD9jIW1WGNtxQGoC43l+2vXYIGokJMePN5NhTliEcrxNmD4Fg2qXsRzrm8ChoV2llfjwhEZgfB/ar77MqOJ9zlnhSQ3tfJni+v4JLul4Hx3wfMJCKC05S7A7E7O1hf5xzOtq8TjBxbWZFiiCC8/jHYOTUyi8qd1Vuf9IFYZR17ORv4G6lPocudZ1o/03i/Yy+g9HM5OyvUyVtV90O/WCE7Lv6XX7TjJ5w8fpEduimOjkdGsO8uZ9jreHG8qHkY/MJamGL3fLhingBHtrYz80Iz+LyrAEbOu8eUDXVB9uhNkBxoYxNdRsPT5PuwtL6ZvTr9mottfgL8ljtsb0o2Z9H9HMyd6lj6d1tOwe8FiCXxzA+OC0j1JWz/fI2pbDpW/bb+DXwfuMJkrk3mj4wfgN3OWewl58n3B/+F6JHJzNg/kO/aEgmrpO8yuhkI3uZZoCbezKb95wcBStUQMdjERH5vgxHX2sDxRSOz2bMMojc8AWeL22xkrylMtX4F5y/WshwpRZio9wYe7ahmT4KfcDbvXoPJnmvMcWISd7b2DWxbXsT2nTHj+tkHeFmWzQYNLwvcPX5A4/pUZnihyVJn73lYGFXPFrtdgr3zy2Hpxdtsw/g08PG4C7+L6tnNlHh4NrYX7F7eZJM8QsBx/mtY2I2sznUPrNjbD7fkK9mLXQ4Qcr8fnJOusn/npwznsh+y51xhx3kx8Al8D+/Cs5liXSt3tW4ApG3SWKDvRU557hVIV6lhkituQfrbOrjB1bB3HjwUdD+EVbuQGbuUgqHtK1gmV8VebLoEFzw/wNmya8zySSzcifoEVy6VsBpzf3gm8Qm8WvPZz9T10Ov+EcI+ZbLXf+ZB+5zPoHI5lTnO1AbZRdXAXbzBbH6/hPrUdjjQe5393N8LJT+fgZ7TNda8shXqln8A3yOlLOsWD+ukvsCBlkJ23y0fJO58Af1Nl9lA0lkoogHYq3iRyeSHQMeyAThzIZn9y/WGWQvvQI1xKRtvJ8IWf+6BicnFbG37L4hNfwdRfoXsb9VbaNv5BQSQy1KUHoLG1u9QbJDJ3HbUwQqL73DK5jwbGFkCYiOH/dLuJOYndAFkJTqgqy+Xnb49mh1vfQFWmTmsbeEoNkr7M7iMymRFksKs5O93MHBNZ4F/P8Laqz8Bms+xqgs98Fb4JzzeFM++KjZCVUE3uHRfYKd+qjKfM+/AWvU8i0lUZOcHv8Is4WQ2cZQ0O7f+F+S2JzCZ8SPYMvNBUL8RxYIufQXhrKeQsyiJFSrosc1dH2GeVALLMdNgD9N+wEWPaCZSMJbN7BuE+pzTzEJblukcegVpCyLZc/cZ7N7oL+Dif5od9ZjCLHf+At/5J5nyXC2WEfUOjvYHMV5lLmMh3+BqyHFWstKYzdb4CLkXfdh9PWu2oyKYj7doYJELqqsbrjVWR7++zYzG3xGEtyQLXiy7zQ7aR3GlWv5cWHw9M9Eb4N6XPeT0026xm43T4OSw/9Ayr2Ov/9sCUmICOK9byx6GRUDtrq0wYg6yjqG84f0RCHIelczZ7C5IP4uBHVfK2bXn/RDZlwbrxYrZLhBj1YmXocA5l6UlKbEdQSUweCaDZUjpsH0GNyDv11m2YckM1jSqBu7mRrM1W+axZZG3ofJNMPuz0Yal67fAtarDrAKWskuTH8Dgf/+x8isuzFzlGs8H1zAPERtu2JLxO2uJ5bxt4ER236m83oXMzEIJEubO4ry6ebbpqzWYzSznGnKqmcc9H0jOk4A6kSqWUh8Hs+SMISDzOis6egWmfV8NFw6WszehTWCfewjs95WwF8OzGJ12CqQiCpjnCDFWGBUP2jnZ7F6WEtvolQrVueks8aEOuzw6Ew6fTWKRusbsgGo+KF6MYiOWcqxKqRRapILZvZWLmbTvDbBV8GO2eivZ3qpaOBjrzlyPbGBb6A3f8PU6q7v6kfOSi+R/fqlgh9dMg/LEyuoNT4f3T+xaGCneJGi5Uc4y7wVBU2Acp+l4lT2uSoZuta+c4cpSdj+iDAJHToLRF4vYv6IWyN+3GG5NKWC+cf2w58p28O/NYdN1RNnO9uPQl32RPUtQZGl/QuHohlT2QFOH+Z+MhqD+BDZphjG76n0GMjdHsHxXYCt80qBc7ARz2+nAdNWz4JuFL7tp5cK2/CmE6Y2bmVziFhYYL42ttcUsUcYc6oqq+IqyIvbTeieESs/m+89eYZHfI+Dw2yzLP8sK2UStTEiJ28S9Ts5n/l8qYfq9dm7S8CwbL+wAP7+x0DQpmx2T/gC3mudCk+1F9uHESKaXtwokktJYpbYCuyvsBVGvk1iHpzbLsTwCO0fFMqfGGSxO+gSYDp5itwo5VtdxGl5/9GcVZQ7MeWEsiPjsYSsT1rD1qsnQYb+OVYi6s9u12ug3/TJ71eAL//57x/+YmcPSPRKAlZ7kP43LZnm/CmD6273VTumZ7HBjHYh9V+KmRV5k0cXdMMaggOu6kc4sHg1A+c8RkKOXyn4uFmWljpNBrzGJJW0dw2zFrOHxyTgmkqnJusNWgfqkCNaWMJ3ZeXmAb8hJZp1iycJsfKC34DAbNLVnEwz8Yfbtbez+Txc2c0soCCusZM0B7szG0wxdVgzf9fYMbLeWRC2f84w/NrzPZ13hzy9NY9zhJij/JcsLpaQwYdsXkOMVKlg04RxrpkHIO3aCU8VE5q4pwVJjermRMbEsN0qBtaUqgPqpCLZUVZNN/D0dHI+FsIIiA3YkeT5MWODP+E/D+yRoBQy0eLMeF1t2w2AruHluZOn7VjELp73gaOjAfrVsZXsqFuBZxzMsY00p1DupYVNgIit70gpRhx7wwgsTGHftHfTsXsc/E8Qxl1PCbL62Y9Vyy2j2Y500m5Mzm3s6L5zN+DSWjSkq4Y7bhzCZ+1pM8Owft9MjgGX6GLD3J9XhXq8v8/k4h7kFmoFTuQebp7mQDZguGn7bClZS7MwM560GkxHWbM/MTeyt2jIsnx7JOmOawGHDVFQe7mGPqH5Yyv/is7+EsayBEWxKSiyfEXiKzTSVYzKG5dUGr0+yLTaqbEF/i4A0Aph7tC5buiGcm3/yINsdM51FfevhxtzwZD3Nc9jMw3IQ+34tk79rzQ4YTYVmLzu2Ah3Z3q8CWCAxh6kcdGWteWtwlvhJtuPiCxgImIU940+w020iLOaRFDq4BLLju+XZJZ8yfszW48x7nTprcp3IRygfZAtCprCB3RIC4atezEnPmIk+W8M9/bWBudXOZVcViauwdGLHHKzZjCmi8PK9gCXV27Mp07XB96YBu3V1FQvK2oiqdw+xuOuDcNIXMHvjAXZupyxL/qKMxQN72brvE9gRh3v8m/wdTNJuKmuYuZE/sXAzk1YwY46azVXb/ixnmvst2ZidOly5xwIG/81n8e7ZnMgUUyazbTFzqf7KfRKdyHTeO7Nv09wx4MJ/zP6eGKvLskXrlW6s+oYyk/yug9oXNjApmsz4rR/5Tn4lq3tryubeOs1fCLNjHYUCNlCcUb3gjAU7ELWAafk/FAzkTWXxOovZ+qEwTjp1PAs/sJT1aO3EtBMrmd+gLAu0XI7BKsvYYlMtdixrBi5+PszoMjPY0ANRnGQHLGPVPBbicJnHcGPmc2s+CzmhwP/xmcgsj9mxgP4JgpNP5Vl6nSPjd/mhnc98Nv+gEhPu24yatwUsa7Mek7wBuE5sFlu83oyJnBqHh3/ps/z/gC092Mb7m6sxpXYbpnPyPz7yvBRbFeDA5mcH47xIYxZgoMIS/vhi/rlpLN50KrO5vhIjg7WZyeBspmAyHb1OKrHjfxjT/iaCM9aLsc0bbFnMz3gU/avF6udPYOsPhuK4x+NZgZ4B+/bCGx/fH4713hw2tGUxXvYQZieirNjRkkyc0CnHnOZpsJ0bk7Dzmjj7KWTIxNxCUNHkJ/Di5qyq5yq2jhBijn6a7JFuNtoZ9MOchYbs3shavPyiFxZIabEykWt8255ZzOXWdrq/RBjfTJ3HdB5tpH/aOvh0qoCpX15O+pXDPWM1j0la2dDA6lXoXTGLfT1sTikD7pj4w5A9FzGgRxP2YJPtROZsoklzfvuihJQSe6inSG+1jmDnlZHsW6EEdX48hmM6XoDUl0GUqDmOtzUQdsx6jiM1jmO4cjK0+zTiwKwjmHbTB3Sdi1FgfgAD/cyhVOoMNln74AVxcXj7xQ+fih/AT/8quFxZW/Tk/DHNyZfrC1VDX5MwzHivwXUlfuQPPfjJzz1jzOpve1NGqi5yF83Y0WgPulJni5pbTNmWGWvoz1MPFBIyYse/Lib3n0dQb4weW9NoSY5dJzBsmirbYDODZI+fwhX3pZlEog5N8wjHrVN/DeuNMi3ViMQvfzqg/Ys07bociUmhV8DERJjcb0TgqMVhYP3iDfpPDsOFesvhe28z/ucQgklZivDTrQQlpgRhRXMJ5zgtEd/q++P8TxO4ojO+KD7GHwVnFau8u6zQvPYEjhIfwctNU0S9zgkYP8uYTTl6iPxK7LB2kzF79NCLLLK80aTOkDkabaDKgyF4Z1CXlX13JHYhFk83j2cl0xi1vz6L5gpSzGapCaWvSUOxv1/h/H96JNSXjns8W2GNliqJDVzAtdW50PlHlnqjLqCMWTBcOypCneHnMaZ2ESzNfYsn3iRjTpcYLH3bhPniZ/Dtjkhu/4IiXNEUg2a2mwRrquOwPDgCp5Uq8xNi9uK2EeE44HaBLy/ksOOBNbpLmrLRy4+RWrAPztsyk/lxe+i8SyRq8fqsY/YmunwuDb0G1Bn/3YmaVHJRW1KOCbwZxSQWo5LKXxihbELHjcpRsuAh/K6eRKYVFajoUAK3fo0n37Tr+MQwAm7MkaGYNxW4xn8FbFcUolc7yjH9uzy8qX+OIoYluFjnPDdYWo9+h/Jx/IvTgt21uWijloXrzKbyH9qi8MSadPw17yb/ct8uDL/gjQuqzdj5Ucdp9e4YvJMwgwWe2U19lIVCPnosSGYDzRx3DX9uHM+uXnegf2W1aJ4gwT76WVL3/kY09O6Hq3HTKdW9FfkjdZBAWnTC6h66Xk+D0/6KFLO+A8Pn+YLDSnGqL7uHL1RnQsPgF1yh1IaFZj3cEdGH6Ox2FyPsZ3ANnlUY3VWHB/Lzqj3eZOBUk2pcpJ/Hu9w6jfOyY7FJ3IxdzT1KhUfzULfLkH0z2kFvOhH5j9ps7CwXivRqxcSdCqzj40LKK+/G9Bxh5iszi4rinmPoxR5IKdIjy89vsPHSVTgdMJ4C177HwoBoSBSRJlnhj2h1wBX+nhtCr7IPmMuUISDtGY6d0I8fMzO59M0N2PXrJY6b4CH4sr8I3+1/jB+vr+cDFc/hmI+FeGzWDDZb8yDdK7iFN7Mns22cG1nP60K3GlW2eNlSCj77GmfkSLEYNwE5uX/BHxu+gIWSIV3c9hujft+F+B3q9DFfiM7UZ8HM0XK07pYIdcUEgv9pETr/eQS9amSA9u9w/I8RpLthkLtU24aTI0TI991qrvTBdXxl9g8FjdHV44ouoczHO9hdq8c6YQ+Ffn6Mm+3V2YwPrtS7/xPGjZRn9+4vIpGaIQz/JcQ2t5tRw9SRpHalFxa769LMrRJUs7QCsi4qUSdJkbFF/DC9iJMWyFJO+1ZYce8LamSOplmimjDmQxcKnR9N+/qKuNlvarD5uQy1OQQJUp/nI/N7NvwmFWb1zoNaHL6i97fRzEx4Ob3bKkzKO0SYWjTQhAxxOmH5Ar7Pnk7WUjJkq1YDJjbqNKtAnt5qpIFKvSxphSrRo5qD8CVUiO5vUqYx48zgaMVLDOodT8r2T7l2lybcnjGeMiqncDPEyvFM5HccvWsUu/plHU3+IExRP/7ADLXFpCMhQV/W9EHe+zmkfluGno4gMGibTCWcwnCUafD//38fclamA0pHIFdLkjZVqdFx57kQHvATh6Q0yX7lAHfUoRd1K7Vo+d1VXN/Fm7gsUYTOWvWD5i9n2rdKnBY7dcCYSiv6ZCBNvzZdgxGTjElxvjwddkyCmT4TKTdiLBlGe0PSsJkxv6dKnuNnQkKlGF3M0iSB/DMuMHMAZf106FPZAk42vRO/9ouT/V6E4rV2FMBL0sp/2SCjYEEVVrL0Uj8cbugY0NeoMXSarYfKGnVaGDCOxrdpwI1PcvRp+P10lOdkwkdQfo0WjeTEONv3/bgkQ4rGvBxO/gxGgnhpUpm4H8Z+NCGTKllqucPBuSA9em46hhr8ReG3rgq5Fo+lP2siOfsBaQpCVbpkNE3Q0/oPkzRkaXwogzXOc6h1gQylbFGCg98MyGX4XL+OuFXDd1pXy9HfPG1urMpwDSsVKXF+ZLWzvQSlXBlNE/XLublxRiS+TIb89aw4n+uTaPZfaYo2Vais2KdKqg9kadaZ1fwph9FkfEuOdBeoVXtd1aMpq2UoXcOJL3ujTuHa0tS1q553cVCkNY/lSdGjk78Xr06eUrI0Q1oZJWzGkmygAiVPtsVqBSX6H2jrpBM= + + + + + + + + + + + + + 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 + + diff --git a/template/Conte69.L.midthickness.4k_fs_LR.surf.gii b/template/Conte69.L.midthickness.4k_fs_LR.surf.gii new file mode 100644 index 0000000..d52b69f --- /dev/null +++ b/template/Conte69.L.midthickness.4k_fs_LR.surf.gii @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 + 0 0 0 1 + + + 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 + + + + + + + + + + + + + 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 + + diff --git a/template/Conte69.R.inflated.4k_fs_LR.surf.gii b/template/Conte69.R.inflated.4k_fs_LR.surf.gii new file mode 100644 index 0000000..f97334d --- /dev/null +++ b/template/Conte69.R.inflated.4k_fs_LR.surf.gii @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 + 0 0 0 1 + + + eJwUm3c4UO8bxu2995a9KpGExHkfI6SlEg0USSqloUn21rBJfUsUFSKhxXnepBQNSlFpUBklFZL58/v3XOc657nec9/PfX/+OGJbBekHUR2qzG9DHrw5jc+aBOmCrBOw8GUTub3mGjlaqADSyd/xo5MJ9AT4Atj03PvT+4iuUS1h+aP+kefX+Wn/K1647fKAiXz0CDZ4TbPtJ9Rp/hp9MBx7gxqhitjUtoFab51PUUMZbAod0Ha1Ig2sziExm5KZ21IXWY5Hm+pMTI2g2HMv9bEVoe/mKFDp03pEbkKMikoI0k1+4sQrR5Jyxv/C9RqDzKJoGTpo9QzTHOoZkQl56v7hKn6pzGXC7ytTu4k4jDf2Y5bbqVPPA0twpb0kk/xbg/5eOcFqaPra7r2oRS88WcXGF2rXvU3RpmIml2zXWCmwnfI6tEnsFqMdlsS+StOh4a6aZL1PCxsmp0uNbP3JlRhx3HFcl56OSSf95xfi9jO61Kn4JiGlPvjbVpd6XGwjvoYxSD106MGVf8l+x1z8+kGL7r8iDClXytCxU4PuHFcCM+UH+O6OAJ1jMJdOKwuSeUO8tJRY0MiaDKbbioOuiAXKXBC3vf5zANNLXKn1SX+27O0bVDrlTuuuDrMFkoj2Wj408KwFRrtexfag7fTLiz1ofu4MDkXupYZ3TqF3Twb+XniU1pwpwEuGeehoGEFXr7uBJluuopJKFF3scQ+P77uHFy9G0aDvD7BIvRkLd0TRbUteoBO8wmV9kTRwzWecfPsC9edE0kmDUdzeQdH+Szh1qeOnVo+vYJVuKLU2lqalR5Ox3vsAzZutRqXy3TGtfTs1HNWnke6z6Ii6GCglfEZpgVl0qcJHsv/NIDqPqtJtGvnkwTJOamqiSIsqXMjhDiF6pEyCnll7nZG6L00dB7kp96pDdT0vlWj01m94atdLNmefOp3Mv4/tdCH6PtWgeaEX8L93hzG7VZOuq4pBx2s5WPJeizY+CcCR3Bvo6K1LC+55ofGCJyjeZUjDRPzRu/UT+vDPoxtFd+OWqHG0sDKjhXQXni0Vob315jR0uw8OlKrQ3ccWUrftrtgvOYcKPTGnjRkz3ztzMV3hs4BG/tDBkdplVITTjDq4CNP9Vho0B14w3JWi1PyCFJ0jlMs8C5SgXzq5qM0/N0b/iTR1P9KNqxT+2S66JU8T1SiqJc23zcpTpiUT53DAg7vO+oEa5V4cgjzPP9XJvZhFv1vOwQnfJeyJdxp0JX3IBkams8s2adLDmu/rAtyaWbkWTcr3XZ/5Ws2Pfw9q0f+CO5jRjtkoYa1N17ybQ57eWIMZ77Wpl/0ucuVRKN5R1aE8ZpnEOToNK1q16XrRKjLRfxmNf2vR6P1tZODvHfQ4oEn3fvlLjmY/w3AeAep9zIhualNkbvgI0WWOqlS2kN+26aAo7fwoSsfKo+paN0nSeLVxrCqRY9dkydKn+u0o2LqFXe2lSK1lqvCPSCa7UVaFKnGkYmDxHfZWlirVKFqPY1xf2BGiRoMrJFHjuRAKlKrRvvYM9vUyfeRYqU7Xig3X/nFfijG2s+iwrA9zqXIvNjpq0JGUPuY/2xN4X0GTrr1pQi6GXMTQI5p02XAQObyqBhct1aTUK4t4uzdhepgGLb5wiwhbf0CzaU5qJW9OF4kN1BWn89B4S316uWs/u9RSgEoKK9IdvCXs5Ysi9H2jAA071Ma+lpeky7f9RPFtY6zQAxmq1vYE2WlR3GEmT3WdL+PjBeq4P0SB7g+PxJ8/TTFSQpHGcCxGlUtL8dN/ijRE+Bcr2huIwWFK9Kf4FtbKOh6vFSrT/Pc7bSRMz+LIaxX64tFB5pDBDRxrUaX2PL+YNolGbNmuRstrF5Dnwp2YE6pG1eIPkY7Nv5Dz6G98lM3Q5Or7bFjeKAr1mtI1ylxodY6D5l7XooK+ytiZyUvlF0rTyCBjnO0uRI0ectIqVQanpMSovcMHLF68AjcfkqCtq27jIw5v9KmWpD53M5D670XuLVJ0x+qteMIgFjMEpemKAS0M58jCoyPSVPPXU3aR6VX00ZSl39GSFQ5BPOUvR89QZduxbW/wVI48Nbsdx9Q1DWB0pgJ9wMtNVjZw0rmj7/DMRRfaekILBXZ1I/9Ta7rmuR0OnhhA14VzaHfJRlxe+Q8t7FSoad9u3DrKSTU9haiY/3G88JmXitX+xP05sfh2zYwObz7GWZonsDBJkBY1XcIqjWyUUxCi81Vj8JTcJayLE6J/NrjilpU1uNVYmOrYSaNXTzO2GYnQaaVbrI7rF/x6TJT2DcuwVr8n0ElUnOYIlNlevSVI/2k1oP/P1XTDWR/cNusZOkc6UEY8HM3qOzB+wQLqbpiMnjzfsD5dixoczMA3b3/hVh1JuvtdHt598g87v0xgdvxFDFw7hTYWb/Cj1VUs/zuNNYduYtXfm7jq2zQ+3J+BVhoPUChwGpMO7sE9lW/wZdI0zvlgiYuDfyKzl4MKu/Jg1xNu+v0tJ3UwymEpK07HUspx7baN9EdqEqpM38Erf1zpoYZcPNL0CCULF1Gb/EuIF17hUwMD6vC1DPM2fkTXeXL0TWA18hz7hg1+3JR3Ry32x/VhUudnXPiwAd9q9eFwKmJ/TAsexm8YOP8iPnv/GdcqfMGWxXH4X+hffHKhC98oeeKTA/x0zpJufLdGCz8VSFOnf/lYR/xo9WA+xq0sRfboahpfUo5Lfe+gwnuGaufcwy3FD3Hd0jm0Zf1DtOp/jkJlirQ8/xn+d+MVmnfw0b7Tr7HhzitsuN2H1mMf0e7XC3Ruf4xdjT/wjXMTri8qwdmC03i1vwFXQyo+VRai+eX38fHHIGzrkKXZ78/ir8s76OC7m2j2ogjnBXrSgT31KH28EmfPd6AbVV9gjF8tBlrPo2Y271BkWT1Wv1OmK9W+4luOBxg/IUDH0n5ichSLm9/8xOilY3hvWQ3qDz5HU14eSutLsXt+JZ77KEKHjl7Cr4nZ6LpTnj4pvog79gdT9Yr7uGbjNTT+sInu/dWCHkGV2K7uRHkvfcI9d2+h5QsTOs/3J/Zuv41MvQp9VDOOOSdvYtJrQZqRw033FF/FRoHfGHhVkH4KPYe2u1vx8teZ3Pt4CgvXVuH3W4pUWKgcm0T209t3m/Hgn5s4ucWbek92YmZFDTYUO9G9E4Po8KwayVUTek6ak0YqV6DkSpWZ0QXoWofL2LBMkN4NF6f3PmXhyheDWLVUjlp3x+Bo7QvEJlVqOFyH7Md99ET3a7zSVYcblnnRVtfvyO13F2vUltBP/RxUu6cSe8Tn0QU8wjTcvBjDs5XoiufSNEM9Bzls+GlAjjLVWRCDMTn9M17Uol4/HqPK+r3098QXvFpTj1elN9KI5ElMZW+j62176lkrRLPzS9D87By6ulSWBmw4i1ur5Ol3UKcVJQmYHcpNz7fp0fvvmvDXkT1Uf+0//G3HosQFT/psniDlGL+ORd2EWh+XpQ0v/8M/8w3pwINZVKIxGS3XStOcHkOa7H4f8/SC6Mlmfrq9uhy9d7hTPjsZyldyDvdVLabfI2fRNtEkDOjWpnN4Z9MFFWXYsDmQxqpLz3S6ma5mtooWuKhTIhyDhhwL6bN4I1oWnY5Twn70/Cw1+kviCAbzOtO2eYY0Drbj763raUSvPq0TEKbPTklT/q9biMVNETrqNIW7j8eQv+vEKHxrRcddOaQpSJyWuF3Bu0+vkeOMOF37MhL5PetI/XJRWhawCAPrnpP3DwTp3PpeNofnE5m7i5e2vmDYnB+DxH4VJ233uGgb8IsDbt6ewEe7bzCmQUJQqzuGbVXqhG2SgbITY6iz0p+URahDa+EEnj2SSa6oG8LqgSn8qnqLPIswgwojDhpg3UE+XLCBxdocNH/FP9Lg5QTje6aw10QY1gWuAqXYMVT4qgB5KzwB1w1hwmsduBTnDWLxQ7hX1BpilNZBSNEYPjnkBAVOSyBccQpLMteCwdIF8FpuGiXGtsCnJxrQYzmFtbP3wA0XUVi+fgLb8o5BxopBMjAzZ0xrFBgHPiCGE/+Q2y0ebKJzSX3kOD6LTYLcaz7kx95plF6aAvqG4mT5cy66JyYF+hZEMd2P+WiYYTK0ln+vjdwmTIXnJYDMz0x2/SoJOvBfNAQnCqGbkixVtg6FtG/2KOOkSLtvB8FLnqMofVSFmoMXrKKZeClWje5a7wovjpbiwSPqFG5bwsjnesxNFaPHZGbeN3sFmR8iQR24XqNj9UHyZ0SSVv0pRt/ak2TtFSl6secYWolcJLbiUrRwhyEurrhJAr6K0yu9NSzXpYfEfrcIffLgZB0qtpPMZQJ0Y7gnM1XYR4aW8dC81HGGU2KSeGhxUs4he7LHTQDSD07hLolYwhUiBS7qk2ieXkxOR6rA0uhJDEltIudNdcH86hTGLB8gZ6OMIe7mNKaL8sPrKAsw+jmNqe9k4ZMxgYGyKbQs1ALllc6w0GIcZ4fOA9dzKyEzQZLeMv6EAaaWpGSPNPVbch31dm8hb2tk6LyQcCybG0POKspSndU6eC4nm/TZy1Dtz3ns4fyrpEZJio4cPmbzxq+WTL2Y0bNDIZPI8YK4fRKiE8lqxLywi1z/yEdjbgSQj0dHyDtvbrqgP5uY3uSBg085qPise+QdvxiIlU5h5aOP5OKEHPg2TKJaCScExKqDpt0UFkhJgRDqQb7jNJZt1IB5b4yBp2kamXBjSH2zELhuTGHmaWv4edUWlhAZajH3HiqbahGQlqMdTgmoWOJKFqrKU966Obj/8n5SZilPTYty2dT+FPLCWo6uLfOz/e51gVTKytDWXY+Z/upKktIrQScnF5KQ1ockVkCUfi2PItsPdRDRLgE6on+FxAV/J2J/eejDB8/IudRJ4veAk6rkDhHSyweaG6eRy1gEPArE4Mn5SfxnrQopqnIg+nESlefOgbjTquDOPY3ZnYvgipkOiORNo8dqZxhQnwO+8+XpuFM2zi4RJW/eKNDXvXbY/dOcOKUr0qWPK9n8Bi8SOtOfOYeMbEWEo4iargLt4WtjZDNm/PxZlla4OJLbL4vJyeKZzhZzgnzzvktoiRgt/lNNvBqbSaq9EHV9/4HIP35PXnzlpVxO3PAq6Dt5asxFObjkQFB/jNR7TqPagB4sZbkhjZnE/FoLCE8UgunYSbxv5gRyNyVhft0UngZ32BCsCPOSlajk562YIfyLafysTMuC+1jLuRokc74KjVv8szbvuBMJOK1MDeXqmcx5u4nplCJNKXAkKqcSyfoQeWogmkZEMY+E8crQdh+WcBaVEOVGcTqc0U9s3t0l8XzCNOO4ELxxfUycrfmorb8aKAW0kZ0aXNR/lwmo8H8mHM+m0HGjHZyVn/FA6QQafFoNQkvHyXK5SZzVvAW2C/DCWV41+oNXGaeiGhj5X2rUT06FvdgpRJwfqVG3q+lM/Mg8svCaKrW7upDEda4l3ZeVKat2irTxHSbLaxVoWAeS+PvJxP6PDJ3Q+0UeLzpD7nhI0DwFcfhDL5OCmW658ZQ2FOdXkCkuPjqHyxK48u+S15c5actSV0gcbSCz70+ioYEXuFS0kIGWcaQuQZC94yNxVNOg5ebn2VciuczQeY0ZhlJkGia+MM7CGlT1khKx/SdH7h9VpwPZMeRruwVZzq1KP12/QyL615HUS4o0yf8n0fXeRy4FyNKe9RIQ4B9DRj0l6OInesAsPUmmWSE6m9MG/MeziAXDS9V/uIF21nky6wEH/bPRH1SOXiHxRhPYw3MIlhdWkZEQLTrrzeXaAZXVjFWFFp3P/ZXxe3udGWvWpNP220nf199M1odZ1MaplOB+eRI2okoPqHwlz0tNSJWyEk39KgqmlUvI1XWylKbowbEHniQDxanQR1uQ6Q0gh28KUqvb7qAveZC8mGH5k/92QNHOKPL0xxQmex0Ho8gUYjatTbkhkTG+2GTbo6xDL3jakJo925liPm1aYnCG3P1dxpQ81KDmum1kY1AXsy9IjZZ08sOqQT7iJqREoUILCirlSeE1GVrgbAMDndrkUuQM73isAyXzecSUV4AaXQiCA5rWpHBmr2/7FwEHDy0lVn069Ot+MbLmcWHt8SkdOsVEE8Whetvfddo00hhJYLcL83yuJt1WMEn01p9i9m9Uo4bRKpAmWs50bVKkC8ESTuc8YqbXSdPpnDXAWnUwBmkiVFw9CDL+62NMKnhpJUbC+X3TjF6oLj21150Iaquxy8N0aXpPEQlJWlL3hleHzpP8RiJrtGz/k9Ska1Kl4M6Rt7bTFaqUT90EuouVGRRSoKmpy6H90kKmcpUkbXYPhMJmF6biryANGYkAr34fhr9bl2pdOEE0vuSw70t0aUtgMyk3WcWufqdNhZP4YLY6D+sZqEFjtuiC0fv8utGdKvRshgM8zPGq+yEqR09s9gUzj0V17/LFqLTacWDEjOrOq+vRmyXlJJ3pZQ/G61KVP79IR+NdllprU81sRXitfo79aD6LfhW2gtbhE+zSJCVaE+kJxqPJrNg+aXpC7yCIGqSyRrJ61OjkS7J/RBU7x3Vo+Xxh+IRCOKWuRR13zoZ5DhyYdkCNFsgtgwmrSXaFnAJNdtoJxf7cGJWvSxcs/kuaW51wckSbjmqrQsMjS5x7TINePmUDqr4L8KSOCn350QuUtlrh2HUdOnRFBPL3HMCk7VqUx28u7FLYiSZL1Knr9hUwLbAbN5toU8tZqpAql4oeDhr07HYb6NE5jSKqmrQrZjZoFF3Bfgl+eldKj4bf3kHOc/HQA0cM6G2vkyS4l4PmLZhN9yYWk3uZE/jJxJgGcdaTG99GUdfadCZ7Osn6+hH8J7iAcvT8IydPD2OQ50I6/kIINuwbwl4+SyrDqQhml36jlrAVNduvB9WVP/GYrxU9KmYOKn79eHrcko5dsYfK7C+44qYFPaa2GnaYdCJPsDk1mL8ZJOReoZnKfGoxo+l8j8d4sWQu3SFyFDTW1CKXjAHdzRUFUF8+05s16fy0OKjNLcTW1UozKJkE9ytz8cVdSTq6NQUaVuXj3zwu+if9JAxNVaJh4DAGBp2ED2UPcafIF/z4NQXaedrRTL0V37onAX7+hjFD91AvIB70V//BvIoC3I4xsF1wHHdIxmNwRRQI7ZrGqRA3dDGIhJQMDlrVIom3f4aDsAcHZT/ksfjsONRwTOHbL/9qBRaGgarqP8znimHcHUPBNuQ3vouSIL28ocDj2o9jkZtJpGooaK//ghKauSTm/TEYkP6M3S33Cd+ho2A88AlrQn+QsmWHgHdvN1J/YTAT3geF0T2YFaIOVg92wI0lAlSoU5pabk8m4j95qNBvWToafIlgIietF1Wk9WoseSU5iQteq9Bbxe1ktesoXn8/i0Zs+UNcnw3httPa1OQtH3hr/caMBD2asEcG7G//RLc0A3ooWBO6dH7gimuGVBbnQYFBH2q8N6T+822hKPMrmmkZ0vS8ZWC46DMuP6RPxR9vgJPN7zCgXYf+i9oOLG8bnnPWpF7RIbDkSTMWNahSGYsIENWpx0+LFOjc3bGgf+wWZpyTpA7XE6HYoRTNNISoUmMKjM8wQu+8aVxJLhC5uXw02oSLroq5Q/SXcdEVhI/mPnpJSnkm8dECYXo77gcJYEYw012CmppzQ1j5IBp9lqFLRSWgf9N3POCmQIV3qIKNVi8uDlGimowRsPe/4g1vZZq90RK+DHTjeTNlWpS0BB6bd+FsyRmf566Fh+qfsE5UgTq5+0KvSid+sZal4/F7oPp2O8ZelqTffhwD3ZxWfE1Eqb5SNOw8/AR39PDT6tF4MFuNeCydk157mQyzdYSp5+c2PKJzkziP89Ez2ztxZNYzoq/LRVs1e5G5+o3cXj2GqUeGMeLwNFlg8QtlZzqlQ70wrObvw2eveGmeuwJwMF/wsIsgHY/RAe93n/HyLGHKqzUfvDw/4/ezwnTuTwaGxz7jcVFhmlCxHCw+daFYoSC9ZLsRemy6ZxifnwoEbIddXl2IrTx06/AB0M/9iMKhnHTkZTic9X2LVc/G8LBiLLiatOL6hkF8l5IIZbHC1Hjvdbw39ZAcc+Cj7hO30UD2E5ltwEG/b3qE/oGjhJEfwvHrbeiWzA+Fjb1Iy7swEaRhy8Bn5N/zA+dWqoMf50f0cv+DPjWzwW3HR8ybHsbl3FaQy92FKa4juHnjElgX/hVTuobQN28NzK/oxQU6v7Hv3GZwr+5HpdUDWGQSBD8e9WNDZC/Gqx4BZeNeDMrqwoITkbBLvwt7Ld8hd2AcfFERorEJybh5SzvBeG66WDIXVw0MEtvWUQxLL8aD/txwnuc7rqqqwWQfMXAR7sLnUg9wrbQSsLYf8Ny2ZnxxRBd6tT9ivV4LelvOhyTTbhx2fYnb5JkZ9uzFlrSX6DjpCiacP1FkRyveee4JQXp/0E7+BXb7+YPqsmGUaWpG+7C9wHVzCL+faUSt16EQED+IywLq0VksGqCZjxpmrsWn/L0E8qZwudcBLHozRexXDqKjXBIO/RaE8PIvqB6Tg16CsnDw20ecXFmAuz/MAs1Xn9D84FXkVpgDe6u+Im9rGX4+bAmVAT/QR7oCOTkdwUljCPddqMCjBW6wNu8fpjeW44XF3nCWaxJfNZZhVcoOUCiaxEWd1zBuyUFIYccwU78YrwhFgNVmLqq4SgZHov+SA8PD6LfeHEsX8UHbqj78t9Qd1/2RgOz0btx5eA/KuqvAcfUvaDoUgXHy+uBu2ocH7sbjIK8ZfN75CyP1UrBpDgOpjaPonHYSR3NdoeHtFHK7nsJrpp6gvJWTHsw7iZzVW0F6gpN6PkvBj6+CIbedg5qZJuGFBaHQx0wgv34hK7OCG5oNB3Gffy+bzyEGmlm96DkghYHqirBkRy/K+Bjhg1htaNMYwHlji3GF+Dx4vWQYldcvxXPti6C2ZAKHTdfgGR4nyN/CSfVVPHF2zBrod+em4RXr0VZrM5QOcFOH857Id2IXNHRy0S2Z7vhux2EYiBzBg2uC657wikDz4p94aBOwjrPloW3WAK61OcOu2a4JBSK/8Ql5zHpdmQMq/42iiv8A26VmCTpZ0/htKQ86TNpDYCEXbRERRRuXVeARwEP3Skrh8OtNMPGKh3bxyOCEZyBEl3PT5/nSaHMsBAoGhzDv8DrGllsOPJt+Y75ykW2HvwbIXxhGrqDPtf/lzAYLu/EZjh6om9W+EEqrOehNdjG7crcdxFpw0/cng9lnISvAvJiHNp9MZJ80b4CgZzy09VAGOzQ3AHiPcVObkVzWdul+MBD+i4nf/jIxDbNA48oojt+sZkKXzgYZzUmM04tgbuUthBQNTtq+woDRlLEDbn1uejOnwfbtx+XgoM9Dv+ousj3/Zz2QHm4q1Kxg80l8Gxx15KKZdG/t7r694DOTp3mfgJi/NALT5VM45KdFwi4vBAUdTuoSKUDq3O1gx39clGZ2M7c0VsAdKW56ikFGT3gDfF/CRTsjLjFstz9k6M9wt3oao7ttLzS+n0L6LJpw/TUH528cdIFFIHHxtAOrDk6aZ7mCCMevgDW3OKlJnwW5kLoBdOw56HkvPbLQYxu87hrDCgcl4pe9F4KTOCif+WUSJA2gqcBJE5dnkbkzMxw5ykGrHyYQgVsbIIBOYMqrULKN3Qa9IcPYfmwX8R3fC20RHHR910Oy768r/CbTGPe5mgwnrodTumP4uvUKsVi0DYq3/0Iu4QukqGEvLDo2hc0lX0m85Tr4rP4PPYxeky/9fsCk/8TTOU9IpkYwxB76hyE8XHDRxQdMOQaxzXKEvN29C3S4fqPzdgmYfXAbFC5Iw8EDM2fafBJsstJwUc8nvLTuFJhLnkaB7kYU5zgFm1UTseRwJR6tOgErdh7D2F8XMCM1GTjyNqBfxWlMa02A2ND5uN4/Ejc+jIUtn3nwWvJWVLgSBYq251lNefsZz4bDyc8Vddo31TFD9Sg4ackxa4R/stHn9oNeei2TezSdHZkz45c3UkR0U02dUKAfjEXaEEtXHmar03oIXuZHOPmqmUrRFXDBMZpscZcld+bZgcaqLNLk40rsVywEWHCVtF06TpZPz2hDq5bsTswiObka8EUdyZOLVcTlhjZY+pURoSxKJH1MQLwri/wtbyYHpqyhxj2ElB9uI4cyHWEweQE53fKOVO1eBuGzuhhpvs/ExGsV8JpZMj3cPSRnpnMm8SXWRUYPEk7FNfAtIp3dcHaCnB5aC2/7frM/1PlgT4cndGxURaffYjDY4Q1lMZZodlMeDkz5w+ekNRh0XR1S/+yCzbB/xpu64BawDzxJChbcNQL/oBAQzMzHPmdjsHoWAmJ+NTjpYAJu3/aDjn4zToybgHL/Hljp9AGvPDMBuY5AEHpQiHfX9OLPjFNQY3YJ5e48w7Kjp+B4eD7236tBf8+TsIHNQbHMAjzukwJbRJJxaX4qjnYnAlfXPnyTF4GBJB6OByzBsEc+eIKNge+XpVBZYzH2hEfBpEUJq0AUMM8vAlKcrtflc3Sxg7ZhsHGbIZMmdIKdc/EQzFJpZpyyqup+7gqGO4FKpO3NhC0eCABtdUeyet5NpujfJjj2ayd5sUiejIS6gdSBBOKQ6ka+FDuCT2ceKVgRQxrkF0FlXxkZsv6PaE0Yg11hDX6c344xH0/C/bk1yFddh1KLToJAcgXaDhdhwL0UeHPkMnoHpONYQxLccM/CN5wRGHA3AcKWReL8jg14sDcOJv6sxAXPFiBHYCyEV8jgrx5xbJSLAa2zBezrzhZ2PDcKXg1sqvs9Es7SlAiIrljOvN6TXjc1NxTed75l5kXyM3xGB8BJWZ08vFHDpMMOePvPiWjdUCJ7eXzg77Hd5OGoJ8k3XgNDjYmEvZZE3PY4Qc61s+RBcBFheRbDzpTHqMDTiDVjKVA07xFqi5ahhXMK6D6rw6WKWbhNLxlMzpVjx51wnDWYCC+5zuHjQXfM+ZYALqticJfaXNyikgAls1fikmg+/LcjHnoui6FQQC1bGhcHfgZprFipJ/uXLxZUxSprFflU63bGR0Gg7WamzlmTWVJ2HErCOpjveygTpBACzbmKpMhYnWz+GQhejxky28eHLJD3htce/uTJ9Cnyxns1bHwXQ0ZOXCcuek6wf3EHegVXYf/pJLg+/RInvuaiQ1QS8Eo04guRCNztnQQautXoYuGGg05JUCRyHi3KddCYmbl/azSKyv5lNTSTYJeSCx75UsAuLU+E+A98GOOoxe48lQDiWbHsvTmrbKI3xIEST0Lt7vnLmYKXUeD715lZatfCKKiHwYEaltH31iYbX+8Fvl/85HajH0n56g9hXbOJDqSTJas2gHbJKmKwoIr0F60E57Sv+KvyP1zkmwDs6/e4c3MkRu1PhCCLpxjruxx7IpIgVPAWDn9SQdPNyaC1+j90ntPJcvcmw41PEbjqeSxr/SUZVrXZ4dn7WHdDLBksQriwJ+U/24MiiTAYGs82PI5mbP+LBd5kt7qR+h4moi0CVq/iZc6HGJHPsw/Bl+HTTElnAGHHd8Arxw7mvnEmSfLxAeEeCXKx9BaZsHQHV66fuOFzNF58EQfdE5/xxntX/C2cCKZBz7FfTRYPcCdDbVcNxr+pZz02p0BH5Fn0uOPKBg2kgH9LGMrZ1dTu3JcCTZsZ1HitwkheT4J1X7lx3f5iZllQPMzuymWfT3CTOdUzetD9Vxc4ZU5ePjsK+4M5bRO37CFXXHdDNv8chm3PJic3+8LqgDMMd9tdIrXME/Q//kGFM8tx8FEs2K/7gux5CQx7mQB8Vc+R3itjN9gkw5X4anyxS5xd/V8KJJAz2B+63Fa1NgWWvTuCRfa7mdc7kkFdi8HFo63MrpgEqI8UwmXHFMhm8RiYSr7FCpk5k/zrYdBttp7dKnOcbJsKhiVOl+tuJJ8jpjlbYbfaYlutPiQTAjM5/msYpxUksG84BvrivuCdnnx2i38C9Cx5hnL1d+vudiTBg64ZZvf9abutJxkmbbMx9f55JnZDMrj3h6C9JCfJUEgE2ziC3qYmZJteLIz3SeNqxy3EsSEclu97z7pvTCJ3BA7Aq4pzbGFnEZFwDACHww6s0JPH5HTXRiB3hvGN6Dk2WD0GTqd2ocKzw3X7LseD7v0naPVyLqPSlwjR7tcx9lQDI3E8CRKfpuEHFwUybp0IageDMVvAlRhpxUEeC9j47Tg55R8Ji6JVcfvDXPKe8zAsms2BIrSa+CzZCU8tm9haqzdER9sHUhf9wVdRJnVHHKPBR/0DJixzZ/LZOLC7/ACXan5lku4kwK3QYvS9MIdktSQA770UnL/Cn6z8EQcHtgfiAZOTJMowGnavtMPQ3KskqzsUPJx08caiRhKGwVB+WhyXze0lx9y2wjzbAawU3MtEnY6Cxn+vsc1sinH6GQvRqvcwKtSWeGfHgzH/Bcy9EkrGTOPhnnYcPnM6S/bWxYBBny8GVdwhN2MigLPVHs/RDnJc7RAoTc9F1macyEzvgJbvX1HDUoDsnBUF2zqf4g/DZWTAJRayrt1AjhXxZH1iHMQp5KCIZTH5czYWKm0j0eVxI4GSKLB6shn/nekjmjMZVDTsjCG6fKAotw8mNnViYtk6UtEVCXx1D9Bi20nCdTUGtndfRYGECiLtHgtH7NNRx+YVMX0ZDecXRKD32F/SuCcCLMf90eCMKPxyPgyVJ9qQaUsn89Mj4YR4HZbY3yKDVdEwIV6ErfXvyfXCaHjjlI7pxpwwGhEJUdwxuLBEGpK3h8J42As8F1hLcp5FgEfEXSy40kUGFaMg2rwYTV7xwHeTSFjnlYPbNBVgXUsYRJHnyDmvhwQ7hENKWC32mPCDxExfMuQpQy9uZfAqDIWnNS1oMioAUrFHYZ5XPfpcUgGueUfAlPcNel5VBY8t++HpzG7bliVIsy+kQLz2Zjy8VZBK/k4Cw2YrpJaCtL45AZ5ZSWGtriB1dY2DVK/nbMQSQQpbooFj20H2yQ1BSn+EQ9LrS3UfA4Xo9ezDoKQYb9voIkzfN+0GwffOjJe8CG057gcL5P5j8rJF6NC/dXCkq5WZvD1z/YYLKL3hIdHnRehql8VwdUiLRMeL0PL986DI0oWU54nQYSEdSLQ/REpYEfr9nTIs4cwk+fki9NhqWbAau07O84lQqUkJKEh5Qvq+ClHtWlFYEdZNfnsL0hxbIdjF00R2fMkkZvcl4cfaR+TfSDjJjBaCwbIHJBTdic9rHii1f0QGTxuR7iYu+Oj/ggyE8ZGgF7xgyNlJeLVfM8djReBkfx/x3X6ZsTglA0cfDpPXN9cyBRwq4Fo8Tuaqmti+5tOApdFj5ORaFdY2RhP0e/6Qhrk32cLRWbBbup+ovxZDmduq4CjURQz1HDBHSwm6ZTvJNZ5QDNssD62f3xHeyRwUfiYLy0c6Sb17Jc4vkAGv3C6imdWMZbVScMiwj+QXfkGlI+KQ9e0X2a8ygZt6hUA0OwLVLEbxd/EJWO61Cbm4/6JBczKsFFmAzxtHsOFAIqicE0LJtX+RsyIO5t27x3KmjeL5fdHAeriy5zaO4bdz4aCXLVoXv20C988/BD0uv2xPWE2hb+ku6DsXwbBrp/F942ZI2F3LrNs9jS/a18A+/hFG5sYUPl6/BNod5Elr5SROdluCTdlCojFnEqXnzYGdbt7Ebe8kvtTShLvb48hflSl8Xa4IW7ovkH3eU6gBMhBhc49sfDWJbzQkYYv+G/K7ZgIlKsXgFRzHNQmduFfuJDyvXoNz979HO5MUKOjXw9BX7/F7UyIE9P5mo+w+oH5fHJgVpLMaWz6h4cFoUN3ZWdf5sAsz1oeDUXG0bdPAFzTnPwj83/2Yn/ANpz7tgOq5t5nla75heIg3eBaOMhtmfcUn+m7geU6BeBh1Y/ohezhhtIAc2/gZV0+Zg/fkWvI09xP6HDWE2wlhJNv4Mx75pw6fSrJIV3AXqsYoQFRNBXm6qxt718qA9Imn5Fh/N3IrScFVwf3Ya/wQ1etPwCJZO1SmDdg2kQy3lCRwauoh3q1IhBC/GjbJ4zHufxkHOt81WD/LZuRyiYZSISVbhV/P8PDocWhesYVxqX+BrxoPwMLkB0yzeAseUg8En0X8pCj7ORo4bAIjV10yr7oZR6+ugOCfhIyvf4z9bwjo3N5ELt56iOLbzcB2fhi59LYBXU304f6ZNLJ24CFu3KQGl3ZeI/f/NOLAtDwolT0kjS1P8MQLGeBw9MaBqxVYm5oCjs56CP8q0IFzpuf4vGUHRyrxfn8C/Nq9gr0jVoOJs+Og9FK2TcXOO9h1IQqcdQMZLYla3LkzDCZTXjP2fHW4//0+mG6XI5V191Dh6TYYnLAi6etuI9/F9dDe40Hazt/ETR2uwCezj/T9uo7HJm1A7nEsia4swZ/lJsB3L5NETVzDt506IOZ2lVTUlqJ3swp0qtST8YxyfO4jDyH/GPzFfQE9wpIgs5ALfe9fwDDlRNDnjGW/cBegxuJ48AgOql1jdRnnXImB+6FbmfPbrmDQ/EiITO5m4uEapoUdhQl+HeJ1+ypuqNkD+pIrSd/+InTb4QeaU3uJtdBF1JBbBxppccTjQR5uYZzh4+M0omedhf4HF8HjkPMkqCcNVbbNhfEF18mn2jSUFtKC1yX15MmmTHQtUYKILiX8dPE0jl6JB06hMvZFeiqKrYiDwsCcOvNd6ZgWHwOmeoSpr8hEO/ko+JH2iUnZm40mUcfB/KURmXs8G3tqQ2ClgTfZ9SEDr4/tgMKiaPI56RR+L/CGDLsMsi45Afe5uQHuzCcTeyKxJNUetMdKyKzqw6g0ZA7DnrdJA7MfrWYbgjrfYxL/+QAuJOpwbvw9e3dtFNq4x4DU21ms85Zo5H4UBaWLRm2DnWPQ90sE7EpvZPrCYzCzOwwuvtYlrdujUSPwEPzI2EKWHYnAxD+74fzjRFJ2+xBu2r8V3jP/kdMPAlHKzRM05MpI2voNmDnXFQyv3iH7IpZhxDkbYCcayAIRewxcaALmO1rJP2GCudXawK19hB08th1tr0fAIQUl2+a8HZi1+TgYG19krvwXiHf/HIEv9vLE2m8rbr9+ALZGeJCwtA2oYrwbMk4mkGNGy7GPdxv4JOWTlic2uHJiI/xIrSIiP+eiheMqAJ0G0mw3C2v224NXbQsxfyODQ7oL4dK6TlJ1RgwfTRhAjYFe3aK9zph07SjITwUzjsMueMZ5ho8ucJG+rY4o2bQH6u84EMeZHJ3TFgjVwxFEytQADQT8YM3AWbLuogwWTG6ABwurSOUbDlwa4Abeyx6T6xyf2CGrJSCwsYNcqnrEWrdbgcvFb2RH/i1W4OMc8Fg7l8l8q43WqftgLPYdgwXaqLx5Jwh2GZNmZRW0DdkK4auDyNX7QugX5QXS8umkaeVXdrHuOpg6XEp2xd5gM/4uh7iFDeTYx1i27D8H0HnbQb7oLmePDFqBtNR3sqLbgM2SMgblGGSCvw2xW/oDwVNehaSODrBBhZvBY9ydeJu9Ztt4PGFPdxxxDppJ5jcrwa4yn6BTMHv+uhN4/LpDhh7ysgvVGDic0ko+bpxT54rm0MDfS5oU42zu+s6GpzskiVxqGsu3Y+aZW+xIqno8myLiDv9VhZDAe+tZ/4ylYGqeQVRe87IhXAB2paVkOddobWevBYzHPSTap07Y3m80Buf9H4htlQqTZaULLrKLiMj3s3X239xhwz1f4mDkUneu2Bky58YTu/dL7m7xWgz/tp0npCzNVnG1Kfzad4t889Fmsubpg0JMC8kaP87k7VSDDm8v4jBblgnYsxTO/TxOVu43ZvwuW4OHcDqpNl3HTFbNhXuHrxJVtQTm/HxNsMyrJ2ktpQznpBwIzbBI5fBd5j97W3CJPUHcmxoYbzdjCNp3gRyQbWNOc8+Cau8aErbnBzOgIQWn/5wi4+WypOa1KWSf/Y8YaioSC3VNSFepIHN3zCK+LyWBw7eA1PY4E486XXAMuUH2eCwjpQWyoPalhhheOEr6k5Vn9icP+M8XoSsPj5N7qSJQOypBV2R0EfU2SWDjZWnDwANSaS8DW+IVKblSQNJEZCAlToXCzQhS3SIJs1TVKC2wJhanxSBdSY0OKHxnJEAYQpJUqDxjwwRcEoCiYkU6Ou9W3cdZ/PDqjiy93XeH5aJ8sGRQgrqOaeFWL37wXipMKx9uwyu3BGBXDg8NHE/DymwhKJX+h78/lKNciwgY3f6CZsea8cRacTDmeYZBDV+RV1MK+DfexL7ySdxmIguOp3PQW0yQzlmvABtHD6PrP0mancYDTW+n8WkkN5zaJAoB5gP4++U0+TgiCzfG3mLV82Gy47QqiFQ34tt3PSQhQAsMhqpRQrGd5FXpwvJTlzGsqIFEjepCQ30Oio2VE5552lATdhIjes6QgEk1CDwWj59Xx5DABQpQlBWFrVabyNLjEjCkeBwnS43JRyIA3EtDsCaMi7R5TJNpwUAUNCtlVuMPImC5DkOlbZkOzXck32kRPuDYbpso9oQ8N5RFOLGozlTzDnErfsL6tHOwyF9CbO5Ys5Ix9uz94xcI/gZbE8lINtBZGvqlDHE6T5kOqAjD20ZBXLZdleb58sJ/q5Ct/acyc6Y8QFWc2HnzFOnTcUGY0U9dYaMU3SchBSd+Vdk+rRKiD2uVQPMmwxzz4qRjJRrgFhfDcGX+wBNLtMFWNJu5Yt6GNiGzIKQyiVmpzeJc5Zm8/2XBxDJl+FhNCMRQwXbFvQs4+/AwmQgRYqcj0jF+/UvSHnaWvUdicEHLDcLr8Jn1SduKdvezyKXYCfY7nxU+3hRDNvC1s+GZwiiTEEGupe5m3e0es6uLE8mHFTdspC5fZAdviQLvR256euUgmXdUBgq0BGiAYiuZm68AIgYitM+7nBTOVgKDo+J0wjOFzApSBId8SVp/fBXJF5AHxlGKKmsKEoEWaYhzkaTPJqMYiyQJaGoSo6f8U2qhQhRcRIVpN2Sw94KF4dwSPvryiAQONgjCtfMcdIPiWuw8IwBDukPolpWE84f5YcWvbvzecgXn/uCHduNW7Jh8iI45AnAlthYjuLrQQ04IVHov4aumcRTwFgHf28lYryJIV24XB9urm/GjiDRd+04W/vs2jJf/dJH315WhoG0SRz0oWTutBjUHuejBzWdJwqQ6XFTmpStdgkiDuDr47+GjJks0SXK9CsjO56NX5l9nFj1UhHOePPRN5lHb9efkoJWTk2bf38SWnJSGy9dGsTxwnM26KAFc/77j5QrA382iYCb8AYPuRmKkhDBk/HyKcvH5eCJXALSr7+LqSBaFa/jg0N4itCl/hzUPecGXpCKa/UUdVT4Qc9iPzWP8VOA9Pyy0Y9BwrTQNd1WF8tou7P7wijQpaULz4n50UCgnCle0oWLLL/RuSSBWS3Vg1HkYXfnsiYOPNviuG8H+A/2MkrcmXFk4hKbluow/qoPP5wGcVOFkd79SgacBX5FpfM5OzjCA2EAHtsTMxWOuclCV3ISbOPcic1YK3s/0xtkCObigTgy+tl3G0/OqEYeFwG9OKo4WtGJSMT9c+3cAlV8N4OvlvGCe6ICP4nlo8HYe+FMjjfj/fwmOaAGtfoHvFRvIXy09kGx7g7+d/yOdf/WhhKMT9ZbtIkprDGBT2EdUf6BMxrP04cWvD8hcymI45PTAwPAdHq/+dY9DXAe+877CXdtz2ZBUTdDc+RjHWVk0TVWHHre7eLN9PdaMKUNa5xUU707BG8/lwXpvJo4aXMNcO2momH0cJaIfYUWRGPAMLcNrZ7pQfqcQpJ5QQssZForn4YfZIU3su5nd7X5eD1rWsPjuRiXh5DCEepWHuOxnMrkpZgSv7J5gxJklpBqMYKVjE7p19TFKg4bAPdmIPk1STJSlIYRa12Nqhx4bKmUAuS9uo2R8PyvvqgddkSV4KHsxut/UBm33PHSzDEc3Kw3Asjj8NHkOjX+qgFagD57yv4NrZBVAxncOtpM2nMMvDV17f7Kbjg/iq7li4Lk1gr23k5dqzJzhgaTrWHzvAkn/YADymtVo/Xsf4TMwhOGlt9F6uSa5ttEQHl29hXDmAhNfbQjjc2/iwAmexXuVjMC+7hrKO55h1xgYAYfpebSyVsBDuwzhWehJnIWb8OlpffDqPYDlJScwOVYH+g85ouyVqyiyUwOc90ph6bkG3HlaBfa+rGK18z+ixyp58LwoxM6/OYbvJfRg9PZFdAlPIcJRutC8+Qr+7XUl72brAue5a6ja+o8JOaELH6SuYMoSMyagRg9Cb+dj+Vpe9t5qAzifnolclTP7674hfHwVg3eez0eXtUbgL7oFm/UOoFKKIeQ3meBgYDamO+jDxcR/bOXkDTxSqA1ezglsrtVTDOSZBVVrjOqczHpwZJEmONzIxSStYDJwZBZ0xV/AByo6JPmhOhTdy0cH3VLG9+As+PfrLLq2ydmu9p3xmmYaqt+JYh35daDqZCS6vRTAyEI9OMi7HimHCxqHGcBnez2MKovEsiEDQK0P7OGl51CjVh9o0BrW/XENdnzQgTfrWmxwugXNViiDXEc6ij93JKVXFSC1+gxa3P/HmD+Th96zZ/DSYTvm5nMF2GmUjiX+z+t41yhDeHwMjuZQ9n6FGqxq98Hkm5p4cobhl+yZjSvWbMLfX7RhuOwzG2SXgP2+ujDY68KKnspHD2tdyMxdbjv46w6mS0mDdssptNiqQhpqxSF4dxauml3MmNaLweHSDLw/YGz7eVIcvtkn4SKevWxJlxR8iAnGSKUpdrxGDtK/2WBwhRXKX1aC74+50PH8boz6qQpvgyLZeJFTaDWlDjUOqjYZFZdRSlgIws1TMPJAN+MiwAeNTmm4O92MudvBAxvyTuIRn8d1Djp8UGkUiXP8brGc1oJQZ+6BcyyVEFxFYWuPGlp0r8RT+yTh2/nbbMFQOO7rk4FHybV1W0SzUfMYB4SWxuPbiVRmne9fMn8wBesteGzP+A6R2y7xSDi2sw0vRoiq+R40Nf3NXhCcJBuv2eBSBVOcf5YLOqU5sWX1VnxUxwcr/PaxwUGJ+EjnB1F4FIEmpySYK7WfyHu1WLxqWFeX3vaeqJWG4utPV9m+jg/kVKwnvsiQwANPvpA3SjrYv94RVYt+kILEJtbG7xCGSLUTiyVBmLMtwab13BPyNuQAPrnmwAbFNJDRdVtR16uNff7qIbH+aYvfGzTR16CZlFwTRvd16/DR6gfk96MVGNNcWPej/ibJtXPH4pdx7LBGGfl1zhHDzYbYMwFlZGOaJj52mYfiVyvISJ0envutytrPuUD03s9Bh7QLbNPDbHI7XR2/6PDg/vYLRJ9ngC39vo59oXSSRFwbYQ+X3mQv9KSRSv5DbL1aLLtmhgfr62qYw28bWXvro8RHcoBJKODCjuMBRCBYloxq6ONdeS8iomFFjB+7YeOe9eTqgm3k97vj+LhsPXmWcoK4XcxEnm8bSOnCEjI5cQ1rLDaSoMNPydnvFOOVNxCO3kFSVfUGc0c8SOZBQYiZyYt+Y3dybIcimA9x0XtmbiQtQQ9kl4jTl9MuxNVsPpicUaEdhYuJGp81WPcaUvH7esTjLgHDFku6plyAVPDZg8BlJ+rwuJ6xOA+wLsmdiuzzZWp8F8OtzC20+22S7dhbMwjg3knXK0iQvEv1cNqFFzUWLibn+etgvZ8YFsX4k3a7GjigrIB3reOI1vnrYBisjm9V80iydxE07dJEjkUVpLLmP7hnpIF88x+R/c8yQbRJDaNPvCVCN1NguaIGjob2krUJ0aC7fy5+7/9JHvwKgRwnZ3xTOECyb/uBa/tOTLn7jXDYroJlKnEYubSTzM1aBL9CTqHayEvyQEQbYj6dwAvrmoj9emHYphiF6VH3ST7bRXqyfdDhyC2yqaeMPBg3QxnNUqKpeJiYvhTC/uJ8EsCrQKocn7NbpR8wPlcfg0WHPXJebWDO9TyB+HmJWKT0jPG3bIK24gp0Kutk1oc/gfsP2vGuxyATdrYRnL2n0Gl0nEnd1QCaHeI0Pn+MCe9HEAlRo9s6ehnNBXdhQbghfZn1hGETboL/4/l0kchFJteoFF4+sqIaA36MDVwCv60MHe8etDXvOAs92Q40IEzA5shAOpT2uFBW5W7dcHgSjCxeSSP6jVjO0ghYMGctTT28mpXbshs6wz1poMhK1qd8Axhd3kQNf+ixF/46QUvRFjoyv73OSMcC5hZtp2I+aUSihSG5eZOsDY0hXHH+ZJhHCSfbDxDvI7HEZ9ISH57yJ6cvnyFGzzfh+YqNxM++knD8jMAcO3fS9uI5CQjPQJF/K8mVnEHCtawYZzUvJetkBeFp3D2Me+dIij8pwp//WnBfFpA5aAAflHsxhtqQXe0LwQ85aEaKJVkRbAdnFcRo/CNjYizjCgWnVKiYhhrJTFwFy1uNqCRyEf6i1aBovoj6f7vLcC39H8PVHQ5UG8WVrcwUCckWDQ0tcc+hCGlJEopKhZZU0hKRFUKSWSirCMnmvsdI2qVCSkNFqSSlT6XPf/d57nOf+77n/OZqtHyyjOS/ruI+Gi/HiGZ7Mv9P1XTePnPc6OZKLntS4V1zPJjrTGGzxkTDr8wCmH56PjsTHAh2xk3g37CKbZzgDcYXX8NVw51sZ/cmmP78DwxHBTH/utUwhJIY3nGWPbm1FCTHqKDS2Sy27IcxtEpPw0q5SmaaPBcG3IxxRfUDVp80ExpUrFDxSzfrsjWA4/vXos2XUTTOSgtaXjhj/w0Zur9aAaoVNmPcUTWKNh7mJghtxcTEmfTfyjJuasJmFNTkqN3CjPuU4oLKarb0On1w8a17a/FGzXpyWpEDR1TuA6e4jHE6ifAl4jNcPLCBFU2NAJE2Yby8cCfLTzoGbm3yuFven7WobYPvHRo4QzucnQxfDTH9s3D+swTmdR3gbB+gfn4O27ppLhguXYkvv1ez6XHToN/QGTfeeMLu1OrC9U/bULitj0mu1IA1b3ejib8ovQJF0Hjkg2IlCrTn3mgYSj2AcVt1yb6AcTcs92NR7nxilbacSNIeTDllQWofxle9nrUdVWTtyGBMMUS7C+LiK3sY55EB2SXyeOTrEWYbHQey9Vq4pCWQ6W0MhvWeRqj5K5QJSnmDmtdSjL0Rw3rjHKH92FpccC2NXZlnCfV2m3FxYiGr/r4INAN2Y6ZTE1tXOgce+B9C981v2aih6bDI2x8XfxKg+/O0wIoFoOxqWRLaIQtZuYGYP0+dgs91chqGgXi4fhYtavPnnOecwNlSSE/O9pg49Prhs7kryGNaFWTKqKKVUwjb0XgFIg7PRDv/cNb8IwVC9iG2O0cy/4ooWHFjDfYsimVrgwJAsn1kv+uSWUXULvBZ5Y0hK/LYz5vOMPPiMXy1hWdQvRoyjE6izd12ppJgBeuaTmG75n9M640p+MqG4eDnsXSzUx8ydcPROV+FuAPicF8xHPMFp1NsQz6nVhqK5VqLqTe1yZQVBOPTrVY0QbgRvMfPQ5OdZ1h5QSnkpi1D2/IYtqU5BxYe2YD7159lplHJsMXRC/veJbHmvBEu5BzGwF3ZrK4nGDa4nsSMmkoGWsdB6mwoTp39hO3etQ9y3E+P4Oc7G9W3Fdb9jcKLzeK0/M0KcIk8g2CuRPwOfXhuEINeqlNp3t5erv/SGdTNmE8ncm043cgo3OS1hFTsH8IkRVusqj7DMs/Ug+HARrx3J5b1/isF9aE9eNT9PPujfgUebvBH0weZLOjSRRhtcQrrJEtZ1asEMP0Zgatu3mdDc89A9bozaOT+mVFRCGyIjUOP5yL0cI0vdHfH4+7ZCrRCehU83JeA0Tna1FOnCDn9CTh4eA49zc/g4NM5jDzK0aufHTCD3DBBOYzp3HgI6hf3YZR7NPto0wg1dSewkktmOS6V4DEYguUl+ez6pkKw1o3C9RE3WZtgNqQtjMOb696x1LIU6LdKwLpfo+lPehQYRyXhKO9x9GXnfpijkooXOtXpbclCsCxMw10OM2m/1RvuMZ+GRyoX0ZRL70DIbz8K0RHm7vUcHjcHoGpbOPM//QBWLg/D1to05pPTAF3CZzChuZx1NleARks8pp1uZT7d+WBbm4Te/f8x79Q0KPmchgqPJGmNeBhI7crA12kqdDDGAV79u4QGrvq0eEgSvk/KwuYGI9K5+gE8KgPx9oltrC/1BVzLCMcl20PZIt9HcO9bDH7TvcSOZzRC16HzeHdbA7PIL4fB2Wn44u8H9uFDDlgaZuI4V2FqK4+DUyeyUbl9PHne2A1vv+XhkcOaZL9CG6RG5+OfopkkV/kKLj+NwNLBDezDrydgWByHr7+EsfBvt+BhdxKS0xWWVj7Cr03p+F70Abu4/CoEqGXjxVffmUj4ebg94yrumjyGdJ4eBcmdhXi6XYnUjsyHd1uvY76vLr2Pfwghf89ixvUN7OW7BtCtT8FZ16JY8O8yCO3JxISXxeyjUy7s2ZKHkVta2a69CbBvdiEmNf9m7xv94Y3RDTwRIEXf7iKkyVXgklMq9FW4GuxGpeHMv65M7fQ1kC69jCeUz7JUlg5qHVfR4FE544/GwJ6N17Gv4gWTXX8YBidXoPwoAXokYw4292rQSUCGnktchrZnWbg3bjt7Wz+SG4MKMLYzgdnkhMKxSzfwZ38Vi/60E2zGVOOo2k62S3kxVO8lPOAhQHYfIyHM6xqeHufJupb7g6ZQGQrlnWdhqc7w+FsNHqivYqlyhlDQW49We14yUc29IBdUhrcqtjHLr7aQ/bQW7bhz7MNeTbi8tBF1V5azkzHm4HqvFnU3bWTKr5QA4xqxaVwMu+48Hqr6G9DpyRrW0hLMpq6aQMrzItClzIe979GkatFQDF6xgdVpzKGl+4NQLcWMlXiakUjgCWyRn8kkjqwmqaZDGCWrzkrUXSnAaRc2GyqytkW7KdpqExYESbHLH46Qjd8KvBAjwL4sDyIpYWO0n9zKJ+yJoL262riay+SXiMTR8V1SeHGTE/9GKJne1nyC0SdH8bnTMyn+eCUcXBVZOzDlCt2zjwQn7/m1hX7FZKdiDcpz9WrlvpTTLDlBKD6mXxvuVEvHBU5xEtvH1eaV1hGu1TVt+lBWs/FbI32Ypc3fEhWhLX1GNGHE9/pvjaLq8SMZymQ6BMf/x06ec6KARn2Q//KZNb7dSfPPzgCVf6/YuedH6WjgArARbWHX3IJpSagF2LY0sd6zp4kzt4eIeYxlVcSRfoobvJxQwwqeJdHTHg+QOVjDTn1Ip9+Td4Hd9VomM5xDA292gPuhGnZ7WiEJKG2AH49LWciyMrKU4kBzXS4Tb62hc8uUIMsznnU711Ou/XNu7Ak/djG0iV6eO8SpOHJMf/ptmpHqbzrnsQDTVLtD/+k+rl2bepj/suQ25ev78mc/RPNOq5pIUaiuxiskju9QrifhD8u5lwdP81u/1lBg9xvOwDCAr+soo6vzjUB9lB9/9XMheVSdgNcrQ/iPlrkkWnMF8rWz+WlL0qljwXNYY9XK21sl0tgsYVTVF2VDWTH0AFVwd9lkNts3nJSXzcbvZ2cxz4STdH+MBeZ0mzKlsMMUY+KAMUes2O2jO+n3Y3dc8G0t83vuQpt7vTEhaQszqRrx2G9HsKbhABu9jKOCOwEolBTEBC/PJO3qYPS1iGbZUlPolX0YWpeIsgk6TfRwzHhu7AYh5mZVR7/+u83Nm/yDbyqqpt6dU2HZnle8mV0pdd32gX/nW3lbg2v0eHIGrDn3gVf1yqZNBvdhyncRJud7gdQN/kJr1BS2vSiBHvmPx7Yti5nMqjMUOU0fbVzXsuKlYfTkngmaeG9jZfaBdFlwJQ5m+7CEI77kV+mCL6qPs4jKHbRD1RP/yw9izw440rkz+9HTO4LtfWhFs/ljuHpGHIvtWEiYHIjxGclsSdZUMos+hZaGwEafa6ShR1e5hE9GrP4wo76CkZy7TIcV3qqknlk7IOq0Ehu2LaEa4WS4v0GRDYrl07mPDRCwS5MdN7lMuue+Qek+Y3bCJZV25Unh2kmObEl1PKWGaCBGHmBPdkZR01kjLH8YzEKXhJChuwXeMY5iasInyL5nLSaMZILbkvto3hI3jN+ayLbHbaZj7V74akca21u+hkStD+DW55nMOMSMjKccx8LuXPZs9GwapkB8VrmP7aU6Oh0+Bt5ddWNzimuoV3M9xAWuYEOi5ZQzPg4qPpkxn0NFFPy0CnJlLFicYh7Nv/gear6vZ90WGSSiJoZ7FA6yQt8ketY7CXWMwpnXm1h6JjIdF7YnMP0DEXRYwQQ9VDNYp0AQNU+wwXU6ucy60o9spjug6mA+OzPGk5wK3dC9ooh9Hb2BLs32wvj5N5h3thXdn78fT70rZ/v+LKCqz0cR50axnoJa8rY3hS7nkyyNKuiybQhEvdzPcuVLqOTfNXj2fDd7tTWfzFgbqG46zDI+X6bupwJokBnGZLTS6EHSOGwIT2Tft52jKxc08dLBHFbREEVyNbPRT6+EbZkcQvvHAq6YUs3iHPzpQIUNNggQe9eyhxzl1mHx13omVriJ1kVvwgftjWySxUryvrIDK7c1scXxptQW743p4y6wj+sq6OntnTCtOI7VHSihvSIXoKzlNFuZU0AF7k3gEhjFmtqyafWyr9BWdp6N8bhIcRni2FWUza42nKdR9RMxfKiUzVOMIUlRXbQPr2cHHMIo/8octDa5y74cCqD8AVM8svoRM/vtQ5unWKF9cwvLv7+FRJLWoGPcE5a71466m5zQbssTlvXSjDo6tqL/yzxm0FtMiYtCIX5+OusdzCcTl0IoEr/Apgvl0PmqZ9AlkcU+GKXTpsEhsNxynRkNJNIcZUnc51fHEvfF0vjnSlh+5gELqQ2nk+N0UKazjb3vCCTTibMwmBvxwhsHyXOmMXrHvmbXI7eReOESrCl9zeSt19HkH7a4cvUr1tK7lLynOaDvtyIm8uYKhY0/C4FbrzLnO1lkr1cJcpqF7H3DRXpr/xJyLlSxYvkkmu37FwLW3WbB32PpgcNY9PzUyty9I8jYWxE7X7xhLRknSdtLA72zu9lO20P0MXIaCsp/YnXTd9BMvXm4WeATeya0njLDONT8r5v96rCkiq5lGLehlBVcvkRhJxPh7qdS1rX9AiWK1cCETYwZuCSSdv0LeJl2nyVXxtKXXf9BT8ML1hodQfeGxPDDqW5W8/UkvZoij46dX5ihhB9t91VF31PfWNLgDlphrov7g74xuRfrSeqeIZps/MoUny+jOstFmDCmiq3ZlEozGhPhs0Ud8/+XQM3BlfD39QN29HMM3ZrXCsYpnWzR7AiSifsGR90+seG2kzTVTghf+vSzFVP8aLqENMbu/MEctTyoUGcihiX8YBUyjlT4SR3n531nvkpWROEG+Fqijt1TOEcKeufgReN9tjT1DC2cXwIyQp1MwCOcvB7dhw9fPzGpvScpa2w3NP33nc0rPURWccPwwXGQvevcQT9fieOu/EF2sHk9xf4Zh1eUfrKP9cvowgMVDOi7w5SeRtG869EwENbBHOeF0fu6K/Cn8CMbKgsk3Z2N8HjgO9vZ7ksbN7+E6d8H2bHFO8ilcwDiPH+xPo31NH2MMO7WGGRN3y3Ja6Y0Hi9pZYeiQkgtKQTqVbpZTEYAXXyUAQ9e9bP4wwfp2sFquPhgkLUv3E4aCU/geeQvdn2KA9nP6IVfhwZZx1ULel0qgNuLuxjIn6A8b38Qm/uNBbjvJ7uOJHh5apBplrsTvC8B9Ve/2Khye/ox7x5cE/7FxH4soa33u2Bo21fWs9ybrp3bB57Rg2zWsS2U/2wEq6OHWOsDO7pqcA1Ek/9ji1vMyGRXE+QY/2K/FrmSsqMneC7/ww6braZY9RjA6j+s1B7IyvIKaF78x0LabSk9ZjtsvyxAkaEmtMQ9Gk6uFaSw1YtIcHgHXHzhzq2yqaeB/hh+neAgp+tYQ0nv9Pk3efMh9FkpCbwWNC084AFh+oU0uOQ81xl9Ch5uzyXPqIkw/0YcXNyVQX72W2GeZhok6CZTnXwclL3NhtKcOErtzAfjd0XgOvk0KYnUwVHpaki6FkS/5j6Co/cb4WHrEQpNfwkT8u5D4PldtPJ9D3T5PwO7yE3kv2AAPu16CS6Fq8kk5w9cCuyCueOWUJTIKHS90AOzH8yjPunRePb2Z8j5OpUilEfj0N5vkL9Zle6uG43iFj/g1go5kroqiLOivLh9DxlVmKfXLrT8yb2Rr6K/cNr07ZrZEP23hLzuJXB7uI0wPquA1ksqjHS44xDzPZsaRLaD4YZwmFl5kQqTEuHOxLNQIpJIsQGVMMClwnnJGGr51gJlDlnQOS6M2jd+gI1wDV6aB9DosgGIzi+DUqf9tMzwHxSv42FMtDulSArhdNWbMFPegQZLRJH/fgfefl5GcpMk8HX9Qyiab0xWHRIYee0JLBCZQVGWEngS26Bynjo1OYqjYfwLUM8cT4PzxfFgjwsnEFlDOinSXFBENxclXE7O2Re4kHZtCDQqprwdspA5YTnsErpK8ec3gdPb7ZA58zIZVp8H0Z9HYXtSKqX21oLq01Pw3654Oo+doPZfFMgJRdJFz5+gXXMO/uQHUYG6ICoapcGVhYeJAsRw6fLL0JfnSW+3jsWap1fA8rwTlayVxpkXikD4+3I6vUgWHY+WQnydKTmVyqLFyLy+TZpFZbdk0Blq4fY7TXJVkcYfv+sgvEOBjB9I4nQrG05negVBI+O2LW7hVPnrdP2pHJSpTYACyQI65OAA0UlGcPRJNrWlxkE5Zwu2zRfpzP5qMPHeBKtbz1P63ddwL2M3VFucIbGdw9CuexQoIoSWzhbHC19OwiUxf0oJl8aeKeGQ0rCbBHaNQ58FZ6BZfxM5vRiProPxIKC8ikrNFPDhSJYqOYkkfkwBfy+/AOM959D6HROwyzoTIhq16eN6eRzD5cCFjRMpd64c9j6by6knXyfuiiZsuF3BuagXUEyhI9gcGA3RW3PI82k0vDNWga6xGXTdpQxupc+EsPokut/3EuJOmEJMcCwdkhfAqdetYX9JGG07Pxalwu3hcccJqnoqj7lKrjBQ7U3FGROxSMQLZC65ka2RMnKTD4I5rqEWDxWsYf4Qudmcoo+rYLtVEET8mEvDbsrYdzAUkgd0aNhQCY/tjYQNJkpkGqqAkolynNrHq1SbtQdUMs5zkTbZFLwoDhJ3P+Uyd6eTecsN4N8JgMf7JNLreg7e3jKw1iWO5or/AwFOGRTfh1OloRSWampD5N8ACnuuiBejZoCWnw/5B05Gk5AF8ObjZjqjpIGdBubQZm5Hwtc18U2WLUw2W0K+3Zo4WsgBhAqNqPmVBhaM7FHjqC7NLZyC0qIe0B6lRPMbVHHXmnzT2ysuk0F8OhgpO3J1QRdo0sIasKhI5fQPJNL80pcw7iBxfHYsbVokgBWxHdyc5+Ek2yqNiy5945QgkBJjlDH82mh41+tDN05qoZqYJNRIbSGNV1PRTFgRJiywo2/B0zC2RR2ezFlC6mbT8Zm9ARwZOVuH3zScc3QOqAfqko2bPuYvXgxfQ5SIX6+LdibDVUd0U8nh/AN4H/HY1Eo3gZKnf4JpzIRbeecMGQYL4cDf41xjVhgpJI/Dg7WJXH96AP0zn4LHC4q5+Yt8yGWCAR7Vvsv92r6ZJuycjdT9nss/uYbuxM7D9nfD3LMoc4o3WoD3VolD1AIj+vxuPvr+JwNNi3Xp118jTA1QBLftSjR7YDY+/PC69uCzs7Q/RAAd74TU1MZG0WUFSXwREWB6+XkIDVxQwgXu4tzenSeo97MOTkpezund9qaxibPx7tUQ7oWXG+UdM8axrjlcesZqWjYH0eBLA9dXZUZv/zNHdd/nnEPEXGq3W4KS33q42Ps6pEJmuAV+cvdAidwfc7hxpRtvV3aaXr5WxIZlArzijFPkEqKJm50lazP0/WlcxkzMDXQ0bV68l2wmGyO+leLehbrSzdtL8PIhV07mv1UUzmxQemMsJy5lRtolKzGqJY+b+nwOrXm/CoenVHDfTHVo/oOV+KW3jgv5M5G2TbFF18ALvINIMC1SnokrNVbxe8OOkV3NQhycVl/rqbuHJm9eghd/TjbZKe1K+nIr8Jbgc9PwqlXUU2+PFjKm3KobSCurN+DB6gNcj/Uc4lqd0cwgjJM8r02a7s6oOzOGyz08kfZP3oDmz3ne8exRer92CTpq+fO2tbvJqtsWpf+N5vsnj9xlggO6nQ+v8RheRfm/NiK/Ic7U8y6SWOZW/B0syr0dPYfcz23Hqnhtbu+QFkW/2Y6zzszh+hsUadf0bdi5s4W/m7+b6hUcsOtMJG8V5kodkZvQba4aL3lxNb0z2o4vRvnUWq0wo40zdmHkqMjFYZPmkEfzXhwSGGf6+awWNbZ44ys5C9NkMUUafrIX/fd18S23XGmF6nb8Ln2R97NdQ7sdd2OmhAMfLWNOEiv348YEOd4rYQ7lrDqECRqvayNitGj72MPoZ3Wz1vq4Av195oftRn948UNr6Mri/ag5rY5/d92cLkgdxsdWKXyp9Vx6ZXUc55qG8QL9WtR/zx+jxwfys1co0A/VE3jVVJaFFJnT8ajjaHdjkDd+PJduDp9Ai8uv+Mqj2jR1ZyD+3fGM1/JRoLUaJ7FZQ589yphLM9+M9OITyqyiRZvUYoOw4ut4plalQE1ZwShQZ8kG/bUp3vMUvp9myuK6FCjgUQj2dLuzgTQF0i8Mw2Xyk7mTfxpJYswgX9Wdz32cWUczhlWZipw43P5aTQenLma1rovA+1optZTbs2dZXiDNX6OZlTvZSqHT4D0/hyKXBbDy0AvQNOUi6eZFMkv5QsgMTCCHkGTW283DQ9coSr6axxZqPYb2qiAKWVnJfh/sgVMLDtKefc0sz3EUjpJ3I4tNrezTR0lsGramrpYutqxTERcNzKFj3V+Z5uwpOENShRR7/2MvlmijYrQQzSsbRcoVOnjBq5V9vSZCJfFaKNuUy6JdxtKM22p4py2ANbTLkY/nK07xFE+Kf+/wXZ7qkOdaSWv3/OE1dq4Cm4UlFBMkx1bBUTi+N5/e22qzWS4xIDU/iw7LGzP1lRmwLTmNfE6vZRFRheCUeY7s7PaxWJFaGLaOIjPbMKbacA+mhwXT69wkVtb/Bh7c8qOQQ1dYpMxvaK3aRnNKK1mfigTeeL6GuCm3mPKB8Wjz14ReiT1hn2er4mllPVKWesUO+Wug5EE5ujT8kfUKaaHDgkFmWfeTlXxTRyGH2+yA7Giy51Sx73s6m54iTj98Z8NPr3LSfLCLt5q1GTo8ismrMJY/IhYM19gV0nxRxN/zOgfcjUvU+r6dV3t5CcZuTyWvnaJs9J1C4Drjaf0hHba6uwpWK0TRD0sbpqXcDJ0Cp+join2s7/1zCJt7lC4VRbA9O/qhqt2T0rtS2LcEYRxqWU8epVeYPMqiyvulFJVczkROKOHVrlkkHNbAZhmo4dl/KiSS9ZBdezoFJ9WLkf+Yka5zfzKaCXazs85fWJbmJHy5hWeFJ/+xYm0vcJ1TRCEKmYvXNoXB5qo8GtUnWbtnfhKkt2RSSO/92jmTs+FQccqIPtjyS8yL4NDueDo5M48/7VAJAiJRVP/2Ny8t0wgbtp2i/Fw99lL1CaQpHKfWSWtZwLoeCPm5i/qvH2F++wTQa7MLzbWOYqg2FpvlllNLWgoLujse2+sWUkRkLvvydxIOnNah0oxS5iitipt+jqNDxo1MeY0y/swUGOmnz9j4dwpIR5+zaOph2/aGw/PJeSRXeIaLikmGyN2ZlHFtNzfjeA589kkhEy9pzmRGMZQ5xZP9tODFNHukZxpG0aVCXX7Fvzo49eEU/fa+zovhA8jx9qfNE8ew5L2vQTN3L7Vfnc+Csn/CfRU3IpVN7J23CHqPXU2+If4s1VAG7aYCfeiIZHGtE9Dk2AyS6E5miUET0fyQCmm4XGG/3BVRP20MvVeqYZ2R8mha/51ZvnrIlgYlwnmtTPpSLAs2IjmQvz2FupT/4059LIYVx+Lpd8R1buP+KuCCo8i5YC6nk1APq06E0OgntTXxpfdAdssJOia3iy9L7YAVK30oPfQFP8/zC7yL3kqjLZVZoNwo9HC3p09ZyPpMJHBz2lISWbOZnf8ng3/mG9HJfn/GgTyejdai3TPOMIuhcXhDdDwdD85gP2VlMchDiOo+ljKLmktQoZ4y0pXsYHhWMcifjCeBvNnQ+boatO5EkcQVERAYexMKpULJIy6dE9n9AFqtAij3MZn21j4Hia4DdNDjd23gvR7o/rSdfpdl8mXt/4HVKUdqrP7Daz0QwuAEaxLv1GC89BhUn2FMoo+XsE0JUigYa0B3jbezIQNp3DdWhYr/BTO1g5LIr5Uko/tJbF5DAUSIx5PF3iB4nl4NkiVRtMF1I8xedgterg6lo7V6MD7jMQT1BVCIxEvuX8cLmCF2iKQvr+QeDXWDRK8nDSksrLmm8QPuOLnQyqUr+JV5Ajh+8UqyPlbF/7knjNHpQJJGQkxOQxyN7s+ilMV67LOTBFK/Bkm7r2Qxn8Rx9D15Mnzlx4IXVkD/x0hakJ0IF/VuQadwKP0u9YeuJ0+gdUIgxfcuhf+KX0GYsR9tvCkBRw5+BHH5XeQyPp1rKvwOg76u1F3yxlTZ5Q8UL7Wj1AVxtQVdo1A3cCk9affmd8YLobHjfAp7dItfoyaCBl/1yH9IktU/EsGp4ycRxS1gMZYNkPbmFOkN5UK+2BPgTwTQ11+RkPfpNfwb50cRmW4gN7kX+np2kdQ/HRg7aQD2OG6mKYGvud3uQyA7dx3V3vTlrtv+AykPK9LrOWZqFjUKPYeNqWPdy9p2ZUFc/W86HU6M5MsLhFDRRY30R4wmd/oDSBU4QTsTykD+byfcNfalqNBkWDnyr1iNXWR29jh4Vg3Ak4zNdNfdAl54DcGqRAfq1pSDn9LDcKPThsbu57nMTQLov44j/5Vm3Lkno3DZt1nkIzbB5OyAIL4t1KTvebP5bIV2uHzQh6IcG+CNTQ/UR3nSD7tceDRzAPZNdaOLNZHw2OA3aM13IMVf7tDE/YMr8ctpl+4skP8pgJIySDN3DXNh+0dj5Im5xN9M5FrfCOHhfh1Sd+4wTah+Axoy22j0g4egu2Ckv790obHPS0Fc/zc0i9vTpLfJkFIkgALHbMjgygmouzEancci3du3HN6fE8LcICMq36wIKuaiKP1Fj6aW3+RueXyE5zfW09D0FzCQ8guOKq4myq2DA4tHYcjVZXQpJhvepAjhy7UcWT6OAHtnUXz9ZS5FzHGD5T4SuNR7KvVH6MP6sG+Q7mVDz2TfwxhZAcwyWULBO+9AxQ5hNJVcTJ8Hr8GB0+L4jWbTss9xkLJLEiW26FHTDm/YM+0XeKEptV78BDGtgiizaj55SD2CFe/F8Y7mTMr8ewPuikjjhHvaVPYxCWSEhsGAm0Wpu77AGQdR1FmmT/FKTyFwpF8p9anTBflqiNo7CsW2apFqcB+0rZRATluVHk9/DsoHBVGsSJFs1w1A9Mo2mMqKwUZ9DGrbvAcd4yrIPvMTFtd/h7LYeqhob4FfqqPQ/vVteLm/CFYPieGPiQ/hSEY0zFgni0Vqj6Hl9iZQuz8RrbUegsAhTThbPgXrS5ohe1wbd9lEF3U6a+Hk582czAkD1JhdCAkdaqY+pdPQpy4NTlcP1a7y0Mfb3GlIvRjIZ/pr4cSFB2HqiVL+vZMyZqc5wGGHVt6tUAZPWpiCmdp73hAEUTxGD1qc3/BbC3pAOUgeNOAhH+17By5bD3HiH8v5jPxrMNhVxx2pucx/nj4aZ23oZvtei2Nm1xjktJ4wsVmi6DtmPIIwsW1xozG/SRnNrAqYV/cgpLuqY1dOCvNreA8Vi7Tw9aJINmH6I6jW0sI3wyfYNsVK0NyrjguNvZllVTq0PFBBg4Kt7H1fKKCAIvbpObGa365wa9/IfLzWMM0FM+HWLgmcdNOSFYn949aLCqL3/fmsclsGJ1nwEwp01djXzxpcx/QP4Jr/H7932nOT1+Kt4LwwlRcqulQ7dPMWDNs01n5MnsZfq6+CFiEpzlfpGG/1fRhm2T1gEj+ksOqLOLpWVDI8MBbXHR2Hi85nMeFzovh94yQ85BzHYhaO4PGPGrp/DGAe4p/h2EcNbE7ZzqZVPoEjczTx16zVzOtHJby1UMdKOWT7lS+CerMqHggzYtZCwfBhiRJ6O05joGUPlyTG4+ImDda0YAq8MZFGwTUTmFddB8d9FMM52qOYi/tRTl9nNGI28Q6LC0yfLP0J87478F6n1tQq6XWDLxdR3a2vz/djO2R17+IuB4XyXuOG4LpjKTvQJ4vnfohiX8VFNuujFL6ol8XX9yKYlrE4bmydiOH7vdmEOwJ4pXIyFn5ZwbRG+BKrp4FCb2ezXHoIl8w1cWObKjMvL4EYPw1M75Jmhr8S4ILtFJz2W4gpZvhCiL4qKnT+5H04Dr4ZK2FqXie/cJ843IgYj4WWVTw7k8v1T5DBKMMgvgzHc496xTFm8fPaN+mZNYmLBNH8VKnpITtdPtPxF8z5kcl1bT/Lq49wZvXpFPb7qRw2+YhgjdUptq9MCu22yWBI7WY26YMo5l9RxBfaxqwi/g9s6VPF/Q8msgceXZAhpIF/Gv7wSRVNsE1BC8X/PeYP2+bBwyAtlM+7wVv6ngaPck3snHKBz2cbIem7Oooqh/G9OVrgMFsNt8xZz8cntXNmW5Vx5anftQ7fXEb0UwG/XNIzUQu6Z6J7TBYfXEXOJGMCb1EkgS3zHnH6mMirT/oBn14EMNFQOVx7VxhFDzqwDCFJdL8pjXKy09iXbiGUnqqInubCzGTjALyrVEUbxUY+40Q7fPPQwI7AKD40rxoGPLWxrciG3+6VBsbSuuiwX5o3vu8P2XG6KBtUUavLm4OjsC6efKxaK/JUDJxmauO7dVKmRgtTuH+v1XGobjxn9rzC9KyUKn4USOaqDz2vvTySIZ+Kjoa70TG8ou1P2KJty45tk8OVS0Qwd7caq7YegyrKMlj5pod3bR6F47wV8W9JIt/b/Qkapk7GdJdp/Li9D0BujSZeOHm01uZwEWzV0cVdlfkmBhgL2DEV//wqMJUx2wYLfQ1QYpoct4/TBbEmA/TYtJbzc2vhxHboY3peIpcYPp+7OEUX5W+84rwktWovCWjg2A2T4c/XA7zysSGIiRzPFtmOQ/WvongZ7vMWHhI4z1UWBQ7t5csyhmHN3okohDm1bHUXNGmq4SYbG9OTdxphy0UtPFamzjVMzYK9SlOx5uZhTutgMJTFT8NOt3SuQtgaxr6cgVG5DZxWnTh88p+JN+2/ce42cZy5yAw8EqoAJrKOpl5L9VFlAEC8W4dXOCKAS1OqeLV38jjkLoEX5Dm+TUACm7XHYfyz8zUVUkPwtVQJHTTEOZWwDni+aAr2pYZwas5VIP5GG2WjGHc0LhF2VOmjXmMft23HHpgZPwM/7ZUEFTMD8PtpiL5ymuBq1sK9sJiFoosBBFdO46wnzMTB6O3Qb7ut9tQ9QVyQqME//jIeFS6NxQzJKpMTTWJYe0AenczMufcB32G72yQ8/qmAWxv0CIbTpmC61gBXnFQAy2x0UHa/Aqx6Gw4SI5vaGmUIxwRXgeXQDHx00BpcJCQhusUQNRN2gNebRK5R3xC9ek+BbEmy6YNyYVw6bbZp6G95lLSSxJc/tnKOJ4TRWlUeM9fe5Noke8DxkBJad4rDC9UG+HZKDV/tMIB6mwtQo6+NVoo2oNx4EFZ9nIrpvz3g7elZMEVkOrpNC4bTtu+5q2XTccyD83Bkrid35pEQXjLZyTmNkcXEpWPw19u7nLz5P9Ae4ZqjozSUpreDTb4CLro6Fx7PLgGPRhUMvOkIJxdHg4W1BsokHYeku46QuEcH54yKhQUuyvB5lR46qGXDzeE7nNY3ARRrIO7GWgkU+S2CIbkS4Hf/K6gskMTusNkQ6tAMXlnjUN/ZGWL3X4LiRxMxaPFJWPQ1APpeqOJ1v0RoNVwGzU1TsPRRIfi4ToC1JT+has9vbr/5aHyUNQqPH9SFnHOd4LNNDLVm2oPO3kqYO0MaowMD4eqH86CsMB6fP0wGsT+HQPuXIn5MuwGZeVYgWfkRdGcpgoD6DzDq+wWXhZdB0ZpHsPaLIL5zOgYtR4tAoU4C1XsTIS/0HGCmNLq8vwFrWk5AoMcreF67ACwKP0Ltjz4QLt0LhmPvQourAN7/dRYKVl2HvA0iWLa5GCpCL8Cf0+3gVbcZbOQ/glJOL+xTioKL2o8h9c8QZKlchac/ecgrbYOOqFPwLPg7BGz4CJz1JVg2+Q2MuTPyrUkKRJwehSWCI1qwoQm26CpgR+Jt+Di2Bx58lEfHfbUgYimMjx7IYoFtPiS1jsd37yXxQHsSKK3Vxsbl4vhjazg0ic/DVA0hvKJ7DIJFLNFd7i8c3bgbEhTX40TtbyCQvwMa/+zA1Tu6YGaTB3SE++HkzU9BwHs3XHQLwiHzRrj8aB8kbT6N97hiMF3vA0ucz6L/vWQICt8FSltS0PxNALTEuo70gkv4NNsaelRsgS5dRSXPsbDyx1zQTS3Bq6axXFmnEjxVqka3Sckmpw784dyu16GYlj9/5WM1LLUwAY+Kbl5kYjPMM4oCQVNV5pDWAnoTeNh50polr3kBn/r6YHDIhw3d7IIrFTLoKR3KPFs+gWvKiF6bnmbl5v3QZGyKZVdPssnrfsLzC2swt2IzG/XpBwRNc8d9UUZsaO9XyNfwxQlOUmwsewPqWkG45tE73nEkA640j8SCi7d4sbdVII3ncEFGDX9zUTaMHk7DB/ll/KncOFiwIRtztxfw/JgA8Fl0DUtSLvC6Gc6wyq8Up1yP5Ac+GILLQDUuFPDn3Ve2g93j9XAyRYjNf/YOUl8kwS/OkJk+/wIrNG/DEncnVh/9AwRbhoC7fZT99ByCFT7j8YN2MIvc9BfWdhmgirU/+xj1F1YvR8yIdGILpg5Bh89a1A/QZyv9+uG/bdtQ8MQAn73xPeyYfwjNXTP5+sin8Dg1COdnOvHKF+phX3IkjiuaxO9cVgTi287hKdWu2m9ZF8C+LQ3XhSXXDh6KgtOvsrCkV6O2zcUPzu4twPxFgdVPnFfA/MAbaKpRZCJ57ieIbd4NS8vlmN5cAaxovgQvNy5mL48I4uPbLZCg5MoWTBFGjUOjUemvDxs3JISXDythdNYeltc7GtOfzRzJE6tZ7sphsH5ijqOPaDDzpu/wSnkd2mR18ALF72FpxXa0f7OfHy59BtIOfrigoaT2QP9NOCESjLZuWSYHD5VBf0Mk6jy+bep6IweuG59Du2Et7kVzIvitS8OqaifOuicUFihm4apZQZz+eA/QO5mPz6/HctE3xHBL+gnob5zIbs4biz+7C8BNxIQ5nZTE3+87YVvLWqZhNhaNrcSwvdKB9WwQw7Ytk0d80YydcRqN2+bPQce/E5nDxx/AlC1wl8Adflr9OzjS5YAWbWZ8d8QT0AcPFN4zWL38aCPMCTuMEkZynKZDOWQ7BOOXjGAuuO0qZJdE4vdnZZzrzHQ40hyPrPs1l10fC3PSUnFnrwBccfGHD4svY2CPBDRelMd/TRGQUDOB3ZeYgKGzq+CmgiGL3SiP98Z+hkKdhWzTJmnM0JHCvxOnsZwYUczN0cC/PWPY9abfoK05D9feKefvfn4PZWuXod1TNX7n70fQddcRUy/NMFUSJbj72hNnrtnMGY5ofeClI6hbxrg9Eleg/0gwfjgoCHpfMiDZMxKjEtRAUP48qBvF4zyfedC1MQTefkpBvWNL4dQCVVQ7kAhpW8TYqpE+kvqwGRyTJ7C0aAV8lzsEsxbIssHnUijmPg4frurjH41gpmSZDm7qT+PN1n8GW34Bav8brE379RjW7bPGI+MzTC1tayA40wm9nodzBeX5MLBqJ3ad6Ob891wCO8ej2CoxGc6UpoG/ezDKj1oC9tUJ0C4ciR/tt0B3bzhsLzmLFuV+sLRSEx+F5YJS4AveZ4waXl/YDumqr/nDOxRQKkUQryXW8Le3jUGTNwq4Z6kvLyg9BJWbp2LtxNjalITn8H2UMbr+6zd9eqkWFi9ejsa7L3D37XLBRsYF350eBflxKSBjsAs/3jUEoeRzELrrKO623Qhi9rHAq4/MMDkQwprCQPrKaVy4MBZSmA5aJlfC0PBZvmOUGoo87Ia/CYH8aC95RHlxtDVR5V1uCGN4/iRc6pRefVH2I0zvN8DOj9O5w0VNwFcuRrIr5b6sugKq22xx80RJeDzhPDQVu2B3hynUHY0Cm5HznPHzhpJN4bDhzRHs7owGZ7lgkL8dhDEfMsHBVQcLum7DwMtftXEyKkhxP4D3sK69pSuNUy9JYvaNNFO7zj8QVayK/kL7uZb6VrjYMB1/LH/Cvcu/AWEFJhgQoATxPUkw65otBhkth+qacFjj5oLFeifgbeRJSFy7E3dvTYJDc/3hy5vDmGFUDJYCmtg21Ab1fgmm85oVMOrHP4grnc0JcGK4VkkWo85mcl9qe+F8kRqmfx/ieoduQsyFGagZow8Fy7Pgb6EJ7mlzgsLEKBglZYvHx4RCdkAAlM51xsWlmfATfEGhyxPPWNdCgoUq6g53QebYOG78Gxk8c1UQH61r4dIDBdDfYBy+mjIOJrV1wMo9U1B4Egdj3Mqhe8sMjBHcA1eKkkD3/mKMF40B7vwpcMqyQTGxfGj84QtRnhtQZlUzXBNVwBfYC12KwvBkrjhKpQujUMpUkM37BpeLxqFSpT141d+D5G41FJIMBM8x+WC3cDpqHUoeeY6DzAXGODShDOhuALzKs8JHY59AiZo0+h74ClrDZhCfPAojRrpN08JdcLfrLZTdksPvjZEg6VsHwZsmo8TfLMiYchmqNhrgHNk6ULeOAkXJhSj4pRNK7URxfv0XELUIhEW7f8BPDyG8dywRjvu2Qu49GVzHisFarBKa1VRwIOgeZOdfgOBXemj0+SPM1hbA+Y8/QpvaZXA82wOb343Cg9K1kGJ/H0IkpHBWURvYR1yHlClKaHXxB1zY/x3Uorrg3u1bMHVnJ9wT/wt2vW/hS+hNaHSTwOve/6Cn5QPMqu4AbZ3PwP94AtyhAZj1XRD3H+6A/9Ieg8gxUfSYidyK/Xdxk4Iua/01s7b+y0M08XdgARvj+KbbTzDbJYh9LZJgo++1olNICusosmbpIe0481IxeyAYzDx2tmOczU020SeT3ZZrReGUVmbQVMNUXB9jwuAHZhv7iPXX38HIvh/ssHMn+6+vHl+dHEVPdUferavCl+GiZD37M2uUL0Yl77EUsXSAXdPKwRxjaRp8+5ftiUzFwUnS1PhPiBJsY1Hl8xjyKx9DWXanUHGhCI1fLUfyZvtxi9owSxmvSOfuO6LIsq/MMU6Z/JZxGGz8hhkeU6HOxVr4+0w/q3qlRK2zpmBdtihp/lSgOWHK2Kc9gTaXyJNEqAJqaGnSwbcyJLhdDrP1DWmW4liaaiOJX5qMSeu1MKn7iuH7iKVkIvyHCecIYe3P5SRT2sNSv47GQ+Wr6Y/RU7YxWRATTdbSM2ViryRF0C/JnuY4X2UpAeLYL+lAT2QSWPFpSYw77Eg2aQHs/TdZnDHDheTLHNmB4AnY1uJGbrEzGWc4CQ0qt5GQrwg71DoZE1W9yD2pjHe01ETmuZuKdlvzEfq66Lt7L51cp8cFXb6PAWOPsL/yGlxaygPcuiibSQToc+3+D3B4z0O2NcKYO298H187/2IDW5ZxaWl38OoYKZp905zLDGjCx60qVH1ehxvTR3hBVp/uFnww1dOpwvADc2m/irFpke91TN24mFYvHlN7VeUKjkswo6urh2tHz81AgTHL6K+0Kx/Nn8cIZ1sKOJ7G91ZHIVewhuRcG/jHi4Nwda4DWWu18/IffND/gxP1H2nl9Xw3oteRTWQlxfPxX6zwytwtZH8jnl8wfj6W795BznoptU+yH2O9+nmmksfXikxswe1P65lvyt3aZIfHaG73hU1VelIba/YQ3dZLUO/x3tqE9Lt4NXQSFd2S5R84NWHq9KkkhCb89wyGV/vmkv0KXz7nfjme/WdCMzxSeXm9QgwQWEo/ZRr46x1ZKFFnTV13v/C+P1IwoXcljRYcy355xWLK7bUUaaLCmixCcOlyRwrt0marnQ7hFz0X0lmqxaKHXdHfwZX4/AnM2MMaj2/bQiX+//EnjxnhQMx2EsvO5fdUPUWpE8XsycxK/ty6pxia18lipzXxccktOM9biNbWtfDyrg/RVk+BHup18Z9872DGYR3a9t8gf2GgAW365lDYeDHWoFGDDwNMSX7SBPZrXQm6Z1hQQJ8We3ErDwf/LKdrpvPYf2EX0U99DX1vtmQn4uLx4b51VNi8jul2hmHwxA00VWoTuytxFA+Md6EiM2cWfXczqodsoriDNuyeqjVG9LrRPJnpjKbMQa8V7rRm2kQ2P78VAyXvsKEGLTag/AzTJ/xiJY0z2YB8C+Y7yFD5m4Usft993LdfnX49MWd7Z91Cm3eG1L5gBbsRyFB1owkl+juy1uIyrJK2JGfJbaxxVAE67FxBX/p8WGpQJjZ9taPK3BPszvzz6N/vQI0/TjFO8jSO4TdQuE04I0l/HEhyppw1oWyq9lbM/uZCghP82agDI/hx20TzlrmwS56GGPTejV6mOLPHMm0Yq/iGnbq6k1XJPcUXbSK0ce9h1hT5EGOrlKggIJC5nbiNjfMMaNbJEGYpWI+W7xZSwZzT7LRFJTafW0qGsjFMPLQQt/qvoIwt59iFt5dRqmct7RFJYSF2SfhBxZGOjElnW5oj8bW3EwXEZzLbJScwb50zHZ2dziQmu+PPg84UFJLA1p5fhj7XnSk7JJiVJk/HeaobSWlMNFuy7xke3vGDWT5IYNO/PkK/GTKUPpjGzP+7g4YJGrTvzCWWcKlhhC9zaLdILnsvWY18AJLOz6ts8bpi1D+ynDo+FbJn57OR9qyle1I3mPOzZPwZ4EgSzeXs/OholBVwJpFTlSx3fAA2eDhTaE8Zq09yx+okJ5q4poC9D7dEk6wN9E8hhanc1EfV5g0kszufLY19jEdkBOn3qxvMMvMuflJRpJroambt2Yhmo/Rp20ViRf9VY7PtIho43sgSXa5jcZ4lxd24xZLSctCnbjUF5d1h5lUpGOKznj4b3meO+dFY0elEBWoPWLhPAHYEOdPkTXfZvZPuWGPvRMeX1DMjKwuMCHckqawiNkVID71OrKeOqzdZU9hdbF8hQcWm91ni9kac9FSVtm59wrjxNdigZEjWhu0sIfE6ChRxtO3BCxbWl4POusup79grtkUsFTvF7Gn2ijcsqz0af+ttoG+Jb9jgzgD0aHei23Wd7HrvVjSScCLf9c/Y7NdL0ErMkay/NbIJu7RRdIkDfddpZwfaGnBfnQxdnfSa+eVVY2iyJpWafmDNNtdRSsyIgtb1su7yHDweZE560/uY3JsUPBC3giTD+1nT9Wg0umtPGX/72RqjAPSdP4Kf7X1sstHWEa1wpPmPu9mfS+a4UHs9jf3WxnYs1cQ529bRgON7dka2Gj8kTaCko59Z8+ti7DuqR+aLB5iVZw6qxy+g0aOHmFZeCoY5LqVvC4fZt/iRO25bQW8nCdBP/QBszbKjuf8Ns7NaW9Ew3556XvxiJ5ab4/Jz9qTY9okt1dLARxVrKSfzC1t3qhh7zkyiyRd/MlqRgyX9BpQxb5h9qEnBJ3KLyNhiNMk8j0aDkCXk7iVEB7MCsNfMhpyFhannkDt6PVlBHisEST9/CQ7braKXR/4wh3ca2Ph3FTW1/WDf1uTg0F1V+t00zK5NTkWFsdMpwEeQhE+fwS3XF5BKlggV5wai2xWgvlNiNE5tB8oGLaV1nmI0xFuivvMyqlglTMMPtPFShDUFD/9lTSGpeNNhMjnmC5LX/hhMkjGgHVdFKUEgCCtmzaVLZyQoJtQL44wWkd7zMbSl3gYjjExJqliCHJX18Ukaku13QYLZsWhUrkzGXmJ0b10wFvzWJuvfYyhaZw/aTJ9OZpwUXZJbhY0Ws2l5hhSVds7A1eXzKOiiOO23OIUHFyqQ4RFJinbahyEZk2n7chnav2gt9nRq0bFrsiR4eQ4uRH0aOi1NE93246en0tQfIEeWzAFbLBTo81Z56tFfgC3nVMhi0nhS++mIU5pFKU1OgbonLEYXJWl6cX8iSXWaoqWBACU+VcTXN/7wlzXVKeHPeJTyMeCP7DSgpflyuH/WIs7y6DxyqZXCtRJSEKdnRhFD4hh1ew+44go6zwlh7+YcsPLaQLPH/IZ3ys/Ax3jbiF9/gl/3/4GgnzfFG7YC7y+LRqOOEr5iIL9ADY3NAillXzbIlurjTe4U7foVAVuOz8bXM8No4Ro3uCE1D4vehpPMjungstMIc1ZH0Nubo2Ba0ixs9g2nlbcrudQV07DGJJT2nQ3gBKN1saEsiD7kqHFzZmnjE5sTdD3DxVTWQgc/hB6iPUO3eWU5JKG1pmTnbcUrf1Env/fLaVZpYY2wymgiZ2eqSf5tOsGvjlkle5FMsQcn5hPMjr/3oyanWG7PBFVm/T2QKofPchCwl++tDSWbzCOc8pda0+KqSMo/qMWpnmeceWkM9bLtpjqrp4DkkbO05BxX69fvBAIf4km3UJS/LBQO74biSeIS8B/TL8PXp2cptciJ79VjYJEbS5MsXXiPbe1gnBxNt4yW85FH+kG5KYJKbs/gX8gJo4F1CNVekOBNbWXx9JJA+vOe1U50VcX8n4fp+6523mnqerLTX0RiqVv4xS1rCEWWUNscVZPTK20IpqwgtiXy/wquM67n74uTdlFaQkNpSZISpdTnHllRyMgISURkZBV+GaUSRdESSSUapLTR93NOU9qRlFFWKJFIqfj3f3Sf3Nd9nXPu+77Hk8ulKs8juRpHUomSZ5qpZkRNG2lX+1bWcWgaWT5zpqS6aLYiT4N+aG2h4wcF7P56RbI8uJk6j7Qx319iZLDDiXwk/jGv/37g2E1raeZbKfixpAF/bF1Jg78UQaEsC+P32NFJMTV44x+NP04toI9LtEBX2xdtK6xILEsPqGUrll2fRcub9aEqwxaNAw3pjrU+9I+ag2HTdek26UDBWxNsMtSg2TM0oNPDHBXiVUg/Ztyjn8YqMMXHl2b2RFlbjlCHzieBpAmTOf6xFtxeGUwf089z/V5TYWf+Rfon95pT/GYEIxvDaNF9TTY03wQyzlyiNr+NLG7fDOiLD6P/jIOZ5+6pEGdwkd7kpLD0LA047HiephuUMgNeAYK2BlBF+2s2s0kYykNOUWvdT3bM9D2Tlz1MBX9GQdq8fHb2nxuNnCQN0QpBrN53HTmUyUHHNmM26LqEaJQyDOxN4DgLK3qirAKd4hYCUU1jcpupDlG1j/nukbrU1xosOH1dDhSjztL9Fr1CB0NlSDC7QFXPoqwnb1GH9U2XaKXdGi6kQxtWzY+k1Z8rOVY/BWJnR5PWDk0W93wKTF4bTc43trI3T7TBPCaSGqrDWPhfVfgy4zKFl2Yy6yY5SFt9gRQqa1l/vjBs5s6St3Uny49tZ7umnCanLULwayvPBCkH6XuXNKgsvMy2rHCllyGKUJC0mMXaraKeuSrwZVkt9+PkfFpmogFr/dqshM3M6No9Lbgjf49fZW1AUfNE+MMqEvCnO4SqSmIEz1tkQOXhZdpi+srq4BMlcNgfTd/HLubuNU8Et/tXSUX+BXcsURWUJWLpQ/l0di1qIhxj12hZ1mE2UaAIhaev0NeWWLZ4gzS8+htO7krIKtL/sb7uC7RFro2pKLcxl+uBtG3kX7aePWJmzidpIE4KUnZfZjuX7aUfykpQsM2eTRuxiZ5aqwGf0MJhix3JT9UCj0Zt64D91lSnpAepGpk8ZBvTkPt0fp79ECsKukQTvtYL3tuIwIit0RTjLmvt1SUJIV+vkbHPUS5+whg4fzmOPsqPZNg1Gk7+i6NxZ23ZYWFJ+GdwnWxnnWNpTsP5ziaGeoPuMe/YLnbkdDjVPmtgN6/XsyKzEEoV+smS9mWwlY1nyFNdHMatOcf80Zve/pSHm385llvnRi12qrBkUinn+WUNXVbVAr1vEo9CHi2k5UF6kJZQyU/cOYcWx5rzh3I+sE7HSILgBMHosd0sRuga2SnVWDup9zOd/jh6vjKD8yoZYOvy4mllvwbLivnN2pTiad2pfewZdjBSvE5j866zuweamOmXaNrkWsLWxhSymK9h5FXRziLsrrM3CUEUMSQEn9wOM63bp0gvVQYOtWixa4b7aWT5eHAqvcyZ9G0mQ04DvCsfCKR2LScJHR0Q1hrgbQqBDKeo8FeCnrDeGVfI6tfLR3krnrL6Zdcpsm4DpyXxgoVtjKfo+j+cf8dzViadQJNUljLF3TVs0PIGNT0IYf1vC9mKwau0Qz2HLf2UxO5diyCdqc2ssyaQHUoPIdmkflYTsYTNbDtDRsM65bGun/Mhb8r1UoCwnQrcgjM76L2tCvRd3skHN62lGac14Kq3Ot4XWUIrj6UILjqlszuvYuiIwkvrKJds9lAmjiIK87n2xBwmOyKexhtOYU7qGczWe7iezKPs17oEZr0rloYe3GR3NYKZyIho2i37hMme3Mw2FIbS2KgO5vxiPFPedJbOwyh42xPBbbp2kn58HA0OFtMEV8330WC1Iqx3qeNfXnGmTrWJkO+/FDXJgU4vTLPyKQllpupXKaLmBLfg3WV2Z/J1qkYxlikZxiIqr5PGvzUsQjiAGQ5do7eVl5ik8zaGFE3BJfmsNXEq8zx+iRpUWtjvERWcRdM5ehDRy1bU37YeGeFLciKi0K/vx9cWHqbc16Oh6Zs6PtrmRmnj5GHs7VO4NWEdlaWP44RebmPaLVfog3gNV/TLlYWcvUofPY3Zo6JVzH54VtWLT7JXb4yYQWMUSTy7ydjPbq4k/xJV2ZaxK5Y2nK58MLWIv2NmCmL8/PAzVBTTxw7c+M0blR4b9iPC8PncBpwxwoNU9CRgybfr2PjfZto5/iK3d6wWO6kcRRe6pNmIW+MZ2x9FFelrmGHHb04QFEG5HheY8/A+nagwahxKZx2qXZaXZYLpMDxhkUIp/EZ/f0qNbGWVNcYYNOkEWfV/Y9rfg3D+0v30u6Wf3VhYiC/nudKXhEru5MtsjklepmIxfbb0QwBXYXaJZt31YE/t71vf2X2RFtwLZxqLZ/NuwsNaHJvO0u+Mwr9+/nRcvJjFLXPFM+4naerrehZx4CZmcAcp/dBL5rm5GUf9cqPcpb1cOPfU6uDfEIrsMWM30/8ImjcGU5KGJ5t+sIC/qB5EeaqhzH2eEfbfPUM3fiQwi8JAVPE5Sc/uZrDdNo8wp/YQ6aQVsCd3evC1lzstqBrJpJ/m8K2LzpJ0iSnrUBmLbiyABmO2MG/jTSj+3Zfa7p9iU+Jj8arzCTpYHMxkwhrwXfYhcr8ezszPiVDcgV0UbPmda4pdgi8UfWlduTqzmB6Idt9O0q/bc5mObjbmux2jbc9WMI0Dn/HD6gN06+9GVlAqS3kL3WnWo0fcrxWJmJPjRTvX9HCj7KuQW3WQ2iUl2YuQf2gmtIekn45ltzMnku2i7ZS8xJW7m9qOO0e6k9l/IZyEihShxzbC6HBOxUKH4jU3U9bsidZmZUpUvGg9hcXMsr6va0Qztqwms5RZvPpic6INtrTv9hieE62kFtVOXuHCBb7qXzUtL5mAe23q+Q8X6ujjwDycHyyCa6Mb6Fbu//+qU8GRP5/SjIpQHPvbAOduf0Yzt6Vh7E1zfJL7lA7UlqFXqg0aFtSTTdRbfD1qBf5zqiGv5j+4tdwZN2dVUPtxMTL8eAD7PhRTgaYM5db44ii1wmHeVaBPT8/hKp8c+uQ+nG2/XEBb7btUMnYiOeeH4Hqtm7TYUJWEqwLw+J4Y+vyfOp07cwRPvrtI6/I16f6ktbhx/xnauFSX1jjMwu4sT+qaNI1CxuuC3m8/3HNNiRIrpkCIUxb2XB5LGUl6IPG9HQfcRlNWy2R4v2YMHdkuQTkfJoLwET0y+ytM6cPecM9HRiZl//DCC2HQOLieRsn9ROPobyxd1JOyRNvRZMlz9nWxH10RfYGeR4n9EblA5+5W4MdZ95ifVjQZZTxEo/PX2Mtr8SQZm44OTwPYqq2p5HosAWP/OjELl/vEEiLxfq42+3WxgCxfB2HpzxbO8SNPf0uO4MZBF26dcSkt2LcS3x3vtjogX0HJ4/TwKulD4YsgHGmvQuy4PiSqINpeVia5pTqw6Hw/hsxRpHFP1WCkyXjK9h5LercUQNzalA5/kKZ7m8RB9sRymuUuRpOEe1nhI3fSnD2SctpaWN7XU5Rp9AuPexSznNZgssF2fHwsnVkO91KV2oyPU64w0RsJpGtejU8m+zITdoeucoTZscvY13fZVCacg8675dlLz0dkM+82PrFN4xQ7iuhfdCQ+efDaetnMx/RmpC/uGFkhUJGoItelq/DfxqmwzCAc249MpiTQg86KWmw4Ookqr2nAvVFi9HeZKplLK0NDljYlOYynunHSsOn5PBpcokBFekPM4YczdbiNoXVH29jGuuMUMEacuveWsYrkc3T29kjKjU9ns3SiqPNbL4p4RLFjlEBb5Duwxd2HjVl/l7xWv0H1VhsWUJJL51vq8YqVCKt7JaCbLsUYoxvAjY8upZ+hmfgo4YzVn84n9NjhKhrddOSl79aQm90pdLSaAoF6Cei4dyodbZoM2sLvsfWiHt2dMxG6dOVpooo2TX8lA/O1Z5Lp1Ul0cZ8QhM9dRa8mTKQHip/YriFPChBSpEf5T1i3SiBVNY2hWRIZjN6E079v4rR5TiSTTYon/SWjyMfJi91aeJdK2QBe8bRkhy7lUfqLLowx+cWVr0eqGNOKToWO3Jkz5ZQQVoWHd68TVEtUU82qHLwQEc07VtWRf2c0VndqwRfzbPQNMiGXZFV4d3QAQ1ca0QFOHgZXatBUewPKshCFy8ttqIjp0lf1b6zx7zZKOapBAa21bNZIX1IMmEg/jtxnnWPDqOOZIrl2RzBvyThacUiWXj86wJY8TKPesVKU6mbK/vzOpTNKInRL9j03EIB0ImwAZX0MuSNLH5NR/yecbv1M0D6jhtyX1qHd1wf8E80GalPKwp+8GrT3P8Gq+RYkuK8IG+Kk6KvHbHL3lgDP6TOoqcyYdj76xdSuraZlG6eRq3oj+77Ji9be1CWbRTmsPvg8/VHVpM0ikezboxjivqvQFJe9LD8gmUSfjqNwzpAdzMsm9elytEmkgXs9iacLc6RISVKCexpTTiJGQvRLVpFfKlNDbz524sX3z3hf5wY6ebAGK/OV4PHadly+AGgoVwp0Zk6k3vtz6aPhAOsaZHTjvBl5tjWzmNluVCphQoZDeazV8gydvDqNLklGsoCb4dR+So8CN7oz+9BEyg+ZTC5J2kwUMyhijhqJTSvkHEUfkbJgHOm7FFjPWFhK/5gM6f3l+BPbq+jlwChKOtDJSy6oJ82RHbgvVhp+jhlFuRsW0cb2v6w6ZCpdUJlHYZWvmUWlA1nEz6WlJx+wpHleFGdgRuNlI9nMB8F0/Jcx3f7uyobqr9Gormm0OXoia5RLoxOZenRiciLnYJ1Hn6I0aVLvWOv6BURxpRNosakXv1StggrsZckxXQhfJNfQ0EkhmjZzBHwUkSetE3bkdr2N3bpmQc/vLiTRt4+YX40LpXcz8giNZFYyfqS1yZLmxziz2WvDSf/bLOLejWXZgkTy2DWDbvQEcAUdGRS+bio5H/tZ2EUPSUNYi+bzsfwG+xJyPzCB9DbLocKFJ/Q8bzRR7Vt2ZKsmZQpWUOwXAUtKtqXU4cw4szSKbYrfT9enzqcRXZuYlek5EvyzopcfJZlLcwzJFpvR2e5NXKt+CrVaGJNGPgoufsumPV369PxTMV9oKqB3opqk4qCNBZqldPWQEp2p5VlriBG9G7+aCuEKsw9eSzt/29EKZWdmqnuCFIoXEOiJs8l7Q2nmHmsKT7Pm6iRu0M+vsylQRpGP+nyHjk80Iuxq51PF8qhmky4xZo7hcQKyyVWhz6NiWGDCXGq3ciThFy7MYtc2smi2p2f/STCv2DOEWgvotNFs7uy5CJK1mUvjdWbwdbmJpOwykzp2jsD/XqbTduup5HbUFt+Z5NEGMQ0a+d6VBX9dTFKhjjR/3Wg202I/iey0I5WMeZwbBdHnd0DGL4x4r5VXSPq0GbU6iODpnCSiHYZ00Go1qv8YPlNueP6eY9mUI6vJ32U17eA3cSzxGDWbLqauuUr8XAyhLOm5NCFhJGqdu0ozfWfQ0Pc1+OdtEo09pkPodYIz+7aZHtgup8vbagSHZE7TK2egB086+K7lofRSxZQowB7L/lyloQ96tCTHTLC/dgeJByyiCtcyfkDoDA1cMSexBEu8qBVGo3umUlpVDF/otZfSZKzpivtkvGPvT9XjjGjOHVHUn3WAxDeZUmbFCYyIPEWbuifR4KYwlNUKpvC6CdQ27wY+SI8kI1clmvAlBa233aDyFfIks/sujjqUQo9fytLqP6n450cmeeuOod5PiRhZUkDCxyTJ+EwM7kSkTetE6OeGMFxeVEZc3iCqTD+Hl9Ir6ff+Lzhdzh+7DtfSZsmnGJZ/CleObSCv6AKsuOGFNwKe0kG8js5NOzCm5yk5K57BmCQHzPZ+SvcPOOKWn6a43LyBOvL18Mo+efRaVEec9F/eb+A5r3C7epiHc3in7Bv4/Zk/BZxRpHNT76OvIJQ028bQGycBjsqOoaExkqQ1pQRxMJHuHRCliIBiPJp9hyJ1R9GylEJspGzaGvsXz8rmYELXQyq7/BPv3rqDqmOKyNShHauv3sJfEuVUZNmIj00SUfbzEypwQpRovYGROOwVnZLRyCUWF2fU0rPjF9D3SySuqq+jqNXuKIgOxqxZ9TTdZjYurPZBs/Y62r9PDPct2IBzX9TSeP88fq/9DFTrraakDRt5y6+P8GPPWVr3XYJa1CtRfvll8kwSIqHuBgz9do06zP/gkNgzlOtLom7oxo5jtTi0NJ1+X/iEWR/K0Sc9hyzcX6OHH2LK54eUdLwOr759iPxLpDBpRPsDD9A0toTGTL+D5hcfYLRbObnvjMDVlwow8HgFvZY9hjPW5GC0dCUdcVqII+7dwQ1Tq6hZUQH798ch1FZRKJTysq9DsOxFFa1csZbn4zyxT6qKjk3eI1D8WYcySefI5O0Aimu3oHt8OK2a2Imz0l/h6hHXSfzRG7yyuxnlbt6iyfOf4d2+Blw6XH9eaAUuya1C37vZJJLwCGvPV6BbdAE1bLuDa/SeYJhOIR2UuoKaj6uwNYsnUPHDs2drUO8+UaTYWtzQUYXO+4qp5bMWJkSWobFMKX3qb+MXGz1ECCgj+eXefNCTVBRJLicz8d2ClFsRuFnzMfUWv7IOXdOCQj7nqU/sPVriawzQiiDbLw04lPoSt8tdp4VSZfh2x3O8JXaLAs0f4BmbeqxIvUOWb+5g+KZavJKcST88riE+qcdW6Rw6phKEn54+R9WVefRVcye227/EaRMLSKnSHGuPvsI/jQ8oP1UUw0tf4IpHj+hWZTyfXFWLktUCqlJvE0gFEQ61IHWr5Vkf/XcXP58vorUZ5zjl2CYsqD1PTw1qcObq59j9M5zm1AtQ1qIB+w1j6bxrJv6cXIOHdG7SNo1E9DGrxvitKaQndQkjRtZjWvkdqvH3wd2KL1CkJZ3e6a3EuTqtKLctg0KfTEYzlfc4Y9R9+jPwhv8+/R3+J5xNKUMuvOaXl9i9L5eUglUfKm+vQ3mNAnruuIk7EMmjevFDuiDSxN2re4JuRefp9xgeMzaXY8O0cLLpvYebRUpw5Z6rlH70Bk5MKcZi8Xia5HYBR1s8xvC0m6TleAjzsQ6NC2+RZ8AiTBNrwXuqySSnpYyyGW34X1gKJYwr5Ysj3+H74DRaOkmH95jeiiMmp9NP+3Brl/TnKKWfSYaFsdzD5RU4b3023dSVZMXh+ThjwXmak5WNr8fnYBxeoqSZN7E0KBstC6JJ1TwMK8cW4NTKa1Rf6oU75xbhV4040klYjEy2GjUDb9AYh3FYr/Qc57bF05YGnn9a24K2JYkkmCPHf9jSguh0i/xjnlubjWvE5BMptO5mHle+qxJfvr1DvraqTO1CEp7+GkQnDqXh4uxEXLY0lIx1otFH+jY2dITT7szTqJZ5Dz9VRNEazVVYIvsQhU5focIz6qhQVIonOmNokkIVHzamGgcF1+jLGw3eMaMWQ+fFEdRUW7+malRcn0Aq/x5xlb/K0SgriU5N02Y2LyKxbVIgVfjFoWdGFNZ5BVO2WxCW2VzHIa1QOvPLBd/dTcZ1py/RTjLA8BdZGLIonJrfv+Plfj9CfeNIah2xiN+1qwgzE6NJz/iydW1nMT67cpW8e7O4KukijKu8TpqbtZhGRxjqvvYlhR8XMC8zHMXPB5LR47042fwa2jSdIxKY4yyZW6huG0IKToN8Ytg9dD53kTwPHuT3f89FOdlLdKxe2trv0EOc9i2cSrsSucQ1hWj+M4qsD6kx6dhojG/+j2YN4+RL3lWsMfMlxyKGARsT0O+UP8UvHeZS11S86HCWvusH81oS91FF7Ty5Sqk9yliej7LSF8jhahi3fmQh+g6F0ux4Rca/TUavVwfIaYhhvH8a5k4+TktlpfDmnQyMPXeKdr+O5ue8yEV/8qPeljECa8lC1P8YQFvD/uMMyovw4YcgUtwsyRz7BBhq5E66JWL4rxFxz01PMsi8xr8+XoKm2kdpYpSnoF6sArsCTlLIhTVc22A1HrzjS9YXB7jGrOd4kJxJfiCMDwhuwusJOylmt6/A7nozGnrvJ70PFtx6v1d4ZtijbnjzgTNe/BWL5zrSmXQ5QQR14nwnZ5rAW3ArR3zF7C43+h3UzN0rHsIvDnYklLCZ++M1gAnya2jCs1fc1dejaE05UJftd869cy/fPHIcvH/hTbFpXnzIXVF4a3GK9rgc4id4f2O628+Q6q89/K2CBvZw2llKf+DGK3/LYwnrz1OOykZexTKWuZSEUND+hXy7iS8LcrxIqk/UeEOfZaxCKJRunERB0NJxrD71IlkpphcuiczjHhlcoMLCBda8+Utrz13naczLIuu+8eZ8y/5AEk1ptPZJGoWmm32pbFKI9Z292/Cw4ChJHVAs/LEiGe8t8KCrXf8E0wLe4/qSTXSq/BzfaDCWct4so7xlH/lFCka0xYnR9hsP+NcfZGAw5hAZ+6fyUm79zNLiODnsuMy/e9TIPh0/Rfqn/uO9HHJZQ6wfia/byH8UusJGWwTQvdMLeYPgY6x+wll6vncm7/B6HvutE0TzsibyF2dIs2SnIDL/2CM41p/EeWecpVuhtwXz0h9Ze4oFkrPhJkG0wRTe3fQM/XprJ/ii0sHXGJ6ioF+JAvZuCRbJeZHwyXH8pusRGPNnF/mU+fDPx1bippRN1D2R+IALQqQqWE6ONhLYLDGJjjcArZ35l7cYKQHaCvsoULKZX63bzvqaD9Ke0Lt83hme7ZlwlMTGBvAHPlxjf3VO0MBKB77Y+TjbkXKKYjOn8o7xHPOX96WK4wp8L4oy5XRfGqktyqvRFe6tpy8Jfg8Iav9GWos7nabry/8J0oX1eXunk+TyVo6/19vCL8w5SvF91ry7xhwMjPSk90/P8MpGgTj6vx20ZWwBnyiXh42vnWjdgT/85OIOtNm2nA76amLrxLE0ImoeuazQQOW9QrD98056/lMUF/g3MtL3oL+Ndfy/wjT2d8J+yjC5witsC2BThg6SQsYGfsU/W2Y52YsK3qnxKR1STHrsUXos1idQfRnLffc+Ss72bQKRdbHWSebepLW5TxDfocnfm3uY1i3Q4MeK1fIpJ/dTi8JWPnadAcoI76K+8zd4P3Uv/NLkQjnRr/ndTknYa7COEn3k0C3uKe7aa0+6p8xwQ7cQyWrMo5qk+aizoo8ZVmyltWXaOHpOGev9sY00ekZiYu8VdrNmB+kKBLxE+XYWEruLLl3w57dOVWeWWR6kUW7G52blc/Ov7KHmmyL86Oed1g+U9lCNa6fA5NdIXkFqNwltGc2LsUL+nPMO0gm2472L1TF89FY6axfDa0q7Iug50UyrNj6iLwIv/1hJT1aNx/euAjQssqXOrnlYMKYDb/dztPfvbpTZ0cmiPDeR/15bNFDIZwbvN1Pm9cno2BLERvzYQpcjB/i0QWDzn22lqtP5vKX+d6672ZWMdvjzJTuXcMqXXSlmxBJe9c8ewcbh+ehnmvCDTrG8cMZmOmJrx7eflkE1gw30yDCEPy60Ai1gNa1cX8PfmxOEV8XtKb1tLLb438HpzfNpFXK4VqsBH+jPpcpT57B4cRtj29ZT9+yDKKydxma6bCCzb0vRLtuLxT93oglvtFEgMpkp/9pI+R+FsC4vhbv7byPpc9W8meYGa7WTThR9Mpk36Xfk3zqtozkshm/t6OIb+VXk/DGJL15phqaf7Gna2hr+VKo3VkguohBxSTSsuIZ6Thy9WTALdXQEmGFuRieW38CFW54zpweO1FFxEeUa49iG9Wupb9Rx9I3azE4uXUduCmvQNkCMHctZR+KBJrjs7CbuzeO1tDxpHH5NDRFoS62hV33C2DrlDu+/fwU5vv/Dl2gro6rlEjp0UQhdJq5Fmfp5dHqNInq9OIeXr1uQ6EFT3B+Zis90TChxfS6uXVnDFvasprCI2xjSEsmUtdbQreuRWFizhDUGrSFH5o9Kme+4jcZraGDjbtQbGMGNm7OKWv6twG3rpvAN+sspZQyHUuHDOB5tS3q+ZignboQKNkBy6Za4b9wezLc3J3cZOwzYE47bi6bTAs8qtJ5awe5KrKKZ2ohbFoYxsbSV1FuUiWyeNXvqvpL0ChPw6foyDmc4UF5AOD5Z7G/9Q2EZaVw7ixGjd/KGSYtp5JJTeMlxiM8ZC5Qx6Rj+eDcX5evNKF3KB+tDvfGQnyEVOr3DDqfH7HjJcsr79QJvzw9lKbnLaHJoNUZUWbCKDHvaaE2oyT3iZp9eSskWOehyzsBafPYicmxMxU6bk3zlcUYeaxNRfuMonHDFjHrz4lA6lsOj2oakNKMPU32rmJHBEiqt6MZFUuHs8PrFlHT4M97LZGz5fwvpTe8btF9cygnZ2dAiaMRzC/dah3+woqTgKvwWuJt3lpxN3OgyrF/cz7eqTaNSUxGacvwZO/gVyO/oKFoYdZV9WsQR1zCCrjxcxoRPzCXbrj/YLWjjzi8xJ/3YHgwR77Tue2VMl/lO7HGayusp69OBa9J0YesbFu1oRnpW0nQgOIl1l88kw1+SJLHQlYn1G9GfT+IUJyzGtmZPpSV7RMnOay035KBFEw/K0QPtL6z1y1QymC5PItMy2TRnXVopLk9Dzj7sPw9NMlOVo/oBLfZZUoW+SI0jR69frEdrmMkvKlPOGgHbP7xWWo2nhRIXmKWLHOkXT6BfN0bABB8Z6kMVql1Uza5UitOEJlWyrxaFNztHkHrVJ9yUOg/iJ22CLJH3uLxkLdQEroFLw7kxpGoPWJ6wA9GXz/HqudOgZD8POubV4tSLwfCybjacjh7OQiZRsC5RH+KePcJ8w3jQPDsR/qvMRGHTVHDKkoS12kkYJHcfqrK62WLvSNTJy4eb+VVMNswfi7UE0Ps+hQnvdcPH64vAsOssG5CyxsI1pVDYuZrt01fEl1PLYUftRDbk9ZSXV3oMHupPuJ5iL/7E7sdgrWjHfYHzgsenH4Ned6DVtGu11odPPIZzMZP5C7Z+3Lzlj0HCNpU/Od7Lant4NWRaDfHq4z34SQ4N0Dl2Gtbt/8lrOj8HB68NuDfTDG9saAaRw764UHAYt+e1QLhyJBoHR2NNRzMcz7yNkm+zcOn952CQmIfHzlbg38X14OdZhkebm3DHtifQHvIMj31tRfXkIvgi8w7/9H9AlwUP4IvlN7T16sBbRpmg6t2H09t60MfxNqg1DeKYxn/4Pu8aJM4fQCc9MbJdEgbdCj9xVtYYWjfCH9rufcKqBEXKq90/PPsW/OEwkbZsXgMT7avRx2AS36VfA+7TE3ihoBr+J3sKsTL9/B8bbVTc0wR3vmpj7/Ut2DWlBfomL8V3Z0Kw9FMLcGP2oklgCjZaNcP8ewG4dhrhlhmNYCgeiZ4v6vHqilo43XoT421eYpPrY/ByyMIZwm1YVodQLENo1fIez17Mh+1DVbhwVgca+dyDU8sbMbL+F/4OTILQrS9wzyQhar4dAx/vN6L6Ikm6W3UBfsjV4FQmRwUdp+G6bjF+1R9PgePcYY59Ho74m8TvPVUDsVtFeclbY1FH8BS6akP4/evs0OJBE+za1sgP/PHF25+a4XKSNJYvi8OLdc2g7mCAT5PzUYE1wWXDJfh0YhVWBjdAbMFOHP+9CVW8q6Ciyxe7Tr3Gh/GloBMbhsVcG16eJoDENXHYb/wBZ3fkQF5eKs62+4op9+9A1J9MHFz4BwcPJYB3cxa6LxMhoclRcNEtAx26R5PWrXPwvT4ZL3xWpHE/jkHTmDjMFQzwR/1qoOf3Retrnea48cJTGPdjk+DBjIM4Z2QTiDsY8yXnIvDSxhcQGXqZd1DLwPWOTWAhXMtLmZVhdd9TcN8rikUzGvFuUw3MnKuNa5++wtr8x5BWNg/vJbaizwBB36YtGBf1FgVnH8A65+O48XI7tk6+Dx7NgZj5sBsdbibDTPEL2LdsBG0ZjIUxfy4M530JMlG4BE/mnEfv5LH0/tUZMHM8g7sm6WL4t2rIeXeJc/fZgvd2NUBwsyWnZxWMf6UaQWNxknXYudt482AjvFV+Ulj/mEdXv6cwOlWaP6fYgFEnaoHb7MsXPnmFOlpPIDAH+SzZt2gvVQJHw/7xn83f4ahVhaB5UBVbNn7AstIcOF8+GwPbO3Cd+l2wD1yCHz/+xgjrRDgkvQYThkbRdvloOP1yDS4rlaY5gefBrHsZnru3DKX3V4F+gAgbXOqHD8bXQYngNZf17TqOKq4H9/X3OIrOx1sm9ZC56yjX9qoa4zxq4GyNGEc6r3BddwX0/+as9Me9RyXvEoh8+UHg3vMBu7YIIL9gH1+x7yPujcyDgcr7vNqRz3ih9h6cb//IR93uxuM1t2ApL4JpEv/wybFrYDUwBveUi1FlUSj43ZfBzMNHsKGiAtT9bBjYRaLRiSoQMzZmEWkZeHNqNYx3UGVZEx6jWXIlGGwWZic+N2PJjMdwa3c1N8H2A1a5FUPPkxBO2fwz2r8phEqcwGnEfcY9eXngnFBrtcf6CxY8yoDTOgWCzvNdmJWQDNPncbw714dHZseBmvtpPmbOKLLZGQ6HCi7xWBGCT9pKYfFOXxZjnIyzrpTD45AjzPYNouGicmj5vpVpXGhE+c8loHjSltmnvMfOL8PveqQBs0zowPjuh9CXKcn893xF09W5oLGgjqs1+ooHxDJg5uwLXM6pLlxclAwPVXS5M7N+op/NDdAJDra2GvcP/7lFguSJO3Ov7ozD7TkI36clMeH9+ejuQbDw2HU2qFCLE7QRVP3DWdO1NoyULATp1gDWOLMTizLyQVNyL1vk+x0XRmTB04IlTK7nO7Kmu+AwWY/dzfiOV+1uA20RZYMjevDG3Tio3lfH+f/rR8/SSAiojecWatzDMtsHsFy9gvnmluG/fwXwa1sRuzzQgouf5YGEfR6LtfmCmdOzIWB8MhN7141XrtyDXRsj2SH2E8+tT4X8235MZaAH83fehKgzrqxa+SdeCo2F5rPAXhz4jd9DI0DVT5v5Detdw437kKvexf573YAlmzPhts5H9jDgA973SYci6RfM4sV3vO+dCk9HlrOrar1okJkE275nMS/D3xjPboD6sRtsVkwvGo6Jgbr3IWw89xttWi/BrH3HmXjiY1SvSIF588Sh68urYTzcBn+1UaD0pxMLV92EhtpeVl38C3tEb0D9pPds0aJ+XCZ2FYZMalnloX78tSYCvoY9ZCPr+nDhswugsD2F7XnYgLbdcXDo3Th4LP8RVy6IhdDtY+Fw9g9cdOoK3LonDiUH+tG/Mxy+5Q6xfTEDOPLWRShO+8yCpw7g99tBYHWlkck6vMQ7GyLAIVobYm90Yrn1Jcj4qQpxqr8xdPIFmJSqABO1B9FybhDUP5YEO/Mh3JLgBz4qI0Ej6B3yi8/BtZAZIN7SjRHVAWA7ewr0uf3BnFW+cLJRHSwGh/CD6nG4t1oJIOAz/mk9AS/nWELz+1/4VM8LrNJMYPD+IKo77QHtm/qwZ10XspE7wf/vfMga7nfSVmcYuD0Xjsn9wJdrHKD5uz2MuZbPLdhZBHfdVQQfxOy5CuUiWK2szNX3PbRSKiZw07/FJSzX4g3dCEy+jWRJY9L5mDKEi6NN2O2bwtgVwINSsxvTkjVCnWFOq154kXkVr8WmoQKorb3LuNX/Yf3RHDiaXsNiXEJQvvIefPD/wZziYvDg52SomSwFPj1JuKbuBiQnqMCeURkYFx0Fg58MYIN5AZacCIEv2y2g5y6hSKMvPJBaBJKuFfi+ej9MmLgSeM86vNe5ATbVOMFpgyY8f2gB9I3YBn3XvnEyBx/C+mgv7mdpFJf/+gHomL7hMgbbrM+vfwDNQars4vlUwezHBZB4bAmbPiWYd3udD3NDjrFciU5e3TIPavdHsqgsTXwSmw152veZnsISdP2UAafW17HSZA+0G3sHMib/YLLSZ7BB4RZs3CEJB+9cxPj31+Hx4ESwvHEFz/pGQl6XAUzNTMC38iGgedISdnNpuP6VL2y2t4V927PwwA5PEGxfA+fnPURhdIJxv51hKivGWUYLwXlwJ6wtkWXrn2fBh9WjmGdtCRdtmAUnV5uySbkc9+/Sffh+ZiubZH66cGVNJlheDmSOPpt4lXMZ8N+EOJZyv44vPpwOzmPymdoYJexxTQMJ3adMa+Vc/M5ug+lgN8NDG7FHOAHCLCRgYulh1LpxFSoWTID6k2eQlwyHhhVTIcckBJ0dzsOCAAvglkRgd8ppiFpqC7LGsfixfB+E73KEJbpJOOrGBtj53QUw7i4GrV8Ana92w4cFOkynIw1y4uYzkY8dXKddGtx+cYStXHya009Iha+zL7EFD2ZY/3c9BSIGk9m7Q7r8x++3wVsRWVh4Lq/ulARlm14w22hxTC6JBwfqYfs3GKKPRiy88xSHQZOl+ME5CkI5ZZD464Iph0PhXJoeuDUdxADXs1D4yQymSZ1Gk+UnQclsEZhZnMW1Izyg0mgNnIq4iDIX14L2HRfo4aOw7808OBrnASHKs5lXVyJsmH6azZgkwpRcE2FabAzr/xfLvY9NgF2b7zNe7rF1lG085C+vYPKnXgs8NeJAblIbu3nyCh/95ypUZvQxV90ffGtFFIwTk4DJp1WxJ+ASzOtUAtsOc5TRCoZvrdqwZtEy9Iw5A+1LTUH5ymZcIXkU5A/ZQIKhB75b4AZTKh2gXP4o9kauBBUxZ3hl4ocq16xBdWgXTE0HNnvgKrRtv85EOmWZw5GrcOJGPvv1Lo9r8I2BRK6eKX1W5f5WRkNY4mfW7s8EjeMiIVN9BNRN2c9vWHoJHh+SgiCTat5yRwgsXD8Otn+TxPwdgZCrpwXZmrr4Z/Ep2N8wA4KWWeIIY0/Qb7OGQxJLMXaCM3yqsgP1xLX43yg7iJ+xAaS6XDHwpjmU1ruB2a3FLGUYP4/0CphY5gR23/MyzC55xlTr6rkbcy5B561vLPOJE+clEwplL0ZB9Lhsq8eFwfBCSgZUcrX4MLOzsLl8PMwuT+K3+fvCjggtqO7v4tV2eMOWL9NBNVQBPa/thBHtFrA6VB/Xia6FItdFMHh5Dn5ZPh/8x62GBQsXotdqY3DO3gIT/exYy4hgaNGrZ/XNk1mf6XmoGa6h/lgXV5EYBI8viMDIoIucw+8AmPdnLNhdK7HO6veFJWKqME4zWTBq0X+wZIQuhP87zj+btA/aDxiBt0M5v/2hM1wYMIfiFCE8dWQZOKnbgJHiBDzZbQnVSstgPDcV7ynpD2fD9WA2eTmzK/WD4DntTGn1NPY91RdSD40CHxRhNemnwGisHJiE3OcevToOvh/V4E2VIefscgDG50+Bj0Kljw71bofnhcbQ8M2Qn9LnCJ4xc8CqIZ7/3b4AhG0A3Pa/5XO2z4SBHFvQN5LEh9s14PqlVRB3YCVLSPGCtaH9rH3zbKZ55xAU5I6G1tUK7FTmPjg/VRXuhDzj9F7sgL4V+qC8/gjHsjdCU85MGNp71nq81zJ4H2QJBnKlAstiK3AsA9DbepT3XGYAua8XwbFJhbyO2HjwX7p8uP917OguN5CsFganHcB6/beC8S0lUP+gyfat2ggF93XA+34vd6hzJVi8MIHZ7te596ILoch7LrxJlOUqJs+G6SI24FsQVRiloA2PRiwGOqbL3340FjbvtocKw63s7dvVYNItBeV1y5j9v+XwdoUavC00ZjbbFsPuw4aQNWk0q7azgveKFmB1s5TbXzcdzLPnQVDYdi49XQ3M7RfDosxL1pfrpGC/qD0EpB1gV6fZgAmTg5H8Frbe1AoWRGvBLaMFTFPdFBbNnAlehzXZeV89aPtgDQ3Nv7jnr5UhJnchmInc4uJHi8GcFXZQ0XOG/T5sDMHJ48CvxZudXjMVnm+cAv+92cRCPk6ChD+zISTBku2cIQ8rygHuKI9j734IQXGoLSQfCGf+byaBzXgVGHHvHJsZqQyneANorxvWJMXRsNZ+DixUWs8aA4fYAG8D+o5J7OtWGTidoA7iGjEsTkoUitSmw3a388O82cME7y3AZ2k2K38wwJI2a0Kh5G0mZtnONgqMYEZrIXPNa2LNllogVLeWK1U0gpzu/VRQQlziP1MIatlOozdJsfLW2VDsso44n+nsSJIp9Cbbkt9HW9abNR2GUiyoZ/RGti9KB5J1ptGsS26sTzABJpxXp9AxHiw5Rhqkv8lR9pO9THdPPzMbJ0bHXu1jHiefM+Hlv1Ftzj5m353F1ga0ou4ODwY6l5iszWNM2b+D6Z/dzrabZuDvIy4sfrcBy1wVhXkZG1m5TA/3uuE/7F25kWWYxQ4b/iW4P9GVqebM4h7emYgplw+zpZVJ1pXJ7/g07TTOc880cL3qTas8RdgOXyM4JO5Bl94ZsfCfhvCJbaKWSavYHvkpMOG+PaUe9GD3bqrDj93WVHnoP/ZwmzwEyM6gFDNfFvdLGNyqJlPqgTNMvvkzyz88jvwW+7OxDWVMP0mKwkT9Wf70m6yw9h/2hfqxu1N8mRXfjokNp1jptvlMNbUahUceZ0eqxVm4dxYq+Bxg637Fc6mu0bh0/W42wn0kF//rGMKDncz2iKwgbNQCLI7ay+xaNXkjlEOX/s/clcZp0HfqJD08p8eCRQ3BwvAAKSutYYUKU8DSYSv15Xgzu3J1UP3nQGB/ln2aIg9eq+fReoVQdtNEGDa1zaQAn3Bmu7OduVzXJbfsSHbifjEzM55IHzyimFvIDYbyMnThbSTjjXzYo1Ih2iMawWSXW7KLnR2Y3BTG7GMHuUixOhQ7H8IEuYGcmlQ2umSdZdOatltfPB2FIU5nmK+BFB8+xwutdXzZYd0r/OFmDnNnjGMjzhuBh5EvXf3Pnu2UNgRLyyM0e6YPO2msAzUe2+leaChLk5gAF/espsmBsSy9TRIOrZ5Pb5qT2MWGHnY7ehYVtqWy6xNr2QWFKXQj5S7zHpvGLJaokNizdGbfGMgO3ZKh55fT2ZJ99mx7uhAJvbjDqlRlWPuiLxh4OYVNpiSucFw1Rny8yQ7m11k3LsxATac41mvWLogKvIxJsjGstvQG/6h+H/ZutWb9j03glKsflSl4M+wzhGlyXvRbLpyNe6YFa/W200+126zuthI82LWKpjzJZrKdIrC4bh5N/1vIMqidTbs7k1b2FLPFo4rYcl6H3KPKWfGPWOZ9fDxN9axg8z54seXLpOl7YgWbVjib/UkewhD5x6xa6CfX29qGtkklzPG2F/c8rARnHeHZnhQDq/bVyVitWsBS/mzhZ98PxrV5HqzjnikM6vpRUc0l9rrXEOa/OkRjZ6axnzMmw7ZMF3JYIGDxT+XBR205nXCoYokuQjDvhxVVzHnOFExbWeTm6bRK/jWzwQdsurgGBV57y8b7RrGKDfK0y+IDi+3xYBHPRejU4AeWJmnIKj2+o33ae7bpxhvuXu9TPD25jR3Xn8+9zc5HOa8W9jp5p2CS6nWMU7zIttyZCVmlp0n6Ryq7EmkAq6/vp5WuRexKqzoUbd5Iob3PWJWQLPyVsqXzcu9Zff8gC3Ayo6YzXex9VxNrd9EjMdNeJuuRzVzTx9PXOwPMyeQSW5wrRcW6/5hsmiuL0RzEbhgBCSe1mLlRG/bs+8cODpZxmkWlGJU5wHxWiXJlRnfwZFkysyqcDh+OniSHK0VsQ7kObJu7m0L8X7DA7PGg5ONI8us6mOdnCXg6fI+Zw7yld6Kb/a2fQXNMhcDQp5p1+mlQlbco/JZJY4v+kyPFdAlovhHE9BYJ06JhPUmpXcmuWXxFi3xpMAc5Bh/qMWOaNKgKxXID+fkoOp5YQfQw5m8fpValF0yzUQXahLbTJOmvzC5KBvYnr6DX3UPMVHcE5LhbUaGoKHjAGxZxzYDUXkjBjthHTNJEha5GyMLh5VeZ/3tpardWAM+hwyz03SAKMpVg5UlTZnmsDbVyx8Hm7A/c7KgybFjznO28OR4mf/OkOQ+/MPOeMRAis5m65AeZietIGFu/hFrKRWDahvdMKsOc+rKlIWZPMXufpUe6TXIwVSeRfb2rTMvVlMFX0o+17Zag9FUqcH3aInb14S+8YawO+x6KsedqzTgm6RNbeFICita5k8nD30yvboAVVjtSZrcQjBndymKFFlBulgQsfYlsrp4pfZ8uC5L345manjYZD+fbORt92aZaRarpmQi97ouYpLgY/X0wCVKcJVn/5W6sF+1lS5d/ZZs8ttCn2SNg7YunLD56OamFisDdhjz2x46jmKlSYCUVw/ZfM6KuIVnA6d5s2n4N2v5GCZ6Ms2QFD+ToxHkV2Bb0l+s+LUx7J4wAMSSGdmvp6mchSHuSzEZtXkxj9ogCaYWwylNzyKxEEs7NdGFdZVOJL5WBLyN12eKFqqQySxEej3nOTZggQ2pqwvCt/xK79MKe9vsKg0/pYSbzklGbligMHmPsyaKZlKMqAT6JEszFWYesjEfDVNEbXOw+ZWo4JAZLLOazuN82NCZWBF4eU2QvysyJOYrANucSLm7bNAp/LwpyaaacmPkkOrxbEtpfFXPGaXPoV7EoBJkv5fr7jUi4ShgeWibPPZiiTZJTRsO1zdutcs2NaIqHOMztnsmvOa5Lmj0ykHwxlf/0VJv+B6D2ma0= + + + + + + + + + + + + + eJw03QW0lWW7qGEpdSFIl4DS3Uij0t3dqdh0d3cLtqK02IG0YItdgCChNEhKCgpnP/+8zhnnGfc11mJ98b5j7D385txz3nLLLbek+b+5x4Tralquy/X0Tq7H9TUd1+cGmp4bcEPNwA25kWbkRtxYM3FjbqKZuQk31SzclJtpVm7GzTUbN+cWmp1bcEvNwS25ld7Frbi15uTW3EZzcRtuq7m5LbfTu7kdl9Pb+B57lseE22s9bs8dtD534I7agDtyJ23InbizNuLO3EUbcxfuqk24K3fTptyNu2sz7s49tDn34J7agntyL23Jvbi3tuLe/KC25gf5IW3DD3Efbct9+GFtxw9zeS3HeexNXhN+RDvwI/yoduRH+THtxI/x49qZH+cntAs/wU9qV36S+2o37sv9tDv34/7ag/vzAO3JA3ig9uKBPEh78yAerA/yYB6iD/EQHqp9eCgP04d5GN+r5TmvPchnwsP1UR7OI/QxHsEj9XEeyaP0CR7Fo/VJHs1jtC+P4bHaj8fyOO3P43i8DuDxPEEH8gSeqIN4Ik/SwTyJJ+sQnsxTdChP4ak6jKdyBb2X81nr/CY8TUfwNJ6uI3k6z9BRPINn6mieybN0DM/i2TqWZ/McHcdzeK6O57k8TyfwPJ6vE3k+L9BJvIAX6mReyE/pFH6KF+lUXsQVtQLnt6YFTHixTufF/LTO4Kf5GZ3Jz/CzOouf5ed0Nj/Hz+scfp5f0Ln8Ar+o8/hFfknn80v8si7gl3mJLuQl/Io+xa/wq7qIX+VKWpELWLuCJrxUn+alvEyf4WW8XJ/l5bxCn+MVvFKf55W8Sl/gVbxaX+TV/Jq+xK/xGn2Z1/DruoRf5zf0FX6D39RX+U2urJW4oDUqZMJv6TJ+i9/W5fw2v6Mr+B1+V1fyu/yeruL3+H1dze/zB/oaf8BrdQ2v5Q/1df6Q1+kbvI7X65u8nqtoZS5kLQqb8AZ9mzfwRn2HN/ImfZc38WZ9jzfzFn2ft/BH+gF/xFt1LW/lbfohb+OPdR1/zJ/oev6Eq2oVLuyei5jwp7qRP+XPdBN/xp/rZv6cv9At/AV/qR/xl/yVbuWveLtu4+38tX7MX/M3+gl/w9W0Khdxb0VN+Fv9jL/l7/Rz/o6/1y/4e/5Bv+Qf+Ef9in/kn3Q7/8Q/69f8M/+i3/AvXF2rcVH3UMyEf9Xv+Ffeod/zDt6pP/BO3qU/8i7+TX/i33i3/sy7eY/+wnv4Pq3OxVxrcRP+XXfw77xXd/Je3qe7eB/v1994Px/Q3XyA/9A9/Affr/dxcddUwoT/1L38Jx/UfXyQD+l+PsSH9QAf5iP6Bx/hB/R+LuHcJU34qB7ko3xMD/ExPq6H+Tif0CN8gmvoA1zSOUqZ8Ek9xif5Lz3Of/EpPcGnuKbW4FKOVdqET+tffJrP6Ck+w7W0Jpf2N2VM+Kye4bNcW2txGb8ra8J1tDaX1dtvSfy/c7cknlel4azJEj3PMeFs+jfHhLPrBY4J59CLHBO+Sy9xTDinXuaYcC69wjHh3HqVY8J36z8cE75Hr3FMOI9e55hwXv2XY8L59D+OCefXGxwTLqA3OSZcUG9JlnBMuJAm40JcWJNzYU7x/3tLwmnsWzxrTMtF7GM2LsJFNTsX5WKag4txcb2Li3MJzckluKTm4pJcSnNzKS6td3NpLqP3cBkuq3m4LJfTvFyOy2s+Ls/3an6+lytoAa7AFbUgV+RKWogrcWUtzJU5pabg2K/Ym3gefCdXsV9FuQpX1WJclatpca7G1bUEV+f7tCTfx/drKb6fH9DS/ADX0DJcg2tqWa7JtbQc1+LaWp5rcx29l+twXa3AdbmeVuR6XF8rcX1uoJW5AafSlBz7EnsQz+bTcUP7UpUbciOtxo24sVbnxtxE7+Mm3FTv56bcTB/gZtxca3BzbqE1uQW31FrckltpbW7FrbUOt+Y2WpfbcFutx225ndbndtxeG3B7vlVTcax/rHW8HpKeO1j/RtyBO2pj7sidtAl34s7alDtzF23GXbirNueu3E1bcDfuri25O/fQVtyDe2pr7sm9tA334t7alnvzg9qOH+SHtD0/xLfprRzrHGsarzVl4D7WuSP34Ye1Ez/Mj2hnfoQf1S78KD+mXfkxfly78eP8hHbnJ/hJ7cFPcl/tyX25n/biftxfe3N/HqAP8gAeqA/xQL5db+NYz1i7eL0uIw+yng/zIB6sj/BgHqKP8hAeqo/xUB6mj/MwHq5P8HAeoU/yCB6pfXkkj9J+PIpHa38ezWN0AI/hsTqQx3KS3s6xbrFG8dpmJh5n3QbzOB6vQ3g8T9ChPIEn6jCeyJN0OE/iyTqCJ/MUHclTeKqO4qk8TUfzNJ6uY3g6z9CxPINTaxLH+sRaxOu9mXmm9RnPM3mWTuBZPFsn8myeo5N4Ds/VyTyX5+kUnsfzdSrP5wU6jRfwQp3OC/kpncFP8R2ammMd4p7jte4svMg6zOJFvFhn82J+Wufw0/yMzuVn+Fmdx8/yczqfn+PndQE/zy/oQn6BX9Sn+EVOo3dw3G/cW7yen5Vfcr+L+SV+WZ/ml3mJPsNL+BV9ll/hV/U5fpWX6vO8lJfpC7yMl+uLvJzTahqO+4p7iPcmZOMV7utlXsErdQmv5FX6Cq/i1foqr+bXdCm/xmt0Ga/h13U5v853alqO649rjfdTZOc3XP9KfoPf1FX8Jr+lq/ktfltf47f5HV3D7/C7+jq/y+n0To7rjGuK93rk4Pdc55v8Hr+vb/H7/IG+zR/wWn2H1/KH+i5/yOk1Hcf1xLnj/SZ38TrX8z6v4/X6Aa/nDbqWN/BG/ZA3cgZNz3HeOEe8tyUnb3Le9byJN+sG3sxbdCNv4YyageP4cax4v0wu/sjxN/NHvFW38FbOpBk5jhN/E++1yc3bHGcrb+PMmonj38fv4v04d3MW/z4zx8+jt3l+9XGyxPOqc3wsWaKf8DE+rp/ycT6hn/EJPqmf80n+S7/gv/iUfsmn+LR+xaf5jG7nM3xWv+azfE6/4XN8Xr/l8/y3fsd/8wX9ni/wRf2BL/Il/ZEv8WX9iS/zFf2Zr/BV/YWv8q/6f///f459jD077xlk+B/7eJz/4Wt6gq/xdT3J1/lf/Yv/5f/0FP/HN/Q03+CbeoZv8i3JEz3LMeFkeo5jwsn1PMeEU+jfHBNOqRc4JpxKL3JM+Fa9xDHh2/Qyx4Rv1yscE07SqxwT3uFnv3LsV+zN354Th1MnT/Qax4Tv0OscE06j/3JMOK3+xzHhO/UGx4TT6U2OCafX2Jv0JpxBk3EGzqjJOSNn0hSciTNrSs7MWTQVZ+Gseitn5Wx6G2fj7Ho7Z+ccmsQ5eKc9i/3ZaW9iDy54Zh++y77cwXdxTk3DOTmXpuVcnFvv5Nx8t6bju/keTc/3cB7NwHk4r2bkvJxPM3E+zq+ZOT8X0CxcgAtqVi7IhTQbF+LCmp0LcxHNwUV4V7JEYx/Csf6x1he9ThIuav1zclEuprm4GBfX3FycS+jdXIJL6j1ckktpHi7FpTUvl+Yymo/LcFnNz2W5nBbgclxeC3J5vlcL8b1cQQtzBa6oRbgi/5Ys0VjvcKxzrOklr0GFK1nnYlyJK2txrsxVtARX4apakqtyNS3F1bi6lubqfJ+W4fv4fi3L9/MDWo4f4BpanmtwTb2Xa3ItrcC1uLZW5Nq8O1misa7hWM9Yu8texwvXsZ6VuQ7X1Spcl+tpVa7H9bUa1+cGWp0bcEO9jxtyI72fG3FjfYAbcxOtwU24qdbkptxMa3Ezbq61uTnvSZZorF841i3W6IrXPMMtrFtdbsEttR635FZan1txa23ArbmNNuQ23FYbcVtup425HbfXJtyeO2hT7sAdtRl35E7anDvx78kSjXUKx/rEWlz1OnC4s/VpyZ25i7biLtxVW3NX7qZtuBt317bcnXtoO+7BPbU99+Re2oF7cW/tyL35Qe3ED/LeZInGeoRjHeKe//EaePgh69CFH+I+2pX78MPajR/mR7Q7P8KPag9+lB/TnvwYP669+HF+QnvzE/ykPshP8r5kicZ9h+N+496ueZ0/3Nf99uG+3E8f5n7cXx/h/jxAH+UBPFAf44E8SB/nQTxYn+DBPESf5CG8P1micX/huK+4h+vesxAe6r768VAepv15GA/XATycR+hAHsEjdRCP5FE6mEfxaB3Co/lAskTjPsJx/XGt/3qfRXiM6x/GY3isDuexPE5H8DgeryN5PE/QUTyBJ+ponsh/JEs0rjcc1xnX9J/3gIQnuc6xPIkn6ziezFN0PE/hqTqBp/I0ncjT+M9kicZ1heN64tw3vA8lPN31TObpPEOn8AyeqVN5Js/SaTyLDyZLNM4fjvPGOW56z0t4tvPO4Nk8R2fyHJ6rs3guH0qWaJwnHMePY/3v4UGyhOc5/hyex/N1Ls/nw8kSjeMddpz4m3ivTTJe4DjzeQEfSZZo/N0R/z5+F+/HSc5HNX5/1M+jKVz2wuSJ/36OCa9PnuhTvJ436CLewBt1MW/kTfo0b+LN+gxv5i36LG/hj/Q5/oi36vO8lbfpC7yNP9YX+WP+RF/iT/hTfZk/5c90CX/Gn+sr/Dl/oa/yF/ylLuUv+Stdxl/xdl3O23mFJr8l4djH2LMdnomEv7aPG/hr/kY38jf8rW7ib/k73czf8fe6hb/nH/Qj/oF/1K38I/+k2/gn/lk/5p/5F/2Ef+Ff9VP+lXfoZ7yDd+rnvJN36Re8i3/TL/k33q1f8W7eo9t5D6/UFRz7FXuz07OS8O/26xv+nffqt7yX9+l3vI/36/e8nw/oD3yA/9Af+Q/+U3/iP/mg/swH+ZD+wof4sP7Kh/mI7uAjfFR38lE+prv4GB/X3/g4n9DdfIJP6h4+yat0Jce+xB7s8gwl/Jd92ct/8Sndx6f4tO7n03xGD/AZPqt/8Fk+p3/yOT6vB/k8/62H+G++oIf5Al/UI3yRL+lRvsSX9Rhf5it6nK/wVT3BV/kfPcn/8GpdxbH+sda/ebYSvmb9T/E1vq6n+Tr/q2f4X/5Pz/J/fEPP8Q2+qef5Jsf/oj1vrRNvkk04mV7gmHByvcgx4RR6iWPCKfUyx4RT6RWOCd+qVzkmfJv+wzHh1/xsNcc6x5ru9swlfHuKRK9zTDhJ/+WYcGr9j2PCd+gNjgmn0ZscE06rsaZpTfhOTcZ3cjpNzuk4vabg9JxBU3IGzqipOCNn0ls5E2fW2zgzr7HWsa5rrGms3R7PYsJZrGcSZ+Gsmpqzcja9g7Nxdk3D2TmHpuUcfJfeyXdxTk3HOTmXpudcnFszcG6+WzPy3XyPZuJ7OI9m5jz8evJEY/3CsW6xRr97RhPOa92ycl7Op9k4H+fX7JyfC2gOLsAF9S4uyIU0JxfiwpqLC3MRzc1FuKjezUW5mN7Dxbi45uHi/EbyRGOdwrE+sRZ7PbsJl7A++bgEl9T8XJJLaQEuxaW1IJfmMlqIy3BZLcxluZwW4XJcXotyeb5Xi/G9XEGLcwV+M3misR7hWIe4532e6YQrWoeSXJEraSmuxJW1NFfmKlqGq3BVLctVuZqW42pcXctzdb5P7+X7+H6twPfzW8kTjfsOx/3Gve33rCf8gPutxA9wDa3MNbimVuGaXEurci2urdW4NtfR6lyH6+p9XJfr6f1cj99OnmjcXzjuK+7hgGdA4fruqwbX5wZakxtwQ63FDbmR1uZG3FjrcGNuonW5CTfVetyU30meaNxHOK4/rvUPz4bCzVx/A27GzbUhN+cW2ohbcEttzC25lTbhVtxam3Jrfjd5onG94bjOuKY/PTMKt3GdzbkNt9UW3JbbaUtux+21FbfnDtqaO/B7yRON6wrH9cS5D3qWFO7oetpyR+6k7bgTd9b23Jm7aAfuwu8nTzTOH47zxjkOecYU7uq8nbgrd9PO3I27axfuzh8kTzTOE47jx7EOe/YU7uH43bgH99Tu3JPXJk80jheO48TfHPFMKtzLcXpyL/4weaLxd+H49/G7o55RhdclTzR+H46fR1N4ftU7ReJ5VUx4RopEH+QZPFMf4pk8S/vwLJ6tD/NsnqOP8Byeq4/yXJ6nj/E8nq+P83xeoE/wAl6oT/JCfkr78lO8SPvxIl6s/XkxP60D+Gl+RgfyM/ysDuJn+TkdzM/x8zqEn+fpmuqWhGMfY8/iWeNT/IJ9nMkv8Is6i1/kl3Q2v8Qv6xx+mZfoXF7Cr+g8foVf1fn8Ki/VBbyUl+lCXsbL9Slezit0Ea/glbqYV/IqfZpX8Wp9hlfza/osv8Zr9Dlew6/r8/w6T9PpHPsVexPPgxfxG/brRX6D39SX+E1+S1/mt/htXcJv8zv6Cr/D7+qr/C6/p0v5PX5fl/H7/IEu5w94ra7gtfyhruQPeZ2u4nW8Xlfzet6gr/EG3qhreCNv0td5E0/VaRz7EnsQz+YX82b78iZv5i36Fm/hj/Rt/oi36ju8lbfpu7yNP9b3+GP+RN/nT/hT/YA/5c90LX/Gn+uH/Dl/oev4C/5S1/OX/JVu4K94u27k7fy1buKveYpO5Vj/WOt4PeRp/sb6b+Fv+Fv9iL/l73Qrf8ff6zb+nn/Qj/kH/lE/4R/5J/2Uf+Kf9TP+mX/Rz/kX/lW/4F95h37JO3infsU7eZdu5138m37Nv/FkncKxzrGm8VrTM7zbOn/Lu3mPfsd7+Hf9nn/nvfoD7+V9+iPv4/36E+/nA/ozH+A/9Bf+g//UX/lPPqg7+CAf0p18iA/rLj7MR/Q3PsKTdDLHesbaxet1z/JR67mHj/Ix/Z2P8XHdy8f5hO7jE3xS9/NJ/ksP8F98Sv/gU3xa/+TTfEYP8hk+q4f4LJ/Tw3yOz+sRPs8TdRLHusUaxWubz/Hf1u0Y/80X9Dhf4It6gi/yJT3Jl/iy/sWX+Yqe4it8VU/zVf5Hz/A/fE3P8jW+ruf4Ov+r5/lfnqATOdYn1iJe732e/7M+F/g/vqEX+Qbf1Et8k29Jmehljgkn0yscE06uVzkmnEL/4ZhwSr3GMeFUep1jwrfqvxwTHu9nEzjWIe45Xut+gW9LmegNjgnfrjc5Jpykcc9JJpxak3FqvkOT8x2cRlNwGk6rKTkt36mp+E5Op7dyOh5nLeK+x7nnuLd4Pf9FTu9+b+f0nEGTOANn1NSckTPpHZyJM2sazsxZNC1n4ax6J2flbJqOs/HYFInG/YXjvuIe4r0JL3F295WBs3MOzcg5+C7NxHdxTs3MOTmXZuFcnFuzcm6+W7Px3TwmRaJxH+G4/rjWeD/Fy3yP68/B93AevYvzcF7NyXk5n+bifJxfc3N+LqB3cwEenSLRuN5wXGdcU7zXYwkXdJ15uCAX0rxciAtrPi7MRTQ/F+GiWoCL8qgUicZ1heN64tzxfpNXuJjrKcTFuLgW5uJcQotwCS6pRbkkj0yRaJw/HOeNc8R7W17lUs5bnEtxaS3BpbmMluQyPCJFonGecBw/jhXvl1nKZR2/NJflclqGy/HwFInG8cJxnPibeK/NMi7vOOW4PA9LkWj8XTj+ffwu3o+znIemSDR+H46fR+Nly3jmce///a6+CT+pFfhJ7qsVuS/300rcj/trZe7PA7QKD+CBWpUH8iCtxoN4sFbnwTxE7+MhPFTv56E8TB/gYTxca/BwHqE1eQSP1Fo8kkdpbR7Fo7UOj+YxWpfH8Fitx2O5kybdknB9e9bAhMdpXx7H47Ufj+cJ2p8n8EQdwBN5kg7kSTxZB/FknqKDeQpP1SE8lafpUJ7G03UYT+cZOpxn8EwdwTN5lo7kWTxbR/FsnqOjeQ7P1TE8l+fpWJ7HnbUTN7A3DU14vo7n+bxAJ/ACXqgTeSE/pZP4KV6kk3kRL9YpvJif1qn8ND+j0/gZflan87P8nM7g5/h5ncnP8ws6i1/gF3U2v8gv6Rx+iV/WufwyL9F5vIS7aGduaA8amfAruoBf4Vd1Ib/KS/UpXsrLdBEv4+W6mJfzCn2aV/BKfYZX8ip9llfxan2OV/Nr+jy/xmv0BV7Dr+uL/Dq/oS/xG/ymvsxv8lu6hN/irtqFG1nrxib8tr7Kb/M7upTf4Xd1Gb/L7+lyfo/f1xX8Pn+gK/kDXqureC1/qKv5Q16nr/E6Xq9reD1v0Nd5A2/UN3gjb9I3eRNv1rd4M3fTrtzYmjYx4S36Dm/hj/Rd/oi36nu8lbfp+7yNP9YP+GP+RNfyJ/ypfsif8me6jj/jz3U9f85f6Ab+gr/Ujfwlf6Wb+Cverpt5O3fXbtzE2jU14a/1I/6av9Gt/A1/q9v4W/5OP+bv+Hv9hL/nH/RT/oF/1M/4R/5JP+ef+Gf9gn/mX/RL/oV/1a/4V96h23kH99Du3NQaNTPhnfoN7+Rd+i3v4t/0O/6Nd+v3vJv36A+8h3/XH/l33qs/8V7epz/zPt6vv/B+PqC/8gH+Q3fwH9xTe3Aza9HchP/UXfwnH9Tf+CAf0t18iA/rHj7MR/R3PsJHdS8f5WO6j4/xcd3Px/mEHuATfFL/4JPcS3tyc/fcwoT/0oP8F5/SQ3yKT+thPs1n9Aif4bN6lM/yOT3G5/i8Hufz/Lee4L/5gp7kC9xbe3EL99bShC/qKb7Il/Q0X+LLeoYv8xU9y1f4qp7jq/yPnud/+Jr+zdf4ul7g6/yg9uaW7qGVCf+rl/hf/k8v8398Q6/wDb6pV/kmx39oX3UP//uP7lQJJ9NrHBNOrtc5JvyQnz3IrVxraxNOkSrR/zgmnFJvcEw4ld7kmPCtGtd6qwnfpsn4Nr5dk/Pt3Mc9xPX2cZ1xTW1SJiac5DpTchKn1lScmu/QW/kOTqO3cRpOq7dzWn44ZaJxXQ+7njh325SJCd/pelLznZxO7+B0nF7TcHrOoGk5Az+SMtE4/yPOG+dolzIx4YzOm44zciZNz5k4s2bgzPxoykTjPI86fhyrfcrEhLM4fibOwlk1M2flx1ImGsd7zHHibzqkTEw4m+Nk5Wz8eMpE4+8e9+/jdx1TJib8hMbvn/DzaOpbEpP9/353nwm31BzcklvpXdyKW2tObs1tNBe34baam9tyO72b23F7vYfbcwfNwx24o+bljtxJ83En7qz5uTN30QLchbtqQe7K3bQQd+PuWpi7cw8twj24pxblntxLi3EvbqF33JLwffasugn31lbcmx/U1vwgP6Rt+CHuo225Dz+s7fhhfkTb8yP8qHbgR/kx7ciP8ePaiR/nJ7QzP8FPahd+kvtqV+7L/bQb9+P+2p378wDtwQN4oPbkgTxIe/Egbq4tuLq9qWbCg/VBHsxD9CEewkO1Dw/lYfowD+Ph+ggP5xH6KI/gkfoYj+RR+jiP4tH6BI/mMfokj+Gx2pfH8jjtx+N4vPbn8TxBB/AEnqgDeSJP0kE8iZtpc65mD6qa8GQdwpN5ig7lKTxVh/FUnqbDeRpP1xE8nWfoSJ7BM3UUz+RZOppn8Wwdw7N5jo7lOTxXx/FcnqfjeR7P1wk8nxfoRF7AC3USL+Sm2oyrWusqJvyUTuGneJFO5UW8WKfxYn5ap/PT/IzO4Gf4WZ3Jz/JzOouf4+d1Nj/PL+gcfoFf1Ln8Ir+k8/glflnn88u8RBfwEn5FF/Ir3ESbchVrWtmEX9VF/Cov1cW8lJfp07yMl+szvJxX6LO8glfqc7ySV+nzvIpX6wu8ml/TF/k1XqMv8Rp+XV/m1/kNXcJv8Jv6Cr/JjbUJV7Z2lUz4LV3Kb/Hbuozf5nd0Ob/D7+oKfpff05X8Hr+vq/h9/kBX8we8Vl/jtfyhruEPeZ2+zut4vb7B63mDvskbuJE25krWqKIJb9S3eSNv0nd4E2/Wd3kzb9H3eAt/pO/zR7xVP+CtvE3X8jb+WD/kj/kTXcef8Ke6nj/lz3QDf8YNtRFXtBYVTPhz3cSf8xe6mb/gL3ULf8lf6Uf8FW/Xrbydv9Zt/DV/ox/zN/ytfsLf8nf6KX/H3+tn/D030IZcwT3fa8I/6Bf8A/+oX/KP/JN+xT/xz7qdf+Zf9Gv+hX/Vb/hX3qHf8g7eqd/xTt6l3/Murq8N+F73Vt6Ef9Mf+TferT/xbt6jP/Me/l1/4d95r/7Ke3mf7uB9vF938n4+oLv4ANfT+lzePZQz4T90N//Bf+oe/pMP6u98kA/pXj7Eh3UfH+Yjup+P8FE9wEe5rtbjcq61rAkf0z/5GB/Xg3ycT+ghPsEn9TCf5L/0CP/Fp/Qon+I6WpfLuqYyJnxaj/NpPqMn+Ayf1ZN8ls/pX3yOz+spPs+1tQ6Xce7SJvy3nuG/+YKe5Qt8Uc/xRb6k5/kS19LaXNo5SpnwZb3Al/mKXuQrfFUv8VWuqbW4lGOVNOF/9Ar/w9f0Kl/jGlqTS/qbEiZ8Xa/xdX5Aa3AJvytuwvfrA1xcb/W23jv/D3lNOJ+m5XycX9Nwfi6gd3ABLqipuSAX0iQuxIX1di7MRfQ2LsJF9VYuysU0FRfj4pqSi3MJTcEluKQm55JcSpNxKS6tt3BpLqM3UyVchsvqDY4Jl9P/OCZcXv/lmHB8dns0/m9Bw3ntWR4Tvlfz871cQQtwBa6oBbkiV9JCXIkra2GuzFW0CFfhqlqUq3I1LcbVuLoW5+p8n5bg+/h+Lcn38wNaih/gGlqaa3BNLcM1uZaW5VpcW8txba6j5bkOx+fxR2PfwnnszT0mXFcrcF2upxW5HtfXSlyfG2hlbsANtQo35EZalRtxY63GjbmJVucm3FTv46bcTO/nZtxcH+Dm3EJrcAtuqTW5JbfSWtyKW2ttbs1ttA634fguhTr2KnyPPbjbhNtqPW7L7bQ+t+P22oDbcwdtyB24ozbijtxJG3Mn7qxNuDN30abchbtqM+7K3bQ5d+Pu2oK7cw9tyT24p7bintxLW3Mv7q1tuDfH9120sSfhu611bhN+UNvxg/yQtueHuI924D78sHbkh/kR7cSP8KPamR/lx7QLP8aPa1d+nJ/QbvwEP6nd+Unuqz24L/fTntyP+2sv7s8DtDcP4Pjukd7WPpzbmuYy4YH6EA/kQdqHB/FgfZgH8xB9hIfwUH2Uh/IwfYyH8XB9nIfzCH2CR/BIfZJH8ijty6N4tPbj0TxG+/MYHqsDeCzH970MsMbhXNYupwmP00E8jsfrYB7PE3QIT+CJOpQn8iQdxpN4sg7nyTxFR/AUnqojeSpP01E8jafraJ7OM3QMz+CZOpZncnyXzlhrGc5pje4y4Vk6nmfxbJ3As3mOTuQ5PFcn8Vyep5N5Hs/XKTyfF+hUXsALdRov5Kd0Oj/Fi3QGL+LFOpMXc3wf0UxrFr7LWuQw4ad1Nj/Nz+gcfoaf1bn8LD+n8/g5fl7n8/P8gi7gF/hFXcgv8kv6FL/EL+sifpmX6GJewvHdTYutTTiHe85uwq/oM/wKv6rP8qu8VJ/jpbxMn+dlvFxf4OW8Ql/kFbxSX+KVvEpf5lW8Wpfwao7vs1piDcLZ3Vs2E35NX+XXeI0u5TX8ui7j1/kNXc5v8Ju6gt/kt3Qlv8Vv6yp+m9/R1fwOx3d5rXav4WzuIasJv6tr+F1+T1/n9/h9fYPf5w/0Tf6A1+pbvJY/1Lf5Q16n7/A6ju8re8c9hbO61iwmvF7f4/W8Qd/nDbxRP+CNvEnX8iberB/yZt6i63gLx3evrXPt4SyuKbMJf6Qb+CPeqht5K2/TTbyNP9bN/DF/olv4E47vi9viGsOZnTuTCX+qW/lT/ky38Wf8uX7Mn/MX+gl/wfFddp+4lnAm58howl/qZ/wlf6Wf81e8Xb/g7Rzfp/eFc4YzOlYGE/5av+Kv+Rvdzt9wfHffdscOZ/A36U34W/2Gv+X4PsBvHCOc3u/SmXB8l+C3/m04nZ/d4vnVd7cmnlfFhP/Q7/kP/lN/4D/5oP7IB/mQ/sSH+LD+zIf5iP7CR/io/spH+Zju4GN8XHfycT6hu/gEn9Tf+CT/pbv5Lz6le/gUn9bf+TSf0b18hs/qPj7L53Q/n+PzeoDPc3z2VTTVLQnfac/SmvDf+if/zRf0IF/gi3qIL/IlPcyX+LIe4ct8RY/yFb6qx/gq/6PH+R++pif4Gl/Xk3yd/9W/+F/+T0/xf3xDT/MNvqln+CbHl3eesWf/+yLP2xJOpuc4Jpxcz3NMOD7P7Lw9DKe1N2lMOMVtiV7gmHBKvcgx4VR6iWPCt+pljgnfplc4Jny7XuWYcJL+wzHh1HqNY8J36HWOCafRfzkmnFb/45jwnXqDY8Lp9CbHhNNr7E16E86gyTgDZ9TknJHjs+iisT/hNPYhns3fwZnsS0rOxJk1FWfmLHorZ+Gsehtn5Wx6O2fj7JrE2TmHpuYcfJfewXdxTk3DOTmXpuVcnFvv5Nx8t6bju/keTc/3cB7NwHk4r2bkvByfF5jRnoRj/WOt4/WQ1JzP+mfmfJxfs3B+LqBZuQAX1GxckAtpdi7EhTUHF+YiehcX4aKak4tyMc3Fxbi45ubiXELv5hJcUu/hklxK83ApLq15uTTHZzfmtfbhWOdY03itKYnLWOf8XIbLagEuy+W0IJfj8lqIy/O9Wpjv5QpahCtwRS3KFbmSFuNKXFmLc2WuoiW4ClfVklyVq2kprsbVtTRX5/i8zNLWOBzrGWsXr9fdzvdZz7J8H9+v5fh+fkDL8wNcQ+/lGlxTK3BNrqUVuRbX1kpcm+toZa7DdbUK1+V6WpXrcX2txvW5gVbnBhyfRVrdWoZj3WKN4rXN27ihdbufG3IjfYAbcWOtwY25idbkJtxUa3FTbqa1uRk31zrcnFtoXW7BLbUet+RWWp9bcWttwK05Ps+1gTULx/rEWsTrvbdyG+vTiNtwW23MbbmdNuF23F6bcnvuoM24A3fU5tyRO2kL7sSdtSV35i7airtwV23NXTk++7a1tQnHOsQ9x2vdqbibdWjL3bi7tuPu3EPbcw/uqR24J/fSjtyLe2sn7s0Pamd+kB/SLvwQ99Gu3Ifj84C7WoNw3G/cW7yen5Ifdr/d+WF+RHvwI/yo9uRH+THtxY/x49qbH+cn9EF+gp/Uh/hJ7qt9uC/HZyH3ca/huK+4h3hvQgru574e4X7cXx/l/jxAH+MBPFAf54E8SJ/gQTxYn+TBPET78hCOz3vu657Ccf1xrfF+iuQ81PX356E8TAfwMB6uA3k4j9BBPIJH6mAeyaN0CI/i+OzqIa49HNcZ1xTv9UjGo13nMB7NY3Q4j+GxOoLH8jgdyeN4vI7i8Ryftz3KNYbjeuLc/3tzD09wPWN4Ak/UsTyRJ+k4nsSTdTxP5vgs8PGuJRznjXPEe1tiwlOcdyJP4ak6iafyNJ3M0zg+j3yyc4bj+HGsG95HE57u+FN5Os/QaTyD47PPpzl2OI4Tf/Of9+CEZzrODJ7J//uMdccIx7+P3/3rfTrh+Cz2mf5tOH4eTeb51azbEs+rYsIv35bobH6Zl+gcXsKv6Fx+hV/VefwqL9X5vJSX6QJexst1IS/nFfoUr+CVuohX8ipdzKt4tT7Nq/k1fYZf4zX6LK/h1/U5fp3f0Of5DX5TX+A3+S19kd/it/Ulfpvjs6+i8flX4djH2LN41vg9v2Mfl/A7/K6+wu/ye/oqv8fv61J+nz/QZfwBr9XlvJY/1BX8Ia/TlbyO1+sqXs8bdDVv4I36Gm/kTbqGN/FmfZ038xZ9g7fwR/omf8Rb9S3eytv0bd7G8Xlmb9vDcOxX7E08D/6BP7Zf7/LH/Im+x5/wp/o+f8qf6Qf8GX+ua/lz/kI/5C/4S13HX/JXup6/4u26gbfz17qRv+ZvdBN/w9/qZv6Wv9Mt/B1/rx/x9/yDbuUf+Efdxj9yfBbdNnsVjn2JPYhn8z/yT/blE/6Jf9ZP+Wf+RT/jX/hX/Zx/5R36Be/gnfol7+Rd+hXv4t90O//Gu/Vr3s179Bvew7/rt/w779XveC/v0+95H+/XH3g/H9Af+QDH5wX+aE/+51ut963m//yH9f+Z/+A/9Rf+kw/qr3yQD+kOPsSHdScf5iO6i4/wUf2Nj/Ix3c3H+Lju4eN8Qn/nE3xS9/JJ/kv38V98SvfzKT6tB/g0x2c3HrD24Vjn/63prYkJn7HOf/IZPqsH+Syf00N8js/rYT7Pf+sR/psv6FG+wBf1GF/kS3qcL/FlPcGX+Yqe5Ct8Vf/iq/yPnuJ/+Jqe5mscn5d52hqHYz1j7eL1ul/4uvU8y9f5Xz3H//J/ep7/4xv6N9/gm3qBb/Ittyd6kWPCyfQSx4ST62WOCafQKxwTTqlXOSacSv/hmPCteo1jwvFZpNesZTjWLdYoXtv8lW+7PdF/OSZ8u/7HMeEkvcEx4dR6k2PCd2is0R0mnEaTcRpOq8k5Ld+pKfhOTqcpOR2n11ScnjPorZyB4/Nco7FO4VifWIt4vXcHZ7Q+t3NGzqRJnIkza2rOzFn0Ds7CWTUNZ+VsmpazcXa9k7NzDk3HOfguTc93cU7NwDk5Pvs2g7UJxzrEPcdr3Ts5l3XIxLk4t2bm3Hy3ZuG7+R7NyvdwHs3GeTivZue8nE9zcD7Or3dxfi6gObkAx+cB57QG4bjfuLd4PX8XF3S/ubkgF9K7uRAX1nu4MBfRPFyEi2peLsrFNB8X4+Kan4tzCS3AJTg+C7mAew3HfcU9xHsTfuOS7qsQl+RSWphLcWktwqW5jBblMlxWi3FZLqfFuRyX1xJcnuPznku4p3Bcf1xrvJ9iN9/r+kvxvVxBS3MFrqhluCJX0rJciStrOa7MVbQ8V+H47Oryrj0c1xnXFO/12MNVXWcFrsrVtCJX4+paiavzfVqZ7+P7tQrf//+vMWWicV3huJ44d7zf5Hd+wPVU4we4hlbnGlxT7+OaXEvv51r//7pSup6UCcd54xzx3pa9XNt5a3BtrqM1uQ7X1Vpcl+PzyGs5ZziOH8eK98vs43qOX4frcX2ty/U5Pvu8rmOH4zjxN/Fem/3cwHHqcwOOz1Ov7xjh+Pfxu3g/zgGOz2Jv4N+G4+fRVD5KLj7vO77/LCbc5fZEG3BMuKs25JhwN23EMeHu2phjwj20CceEe2pTjgn30mYcE+6tzTkm/KC24JjwQ9qSY8J9tBXHhB/W1hwTfkTbcEz4UW3LMeHHtB3HhB/X9hwTfkI7cEz4Se3IMeHOGp9lFo59jD2L70ubxn3tY1fuy/20G/fj/tqd+/MA7cEDeKD25IE8SHvxIB6svXkwD9EHeQgP1Yd4KA/TPjyMh+vDPJxH6CM8gkfqozySR+ljPIpH6+M8msfoEzyGx+qTPJY7aWeO/Yq9ie9Xm8rj7Fc/HsfjtT+P5wk6gCfwRB3IE3mSDuJJPFkH82SeokN4Ck/VoTyVp+kwnsbTdThP5xk6gmfwTB3JM3mWjuJZPFtH82yeo2N4Ds/VsTyXO2onjn2JPYjvY5vC8+zLeJ7H83UCz+cFOpEX8EKdxAv5KZ3MT/EincKLeLFO5cX8tE7jp/kZnc7P8LM6g5/l53QmP8fP6yx+nl/Q2fwCv6hz+EV+SefyS9xBO3Ksf6x1fH/bZH7Z+s/nl3mJLuAl/Iou5Ff4VX2KX+WluoiX8jJdzMt4uT7Ny3mFPsMreKU+yyt5lT7Hq3i1Ps+r+TV9gV/jNfoir+HX9SV+ndtrB451jjWN73ubxG9Y5yX8Br+pr/Cb/Ja+ym/x27qU3+Z3dBm/w+/qcn6X39MV/B6/ryv5ff5AV/EHvFZX81r+UF/jD3mdruF1vF5f5/XcTttzrGesXXw/3ETeYD3f5A28Ud/ijbxJ3+ZNvFnf4c28Rd/lLfyRvscf8VZ9n7fyNv2At/HHupY/5k/0Q/6EP9V1/Cl/puv5M26r7TjWLdZogu+UC39u3Tby5/yFbuIv+EvdzF/yV7qFv+Lt+hFv5691K3/N3+g2/oa/1Y/5W/5OP+Hv+Hv9lL/nH/Qz/oHbaFuO9Ym1GO+798I/Wp8v+Ef+Sb/kn/hn/Yp/5l90O//Cv+rX/Cvv0G94B+/Ub3kn79LveBf/pt/zb7xbf+Dd3FrbcKxD3PM438kX3mMdfuI9/Lv+zL/zXv2F9/I+/ZX38X7dwfv5gO7kA/yH7uI/+E/9jf/kg7qbD3Irbc1xv3FvY31XX/iQ+/2dD/Fh3cuH+Yju4yN8VPfzUT6mB/gYH9c/+Dif0D/5BJ/Ug3ySW2orjvuKexjjO/zCf7mvw/wXn9IjfIpP61E+zWf0GJ/hs3qcz/I5PcHn+Lye5PPcQltyXH9c62jf7Rf+2/Wf4r/5gp7mC3xRz/BFvqRn+RJf1nN8ma/oeb7CzbUFx3XGNY3ynX/hq67zAl/lf/Qi/8PX9BJf4+t6ma/zv3qF/+Vm2pzjeuLcI30XYPg/1/MP/8c39Brf4Jt6nW9yvMHkunP/780mSQk39bNmHOeNc4zwHYHhZEmJ3uCYcHK9yTHhFBrnSGHCTfwsztPEOeJYw313YDil4yfnlJxKU3Aqbux8cbxwHCf+ZpjvFAzf6jip+FZudHui8Xfh+Pfxu6G+azDc8PZE4/fh+Hk0uc9vj8/7jv9+jgnflZRodY4J59RqHBPOpVU5Jpxbq3BM+G6tzDHhe7QSx4TzaEWOCefVChwTzqf3ckw4v5bnmHABLccx4YJalmPChbQMx4QLa2mOCRfRUhwTLqolOSZcTEtwTLj4/y//b/7POTTe8hiOfYw9i//e7sQl7GNOLsElNReX5FKam0txab2bS3MZvYfLcFnNw2W5nOblclxe83H5/79/mp/v5QpagCtwRS3IFbmSFuJKXFkLc2WuokW4ClfVolyVq2kxrsbVtThX5+yag2O/Ym/iv8878n32qyTfx/drKb6fH9DS/ADX0DJcg2tqWa7JtbQc1+LaWp5rcx29l+twXa3AdbmeVuR6XF8rcX1uoJW5ATfUKtyQG2lVbsSNtRo35iZanZtwNs3OsS+xB/Hf8x24qX25n5tyM32Am3FzrcHNuYXW5BbcUmtxS26ltbkVt9Y63JrbaF1uw221Hrfldlqf23F7bcDtuYM25A7cURtxR+6kjbkTd9Ym3JmzajaO9Y+1jv/+b89drH8z7sJdtTl35W7agrtxd23J3bmHtuIe3FNbc0/upW24F/fWttybH9R2/CA/pO35Ie6jHbgPP6wd+WF+RDvxI/yoduZHOYtm5VjnWNN4XtCOH7POXfkxfly78eP8hHbnJ/hJ7cFPcl/tyX25n/biftxfe3N/HqAP8gAeqA/xQB6kfXgQD9aHeTAP0Ud4CA/VR3koZ9YsHOsZaxfPF9ryMOv5OA/j4foED+cR+iSP4JHal0fyKO3Ho3i09ufRPEYH8BgeqwN5LI/TQTyOx+tgHs8TdAhP4Ik6lCdyJs3MsW6xRvE8og1Psm7DeRJP1hE8mafoSJ7CU3UUT+VpOpqn8XQdw9N5ho7lGTxTx/FMnqXjeRbP1gk8m+foRJ7DGTUTx/rEWsTzi9Y81/pM5rk8T6fwPJ6vU3k+L9BpvIAX6nReyE/pDH6KF+lMXsSLdRYv5qd1Nj/Nz+gcfoYzaEaOdYh7jucdrfhZ6zCPn+XndD4/x8/rAn6eX9CF/AK/qE/xi/ySLuKX+GVdzC/zEn2al/Ar+gy/wuk1A8f9xr3F85GW/Kr7fY5f5aX6PC/lZfoCL+Pl+iIv5xX6Eq/glfoyr+RVuoRX8Wp9hVdzOk3PcV9xDy08Uwm/5r6W8mu8RpfxGn5dl/Pr/Iau4Df4TV3Jb/Jbuorf4rd1Nb/Nd2o6juuPa23uGUz4Hde/ht/hd/V1fpff0zf4PX5f3+T3+QN9iz/gtfo2r+W0eifHdcY1NfPMJvyh63yXP+R1+h6v4/X6Pq/nDfoBb+CNupY3chpNy3E9ce6mniWFN7medbyJN+t63sxbdANv4Y90I3/Ed2gajvPGOZp4xhTe6rybeStv0y28jT/Wj/hjTq13cBw/jtXYs6fwJ46/jT/hT/Vj/pSTNDXHceJvGnkmFf7McT7lz/h2TeL49/G7hp5VhW/z72/n+Hk0uf8zz/gs98+TEhP+Sx/gmPAprcEx4dNak2PCZ7QWx4TPam2OCZ/TOhwTPq91OSb8t9bjmPAFrc8x4YvagGPCl7Qhx4QvayOOCV/RxhwTvqpNOCb8jzblmPA1bcYx4evanGPC/2oLjgmf1Pj+wZP2MfbsCxP+T0/xf3xDT/MNvqln+CbHA88z9uz/f4FlOJme45hwcj3PMeEU+jfHhFPqBY4Jp9KLHBO+VS9xTPg2vcwx4dv1CseEk/Qqx4RT6z8cE75Dr3FMOI1e55hwWv2XY8In/Owkf2FvvjThO1MneoNjwun0JseE02vsTXoTzqDJOANn1OSckTNpCs7EmTUlZ+YsmoqzcFa9lbNyNr2Ns3F2vZ2zcw5N4hx8l6bmuzin3sE5OZem4VycW9Nybj5uz2J/jtuX2IOvkhITvtu+pOO7+R5Nz/dwHs3AeTivZuS8nE8zcT7Or5k5PxfQLFyAC2pWLsiFNBsX4sKanQtzEc3BRbio3sVFuZjm5GJcXHNxcS6hubkEH0tKNPbhmPWPtd6elJhwSet/D5fkUpqHS3FpzculuYzm4zJcVvNzWS6nBbgcl9eCXJ7v1UJ8L1fQwlyBK2oRrsiVtChX4spajCtzFS3OVbiqluCqfDQp0Vjvo9Y51vTrpMSEq1nnUlyNq2tprs73aRm+j+/Xsnw/P6Dl+AGuoeW5BtfUe7km19IKXItra0WuzXW0EtfhulqZ63I9rcL1uL5W5fp8JCnRWNcj1jPW7pukxIQbWM/q3IAb6n3ckBvp/dyIG+sD3JibaA1uwk21JjflZlqLm3Fzrc3NuYXW4RbcUutyS26l9bgVt9b63JoPJyUa63fYusUafZuUmHAb69aQ23BbbcRtuZ025nbcXptwe+6gTbkDd9Rm3JE7aXPuxJ21BXfmLtqSu3BXbcVduZu25m58KCnRWKdD1ifW4rukxIS7W5+23J17aDvuwT21PffkXtqBe3Fv7ci9+UHtxA/yQ9qZH+I+2oX78MPalR/mR7QbP8IHkxKN9ThoHeKev09KTPhR69CDH+XHtCc/xo9rL36cn9De/AQ/qQ/yk9xXH+K+3E/7cD/urw9zfx6gj/AA/jMp0bjvP91v3NsPSYkJD3S/j/FAHqSP8yAerE/wYB6iT/IQHqp9eSgP0348jIdrfx7OI3QAj+A/khKN+/vDfcU9/JiUmPBI9zWIR/IoHcyjeLQO4dE8RofyGB6rw3gsj9PhPI7H6wgezweSEo37OOD641p/SkpMeILrH8UTeKKO5ok8ScfwJJ6sY3kyT9FxPIWn6nieyvuTEo3r3e8645p+TkpMeJrrnMjTeLpO4uk8QyfzDJ6pU3gmz9KpPIv3JSUa17XP9cS5f0lKTHi265nOs3mOzuA5PFdn8lyep7N4Hu9NSjTOv9d54xy/JiUmPN955/B8XqBzeQEv1Hm8kH9PSjTO87vjx7F2JCUm/JTjL+CneJEu5EW8JynRON4ex4m/2ZmUmPBix1nEi3l3UqLxd7v9+/jdrqTEhH/T+P1vfh6N/3P9eOax+v9+t8mEf9BV/AP/qCv5R/5JV/BP/LMu55/5F13Gv/CvupR/5R36Ku/gnfoK7+RduoR38W/6Mv/Gu/Ul3s179EXew7/rC/w779XneS/v0+d4H+/XZ3k/H9Bn+AD/oU/zH/y9xiOL7+1j7NlGE/5Tf+Q/+aD+xAf5kP7Mh/iw/sKH+Yj+ykf4qO7go3xMd/IxPq67+Dif0N/4BJ/U3XyS/9I9/Bef0t/5FJ/WvXyaz+g+PsNndT+f5XN6gM/xef2Dz/N3+j1vtDcbTPhvPch/8wU9xBf4oh7mi3xJj/AlvqxH+TJf0WN8ha/qcb7K/+gJ/oev6Um+xtf1L77O/+op/pf/09P8H9/QM3yDb+pZvsnxP/TO2pv//Q/AOxJOpuc5Jvytn33HG+zBehNOfkeiFzgmnEIvckw4pV7imHAqvcwx4Vv1CseEb9OrHBO+Xf/hmHCSXuOYcGq9zjHhO/Rfjgmn0f84JpxWb3BM+E69yTHhdBp7kM6E02syTs/f2JvYh2+sf6z1utSJCWew/ik4A2fUlJyRM2kqzsSZ9VbOzFn0Ns7CWfV2zsrZNImzcXZNzdk5h97BOfguTcN3cU5Nyzk5l97JuTi3puPcfLem57v569SJxnp/bZ1jTT9MnZjwPdY5I9/DeTQT5+G8mpnzcj7Nwvk4v2bl/FxAs3EBLqjZuSAX0hxciAvrXVyYi2hOLsJFNRcX5WKam4txcb2bi/P21InGum63nrF2a1MnJlzCeubhElxS83JJLqX5uBSX1vxcmstoAS7DZbUgl+VyWojLcfn/V9NdRnlVtg0fHsZxdIZukEYkRUC6WxGUFKW7pVs6RUIJEaSxFQQkFIPutLuxuzvf93z2cX841+9YDLP3FfrBWcv/aDmuzjW0PNfgmlqBa3Itrci1uLZW4tp8KjNpnN8p5xZntCczmXAd51aZ63BdvYrrcj2twvW4vlbl+txAq3EDbqhXc0NupNW5ETfWGtyYm2hNbsJNtRY35WZam5vxycykcU4nnU+cxe7MZMLNnU9dbs4ttB634JZan1vyNdqAr+FrtSFfy620Ebfi67QxX8ettQm35jbalNvw9dqMr+cTmUnjPE44h9jzrsxkwjc4hxZ8A7fVltyW2+k13I7b67XcnjtoK+7AHfU67sidtDV34hu1Dd/InfV67szHM5PGvo/bb+xtZ2Yy4Zvsty3fxDdrO76Zu2h77sJdtQN35W7akbtxd+3E3bmH3sg9uKd25p58LDNp7O+YfcUeHs9MJtzLvm7mXtxbu3Bv7qNduQ/31W7cl/tpd+7H/bUH9+cB2pMH8NHMpLGPo9Yfa92RmUx4oPX35oE8SPvwIB6sfXkwD9F+PISHan8eysN0AA/jI5lJY71HrDPWtD0zmfAt1jmIb+HhOpiH8wgdwiN4pA7lkTxKh/EoPpyZNNZ12Hri3dsykwmPtp7hPJrH6Agew2N1JI/lcTqKx/GhzKTx/kPeG+94LDOZ8HjvHcPjeYKO5Qk8UcfxRD6YmTTec9Dz41lbM5MJT/L8CTyJJ+tEnswHMpPG8w54TnzPlsxkwrd6zmS+lfdnJo3v2+/vx9cezUwmvE/j6/v8efR//xtmfPZ3/PdzTPiOrEnXc0z4Tl3HMeGlupZjwst0DceEl+s9HBNeoas5JnyXruKY8Eq9m2PCd+vK/zlr4lV6F8eEV+sKjgnfo8s5JrxGl3FMeK0u5ZjwOr2TY8Lr9Q6OCW/QJRzzf5+lr4s5JjxF47P4w3GPcWfx39vneZN7vJM38WZdypv5Xl3G9/J9upzv4/t1Bd/PD+hd/AA/qCv5QX7of/fID/HDuoof5kd0NT/Cj+o9/Chv0TW8hbfqWt7Kj+k6foy36Xrextt1A2/nHbqRd/BUncJxX3E38d/n5/hx97WZH+edei/v5F16H+/i3Xo/7+Y9+gDv4Sf0QX6Cn9SH+Eneqw/zXn5KH+Gn+Gl9lJ/mZ3QLP8PP6lZ+lvfpY7yP9+s23s8HdDsf4IO6gw/yNJ3KcS9xB2f9DCV8yL3s5EN8WHfxYT6iu/kIH9U9fJSP6RN8jI/rk3ycT+hePsEn9Sk+yaf0aT7Fp/UZPs1n9Fk+w2d1H5/lc7qfz/F5PcDn+Tk9yM/xdJ3Gcf5x1mf8bCX8vPM/zM/zC3qEX+AX9Si/yC/pMX6JX9bj/DK/oif4FX5VT/Kr/Jqe4tf4dT3Nr/Mbeobf4Df1LL/Jb+k5fovf1vP8Nr+jz/E7PEOnc5xznOlpP3MJv+ucX+B3+T19kd/j9/Ulfp8/0Jf5A76gr/AF/lBf5Q/5I32NP+KP9XX+mD/RN/gT/lTf5E/5M32LP+PP9W3+nL/Qd/gLnqkzOM4zzu6Un8WEv3Se7/GX/JW+z1/x1/oBf83f6AX+hr/VD/lb/k4/4u/4e/2Yv+cf9BP+gX/UT/lH/kk/45/4Z/2cf+Zf9Av+hWfpTI5zizM66Wc04V+d21f8K/+mX/Nv/Lt+w7/zH/ot/8F/6nf8J/+l3/Nf/Lf+wH/zP/oj/8P/6k/8L/+nP/N/nJIt6S8cE57tz2ZxnE+cxQk/uwlnyZb0N44Jp+rvHBO+SP/gmHCa/skx4Yv1L44Jp+vfHBO+RP/hmPCl+i/HhDP0P44JZ2qcRaYJz/FncR5znEXs+bif6YSzOodUzsrZ9CLOxtk1jbNzDr2Yc3BOTeecnEsv4VycWy/l3JxHMzgP59VMzstznUvsOxz7jb0d87OecD77zcb5OL9m5/xcQHNwAS6oObkgF9JcXIgLa24uzJdpHr6Mi2heLsLzsiaN/YVjX7GHo34GFC5qX/m5KBfTAlyMi2tBLs4ltBCX4JJamEtyKb2MS3FpLcKleX7WpLGPcKw/1nrEz4bCl1t/Mb6cy2hxLsNXaAm+gstqSS7L5bQUl+PyWprL821Zk8Z6w7HOWNNhPzMKV7DOMlyBK+oVXJEraVmuxFdqOb6SK2t5rswLsiaNdYVjPfHuQ36WFL7KeiryVVxFK3EVrqpXclWuppW5Gt+eNWm8PxzvjXcc9DOm8NXeW4Wv5upalatzDa3GNXhh1qTxnnA8P551wM+ewjU9vzrX5Fpag2vxoqxJ43nheE58z34/kwrX9pxaXJsXZ00a3xeOvx9f2+dnVOElWZPG18Px59FL/VqZcLWUZMJ1fM9iruN76+oiruu99XQh17OX+no713duDXQBN3B3DfU2buifq0Y6n2PCjXUex4Sb6FyOCTfVORwTbqazOSbcXGdxTLiFzuSYcEudwTHha3Q6x4Sv1WkcE26lUzkmfJ1O4ZhwqfSk8fOrcNxj3FnVlGTCrd1jXW7NbbQet+HrtT5fzzdoA76B22pDbsvttBG34/bamNtzB23CHbijNuWO3EmbcSe+UZvzjdxZW3Bnvklb8k18s17DN3MXvZa7cFdtxV25m17H3bhketK4t3DcV9xNlZRkwt3dVxvuzj30eu7BPfUG7sm9tC334t7ajntzH23PfbivduC+3E87cj/ur524Pw/QG3kAD9TOPJAH6U08iAfrzTyYh2gXHsJDtSsP5WHajYdxifSkcT/huJe4g6tSkgnf4l568C08XHvycB6hvXgEj9TePJJHaR8exaO1L4/mMdqPx/BY7c9jeZwO4HE8XgfyeJ6gg3gCT9TBPJEn6RCexJN1KE/mW3UY38rF05PGPYTj/OOsK6ckE57i/IfzFJ6qI3gqT9ORPI2n6yiezjN0NM/gmTqGZ/IsHcuzeLaO49k8R8fzHJ6rE3guz9OJPI/n6ySez7fpZL6NF+itvICLpSeN8w7HOceZXpmSTPh25zyVb+eFOo0X8iKdzot4sc7gxbxEZ/ISvkNn8R18p87mO3mpzuGlvEzn8jJervN4Oa/Q+byC79Lb+C5eqQt4JRdNTxrnGo7zjLOrlJJM+G7nuZDv5lW6iFfxal3Mq/keXcL38Bq9g9fwWr2T1/I6XcrreL0u4/W8QZfzBt6oK3gjb9K7eBNv1pW8mYukJ43zC8e5xRlVTEkmfK9zW8X38n26mu/j+/Uevp8f0DX8AD+oa/lBfkjX8UP8sK7nh/kR3cCP8KO6kR/lLbqJt/BW3cxb+bL0pHFO4TifOIsKKcmEH3M+9/FjvE3v5228XR/g7bxDH+Qd/Lg+xI/zTn2Yd/IufYR38W59lHfzHt3Ce/gJ3cpPcOH0pHEe4TiH2HP5lGTCTzqHbfwk79XtvJef0h38FD+tj/PT/Izu5Gf4Wd3Fz/I+3c37eL/u4f18QJ/gA1woPWnsOxz7jb2VS0kmfNB+9/JBPqRP8SE+rE/zYT6iz/ARPqrP8lE+pvv4GB/X/XycT+gBPsEF05PG/sKxr9hD2ZRkwift6xCf5FN6mE/xaT3Cp/mMHuUzfFaP8Vk+p8f5HJ/XE3yeC6QnjX2EY/2x1itSkgk/Z/2n+Dl+Xk/z8/yCnuEX+EU9yy/yS3qOX+KX9Ty/zPnTk8Z6w7HOWFOZlGTCr1jn8/wKv6ov8Kv8mr7Ir/Hr+hK/zm/oy/wG50tPGusKx3ri3ZenJBN+03pe5Tf5LX2N3+K39XV+m9/RN/gdzpueNN4fjvfGO0qnJBN+13vf4nf5PX2b3+P39R1+n/OkJ433hOP58axSKcmEP/D89/gDvqDv8wXOnZ40nheO58T3lExJJvyh51zgDzlXetL4vnD8/fhaiZRkwjnTk8bXw/Hn0RT/+0z8/2Zf+gye8EfZkj7DMeGP9WmOCX+iT3FM+FPdyzHhz/RJjgl/rk9wTPgL3cMx4S91N8eEv9JdHBP+WndyTPgbfZxjwt/qDo4Jf6fbOSb8vW7jmPAP+hjHhH/UrRwT/km3cEz4Z32UY8ItUpLGzyJb+AysuLMvfKZS+Bf3+DH/wr/qJ/wr/6af8m/8u37Gv/Mf+jn/wX/qF/wn/6Vf8l/8t37Ff/M/+jX/w//qN/wv/6ff8n+ckj3pdxwTzqLfc0w4VX/gmPBF+iPHhNP0J44JX6w/c0y4eUrSuLdw3Ffczec+aymcnj3prxwTvkR/45jwpfo7x4Qz9A+OCWfqnxwTzqp/cUw4m/7NMeHs+g/HhHPovxwTzqn/cUw4l8bd5DLh3JqFc3MeTeU8nFcv4rycT9M4H+fXizk/N0tJGvcTjnuJO/jMZzCFC7iXS7gAF9RLuSAX0gwuxIU1kwvzZZqVL+Mimo2LcFHNzkW5mObgYlxcc3JxLqG5uASX1NxckktpHi7FpTUvl+bLNR9fzmU0P5fhpilJ4x7Ccf5x1p/6bKbwFc6/IF/BZbUQl+VyWpjLcXm9jMtzBS3CFbiiFuWKXEmLcSW+UovzlVxZS3BlvkpL8lVcRUtxFa6qpbkqV9PLuRpfrWX4am6SkjTOOxznHGf6ic9sCld3zmW5OtfQclyDa2p5rsm1tALX4tpakWtzHa3EdbiuXsl1uZ5W5npcX6/i+txAq3ADbqhVuSE30mrciBvr1dz4f05JGucajvOMs/vYZzmFmzjPGtyEm2pNbsrNtBY34+Zam5tzC63DLbil1uWWfI3W42v4Wq3P13IrbcCt+DptyNdxa23ErbmNNuY23CjFmaYkjnOLM/rIZzyFr3duTfl6vkGb8Q3cVptzW26nLbgdt9eW3J476DXcgTvqtdyRO2kr7sQ36nV8I3fW1tyZb9I2fBM3THGOKYnjfOIsPvTZT+Gbnc8NfDN30bbchbtqO+7K3bQ9d+Pu2oG7cw/tyD24p3bintxLb+Re3Fs7c2/uozdxH26QkjTOIxznEHu+4DOhwn2dQxfuy/20K/fj/tqN+/MA7c4DeKD24IE8SHvyIB6svXgwD9HePISHah8eyvVTksa+w7Hf2NsHPisqPMx++/EwvkX78y08XAfwcB6hA3kEj9RBPJJH6WAexaN1CI/mMTqUx3C9lKSxv3DsK/bwvs+QCo+1r1t4LI/T4TyOx+sIHs8TdCRP4Ik6iifyJB3Nk3iyjuHJXDclaewjHOuPtb7ns6XCt1r/OL6Vp+h4nsJTdQJP5Wk6kafxdJ3E03mGTuYZXCclaaw3HOuMNb3rM6fCM61zCs/kWTqVZ/FsncazeY5O5zk8V2fwXK6dkjTWFY71xLvf8VlU4XnWM4vn8XydzfP5Np3Dt/ECncsLuFZK0nh/ON4b73jbZ1SFb/fe+Xw7L9TbeCEv0gW8iGumJI33hOP58ay3fHZVeLHnL+TFvEQX8RKukZI0nheO58T3vOkzrcJ3eM4SvoOrpySN7wvH34+vveEzrsJXpySNr4fjz6Px+VfxY6z4vO/N2ZMJ36snOCZ8n57kmPD9eopjwg/oaY4JP6hnOCb8kJ7lmPDDeo5jwo/oeY4JP6rPcUx4iz7PMeGt+gLHhB/TFzkmvE1f4pjwdn2ZY8I79BWOCT+ur3JMeKe+xjHhXfo6x4TzZ0ka9xne7M42mfBuvY938x69n/fwE/oAP8FP6oP8JO/Vh3gvP6UP81P8tD7CT/Mz+ig/w8/qFn6W9+lW3sf79THezwd0Gx/gg7qdD/Ih3cGH+LA+zof5iO7kI3xUd/FRzpcladxbeJO72WjCx3QPH+Pj+gQf5xP6JJ/gk7qXT/IpfYpP8Wl9mk/zGX2Gz/BZfZbP8jndx+f4vO7n8/ycHuDn+Hk9yM/zC3qIX+AX9TC/yC/pEX6JX9aj/DLnzZI07ie80R1sMOFX9Di/wq/qCX6VX9OT/Bq/rqf4dX5DT/Mb/Kae4Tf5LT3Lb/Hbeo7f5nf0PL/D7+pz/C6/p8/ze/y+vsDv8wf6In/AF/QlvsAf6sv8IefJkjTuIbzBWa834Y/0Vf6IP9bX+GP+RF/nT/hTfYM/5c/0Tf6MP9e3+HP+Qt/mL/hLfYe/5K/0Xf6Kv9b3+Gv+Rt/nb/hb/YC/5e/0An/H3+uH/D3nzpI0zju83pmuM+Ef9GP+gX/UT/hH/kk/5Z/4Z/2Mf+Zf9HP+hX/VL/hX/k2/5N/4d/2Kf+c/9Gv+g//Ub/hP/ku/5b/4b/2O/+Z/9Hv+h3NlSRrnGl7n7Naa8L/6I//L/+lP/B+n5Ej6M8eEs+gvHBNO1V85JnyR/sYx4TT9nWPCF+sfHBNO1z85JnyJ/sUx4Uv1b44JZ+g/HBPOmSVpnF94rTNaY8KZOZL+xzHhrBpnlNWEs2kWzsbZNZWzcw69iHNwTk3jnJxLL+ZcnFvTOTfn0Us4D+fVSzkv59MMzsc5siSNcwqvcR73ZE8mnN/5ZOX8XECzcQEuqNm5IBfSHFyIC2tOLsyXaS6+jItobi7CRTUPF+VimpeLcXHNx8U5e5akcR7hOIfY8+rsyYRLOIcCXIJLakEuyaW0EJfi0lqYS/PlehlfzmW0CJfhK7QoX8FltRiX5XJanMtxtixJY9/h2G/sbVX2ZMLl7bckl+cKWoorcEUtzRW5kl7OlfhKLcNXcmW9givzVVqWr+IqWo6rcNYsSWN/4dhX7OHu7MmEq9pXBa7K1bQiV+OrtRJfzdX1Sq7ONbQy1+CaehXX5FpahWtxZpaksY9wrD/WujJ7MuHa1l+Na3MdvZrrcF2tznW5ntbgelxfa3J9bqC1uAFnZEka6w3HOmNNd2VPJtzQOutwQ26kdbkRN9Z63JibaH1uwk21ATflS7MkjXWFYz3x7hXZkwk3s55G3Iyba2Nuzi20CbfgltqUW/IlWZLG+8Px3njH8uzJhK/x3uZ8DV+rLfhabqUtuRWnZ0ka7wnH8+NZy7InE77O86/l67i1tuLWfHGWpPG8cDwnvmdp9mTCbTynNbfhtCxJ4/vC8ffja3dmTyZ8UZak8fVw/Hn0Ij+/ip93FM5IJnx9jqSbOCZ8g27kmHBb3cAx4Xa6nmPC7XUdx4Q76FqOCXfUNRwT7qT3cEz4Rl3NMeHOuopjwjfp3RwTvllXcky4i97FMeGuuoK7+vegmy7nbv7Z7K7LuLt/jnroUu7hn4Weeif3dM97U91pSuK4x7izQhnJhHu5xxu4F/fWttyb+2g77sN9tT335X7agftxf+3I/XmAduIBPFBv5IE8SDvzIB6sN/FgHqI38xAeql14KA/TrjyMb9FufAsP1+48nEdoDx7BI7Unj+QnU5PGvYXjvuJuCmYkEx7lvnrzKB6tfXg0j9G+PIbHaj8ey+O0P4/j8TqAx/MEHcgTeKIO4ok8SQfzJJ6sQ3gy36pD+VaeosN4Ck/VW3gqT9PhPI2n6wiezjN0JM/gJ1KTxv2E417iDgpkJBOe6V5G80yepWN4Fs/WsTyb5+g4nsNzdTzP5Xk6gefxfJ3I8/k2ncS38QKdzAv4dr2Vb+eFOoUX8iKdyot4sU7jxbxEp/MSvkNn8B28JzVp3EM4zj/OOn9GMuE7nf8svpOX6mxeyst0Di/j5TqXl/MKnccr+C6dz3fxSr2NV/LduoDv5lV6O6/i1bqQV/M9uojv4TW6mNfwWl3Ca3md3sHreHdq0jjvcJxznGm+jGTC653zUl7PG3QZb+CNupw38iZdwZt4s97Fm/leXcn38n16N9/H9+sqvp8f0NX8AD+o9/CD/JCu4Yf4YV3LD/Mjuo4f4V2pSeNcw3GecXZ5M5IJP+o8N/CjvEU38hbeqpt4Kz+mm/kx3qb38jbervfxdt6h9/MOflwf4Md5pz7IO3mXPsS7eLc+zLt5jz7Ce3hnatI4v3CcW5xRnoxkwk84ty38BD+pW/lJ3quP8V5+SrfxU/y0buen+Rndwc/ws/o4P8v7dCfv4/26i/fzAd3NB/ig7uGD/Hhq0jincJxPnEXujGTCh5zPk3yID+tePsxH9Ck+wkf1aT7Kx/QZPsbH9Vk+zid0H5/gk7qfT/IpPcCn+LQe5NO8IzVpnEc4ziH2nCsjmfAZ53CYz/BZPcJn+Zwe5XN8Xo/xeX5Oj/Nz/Lye4Of5BT3JL/CLeopf5Jf0NL/E21OTxr7Dsd/YW86MZMIv2+9Zfplf0XP8Cr+q5/lVfk2f49f4dX2eX+c39AV+g9/UF/lNfktf4rd4W2rS2F849hV7yJGRTPht+3qF3+Z39FV+h9/V1/hdfk9f5/f4fX2D3+cP9E3+gC/oW3yBH0tNGvsIx/pjrdkzkgl/aP3v8If8kb7LH/HH+h5/zJ/o+/wJf6of8Kf8mV7gz3hratJYbzjWGWvKlpFM+HPr/Ig/5y/0Y/6Cv9RP+Ev+Sj/lr/hr/Yy/5i2pSWNd4VhPvDtrRjLhb6znC/6Gv9Uv+Vv+Tr/i7/h7/Zq/50dTk8b7w/HeeEdmRjLhH7z3W/6Bf9Tv+Ef+Sb/nn/iR1KTxnnA8P56VkZFM+GfP/5F/5l/0J/6FH05NGs8Lx3Piey7NSCb8q+f8wr/yQ6lJ4/vC8ffja5dkJBN+MDVpfD0cfx5N9f8PVrw4+X2DMeHfciStwDHh37U8x4T/0HIcE/5Ty3JM+C+9gmPCf2sZjgn/o5dzTPhfLc0x4f+0FMeEU3ImLckx4SxagmPCqVqcY8IXaTGOCadpUY4JX6xFOCacrpdxTPgSLcwx4Uu1EMeEh6cl/f/X93+Oe4w7i98V+TBn5Ez6O8eEM/UPjgln1T85JpxN/+KYcHb9m2PCOfQfjgnn1H85JpxL/+OYcG6NO8ttwnk0C+fhvJrKeTmfXsT5OL+mcX4uoBdzAS6o6VyQC+klXOh/96eXcmG+JS1p3Fs47ivuJn6f50N8mfvK5Mu4iGblIlxUs3FRLqbZuRgX1xxcnEtoTi7BJTUXl+RSmptLcWnNw6X5cs3Ll3MZzcdl+ArNz1dwWS3AZbmcFuRyXF4LcXmuoIW5Ag9LSxr3E457iTuI3636IFd0L0W4IlfSolyJr9RifCVX1uJcma/SEnwVV9GSXIWraimuytW0NFfjq/VyvpqraxmuzjX0Cq7BNbUs1+RaWo5rcW0tz7W5jlbgOjw0LWncQzjOP846fp/tA1zX+VfiulxPr+R6XF8rc31uoFdxA26oVbghN9Kq3IgbazVuzE30am7CTbU6N+VmWoObcXOtyc25hdbiFtxSa3NLvkbr8DU8JC1pnHc4zjnONH5X8P18rXOux9dyK63Prfg6bcDXcWttyK25jTbiNny9Nubr+QZtwjdwW23KbbmdNuN23F6bc3vuoC24A3fUltyRO+k13IkHpyWNcw3HecbZxe9bvo9vdJ6t+EburNdxZ75JW/NNfLO24Zu5i17PXbir3sBduZu25W7cXdtxd+6h7bkH99QO3JN7aUfuxb21E/fmQWlJ4/zCcW5xRvG7qe/lPs6tM/fhvnoT9+V+ejP34/7ahfvzAO3KA3igduOBPEi78yAerD14MA/RnjyEh2ovHsrDtDcP44FpSeOcwnE+cRbx+7o38y3Opy/fwsO1Hw/nEdqfR/BIHcAjeZQO5FE8WgfxaB6jg3kMj9UhPJbH6VAex+N1GI/nAWlJ4zzCcQ6x5/hd5Zt4gnMYzhN4oo7giTxJR/IknqyjeDLfqqP5Vp6iY3gKT9WxPJWn6TiextN1PE/n/mlJY9/h2G/sLX4f+0aeYb8TeQbP1Ek8k2fpZJ7Fs/VWns1zdArP4bk6lefyPJ3G83i+Tuf53C8taewvHPuKPcTvlt/At9nXTL6NF+gsXsC362y+nRfqHF7Ii3QuL+LFOo8X8xKdz0u4b1rS2Ec41h9rXZ+ZTPgO61/Ad/CdejvfyUt1IS/lZbqIl/FyXczLeYUu4RXcJy1prDcc64w1rctMJnyXdd7Jd/FKXcor+W5dxnfzKl3Oq3i1ruDV3DstaawrHOuJd6/NTCZ8j/Ws5Ht4jd7Na3itruK1vE5X8zrulZY03h+O98Y71mQmE17vvWt4PW/QtbyBN+o63sg905LGe8Lx/P97dmYy4U2ev4E38WbdyJu5R1rSeF44nhPfszozmfC9nrOZ7+XuaUnj+8Lx9+NrqzKTCXdLSxpfD8efRzP+/3/6/z9jjrYp + + diff --git a/template/Conte69.R.midthickness.4k_fs_LR.surf.gii b/template/Conte69.R.midthickness.4k_fs_LR.surf.gii new file mode 100644 index 0000000..7dbe801 --- /dev/null +++ b/template/Conte69.R.midthickness.4k_fs_LR.surf.gii @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 + 0 0 0 1 + + + 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 + + + + + + + + + + + + + eJw03QW0lWW7qGEpdSFIl4DS3Uij0t3dqdh0d3cLtqK02IG0YItdgCChNEhKCgpnP/+8zhnnGfc11mJ98b5j7D385txz3nLLLbek+b+5x4Tralquy/X0Tq7H9TUd1+cGmp4bcEPNwA25kWbkRtxYM3FjbqKZuQk31SzclJtpVm7GzTUbN+cWmp1bcEvNwS25ld7Frbi15uTW3EZzcRtuq7m5LbfTu7kdl9Pb+B57lseE22s9bs8dtD534I7agDtyJ23InbizNuLO3EUbcxfuqk24K3fTptyNu2sz7s49tDn34J7agntyL23Jvbi3tuLe/KC25gf5IW3DD3Efbct9+GFtxw9zeS3HeexNXhN+RDvwI/yoduRH+THtxI/x49qZH+cntAs/wU9qV36S+2o37sv9tDv34/7ag/vzAO3JA3ig9uKBPEh78yAerA/yYB6iD/EQHqp9eCgP04d5GN+r5TmvPchnwsP1UR7OI/QxHsEj9XEeyaP0CR7Fo/VJHs1jtC+P4bHaj8fyOO3P43i8DuDxPEEH8gSeqIN4Ik/SwTyJJ+sQnsxTdChP4ak6jKdyBb2X81nr/CY8TUfwNJ6uI3k6z9BRPINn6mieybN0DM/i2TqWZ/McHcdzeK6O57k8TyfwPJ6vE3k+L9BJvIAX6mReyE/pFH6KF+lUXsQVtQLnt6YFTHixTufF/LTO4Kf5GZ3Jz/CzOouf5ed0Nj/Hz+scfp5f0Ln8Ar+o8/hFfknn80v8si7gl3mJLuQl/Io+xa/wq7qIX+VKWpELWLuCJrxUn+alvEyf4WW8XJ/l5bxCn+MVvFKf55W8Sl/gVbxaX+TV/Jq+xK/xGn2Z1/DruoRf5zf0FX6D39RX+U2urJW4oDUqZMJv6TJ+i9/W5fw2v6Mr+B1+V1fyu/yeruL3+H1dze/zB/oaf8BrdQ2v5Q/1df6Q1+kbvI7X65u8nqtoZS5kLQqb8AZ9mzfwRn2HN/ImfZc38WZ9jzfzFn2ft/BH+gF/xFt1LW/lbfohb+OPdR1/zJ/oev6Eq2oVLuyei5jwp7qRP+XPdBN/xp/rZv6cv9At/AV/qR/xl/yVbuWveLtu4+38tX7MX/M3+gl/w9W0Khdxb0VN+Fv9jL/l7/Rz/o6/1y/4e/5Bv+Qf+Ef9in/kn3Q7/8Q/69f8M/+i3/AvXF2rcVH3UMyEf9Xv+Ffeod/zDt6pP/BO3qU/8i7+TX/i33i3/sy7eY/+wnv4Pq3OxVxrcRP+XXfw77xXd/Je3qe7eB/v1994Px/Q3XyA/9A9/Affr/dxcddUwoT/1L38Jx/UfXyQD+l+PsSH9QAf5iP6Bx/hB/R+LuHcJU34qB7ko3xMD/ExPq6H+Tif0CN8gmvoA1zSOUqZ8Ek9xif5Lz3Of/EpPcGnuKbW4FKOVdqET+tffJrP6Ck+w7W0Jpf2N2VM+Kye4bNcW2txGb8ra8J1tDaX1dtvSfy/c7cknlel4azJEj3PMeFs+jfHhLPrBY4J59CLHBO+Sy9xTDinXuaYcC69wjHh3HqVY8J36z8cE75Hr3FMOI9e55hwXv2XY8L59D+OCefXGxwTLqA3OSZcUG9JlnBMuJAm40JcWJNzYU7x/3tLwmnsWzxrTMtF7GM2LsJFNTsX5WKag4txcb2Li3MJzckluKTm4pJcSnNzKS6td3NpLqP3cBkuq3m4LJfTvFyOy2s+Ls/3an6+lytoAa7AFbUgV+RKWogrcWUtzJU5pabg2K/Ym3gefCdXsV9FuQpX1WJclatpca7G1bUEV+f7tCTfx/drKb6fH9DS/ADX0DJcg2tqWa7JtbQc1+LaWp5rcx29l+twXa3AdbmeVuR6XF8rcX1uoJW5AafSlBz7EnsQz+bTcUP7UpUbciOtxo24sVbnxtxE7+Mm3FTv56bcTB/gZtxca3BzbqE1uQW31FrckltpbW7FrbUOt+Y2WpfbcFutx225ndbndtxeG3B7vlVTcax/rHW8HpKeO1j/RtyBO2pj7sidtAl34s7alDtzF23GXbirNueu3E1bcDfuri25O/fQVtyDe2pr7sm9tA334t7alnvzg9qOH+SHtD0/xLfprRzrHGsarzVl4D7WuSP34Ye1Ez/Mj2hnfoQf1S78KD+mXfkxfly78eP8hHbnJ/hJ7cFPcl/tyX25n/biftxfe3N/HqAP8gAeqA/xQL5db+NYz1i7eL0uIw+yng/zIB6sj/BgHqKP8hAeqo/xUB6mj/MwHq5P8HAeoU/yCB6pfXkkj9J+PIpHa38ezWN0AI/hsTqQx3KS3s6xbrFG8dpmJh5n3QbzOB6vQ3g8T9ChPIEn6jCeyJN0OE/iyTqCJ/MUHclTeKqO4qk8TUfzNJ6uY3g6z9CxPINTaxLH+sRaxOu9mXmm9RnPM3mWTuBZPFsn8myeo5N4Ds/VyTyX5+kUnsfzdSrP5wU6jRfwQp3OC/kpncFP8R2ammMd4p7jte4svMg6zOJFvFhn82J+Wufw0/yMzuVn+Fmdx8/yczqfn+PndQE/zy/oQn6BX9Sn+EVOo3dw3G/cW7yen5Vfcr+L+SV+WZ/ml3mJPsNL+BV9ll/hV/U5fpWX6vO8lJfpC7yMl+uLvJzTahqO+4p7iPcmZOMV7utlXsErdQmv5FX6Cq/i1foqr+bXdCm/xmt0Ga/h13U5v853alqO649rjfdTZOc3XP9KfoPf1FX8Jr+lq/ktfltf47f5HV3D7/C7+jq/y+n0To7rjGuK93rk4Pdc55v8Hr+vb/H7/IG+zR/wWn2H1/KH+i5/yOk1Hcf1xLnj/SZ38TrX8z6v4/X6Aa/nDbqWN/BG/ZA3cgZNz3HeOEe8tyUnb3Le9byJN+sG3sxbdCNv4YyageP4cax4v0wu/sjxN/NHvFW38FbOpBk5jhN/E++1yc3bHGcrb+PMmonj38fv4v04d3MW/z4zx8+jt3l+9XGyxPOqc3wsWaKf8DE+rp/ycT6hn/EJPqmf80n+S7/gv/iUfsmn+LR+xaf5jG7nM3xWv+azfE6/4XN8Xr/l8/y3fsd/8wX9ni/wRf2BL/Il/ZEv8WX9iS/zFf2Zr/BV/YWv8q/6f///f459jD077xlk+B/7eJz/4Wt6gq/xdT3J1/lf/Yv/5f/0FP/HN/Q03+CbeoZv8i3JEz3LMeFkeo5jwsn1PMeEU+jfHBNOqRc4JpxKL3JM+Fa9xDHh2/Qyx4Rv1yscE07SqxwT3uFnv3LsV+zN354Th1MnT/Qax4Tv0OscE06j/3JMOK3+xzHhO/UGx4TT6U2OCafX2Jv0JpxBk3EGzqjJOSNn0hSciTNrSs7MWTQVZ+Gseitn5Wx6G2fj7Ho7Z+ccmsQ5eKc9i/3ZaW9iDy54Zh++y77cwXdxTk3DOTmXpuVcnFvv5Nx8t6bju/keTc/3cB7NwHk4r2bkvJxPM3E+zq+ZOT8X0CxcgAtqVi7IhTQbF+LCmp0LcxHNwUV4V7JEYx/Csf6x1he9ThIuav1zclEuprm4GBfX3FycS+jdXIJL6j1ckktpHi7FpTUvl+Yymo/LcFnNz2W5nBbgclxeC3J5vlcL8b1cQQtzBa6oRbgi/5Ys0VjvcKxzrOklr0GFK1nnYlyJK2txrsxVtARX4apakqtyNS3F1bi6lubqfJ+W4fv4fi3L9/MDWo4f4BpanmtwTb2Xa3ItrcC1uLZW5Nq8O1misa7hWM9Yu8texwvXsZ6VuQ7X1Spcl+tpVa7H9bUa1+cGWp0bcEO9jxtyI72fG3FjfYAbcxOtwU24qdbkptxMa3Ezbq61uTnvSZZorF841i3W6IrXPMMtrFtdbsEttR635FZan1txa23ArbmNNuQ23FYbcVtup425HbfXJtyeO2hT7sAdtRl35E7anDvx78kSjXUKx/rEWlz1OnC4s/VpyZ25i7biLtxVW3NX7qZtuBt317bcnXtoO+7BPbU99+Re2oF7cW/tyL35Qe3ED/LeZInGeoRjHeKe//EaePgh69CFH+I+2pX78MPajR/mR7Q7P8KPag9+lB/TnvwYP669+HF+QnvzE/ykPshP8r5kicZ9h+N+496ueZ0/3Nf99uG+3E8f5n7cXx/h/jxAH+UBPFAf44E8SB/nQTxYn+DBPESf5CG8P1micX/huK+4h+vesxAe6r768VAepv15GA/XATycR+hAHsEjdRCP5FE6mEfxaB3Co/lAskTjPsJx/XGt/3qfRXiM6x/GY3isDuexPE5H8DgeryN5PE/QUTyBJ+ponsh/JEs0rjcc1xnX9J/3gIQnuc6xPIkn6ziezFN0PE/hqTqBp/I0ncjT+M9kicZ1heN64tw3vA8lPN31TObpPEOn8AyeqVN5Js/SaTyLDyZLNM4fjvPGOW56z0t4tvPO4Nk8R2fyHJ6rs3guH0qWaJwnHMePY/3v4UGyhOc5/hyex/N1Ls/nw8kSjeMddpz4m3ivTTJe4DjzeQEfSZZo/N0R/z5+F+/HSc5HNX5/1M+jKVz2wuSJ/36OCa9PnuhTvJ436CLewBt1MW/kTfo0b+LN+gxv5i36LG/hj/Q5/oi36vO8lbfpC7yNP9YX+WP+RF/iT/hTfZk/5c90CX/Gn+sr/Dl/oa/yF/ylLuUv+Stdxl/xdl3O23mFJr8l4djH2LMdnomEv7aPG/hr/kY38jf8rW7ib/k73czf8fe6hb/nH/Qj/oF/1K38I/+k2/gn/lk/5p/5F/2Ef+Ff9VP+lXfoZ7yDd+rnvJN36Re8i3/TL/k33q1f8W7eo9t5D6/UFRz7FXuz07OS8O/26xv+nffqt7yX9+l3vI/36/e8nw/oD3yA/9Af+Q/+U3/iP/mg/swH+ZD+wof4sP7Kh/mI7uAjfFR38lE+prv4GB/X3/g4n9DdfIJP6h4+yat0Jce+xB7s8gwl/Jd92ct/8Sndx6f4tO7n03xGD/AZPqt/8Fk+p3/yOT6vB/k8/62H+G++oIf5Al/UI3yRL+lRvsSX9Rhf5it6nK/wVT3BV/kfPcn/8GpdxbH+sda/ebYSvmb9T/E1vq6n+Tr/q2f4X/5Pz/J/fEPP8Q2+qef5Jsf/oj1vrRNvkk04mV7gmHByvcgx4RR6iWPCKfUyx4RT6RWOCd+qVzkmfJv+wzHh1/xsNcc6x5ru9swlfHuKRK9zTDhJ/+WYcGr9j2PCd+gNjgmn0ZscE06rsaZpTfhOTcZ3cjpNzuk4vabg9JxBU3IGzqipOCNn0ls5E2fW2zgzr7HWsa5rrGms3R7PYsJZrGcSZ+Gsmpqzcja9g7Nxdk3D2TmHpuUcfJfeyXdxTk3HOTmXpudcnFszcG6+WzPy3XyPZuJ7OI9m5jz8evJEY/3CsW6xRr97RhPOa92ycl7Op9k4H+fX7JyfC2gOLsAF9S4uyIU0JxfiwpqLC3MRzc1FuKjezUW5mN7Dxbi45uHi/EbyRGOdwrE+sRZ7PbsJl7A++bgEl9T8XJJLaQEuxaW1IJfmMlqIy3BZLcxluZwW4XJcXotyeb5Xi/G9XEGLcwV+M3misR7hWIe4532e6YQrWoeSXJEraSmuxJW1NFfmKlqGq3BVLctVuZqW42pcXctzdb5P7+X7+H6twPfzW8kTjfsOx/3Gve33rCf8gPutxA9wDa3MNbimVuGaXEurci2urdW4NtfR6lyH6+p9XJfr6f1cj99OnmjcXzjuK+7hgGdA4fruqwbX5wZakxtwQ63FDbmR1uZG3FjrcGNuonW5CTfVetyU30meaNxHOK4/rvUPz4bCzVx/A27GzbUhN+cW2ohbcEttzC25lTbhVtxam3Jrfjd5onG94bjOuKY/PTMKt3GdzbkNt9UW3JbbaUtux+21FbfnDtqaO/B7yRON6wrH9cS5D3qWFO7oetpyR+6k7bgTd9b23Jm7aAfuwu8nTzTOH47zxjkOecYU7uq8nbgrd9PO3I27axfuzh8kTzTOE47jx7EOe/YU7uH43bgH99Tu3JPXJk80jheO48TfHPFMKtzLcXpyL/4weaLxd+H49/G7o55RhdclTzR+H46fR1N4ftU7ReJ5VUx4RopEH+QZPFMf4pk8S/vwLJ6tD/NsnqOP8Byeq4/yXJ6nj/E8nq+P83xeoE/wAl6oT/JCfkr78lO8SPvxIl6s/XkxP60D+Gl+RgfyM/ysDuJn+TkdzM/x8zqEn+fpmuqWhGMfY8/iWeNT/IJ9nMkv8Is6i1/kl3Q2v8Qv6xx+mZfoXF7Cr+g8foVf1fn8Ki/VBbyUl+lCXsbL9Slezit0Ea/glbqYV/IqfZpX8Wp9hlfza/osv8Zr9Dlew6/r8/w6T9PpHPsVexPPgxfxG/brRX6D39SX+E1+S1/mt/htXcJv8zv6Cr/D7+qr/C6/p0v5PX5fl/H7/IEu5w94ra7gtfyhruQPeZ2u4nW8Xlfzet6gr/EG3qhreCNv0td5E0/VaRz7EnsQz+YX82b78iZv5i36Fm/hj/Rt/oi36ju8lbfpu7yNP9b3+GP+RN/nT/hT/YA/5c90LX/Gn+uH/Dl/oev4C/5S1/OX/JVu4K94u27k7fy1buKveYpO5Vj/WOt4PeRp/sb6b+Fv+Fv9iL/l73Qrf8ff6zb+nn/Qj/kH/lE/4R/5J/2Uf+Kf9TP+mX/Rz/kX/lW/4F95h37JO3infsU7eZdu5138m37Nv/FkncKxzrGm8VrTM7zbOn/Lu3mPfsd7+Hf9nn/nvfoD7+V9+iPv4/36E+/nA/ozH+A/9Bf+g//UX/lPPqg7+CAf0p18iA/rLj7MR/Q3PsKTdDLHesbaxet1z/JR67mHj/Ix/Z2P8XHdy8f5hO7jE3xS9/NJ/ksP8F98Sv/gU3xa/+TTfEYP8hk+q4f4LJ/Tw3yOz+sRPs8TdRLHusUaxWubz/Hf1u0Y/80X9Dhf4It6gi/yJT3Jl/iy/sWX+Yqe4it8VU/zVf5Hz/A/fE3P8jW+ruf4Ov+r5/lfnqATOdYn1iJe732e/7M+F/g/vqEX+Qbf1Et8k29Jmehljgkn0yscE06uVzkmnEL/4ZhwSr3GMeFUep1jwrfqvxwTHu9nEzjWIe45Xut+gW9LmegNjgnfrjc5Jpykcc9JJpxak3FqvkOT8x2cRlNwGk6rKTkt36mp+E5Op7dyOh5nLeK+x7nnuLd4Pf9FTu9+b+f0nEGTOANn1NSckTPpHZyJM2sazsxZNC1n4ax6J2flbJqOs/HYFInG/YXjvuIe4r0JL3F295WBs3MOzcg5+C7NxHdxTs3MOTmXZuFcnFuzcm6+W7Px3TwmRaJxH+G4/rjWeD/Fy3yP68/B93AevYvzcF7NyXk5n+bifJxfc3N+LqB3cwEenSLRuN5wXGdcU7zXYwkXdJ15uCAX0rxciAtrPi7MRTQ/F+GiWoCL8qgUicZ1heN64tzxfpNXuJjrKcTFuLgW5uJcQotwCS6pRbkkj0yRaJw/HOeNc8R7W17lUs5bnEtxaS3BpbmMluQyPCJFonGecBw/jhXvl1nKZR2/NJflclqGy/HwFInG8cJxnPibeK/NMi7vOOW4PA9LkWj8XTj+ffwu3o+znIemSDR+H46fR+Nly3jmce///a6+CT+pFfhJ7qsVuS/300rcj/trZe7PA7QKD+CBWpUH8iCtxoN4sFbnwTxE7+MhPFTv56E8TB/gYTxca/BwHqE1eQSP1Fo8kkdpbR7Fo7UOj+YxWpfH8Fitx2O5kybdknB9e9bAhMdpXx7H47Ufj+cJ2p8n8EQdwBN5kg7kSTxZB/FknqKDeQpP1SE8lafpUJ7G03UYT+cZOpxn8EwdwTN5lo7kWTxbR/FsnqOjeQ7P1TE8l+fpWJ7HnbUTN7A3DU14vo7n+bxAJ/ACXqgTeSE/pZP4KV6kk3kRL9YpvJif1qn8ND+j0/gZflan87P8nM7g5/h5ncnP8ws6i1/gF3U2v8gv6Rx+iV/WufwyL9F5vIS7aGduaA8amfAruoBf4Vd1Ib/KS/UpXsrLdBEv4+W6mJfzCn2aV/BKfYZX8ip9llfxan2OV/Nr+jy/xmv0BV7Dr+uL/Dq/oS/xG/ymvsxv8lu6hN/irtqFG1nrxib8tr7Kb/M7upTf4Xd1Gb/L7+lyfo/f1xX8Pn+gK/kDXqureC1/qKv5Q16nr/E6Xq9reD1v0Nd5A2/UN3gjb9I3eRNv1rd4M3fTrtzYmjYx4S36Dm/hj/Rd/oi36nu8lbfp+7yNP9YP+GP+RNfyJ/ypfsif8me6jj/jz3U9f85f6Ab+gr/Ujfwlf6Wb+Cverpt5O3fXbtzE2jU14a/1I/6av9Gt/A1/q9v4W/5OP+bv+Hv9hL/nH/RT/oF/1M/4R/5JP+ef+Gf9gn/mX/RL/oV/1a/4V96h23kH99Du3NQaNTPhnfoN7+Rd+i3v4t/0O/6Nd+v3vJv36A+8h3/XH/l33qs/8V7epz/zPt6vv/B+PqC/8gH+Q3fwH9xTe3Aza9HchP/UXfwnH9Tf+CAf0t18iA/rHj7MR/R3PsJHdS8f5WO6j4/xcd3Px/mEHuATfFL/4JPcS3tyc/fcwoT/0oP8F5/SQ3yKT+thPs1n9Aif4bN6lM/yOT3G5/i8Hufz/Lee4L/5gp7kC9xbe3EL99bShC/qKb7Il/Q0X+LLeoYv8xU9y1f4qp7jq/yPnud/+Jr+zdf4ul7g6/yg9uaW7qGVCf+rl/hf/k8v8398Q6/wDb6pV/kmx39oX3UP//uP7lQJJ9NrHBNOrtc5JvyQnz3IrVxraxNOkSrR/zgmnFJvcEw4ld7kmPCtGtd6qwnfpsn4Nr5dk/Pt3Mc9xPX2cZ1xTW1SJiac5DpTchKn1lScmu/QW/kOTqO3cRpOq7dzWn44ZaJxXQ+7njh325SJCd/pelLznZxO7+B0nF7TcHrOoGk5Az+SMtE4/yPOG+dolzIx4YzOm44zciZNz5k4s2bgzPxoykTjPI86fhyrfcrEhLM4fibOwlk1M2flx1ImGsd7zHHibzqkTEw4m+Nk5Wz8eMpE4+8e9+/jdx1TJib8hMbvn/DzaOpbEpP9/353nwm31BzcklvpXdyKW2tObs1tNBe34baam9tyO72b23F7vYfbcwfNwx24o+bljtxJ83En7qz5uTN30QLchbtqQe7K3bQQd+PuWpi7cw8twj24pxblntxLi3EvbqF33JLwffasugn31lbcmx/U1vwgP6Rt+CHuo225Dz+s7fhhfkTb8yP8qHbgR/kx7ciP8ePaiR/nJ7QzP8FPahd+kvtqV+7L/bQb9+P+2p378wDtwQN4oPbkgTxIe/Egbq4tuLq9qWbCg/VBHsxD9CEewkO1Dw/lYfowD+Ph+ggP5xH6KI/gkfoYj+RR+jiP4tH6BI/mMfokj+Gx2pfH8jjtx+N4vPbn8TxBB/AEnqgDeSJP0kE8iZtpc65mD6qa8GQdwpN5ig7lKTxVh/FUnqbDeRpP1xE8nWfoSJ7BM3UUz+RZOppn8Wwdw7N5jo7lOTxXx/FcnqfjeR7P1wk8nxfoRF7AC3USL+Sm2oyrWusqJvyUTuGneJFO5UW8WKfxYn5ap/PT/IzO4Gf4WZ3Jz/JzOouf4+d1Nj/PL+gcfoFf1Ln8Ir+k8/glflnn88u8RBfwEn5FF/Ir3ESbchVrWtmEX9VF/Cov1cW8lJfp07yMl+szvJxX6LO8glfqc7ySV+nzvIpX6wu8ml/TF/k1XqMv8Rp+XV/m1/kNXcJv8Jv6Cr/JjbUJV7Z2lUz4LV3Kb/Hbuozf5nd0Ob/D7+oKfpff05X8Hr+vq/h9/kBX8we8Vl/jtfyhruEPeZ2+zut4vb7B63mDvskbuJE25krWqKIJb9S3eSNv0nd4E2/Wd3kzb9H3eAt/pO/zR7xVP+CtvE3X8jb+WD/kj/kTXcef8Ke6nj/lz3QDf8YNtRFXtBYVTPhz3cSf8xe6mb/gL3ULf8lf6Uf8FW/Xrbydv9Zt/DV/ox/zN/ytfsLf8nf6KX/H3+tn/D030IZcwT3fa8I/6Bf8A/+oX/KP/JN+xT/xz7qdf+Zf9Gv+hX/Vb/hX3qHf8g7eqd/xTt6l3/Murq8N+F73Vt6Ef9Mf+TferT/xbt6jP/Me/l1/4d95r/7Ke3mf7uB9vF938n4+oLv4ANfT+lzePZQz4T90N//Bf+oe/pMP6u98kA/pXj7Eh3UfH+Yjup+P8FE9wEe5rtbjcq61rAkf0z/5GB/Xg3ycT+ghPsEn9TCf5L/0CP/Fp/Qon+I6WpfLuqYyJnxaj/NpPqMn+Ayf1ZN8ls/pX3yOz+spPs+1tQ6Xce7SJvy3nuG/+YKe5Qt8Uc/xRb6k5/kS19LaXNo5SpnwZb3Al/mKXuQrfFUv8VWuqbW4lGOVNOF/9Ar/w9f0Kl/jGlqTS/qbEiZ8Xa/xdX5Aa3AJvytuwvfrA1xcb/W23jv/D3lNOJ+m5XycX9Nwfi6gd3ABLqipuSAX0iQuxIX1di7MRfQ2LsJF9VYuysU0FRfj4pqSi3MJTcEluKQm55JcSpNxKS6tt3BpLqM3UyVchsvqDY4Jl9P/OCZcXv/lmHB8dns0/m9Bw3ntWR4Tvlfz871cQQtwBa6oBbkiV9JCXIkra2GuzFW0CFfhqlqUq3I1LcbVuLoW5+p8n5bg+/h+Lcn38wNaih/gGlqaa3BNLcM1uZaW5VpcW8txba6j5bkOx+fxR2PfwnnszT0mXFcrcF2upxW5HtfXSlyfG2hlbsANtQo35EZalRtxY63GjbmJVucm3FTv46bcTO/nZtxcH+Dm3EJrcAtuqTW5JbfSWtyKW2ttbs1ttA634fguhTr2KnyPPbjbhNtqPW7L7bQ+t+P22oDbcwdtyB24ozbijtxJG3Mn7qxNuDN30abchbtqM+7K3bQ5d+Pu2oK7cw9tyT24p7bintxLW3Mv7q1tuDfH9120sSfhu611bhN+UNvxg/yQtueHuI924D78sHbkh/kR7cSP8KPamR/lx7QLP8aPa1d+nJ/QbvwEP6nd+Unuqz24L/fTntyP+2sv7s8DtDcP4Pjukd7WPpzbmuYy4YH6EA/kQdqHB/FgfZgH8xB9hIfwUH2Uh/IwfYyH8XB9nIfzCH2CR/BIfZJH8ijty6N4tPbj0TxG+/MYHqsDeCzH970MsMbhXNYupwmP00E8jsfrYB7PE3QIT+CJOpQn8iQdxpN4sg7nyTxFR/AUnqojeSpP01E8jafraJ7OM3QMz+CZOpZncnyXzlhrGc5pje4y4Vk6nmfxbJ3As3mOTuQ5PFcn8Vyep5N5Hs/XKTyfF+hUXsALdRov5Kd0Oj/Fi3QGL+LFOpMXc3wf0UxrFr7LWuQw4ad1Nj/Nz+gcfoaf1bn8LD+n8/g5fl7n8/P8gi7gF/hFXcgv8kv6FL/EL+sifpmX6GJewvHdTYutTTiHe85uwq/oM/wKv6rP8qu8VJ/jpbxMn+dlvFxf4OW8Ql/kFbxSX+KVvEpf5lW8Wpfwao7vs1piDcLZ3Vs2E35NX+XXeI0u5TX8ui7j1/kNXc5v8Ju6gt/kt3Qlv8Vv6yp+m9/R1fwOx3d5rXav4WzuIasJv6tr+F1+T1/n9/h9fYPf5w/0Tf6A1+pbvJY/1Lf5Q16n7/A6ju8re8c9hbO61iwmvF7f4/W8Qd/nDbxRP+CNvEnX8iberB/yZt6i63gLx3evrXPt4SyuKbMJf6Qb+CPeqht5K2/TTbyNP9bN/DF/olv4E47vi9viGsOZnTuTCX+qW/lT/ky38Wf8uX7Mn/MX+gl/wfFddp+4lnAm58howl/qZ/wlf6Wf81e8Xb/g7Rzfp/eFc4YzOlYGE/5av+Kv+Rvdzt9wfHffdscOZ/A36U34W/2Gv+X4PsBvHCOc3u/SmXB8l+C3/m04nZ/d4vnVd7cmnlfFhP/Q7/kP/lN/4D/5oP7IB/mQ/sSH+LD+zIf5iP7CR/io/spH+Zju4GN8XHfycT6hu/gEn9Tf+CT/pbv5Lz6le/gUn9bf+TSf0b18hs/qPj7L53Q/n+PzeoDPc3z2VTTVLQnfac/SmvDf+if/zRf0IF/gi3qIL/IlPcyX+LIe4ct8RY/yFb6qx/gq/6PH+R++pif4Gl/Xk3yd/9W/+F/+T0/xf3xDT/MNvqln+CbHl3eesWf/+yLP2xJOpuc4Jpxcz3NMOD7P7Lw9DKe1N2lMOMVtiV7gmHBKvcgx4VR6iWPCt+pljgnfplc4Jny7XuWYcJL+wzHh1HqNY8J36HWOCafRfzkmnFb/45jwnXqDY8Lp9CbHhNNr7E16E86gyTgDZ9TknJHjs+iisT/hNPYhns3fwZnsS0rOxJk1FWfmLHorZ+Gsehtn5Wx6O2fj7JrE2TmHpuYcfJfewXdxTk3DOTmXpuVcnFvv5Nx8t6bju/keTc/3cB7NwHk4r2bkvByfF5jRnoRj/WOt4/WQ1JzP+mfmfJxfs3B+LqBZuQAX1GxckAtpdi7EhTUHF+YiehcX4aKak4tyMc3Fxbi45ubiXELv5hJcUu/hklxK83ApLq15uTTHZzfmtfbhWOdY03itKYnLWOf8XIbLagEuy+W0IJfj8lqIy/O9Wpjv5QpahCtwRS3KFbmSFuNKXFmLc2WuoiW4ClfVklyVq2kprsbVtTRX5/i8zNLWOBzrGWsXr9fdzvdZz7J8H9+v5fh+fkDL8wNcQ+/lGlxTK3BNrqUVuRbX1kpcm+toZa7DdbUK1+V6WpXrcX2txvW5gVbnBhyfRVrdWoZj3WKN4rXN27ihdbufG3IjfYAbcWOtwY25idbkJtxUa3FTbqa1uRk31zrcnFtoXW7BLbUet+RWWp9bcWttwK05Ps+1gTULx/rEWsTrvbdyG+vTiNtwW23MbbmdNuF23F6bcnvuoM24A3fU5tyRO2kL7sSdtSV35i7airtwV23NXTk++7a1tQnHOsQ9x2vdqbibdWjL3bi7tuPu3EPbcw/uqR24J/fSjtyLe2sn7s0Pamd+kB/SLvwQ99Gu3Ifj84C7WoNw3G/cW7yen5Ifdr/d+WF+RHvwI/yo9uRH+THtxY/x49qbH+cn9EF+gp/Uh/hJ7qt9uC/HZyH3ca/huK+4h3hvQgru574e4X7cXx/l/jxAH+MBPFAf54E8SJ/gQTxYn+TBPET78hCOz3vu657Ccf1xrfF+iuQ81PX356E8TAfwMB6uA3k4j9BBPIJH6mAeyaN0CI/i+OzqIa49HNcZ1xTv9UjGo13nMB7NY3Q4j+GxOoLH8jgdyeN4vI7i8Ryftz3KNYbjeuLc/3tzD09wPWN4Ak/UsTyRJ+k4nsSTdTxP5vgs8PGuJRznjXPEe1tiwlOcdyJP4ak6iafyNJ3M0zg+j3yyc4bj+HGsG95HE57u+FN5Os/QaTyD47PPpzl2OI4Tf/Of9+CEZzrODJ7J//uMdccIx7+P3/3rfTrh+Cz2mf5tOH4eTeb51azbEs+rYsIv35bobH6Zl+gcXsKv6Fx+hV/VefwqL9X5vJSX6QJexst1IS/nFfoUr+CVuohX8ipdzKt4tT7Nq/k1fYZf4zX6LK/h1/U5fp3f0Of5DX5TX+A3+S19kd/it/Ulfpvjs6+i8flX4djH2LN41vg9v2Mfl/A7/K6+wu/ye/oqv8fv61J+nz/QZfwBr9XlvJY/1BX8Ia/TlbyO1+sqXs8bdDVv4I36Gm/kTbqGN/FmfZ038xZ9g7fwR/omf8Rb9S3eytv0bd7G8Xlmb9vDcOxX7E08D/6BP7Zf7/LH/Im+x5/wp/o+f8qf6Qf8GX+ua/lz/kI/5C/4S13HX/JXup6/4u26gbfz17qRv+ZvdBN/w9/qZv6Wv9Mt/B1/rx/x9/yDbuUf+Efdxj9yfBbdNnsVjn2JPYhn8z/yT/blE/6Jf9ZP+Wf+RT/jX/hX/Zx/5R36Be/gnfol7+Rd+hXv4t90O//Gu/Vr3s179Bvew7/rt/w779XveC/v0+95H+/XH3g/H9Af+QDH5wX+aE/+51ut963m//yH9f+Z/+A/9Rf+kw/qr3yQD+kOPsSHdScf5iO6i4/wUf2Nj/Ix3c3H+Lju4eN8Qn/nE3xS9/JJ/kv38V98SvfzKT6tB/g0x2c3HrD24Vjn/63prYkJn7HOf/IZPqsH+Syf00N8js/rYT7Pf+sR/psv6FG+wBf1GF/kS3qcL/FlPcGX+Yqe5Ct8Vf/iq/yPnuJ/+Jqe5mscn5d52hqHYz1j7eL1ul/4uvU8y9f5Xz3H//J/ep7/4xv6N9/gm3qBb/Ittyd6kWPCyfQSx4ST62WOCafQKxwTTqlXOSacSv/hmPCteo1jwvFZpNesZTjWLdYoXtv8lW+7PdF/OSZ8u/7HMeEkvcEx4dR6k2PCd2is0R0mnEaTcRpOq8k5Ld+pKfhOTqcpOR2n11ScnjPorZyB4/Nco7FO4VifWIt4vXcHZ7Q+t3NGzqRJnIkza2rOzFn0Ds7CWTUNZ+VsmpazcXa9k7NzDk3HOfguTc93cU7NwDk5Pvs2g7UJxzrEPcdr3Ts5l3XIxLk4t2bm3Hy3ZuG7+R7NyvdwHs3GeTivZue8nE9zcD7Or3dxfi6gObkAx+cB57QG4bjfuLd4PX8XF3S/ubkgF9K7uRAX1nu4MBfRPFyEi2peLsrFNB8X4+Kan4tzCS3AJTg+C7mAew3HfcU9xHsTfuOS7qsQl+RSWphLcWktwqW5jBblMlxWi3FZLqfFuRyX1xJcnuPznku4p3Bcf1xrvJ9iN9/r+kvxvVxBS3MFrqhluCJX0rJciStrOa7MVbQ8V+H47Oryrj0c1xnXFO/12MNVXWcFrsrVtCJX4+paiavzfVqZ7+P7tQrf//+vMWWicV3huJ44d7zf5Hd+wPVU4we4hlbnGlxT7+OaXEvv51r//7pSup6UCcd54xzx3pa9XNt5a3BtrqM1uQ7X1Vpcl+PzyGs5ZziOH8eK98vs43qOX4frcX2ty/U5Pvu8rmOH4zjxN/Fem/3cwHHqcwOOz1Ov7xjh+Pfxu3g/zgGOz2Jv4N+G4+fRVD5KLj7vO77/LCbc5fZEG3BMuKs25JhwN23EMeHu2phjwj20CceEe2pTjgn30mYcE+6tzTkm/KC24JjwQ9qSY8J9tBXHhB/W1hwTfkTbcEz4UW3LMeHHtB3HhB/X9hwTfkI7cEz4Se3IMeHOGp9lFo59jD2L70ubxn3tY1fuy/20G/fj/tqd+/MA7cEDeKD25IE8SHvxIB6svXkwD9EHeQgP1Yd4KA/TPjyMh+vDPJxH6CM8gkfqozySR+ljPIpH6+M8msfoEzyGx+qTPJY7aWeO/Yq9ie9Xm8rj7Fc/HsfjtT+P5wk6gCfwRB3IE3mSDuJJPFkH82SeokN4Ck/VoTyVp+kwnsbTdThP5xk6gmfwTB3JM3mWjuJZPFtH82yeo2N4Ds/VsTyXO2onjn2JPYjvY5vC8+zLeJ7H83UCz+cFOpEX8EKdxAv5KZ3MT/EincKLeLFO5cX8tE7jp/kZnc7P8LM6g5/l53QmP8fP6yx+nl/Q2fwCv6hz+EV+SefyS9xBO3Ksf6x1fH/bZH7Z+s/nl3mJLuAl/Iou5Ff4VX2KX+WluoiX8jJdzMt4uT7Ny3mFPsMreKU+yyt5lT7Hq3i1Ps+r+TV9gV/jNfoir+HX9SV+ndtrB451jjWN73ubxG9Y5yX8Br+pr/Cb/Ja+ym/x27qU3+Z3dBm/w+/qcn6X39MV/B6/ryv5ff5AV/EHvFZX81r+UF/jD3mdruF1vF5f5/XcTttzrGesXXw/3ETeYD3f5A28Ud/ijbxJ3+ZNvFnf4c28Rd/lLfyRvscf8VZ9n7fyNv2At/HHupY/5k/0Q/6EP9V1/Cl/puv5M26r7TjWLdZogu+UC39u3Tby5/yFbuIv+EvdzF/yV7qFv+Lt+hFv5691K3/N3+g2/oa/1Y/5W/5OP+Hv+Hv9lL/nH/Qz/oHbaFuO9Ym1GO+798I/Wp8v+Ef+Sb/kn/hn/Yp/5l90O//Cv+rX/Cvv0G94B+/Ub3kn79LveBf/pt/zb7xbf+Dd3FrbcKxD3PM438kX3mMdfuI9/Lv+zL/zXv2F9/I+/ZX38X7dwfv5gO7kA/yH7uI/+E/9jf/kg7qbD3Irbc1xv3FvY31XX/iQ+/2dD/Fh3cuH+Yju4yN8VPfzUT6mB/gYH9c/+Dif0D/5BJ/Ug3ySW2orjvuKexjjO/zCf7mvw/wXn9IjfIpP61E+zWf0GJ/hs3qcz/I5PcHn+Lye5PPcQltyXH9c62jf7Rf+2/Wf4r/5gp7mC3xRz/BFvqRn+RJf1nN8ma/oeb7CzbUFx3XGNY3ynX/hq67zAl/lf/Qi/8PX9BJf4+t6ma/zv3qF/+Vm2pzjeuLcI30XYPg/1/MP/8c39Brf4Jt6nW9yvMHkunP/780mSQk39bNmHOeNc4zwHYHhZEmJ3uCYcHK9yTHhFBrnSGHCTfwsztPEOeJYw313YDil4yfnlJxKU3Aqbux8cbxwHCf+ZpjvFAzf6jip+FZudHui8Xfh+Pfxu6G+azDc8PZE4/fh+Hk0uc9vj8/7jv9+jgnflZRodY4J59RqHBPOpVU5Jpxbq3BM+G6tzDHhe7QSx4TzaEWOCefVChwTzqf3ckw4v5bnmHABLccx4YJalmPChbQMx4QLa2mOCRfRUhwTLqolOSZcTEtwTLj4/y//b/7POTTe8hiOfYw9i//e7sQl7GNOLsElNReX5FKam0txab2bS3MZvYfLcFnNw2W5nOblclxe83H5/79/mp/v5QpagCtwRS3IFbmSFuJKXFkLc2WuokW4ClfVolyVq2kxrsbVtThX5+yag2O/Ym/iv8878n32qyTfx/drKb6fH9DS/ADX0DJcg2tqWa7JtbQc1+LaWp5rcx29l+twXa3AdbmeVuR6XF8rcX1uoJW5ATfUKtyQG2lVbsSNtRo35iZanZtwNs3OsS+xB/Hf8x24qX25n5tyM32Am3FzrcHNuYXW5BbcUmtxS26ltbkVt9Y63JrbaF1uw221Hrfldlqf23F7bcDtuYM25A7cURtxR+6kjbkTd9Ym3JmzajaO9Y+1jv/+b89drH8z7sJdtTl35W7agrtxd23J3bmHtuIe3FNbc0/upW24F/fWttybH9R2/CA/pO35Ie6jHbgPP6wd+WF+RDvxI/yoduZHOYtm5VjnWNN4XtCOH7POXfkxfly78eP8hHbnJ/hJ7cFPcl/tyX25n/biftxfe3N/HqAP8gAeqA/xQB6kfXgQD9aHeTAP0Ud4CA/VR3koZ9YsHOsZaxfPF9ryMOv5OA/j4foED+cR+iSP4JHal0fyKO3Ho3i09ufRPEYH8BgeqwN5LI/TQTyOx+tgHs8TdAhP4Ik6lCdyJs3MsW6xRvE8og1Psm7DeRJP1hE8mafoSJ7CU3UUT+VpOpqn8XQdw9N5ho7lGTxTx/FMnqXjeRbP1gk8m+foRJ7DGTUTx/rEWsTzi9Y81/pM5rk8T6fwPJ6vU3k+L9BpvIAX6nReyE/pDH6KF+lMXsSLdRYv5qd1Nj/Nz+gcfoYzaEaOdYh7jucdrfhZ6zCPn+XndD4/x8/rAn6eX9CF/AK/qE/xi/ySLuKX+GVdzC/zEn2al/Ar+gy/wuk1A8f9xr3F85GW/Kr7fY5f5aX6PC/lZfoCL+Pl+iIv5xX6Eq/glfoyr+RVuoRX8Wp9hVdzOk3PcV9xDy08Uwm/5r6W8mu8RpfxGn5dl/Pr/Iau4Df4TV3Jb/Jbuorf4rd1Nb/Nd2o6juuPa23uGUz4Hde/ht/hd/V1fpff0zf4PX5f3+T3+QN9iz/gtfo2r+W0eifHdcY1NfPMJvyh63yXP+R1+h6v4/X6Pq/nDfoBb+CNupY3chpNy3E9ce6mniWFN7medbyJN+t63sxbdANv4Y90I3/Ed2gajvPGOZp4xhTe6rybeStv0y28jT/Wj/hjTq13cBw/jtXYs6fwJ46/jT/hT/Vj/pSTNDXHceJvGnkmFf7McT7lz/h2TeL49/G7hp5VhW/z72/n+Hk0uf8zz/gs98+TEhP+Sx/gmPAprcEx4dNak2PCZ7QWx4TPam2OCZ/TOhwTPq91OSb8t9bjmPAFrc8x4YvagGPCl7Qhx4QvayOOCV/RxhwTvqpNOCb8jzblmPA1bcYx4evanGPC/2oLjgmf1Pj+wZP2MfbsCxP+T0/xf3xDT/MNvqln+CbHA88z9uz/f4FlOJme45hwcj3PMeEU+jfHhFPqBY4Jp9KLHBO+VS9xTPg2vcwx4dv1CseEk/Qqx4RT6z8cE75Dr3FMOI1e55hwWv2XY8In/Owkf2FvvjThO1MneoNjwun0JseE02vsTXoTzqDJOANn1OSckTNpCs7EmTUlZ+YsmoqzcFa9lbNyNr2Ns3F2vZ2zcw5N4hx8l6bmuzin3sE5OZem4VycW9Nybj5uz2J/jtuX2IOvkhITvtu+pOO7+R5Nz/dwHs3AeTivZuS8nE8zcT7Or5k5PxfQLFyAC2pWLsiFNBsX4sKanQtzEc3BRbio3sVFuZjm5GJcXHNxcS6hubkEH0tKNPbhmPWPtd6elJhwSet/D5fkUpqHS3FpzculuYzm4zJcVvNzWS6nBbgcl9eCXJ7v1UJ8L1fQwlyBK2oRrsiVtChX4spajCtzFS3OVbiqluCqfDQp0Vjvo9Y51vTrpMSEq1nnUlyNq2tprs73aRm+j+/Xsnw/P6Dl+AGuoeW5BtfUe7km19IKXItra0WuzXW0EtfhulqZ63I9rcL1uL5W5fp8JCnRWNcj1jPW7pukxIQbWM/q3IAb6n3ckBvp/dyIG+sD3JibaA1uwk21JjflZlqLm3Fzrc3NuYXW4RbcUutyS26l9bgVt9b63JoPJyUa63fYusUafZuUmHAb69aQ23BbbcRtuZ025nbcXptwe+6gTbkDd9Rm3JE7aXPuxJ21BXfmLtqSu3BXbcVduZu25m58KCnRWKdD1ifW4rukxIS7W5+23J17aDvuwT21PffkXtqBe3Fv7ci9+UHtxA/yQ9qZH+I+2oX78MPalR/mR7QbP8IHkxKN9ThoHeKev09KTPhR69CDH+XHtCc/xo9rL36cn9De/AQ/qQ/yk9xXH+K+3E/7cD/urw9zfx6gj/AA/jMp0bjvP91v3NsPSYkJD3S/j/FAHqSP8yAerE/wYB6iT/IQHqp9eSgP0348jIdrfx7OI3QAj+A/khKN+/vDfcU9/JiUmPBI9zWIR/IoHcyjeLQO4dE8RofyGB6rw3gsj9PhPI7H6wgezweSEo37OOD641p/SkpMeILrH8UTeKKO5ok8ScfwJJ6sY3kyT9FxPIWn6nieyvuTEo3r3e8645p+TkpMeJrrnMjTeLpO4uk8QyfzDJ6pU3gmz9KpPIv3JSUa17XP9cS5f0lKTHi265nOs3mOzuA5PFdn8lyep7N4Hu9NSjTOv9d54xy/JiUmPN955/B8XqBzeQEv1Hm8kH9PSjTO87vjx7F2JCUm/JTjL+CneJEu5EW8JynRON4ex4m/2ZmUmPBix1nEi3l3UqLxd7v9+/jdrqTEhH/T+P1vfh6N/3P9eOax+v9+t8mEf9BV/AP/qCv5R/5JV/BP/LMu55/5F13Gv/CvupR/5R36Ku/gnfoK7+RduoR38W/6Mv/Gu/Ul3s179EXew7/rC/w779XneS/v0+d4H+/XZ3k/H9Bn+AD/oU/zH/y9xiOL7+1j7NlGE/5Tf+Q/+aD+xAf5kP7Mh/iw/sKH+Yj+ykf4qO7go3xMd/IxPq67+Dif0N/4BJ/U3XyS/9I9/Bef0t/5FJ/WvXyaz+g+PsNndT+f5XN6gM/xef2Dz/N3+j1vtDcbTPhvPch/8wU9xBf4oh7mi3xJj/AlvqxH+TJf0WN8ha/qcb7K/+gJ/oev6Um+xtf1L77O/+op/pf/09P8H9/QM3yDb+pZvsnxP/TO2pv//Q/AOxJOpuc5Jvytn33HG+zBehNOfkeiFzgmnEIvckw4pV7imHAqvcwx4Vv1CseEb9OrHBO+Xf/hmHCSXuOYcGq9zjHhO/Rfjgmn0f84JpxWb3BM+E69yTHhdBp7kM6E02syTs/f2JvYh2+sf6z1utSJCWew/ik4A2fUlJyRM2kqzsSZ9VbOzFn0Ns7CWfV2zsrZNImzcXZNzdk5h97BOfguTcN3cU5Nyzk5l97JuTi3puPcfLem57v569SJxnp/bZ1jTT9MnZjwPdY5I9/DeTQT5+G8mpnzcj7Nwvk4v2bl/FxAs3EBLqjZuSAX0hxciAvrXVyYi2hOLsJFNRcX5WKam4txcb2bi/P21InGum63nrF2a1MnJlzCeubhElxS83JJLqX5uBSX1vxcmstoAS7DZbUgl+VyWojLcfn/V9NdRnlVtg0fHsZxdIZukEYkRUC6WxGUFKW7pVs6RUIJEaSxFQQkFIPutLuxuzvf93z2cX841+9YDLP3FfrBWcv/aDmuzjW0PNfgmlqBa3Itrci1uLZW4tp8KjNpnN8p5xZntCczmXAd51aZ63BdvYrrcj2twvW4vlbl+txAq3EDbqhXc0NupNW5ETfWGtyYm2hNbsJNtRY35WZam5vxycykcU4nnU+cxe7MZMLNnU9dbs4ttB634JZan1vyNdqAr+FrtSFfy620Ebfi67QxX8ettQm35jbalNvw9dqMr+cTmUnjPE44h9jzrsxkwjc4hxZ8A7fVltyW2+k13I7b67XcnjtoK+7AHfU67sidtDV34hu1Dd/InfV67szHM5PGvo/bb+xtZ2Yy4Zvsty3fxDdrO76Zu2h77sJdtQN35W7akbtxd+3E3bmH3sg9uKd25p58LDNp7O+YfcUeHs9MJtzLvm7mXtxbu3Bv7qNduQ/31W7cl/tpd+7H/bUH9+cB2pMH8NHMpLGPo9Yfa92RmUx4oPX35oE8SPvwIB6sfXkwD9F+PISHan8eysN0AA/jI5lJY71HrDPWtD0zmfAt1jmIb+HhOpiH8wgdwiN4pA7lkTxKh/EoPpyZNNZ12Hri3dsykwmPtp7hPJrH6Agew2N1JI/lcTqKx/GhzKTx/kPeG+94LDOZ8HjvHcPjeYKO5Qk8UcfxRD6YmTTec9Dz41lbM5MJT/L8CTyJJ+tEnswHMpPG8w54TnzPlsxkwrd6zmS+lfdnJo3v2+/vx9cezUwmvE/j6/v8efR//xtmfPZ3/PdzTPiOrEnXc0z4Tl3HMeGlupZjwst0DceEl+s9HBNeoas5JnyXruKY8Eq9m2PCd+vK/zlr4lV6F8eEV+sKjgnfo8s5JrxGl3FMeK0u5ZjwOr2TY8Lr9Q6OCW/QJRzzf5+lr4s5JjxF47P4w3GPcWfx39vneZN7vJM38WZdypv5Xl3G9/J9upzv4/t1Bd/PD+hd/AA/qCv5QX7of/fID/HDuoof5kd0NT/Cj+o9/Chv0TW8hbfqWt7Kj+k6foy36Xrextt1A2/nHbqRd/BUncJxX3E38d/n5/hx97WZH+edei/v5F16H+/i3Xo/7+Y9+gDv4Sf0QX6Cn9SH+Eneqw/zXn5KH+Gn+Gl9lJ/mZ3QLP8PP6lZ+lvfpY7yP9+s23s8HdDsf4IO6gw/yNJ3KcS9xB2f9DCV8yL3s5EN8WHfxYT6iu/kIH9U9fJSP6RN8jI/rk3ycT+hePsEn9Sk+yaf0aT7Fp/UZPs1n9Fk+w2d1H5/lc7qfz/F5PcDn+Tk9yM/xdJ3Gcf5x1mf8bCX8vPM/zM/zC3qEX+AX9Si/yC/pMX6JX9bj/DK/oif4FX5VT/Kr/Jqe4tf4dT3Nr/Mbeobf4Df1LL/Jb+k5fovf1vP8Nr+jz/E7PEOnc5xznOlpP3MJv+ucX+B3+T19kd/j9/Ulfp8/0Jf5A76gr/AF/lBf5Q/5I32NP+KP9XX+mD/RN/gT/lTf5E/5M32LP+PP9W3+nL/Qd/gLnqkzOM4zzu6Un8WEv3Se7/GX/JW+z1/x1/oBf83f6AX+hr/VD/lb/k4/4u/4e/2Yv+cf9BP+gX/UT/lH/kk/45/4Z/2cf+Zf9Av+hWfpTI5zizM66Wc04V+d21f8K/+mX/Nv/Lt+w7/zH/ot/8F/6nf8J/+l3/Nf/Lf+wH/zP/oj/8P/6k/8L/+nP/N/nJIt6S8cE57tz2ZxnE+cxQk/uwlnyZb0N44Jp+rvHBO+SP/gmHCa/skx4Yv1L44Jp+vfHBO+RP/hmPCl+i/HhDP0P44JZ2qcRaYJz/FncR5znEXs+bif6YSzOodUzsrZ9CLOxtk1jbNzDr2Yc3BOTeecnEsv4VycWy/l3JxHMzgP59VMzstznUvsOxz7jb0d87OecD77zcb5OL9m5/xcQHNwAS6oObkgF9JcXIgLa24uzJdpHr6Mi2heLsLzsiaN/YVjX7GHo34GFC5qX/m5KBfTAlyMi2tBLs4ltBCX4JJamEtyKb2MS3FpLcKleX7WpLGPcKw/1nrEz4bCl1t/Mb6cy2hxLsNXaAm+gstqSS7L5bQUl+PyWprL821Zk8Z6w7HOWNNhPzMKV7DOMlyBK+oVXJEraVmuxFdqOb6SK2t5rswLsiaNdYVjPfHuQ36WFL7KeiryVVxFK3EVrqpXclWuppW5Gt+eNWm8PxzvjXcc9DOm8NXeW4Wv5upalatzDa3GNXhh1qTxnnA8P551wM+ewjU9vzrX5Fpag2vxoqxJ43nheE58z34/kwrX9pxaXJsXZ00a3xeOvx9f2+dnVOElWZPG18Px59FL/VqZcLWUZMJ1fM9iruN76+oiruu99XQh17OX+no713duDXQBN3B3DfU2buifq0Y6n2PCjXUex4Sb6FyOCTfVORwTbqazOSbcXGdxTLiFzuSYcEudwTHha3Q6x4Sv1WkcE26lUzkmfJ1O4ZhwqfSk8fOrcNxj3FnVlGTCrd1jXW7NbbQet+HrtT5fzzdoA76B22pDbsvttBG34/bamNtzB23CHbijNuWO3EmbcSe+UZvzjdxZW3Bnvklb8k18s17DN3MXvZa7cFdtxV25m17H3bhketK4t3DcV9xNlZRkwt3dVxvuzj30eu7BPfUG7sm9tC334t7ajntzH23PfbivduC+3E87cj/ur524Pw/QG3kAD9TOPJAH6U08iAfrzTyYh2gXHsJDtSsP5WHajYdxifSkcT/huJe4g6tSkgnf4l568C08XHvycB6hvXgEj9TePJJHaR8exaO1L4/mMdqPx/BY7c9jeZwO4HE8XgfyeJ6gg3gCT9TBPJEn6RCexJN1KE/mW3UY38rF05PGPYTj/OOsK6ckE57i/IfzFJ6qI3gqT9ORPI2n6yiezjN0NM/gmTqGZ/IsHcuzeLaO49k8R8fzHJ6rE3guz9OJPI/n6ySez7fpZL6NF+itvICLpSeN8w7HOceZXpmSTPh25zyVb+eFOo0X8iKdzot4sc7gxbxEZ/ISvkNn8R18p87mO3mpzuGlvEzn8jJervN4Oa/Q+byC79Lb+C5eqQt4JRdNTxrnGo7zjLOrlJJM+G7nuZDv5lW6iFfxal3Mq/keXcL38Bq9g9fwWr2T1/I6XcrreL0u4/W8QZfzBt6oK3gjb9K7eBNv1pW8mYukJ43zC8e5xRlVTEkmfK9zW8X38n26mu/j+/Uevp8f0DX8AD+oa/lBfkjX8UP8sK7nh/kR3cCP8KO6kR/lLbqJt/BW3cxb+bL0pHFO4TifOIsKKcmEH3M+9/FjvE3v5228XR/g7bxDH+Qd/Lg+xI/zTn2Yd/IufYR38W59lHfzHt3Ce/gJ3cpPcOH0pHEe4TiH2HP5lGTCTzqHbfwk79XtvJef0h38FD+tj/PT/Izu5Gf4Wd3Fz/I+3c37eL/u4f18QJ/gA1woPWnsOxz7jb2VS0kmfNB+9/JBPqRP8SE+rE/zYT6iz/ARPqrP8lE+pvv4GB/X/XycT+gBPsEF05PG/sKxr9hD2ZRkwift6xCf5FN6mE/xaT3Cp/mMHuUzfFaP8Vk+p8f5HJ/XE3yeC6QnjX2EY/2x1itSkgk/Z/2n+Dl+Xk/z8/yCnuEX+EU9yy/yS3qOX+KX9Ty/zPnTk8Z6w7HOWFOZlGTCr1jn8/wKv6ov8Kv8mr7Ir/Hr+hK/zm/oy/wG50tPGusKx3ri3ZenJBN+03pe5Tf5LX2N3+K39XV+m9/RN/gdzpueNN4fjvfGO0qnJBN+13vf4nf5PX2b3+P39R1+n/OkJ433hOP58axSKcmEP/D89/gDvqDv8wXOnZ40nheO58T3lExJJvyh51zgDzlXetL4vnD8/fhaiZRkwjnTk8bXw/Hn0RT/+0z8/2Zf+gye8EfZkj7DMeGP9WmOCX+iT3FM+FPdyzHhz/RJjgl/rk9wTPgL3cMx4S91N8eEv9JdHBP+WndyTPgbfZxjwt/qDo4Jf6fbOSb8vW7jmPAP+hjHhH/UrRwT/km3cEz4Z32UY8ItUpLGzyJb+AysuLMvfKZS+Bf3+DH/wr/qJ/wr/6af8m/8u37Gv/Mf+jn/wX/qF/wn/6Vf8l/8t37Ff/M/+jX/w//qN/wv/6ff8n+ckj3pdxwTzqLfc0w4VX/gmPBF+iPHhNP0J44JX6w/c0y4eUrSuLdw3Ffczec+aymcnj3prxwTvkR/45jwpfo7x4Qz9A+OCWfqnxwTzqp/cUw4m/7NMeHs+g/HhHPovxwTzqn/cUw4l8bd5DLh3JqFc3MeTeU8nFcv4rycT9M4H+fXizk/N0tJGvcTjnuJO/jMZzCFC7iXS7gAF9RLuSAX0gwuxIU1kwvzZZqVL+Mimo2LcFHNzkW5mObgYlxcc3JxLqG5uASX1NxckktpHi7FpTUvl+bLNR9fzmU0P5fhpilJ4x7Ccf5x1p/6bKbwFc6/IF/BZbUQl+VyWpjLcXm9jMtzBS3CFbiiFuWKXEmLcSW+UovzlVxZS3BlvkpL8lVcRUtxFa6qpbkqV9PLuRpfrWX4am6SkjTOOxznHGf6ic9sCld3zmW5OtfQclyDa2p5rsm1tALX4tpakWtzHa3EdbiuXsl1uZ5W5npcX6/i+txAq3ADbqhVuSE30mrciBvr1dz4f05JGucajvOMs/vYZzmFmzjPGtyEm2pNbsrNtBY34+Zam5tzC63DLbil1uWWfI3W42v4Wq3P13IrbcCt+DptyNdxa23ErbmNNuY23CjFmaYkjnOLM/rIZzyFr3duTfl6vkGb8Q3cVptzW26nLbgdt9eW3J476DXcgTvqtdyRO2kr7sQ36nV8I3fW1tyZb9I2fBM3THGOKYnjfOIsPvTZT+Gbnc8NfDN30bbchbtqO+7K3bQ9d+Pu2oG7cw/tyD24p3bintxLb+Re3Fs7c2/uozdxH26QkjTOIxznEHu+4DOhwn2dQxfuy/20K/fj/tqN+/MA7c4DeKD24IE8SHvyIB6svXgwD9HePISHah8eyvVTksa+w7Hf2NsHPisqPMx++/EwvkX78y08XAfwcB6hA3kEj9RBPJJH6WAexaN1CI/mMTqUx3C9lKSxv3DsK/bwvs+QCo+1r1t4LI/T4TyOx+sIHs8TdCRP4Ik6iifyJB3Nk3iyjuHJXDclaewjHOuPtb7ns6XCt1r/OL6Vp+h4nsJTdQJP5Wk6kafxdJ3E03mGTuYZXCclaaw3HOuMNb3rM6fCM61zCs/kWTqVZ/FsncazeY5O5zk8V2fwXK6dkjTWFY71xLvf8VlU4XnWM4vn8XydzfP5Np3Dt/ECncsLuFZK0nh/ON4b73jbZ1SFb/fe+Xw7L9TbeCEv0gW8iGumJI33hOP58ay3fHZVeLHnL+TFvEQX8RKukZI0nheO58T3vOkzrcJ3eM4SvoOrpySN7wvH34+vveEzrsJXpySNr4fjz6Px+VfxY6z4vO/N2ZMJ36snOCZ8n57kmPD9eopjwg/oaY4JP6hnOCb8kJ7lmPDDeo5jwo/oeY4JP6rPcUx4iz7PMeGt+gLHhB/TFzkmvE1f4pjwdn2ZY8I79BWOCT+ur3JMeKe+xjHhXfo6x4TzZ0ka9xne7M42mfBuvY938x69n/fwE/oAP8FP6oP8JO/Vh3gvP6UP81P8tD7CT/Mz+ig/w8/qFn6W9+lW3sf79THezwd0Gx/gg7qdD/Ih3cGH+LA+zof5iO7kI3xUd/FRzpcladxbeJO72WjCx3QPH+Pj+gQf5xP6JJ/gk7qXT/IpfYpP8Wl9mk/zGX2Gz/BZfZbP8jndx+f4vO7n8/ycHuDn+Hk9yM/zC3qIX+AX9TC/yC/pEX6JX9aj/DLnzZI07ie80R1sMOFX9Di/wq/qCX6VX9OT/Bq/rqf4dX5DT/Mb/Kae4Tf5LT3Lb/Hbeo7f5nf0PL/D7+pz/C6/p8/ze/y+vsDv8wf6In/AF/QlvsAf6sv8IefJkjTuIbzBWa834Y/0Vf6IP9bX+GP+RF/nT/hTfYM/5c/0Tf6MP9e3+HP+Qt/mL/hLfYe/5K/0Xf6Kv9b3+Gv+Rt/nb/hb/YC/5e/0An/H3+uH/D3nzpI0zju83pmuM+Ef9GP+gX/UT/hH/kk/5Z/4Z/2Mf+Zf9HP+hX/VL/hX/k2/5N/4d/2Kf+c/9Gv+g//Ub/hP/ku/5b/4b/2O/+Z/9Hv+h3NlSRrnGl7n7Naa8L/6I//L/+lP/B+n5Ej6M8eEs+gvHBNO1V85JnyR/sYx4TT9nWPCF+sfHBNO1z85JnyJ/sUx4Uv1b44JZ+g/HBPOmSVpnF94rTNaY8KZOZL+xzHhrBpnlNWEs2kWzsbZNZWzcw69iHNwTk3jnJxLL+ZcnFvTOTfn0Us4D+fVSzkv59MMzsc5siSNcwqvcR73ZE8mnN/5ZOX8XECzcQEuqNm5IBfSHFyIC2tOLsyXaS6+jItobi7CRTUPF+VimpeLcXHNx8U5e5akcR7hOIfY8+rsyYRLOIcCXIJLakEuyaW0EJfi0lqYS/PlehlfzmW0CJfhK7QoX8FltRiX5XJanMtxtixJY9/h2G/sbVX2ZMLl7bckl+cKWoorcEUtzRW5kl7OlfhKLcNXcmW9givzVVqWr+IqWo6rcNYsSWN/4dhX7OHu7MmEq9pXBa7K1bQiV+OrtRJfzdX1Sq7ONbQy1+CaehXX5FpahWtxZpaksY9wrD/WujJ7MuHa1l+Na3MdvZrrcF2tznW5ntbgelxfa3J9bqC1uAFnZEka6w3HOmNNd2VPJtzQOutwQ26kdbkRN9Z63JibaH1uwk21ATflS7MkjXWFYz3x7hXZkwk3s55G3Iyba2Nuzi20CbfgltqUW/IlWZLG+8Px3njH8uzJhK/x3uZ8DV+rLfhabqUtuRWnZ0ka7wnH8+NZy7InE77O86/l67i1tuLWfHGWpPG8cDwnvmdp9mTCbTynNbfhtCxJ4/vC8ffja3dmTyZ8UZak8fVw/Hn0Ij+/ip93FM5IJnx9jqSbOCZ8g27kmHBb3cAx4Xa6nmPC7XUdx4Q76FqOCXfUNRwT7qT3cEz4Rl3NMeHOuopjwjfp3RwTvllXcky4i97FMeGuuoK7+vegmy7nbv7Z7K7LuLt/jnroUu7hn4Weeif3dM97U91pSuK4x7izQhnJhHu5xxu4F/fWttyb+2g77sN9tT335X7agftxf+3I/XmAduIBPFBv5IE8SDvzIB6sN/FgHqI38xAeql14KA/TrjyMb9FufAsP1+48nEdoDx7BI7Unj+QnU5PGvYXjvuJuCmYkEx7lvnrzKB6tfXg0j9G+PIbHaj8ey+O0P4/j8TqAx/MEHcgTeKIO4ok8SQfzJJ6sQ3gy36pD+VaeosN4Ck/VW3gqT9PhPI2n6wiezjN0JM/gJ1KTxv2E417iDgpkJBOe6V5G80yepWN4Fs/WsTyb5+g4nsNzdTzP5Xk6gefxfJ3I8/k2ncS38QKdzAv4dr2Vb+eFOoUX8iKdyot4sU7jxbxEp/MSvkNn8B28JzVp3EM4zj/OOn9GMuE7nf8svpOX6mxeyst0Di/j5TqXl/MKnccr+C6dz3fxSr2NV/LduoDv5lV6O6/i1bqQV/M9uojv4TW6mNfwWl3Ca3md3sHreHdq0jjvcJxznGm+jGTC653zUl7PG3QZb+CNupw38iZdwZt4s97Fm/leXcn38n16N9/H9+sqvp8f0NX8AD+o9/CD/JCu4Yf4YV3LD/Mjuo4f4V2pSeNcw3GecXZ5M5IJP+o8N/CjvEU38hbeqpt4Kz+mm/kx3qb38jbervfxdt6h9/MOflwf4Md5pz7IO3mXPsS7eLc+zLt5jz7Ce3hnatI4v3CcW5xRnoxkwk84ty38BD+pW/lJ3quP8V5+SrfxU/y0buen+Rndwc/ws/o4P8v7dCfv4/26i/fzAd3NB/ig7uGD/Hhq0jincJxPnEXujGTCh5zPk3yID+tePsxH9Ck+wkf1aT7Kx/QZPsbH9Vk+zid0H5/gk7qfT/IpPcCn+LQe5NO8IzVpnEc4ziH2nCsjmfAZ53CYz/BZPcJn+Zwe5XN8Xo/xeX5Oj/Nz/Lye4Of5BT3JL/CLeopf5Jf0NL/E21OTxr7Dsd/YW86MZMIv2+9Zfplf0XP8Cr+q5/lVfk2f49f4dX2eX+c39AV+g9/UF/lNfktf4rd4W2rS2F849hV7yJGRTPht+3qF3+Z39FV+h9/V1/hdfk9f5/f4fX2D3+cP9E3+gC/oW3yBH0tNGvsIx/pjrdkzkgl/aP3v8If8kb7LH/HH+h5/zJ/o+/wJf6of8Kf8mV7gz3hratJYbzjWGWvKlpFM+HPr/Ig/5y/0Y/6Cv9RP+Ev+Sj/lr/hr/Yy/5i2pSWNd4VhPvDtrRjLhb6znC/6Gv9Uv+Vv+Tr/i7/h7/Zq/50dTk8b7w/HeeEdmRjLhH7z3W/6Bf9Tv+Ef+Sb/nn/iR1KTxnnA8P56VkZFM+GfP/5F/5l/0J/6FH05NGs8Lx3Piey7NSCb8q+f8wr/yQ6lJ4/vC8ffja5dkJBN+MDVpfD0cfx5N9f8PVrw4+X2DMeHfciStwDHh37U8x4T/0HIcE/5Ty3JM+C+9gmPCf2sZjgn/o5dzTPhfLc0x4f+0FMeEU3ImLckx4SxagmPCqVqcY8IXaTGOCadpUY4JX6xFOCacrpdxTPgSLcwx4Uu1EMeEh6cl/f/X93+Oe4w7i98V+TBn5Ez6O8eEM/UPjgln1T85JpxN/+KYcHb9m2PCOfQfjgnn1H85JpxL/+OYcG6NO8ttwnk0C+fhvJrKeTmfXsT5OL+mcX4uoBdzAS6o6VyQC+klXOh/96eXcmG+JS1p3Fs47ivuJn6f50N8mfvK5Mu4iGblIlxUs3FRLqbZuRgX1xxcnEtoTi7BJTUXl+RSmptLcWnNw6X5cs3Ll3MZzcdl+ArNz1dwWS3AZbmcFuRyXF4LcXmuoIW5Ag9LSxr3E457iTuI3636IFd0L0W4IlfSolyJr9RifCVX1uJcma/SEnwVV9GSXIWraimuytW0NFfjq/VyvpqraxmuzjX0Cq7BNbUs1+RaWo5rcW0tz7W5jlbgOjw0LWncQzjOP846fp/tA1zX+VfiulxPr+R6XF8rc31uoFdxA26oVbghN9Kq3IgbazVuzE30am7CTbU6N+VmWoObcXOtyc25hdbiFtxSa3NLvkbr8DU8JC1pnHc4zjnONH5X8P18rXOux9dyK63Prfg6bcDXcWttyK25jTbiNny9Nubr+QZtwjdwW23KbbmdNuN23F6bc3vuoC24A3fUltyRO+k13IkHpyWNcw3HecbZxe9bvo9vdJ6t+EburNdxZ75JW/NNfLO24Zu5i17PXbir3sBduZu25W7cXdtxd+6h7bkH99QO3JN7aUfuxb21E/fmQWlJ4/zCcW5xRvG7qe/lPs6tM/fhvnoT9+V+ejP34/7ahfvzAO3KA3igduOBPEi78yAerD14MA/RnjyEh2ovHsrDtDcP44FpSeOcwnE+cRbx+7o38y3Opy/fwsO1Hw/nEdqfR/BIHcAjeZQO5FE8WgfxaB6jg3kMj9UhPJbH6VAex+N1GI/nAWlJ4zzCcQ6x5/hd5Zt4gnMYzhN4oo7giTxJR/IknqyjeDLfqqP5Vp6iY3gKT9WxPJWn6TiextN1PE/n/mlJY9/h2G/sLX4f+0aeYb8TeQbP1Ek8k2fpZJ7Fs/VWns1zdArP4bk6lefyPJ3G83i+Tuf53C8taewvHPuKPcTvlt/At9nXTL6NF+gsXsC362y+nRfqHF7Ii3QuL+LFOo8X8xKdz0u4b1rS2Ec41h9rXZ+ZTPgO61/Ad/CdejvfyUt1IS/lZbqIl/FyXczLeYUu4RXcJy1prDcc64w1rctMJnyXdd7Jd/FKXcor+W5dxnfzKl3Oq3i1ruDV3DstaawrHOuJd6/NTCZ8j/Ws5Ht4jd7Na3itruK1vE5X8zrulZY03h+O98Y71mQmE17vvWt4PW/QtbyBN+o63sg905LGe8Lx/P97dmYy4U2ev4E38WbdyJu5R1rSeF44nhPfszozmfC9nrOZ7+XuaUnj+8Lx9+NrqzKTCXdLSxpfD8efRzP+/3/6/z9jjrYp + + diff --git a/template/RSN-networks.L.4k_fs_LR.label.gii b/template/RSN-networks.L.4k_fs_LR.label.gii new file mode 100644 index 0000000..5129f6d --- /dev/null +++ b/template/RSN-networks.L.4k_fs_LR.label.gii @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJztWtuOqzAM7M8Aaen/f9/uSiBZXl9m7LSco+3DqAXPTAJxTLiM2+22HxjfuH9jO7Ac2+OIL8f/ITgnr4Lh4F5ApX3PS/Zl1vFd5aHP7Tu01phWxqIydh0uwss4UbyS1xm8OfQU2BWeClq7JUDGV/vpfuk+6X5tN7sv0jc7rqz/z0Ab6SUsndQvDd3i6BGN1lkaj494n0B4G8CRYx3FvVi1vnr1KptTq4KVzwy8ucj06fTR/WE9LFg6K1cQvZePmdabL5GO1XT52RjvAO8qeNcK77xEtXhGX/Qcs5Bdl64+p/vRz+6YV2tMtT5VdKwG5TN1NuNFXrq26/06pufDauzTtW4Y/9FcRefBVhw3z7PjIb26PsxxeR6d8/KOOfRBD9G1wFrzRBx23R71K2rnlccYtY34ZP3PPBA9cl4YbXbudR32xs5bIyNjza4LGV7GuXoOMsjug+V9KvNMIrs3ydaNXvyhtpfGsW2OT7Tmjjyi+53Z+m7brM4bn4iD1pmr4eUz8vyJxZljyL3VCfbZ4xZoGDB9PNdZM7y6Hh39K3QbqPFyxuJHObYaPD0PJS9bQyDxd85X6xxX57w1ZpWagfQpqyueB1pbrHxltXdCtxrtaW2U/5rP1pv/Dbv6r68Fcttaz3Tqtp6jr/bxzoG1XmDqrKWXcb3taZ+KO5Sf/I+shzx0NAz/nfX33Zh5v2PVscrzBF3fsvWz5ZHlZ+aB5LinZ7QVHXKc2Vh5dfAvwbv2euuQ7L7Duo+M1jWWT3af2PXo6DPtzDZXQLMrfqRh+JKrr88sD4mzMWv/HmxbHjIvH7ffz34ydL5J8L6j8Ppl5dgm4icW0MPSSmgti6p+KbZX0bEa/S3JDC7CWxrxhdhv+QwVY7+pQY7fW9sj44F84+fNf2u+oePL1omuT7cvHX1VW9ExGqSGofUO4WUcmWNozNov83bGc1YW+hzr+cP6bA2fbj+89hkt226lvVfyZ/KQeCX2wQf/Iob634G37keuebJPjM8gPbL1Har3vKpaVjfju/G/jE6ee88fuvNmhseV+m79+CCH97zR4+hY511M5FPJ3a5HR6+fMzE6Zs6jfKaeIDyGY73DkxwvjsR0Lsp9q9qWz/9+9p81KXsnk70PyTyQd03neuMpfiv6R0FvrXuqut3hnhhGO9H7FT0fUe5o8qxczeKvxBcAWHt0 + + + + + + + + + + + + + eJztW8ty4jAQ9M/4GMfBBEKA//+tNbWeylRvz0tWyB5y6AKk7rYsjZ420zAMnyvOK44rTiuWFdcV44qXLf28/Z42XBTGRkyA9w0vDWi5vnW9nvfXs4561HFL/UjbVHUakUbXv7RJlh/FQZab4UUcL5+ls/ir9AFsX8Gj/942fAJuCg/eEfDo//P2KWOBxqQ+rbjSeRf1PVumeSvLhWDa8iy99lgMPZYF9dqDleECdcy0Moaibk7qRqWfFRgfNWNCY/GvCW8BxkYPjjWOeXmt4ysbIxl0+70awJjOQrfNffjqh9kyYRxjWTL3ZPVLy4Nps3qmy2iZxtNZfE+zl59t59ZY+U5Y9464q0+J1R7XPytIHEeQMWsZ/p3HepVrb3u97vDYO760aFuuWdVU+FluhudxMOYkTUPyrHnbS5O1lv6u11+VemB9QONsIOurvXqVq9VH+7XEY0tsMo9n9r2qplq2n4IVhyxGMc37LVgU2HzwwN0A2wdp6DUqmxe9e4jKYPVX7x573d93eFh69Khe/67yr0k+4lrkMw22CfJxvWS1peZG7Z7hZXz+N3j7YL3nk99svmMxxPopGyciTMrzDa4x7rgvvEds44peyhOt3T3tXj3jWDpsJ4TWsHEnug/G9/KfCWuOwrjT8c3SvTTrO1vXHAKcDERnCtHZpeUriMp1IPdyIt5VDyxjq77l+lhHwrmQ75HOOrdkGotrtWeGi2euEc+KI3Z2y7hWXuZ8rwKMLf2cI9JiH7e8snr0OTg+3hw3E4+D8oi0M9EeBn+smh0t4zA8Q2Px2b1mx6zMeBCNFd4YxNJx7Lf2nMiX9Mo4zc4B9FxXGevRC32q8wSeXWb02gP3Iux55zto70R7d7TvhMt0bIywNNaYYu2hPC5qstyIc0xwvPwo3UvT3/V41XOvg2NL9kwBzxMsH2vdHpWFnWlGHtYZW0Zf0bboMppXo16yPGkXGSO9dmdnWi2cZwLPcKN9MsazBtvPevs2Ng9bPszLmsujssyN+puj6aFFXWbdgucQFb7HW4DLzvpx7LQ8l4QPi8Uoj6XjekRzdF+/qvI/5oQ3QHafsOedBAbW56RM1rs6WHbmgxymQ1jaLFq14xN1VY3wj0nulODq91MsruZ4+ZU8ls7qYwK+xGr1TOzDgH5vjq2RLZ1oEdH+xZvvsmWu3vtY9GFrYq8eMh5VfQ9tVbMUrrUEfLbO97wzPB07EYflSQyytIORpveZJ/X7pD4zZ60ZSD/UdYdzqy5b5PddHhU9nkfhnr9Vm9VlNew6Eb/ineH24ER5PeKUxezePtDDp/r8I9L/4uch6xB5BoHrE0zznkdY6342V1jnjS+Bj3feqP8PE+1F9uo9r1ZtdT/VovnFX1TXuA9YZ0Oy39Z9oWWfzXyqHux8uapv8fDqNNJG9d6iQV0vbpXn7QWss0Nrv+a9c4Fp7LsXw9k69Xyq7RN5RD4ZveWR0aEHO5/yNNa7WB4X9+0Wl+3xLY7mYdzofQeLI/RgetRa6Zgmv3X+cfh6zihjUvRMJ3qvMPLIPGuSdctNfbboPwJ9Rsv0WV30zOS48bLv9UrbVbmeP+Mh1+Ow9+28d4C9dO+3xh9EpCLO + + + + + + + + + + + + + eJztW4lu2zgUfLBjO7eyjXM0zdVm//8bN8LyoePxvMfDzaZYlMBAB2eGlPhIibT8YmZH77h6x/Idq3es37G1f9OqnL8vx/P+bcGh6aX4IVaDqKUlbG8Ab2WLXl6XWzvsWvnaljm92UP5fIH9Y6H3ex2lY3HOdY4l5UV1wPu7Iv2N0Hyx/fZ8Ix+ECf4q4PVwM14WnwvgZPnKW2neBC+K+yg+ZlwWPAKOCjxvI7AGbCuI4hH7D9crq88T1euWwNd2RB5P5LG23f6LPuhxGaBFH2Fru8l1i+Lbo3NNpGON2W47tvCtlLPt8G7heawoTi0f4yaqs8ffRpz7HmgwvQhwzHIcTgUeexjPjwJHFaj+mNUH66T6AtYjGyMyPfpk+hne70b02GdbtM+l3Timle6ylPEM5XhZqs3wfigu48n26xHdT5UfXXMtXlo4I1D1i4CxyjHXAiz3CqDa1vvbK2AC+DiyLPXxreoPI/V6HPTBaxjxiPSZB3KeGrUcB5PlY4ICj4lZ7D5CO7bwp0auNfIyTnQdE+Wp+FTP2UP7EJf/vWCd4CqBKsfvyav97E+OllibBLhOLfHu7Rz5tPa7qD49/X8ir56yMc5GxsQeze+AlrFFxWEUn9+CvBoeCn6Yft84qQC5ql9Fz/v7CjCpetT0CL/GQ6/voVwTe1xXPDD5fdl06BE+h9iAR6sW739PmVH7tWqytmF+rS17uP9HZHNgn++dl232vPMYdNT66Mx/EIi8z2C7LFtP7sljkbo+n1OoNZR78mQde6DPeUFU3pPFY9dG6FkX6V27rGjVOw/rWt6RNhWNWs9S8RDxOI4O4WUcFbu+H8WiOh+d433fZu+0EaK1x9r6xOhavqOlbvyu3uPzGvi0eii9ul8916G0vOaEuBU61NwK7nPZR41aq+U1r4zLmhqP+Rnnv4RaC2RE6/g1zGl+L8XnTa/Pi/18v8W+z+2feaHHj8RjAs2atmrcYT1qalDltuqi+SYC58vZHFVB8abArwU1zesB+Tyum+2P97W1FrUfjYu1sRLv2ciz4SN85rkCvksw9zrw8HkG6k9Id0163kc9z8cw3+jYcQL1VrpIw2XVtD38iIvjXo2Hvy9/1tiPZeP42rLu0Drf8bHIx6PoPbbFBzHiw+NZr4caf9ScRWlfK9qofB7fejQMb7tLaseWtSvmMueb7a5h1fKz9bDPwpz8d0iON++v0Twkao/anK32LK6tG7T4HFqXTD9a/xZdb3m95TC/lZvxnIPvX/z7hfJBzhyLE+WhduSdDd/BMG/2w7UZX2fN5rnZ8+RXpi3U3fvaBV0Tpvn4rOAcsAWPCwHUrwMffw9jrfNQ41gUnAXlXiR8Pz6u6FjjMKFRPNZge2b8RcBf2H69Mi6jhZdxsneqlyRvEZxvjfka76+Cc9hHnBbMyefG+L3maSPuCgy8FDypsSS6BvdW9UfU7sXv4FHTZnrVdrgf6VR7YdtzHLPG6Jj56yCfuWvBVZ6LgNfCMZFvwmMKvFeinBneH/wbUd4/dA1WwdtCPUvVGuaIT49HpG/xUfrWskfrPaJjvnXwW7i/imcN+R8Rk3/wBx8Fg338Zt9sf50d/y/QOl/wuYWn+Vlee8bg2P9mu88B9zDQ3wHYh9+t0OOO9hlGHg7P/zvRIvye4f82Mu4N+PP/PVh7Shr1HxHWYb3xHquEXEu80f8GuFG6q+S3cj4ijcwNav8lwfn2yLyDv6cYmbcc6nGItoffuxYxqhlp448uIyvrIcjz9cmt7a7l8Ld0eLwp+xs4x+tDo/GC62yf5cFrg6Panvhbd9TV+biunPFxbSz6thF5E7SrGneQVysz4qh8/K3L814gzwLPDZxr+UbJSvt8Bfg537b8TmTCi1PNB+fBX22/TuzLel8rUnpVJ6WNdIgRHWqWQnMfcJ3v5dTaweOg9r2wc7JvjCMO/lbsa73M5Rjn8xHXj812vyOe9/8BWkurLQ== + + + + + + + + + + + + + eJztW4tuIjkQ7AUy5BIC2Q0hj///0GO0bl1RVNttD9FGq7NUmoer2u3xY+xmWJvZ5oznM9Zn3J0xnXG03+mu3Pc0n58Klqa1wN0gMmX58RXg12jLfTnZsrqq+t3ChrLzC87vK/oo3Yt7tXJrPuDzxefpz5o1v+y6PV8rMMFXGuvkYl9iXq1/roBTy1c+KA3fU1ruqwr7go2A520FJsCxgahf4fjJ+LUnuC8nQq+NyS7HL9pBG6x1ZPQRjnaZXLcqdnt0rol0rDG7bMcM30o5xw7bGZ73FcVp5WO/iXyO+l821caQehfMOBSosTUCNR6zPtXG+SZho6Wv2cDnMarfl3aIfFAa5yOUbm/X73Dkn0iDzwO5Pna5nrXxH7Uxzzu36kO37IeteZH7asa2VfKeAWbXZR0IRtc+j6ztv7ET+YWp5bP7NFIn9TyXtEfGX8ZhsOwRXc+c2NMG1mG7x2ZvPQ6Up/qnes+OjiH2Eft6C88VtOrNZWSeHY9P5WdPH8r60muntz/39usNcW+5RuiB0TGr6eX32FL9MOqftf5bwydArTf+aQC5alxF4/id4ImvLfCD9TV7mfpZon6fpU5s46XxjDD5c9l26BH+THHNm9Xi8+8pM2q/rCZqn3fBb7VplotlLOFZhYOp5z5zVIr8qe2Bfb+3K8fWOw/fpa0xOvM/BSLbj3BclyPXjeeiTP0whsLPNNLiXOQ2dgWKb3RUaxClVynSZuIhvObJ6jg+VdOoeJbqDxGP+9ESXo2j+q6fR31R3Y/u8bkfM+skBsdEM7HHKBbag4xvvDa7hZ2lNm6t5ZgT4iR0qDkJrt9HjYrVcsyrxmVNi8f8TAzuuyCK47cwJ37fjNhR7yxu/5atjI0D8Cc6qnmH9ahpQZWb1fXsiye7HD9Zfu1ez/g+DGp650G/Nrue70f3lCPzNj6zkXfDV9iZ9wq4lmDui7g319/3Gajfku6F9C8iz/W8H8N8Exrf4/BvA4rHGi6rpe3hR1yc9zI85/6peR3LxrkxE3fI7Mt83zGVsnriCbxnG41LKF98PsrY2MC5mn+yPmS1qvzNoIbhbbendsT8KHbF3FbMKhPTWhL3+grMSe1VfD+xpmtcD0Tt0dqztd7FrbhBxs5SXzJ7896yM7re8nrLYX6WW+M5p7bWatl5rugjXWvNhmswzJvtYWzG+/mTjb1PbpmO4LuPtSeqE6b5+rFgBziCjSfCD9JPgR1fh7HeeahxrAoehY71zPfr+4ZuJXT+bRtrVnbtI2uwPRX/HspV/JVd16XGZWR4NU5tTaW0mDe6hopsIn6e8WC/+9JPgYeCOfne2L/Te4X8Ft4KDGwpeFJzSVQHt638R7SexXew0dLW9Krt8DzSqfbCtud+zBqja+ZPQT5zJ8FVNlcBL8MxkW/CxiGwfSfK8e9K8VtbPl8ag1XwtlDvUhXD/Eo7NX3GxpLylS7j84iO+dbBz3BvxbNEflTfnr7zt6H17P/H92gb/Gbf7DrOzv8XGFk7ze/y1juG537+L4OveXgd9Ja0Y3a5dnoLYIGNiB8B/4uDzyHiehlmlz4r7QNp1H9EWIfnNT6XFfnDXFzLRumtkZ/lfEUa6d+t/5Lgfntk7PD3FCNjb6mNJdoR3XfDaP1vVdZnkOfxyei+ut6W8y3c4/jQaH/BONufssGxwVFtVuMxqx5fMdZV24uvgYOx6BrvAO2q5h3ktcqMOCrf4Mh+8H20tYV7mW+UrLTPB8Dv+THzO5ER/8Ouk4rzox73wR/Czgddsw9zXGBHXIfySWl3QsvIlMnXqFmLst4DrvO9nFY7eD9ofS/snNo3xu5n7Ttorwfb4z7O9yOuX5tdfkc8n/8LeG+IgQ== + + diff --git a/template/RSN-networks.R.4k_fs_LR.label.gii b/template/RSN-networks.R.4k_fs_LR.label.gii new file mode 100644 index 0000000..0b7ac5e --- /dev/null +++ b/template/RSN-networks.R.4k_fs_LR.label.gii @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJztWttu6zAM27+0ydL+/weeDYgBgaMkSna6M6APxNJYpG+SfFn2j4+Px4n9C59f2E7czt/7WX47n3ew6WIn+GyiU7+nZfu4on8zOnZsVozxK7g4jgq3Oq8V+5V2mQ92/bcLFkPD554nHg6eABvXGbK53YndnrQJ2/MM6mYajO9pbESjwt2C+iz31uBaHvIjHs5BxPNykmrLdD1NZc1QcmXka938yvIc4p7Aiy8VbC6zNm2mfuSiPuNuIpdpeD4V9RFzi+fDjNvhRPmgmoMqdSjzPOsvVwP7k43j6j4NzSzuBqI16rfH0vapy53JM11uh1fhVPKnYpvlZOZTWMbK0c+9nPsM3uMaORtDShzM+ArqzWhYrVmNij+uWKtn1/kZXmf+3ojPKXgGyfZalb2+sv9BrOoj9pO1KTsjKv1SxrK6F72Cm81DJ/dWOVfsC1Wt347BDiI/YOdZLwaieM1iKMsb3zhOjOfbRL/GfuDm6Chcb7+rxLV3r1LlqrkAuRWel+O8ufZyOdbn5cXs/O3lwizPZndJXlnmryqGf6hnq2907h63gFdBpZ2PBRpRf1/BX83bChw8QyDX2jLfYrYsN1t7tGF3XFFOzvL1FWBzo7SBjVlFK4prT6eCzBdUfrX+u1Bv5MOsPjVWK7ZXoZOjohzOyjDvP+Bd9Hugm7PZXqGT91msd9tiNbxcyMD2DeqcsX2HLfc0h320Z0GetVN46l5m1va34K0vSn5dec7B/Z4CT4f5VUUn8k9FI/PxiK/ECOOq8VXh/OVz85WIzordc4d6FlVisasz25aZ+j0erpNKnWx9jTjemszsozUc+6HYRXpeTlDK1fesLfa3zQFsbOy9j4KZ7xE8dOLuAFR0kBtpHE2+Z5NxO7yrOeNbkpW29vuUrk1W7pWx9+z3bp7Vb2qyPtm24968OifK93tZvttI2xX/WDEGr9CY4Xe5VZ4S97iXV+wVWyWvHYLNd9ndKbs7ZfgeY2HFPWsFOCdsX63q2HHt6GQaGf8Krsqrcirt2wraquYKG9U33njjL2HkQ/tcBdvzZ+sXa4t3fqjoROcQu87adVTle99eV7m4r3sF542f86ZgrHnKfUk3brr8lRozfejW2+X978j6FZWzMjY39h36ID6Pv54PV/vGdGY0qu2w/a3U790XVe0j3pX2dv/t2ePePtLP7mGVcuU907nDs/WHcf9R+b8SwxFoqJqHqJPxM42My/hKnUdhrHZTT2Zv/bJiG9lXbZh9VL4yxw/8A7yVXRU= + + + + + + + + + + + + + eJztWtFy4jAQ4194JFBoSlvg///rwkx2bk+nXWvt9HoPfdCQ2JJsh7UTbzLtdrvPBdcFrwveFpwW3BbsFxzW8ut6Pi34cNgPYALMKw4d6Gk/8vJjHB3fqM/kfEav8VzUzoBenaI9uP9e0VXiYEteKwajut64bgHnkI+Xu8Mn4A64AZ5rwIWUG3xbWez73ynpD/bJ2vkgmNY69InGxDz89WFaRX8KdF67J5qKbu80THcDjYdprL7F3xe4UVxEnlODMzlOtpZVynvWSJxDHscALJZVZDGg9OvodFF/Mj22HfVT0WfjZNeTjZ1pje9jU9FlfGUNUsam8pA7EjNfjegaZLG6VdtX523xfF7B5h6ucYitrsd3eoysMz3anrWtqlH5ylqrrMn3gIPxrNZHc4HNDXbeG6vRPegEuCZQfL1XTwz0+kTjO27gURmLGntbzqGR+Vrh/6+I4hPLroRvx5cADxGvDuz5uQU2z65i29mc9YjudeoYbZyjHo8NPKJrq2ij/6Cq89e20lamy7ioa3EMCq/FUdr5DmT3U7+PxPucxzOmfc4i+w+idYJhWr1fCPad42J7ZkUbedzWPt47tV7fo2PaiB+1qXANFW7GR960/ue+DO8LDA/idwnatron2P4lqmPlviw697/sueYs4I2glZ/I8pbMD6H0C8fS4zPqgXocZ6V9vE7GsWuq6g47nrPMNFGeE/kRz/NVLnJYngjro/wci8MoRkfAYmImPOXewmJsLnqciM8sav16gv34EHVe769JxGPwWoVvyDRnUn9MNNHcrKxDo7zWuhzV436TrUvRnhb3nNFxtk6zdQ73//6+qq6vuH/He3N1fWYelf8X91CP3e/5Zoj0bG/C3pV6j2g/gnxbLzJdtJ7NRb6Hyq3wRtZmfG63Z3dcu1hZhC33OX4+qDkFe6b3+QTvk+Uk2f4HPXBNUH2iPNuINtO3dEyraI67v68Py+Ox/zPKYWW8jPPd+3C2//T7bnXO4J5H3Q9n93rvg16KHj2ifvToWzq/lmC7rT5fSJtqW6bBe/Eov8XD8WY8vyZE9cegPqpj5Vjm+2bH192f+2iD5XvU+9DI9wgRKs/zLFf1UvCpelhdVR9xWtoe3Vdr7FuSLbn++5Rer5ZHVKeUTXBssYo5Nf8sxvAewL6p88/YETfSeyi5new+5/u8b7TNcovsWox4TIIH+lT1WR8uhbbxGb2iq2guIr/CVXh+7cs4Ub3FX6v8DGV2/Izl2R3b7xbw+UyWv2b5ipYnyyVt7aHqe9qPtJU2K21V+jfCVfLxvZyWdqt4xbhV3zl8pU/0HkT1VL4HV3k/GAfm4D7EssqeIbsnsZzhIfDZE36EzEPxaelbXj17ox5db1s/aL8Px+fF1vt6tp+s7rXRp5I3Zh7V3LPX/0ut/+5A1Sj7CmXfpnJ7PNn3Gf7Zk9VHezVWnr0PwHNrK4vfyhgjn8iDeal61heWo23ps/xu9K490yi6GznO+NHenfGUfHaLx3KerP6Y1LM6eybPyuzct+Hzypb/aL2LaeE98VA930Wflr7l0dJiHr01boP6fa7/Hkzlq98Aq98MoyfjZxz83k2tY+XsHI+fv78AinwH7Q== + + + + + + + + + + + + + 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 + + + + + + + + + + + + + eJztW4ty4ygQnPVDseOs7VxsJ+v//9ALdUyl054ZBqTdq7o6qrokwXSDYECA8VpENp84Vmw/MVVIfd5/4qM+rz9xk2XC2sC2QsM2iWx+1wqB+ytpaVn0PaP33VVk388Kf4H9iMbOgcePNET6uNdafuRv5XudIg/rXOTr3a02vcpjmwnZW9yrPOZj2eI7XB0bLksrLy890m3FWTZct4wjoIQN4WjgSb76vuJS+XhVRD6t/ecGdso7GuXxyoR97wawNCz+0eFjHWX5qrGq+BFwLO4KYNkc6arhR+WUMHXmFXGsYNlaoZTpQnYXw+5CdpZNiY/GJs/XWuPqSLD60s3ACWD5ci+s9vH6tlUmr09tAo3ToIZVH9pPW3yLo8HLX3len+F+HNXpCGfUPrLN+MISfjXHHzP1kS2rJPM8V6D2KQH9VukYE31ntDyZMm0W0pnTnj3+wGWZ40u9vJHxMFN3GOaWITNuczrWIaZxHzgl40b7EJff6wcFZ4DAfVYb54AjPmBp9fqfpTXix0vxl+DJYBlG+NJhL4P2c96FwT56pjj0ZU5XFD+7y9f3QL8Db4C9gzU9Yx/w5g+Kjwb2UGdW3i0+wpvP7xvvx4jWEh9JjYh/HOR/JPPXthC4Z+4HXVt5oj2it71HbJey+1PQwHEZ7jmoW8avqst7E4gngtfGZ9C6O0BdDUXzIP+MES8Vu3oVsceizDdfQLOXi+WTqqFtYI1V/KxxOk6+JPNFKK/FtfLO8BDati0O+4Lua2Vt0Yei9CXA3xjLtzGe/dOKuwdprfmVhRK8PffWHkV2/95Dpnz4TqMap4U0TjP5Fo/3mzI8a58q4uCezGTY3hxba1/sRnbZPbXWXlfka78THLzfBjx435m72D7So6P9mnWQNwUaU6BhjUXW+MN8aw3ZgnRy0Yd78tPxzEubSMuy7xkLsn3eGouwj1rpnJZZs46ugb1x0fomeG2iPrhPakU6+06dt5kab+KvIbH/a/ra4Fhcr6+3uD28iDPXvte2Ve7IRu2y4/ad7hEcNzn3BdbcPoK3ztG1u4533rw4s3a0xrReDRzvTgM63ng2wt0k68Gbv3o8b8/zFLSfty/VYyt0zWr1+toINGRsvTVJdv2saK31vTWRp+NpTQmdSCMzh/D4We5onj28e2f5dJxT29Z8Kmt7XsAmSj+LPUc4O3FHej5TWrniGRetm971Aq8bonNirfBerxfJ9TUN5f5QgXtWLV8TQ0t1ypmSZ4Pzk7gHA3om5VDL/tOAxdH7Xc27xVvRs8djuwO8q7bXOigb5yHy3Q9WlAc+e7Yi388JWXZCdp4W5uf5apTG2DWeEd4cV2pbFLwCNGDcc43TNbbiGbCC64rSCt4BqsXQOjyBjq6bp+Ad36m8LXj1xHUxojGHv57J1/Jb7arxHk8hxM1yRB79AduQ/cHymYLJsWU7y8dGbKL0KJ7zKcCzp3weNTo7Ogrs0/gN0P0KcXgcr2sw1vD2UC0d/g5m+NuF+FbZM7w5nGz5evTV/zOaLb2eup8L+cO8//HfgnTalsBjqsaVsJbH3wJavw3w3AjnKt63hcd9/G/EFXQw4Fwo0lFYfJ5PKTw+vovF83SsNGtOZ/3PQwPyrPJFeRVg+3EerfKzrdD9O6RzudnWeje2+TeC7rFk/PriAM8QKHB/NttnNFj/TenVGdVg/kj+I7z1DN6SkN/wrpHmhdJLUL+ZSJ/neFZ8tJf5BFfLZ7Ntrhr8vxnWzLb5NMC/g53F7+Vm8/T2qqK6wr3J+4C9N5acDFtPU6q9Z4fzbMsG5+xcJourwD3NO+koj/d1jxSP4VdF729EBc+kZeljPOrpvtirYc9lUw3rLGEpg577srgK6wzia+ViHTAP+R6vh6PnAtGGbdVeOa22QNuovYpvtc4Yv8jjHh3aaFnQl/HcLcdp/AtpM1/Haj5v/TdHc5J9 + + diff --git a/template/hcp_cortex_seeds.mat b/template/hcp_cortex_seeds.mat index 06f2054..477f847 100644 Binary files a/template/hcp_cortex_seeds.mat and b/template/hcp_cortex_seeds.mat differ diff --git a/template/parcellations_VGD11b.L.4k_fs_LR.label.gii b/template/parcellations_VGD11b.L.4k_fs_LR.label.gii new file mode 100644 index 0000000..7d6968d --- /dev/null +++ b/template/parcellations_VGD11b.L.4k_fs_LR.label.gii @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJztWotSFDEQnBOQl3i8BVEUtApBQBH4/1/ztkiKZpzJzGSzhxTbVV13l3TP5jHZus2G6AEriVN6xAS+79NTTBpQw0biqsANYG17vGjVv+eM0ac/td6aceTzafkiebDq1PIck7SWRqujYLmka4UVgxH0XWNWu1rE6dMmon59qx2bGl90LiL6FmvdG6tUX3sfjNyvvDgK6pcFtlqHI+YHnD+vrqT16CyNVG/d51sSscj4FrjEGFkPkTXC62vbswxxpBjcv0R6P8jwWuNAitczduiL3oOi963onA6h9WrmuUZqc7kGXd9yfuS5z7m7kPiGcV7g1420QWp3JFbuu9UOKUZp7EpevG94vJLH8kn6BcX71tCjztKW8kurXxTqsF4q57ms3XefC7sF7jW6xl7DWCNeJ3Yr6qRyXoa/94D7jB78ZrSwxrgO5MjtuAVeGTxTeDLjn4o+5n6dM/bxnqf21HhPgCWvpO+Yx6ME7vH4uP4HeLT5zTrkGWhzjpCg63hF/+bTWlCHucPryajX6rCchDi8LOOWfWr4mHg444GhndLT9wQ1OJ7xfeIUvnf8lIg4SG3L7dQgxcnMMaw4nhjZf0TyPhD676A/kheJQB8J7ZV8d4kZh0ofNb0FrzYS86VhSm3WQMtYLds0YnhY67JD6T7nqW8NnlubM26l7++ANbEQLeJEYowYUQLfU+T4IFDaB/A+/5T2EjKHjjG034NWPs/eIs6ZZy8wz7N339HaF+yAe5P8HcqiUae9c5HeV/D3H9q7iJZ70tKz8brANSoD15gWx0LfGNwb8VveiA+9mieCiD4a24KVa1q99u5EKi/9XoHPWycvgIgbGuZ8Ar8+36e6BGp7Vr+Uvlwq/C7wrNL/LVHqi+Ql8GROCt6fidzzVfChHn0ZkofrEV+Y3qvFHOp0p0lzCroLxlOgpLmG+mtWf804CZTnXMTfN/SY75j388Y9I1F5LbVAq3jPMV7/A+5tSRPPiIfn5ONEPDsrnbEunbP2AvcDthI3Eym1IxJnm8XIfYnEyO04Jr9/G66dvR0848J91njusOvl62ieHWCGR9/hMz3Of62OmEa7rrfeU65pPbByXsp9zBPPuinF6eNv4Y16aGAPOfQerZRbEU3pXP48Ufq/Iv2/qYmDKMXp+7+pj7/2f1vNGe/o+fAhzp+/RLY+r2g9a3ewnrV5nAikGLX+GtR6X+uzw0tG67Uz4vUC9y2l77XAM3x9MZ5ZHWHhLwoEXr8= + + + + + + + + + + + + + eJztW4tOGzEQND/F8UoaCARKQwKUVynl/z+jd+qtNF3t0z4oSLU0grNnxj57DfHmbllKmffY69H1WPWY9bjtsdNj0+Oyx0X5U5YjdibAEvB1xArwIOARgNxMv0N5Ajz32AKmuscpfJbjeGv1L6P+V4WW1uQlqVtVaHEtSRvlr8Y1fFa4FDsel8cY8Z4Yh8cfch5YG8VYEXTUZtXRGLCv4ed2/LlkGMqNgC6AXQHXAtA3srel8UTH5HloXngPNCbPo8A9SnrP51rQS3MT0UZ1qNXWYgp+lGvtWY/zGmiv/TtogWLsi4KjAOYjDgEHI/YceLHfOqYan3n5+54yHnweLD3q+LzQ/GnrUpx51XSW5ibZB/K7ABfXNxoPNRyrXYo1Kw4jkOIe4e2ByH5oGVfLePYm8Oga+kZ9rbZGV9NPpq8MP8LN7q2WPTN1nA6YJzEzgGPHmKX9kPE+TOis8fH/CTVe3CPrc9DgUavlcx/RSmtmaSw+10S5EZ4WXwTefhBok+KWx7O2vxcGTgGXAcwcP8JFAJH+EN8EkNdU92fdU3Scb6Gv0Q7zU5I6nNupNRJf00g8iVsUHnIvHI7VrrVJ9ResHq8x7qcsQ07yXsAJw/EIzwtxl8T/0l6yc8nnf1jjE8Y5ByCfuAiNa/HOFV4tB9vuhTaMc6rHOopfXodtCPrfjudu7TMkz7Eihvwk5vj4GVviRyD1ZX3O5XkHzSvqcTSBh6S3tDNB26LzNDPQRPuZVXCjPB47nKPlcd4TS/ip7YnTADJ7TNNk92qZwKNFX6ut0U0dxx8R9LdOq5+zOqyXcrzStXTGtOIDY20oGwX0OTUS94QaH23/FaaXPLw9XBR9ZP/zs1lGh9r30GT4HxkL4XqhXC8EWDnhYV+cGRgKnoVoX0r9cFj5hNkEXq0e86T+jGkRno6g5ctqNISS5Ndw6VrLtZ0JbZxjtUvfc2jfWbR8L3kM2Bcgnc9vi16OGfC8JHlFPLhXrUdUr/V/LGgxdqQ51bRRnaTR1o9rMvwod+DsOZzicHg88jYpRlu+s5HOzRK0Z2Jey7TPJ1CpzVXxPEuLxx141PrU6r+P81Gry/CzfUX53FvjR8ZgeV2zdopTq+0a2rD+BurwWSm6pnjHuPfy6esRVwZ+jNhWQtpL2rlEwpqB38OOMXZPG/HZJny0cUQ9WvQ0354OtWu2Vlfwu6RbC5ptQJPhR7keb6O0Y2xF26R6qw6vsd7KufLnqr2cLK2htm+KoJHywZbHJuixNvTWOB4D+lqtp8v0l9Vk+BY3y9M43CfSFqn3rq25lOJfe8eA7wFPa/lwvaW1xtKijegeKvhZTWZMNfMdeW/EWqeVcJ3B8P4CFXqfgT+rzyF9Xqn5/KP5IAp4l4AH12sYivRuBXJ+GijK+C2NpfP02TPYlOe6zwzpXRGElBtCRM/Y0lkbz9t45qg9s6OHNzZtHC36V9Bq81MULddJkMab1bwFN8MZyq7AkWKvGG1afRS4JtZ9ej6Yp6vx6By913/3D7RdUtMpmgzf4nVBP43H84YeZz+gleojOUsJrYW+q6EzfYsPzytECj5vKOUm3lpbo9PyKFrx+FKOxsutcd1nwG8iFZX8 + + + + + + + + + + + + + eJzt2kEOgyAQBVB7/0t31U3TKv0zKI3vJcREGAQU4mK27bvHQV21dJrx3K75XdlHZT5pbLKOnyTvsNJ2z2ibuzljb1dVx1SZW7o2SVzHXvl1L462GznLRurTczA5SwAAAAAAAACAe5OfMEe6HklckuvT3XY07yet38v3Obr3nrPzuq7yzc7eS139rbJeAMD5uv5XOvq5Mr4zZz7Ngf8WOyP//B/LSjrGVO2jI/7MOABYwRMf9QFo + + diff --git a/template/parcellations_VGD11b.R.4k_fs_LR.label.gii b/template/parcellations_VGD11b.R.4k_fs_LR.label.gii new file mode 100644 index 0000000..5f2e10a --- /dev/null +++ b/template/parcellations_VGD11b.R.4k_fs_LR.label.gii @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJztWotOGzEQXEgaAn2E8KYUWqCVUijQUuD/P6054RXDar1e+3xJI26kEYk9s7c+28fZMdEzNuYczzmhF6zB5wN6jbUKjOEjcFMQ60rz8aJW+5YZo017Su9HiU+DpZf9b3m08aJpNx1aHIeaxqqPjd3YNbvCOMEctJ1jqZxKMYa/pTkx2rSt9N6U+HL7osZc9Oo8zzJPfelzMPfZ48FJhnZDMDUH24z9Ht0C+9Grs7QeXUqj1XvGWC0yBoHDwBHwnUFrbhCl54OVF+aDOaXy2BBxPG2y5rd1fc/zgRI+q39GBZ5xRm7INnqPdpHjehlzqAaa+8T9zeONxx/P0XXBRaPk+gPD74kzoHj7U3Gse2d58dmT8q0rngGl89b6N+YZifjSg7qUVhtfQ0f90KjD8hGUYXns/8iysGdwv9I19ivG6vE2sVdQp5XLMvy+DzwQ9OCPoIUthe+BEpzHA/A2wVmE53P+LWgjt+tKsI33KuRT4j0HWl5N35DvhwXp0Xyyv6T+J3hi/cs65CyilbqGTX9vZeiQWHeraBhWvazTPJ4yxoP4G8PnwOM5jxLaCb3+naAEZ3N+CpzA54ZfAhFHITfOMwYtDpNjpOJ4YrD/hPR9IPQ/Qns0LxKBPlLy1XyPgYzjSBtj+hS82pyYq4YJ1ZkDNWPVzKlH90jNywbWc85TXxtybG3POQ2fPwBLYiFqxenRowbkfqbcfz9UqO0DeNc/1l4Cs+sYXfs9qOXz7Atin3n2ArmfvfuPnv1J3jNrIPfKDpWyIXi13zdIfOd9M7mHFttPq7kvHVsb41pdrqc04BzTYsg4nhjSH1tbSv8ivZbPulYOcvS5sbtCbHxqY1eW4Xf8HebByWsg4p66Oacgry/3qW6AsT2r35G23ET4Q+Gs0P89kJx+Ag9Tuw+s/xUoPd8UH+rRdxmoeaT+EvhV6L1aHEON7iJoLkB3LXgB1DR3UH8n6u8E1zLK+awMfr+nl/GO437ReBIk0udQTdSKt4z79T/gKS2p4unxvE4+C7TOV6fOWXuBa/hp4HYghTy8MRruiBjcFm8O7J+C15PDjuJt4Lkv0pe6n7vieqk+2AUSve5TS9/g1NB6deTUnILG8nvKT408LHjGvDb2cZyUxuA4OX4tjzb5l+RMHXi0Me3RW1ptjuRoYnNs0efyrXcV7f3GGyf2fmHFafve1MZf+t5WcsY794x4F+u6VWTt84qptXaD1FpbxsmBFqPUX4JS71tdO6wyas+dRaM0/1Vv96qgxr49nuFri/7Mao8U/gGMwmGn + + + + + + + + + + + + + eJztW4tS2zAQFF9V80ooBAKlIQmUdyn//xe1p76Z7c09JVPotJrZAUu7K1k6gXVxFqWUeY/dHl2PZY9Zj5seOz3WPS57XJRfZTFiZwIsAF9GLAH3Ah4AyM30O5RHwHOPDWCqe5zCZzGOt1b/Mup/VGhpTV6S+iXTRjVLpo3yl+MaPitcih2Py2OMeI+Mw+MPOfesjWKsCDpqs+poDNjX8HMz/lwwDOVaQBfAJwFbAegb2dvSeKJj8jw0L7wHGpPnUeAeJb3nsxX00txEtFEdarW1mIIf5Vp71uO8Btpr/w5aoBg7UnAYwHzEAWB/xK4DL/Zbx1TjMy+/31PGg8+DpUcdnxeaP21dijOvms7SXCf7QH4X4OL6RuOhhmO1S7FmxWEEUtwjvD0Q2Q8t42oZz+4EHl1D36iv1dboavrJ9JXhR7jZvdWyZ6aO0wHzJGYGcOwYs7QfMt4HCZ01Pv4/ocaLe2R99hs8arV87iNaac0sjcXnmig3wtPii8Db9wNtUtzyeNb292cDp4DLAGaOH+EigEh/iK8CyGuq+7PuKTrOt9DXaIf5KUkdzu3UGomvaSSexC0KD7kXDsdq19qk+gtWj9cY91OWISd5J+CE4XiE54W4TeJ/aS/ZueTzP6zxCeOcA5BPXITGtXjnCq+Wg213QhvGOdVjHcUvr8M2BP1vx3O39gzJc6yIIT+JOb4jBokfgdSX9ZzL8w6aV9TjcAIPSW9pZ4K2RedpZqCJ9jOr4EZ5Rwycw9vfAwv4qe2J0wAye0zTZPdqmcCjRV+rrdFNHccfEfS3Tqufszqsl3K80rV0xrTiA2NtKGsF9JwaiXtCjY+2/wrTSx7eHi6KPrL/+dkso0Ptn9Bk+B8Z/GzMz8t4LZ1HrZzwsC/ODAwFz0K0L1vzCrMJvFo95kn9GdMiPB1By5fVaAglya/h0rWWazsT2jjHapc+59A+s2j5XPIYsCdAOp/fFL0cM+B5SfKKeHCvWo+oXuv/WNBi7EhzqmmjOkmjrR/XZPhR7sDZdTjF4fB45G1SjLZ8ZiOdmyVo78S8lrd5T6E2V8XzLC0et+BR61Or/wbzUKPL8LN9RfncW+NHxmB5bVk7xanVtoU2rL+GOnxXiq6lePfy6asRVwaeRmwqIe0h7VwiYcXA72HHGLunjfhsEj7aOKIeLXqab0+H2hVbqyv4XdKtBM0moMnwo1yPt1baMbaibVK9VYfXWG/lXPl71V5OltZQ2zdF0Ej5YMtjHfRYGXprHA8Bfa3W02X6y2oyfIub5Wkc7hNpi9R719ZcSvGvfceA7wFPa/lwvaW1xtKijejuK/hZTWZMNfMd+d6ItU5L4TqD4fsLVOj7DPxdfQ7+rFL7/CM99zwxFPAuAQ+u1zAU6bsVyPluoCjjtzSWztNHz14l0Me/BOm7IggpN4SInrGlszaet/HsUXtmRw9vbNo4ptBb81MULddJkPrLat6Cm+EM5ZPAkWKvGG1afRS4JtZ9ej6Yp6vx6By913/3DtouqekUTYZv8bqgn8bjeUOPsxfQSvWRnKWE1kKf1dCZvsWH5xUiBd83lHITb62t0Wl5FK14fClH4+XWuO5vwE/gxKOI + + + + + + + + + + + + + eJzt2lEOhCAMBUD3/pfeC+wqvhbFOJP4I1QBUyJJt+2/z0Fb9eo0471d87vzGZX5pOuRxP2SfMNK3z2jfd7mityuqo6pMrd0bZK4jlw5m4uj/Ub2spH2dB9M9hIAAAAAAAAA4N3UKcyRrkMSl9T6dPcdrftJ2/fqfY7u7dXsrGB2DnU9b5X1AgCu1/Wv0vHfc2d8Ov7k7HT27DXjXPfEayUdY+rKuUr8lXEAsIIvJA0Bag== + + diff --git a/template/parcellations_VGD11b_4k.mat b/template/parcellations_VGD11b_4k.mat new file mode 100644 index 0000000..b7e30df Binary files /dev/null and b/template/parcellations_VGD11b_4k.mat differ diff --git a/trial_functions/contrast_Motort_Basic.m b/trial_functions/contrast_Motort_Basic.m index 7b9d24e..a9865c0 100644 --- a/trial_functions/contrast_Motort_Basic.m +++ b/trial_functions/contrast_Motort_Basic.m @@ -122,7 +122,7 @@ %--- LockMode 'TFLASH' tfavgTimes{1}=[-1.2:0.025:1.2]'; -srcTimesFine{1}=[-1.2:0.01:1.2]'; +srcTimesFine{1}=[fliplr(0:-0.02:-0.8) 0.02:0.02:0.8]'; srcTimesCoarseSing{1}=[0 0.3 0.3 0.6 0.6 0.9]; @@ -130,16 +130,13 @@ 0 0.3 0.3 0.6 0.6 0.9]; -srcTimesCoarseCompFIX{1}=[0 0.3 - 0 0.3 - 0 0.3 - 0 0.3]; +srcTimesCoarseCompFIX{1}=[0 1.2]; basePeriod{1}=[-0.3 0]; if hasEMG %--- LockMode 'TEMG' tfavgTimes{2}=[-1.2:0.025:1.2]'; - srcTimesFine{2}=[-1.2:0.025:1.2]'; + srcTimesFine{2}=[fliplr(0:-0.02:-0.8) 0.02:0.02:0.8]'; srcTimesCoarseSing{2}=[0 0.3 0.3 0.6 0.6 0.9]; @@ -147,10 +144,7 @@ 0 0.3 0.3 0.6 0.6 0.9]; - srcTimesCoarseCompFIX{2}=[0 0.3 - 0 0.3 - 0 0.3 - 0 0.3]; + srcTimesCoarseCompFIX{2}=[0 1.2]; basePeriod{2}=[-0.3 0]; end %======================================================================= @@ -158,8 +152,10 @@ %======================================================================= %======================================================================= tfavgFreqs=[1:100]; -freqBands={'D','TH','A','Blow','Bhigh','Glow','Gmid','Ghigh'}; -tmpSingCases={'LH','RH','LF','RF'}; + +freqBandsCoarse={'D','TH','A','Blow','Bhigh','Glow','Gmid','Ghigh'}; +freqBandsFine={'D1','D2','TH1','TH2','A1','A2','A3','B1','B2','B3','B4','G1','G2','G3','G4','G5','G6','G7'}; +tmpSingCases={'LH','RH','LF','RF','FIX'}; tmpCompCases={ 'LH' 'FIX' 'RH' 'FIX' 'LF' 'FIX' @@ -182,6 +178,9 @@ 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst(end)=[]; + end %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'tfavg',... @@ -195,6 +194,9 @@ 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst(end)=[]; + end %------------------------------------------------------------- if hasEMG % Quick way of defining the computation of corticomuscular @@ -203,7 +205,7 @@ % the highest coherence. cntrst{end+1}=newcntrst(... 'pipeline' , 'tfavg',... - 'connemetric' , 'emgcoh',... % SPECIAL CASE - in tfavg only coherence with emg is computed to get an idea of the band of coherency + 'connemetric' , 'emgcoh',... % SPECIAL CASE - in tfavg only coherence with emg is computed to get an idea of the band of coherency 'lockmode' , {LockModes{iLM}},... 'mnemtrl' , tmpSingCases(iCase),... 'freq' , tfavgFreqs,... @@ -212,6 +214,9 @@ 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst(end)=[]; + end end %------------------------------------------------------------- cntrst{end+1}=newcntrst(... @@ -221,34 +226,84 @@ 'timeperiods' , {srcTimesFine{iLM}},... 'baseline' , {basePeriod{iLM}},... 'baselinetype' , 'diff',... + 'invfiltertype', 'avg',... 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); + if strcmp(tmpSingCases(iCase),'FIX'), + cntrst{end}.baseline={[]}; + cntrst{end}.baselinetype=[]; + cntrst{end}.invfiltertype='all'; + %cntrst{end}.timeperiods={srcTimesCoarseCompFIX{1}(1,:)}; + cntrst{end}.timeperiods={[]}; + end + + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + % ---For fixation compute also power from pseudo average ERF + if strcmp(tmpSingCases(iCase),'FIX'), + cntrst{end+1}=cntrst{end}; + cntrst{end}.invfiltertype='avg'; + end cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- + %{ cntrst{end+1}=cntrst{end}; cntrst{end}.baselinetype= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- - for iBand=1:length(freqBands) + + + %------------------------------------------------------------- + cntrst{end+1}=newcntrst(... + 'pipeline' , 'srcavgdics',... + 'lockmode' , {LockModes{iLM}},... + 'mnemtrl' , tmpSingCases(iCase),... + 'timeperiods' , {srcTimesFine{iLM}},... + 'baseline' , {basePeriod{iLM}},... + 'baselinetype' , 'diff',... + 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... + 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... + ); + %'freqband' , freqBandsCoarse{iBand},... + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst{end}.baseline={[]}; + cntrst{end}.baselinetype=[]; + %cntrst{end}.timeperiods={srcTimesCoarseCompFIX{1}(1,:)}; + cntrst{end}.timeperiods={[]}; - %------------------------------------------------------------- + end + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + + %------------------------------------------------------------- + if hasEMG cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavgdics',... + 'connemetric' , 'emgcoh',... 'lockmode' , {LockModes{iLM}},... 'mnemtrl' , tmpSingCases(iCase),... - 'freqband' , freqBands{iBand},... 'timeperiods' , {srcTimesFine{iLM}},... - 'baseline' , {basePeriod{iLM}},... - 'baselinetype' , 'diff',... + 'baseline' , {[]},... + 'baselinetype' , [],... 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); + %'freqband' , freqBandsCoarse{iBand},... cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); - %------------------------------------------------------------- + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst(end)=[]; + end + end + + + + %------------------------------------------------------------- + %{ cntrst{end+1}=cntrst{end}; cntrst{end}.baselinetype= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} + for iBand=1:length(freqBandsCoarse) %------------------------------------------------------------- if hasEMG cntrst{end+1}=newcntrst(... @@ -256,7 +311,7 @@ 'connemetric' , 'emgcoh',... 'lockmode' , {LockModes{iLM}},... 'mnemtrl' , tmpSingCases(iCase),... - 'freqband' , freqBands{iBand},... + 'freqband' , freqBandsCoarse{iBand},... 'timeperiods' , {tfavgTimes{iLM}},... 'timedef' , 'concat',... 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... @@ -270,7 +325,7 @@ 'connemetric' , 'coh',... 'lockmode' , {LockModes{iLM}},... 'mnemtrl' , tmpSingCases(iCase),... - 'freqband' , freqBands{iBand},... + 'freqband' , freqBandsCoarse{iBand},... 'timeperiods' , {srcTimesCoarseSing{iLM}},... 'timedef' , 'concat',... 'baseline' , {basePeriod{iLM}},... @@ -348,6 +403,7 @@ cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %} %------------------------------------------------------------- + %{ cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavglcmv',... 'operation' , 'diff',... @@ -364,17 +420,17 @@ cntrst{end}.operation= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- + %} - - for iBand=1:length(freqBands) - + for iBand=1:length(freqBandsCoarse) + %{ %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavgdics',... 'operation' , 'diff',... 'lockmode' , {LockModes{iLM} LockModes{iLM}},... 'mnemtrl' , tmpCompCases(iGroup,:),... - 'freqband' , freqBands{iBand},... + 'freqband' , freqBandsCoarse{iBand},... 'timeperiods' , {srcTimesCoarseComp{iLM} srcTimesCoarseCompFIX{iLM}},... 'invfiltertype', 'ind',... 'selection' , {eval(['sel',lmstr,'_',tmpCompCases{iGroup,1}]) eval(['sel',lmstr,'_',tmpCompCases{iGroup,2}])},... @@ -385,6 +441,7 @@ cntrst{end+1}=cntrst{end}; cntrst{end}.operation= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'tmegconne',... @@ -392,7 +449,7 @@ 'operation' , 'diff',... 'lockmode' , {LockModes{iLM} LockModes{iLM}},... 'mnemtrl' , tmpCompCases(iGroup,:),... - 'freqband' , freqBands{iBand},... + 'freqband' , freqBandsCoarse{iBand},... 'timeperiods' , {srcTimesCoarseComp{iLM} srcTimesCoarseCompFIX{iLM}},... 'timedef' , 'concat',... 'invfiltertype', 'ind',... @@ -427,7 +484,7 @@ end - + end @@ -557,7 +614,7 @@ % Here go mnemonics for each trial selection i.e. {'0B'} %---------------------------------------------- contr.freqband = ft_getopt(varargin,'freqband',[]); -% freqBands={'D','TH','A','Blow','Bhigh','Glow','Gmid','Ghigh'}; +% freqBandsCoarse={'D','TH','A','Blow','Bhigh','Glow','Gmid','Ghigh'}; %---------------------------------------------- contr.freq = ft_getopt(varargin,'freq',[]); % frequencies to be analysed . Currently only used for tfavg pipeline; @@ -658,9 +715,9 @@ printMnem=[printMnem,'_[',pflags.timedef,incontr.timedef,']']; end if ~isempty(incontr.baselinetype) - if ~strcmp(incontr.pipeline,'tfavg') - printMnem=[printMnem,'_[',pflags.baselinetype,incontr.baselinetype,']']; - end + if (~strcmp(incontr.pipeline,'tfavg'))&(~strcmp(incontr.pipeline,'srcavglcmv'))&(~strcmp(incontr.pipeline,'srcavgdics')) + printMnem=[printMnem,'_[',pflags.baselinetype,incontr.baselinetype,']']; + end end if ~isempty(incontr.connemetric) printMnem=[printMnem,'_[',pflags.connemetric,incontr.connemetric,']']; @@ -673,9 +730,9 @@ printMnem=[printMnem,'-',incontr.mnemtrl{1}]; %Here a hyphen is used instead of underscore. The next underscore shoudl be after the trial mnemonic printMnem=[printMnem,'-versus']; %printMnem=[printMnem,pflags.lockmode,incontr.lockmode{2}]; This was removed as - %only contrasts from one - %datagroup are - %supported + %only contrasts from one + %datagroup are + %supported printMnem=[printMnem,'-',incontr.mnemtrl{2},']']; %Here a hyphen is used instead of underscore. The next underscore shoudl be after the trial mnemonic if ~isempty(incontr.freqband) printMnem=[printMnem,'_[',pflags.freqband,incontr.freqband,']']; diff --git a/trial_functions/contrast_StoryM_Basic.m b/trial_functions/contrast_StoryM_Basic.m index bc6f9dc..e1a205a 100644 --- a/trial_functions/contrast_StoryM_Basic.m +++ b/trial_functions/contrast_StoryM_Basic.m @@ -252,6 +252,7 @@ cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- %------------------------------------------------------------- + %{ cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavglcmv',... 'lockmode' , {LockModes{iLM}},... @@ -267,7 +268,9 @@ cntrst{end+1}=cntrst{end}; cntrst{end}.baselinetype= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- + %{ for iBand=1:length(freqBands) %------------------------------------------------------------- @@ -323,8 +326,13 @@ cntrst{end}.connemetric= 'orthopowc'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- + end + %} end +%==================================================================== +%==================================================================== +%==================================================================== %==================================================================== % COMPARISONS @@ -369,6 +377,7 @@ ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- + %{ cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavglcmv',... 'operation' , 'diff',... @@ -384,9 +393,10 @@ cntrst{end+1}=cntrst{end}; cntrst{end}.operation= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- - + %{ for iBand=1:length(freqBands) %------------------------------------------------------------- @@ -445,7 +455,7 @@ %==================================================================== end - + %} end %==================================================================== @@ -489,6 +499,7 @@ cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- %------------------------------------------------------------- + %{ cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavglcmv',... 'lockmode' , {LockModes{iLM}},... @@ -504,7 +515,9 @@ cntrst{end+1}=cntrst{end}; cntrst{end}.baselinetype= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- + %{ for iBand=1:length(freqBands) %------------------------------------------------------------- @@ -561,6 +574,7 @@ cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- end + %} end %==================================================================== @@ -575,6 +589,9 @@ %- datagroup BSENT %---- No single conditions %---- only comparisons + +%{ + iLM=3; lmstr=lower(LockModes{iLM}); @@ -668,7 +685,7 @@ end end - +%} %==================================================================== %================================================================== %==================================================================== @@ -678,8 +695,54 @@ %==================================================================== %- datagroup BU -%---- No single conditions -%---- only comparisons +%---- single conditions + +tmpSingCases={'stor','math'}; +iLM=4; +lmstr=lower(LockModes{iLM}); + +for iCase=1:length(tmpSingCases) + + + %------------------------------------------------------------- + %------------------------------------------------------------- + + cntrst{end+1}=newcntrst(... + 'pipeline' , 'srcavglcmv',... + 'lockmode' , {LockModes{iLM}},... + 'mnemtrl' , tmpSingCases(iCase),... + 'timeperiods' , {[]},... + 'baseline' , {[]},... + 'baselinetype' , [],... + 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... + 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... + ); + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %------------------------------------------------------------- + %------------------------------------------------------------- + + + + %------------------------------------------------------------- + cntrst{end+1}=newcntrst(... + 'pipeline' , 'srcavgdics',... + 'lockmode' , {LockModes{iLM}},... + 'mnemtrl' , tmpSingCases(iCase),... + 'timeperiods' , {[]},... + 'baseline' , {[]},... + 'baselinetype' , [],... + 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... + 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... + ); + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %------------------------------------------------------------- +end + + +%================================================================== +%==================================================================== + +%{ iLM=4; lmstr=lower(LockModes{iLM}); @@ -772,7 +835,7 @@ end end - +%} %================================================================== diff --git a/trial_functions/contrast_Wrkmem_Basic.m b/trial_functions/contrast_Wrkmem_Basic.m index ca1f788..cec7628 100644 --- a/trial_functions/contrast_Wrkmem_Basic.m +++ b/trial_functions/contrast_Wrkmem_Basic.m @@ -108,7 +108,7 @@ %===================================================================================== % INDIVIDUAL CONDITIONS - extracting condition trial indices and mnemonic labels - %--Case - fixation -[seltim_fix,labtim_fix] = trialsplit_Wrkmem(trialinfo, 0,[],[],[],[],[],[],[],[],[]); +[seltim_FIX,labtim_FIX] = trialsplit_Wrkmem(trialinfo, 0,[],[],[],[],[],[],[],[],[]); %--Case - all images , memory, target types (no settings , default) [seltim_allstim,labtim_allstim] = trialsplit_Wrkmem(trialinfo,[],[],[],[],[],[],[],[],[],[]); %--Case - OBack @@ -148,7 +148,7 @@ %===================================================================================== % INDIVIDUAL CONDITIONS - extracting condition trial indices and mnemonic labels - %--Case - fixation -[seltresp_fix,labtresp_fix] = trialsplit_Wrkmem(trialinfo, 0,[],[],[],[],[],[],[],[],[]); +[seltresp_FIX,labtresp_FIX] = trialsplit_Wrkmem(trialinfo, 0,[],[],[],[],[],[],[],[],[]); %--Case - all images , memory, target types (no settings , default) [seltresp_allstim,labtresp_allstim] = trialsplit_Wrkmem(trialinfo,[],[],[],[],[],[],[],[],[],[]); %--Case - OBack @@ -224,7 +224,10 @@ %--- LockMode 'TIM' tfavgTimes{1}=[-1:0.025:2]'; -srcTimesFine{1}=[-1:0.025:2]'; +%srcTimesFine{1}=[-1:0.025:2]'; +%srcTimesFine{1}=[fliplr(0:-0.035:-0.8) 0.035:0.035:1.6]'; +%srcTimesFine{1}=[fliplr(0:-0.035:-0.8) 0.035:0.035:1.6]'; +srcTimesFine{1}=[fliplr(0:-0.02:-0.6) 0.02:0.02:1.2]'; srcTimesCoarseSing{1}=[0 0.5 0.5 1 1 1.5 @@ -235,10 +238,11 @@ 1 1.5 1.5 2]; basePeriod{1}=[-0.5 0]; - +srcTimesCoarseCompFIX{1}=[-1.5 1.5]; %--- LockMode 'TRESP' tfavgTimes{2}=[-1.25:0.025:1.75]'; -srcTimesFine{2}=[-1.25:0.025:1.75]'; +%srcTimesFine{2}=[-1.25:0.025:1.75]'; +srcTimesFine{2}=[fliplr(0:-0.02:-1.2) 0.02:0.02:0.6]'; srcTimesCoarseSing{2}=[-0.25 0.25 0.25 0.75 0.75 1.25 @@ -249,6 +253,7 @@ 0.75 1.25 1.25 1.75]; basePeriod{2}=[-0.75 -0.25]; +srcTimesCoarseCompFIX{2}=[-1.5 1.5]; %======================================================================= %======================================================================= %======================================================================= @@ -261,15 +266,15 @@ % 'targ' 'nontarg' % 'targ' 'lure' % 'targ' 'nontarg'}; -tmpSingCases={'0B','2B','face','tool'}; +tmpSingCases={'0B','2B','face','tool','FIX'}; tmpCompCases={ '0B' '2B' 'face' 'tool'}; for iLM=1:Nlm, - - lmstr=lower(LockModes{iLM}); - + + lmstr=lower(LockModes{iLM}); + for iCase=1:length(tmpSingCases) %-- All Stimuli in Trials cut in n %------------------------------------------------------------- @@ -283,6 +288,9 @@ 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst(end)=[]; + end %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'tfavg',... @@ -290,12 +298,15 @@ 'mnemtrl' , tmpSingCases(iCase),... 'freq' , tfavgFreqs,... 'baseline' , {basePeriod{iLM}},... % In tfavg the Baseline is used ONLY FOR PLOTTING - 'baselinetype' , 'diff',... % In tfavg the Baseline is used ONLY FOR PLOTTING + 'baselinetype' , 'diff',... % In tfavg the Baseline is used ONLY FOR PLOTTING 'timeperiods' , {tfavgTimes{iLM}},... 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst(end)=[]; + end %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavglcmv',... @@ -304,37 +315,63 @@ 'timeperiods' , {srcTimesFine{iLM}},... 'baseline' , {basePeriod{iLM}},... 'baselinetype' , 'diff',... + 'invfiltertype', 'avg',... 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... ); + if strcmp(tmpSingCases(iCase),'FIX'), + cntrst{end}.baseline={[]}; + cntrst{end}.baselinetype=[]; + cntrst{end}.invfiltertype='all'; + cntrst{end}.timeperiods={[]}; + %cntrst{end}.timeperiods={srcTimesCoarseCompFIX{1}(1,:)}; + end cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + % ---For fixation compute also power from pseudo average ERF + if strcmp(tmpSingCases(iCase),'FIX'), + cntrst{end+1}=cntrst{end}; + cntrst{end}.invfiltertype='avg'; + end + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %------------------------------------------------------------- %------------------------------------------------------------- + %{ cntrst{end+1}=cntrst{end}; cntrst{end}.baselinetype= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} + %------------------------------------------------------------- + %------------------------------------------------------------- + cntrst{end+1}=newcntrst(... + 'pipeline' , 'srcavgdics',... + 'lockmode' , {LockModes{iLM}},... + 'mnemtrl' , tmpSingCases(iCase),... + 'timeperiods' , {srcTimesFine{iLM}},... + 'baseline' , {basePeriod{iLM}},... + 'baselinetype' , 'diff',... + 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... + 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... + ); + if strcmp(tmpSingCases{iCase},'FIX'), + cntrst{end}.baseline={[]}; + cntrst{end}.baselinetype=[]; + cntrst{end}.timeperiods={[]}; + %cntrst{end}.timeperiods={srcTimesCoarseCompFIX{1}(1,:)}; + end + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %------------------------------------------------------------- + %{ + cntrst{end+1}=cntrst{end}; + cntrst{end}.baselinetype= 'relch'; + cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- + for iBand=1:length(freqBands) - %------------------------------------------------------------- - cntrst{end+1}=newcntrst(... - 'pipeline' , 'srcavgdics',... - 'lockmode' , {LockModes{iLM}},... - 'mnemtrl' , tmpSingCases(iCase),... - 'freqband' , freqBands{iBand},... - 'timeperiods' , {srcTimesFine{iLM}},... - 'baseline' , {basePeriod{iLM}},... - 'baselinetype' , 'diff',... - 'selection' , {eval(['sel',lmstr,'_',tmpSingCases{iCase}])},... - 'description' , {eval(['lab',lmstr,'_',tmpSingCases{iCase}])}... - ); - cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); - %------------------------------------------------------------- - cntrst{end+1}=cntrst{end}; - cntrst{end}.baselinetype= 'relch'; - cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); - %------------------------------------------------------------- + cntrst{end+1}=newcntrst(... 'pipeline' , 'tmegconne',... 'connemetric' , 'coh',... @@ -379,7 +416,7 @@ %============================================================ for iGroup=1:size(tmpCompCases,1) - + %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'eravg',... @@ -405,6 +442,7 @@ ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); %------------------------------------------------------------- + %{ cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavglcmv',... 'operation' , 'diff',... @@ -416,16 +454,20 @@ 'description' , {eval(['lab',lmstr,'_',tmpCompCases{iGroup,1}]) eval(['lab',lmstr,'_',tmpCompCases{iGroup,2}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- + %{ cntrst{end+1}=cntrst{end}; cntrst{end}.operation= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- for iBand=1:length(freqBands) %------------------------------------------------------------- + %{ cntrst{end+1}=newcntrst(... 'pipeline' , 'srcavgdics',... 'operation' , 'diff',... @@ -438,10 +480,13 @@ 'description' , {eval(['lab',lmstr,'_',tmpCompCases{iGroup,1}]) eval(['lab',lmstr,'_',tmpCompCases{iGroup,2}])}... ); cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- + %{ cntrst{end+1}=cntrst{end}; cntrst{end}.operation= 'relch'; cntrst{end}.mnemprint=createcontrmnem(cntrst{end}); + %} %------------------------------------------------------------- cntrst{end+1}=newcntrst(... 'pipeline' , 'tmegconne',... @@ -913,87 +958,87 @@ %tmpStimCases={'allstim','0B','2B','face','tool','targ','nontarg','lure'}; end - - function [contr]=newcntrst(varargin) - % This subfunction creates a default cntrst function - - contr =[]; - contr.pipeline = ft_getopt(varargin,'pipeline',[]); - %pipelines={'eravg','tfavg','srcavglcmv','srcavgdics','conne'}; - %---------------------------------------------- - contr.lockmode = ft_getopt(varargin,'lockmode',{[]}); - %for WM datagroups={'TIM','TRESP'}; - %---------------------------------------------- - contr.mnemtrl = ft_getopt(varargin,'mnemtrl',{[]}); - % Here go mnemonics for each trial selection i.e. {'0B'} - %---------------------------------------------- - contr.freqband = ft_getopt(varargin,'freqband',[]); - % freqBands={'D','TH','A','Blow','Bhigh','Glow','Gmid','Ghigh'}; - %---------------------------------------------- - contr.freq = ft_getopt(varargin,'freq',[]); - % frequencies to be analysed . Currently only used for tfavg pipeline; - %---------------------------------------------- - contr.operation = ft_getopt(varargin,'operation',[]); - % 'diff','rel', or 'relch' This is used when 2 conditions are compared - %---------------------------------------------- - contr.timeperiods = ft_getopt(varargin,'timeperiods',{[]}); - % This defined the times to be used. If 'all' then the result is - % computed for each time point. For each condition the rows indicate - % The time points for which the analysis is - % performed. If a second column is also - % present then the first column is the - % lower and the second the upper time - % limits within which the analysis should - % be performed. i.e. {[-1 -0.5 - % -0.5 0 - % 0 0.5]} - % Means that the analysis should be - % performed for these 3 time windows - % How data is integrated in each window is - % defined by the .timedef field of the - % cntrst - %---------------------------------------------- - contr.timedef = ft_getopt(varargin,'timedef',[]); - % This how data with a time window should be integrated - % It can be 'avg' or 'concat'. If 'avg' then - % the data within a window is averaged - % before computing the result. If 'concat' - % then all the points within the window are - % used for the computation - %---------------------------------------------- - contr.baseline = ft_getopt(varargin,'baseline',{[]}); - % This defines the time period to be used as baseline - %---------------------------------------------- - contr.baselinetype= ft_getopt(varargin,'baselinetype',[]); - % It can be 'diff','rel' or 'relch' and defines how - % the baseline will be used on the rest of the data - % When 2 conditions are compared this - % defines how baseline has been used in - % each condition. In the case of 2 - % conditions in source space this defines - % how baseline has been used in sensor - % space to derive the inverse solution. - %---------------------------------------------- - contr.connemetric = ft_getopt(varargin,'connemetric',[]); - % conneCases={'coh','plv','imcoh','psi','powc','orthopowc'}; % Next to be implemented ,'xpowc','xpowphase','bigranger' - %---------------------------------------------- - contr.invfiltertype = ft_getopt(varargin,'invfiltertype',[]); - % It can be 'com' or 'ind'. This is used when 2 conditions are compared in source space. If 'com' then a common filter - % is derived from both conditions. .If 'ind' the a filter is derived for each condition - %---------------------------------------------- - contr.selection = ft_getopt(varargin,'selection',[]); - % This is a cell with the indices of the trials to be used - %---------------------------------------------- - contr.description = ft_getopt(varargin,'description',[]); - % This is a cell with basic description of the cntrst (needs to be updated) - %---------------------------------------------- - contr.mnemprint = ft_getopt(varargin,'mnemprint',[]); - % This is the mnemonic that will be used to distinguish the cntrst. Used for saving - %================================================================================================ - end - - - + +function [contr]=newcntrst(varargin) +% This subfunction creates a default cntrst function + +contr =[]; +contr.pipeline = ft_getopt(varargin,'pipeline',[]); +%pipelines={'eravg','tfavg','srcavglcmv','srcavgdics','conne'}; +%---------------------------------------------- +contr.lockmode = ft_getopt(varargin,'lockmode',{[]}); +%for WM datagroups={'TIM','TRESP'}; +%---------------------------------------------- +contr.mnemtrl = ft_getopt(varargin,'mnemtrl',{[]}); +% Here go mnemonics for each trial selection i.e. {'0B'} +%---------------------------------------------- +contr.freqband = ft_getopt(varargin,'freqband',[]); +% freqBands={'D','TH','A','Blow','Bhigh','Glow','Gmid','Ghigh'}; +%---------------------------------------------- +contr.freq = ft_getopt(varargin,'freq',[]); +% frequencies to be analysed . Currently only used for tfavg pipeline; +%---------------------------------------------- +contr.operation = ft_getopt(varargin,'operation',[]); +% 'diff','rel', or 'relch' This is used when 2 conditions are compared +%---------------------------------------------- +contr.timeperiods = ft_getopt(varargin,'timeperiods',{[]}); +% This defined the times to be used. If 'all' then the result is +% computed for each time point. For each condition the rows indicate +% The time points for which the analysis is +% performed. If a second column is also +% present then the first column is the +% lower and the second the upper time +% limits within which the analysis should +% be performed. i.e. {[-1 -0.5 +% -0.5 0 +% 0 0.5]} +% Means that the analysis should be +% performed for these 3 time windows +% How data is integrated in each window is +% defined by the .timedef field of the +% cntrst +%---------------------------------------------- +contr.timedef = ft_getopt(varargin,'timedef',[]); +% This how data with a time window should be integrated +% It can be 'avg' or 'concat'. If 'avg' then +% the data within a window is averaged +% before computing the result. If 'concat' +% then all the points within the window are +% used for the computation +%---------------------------------------------- +contr.baseline = ft_getopt(varargin,'baseline',{[]}); +% This defines the time period to be used as baseline +%---------------------------------------------- +contr.baselinetype= ft_getopt(varargin,'baselinetype',[]); +% It can be 'diff','rel' or 'relch' and defines how +% the baseline will be used on the rest of the data +% When 2 conditions are compared this +% defines how baseline has been used in +% each condition. In the case of 2 +% conditions in source space this defines +% how baseline has been used in sensor +% space to derive the inverse solution. +%---------------------------------------------- +contr.connemetric = ft_getopt(varargin,'connemetric',[]); +% conneCases={'coh','plv','imcoh','psi','powc','orthopowc'}; % Next to be implemented ,'xpowc','xpowphase','bigranger' +%---------------------------------------------- +contr.invfiltertype = ft_getopt(varargin,'invfiltertype',[]); +% It can be 'com' or 'ind'. This is used when 2 conditions are compared in source space. If 'com' then a common filter +% is derived from both conditions. .If 'ind' the a filter is derived for each condition +%---------------------------------------------- +contr.selection = ft_getopt(varargin,'selection',[]); +% This is a cell with the indices of the trials to be used +%---------------------------------------------- +contr.description = ft_getopt(varargin,'description',[]); +% This is a cell with basic description of the cntrst (needs to be updated) +%---------------------------------------------- +contr.mnemprint = ft_getopt(varargin,'mnemprint',[]); +% This is the mnemonic that will be used to distinguish the cntrst. Used for saving +%================================================================================================ +end + + + function[printMnem]= createcontrmnem(incontr) pflags=[]; @@ -1030,7 +1075,7 @@ printMnem=[printMnem,'_[',pflags.timedef,incontr.timedef,']']; end if ~isempty(incontr.baselinetype) - if ~strcmp(incontr.pipeline,'tfavg') + if (~strcmp(incontr.pipeline,'tfavg'))&(~strcmp(incontr.pipeline,'srcavglcmv'))&(~strcmp(incontr.pipeline,'srcavgdics')) printMnem=[printMnem,'_[',pflags.baselinetype,incontr.baselinetype,']']; end end @@ -1045,9 +1090,9 @@ printMnem=[printMnem,'-',incontr.mnemtrl{1}]; %Here a hyphen is used instead of underscore. The next underscore shoudl be after the trial mnemonic printMnem=[printMnem,'-versus']; %printMnem=[printMnem,pflags.lockmode,incontr.lockmode{2}]; This was removed as - %only contrasts from one - %datagroup are - %supported + %only contrasts from one + %datagroup are + %supported printMnem=[printMnem,'-',incontr.mnemtrl{2},']']; %Here a hyphen is used instead of underscore. The next underscore shoudl be after the trial mnemonic if ~isempty(incontr.freqband) printMnem=[printMnem,'_[',pflags.freqband,incontr.freqband,']'];