From bf215062331f00b35ab28e12afaecfa9651057f6 Mon Sep 17 00:00:00 2001 From: jesscall Date: Fri, 19 Nov 2021 15:17:53 -0500 Subject: [PATCH 001/126] Adding EEG Browser module from aces/LORIS:main --- .gitignore | 2 + README.md | 57 ++ css/electrophysiology_browser.css | 163 ++++ help/electrophysiology_browser.md | 5 + help/sessions.md | 14 + images/electrodes-2d-hover.png | Bin 0 -> 133869 bytes images/electrodes-2d.png | Bin 0 -> 134782 bytes images/electrodes-3d.png | Bin 0 -> 40846 bytes images/event-panel.png | Bin 0 -> 199659 bytes images/overall-view.png | Bin 0 -> 338560 bytes images/signal-values-details.png | Bin 0 -> 258713 bytes images/signal-values.png | Bin 0 -> 213578 bytes jsx/components/DownloadPanel.js | 147 ++++ jsx/components/Sidebar.js | 132 ++++ jsx/components/SidebarContent.js | 77 ++ .../electrophysiology_session_panels.js | 114 +++ .../electrophysiology_session_summary.js | 88 +++ jsx/electrophysiologyBrowserIndex.js | 180 +++++ jsx/electrophysiologySessionView.js | 522 +++++++++++++ jsx/react-series-data-viewer/README.md | 55 ++ jsx/react-series-data-viewer/package.json | 40 + .../protocol-buffers/chunk.proto | 8 + .../src/ajax/index.tsx | 23 + .../src/chunks/index.tsx | 22 + .../src/color/index.tsx | 16 + .../src/eeglab/EEGLabSeriesProvider.tsx | 177 +++++ .../src/series/components/AnnotationForm.tsx | 202 +++++ .../src/series/components/Axis.tsx | 51 ++ .../src/series/components/EEGMontage.tsx | 268 +++++++ .../src/series/components/Epoch.tsx | 54 ++ .../src/series/components/EventManager.tsx | 142 ++++ .../src/series/components/IntervalSelect.tsx | 183 +++++ .../src/series/components/LineChunk.tsx | 121 +++ .../series/components/ResponsiveViewer.tsx | 107 +++ .../src/series/components/SeriesCursor.tsx | 220 ++++++ .../src/series/components/SeriesRenderer.tsx | 729 ++++++++++++++++++ .../src/series/components/components.tsx | 79 ++ .../src/series/store/index.tsx | 75 ++ .../src/series/store/logic/dragBounds.tsx | 64 ++ .../src/series/store/logic/fetchChunks.tsx | 157 ++++ .../src/series/store/logic/filterEpochs.tsx | 98 +++ .../src/series/store/logic/highLowPass.tsx | 134 ++++ .../src/series/store/logic/pagination.tsx | 69 ++ .../series/store/logic/scaleAmplitudes.tsx | 48 ++ .../src/series/store/logic/timeSelection.tsx | 83 ++ .../src/series/store/state/bounds.tsx | 83 ++ .../src/series/store/state/channel.tsx | 34 + .../src/series/store/state/cursor.tsx | 27 + .../src/series/store/state/dataset.tsx | 123 +++ .../src/series/store/state/filters.tsx | 43 ++ .../src/series/store/state/montage.tsx | 40 + .../src/series/store/state/rightPanel.tsx | 26 + .../src/series/store/state/timeSelection.tsx | 28 + .../src/series/store/types.tsx | 41 + .../src/vector/index.tsx | 20 + php/annotations.class.inc | 121 +++ php/electrophysiology_browser.class.inc | 120 +++ php/electrophysiologybrowserrow.class.inc | 81 ++ ...ophysiologybrowserrowprovisioner.class.inc | 91 +++ php/file_reader.class.inc | 53 ++ php/models/electrophysioannotations.class.inc | 570 ++++++++++++++ php/models/electrophysiofile.class.inc | 189 +++++ php/module.class.inc | 65 ++ php/sessions.class.inc | 674 ++++++++++++++++ php/split_data.class.inc | 60 ++ test/TestPlan.md | 40 + test/electrophysiologyBrowserTest.php | 566 ++++++++++++++ 67 files changed, 7821 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 css/electrophysiology_browser.css create mode 100644 help/electrophysiology_browser.md create mode 100644 help/sessions.md create mode 100644 images/electrodes-2d-hover.png create mode 100644 images/electrodes-2d.png create mode 100644 images/electrodes-3d.png create mode 100644 images/event-panel.png create mode 100644 images/overall-view.png create mode 100644 images/signal-values-details.png create mode 100644 images/signal-values.png create mode 100644 jsx/components/DownloadPanel.js create mode 100644 jsx/components/Sidebar.js create mode 100644 jsx/components/SidebarContent.js create mode 100644 jsx/components/electrophysiology_session_panels.js create mode 100644 jsx/components/electrophysiology_session_summary.js create mode 100644 jsx/electrophysiologyBrowserIndex.js create mode 100644 jsx/electrophysiologySessionView.js create mode 100644 jsx/react-series-data-viewer/README.md create mode 100644 jsx/react-series-data-viewer/package.json create mode 100644 jsx/react-series-data-viewer/protocol-buffers/chunk.proto create mode 100644 jsx/react-series-data-viewer/src/ajax/index.tsx create mode 100644 jsx/react-series-data-viewer/src/chunks/index.tsx create mode 100644 jsx/react-series-data-viewer/src/color/index.tsx create mode 100644 jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/Axis.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/Epoch.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/EventManager.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/LineChunk.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx create mode 100644 jsx/react-series-data-viewer/src/series/components/components.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/index.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/bounds.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/channel.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/cursor.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/dataset.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/filters.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/montage.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/types.tsx create mode 100644 jsx/react-series-data-viewer/src/vector/index.tsx create mode 100644 php/annotations.class.inc create mode 100644 php/electrophysiology_browser.class.inc create mode 100644 php/electrophysiologybrowserrow.class.inc create mode 100644 php/electrophysiologybrowserrowprovisioner.class.inc create mode 100644 php/file_reader.class.inc create mode 100644 php/models/electrophysioannotations.class.inc create mode 100644 php/models/electrophysiofile.class.inc create mode 100644 php/module.class.inc create mode 100644 php/sessions.class.inc create mode 100644 php/split_data.class.inc create mode 100644 test/TestPlan.md create mode 100644 test/electrophysiologyBrowserTest.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..9ae4d1334ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +js/* +jsx/react-series-data-viewer/src/protocol-buffers/chunk_pb.js diff --git a/README.md b/README.md new file mode 100644 index 00000000000..ef1003d9563 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# Electrophysiology Browser + +## Purpose + +The Electrophysiology Browser is intended to allow users to view candidate +electrophysiology (EEG, MEG...) sessions collected for a study and any associated +annotations for each recording. + +## Intended Users + +The primary types of users are: +1. Electrophysiology researchers who want to know details about the inserted datasets. +2. Site coordinators or researchers ensuring the uploaded electrophysiology data have +been correctly inserted into LORIS. + +## Scope + +The Electrophysiology Browser displays electrophysiology datasets that have been +inserted into LORIS from a BIDS-format collection. Derived or processed electrophysiology +datasets can also be accessed and annotated via this module. + +## Permissions + +The Electrophysiology Browser uses the following permissions. Either of the first two is +sufficient to provide access to view data in the module. The third permission provides editing +permissions to add or modify annotations for data from the sites the user has access to in this module. + +electrophysiology_browser_view_allsites + - This permission gives the user access to all electrophysiology datasets present in the database. + +electrophysiology_browser_view_site + - This permission gives the user access to electrophysiology datasets from their own site(s) only. + +electrophysiology_browser_edit_annotations + - This permission allows the user to add, edit, and delete annotations for raw or derived datasets + +## Download + +You can download all the files related to a recording (channel information, +electrode information, task event information, the actual recording) -- as well as its annotations and their related metadata. + +## Updating Derivative Files + +New annotations or edits to existing annotations made through the browser must also be updated in the derivative files stored in the filesystem, before a user tries to download a derivative file package. To do this automatically, a script is provided under `tools/update_annotation_files.php`, and a cron job should be set up to execute it regularly, e.g. every evening. + +## Installation requirements to use the visualization features +The visualization component requires Protocol Buffers v3.0.0 or higher. +For install instructions, you can refer to the Protocol Buffers GitHub page: https://github.com/protocolbuffers/protobuf + +In order to automatically generate the protoc compiled files, add the following block in `modules/electrophysiology_browser/jsx/react-series-data-viewer/package.json`: +``` +"scripts": { + "postinstall": "protoc protocol-buffers/chunk.proto --js_out=import_style=commonjs,binary:./src/" +} +``` +and run `make dev` or 'npm install && npm run compile' from the loris root directory. + diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css new file mode 100644 index 00000000000..8d28406cd9b --- /dev/null +++ b/css/electrophysiology_browser.css @@ -0,0 +1,163 @@ +.react-series-data-viewer-scoped .dropdown-menu { + width: calc(100% - 5px); +} + +.react-series-data-viewer-scoped .dropdown-menu li { + margin-top: 0; + padding: 0 10px; +} + +.react-series-data-viewer-scoped .dropdown-menu li:hover { + background: #eee; + cursor: pointer; + margin-top: 0; + width: 100%; +} + +.btn.btn-xs { + font-size: 12px; +} + +.btn-group .btn { + margin: 0; +} + +.btn-group { + margin-right: 10px; +} + +.btn-primary:focus:not(.active), +.btn-primary:active:not(.active) { + color: #246EB6; + background-color: white; + border-color: #246EB6; + outline: 0; +} + +.no-gutters > div { + padding:0; +} + +svg { + user-select: none; +} + +.annotation.list-group-item { + background: #fffae6; + border-left: 5px solid #ff6600; +} + +.event-list .btn.btn-primary { + color: #555; + border: 1px solid #555; +} + +.event-list .btn.btn-primary.active { + color: #000; + background-color: #ddd; + border: 1px solid #000; +} + +.event-list .btn.btn-primary:hover { + color: #333; + background-color: #eee; + border: 1px solid #333; +} + +#electrode-montage .list-group { + border: 1px solid #ddd; +} + +#electrode-montage .list-group-item:first-child { + border-top: none; +} + +#electrode-montage .list-group-item { + margin-bottom: 0; + border-left: none; + border-right: none; + border-bottom: none; +} + +.electrode:hover circle { + stroke: #064785; + cursor: pointer; + fill: #E4EBF2 +} + +.electrode:hover text { + fill: #064785; + cursor: pointer; +} + +#eegSessionView .table-scroll { + padding-bottom: 0; +} + +#eegSessionView #lorisworkspace > .panel { + border: none; +} + +#eegSessionView .panel-heading { + height: auto !important; +} + +#eegSidebar { + top: 0; + bottom: 0; + left: 0; + height: calc(100%); + position: fixed; +} + +#page.eegBrowser { + vertical-align: top; + position: relative; + width: auto; +} + +/* Custom, iPhone Retina */ +@media only screen and (min-width : 320px) { + .pagination-nav { + padding-top: 8px; + } + + #eegSidebar { + display: none; + } +} + +/* Extra Small Devices, Phones */ +@media only screen and (min-width : 480px) { + +} + +/* Small Devices, Tablets */ +@media only screen and (min-width : 768px) { + #eegSidebar { + display: block; + } + + #page.eegBrowser { + margin-left: 150px; + } +} + +/* Medium Devices, Desktops */ +@media only screen and (min-width : 992px) { + .event-list { + margin-top: 40px; + margin-bottom: 0; + } +} + +/* Large Devices, Wide Screens */ +@media only screen and (min-width : 1200px) { + .pull-right-lg { + float: right; + } + + .pagination-nav { + padding-top: 0; + } +} \ No newline at end of file diff --git a/help/electrophysiology_browser.md b/help/electrophysiology_browser.md new file mode 100644 index 00000000000..926a5456c25 --- /dev/null +++ b/help/electrophysiology_browser.md @@ -0,0 +1,5 @@ +# Electrophysiology Browser + +This module allows you to review, filter and download EEG recordings and metadata. Downloads are organized according to the EEG-BIDS standard. + +Individual sessions can be accessed by clicking on the *raw* (for raw datasets) or *all types* (for all data) links of one of the rows under the links column, which will redirect you to the *View Session* page. diff --git a/help/sessions.md b/help/sessions.md new file mode 100644 index 00000000000..dce01e5e03f --- /dev/null +++ b/help/sessions.md @@ -0,0 +1,14 @@ +# View Session + +This page displays information from an individual recording session. + +Summary information about the candidate, the recording session and the hardware used is displayed. + +Files can be downloaded containing only the recording signal, the events, or other metadata, or all files compressed together, for the current session. These files are organized according to the EEG-BIDS standard (more information on the standard can be found [here](https://www.nature.com/articles/s41597-019-0104-8)), and are available for download as follows: + +- All files (tgz): a compressed folder containing all the recording data as well as the metadata for the EEG scan session. +- EEG: the file containing the session recording data. +- Electrode info (tsv): contains electrode locations. +- Channels info (tsv): channel status and filter settings. +- Events (tsv): events (both stimuli and responses) recorded during the session. + diff --git a/images/electrodes-2d-hover.png b/images/electrodes-2d-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3bac3488e13c7da7d971b02664030d3eff2a7d GIT binary patch literal 133869 zcmb@u1yq#n*Ds6-h=d>@ARs89q;!V^N`umk(%qf<2q@AZjf9kdLkuOYAl+R8f^>Js z+2iy7zO~L-?>g%}>zsS31M|$>bH%>){>7dr@VSB{?hW!A7#JA1(ozyi7#LSN;4d@Q zWq1Y;ueu5zuu_B3L(d0so}fkq6Z&V2F9foT z(VvO`{;YykO8fT*tkM7C;Xm*GpC2&(`!D^^8~;1+*d*`kn+=lAR4U;^55(+FP-EXN zlf}KmwwkM-|IVvA(hXTuf}9NR{8}AB@prV#LBk=x%sgqdS>>3{!;=0^H9>mh!$qE; zMIN0|d%#k5sk5R?`%~g*;z8~`LTnKS^!uI@;U!vs$!p;3Gg%i*05ta4NmVzf0hwDJqm zEiFwLpVVGQzfJy`HP6ZmdwXa35aQvMwvpG;BdCi!ZqqzB4)TP;JPQjP*>-H2G83T( zR_K@aJPwqwFtvDw)ynp$ASW-DE<)-7VW3KYmQwAFKirOjiaIh_Mdgp1{X@~O-n4Ki zQ?al#k->W8t);Dwz8H?!Mh|nhzaZPlsN;(-**_(wkO#GW*SccSV4Zmd;OQaA0V~VRoAf*_4H| zM3|$JTmJ=#O17F;5u>;J6Lk%4{8~MrskhQY+S|Lv>IqiJFkzqsyG40rI16d%CG_WN z1s)%J&~h?`SXHZ8W0o1YZlj3+7_=j7A!K}2}O#l2F+ej9p z{%HxLi`cb$YVPk<=lDh)xc?1i1YQ~%|wUHnDlO1{fU8yfk6JP&XqPR*&Jh;gPn9GGjuBqoq3+cJj%wnmEhvzVdZ@1p3 zff5G`sqRo;R{U^J4a75_?`={Q{=VMaX}+%7cavedV>b24Wlx?fovXM^&sE_sSP7uc z`q_^wwbpXEOA5u!zSq2anjW)}S&r#aK7KHGxW6;`r+;UKP6;oOu4>aoi)tUz?(1QZ zSLkUu+38X~<@) zs=-VfErK(;fxFVkOd73jJQthljh>2PeHJTSS$a}P!s4vL4X+ZFqMm2?B=_fnKV^-E>%z>()4uBY*+O{n)5O1*m`}7k zyXp00eLiaIoR^e!b!gO;r)Szuv7X!VSz10~I|;mHvi3nis->gAORKqjM&a%f3|}o9y%Kse}rh z(x8x~28K-T(mk1!Wcaj|2<<>ke}4bW&)XJE$!W-ntsaq2lfHT7fp1uM3g7u>>IJ#> zjn~{|zR(opKUQnnXtrSxbwgk+S+(Qb={q}{uA#6%7m??Z^+SX6LaO@=wP&+deyhHe zRSA_wCrcLb7HO-ek?`k?JuoGhVzc$z8|ES3ZL`HUd5QQF;kx2F7J51slW%ZZW$E#f zx!aIr<934Fwqw_y4EAe{`tK1g9oLXv@X>tKjbqDgAvI18Z9m;xL?VNloyw+LCz&Fo z)YpS2Jn17e9WGw=Rtl5aWC-=mJPb?Bj8-H)bvsp>5jT;xHyr9NB_Q zq2swtq;C7^M5P9k_l#|`jc?Tf?T#VB;|cs3X#Dt|?NmNwuP_Rdf!V!Rj<|a+YzLx_ zOiV({T2-B+i<2h@JLhgYffmMlhf0sIFHVlj(#wrVZ3G=;SzmD`4-Fv49ciA$J;mzn zow>QzaA1dunOFE9N2Nk+f8Ezg3)kD3jsvdwh1Dcu@y7JEB(s+C#e+tF1Qbmb(bUk%82%D}FQ zeLMFV`wB@2#mMvZ1X7RPy;{6&ZvHoiQx&rm2UNUH86 zKd>dWX4!A0AR7;zjFigo3-7t2E{VT5)*2~`<*uVrw)9spO(gpJ>Ef?e+L!N( zD~iqsKPJ_&W%T$z%~Z8KuioshFOMHNYmZ3mP!@1`Ovatc^sY0sHa$bBXDe^=73~70=_BjZp#W%XRPR6Gri&S)!|uPI-^+zBQ8G1U%z^(GQY zRj96_uHJ3{vVxt)=pg56>rVJs`wxc&R8iKmW54ig=V$X)0uFSKB)2kMlf7d8Xfkh) zn;LouXb>Wj1QQN6Oau*|0JTf>IG*8W2 zGqTM;yq)v$mxo@1wV}!Ftws$>Ydo6SPd_FO)v60ze)d#F7N(53Wsj8@HwmolM?vcvuloYwwH58>u~u?j32KOHHz z@4u2)`<3_ea~jUies_zom3(tLm_mK1@S*B>>dZ_MFETUL%-dHn8IBA(rT08=Dw)@` z!wuebwpe*UYOJ@CcOYzDpVfqCzrJDBZq(l%*xl#Yu`}s}Xh9tWJT4j$Q#{E#i0-gE z%E*Y+OOxtm@@PA?i6dV*!gcywo-#C~FWupuQ~u|?TH#q-jH09O=}zUXVOBK<&VlEH z+|K%PWZP@2uco@F_Se3?65t@!A^E@*Kb{%QEu(MW`jdw16%oRzl%FZ9rq$=15po>QLKYhf!=*qAEsbe8A)x}%hVS<>HwSHzwp(koeF-kXjjZQB9TROL*O^G?8 zrR7{V?x8Pl)oIPWE>`w3}KBF?+HV z^B|-UCO;ORD9HOt;;9KK8w$VBbk-c~-)*L4@Z^mD$BH6Tv3GbdVdiXAC_7)zK{Wf} z(T}K)m`_{rlamx%e11%Jyux>M4cF}}dMnM=jEB8+&B?mrsc{G?9)O1LIGPFM=M@IO zPFBvlT8Qf&zXIrZS}y82rd^|s=~2^!+)eOX<>su>=1?g6wmMZH6xU~znfy_0Y1vFw zMReua925cEp|r+ViSdiPww$Yib`+z9p)oqfibuR0AKLP;X&OZJmagWI&GzEk;UR8%q}{%le1te!QxS72(}oZhA7@XeU~d5 z9P%m?-{XEk2yLRi%Htks#6u(y=cTQ9EA*wN*M=G?N_#&E4S0ScSur^dxpt32x& zUw>1_;x%&($rW>XN*W0jHC(~6>_}qB zRLVJxe?8+7jC z=C{oV0z~D=xps9*G=tCdpQ^D0_VR*kp~xC0{wlj^MTW(?`|2Czb`5vGx_NXrm$r5g zO?hfO@GMY~F%mZoQ<(Q7z)Li?eI*zBzCEvC>ZE%}k{WY**f z|5H-J6y2B0lXgfc9W5&55Kd=}0$bCgo6D~hF%P7@Rel{>4i3s1u^m6~Gg^p!U?P&o zw@|3r)z-v`M!RAyYC$x@7nGxG1tV1`S5;x;nUf_KZYPakw{)f-0mql-I#NL!l3!o) za}1R>vaYCy>B(kZ7@1y}s4#YL_hUhIrQqlv`a0qG#ARe(Ja)Ym@8$Nh0)^eCMDN3n z`aMrJcH>S}Ma$t+_a|Gb0@{gMTQ`^15_2ld!!DwV@%1aZlX!IGeRfgSc?EfE+g?h? z-rWn$_8WaKTe?^n4Q<-h%7h-}{GxU|@MkM$-lmv~iok@8;?&HbEX7 zn8)kmlAu;IEE>b>&YtZJMG>CE8#Ov=dmjn5yXQ`X?h9Z1=n@!P^~4W4XnrtRePI>6 zz($XsmPs1r?Q!OFI(j>pcVj_8)79>jLRjvmQ>>4>`0N5D1U&ytcQfF-pg7xE7{g>cPxcmB1blJ3r3&1m zAFS&lH;hOK5ZjI2`H8z`-x$WbW~Ok6E`%Jj6=>~O45GDFYMBJm9+5to?0&R;am-ft zMt9GtL~&B4j;;TIdU550zT4l;^}!BNd?t=%U&d?uz=&dLZnJJLcGYL1 zS*re;sB4@b4b`>#@u!xm_BM+Hhlu)c;OP58DzTa+8PfG&UtM^Up`A zO}OTexGqJ$zHS@BrpY0UaofLJ0V>Z?8MbojaC?7|Q{YY(s3zSZLG8$vQC18d=5%+bPP1)Bz# z0u0baxGt#EgngpVc~6G*)jxHFMJ=EqE|bj8v_Mr0yoCi4%2^ z@!ur6QmOV&)Pgx91LIQU?+O`8P-o)v4D@Rrya@|SyizQop19NX+omH7Em?FHJaMxXhtHyGlUoQK(&g;S5=R+;YyY(S5HUQt|z{mvicWa_Cxjm>llEINtL2 znavwZdx;({`J3LS=X*cKZNyJDU6X_BybfOFe@SXE7}vbxTFjdwP(A#8-NoTnNP~(0 zRgY`cz1|z6g2T#G3qee~PJ9YwCf)+toqIclT-+bEj}qc1V}#x=CXxZ@bC#!K-yD7S z^Ho8Th|^3Dm1p;4O~S`0hFmu-ZBv`CQ&q)tUoPoRk^PcqFNSq4yB>D5&{lKC?y5|6 zTXk^2rQ|W0aF2O@$_Z+!i_x2yf-~K>Hr{K~V7oUj2kPKQHKEeq9+Keb?Hp?$mL`N8yFLvo+uV*LVAIBA*rA2bFcL@sPR| z_8VJ8D>)rjA1{)_%rN-;Ly zOdma6H-A?8%$msIr;2}7wEyej{+Dvn|Esn5@84WZFm*7iT!e*%MOe7z^XJdRHsgJc z$4J2aBV?HFf}zwe-w9Kt?zOkJ9<3I4)84-yPZvcme?0w;dUb8B7nEP?r`l_+`8hfK z?%PHP1Y$*Q1S!9rj>_~TZ1Qm}D#^t|Uh1(J92`XI*G-O&@^f(Xjg5H>=j&Fvtf9)v zLW6^yTwL_(e7tojef%$Bj9rgWVYHrR%uqsyEm|hcs6}6Thxft=W|sO?y~n+`XInpf zxIszz36E01%v^XS%(O_OAmdg%PX;fQkee75nW&E!(^0VFhrCEfnc?$KyBaDJ4PA#R zY(hm-S4t43-O0M&>|QA;MaIMoeSR9Gmak)OV1U4S#KLkmpJ-d((6F++tfQmjbG(%O zsv#h)0s|vq(Ljlu=I1}U%_hbCck$je^d7TShQomvwIT`1%oQ4?_e4cSMw-=^6&3aN z^?mOAQG!#0yo6$Fj_e&vXrGkxm7vaRkew>w9+dS_aoN#4Oap#e9dtgT1D%G%m`^mV&WrcrsuV3{_)ClNww zJDp?o00a4BwAfTvSNHAPw@ge-q9?1xo(Jpli9E;%L#&|21Rm?L8qWg}c)G2v?f37O z>gvPArrn?EE@2R$R4bR*a`9i~gv{XNREJ7Zu6FJgHD4*Y9y0un3vci~2KWujbfhj6 z*gq^-T5Qfh4es&asu9Vs|3Y;Mjj{||Y-9@OzkFP^h>kHU9*vvA#Q0d{b+j!z_^x{M z&KC_~hof!d5>A+ci>!EAAD$Kcd0V4Fw3*ST#n$Vu17_#uI+OVO`}>Q@_Gm()@~F0U zca!)X>2oD9U~t;EQGtlw_kGDGxawgq3oc^>NYJM3(cHRqOHEC!GaujluClO!u`%(j zTTk*N9}r@XQDb1xRPobjFZIwe%STjg-omE9nANHEs_?xy&&|bmpQd?{?~wt&{5yIZ zlNPnRjM|28k6T?b@0(tE&739jfR$CD6g?IsRbWt1`r!SiPoEx2phu%GVATIw*66s5 z*wjd+|8`i%%4d2CjE9{A@3<6-Jd95E*Z#e$&r*^+c`crj|Fs7)>19^6k}cQG7PvI2 zx9c13D+?2>!^eQJBb{!3@@DfT()YBc(1`cS?7Ckc5*;1>SJYOG`qOS=P=vi zb9UUCZ?QAqnXT|CQoAlRG_<0kqN?g-u{T}NWp$*-L@HB>B#16rCh>q(;pf8HhD_Jl zFBB?QOHwxdl5QtS@T$eAyU8v1$Z6+g6VkXiV1J2y*;n66Z7!3qpcZ5AuRP6r#{d))nZ$e_?pZixZp63mx zF;qo#eERsYO<1#OyHiLo^}XKI{$K(6ceK+FE4LnvtDG_ z{LkCBaIU^`HMiS{b9$ia&YA3|smr?=NJ*lF2j>fksAEoVMe!S~RdoDwqY=|_gqadA z@!YUjN>f!=Nnt6hSy?h)*jE^Nr;6iy9&LnFneEiM#fmujyX9LL7@d~m!lMr6+W8b! z`S~{OF)VX)bKb|hN3&6i%q%P^BHkV_8PW5@KdYm~U0q%2&q5+~)55|O?d%@cutdw? z;NbK_jz~}cGc)6Jvc{{cI}veTvM;)S(sDkqbET=)sle=F?%lCKQmL{>h(mGjd|}@X zlgKzr^-1Aw-dUh8>)nT>!^84R+^ZrXxcO=N z8CFHIUXrrT;7G--#KF#{!-+ThzHDTDRYc{LYAAz?PxESDF~l5i6BBo)h(gq!lT(Ri z(9JecElt&3{BsTG@jl=X1kVfdtiX<+Tqt&4PR=NTZAjtdWMr)(mWP|ue&Kz6eGH1p zTyu1nuUx^!#m&pjg@q@s>Q1cLI-rWZg?Q#U(!%Og!nJCauZShx&Scvr6YNx~7QFHV zt70d0RxJxlkn8pJ$9pt&r`ti9nZ`_C|4j$x<`u^6BwE6>jphRAtfL&s8`Rj=+DhZ+ zv^*fae(Cu5`1*B_wX*y`=6dty5({&M(^BN>F-7-T2vb3RUT)6t@bpN+a{EMPb_0!{ ziU`tj=48)~%lXd^7EQCwg2B7%&w0l#3AwKSij0g@7xarok!Lq(I3fl_0ni@S*_Rtn)w!m8tT zv^^I~E-LYWkQgpfQqGGYiO;a>J>&4Jv$J#Q-)lEu^S$zn{M4#wu zYlFdB-=&-X|Mdc>>+4T-baedsdv$aKPny`oB_!~mNS~D=5>+CEfaaZ-@2;Cwq)Ude zYN7y7`8OJ9YG?o~V9`WLEZvXqdYSP2$V)_iaA;^Kcj7^G(&WP2T<`Z!a6P&&C@3h3 zzAoCLnH&_CdeX#we9m{5`iGI)|ft za%>tekrbbtF^52W+59XLL6^sOC&!i6^L=zXTt0RCJRcaaeV3`^z&?jflYyV|j*|Sh zv8t*noscV(dVqri0|P=AbCG>SRumKzlGpI?@T^xpX=!Ws?_NNvYnyl)q&GV|KTkqJ z(ubLmkx{)jr0wD1;eE2dx4F64pRI_lM+fW3f`TwzER56%|JC~X`iL9=_ZuBD%b){JC z!H|zgO7fa(i_TLo(5rBuV`qP{uE)vAnQ#vc32l2K_Vf))WG9=OCD(gg7rH+A`CXmA zfYT})%i2qJ<;!G^Cq6*+&EG%XUdLUYtPyl!!FcU*3#Ir;U~hLx*<($iI1f8hX(^Oa zkdcvbcW+NJ_)c1`^~yw`ES9vpPC|nAx{=|79f$7uk4wEJ_NexhA#aLkIjp7rz?EsU z4^a7XAZx1+87vo&deNq zUe?v#E~}_0>b{-v{NV$?j%4Ag(LwqT%)!pjDzvHVK9$=^{;GUbGeIdo%B=MKm}|G? zjOifgrZYch^<8pz59=B(;W{B2?bDU`;MIB=Ve9?M1CKws4=^+X0|U8K^=mx1A3c)Z zXBA25-mSyC^BBW=Py*%vmu=k{Px0*W-ims%C#+>45raY!-;<5y(c*>FCvVLJ>v#-5 zTtSB>5P<4xA%v8ho11vpXqk1QRqS9qrzxPu6?J3FF^fmB%gR_5IyDF?7e1 zv&4}$;=S}BkUJ(87UT84;o*((ayI!vSg;pI{();luPe)CSDSuZU@N>6Wcu07WL zcdhfv&_osRkeU-X>_mufI;?B6R9t2~u=o_zC7@)`RH;Heh?IK3cEUWG4Y?vNF|n$u zDvXRX3rZ8?6vEN)6OlgN*_u^TMU_8(G8EIijfueVY@!44DOOx!qjnR^`?|kN`8U^wIum)r?(#eAF7_t!+P1N}+S$FV%sV;Q2n$f+wX|H>0DI{VZ@8ENp4u`d49sqYg^P0~W>y+dnV=dag(8zrQyWwSWclRw-X0~l#ci29?XaYzB-m;RNl7@{T4g@nO-&{+2^bX+ z<$!e{p^W*%19H9r2u~ z_9?F&dDwrrZfle)?CGFPXDa|-g217oc>qzt!NI}E_yMo}Y*1alqO!8Dc8!O( zogU6!xin#*U#Cg?HOmS&WER0!jhuS3PL>#D9e-geEhH3tsH3MFz867ZVcD`!{4Za= zOfR3n)lau{h}2_-f9sxxT3!OP1#RvuD<3#(%B%FImT#fulJs>W7U z%oL9Cm=E_Y@`UutqhGQx@n?S|_~%w>TB)(+n6132H?1E)nLaBP!6j)yhTAvXh4egS zWA00a!Wo!_UG+IV+-hl&dLwr4_6>i;^!8jkZ~++0?xg1i> zQ^;f2%-(*B+V`}#i)cSh{GCZx($eCh6lRozt7~jcjmMtFd{Tz+9d3&ONc|GDy}jv@ zSFT*C(6Q0c`GqoWKlD0>>U(jzqj<`5NsMWLzPXj&FGY2Pv@CDJj(ClFTIU;PUtHZF=>svhqXY%<8Jus6W)E``2?!TL2no@x2^L!;yCLaANTA^;)fV}+W!3Vo0q`hxb&caUB8OH zzExB_5@F`yQM*Ub)3LU;MoCVddsygV00$OsAnLk)_pGQt!*lU6mEI;C#x;$hZmVnVFeAfBwA6x(2|X^>`WjEux|+1O^rs0%$tC zvyg6xK3tc6bC*~S=L4wIsd5Q9=d&320%f$UdpqFS`$hwZ>9pr9a}Evl^?Hme$_w5H~TOquYhno%f+46}26E`tvC}=1!#;QTKM4!Y_ zRAy@GYl1#V8~7rJF9F)PxVV_zeJUa%QdCr=!^+FUQ|7Kp4eQKl+V#NCFCgGLCT6-c zH6#vzOK8GA-SEzjKvuT>8V(7wM&b8gzwU-yc^!`K-?LWK(i#J*<#RMgdi)1ci|FZQ z!;AE1X~yJ;Jc(~QHfm}lVa=BN9&t&O#Kis^H|{itQUbak7ri(Y_dQ)q4-+}t?a$ZU zD#r$NPDGO!l7;y?M$mOVsjjXrDvC&cq}ZfWMp~NRX_0`?<^I*nm*hua&@9p;e&MO9 z_q3QeU@N|UWiDai_Sjt%e}|WukpVyhI*Z!b>iGEik4{eXzu8?1xq`7A0K;WL0bPb- z>*ncsvC}OI;85T9%=yWa9{?EwEW5}VNP^6#95poJWSXvHV`Fa}9FPVz($LVD>1l#u z0jtgS@ZsU{NiC^+kEYy~4D8mdT6 zCZ_h@-Ux!o`1ruU=4jwTV-O**+DgjGX!I<~$L9vS35CS$?(1P<3)H35&YvrVg@qtK zf~|pgpPjv6n&Le~zWln;0H{gOl9(IYZMewE$LeWAVjgpI69+Z2v$M;SAq$ouej6GZ zAgv^h;H?e8)Oc)uxoyonJ=SE_M1h7Q@?_w;Sj#hc9*pYC(b3TqJXUsgcId@;O56K0 zkjVDeH~Z;&|Do_gfWE+7q@ptO@+{#j$jJpuJ%|)xAPfXtg%B49r4$=2B7&L*NYsZ; zn~4DHr$JF(UY-RJ5AG<}69ZT4yU31OAUtqexcLWSrn{7sbtmgpZEZ4Kcu+j9ybe%N zRki;0t@p=|SHN;1dGu$=%gW1#1P8AU7fdlt@f2ySuCG%O64H_cot>Ql1oub0va>5J zFE6)}o)gXmk2j*j;9^fWZw=ipG< zVh3qZ)M560AGaVMUl0F?s)qkIIWQZ2;CdDo==z)j>DFmUNm8;I-j$on_@9A#`1||w z3kaaoDEtH!OF>$Cw8qnwi40Tz;qA(*Dja`=ND4I((R~7}1f`(W-@oq>V8KEidWjTY zm$%{hbX~{1MGtKX7`LCEot0aU&(F+ofTvI)1P96)YV9*M1rOCwX!}UgGeoba zp5!i@3%Tn9Lis{xV)I?ylf4yE0s=ALQ#dLoyG!CJo}fJisMQ)a;~}J8zDx}e4SoOq zJ-wdw5+rLPqJDvcBQznJZSLwq%ZGe;7$weJvGfcKQ&p~PpoegB?m#922^Ln8HsT9_ z1Qco;v<4XX-rgPv2C4-?&^`NnCRX2PX{6{6NDte96;T{`o_zNxEPmD#eGlJ>1>dEj{OIsJOYgp(N}|k^~uBTSKVI`$C~k67fEUDAXHK zRK)5vdRHWN&(6u|=8YSmaLnu+y?OHnphmgvRLq$n;HYAloi!J zbncSnRb5FYs9)HLo}{>Y*UH$~`TW$qNTb^K0#;14n$ZQC}t#X)a1MZ~NkQws9z|ip8c#8_8Zr~|^9|MbR_Uc3C}x=j4i z_1KReAJ!baqxP|La3B|OdKlK6$YI=8?~eo3Xh^{Ijz9_??kIo)O-)TGqVn!1kWk_0 z-7#fq>J&A>v6po|X9~$e?sIL#Aaf54sQCK&+S+aa7M;dT?8nxNhR z5nTaF1iRjy#LsEgld4wr!)dVwd=*vsikbQOXP9;U-&1|KjF?#DL4n&@=vI`Kg@U6k zC)WW=E(q4OP?Lv_9`(Fv1^fg{W?d6&arKSZU-s1kpkI6E%Oue6N|056>cEcK17gst z@#y>{Se}}S(Tt1Xb_v?+OB`2*km-(gaq;nIhkwG5zHiO>ug11pyQjU^A-jTn)gyN4 zits6;jVPt_>}+dPM`Wqx@bco~`^K59*r2akr5^}T7K4nXwbzarby(H&_m7Qx+qtl5 zSaiZnPT_u8Sy_GrhK7GGPU@$CfeuoYp5XNNtXF=0VIgPz*cSBn&|NGo{v>` zoIa7qu}0K}8zf}^DNhphP1baPP^P4$oL3siN*ym4GUo#uP7Vtj7gx14IQrGAR~^5^ zkiG}$`iBn~{`!HC0VZ6h_I7uJ!@`$oP;QApwAr)!5j`RxL}C(#^2UrklF)PxGHgR0@(Is zs)v;gZxhg^!;-Hw=3SbFkiG;o=aPfVIIIl4+;$M zD5Foc*!{-Vz#3q$&V;V!m}iaN%V88RCJL0MJ6u zmq|SzEYb>)_CS;%A|!;tnR0R#^Bn6fs(Q;vuFEPYtPdf_$4V`Mu^PR6`PgX@R{kgH zB%P#TKb?oCXMa4sxwm6`?+fTWgloBKIbtY+iRCaqFK_&teR^?mF=UB%?<9?kGFHpH zcY7tFL^m}xfql{h>lR%ml+q1w43SpYxfWw$Vgk@sK}u?IqUr!puC9&_*JF|g7$pv{ z4h6-4EL>KGticBZ(GQ?XD$Q?a?_ww&ApD)L6x8upjTC~m0tp;|4hbe`r4Z;-EG6nVv*+qpE~5f)=SNY-=jZ2;Q5@~<W0Xews z<0H`cK8gCC$FOJzhlHS|Ij6pqfP74ArbX%109=aQ-CY3hkc3?JmR0ZiV~nvu8mW$v zk(C9|EPiZx4!UJlc6J@rMv&gf!p25{n>u7hQ2FA6x*Z%HA?k+;^rsGW9RLSl(?H2d z@Dj{uyvFF1`&1;QpcZi}H$wC-$X|d749{72SBAqBlocJ1K(1KS1-T!RC+Hw-syG8> z8QIyKj{M%ITg{o7nS8XD(7;s>6J!r(7njLOXQtS8wCe>-1%UXeM|J75EZNnbw6{R_ zLPBuQddJ4b8XM<85e%84dzY_?d@I+!H_`V)09fm2b>*$U(5p)hr=W;MeYGGbC#R^S zBtsOX!3^Tj^0Ea23)!)?vy<*>&zHnI>2{xv?x{T;dEVfQa=4>@g@ZBVReE}Q*j=D0 z01}(*u~TcHpVSQr$W< z67xDpvHm!uGBPsoLjeG`+KclOzi{9*KrJ43N6KWzvg&?*n^!#vGDmD=IWsjU1$>0GFU)-)?-|V_wn&$oN-Rzr%F0Lq2p{z1Y|pHEv@ybx;hA7NaIZrH&Q?KAc#P^0`(ifpJ7%8w~$aZQf_MG z=H%ogG-F(TBW6?igWa%+Pf+mW_!#`pBuJKj`&i<;s{31XQHyl0jPZ?yWVROIy?`$R zWd{&HTyUa68-RaNOZ+@MJWNcoK-LwENrJd7hrU9_wlujg|A@Cnt>a$+-4 z+3FMFu(v!ICUX1`cng>+NFt>&9@wS*y*=F$vtCI5KrjVOyOIhE9|M=U`wc_S@!RID zR3vzF>2$*&SAlw|zG4|D@fmz0pjpoPFNd*ADkU1NA2Ks1aTtF7_YsWO%;w|JM&?srSXeSNpkflOJ_tQp#S_rwgTCB=RD7Ih9#J11XttJFaF zVS5cp~xdP zzTe3^^%oj&cpYv6Zsbr;&iSChECO^`?A}WcMdRK{HCtO-frsx*KI-CIt82*=OElTVOXHHHf@7^^-{-{0Omc9EELrrZAe3I&4U z%%4A$ckkLv)gsq>pQ3e>0zJw*cOJTWI6~SuKRcloa2Az` z({`;Yw9~{9wB>i{d-_f^=>EV_W|F*!+Sl_EMrh#30$G)dot?%H$bdMdBcJ5cr|kBf zgM-{$Tq@?b8sQYEBemw1m)j(WLP8$PUl9&#Ztv)@n$Cr3E+r0nrCpYfg51E8b3hO% zv3uXn(Xn3+84BG;Gt~b;nu?E$gD`XfAsdI3b=Hm#%JxT@Owc*Fk#8^bnn2Oacj{b@ zE3842Z~){XNijWaxU{si16#`w9D4W`1_lnBzn|Rg$Iz>DxaDW{nkOqG!*7ZC6hwf5 zEkY*~A}tC6plctqp}Ie&s|SpeV17d@9nkksy`M}}ejm0CmtAsdB$<%}?Ja9x+$4q` zQl%u}?5|&~pn8I54qX7CX&wVDgo2Qvv;_2-cqb3)|F8a~y{rWOZg6-aYO15V7fw!2 z3LWA{+zb@Bgi0OqUUk7KfxB!S5o@t4+Q`e1kd+8`=vg*<4#m&<{Y2} z)monjDTxM5K;%t#{dViQ5mL{ehhNuvyYwS7ny^#jin4xheeLXg4VN{Os;+6yHZhMM zp245rzf;6UW<_WnIyh_bPA0ASuJ*JN5@TET;ndPnwpxyBKMBLaM*V! z2K6uS{wi)_{X_Y>vKJ$DXZzzH-Wq}j|2zIWdV#v$w`>CLr*5vxJ zcu(3_0Rte;kJ7umvbKg?56Nz9%UyOhsg-+fZOOHb&|!52>L!2Da6cP<+Z*OOZlbgG=s0bUVdwaX# zI$=;FNWtZ0W$S&J?WFo%PuQ3~_V+AOFAJ)gx%ie@xtCNbHksLn$_TWZ=g8r(m0SM= zQw7vLSxHKMufxZoZ~n#Ixd)A;`aM|N(EXXa=f8L@D3?+=+9I;i4sjO#AWJ>A^CA(3m~0$NyFW-6I`d!K<%2@QuJ{zBRU z0Rj+ts?%A?sI~~|Rlj1U8TPrXe;0s)EFrB4>Pr(f+IpCct0TJ-3P|EvP^mL&#& z^&4U3g4ycqn~I0w3R1iEUp~dhw>rJ#Ef6|3=459fPK86&5~cpX<8vp*gTx$Q%qWfTg zAawtEI6jJoa)`7|$SKLDNWF`UO~eSTrEz zXV1ti9=)Y+?*u{6m_c$ER6rb@bmvXlh=9N96r1ABQdd8!SG}$>23U;~#H$W1AX)Gn$ z)e$1yE$;m}rq3v_f zS!J=BcZJ(qR@~CZO(?mt`~vVOC^_l!<)9YbrMWcryv4-undj@FKcIf2yE3q8pfK!# zGmt>2sm02}6SFVEIO)7GDGclfvNSYAbai*zLPG;Ioe0-3-M`;3G{hs*1YKqyNrZ_I zS1-TOnnGx3XrO!e?3AJQa=a+(%P9t}2x)~4t66`{G`+ZZhl~u}7RJPs_bFt}ZE1r}9_I<5IBr}^OUp}S>gP|t?gdZi z^>uegYLzn5(?4S-X~#?ZqJ~I&%)}Jby}-0S2}BGI90(mCiUS&&08f9l2C4}d;@rHv z3p+=!3t&k*D1xhP=j;q9dwH@P)O-+=is8s0S^ziy#Vrh%#%{21ftj`i8wyUKgrXw2 zktb7e?1o(Xm0Wio;R>ViHgpRE0dJVLGwDn)e)-Z4#5H=O1E}j|7+Q}!>=QMZ)u#4w zuKoiqK>xWz*2sbJHB8JMw`y=*S@o(%e*BpB-^imgQ*Jj=egU{=2WHrfBQ|bAE3j%d$0G6I0f->A-fe_esd3P%L|VG z_(AjFfgf3mPJ`KHHIK_j6>l$9%t8981&v+1+y>nZ zDJf|Ry*dt-;7z;_3kwSgQC*otAa$#T8X62iA%q|VT@75|pO=VIap9|{-6d9ZxHWJ-(fEq>p* z6;)XFkU_w+v7gP&rhutBVx#Hk=s-UKSu|QE6DR{vR}?-EH@9xN&8Hce0sHCuoLyWr z8G(&dzysvc%1p8@tiC+D-QEx1=!lLU1phpq4)%I_=g3Jk1$-@FMe*L}#oZ!_k6-;W ze_;I-T#C#olbcjR-@bgol2pI|WF}?^b~VTzu4`kZz%_sa2jNAGlY=`8T5~V~htuM7 zpcI~-CxdzF!-IqDiQX6I-r#0J%RR(37$8N^kZ(^{LKG1ioQ4-f%0?2@2wFjjPKG~_ zP_Q8y4cOPn)h!iWyu7MsbU_1!`Xv`u3h@c`ljUL!G;2WpaZ$9#F6_X{AXmcY zW@ezRmTulD6WH6MN3D&G{sbJa>iu9Q-@fsA#ERYP861Qvu6z>=qqy#cJVqn1Prxb# z$zg7en1Uj&WcM=~)50Nevb$MHCBNRlb%}}RT5S8A9Utl_?)nfo^iAC?#Lx_nqTXAA zd<~%r%}#O2$s#YmzXq)Q`{9iqk2IaDzg1sdUyK7Go9Wk05BJQO_jjGb=iwN0%EDek zryZ1P&^Hg(#u)_Hb}*^EUV@>aq565KV8Hyh^3h{*Cnr46vG+>d#iLU6E1d#6O@Jz| zgE$8A2J|+R6c(mNiS)Iafea7d9sys+#L5b26*aGSXJ}cxzn|YZjOAevy=NveA|(aeshhk}9v&?x0?k>$9>n_MeO{*M((?G@)7TcnyPAarkt^H=BlH+5Eb;Z zc&8V;dwN1W32ZcIymdubSQr2j6Ja3q8R6aKyC*0r6xKXmY^tcIr|02u3@8}B^7YGc zsfQY#U^KTAKv1W2t4q%XCni!@cSA<7{QC2sbqX0v6=-%xH%P%Y!B&F@4~=mI2tad! zPK#n#WWpX?J1rn)sH&;;wYgOw$UUxa{|~m_J09!y{~M3cnb4{16+)67LX=J;At5U( zM44q~w9Jf>O+t}0Y(j*xM`R>fSs__TLrUd-o^^eH_wR8(zWwvL9(}Hh^L)RL<9NMZ z&voQn_Uz9)@z`@lm(&U+>HDrb(UT%7&cQMC8T!zKqJj^XIkP6W*MO5ifwKA`)HABp z#A|=<+!(eu87R=k?}70M*adJ7Oak5u15)n`(5!-M($?0lOypAZ3Mal=i2cUVbA6&l z!t&|VLmiwd+lSRc9jd`@l)alh`h^f$k1w*<`K-dz@|c*IWDcL|W#y zm+2*o?v#~Bz=bz7sG693$8ts;w|wg5IQ7=xEWKA*j#JwE6d*%z#8g^*lz9G28q$`^ zUiA&WO?u*#8B&1WORp6}z~OZ-{7pve96|B-6rdLJIRR}#fYO~7bN<+B3{b##$vRgk zA~69RAt<J%w{q;q#b-`q(!D$KQrLIQ-n_20<;Cw`ztYmvXX)+(mI6L?0VC7wvk^Q= zAb8P!Q>Bi*c$Cb~4;j1uxS;*E$|u@t@5u8j>v3`0xEv|Wj#MJdDc~y5VsP*AM5s5R zhZ)N$k1{?i9JK|k6&XtdC;$*-{m=Js|SNG7)%^{%;osFGJ?83tB73dI{Jnf?2#Vq%EdCiyk! z33gmwU0=B5Xu7?BZKbYAn0Iq{ki$`xy8K(?#$}qMk!y*Dj``*h<|EWka;`XU&)42l zo?)DCKyBeBF|o_ZHGlJvac)`N(^okWX6kN7m{<+1N4ItjdmepEcjPo>_{^Viduf}b zy=UIP?YeZ^^Wb)_k%LbpIikkT3CC)tIbTfI-9%?D%;Yifx?E_Va3mV!i!LsC&!1lb zzs*cbee;eUlaZCxGc;fjcE1MjuYQe1Br&J7^!4YiLpuvgIK;cFjk7|bvk3_c`|{%# zOg-s9_HGZnD!I^KD@mpU0q^jgv!tXXm24(hZNAFQ!g7^3hesZj-a&mScF!VuA&Fzcn}rY85{&X^Z2vR!9z zz!3P-ni%pST0f?rpvKQGZAbVsjm{IoK3nf~x=#Osc@Zw5hXGRA^QRpLGVa}@N;3dW z0(xr4XBr{ijPTGM6o>K~(F2+?bi(Hye0=d+D- zEoW-1b4PD0v$$ZK?3wjKK`AQpl)RKHJxK^u$uQ2%q^vZ~jru!`rbDU?)X2(;C+&Kh z9VU0UE>rM#f5jzqG9Lc^iZhEyB*FPTx$KK(@spIiJlh3#nX_+A#glu_5$|0akpBI! zWG?zGN9EMaOoP@KB$#t$EXB02HQcN?z_Ou8EE#UGlN zIC*|Iy0$uNJ&{CGX1BHEz5DlHOnap0ykA;c!YWu=l8A4c^6-P;zs{OS8>*H4%389b zo+p+9?F;A)xITozSI&O}TIq~tG>n0pNJ6i&3R@WD-#S9QSPN+>DL?+KEmc)k8eM2f zYM+K`saxTM^o95~s%Q;>2h2~Ze?K%SyseQH5f#;R=zt&R_J1qs0yJu5fggC5XE^t~ z4$g8ggpy*@)9L-?9I{u|^Ud;MLZ$LE%I$l4cLP1Q?!bkH794iyS5UpA7SifMhO>zT zDv`t&){-B*6tfNR_|9nwY$I&Fc}8|lQZyZo28c%PDJ`p5Xpiw6 zy!;EASIlXvo1k<3`u+P-PgdCT=j%{eIBB+YwzdY$9Yn9IJ3mMhO!3D8+sa{pw z2DvpwP~R^)R^41mbKiEj9`cBABA8n^m$>})ZjVWGDftu|Fh1RkNo+HFF1*A3euec8 zGVr9E(r&I+%hY>lC?Z^z-{%C`E-b$m;w=Kry}jE>TlPA#NOM`}U!?MOuQp!9s&Qoasn8^`jmC z%pU@?gHvUjH$yKz{du7u!c4UL&5srKPj(PH`)?XkG)M1c={rfo|t0FKm zF3$EE<>@nLb_ocKukPBtJHm5l6TNd^mz0c*7fifg&pq{;{fxB?4lvukJ<03IEU+<7 zzS47J2ijTQJMr`xZ^WAl3Bfqvf+LLca8{3l%q@&K;4c*WjC1?SIrQ?4dmk`4k=zf@ zY-rkzVa-`L^TgkCy-kSMZ3D)bFe4w-ja>WW`~CCB4Ga>r>`5fbhdJ0b(kUIo!>K8( z98t|+YB6u<(4xGA-6N(gO?fDo?5DbNT_ma4J*d!7q%8g|XOxDuZn$@yW^TZmy`L(m zM8R#Fbt!j?i-U;@^*9Lie)d`{?1d*rHnN#`4%eGHLZG!GGY;tTgCQrsim6GCp78kk z*L?hHqvM-Kz1jAiJ6WA*OC*t7~wcz`O(jq#<^a`ppWeFmoB3-b^$oMz3Q0UQhQT64{js60` zRO&h`Cn-tvC?QK}W@i=9Uy;2XaCL(c!iOne=}2^z{TKH(aqMrGIH_MRZ-ED;~S)+lI2EI2W`b$tsGgFiW|@!`N%v7I_j-z9`J&ShMXce8Q$ZY<^wJMJ>~RQr>vgvGG#jlT&;IkG0CISVRMgb;=#IcntPejcE%kz^ z1!T}e?5|wod=@b?yA#ITRf(S4n#b$!;*%+exX5s1ssf_A5BK4jGjPAE+8)Wj=xcLV zNJ;4zPKT+QqyOIr6pDX@_d&=+pWFBInk+|D%#Rn%rzo^4JS)D^GdYCl;RyD;p!dj7 zx4mt_QTc+_CY>H9ma^XQYCZmM=XUEA#HHG73#b{{H-h#qA1z?GeUe+zPJWzJ_LP+16`w!STv+|I4IFRLefp2=9Sq4}1$ zHU-Z~YByU3)|mSbdXLDnNH(&4NC_gcOD1kq|&FS~fUqFODe84Bf;R7hFb$?nw zj0?FnFslaqH^E!k0tikM&S7KiV1YC+X z@0GV$f6zNC-_a;pb$DS(ekJ9-KwQuKx3{-y$EW@b-4eE4c}MA(foZ-lNJfSHb}8!G zHz_Uu6d{mI{ia1)HeM@C)2v(-2xPT2+Ak}M!tl=X&8(MMK8r}w|;j?UvKUwl|>v;S9QzSiL9(9VlM>U)N<{;Oq;W42lPi!B{LnZSu^`EJzbWt!5fVovc!+<8@wNKti zYgbplQ`yA>J0yrxRFL(HBy!MQy?&jJ!Dml=TSmPmS_-xclkenhi`jIZ!5|-{v9pHv zq7nbDU7N)3439*r@mFx=8@Ep!C^O5~6Yl8h+DcFF?bQYR0LZOOijKRxyG44USw0Or zLUwKhU>N57bFHLA`tg{`_p87A{V~>q$qBuB6)q}kz`RrWx+=BG;W%5zg|XVHrhDmV z8uoa!6}4U;9`t*9)AE~aM=oQ`9)2cTv9WA_=YU6X5b8hy31-e_l6t|aU#Jg zee_}fe5U5&t8DGIs`LQiK>^EPR}3L~pzCmi{GPLry%{-R#!&$_1{_2)HxM- zcY3wMeOfnGGa(`29!3N+v3ss6&n{?a(9|$hrVFxhb3SqLx(U7>pBIF%3t&00Kp2u( zX+vSr337h{w6OU)`=AVTIE@}NlC#SqqE{N_z2}%@W--dNa^C)Lx8!UBXe`OGh;A9vz>VxpU?I`gqmSGgZPM|KRKA^;5a3&H;AjLUzf? z$!FGC$!OxTFIlPsWCXnv=7Z&Eq&@7-)C+G<9rk-Xuu;T^^ig^*u&F(9sdZ{iPX6CP zgTEaafs%`M$I{sIG0-|dT@9Fw3=Knwif{>KuZ4O2$dU2P+dT02%+|MMcr=OCGn)x* z@8>E6cBKZ?S|LB-N4n2wpv-a8Z>y0T3>@9d15P{}gtk>0z#Yc*Xzu-T(3#_nK)@54 zkNpc&8v;h#(Sxm1@S_(RUNCzf)c@%CVciCxeSJ>f05y=!syP2KCg3@}+wpyAY#r+X zfAje5K}qZ2y79>PO&8RH>oR(0K^~Knae6 z2YB?@@5_70w?6fZjXlSy4U$ZiU|HkO%!fglCWq+Bpm^X#Zg5@jrYk?DlL?uSUZA?C zRxfTQ$OrCs1Y3W>4H_7n(8|z0z!rdMj>C~y3jr!whlBs&4?*W&Q(X-`&V_1l}vq}-wbyi z9IpLn5Fw6fKyfVHOhG{|gyJn&-uT`Zuuh+hUA_QlL0s7w2aa$$P4J<@{=*s?Ks@0i zO4M@ZcyNedS?$}?-~S!BDpab^p&j@2T?P76AWtAW6gmW|%&aBZKBO5z>W~np zNSoDDfxHLE5+Kb8iGlwFtO4W;=4DQOkB;w3*WKs&UMED)-Mx5v?11m54TIhO&iiQS zIZDC2lVc4~YThYy2-f;epHsr(%9hBdN!UcRJ1 ztXh9e9zgC5(7@GH)QL;06JdI)EjR-3_mKZT)~e@SZf53VzoGNh zUpc0qgE>u2Lj!_3*xBr%*CS3gwX_6Jjp5-!eEl3m9o{h^6TV4w&#nVSHem1iyvv2+ zcjJ&ZzA<#GIkwHtqw;MZciasOF5Zhn-=H#u{Hfr=2;<)wN+p0uf;~kM*p!~I64(Kp zk`{*wfs=-dg*4d~V{;Iwkdh&=ZF*)VRYwThsn4nI7{^;qCqkcG3cyHv!12%&@sd8E zYCXdnz^ioTXv6=9N^&ptVrsE!Ms)3SD8wv=>J#s`z#D9h)rI{C3u-ux)&enV_TpXb$qtrgbHZ?znh_2$K-{*$NSY=;bh%rMQQ`(#Am1R{hs zQjkqTz4u=Nv&*-V@c6By0+RY(`Q!sDULrobym&RewSjhSUyfl8jMR;drys8C{*M-* zQG{4N-)JVne33ha~wLfR&GRz6;|yp!X> zP7EGF0Fl4{)4ub~P0nsxat%dH(zf2C*3LFCKWK_wisAhB!7IA!WZC~$-HOvMIS`=$ zB*lD0!K93N)~cVFQmb`XcsV#($+kQ_Hdf!>YF`q|Wt zx3g0d!mGl+NbDhZYAzHHoKWlCpLwG7t6{})`dhrmzlKNqs<>@nQjt;K1fKIf7?m3&-8V^w9aLtUsXP1Z{IT+ z1%ODONiew`a-{3rTMI2J-%U)|RBj621;q4Pr$tteN;T||i_s#o9P}$IM~)uNzjc_W zE1&z|<+SV6|24g}f@epoH($GpJQ0h!qC+oXhv;-Xtv9gM)S9`JrrTfJ%nb?@AD{2v z=KC93;GM;zj$)IlzZ|!yXm(15gKsvaYi2)Ryt51kK@1r}GfKn87YvxFcT)jKm0Kg* z8VQ*YHMx#fSAvbgPkAC5W+%g;5Mf%hvP5LnId*JQju??(!6Z$AY@e92pIHFRp^b&U z7`*~cZMZHPESFKNm3Ynpn?VzTfnpnN=(Y$d=h4&AiPz?$-<^@;XBCyS*^g$mTm$e+8K~ieD%iuO1p3a#saLM?5 zo;qS4)fN-}PMFn;zo@QPv|v7|A}2fB&I&TK9Xn9Wu;rD}1^E}>hG5fY?sePnu(`mt zqceW4@IUX1UL%TQ`e`Qh zO(N&#Gi_lOmf{$q>pz_J%Rm`G2`_UQeAU%e2zHdLyji2z*e1sjm2uPK@*l92X)+}} z4piPromy2n$OIwQ1{`^8k zP2SNiU3VsueWUylhP``KD$n%Zyt$?1xxqLYbXET`=wCBx{CegqgC*0FJ`=U0wnZov zk+7MHvh(rHym#nlV&uWA$w@1cPiu@bfnVe={Vbhl*>5YzgBJ-XPSCjSc#*wdI1~QieqC>cyw23cByOq}+06NTaE}+Er;NAEN9z$|N5* zasG)$7NZb<+F64I{nqz!mI+*4Mb92zE#(=RX<=rcvflY2Qt4cOjgAYSoE%G}ecb>3 z=?!4g8A;Gv_#+JB8bh6Rp|QUHG9r`8P=^7fgUY-ou>%ti4AXQB3^)ybwCuQ|vrnhC z$lmGwQ@y%bC;5SZLFW2Q?MpWfB~PbCvPWqw1mzh#S~#~ID9&d7c4@)xD;A7jRI(}y zB5BVm2da!e3@g>h3M{~ZXIZMTorlHbp2wlrEtO038-c!|8w(}gg29|!f_boaS~{fI$`?# z`#AmJ|6aIA3knq^h?dG8wT;C_e|&!b^xn7c31IAo7IbfrjPQW#`{~n0c8S~clD%-# z)AlEHQh%CA=an$B&Yan}J1^mW_ZF{>(;iKaq?!EuetvaC>yKyj1v2$LiCR~n7W)0O zPAJ=;ZF2c^*XaX`U`rMdD-xfHd#x2#c|)X~!Vn?)$HbLYlC8wVRUAcrGD?S)0) zXS9|8upxZFr~~B`G-c)f?+JW+uXy>p%)a`xRng%5dAR~bJPx4aX8CWN%2w}|n&lhk z9@WyS{~eP{V|Ugx_lpSGr-UvM!hP&yB!dmXeal1(bB~(-Yy65>S<_MO4~s^|&fGDn zsq;?CL1ZKW1=nfw?E{xkMFWXuMb?4ZTdB6R=P}GdNP;+}uua3FoOUSDh!Uvl`h~`a zk%W`A?Cs`Hdrde`r!MbO+?}8)pt7lKos@5!x?B%62*h!>iZ`Kck8gwTcCh#CRgHmi zSI#?KEpy&r!U4=ooI<)6xi{RBk41-;k>#Yw(qtRtG58)9FvWOOQ+{M@5wms_Wb z%7jB14n#CI7))UJMN7u|m=poIi`%jMIG4zI8O|E3JGX9$#J5>%g)l%PmZ-%k>l7lg z@lMw<9UZT4B%7;O$tswtDzXk`ViNU$Q^o=LKpNprCF@%r8FFxQyQb`F{-ou;8y1By zqEmkXH~RtXmD5-E^Yi+aEkk9nju%b#)gb3FXPygEBsNCIV)UOFhcOevmT?MgCVb6` zq!0L{$V7AZ^b9_UrAnZp6kak|jKM>?59yYthX;6A{Biw#vt=?7lQL%cgoJUWFw9I8kJZ@+$c{!N#HwgQtF+E7yX z1cyQ(dgk`7zfg@({ANBoNj8-$2){J`A;_u1=aaYeDi$O=Rxb2C;Ck5jURV2lfx8>l zGM*$(%J-e=I4Lc!{zmK-K22R{5m+e83b#z-T-h}qAAyU`bNz+nu%M)b1gL0cW@Zjz zVrmta$$;`!eUm2v8mTkr&D?8emzKr=^+QlbJ`K=5C5)qDK9r5uloQ==G3E5lK{6Lyx8WZBomZd_SK%!D z{Mn<}R1^vq4}~HlI`BSw*FF^*=O(t2u@NpW@S4xBNUL%N~% z!q~%1B#ys-FK62r4l(9e6fJzkG0^U0_csLbmgyAr%o%ZR`!d;8RaNb!*)Ppy&}x!1 zP<)kmUh^L!K+Lu?FFA4}b|)T~>&mu==NE>`axw7j z-n|>JTET~SDylLnfK%g%O#rSbH*RDk!QA{Ps6nb@@jR^9z!30FgQC%9;lHvhcVSo8 z$3x!%PV;vQAd2JnbslY=YmA+h7Ep0K z2HgeqhsNQ<4W-tAkqix)F7N5QDb;W~i2HEi(cBZD?(P~yz<7Xqb+&hq-TyuICDdNK zj@|-m->zKs zV${2jali@;ot~Z~bU)!)9hb|Y{lLC#cr)egoqcTs+Q%TG6C`JSg8WqEr*Ze8qCf|) zue}spcj%pOuu0h>`^d;mo+i5z-+)`uD}ddvdkYSE&y|G}A$k~n05fDGM|H@Xkq7Q(?!6O0ZTy=4=;lXiCUUKTN@iW6=uW4!^?1BGxN9zb$R)V{M8 zaEYSQkQ4AC?;;n)3x<63>CQ5@1htdyWoJW0Hk$PAnn}O=fH8h4Ej|6q)>g?B9ou4g z#AA^;91aXCy|d%%=rG}0v6Hs9vqK2Q4G!5H+S6hrRaLSc4>%)yP=FA~=|cxD4j`$Z zyfbC*gG0eI7{PN4!!*`~hUFuHzJiyHZ%c@Y0c--?O8JpANV(iT@J`_V@qgos=G>XE z(ZIKYtOwYi86G9f^^isZOGvde)7S686pqq+<8hM{69Rpf;p+l^^roW{DAir`u7;eT ziaA5NoeOJLz+yTjmuW=vi~#xnxeuRo4WSmok+&4R!S6H%$_hlfj8+dOwa(3zS)8Y2 zW9IZx(3_13mNj-c(L_X$yl&00b#o#pB>`K-d6zMI@ zdHC>+^d70@_s>f`n7DUW{##-DZ6oJ;AWrb4M6*e~!&&N7rYItk17U$R*+|Za7zylD z1E!`tyZy>7LEJ8BEY283sML*ScOAWxa_D-e2>kwN)S*$x5O%5!AoI>&^I@8gFcm#b z?8|Ag47sssE00R;R&BY>gzz}m1L9!+KGD9L>&uOy^@DFmgvUMq^Egz(H(DlPedIY{ z1*Kcdw$(ePq6M2@ZaKk^89{Jz(~W6jB9+tGzC;C} zyHK*MlI4#?5@s~SG7vH`n2sOC8dD+Q)UFd@pYHz59s@4+>XG5 z9{ed5d{`Pj>+0HCSIXWQbV%6fFw03nACbk_L60x$Dr*-S-mV`=DGD5Siz!R+M|and!Ro1hnvxcp((*oBhXP` zshyMM8_xDN;G&e&FNidpoQpgE+1vWG@x1S`R5>vj8L|%e(=z0`-kzRou&Y8P5=tCG z3c{c1x0Rlds%8EbYvVVm=Q};1`}n-5x8nZxvab^#c2Wgjt&YI=PRYni|%4s2TYwg(eo!IVY5r)cR^g=eMJ%?Swzto zYmGURERO0MVlarA*QWm~wb7J26x9sW+1g`!a^OQ-2HHrDCp^5hnqO zAzkYz&uENM;4QB%+cq6rbX9Us28?gLgksJBVZ+Fqz^U;A4gyCYmr$14_Z+^O=3@G3 zPERy&lKpJ3#^Eg4f(`n2?6+X~Hn+6kY=bYa3(0Mx)6j z8pme5{?&gSvXwgc5-OT%G<$Q3o2>V8i8s{0bI(RkhZiGG&o{0k|Af&?v(!^vU{bi} z$&3dVvk&`*E#m`J8|dyqq~tVy63w62xiNe^ zhrZ>j^ay`!tGd;YqloQR-(sZk{X!P>!Ug%2rtA=7AEiyZ`Ete@7y3yKQlys zkd7VMoM-KJ(iZo&-+l(km77QJa!DA6tzZZvH#dFr4ZA!(G-NR@K_**N z&f*;V4h@arT8dj4-Ij|=7cX9f9>Q!k8jN3Yizm$VGyT+*_wuhPqQTg|R1N7&H|B2$ z%+TqcqTLTvFjJ4PxfhMtPE|YGgUj`@rGwiU_0Zr;?MkCDJkuG^Vtq9vO7X^-4Fki8 z-6yIb<$kA7_R|Ed4)z~Zf)GfdG_Rry&HHEr(i?+`O~!*X=c#Ug$Wd-{WW$;wE891_ zF_5Qg!u1`|zvdbG8$u?2W$<9zf1+#d>*T|f*z26BcN0Rm^z{55hm5Y;5X^z)gCTL-E6tI$^C`i|B(X({Lfbke z*=5_mBlb{!Jt}ifF0XpFC=@aBTGxT>>ol(Y_@N+`dn4QHEN4jF#Z&m@NaFK#?8mA? z37|_L@R2nRtIzWCbogU&l(u+m)isQ{fAaozCiXKCZuW;Y2Rk47eV&RKMRM|G9sSpk z>c_>$!}(ubQ-gyJ2b`n#OxhGlW&eJY-qDhC`!majp7!9KL0XRT+B9}?W$+A2*fXn7 z=;^>oU|KHMl=GCZ-#%aOTK1qvhJ*gLo`>)mQCZo3*_F%es(wW>y8-0C7k^@Mq)l~H5+)m}aTe%q-F}~2z#L}JBkfuC3!n^D z0z%lQ?%fl}H+D{}&*^gtB?U&QU1i{Y5hrY&nH)c*do?Ez(=SEkQ&5($7m%m%6+h5_ zRbI2(e%pgG!Duzn{b!H;dhPHhF6D-Sb21#zL47haDEM3?<-*J+AtLhPkA%>%+gxmH zzVmOyBJZLck;O`>5C4wfX$?XpR0WO_$?b~|w7kSWcs(fTQ$yH+63^C>>l@Hms1dl8 ze2L%Bph?08@IwnmConwAv6N&Vz8tf_KD)z4$nx-B%UYM|EC>;gT#(wD^ z=#(M169LV9uQ5R1x)}GB-A-qd{d#>zCZcf$A9wWdj6a=TcqFi~VGSl%MiP`Y=u(HC zUs*@;(%i?7XHP6nquk+8evg}CTH4Abzd>T4wpPVIB^qNc5+1rl9495I3EKIRBQ~-t4FLqA=OHeL{T`5;g7nhP^q_Nc2%zhORu%XkE zT0XDaX3sFZR;+wfRD_s>gsH{FDCasoChuRX?h$J5@ZI-3+W3wlsgj6e-n6eg6iTc9 zm#xDoM6Mk>j!CG+B_tr{!RzY>{rI+0Xb(W(K)PEr`205$@xcuhNul^QLm8Fjoo6d~ zxq6&-VIc%%7Z;6^t+Iqnz;cmy4MmKuv54`8rl;6>zET^I4^>`niZCy~{S&}MveXj4 zgv8dTA@;NUltCt8c2zqmgNCl5XHy2X24fSn?2mq&L2T)#A@Fqp$J-$55^#lTRZE!3 zwk>8m#sHqgIt)*s!Y{NIQ(Oc!j(^;LlejbFG-56=my5`6 z|KOeR-MMTCAjkN52*O37@=WvM8`${qmzRvw>kr^iFVn%5|QCb-SQD0 zkJEUIkU}EuAyw=1|~W3P=DvIm-mjulfxl! zMj}a!+;(HRM~8<8yyj?^Zxme$k1rq;@1VNu6$g$8^wJXxq8ZKEC+x@rhN*l2n->Es zZwS8QKCCmKW$VZdgr|lLob2xwK$sXw<(-;-u_=nA?zO0JugeYF-xH2)MmQ~9vtxdA;BnelmJ&% zQB~Cief`+M(lvlIpZ1}2t$h7@&%9)Vyv3?%RBhiLv3*U=&181z1)K7fKh-!6!C5n@ zkJMZ+QEdok+zG%03OM@|A9Kssm*q`_NB`VoG)@#a#fxHa0fnZ(PIYU$>15KckOD?IpF2#nTj=y0UF^{KflhB!$`<_T6h>Ar6clk95a&G(_u6+4~#f~44GX1$8 zz_}0t;Uop`8s`>M%UT2S#iK=FlMAv&|E77?;pJsM>75Z|*l_^nF?;X(l!^+e?3{YH zW)B>+uq-2GnnH(amj7Ohw{SBXk|Lm>ybQ?!GBC%bO{u8V+Jv;^>a?$8zj8i(lAZ7^ zE+~^}%j%{bK=nS?<(2wwqA_`27n5u4-8Y0pAVr^#m{^AK&HzOIj+e(5vhs1{+H(vM1&DLRK;Q9)>y6i&TBqR~ zlmj<)gdPuF!__=LE?)kZqUQLm%T??m7`f7pDt6w~rkv4>*whgDAjaU+r%x!#Kk5G; z3q@#OS-?2e$t>E_u}`EZ^h-_zp*=Puw63Qrc%II$;BG`I$E zsG}I&VNBs@pCu3)DzsXmmP7_4UAqnp5u{AL+&=NSPh5%>y?1zvO*>BSqC2tVwgmmc zpY_9EPqh@Cud->N2_e2_zWc|!)XOo?yw?qWQuZo`8u0+H6W6Q5{=)Tt80NnD@11vsd^;v4gRBEXNZQ>KTxiiO)Mzu0 z4ITG>tNWt!@(I4FVpDov?7pa6kNP6h=a(-@ULw22qFa!89(q(V(+hAB>g{nRKzU{% zdce?I3F`lPiYX(j$F(uyp8fZzHf5B`yoJYMRbxiv>el#StFp_m%3g?XDjYF*9gdowsOkR9lVVM<}Nf=D7S}5$UsY&z7xRkg6|mR({Y){buKWh zdL~lj_0ICH9};F#e0nUahtOflODvjk;)?vubXXc=QKK;rO3uo6Dy~3CZ#q580N9OI zdZusZ9C6$BN>b@6v97?h_#MtJ(3Y?nkO(NkwB=++rRf^dzH9ux2(7jJ%HC)yfOsJA z83EUg|6BEOHaKKsC-mlX(hsUvs+j=Dq+5OeiK{X|*j`k*Wq(bz zH{f~F+LmTaM?2g0GKuK&NAEb=+7zkcV% zxZ!Oq3Vm!({{GSLl##PX+48(!Gw`i2?Rw>)Eu z>QkOn+mfhdw3}=SkmnmB^{P143n;#5<`_KpZYuSkxp?U#avOa_6{>`D*;q2o{6)>oq+n93)ZAKb^h-%WVQ^%G zdrK*H2g0q0^T-8+*GQ?~@PCj%(L0PQLcy{-khbA4P{ddKWv8#YW;y4#LW%?Jw_?eS zR5{tYS2(6YP%m>lMC-K8kRDgnAcz6J2qoa5> zgR9RVdp$%W5tLKc#VWotgmOLs!qTu780(b2uTwtD!&ZPw59QMO67}v}xIiw!K1<-s zHBxe7cT-j`D77L=yE6JGYE4J_t>;j+4gg2FNnx;4-pjnbv-7H2f)*oWo!#41-hXWL z+kLc^K}%E9cW}o(*gQ`NSGa<&#FjHno&>=d9q0&dB%yEGyn+)B;w&_An zkh3lUUE?V~zBDG^{`qgv>fmJx#n*Y5u0~sk&s4uv=5{K(RXLPhSST@*PFwP&QtYW= zd@*vw3{w9CU7dg&4=jraNZYy@Wp3m=J7B;CU0ryYxQJ{}W}g$l;`as{LdpANAlKh5 zs@!V~RU4!uQUjn?KZ|~Nbq&w{8$8EdGe~0GB`630wZmzn2T9Pz!(uVLm({@IZy=T3qszjX1US*b%YE*g1DiSbbOR2nYqDE{U7K|y!s z+JpP|hvJ>E$`(3opKOQm!fMe#mhiuC&NmNiT@);-2}Oe{+k-e>W3!{!qB}FZ$zD&Hcuqg z^;O)xi-5Iv2vHA=1`36*44h%Ny8geek-5PC68!ohG4|WUn$#IxEY2fAaKBnIYX7s{ zo%%Xg<9Eopm_oK#Yn6WYA&Md-ZfxE{x@qtX9J`>~6>(4K?H(Ml%B+dd$X+0%MsTO= zhB+?}oI9J^(|dTPyY9C=RbK4N7cclvvH$nROSm(ouPCa+2+1vjE;7;2B z5-Yra{pbTBt?X@GsjBI$`NrD)YIQt^GWEt!`0lqSwV$GR0AYmg9m)HNkPh5bRaI!PC5lJLQmd_y}WNwM#I9ivtQv-2=q8`x}r~bOl;a57sXx< z$X|Rd^g!_>(Hz*W?_y!E4C{^&K4s3ssV=mxZz#PMhnV>iQc{j+$o#j`4*4#Y^%F_Z z8WZ!ew^Mt!YOGG-^-$r$oEN|aDQxX%%p!ia&_}1C=&62`{00PeY_-v)4 zBM(5hkEY0`fk;Bs=XP~{tQ>@{{{P#?pqv!0IG41m?Gat+p5Jg2;tPvEJ9l#Yx6+uv^)c{~&G{nx@22p$R2~2?_Q>Cr3YmX(8z~;d z*8Zw86tOpLou<-1U#~*s^muF`cy)8Oa&m)8$(fh8LW#ITuuh^F9RuJc%0vXRD;n}6 z`4HXY+H*W_^p~ERB@-g@It`)wKN9V+NHK5f#pz}BxD1ufmi1d{YibHZ(jg``f}ens zWmy8)Glo4^qmJ@;J5?w7T^jG@38kLYd~d0frbbJ`p5T;328|18v*?rA&H!9irW)^k z_@q4@PiWEW3XzlcL=UJNV%?+ulbun4bYmou({7l#u6^_kaNNUvS~cO?oWg!Bc?&z* z_iF0yX&iM&%3RkTH?Sv-U0QBpC5N4fi8YM@>f0$GKy?MX4%Ib?@*C2Q5N=!E+1OK5 z$NZ!@;?fZR;IZ3E%PT9lA$R-@mA6zAT|+@|K$L zR3ucjeNSbmMwZm%o708TX%}b;rO$G2bDe-rO|3)d9|v}e@@6+|NzZe)hPZALkzIK; z>*d9HDn-Y*#xIGE#ufgLyxW=x-`sVfoLVoZLWClG`^JULh4OHw)mP*Z=*nJv1FZST zyHJq%;>-N{4Y<+OPmS`Vdjjv%hrD;Qs>-ItJz%;C=?1z#TM9cblpG+yk-bT*x}nE} zdY^f>!l=aj(FJ8My0iK73oe_4YdRM#kpQ7$fV0CzE>i%P2^-)pVq0(ZasQgzAN5h^ zT0e;#7fJkTa)OyD6Y9@>U!|mFUyP|{kT)`ItVqnQjt z9d8NRmp&b{;S&2TE|3k3hHTyrtI>;@FQ|vEeU$71DuF82Gbt*aG*3cb+T2;O;~RDg z!<>jKA_`AF=Q(iT!ip%=3P@vPQWxB{3xCZ?N28;G_)W2wG69Db&EnG840G8J7!p?>?NZ*ZQ_B z!53Fw+o|UQl($D6V*rhbz#Ny%zF9KQ}f!l-sCRx3g z4ud6vB(i$2U_X^rL*rGBcXf~EzPS+RTq5%D0sr7eZqeuKXoiU-yt%Mw*xQi#{A6yc z>lH>8i>g%5HlkOz7PYrh@HzHv35kh7whAH3LgoTUdPUFobfaWLI*>?2ZIWZeAp$h^ z+43qQi+0CX+V=Zv5K!j7UxK7)uZ#3>M3y&8V1jwv0|W=5rbIT`;_?CrmB=ISSw)Lg zkgTdC5~yXg=}3p5FyB{WkbaYI@M>n>Z}hp62}V)ip3o&pof@Y$lgT-fx^(oO*OtAhKDTCxrj973oOF}brQhj4y^z3G!HIN zW+d!g-2eZQ-V=6XP$^+zfc+H%UxZqa-*a|r@v2vBG@Wm9ZoZ5=FK@He*0~a-qW;Pi zDKM{PD~&W0@Pz@>Xcg?H7@=KaOi!I6143!UB2*|30E2 zUwJl4@s^Z)dn+aC$0g@-Gdj8p*AS3N4n!bTSMwfP2U>x5wsp%E^Q!Z%NCyP;j;pzl zh%%tWZA5hOG%6Z#+JLWzluZFOb%9F%WQ z#w)IG{tYM_H+x{+7o)+0Gizr^p2&S-gP}hMYz9uxICFz_i43NP&1ZK2(s_Uu$hh#9 zP5kzzj>VItIlVE2qILudsJ zPl?OPG$Zdq^fB}C<7EWO4|rjm2O4U6iSf{f`XBYiyEdelS=cwJEHwIQYP8^^Gm@b1 zvb*=+0g}_4t({CHf#bj?BFNn+IDP80udeTCK@f~&VAyFiX7&m$WQb{7ykPBiF~qqW(jvjV9<~P@7%5|$>de~ z;(|P5n`ut)d7%ZURgS^7(sMK+xT(Y4WJ2Uo8yqOyg$ZSQCH1eCtYEWcCBy0RRhaYv zlmtVp%Li*?^{<#)`9o;8Y+2q1S4BX=Jxsi}j%LuaN!B_|a2}r7Zb9W>b9PI4LvBa* z$|y2mFp?H4!@;guGS3TtITZx9ssw&BCJ>}Ldc2Z zqN}}~6FduOHSn!O$fE7qwuN*nXs=-#!GOxj3YVJ8zUIkg$ij@x%$&+xm)j&&GxY*~l6%S^ z^{c(gQ-B;~Q*;a-$w2a<{`~_2bim5j^f5FPwJEgPN#7)fM??gsHqjJqFE*vS^z79Q zn=&3P&@Z(bL_Ij;fFGEeh7-*Yq=63M1`#ZJ4;0Et5+{-BKaW1wtVY~Tt@te!cWueB z`bG}%cj!xsZ3B^vYQ-$l4IuCTx1M4yhzE>O}dN)OIcT3shc3C(1BGJwv} zAY1}ZX;;1Tp&&1r0tv)$^P!l0#y+~fNV}PqDMQ43%e3B5E#g5k2<_Oq7&}q@!|u#O zx>B>;%$an>_RMXX;39v>=|Z~kxyW???CjvZBijKmC++-$yQ)As0p1`xZJo@@v*P#) zSZ3emQR==qb9^V!pHfu>G_*R}RhTV5bPMH`?BBOFcz#Vj{|sQ^@v`$;59rtruOyUx z|NJ?~{Dhv~_=i7-+RC5Wt&kCsniVtP99TdFC;!6p5c_6~U{c%^-GVpo3y}x5Jo+R? z5=4Zu$J?$R;bAy4)p4I-vFkL_MLDfFlHSk%Wq^3ynBk?}6VeSG8*)`Fy$IbkFf~ly z$2$6F_+R@@H@DyL<3q{-t>im*&h3^@SMY4sNh>)1;0A8d3%|x6OStcxdDj==K1Ii= zxY6^Qih42dQXuj5BQAAo?d;^iLc{YQ1N%SE8RwbyJk-wujdTMG5J{QF^9N5IeXYwa z{#UI_27|fwa=oHHWoxU_0B416ZgAr5FL0T7DUP7i;Tkf0q-5dPj$3F@SfG^M<-hwE zFsA7*Kb*>jZZ`*xnYxC73_l983m!=H@E0bd_Tg%9$iH8%`~bO%xJz<;AWnF%i9w#q zTQ-!4?3@8gh>LRcG1jNbIHqGT-V^uTP+A z?NPhEvnJRGE6r6GzKdU0HcRIpr^2JRrbm3Qlk^-TQ7~0_kjf|!Q1|P?lRNmlkPXSo z9aNcgm`tJaq=D_Jg&Y8vLbl>|JU~Qvhb{7L0|sX0&jYrY1jT3DrQW(_R%oT1w~b7N z0uhSgNJYduk{6=d$W9>d`O}qly?nc@&7XI?e5p>r_vXG5|5vndl=U&3wa|GzfioL} zgTIitb{lc#jH=MqFF%#CdTz$X25#QI*5{IFY`X*Z;K16?HKO)hW`^Zy4|gmxZD{&s zc>v?P1aO((nx&UWjSrUNK8`5JU7$`V>03`>JuqbO76&En-6873*W3l1L}}-s-eBXim8~a(lCV%V!BHc=!-0j>zbv8PQloJaDbr|Kf-8 zUO)fyrTegL(!Ear*&)w?3~>>K6S}yptSoG2YsqImOICnb)YKZuM+-DY_^ct_usIA$ zDinPyvfGPEh?DdIX0XOF@o9pscqz@A6f-LZs`BkXw1e#rl=i|lJC(_}fw(YK%WE!BLt!nv_KQbbhrwS$a2 z0k@rPp{2d0e4$+I^2w+JgT~IWFobw5jgDNmn*nYA==d3ETLDzzPFSd9266;JWg}Mi zPjkb!liWG#(_9%ZenLsuHgNbKoh5!4zr91Aea5;dC&0_i{{$_aW?Jn>u9KI4WWylS zm*;-kG0JmXW~;XQG7iUoUMX}QxC1!jOc`=Wu)Cq+fM*&<+zDwgkPXEBDQRN$?r?g2 z9itq{NCPnHjGhNgQ}!_erck~Rs0{L?Ne={7qcpa&vTm~3u<@S3?yyeD4)s|WQ*9pI zQBCc*DX4w?e2rDKplfxw9x`#rbRPV_pvRPtA^}CQKi4%hoz8v{laN@V*7B-}p5BH^ z@s%Q-cH-;LHdmJ4QQzrWhq`@y5`8Wj+JHBp`DuIR80+WXL6&^_f?H`t&HPtNu8ZXU z26o-#y$*K0iI;nE`IGt7lsaTyB9-BAqjAvhXwE3NIk;F~ae5cv- zCeZFvusy0}%#m zi;GA*T3a{xrRK_&8l8##+0Q=&`q$;|7)S1LsZM=Y@Qn|gm=QM(boFSrL++}e>In>X z>pXm4>o)DMv$xN;sxcGTrmm(|o3@QRG0CVU^M)WZ7~N;!tP$-%PM8DEROUL&VqlE( zCkv&PM1pr30s$oV?z3$qnETW*QxB)V*`gyv1~Ksmi*;6j(<5)6%Rs>MA9(y|tSHuT zgY*)Lj_|cOBSWLZbk zk0v16Cxgnf2U!T@-pJEoU7V8TapepBI`P((JymokC@>wU638hFXa#YLundDPFRK!6 z8xa(=$J#4u`y9SHC+{K!eo9Z6?agAFPSo}O|Iq?Wf5ts-N&JFtyt#DIFZ10CI;xaw zG+`;{f;;C#o#G;6i)zRPjZgJGgEc zUSyo`(2n9A{vWd5103tV4`h8CLPjJZAz2|SlGU(hQbzVDq7uqZl95p| zGD;bh5fO?sl+k-$_kBO_`#=7#<2ml*d2&B;{eIu^`JA6~4BcTw8HjrXoCnmJh#GW# z^oLBK;k?JavGcD{m&KS=p&X4Q{F%u(xx5=#y`7z%rYuS~fCxG|Q8_s_@Bun|R-x(r zz2G#oivXq`oYYVtWBvy|2rmsQC%1h<6XWoaWZm>_Vz54i0Z(H-fPk5fL>k6j;%P6S2Q4u-d~?pBLxktDXToG<;{fky=lqZJ zkVsmVT1cdsl~C-tvC2l7`!I6TIJ`UH>^HaiIT=-Io9K`p{hzSo58JZ&Nh#q51CX0# zWj%79n{xv@7KgPvwf^mmd}!eW9!B6+KYz|Y@er%-CWL4> z<qfpD)Hr(`0ez>>XgVr3`27?H;pn||+Yb_5u*DGGqWZRl#fqS!2DDZX=S&-;*+U#RmHguu-^rH0 zt$!an+@-4j-vO)zJ9_OooE@)~6^`p-vBpBbb>zCO%-5ki+b^ZUXAqlF>MuncJwuBi z;i-Z`i8;hNE$^PPz2AX5+uZ7oQ6l{79@$9oy)ILK!og^1%e`O2(YO=2>>jKre)&xOaOW`rkX6 z;Kv6!Kr>mZDnl8$)P|a_hpyW|B!!km)Ra}(|Fb!KhyX2`4d6AaLB_Qu%S_r}Qy$MXLi4=%trOQQAXNL(vvFWPf15%JOEEQP`Ju zh4(EM{l72nUp=drXM&Wgh><#58CQd=zMrml&q)0uS7c^*J_bS_KXX&(6Rs8a2O zFA_!TM4s-`zM5xD|T;de|+}-OQ&r)FF%cqlD}dj zqu0*ePX0G`bRIxi{4F?E*e2Y$?6uzV9XM%A=v-jyJ*IlDuG?aUqN!+0Nw!W}TT3v< zxBTYO@os3Fg(g(fI4mqnl7&a@!0~ia&VNmVX2V{LRS@pDU!~FMPpRTn3%K%ZdK<4Q z0u4OCg~X{KoE%oo#`=G$hq96q6L_Hcz!r1SD;%1aTX9VN;gL|_Xyf*eo0hYR3i==@ zn6tC#eslWtVTgA{J+t^RLantL=vRwdr4)Jc6S-8ndsr69TK7*zT?$aPY}XY|E}p5j z=ua@M>S8YNJGx7h3!{d7A%`2^$(U{+OYxDF?Yw-rn~yDqa1Z6ng^K^#1_@NN^oj01QoQZLx!bzm7wvS8a| z4sj-gThPJan&54yA|uzK(&lD$K8;SKwPr`#fnQuE3*;XR?0PO*aG$UpP$OpU?G;E|-L0oZb)w z@4HPqd#^!-_zwlAvg=5+=yxrV__5|n*%ciOGyMXB-e4eosx(M4f%d0Xe~lsP8PB3^xtqjW$Qf{`pAkK>0S z8pYramovP&8k+ODX3mmn_SIVmJThCuiY+@(5sjt3h1j?&QT|*2;KHM z+NpDs>?72l_F0A5HfXbv+s)NH#~Pa}QH9)Tado!mcj)4YU|W_qqx;K*Nm&T2Zzwv7 z>j|vmY)KO5y>_~Lu$6`xmHG>L7yF-%xFBmC@wlF#<6GX|P-~qtVV4nc{zL+m?|~yM z<41%(2z*`oeOocrL4ix^{HNb5)CQudS$;0F`#!0^TyMn6h&TO_$N3443_oqRw~PfT zSx{uS@$)?h7mx54T-h7mk&eP6<`kjP`f0HH<>Onx-Yh~vCCGc=p0W6V?n0GBfu)S> z(Q_er@4PwyP7|~NJTdF(k&<<>>(`N7AboFU%04NuhlI0e&mF%NyL2)Ih2Q0$p5{9M z`0`!~d&Eet_3R#-htPq0Hj1Z}$8YP!9JqJohj$FwH?}%O-}0~m?yEDh)ar-!K04mt zQj_>Ai;8fxFPqEfFNp!wb7ru&H_jLr*_EW4N!5m`F?ozO)oG}6Q1k}eHl5z_`;Ki3 zobL+`$9Kt*QP7CkgptS~pg@-<`9)gusR>i|*yr0!DMBb|8{hbq5bEO^)JxkkS1L~H z725bAskz$553GQzi&eW%M$*Xmzl6J>!XRl`1QYCuh!V>{^~Dk;Ur_yM&ZrUdGNm{$gf9PXtba~#v4~_kX3=2^M$F*6xpjYu8p5; zb@J#`n6wJFB`Bv!OUK!!8n-irMEu!;xao8}AFlz{G?E`t`=(1BhhIcwL_|wVa(Zgz zoj_I1=e-|b+LjR+$$$H4n(s)`u;;aYtR3{SXZnao zpF?3^2A@CR-{o`HH*Z~;JF<4|SQSO+7Yqz&r*DyjJJXBUkObnq6^?>^O6k*9f`1#P z>pkY3_HuG#Js_HAu!P1g z1U(gh4_rQ0zt0~910URm)^rs6S~Mt_ucfb4?{Z!%d-OV|U9Ix<2sv5musaJPG$av} zC&ElgLD7?~Tv}7Z8tSYS&( z>@@X~TcW>sZZLzTOu()TBE5-6i#28h5zb zI#{-C*wxMdAcmjke0(?&3F_i9i#Lrlav)(00#8s7D=8_-$@w6m2O`1lZp_u~hQ&&3 zWgaZc#mz`~`TuS4lNgL*`Oem;sI68z%WKMYUa@|y)S}d7=+@#=5NlOC@Zl{LdJ=kq zew}6&Wn-)xOhUA2+y%_}Q1}+oWU>Q@gUoZ->;-e~lU{;~p~Y~;AC^}xXpsNpNwr0Z%XwPS?@QjIsXeIT>yBI4DVo@m!*J8q$M7KI!C0~r{{<+E9gZ}M~-;b zi23|!tPi!%-?q`DaM9^~-=%{MhQAY^vG5?ge7}%TxL9-L>=7&fIpqlmt+Z({o;Kjz zN!fTnWQ>cJV0w!98v(&aCNN0#j}7^-HNgnuPP~2dW{bTXiU`enYC4xb5}A6jUZAbI zRoBCR105)mcbh?wOxk}Q#z4I%{xO{;#`C4>SiW8ovwiOG)XvP)aXv%tuNf!P#2Gd_IF~SMm7UmJTm;uPjd<805eEGq~}= z*Xi%3qk_CS`TJa!~-u=dF014UbHjB$Jd z0_QhGWSy%g}3opudpc5N~R?JJ3N zi+08~`#Mq$Km><_G3;>tk3mTDUk4r%8%b)CMt0}|PA`!wX=Lxy{@KCiLO4mNguZvn zHaCWfTmUr+_Vu8b`C{-L7>J+t37i*$G3bh>ZtNTp47zE&Z6ADcwcP+ES}jz;6DFbK z+n*mEqa$jsuacPW5<+>iIr97;!~I;96NSwN)06C1(@~M-negCO)8c8 z%cPx!p-*J&TVO^SY|1mY0jhgkUvFM&X5NC+&n)2a~o=%C-{vGeW@)DHVw2i!ueG9aU-8@>siyFWRapOd&zz~#12;sgdvdae#g-78` z1{`=EL=hcdeUwW0@4DAt*uoN*MO8SgC7G4}6}w7KuUX0U8X|d%jwoO9D|4R1=m>L{ zVzYS^U|Mxr?sg^S?kYLuc_*TYstP!j!!m2(2aqpF`ncsCb%KM55o1sq!==Zz z8`WWmY!09W`2HG_BLJS+(Fjpf$6}xjdiYo3jPP;slfpI1I6EJ&+qk5NzCj?(!3b-I zS5|&L{(Z~_-s9Z@Tl<2a8gt#3;nu(!(0>+x1*`7%-*ms9tvm?b>>e6g1sZ`E=4_tt8rXy=C|`d#Lh^*_p0PGCAEKcstQ}y}irxrQ*qq*3h@t~$UIAN>N$tXW z5N!DU_b}n$K}u4r5ZIZ(--ndWgsjXG(YyVT;A1SZ>ggC5bV2(DW&DE&XKZbGElSK_ z%*(|^>rMVjhU6;Q#b}C54HCs$ju`LaKRe{BA(^_YQ;6ruq_~LTCj+Nk*o%A&3IMBD zdvb(i?@io;TsRFr5a6#78X%|C(a|}6e5CpB=2y5kTm&ha$l%K7Q|vvzGSxwJgt{j1 zz^nu?B%n*s2d^h5S7O(}8k6Wk@Z}v(cP-Jjhd`v}FNyS8oAJegJGW%aJcX@)CzYI`X+lrmv1ANKK{y;Ty)%SZesp* z_Fjf0yPxB;W3@laomi70qlyD}f_}$sVkJkgC&%n2g762FnfKk*9=K;Qu3MRV4{RBD zr-ZSC9{69vQ42xTUOzcSM+8+sxiy&s&>H#}1rJ*i^ke%Yu&+e#Y80T^s>4 z2d~GAnD^kc+XR*9uJd_-85juV)K-(+r`6CR+nB;!sXTcRhZtZ4<`3VOmyv%k4(={= z@__Jv!vC0>k`e=uO6Qj~O4l2XW5FBHli>&cSXnv!p-EjEH>NJ8Cd4#zd^*gy_XmG- zHvQV4&*zuR+z_^x99aw@TN``kYDt!x2i#CfK^oo%>~Q7aO(tPogB9=7cen_d4^_&m zs8yt6G`S^L_`uwOTWs_BA22#$(g4h$M*}nF=5P75xV>=Oz!hm1@hkTH0cfbjvC^^> zim^IhjgYlnw?|ASF&q9qXJc*B#Tim68crz+n!A4pOAb){s0^WkPs|Jcx<1^f4+=t8J3HZkd&H`lc(a0vJ`TMxb_TS$H@DWA6 zsVOXo4Ln~uRxYBz{+WcD>(l4Y_Xga0T>LP~!)aP6K_`g7MGym};^0H??eys7C)E>>N$hveq#|1e02dr<@M?vEA_-E#mOWy|$ z;hEQ?pPHc!M{gWoTpzQ@2!Ab*AFSPv%0-Fx8c0&+D#BtP6_ zcrZl90jTOi%KHQU+K;?ymt_CL_lb?55i!HnAqC?aC<1=3Ua z!6?5-2;Z^7Fy&upV~cYc--4b8I9rat&m5(x{!!9N^|Gm*XCGjv13HVC6`!9|g|9s7 z_xJF?K{vQ&FDIDE&BJ3exe=S_%_F3Q>la4*a#fAk6Zq>1+PJU%0s~QwhM@k$WXx0D zcf6zjoQOsIty|N?{UdYY4+ii=Utoy8QNkmd1NPOrG?(xe!Qp}D2yh>?w7{0fVX|hx zdIu)QlZ%}CL@%pQjC+vqA$79JRyg@0{s$`gm}@Y{&^lj(ge{P>Ofuz&PT4hnyM*JN z^Ly;+`8Lu}xz;x{Xz$#?EC4D$O)V6-5wsj6C)TRNRE<|K8jTmv6&F;HJ^XBZE3 zc$!zIFT`Vy-)jCCO-5nvPxD2X>>kCH$d9TWMGdAQD&eb)AEv+>KeVv!+NYN-0X0b zufT*)XN)3epUlLY-}fZwRK(-*6uEQmc$=79#e5EP^obdu>I7}1a$;wL$nz3P9z>{Z zV6Nu-zPa|PCYA;yXxr%M&ISgaf&DhPeZ4MVHG6zq;^-vHKlJftn-H4Bw@? z9X9bzOI;st3TI4$j&PodE8;wbMlh}Fcl@a)Fnv!+DxQ8r=74-N3PEtap<&+WL(RcN zbQEs?ikvA_xDs!o*j@YtwAQOj2&a##p)~j4$gkxm^+h^G;EEb(XWg$46C%1L*RZIl$D;2!K`v-N6G8Yc;fhQ4ErxbYNm8`_;L2mD|$OFo{(ZM zHNQuQjALSeD`=EUsz$lPX=;M{gL7`iPV-!n;Eyc!{m@Gch?CS&oq zps$jg4v^wP1C9asv-q(X|1pgYyN8>Fa3i0!++wL-!m$aNOTphy-O8C1qvqufc}$qXu=g;#wgg zP5EJ%eiN1Tur`8I#5akT&6i+p^57|HG4>i*{7=^;iCD~gn{oK3AQ>X!pdENlxHbb| z6N!HXcnJ7W93UU5g=_=?3ahSG{HL$^`s{e*T!c!dmt+O2mPA_Bm9*?bqMq((cfDpt zYQmKgI;!kj$xzzjMj)P-5CUWC>lkk1Uci2nU*ys$^kE;acfs9{=_yXas~>_l*5v2R zGT*d%?Hp;Zo4L)?dh%gO4PC9A5G`s`aOpKx_$nygBds%pdV}KY_@e`VWbTSu4W~pU zP((csuqzgP%1B4&_%^MUpXj=a${T0i;at@tR#x@k&^*t6;yX=M+nSe~dsp|WTvv=N z^BERAV;&Jv(c2)-6CF1W9TG`DsgAHSXXhd-DJ+c6jVs5g+DM=#W>DL^H~Z3#1G}cO zjfeH|d`W5BABoj|{QNip+$XJTHatgtOde?$)Wc?2j-818g#FqEdSdv-FK%Ub03q%h zwB!*FzV_bgcUB;^s6F}v`qMrAs)y7x`Mf=9nDrb#%ciHLN!!-T!MMA(w;X3Hc9uvL z%X1D9nLkHqsgKn6+}!5%>hA1)j=lfm0x-!tGfsWQ;+*yO5q?X34g>GW(bO*I#qJ5B zboI2WoxV_k*RMS-E49x;MOCMHx5+2IX@gNt@Y6*e-? z$IVutBMv^FF+;B2_vIgE3VzGx!*{M(H0SzV@ws_@l^=$;6=FGsX}QNK74;`I3(rM? zbtei}Ld0v3*&!#n6OrF2_!$-^iqx%+rrRutPbgKap(x`THM}##r1)0#T%xiTqu`Dm zkpXqI@6`Z0jG_O;)f}G{q4V}$J@}zPqMhLvm|l0XZQWI7+dqM79tGJWpn^R!I>Jo+ zAK?@wk*tq5O7ze1PpoDE z9F!c{{*%x%tNTUUIbG)}rFs76Li|AC!wX6k*r~Y-9vd6Gpv^zER#IE& z@g`>QJ^{GG7h0O#2(&Zsg}`MxG8uL-*Rs{vHPmERQ}CWe>OW8Ue^hT8IkcZ>U5z@Z zm~}6V$a4}x1jH^C9;c&AplN@2%83_=E-&a9sU0az0V9pQoXQ9)SkQW?eT z6ux#Jxp)dhVcw$Lo?B(*zEb=_uJD)4C5E4}C&A{AsNL^K&7udRv$t`l<>z{?>{7i2&~$R#Aq%St$De2lb#nM|*^i zb_N>0dK-Soe?ET``OAm;xY(pL?wf7yP}ieq-@O#E>J!tIinm^cv}Q)9lJ==l*s8?! zc7l=?y%evf{=c=!fC7gq>MSZ|sb(_AA#{vQ&w5jGa_Bu~G!@Ep>5N5FElWFe%Owvm zgPrt#mh+llb6K*+`*+z6-u4>JC7#P{UOSn@?F#e3{9<^mgja%4Sz|L^v%sUUF@7y0N#{aN~XPle+wQfZ$FHb_w`*2qddE8Rilzx z`8Qi$JviC#XXl?yuygsdYu4^CRlnJupTw#mFYeo5SZoIShE?H~AdfEsLFv!WGSNoO zs+Oj$b`9Qp382QfmU<5|b#dzLWHvxK0Se~wItpDpTY3ftXaLV+1^QUZtQV7GlA?I- zLpP_2AS}v+SP@LIC5bBxIQ!z;Bb*O#ND|KtX22HOVsdgxdvxO|>_ZUVwIOhN=d8Yi zl~v}$hYyvx=1`I)hEkVXWo5k{;a2J73RlRwQam25+H!2}e#-Xam5_Y)k z9@Lh}sP>Gd6X&y~I{PSBG4RvT@54z7iNcW}F ze*Wf7#^y0VMpPlmH`h4?lNMiyjxeqjv~Xp*laB$l?v|9oQ=(-f7I{XD8^C9hG|{ItIwayh-IIaCip_K0SIk&!*2L(pPZ0e}V|!@HXNFvS2s zupnAy zoaiCLHYT$;UB%K~fKXUzm79@q@Kr)8JO*F6E8Dj8#9h4#kB>z)VldyI0Z)}SQWTi@ z)MuX2%MBb@9uSY$9lq1iDH*ehJ%H`+*)s7C?rqWhVy`qxXix@exhl}(wz}-0!y~G(gi{*eV}w*vGuBo;yeXe`D6?SH+&GEm z-GF4%CWrRT^ZkngZ#HuSD{rn@t~h=E&=E1^ukp#>p#NznzCSy|;k$n(^u=Zyczi`g zItLHNMn^k5)+;gRM(jEdPfmV*UlppjTY9$&>{g3*iobp9sdAvo1<<2-3ZRMwXbd(K zBqiyEKx>gs=okd@0bj+*YXB37b9FGoQoC5$*erzR55WgQL!z&u^`D*tkoLoQ8+=r4 z8i0Vbkyi;_>>q&<>=m2>h0I2sA;R6eSt%AK@*qdw@kRSn1^`D7SNGbeox)tamSOz3A`+#ExU<-dgE8 zU3*JT?wMa1$sfs&i5^o2Nv`n}yXy^#&hedEk2m{wT6-IBj)lxI-yY>^&Yii~^z(7( z#MKKqXK4x<=~CxG6a`j|eYSQ(r%L|rP97-MkVKGh@@e5PI{pRh4M zcXIpC^u+GLu}!|839}z`!&1-VDE7KE(PFG~@4m!;7s!n19TUE&emqdm%|ak)Wq0Yk z^hIoHs!rcc2*y%Hw4|fD9~Lx$ps6H)*y!6!jOCU#)h@;{oSCqe6k}badCtK9~8JA)O_P^^m(VZ=c3q$4ME%7e_7m z?F}Bpho0Q1;Az_Lu_>e$tU~>3yY2H$X+_U{d6Atj`}%IHd)i(|$#Tv}PfuZPf?^c7 zWZ)N(ci(6VK->jHJUQ}iJ+IqM5|?T;;ogy3G36&IzH-|n?50H{LhO|-aM^GRu@VUO z3mgFJwnv$wrjJ%>57XzAc70dxi=ES!By<4sdwij72}at>+8nr(?eTQ_g=iP_i{9uU zeah4nt+YH9mZuSe$=FAy7FoA<*{Dr~rtX`H>DvxjK6GJ_QmJqiiq33&etfs1LRN*O zqNWJ5{L5&|2X?)`GZjPjEO0Bou}RMTGyRp9Q)Q!gYwhvoisv|`l%IP%JqOUN@)LzR zz9!LrJU(g#d++wAECL~!2!#2a7F`*D=#OX*fLMD#7J|8mgL`kq+aDVALG>tu`i5n- zsXngf@%-~{-+L)}z9k6hm=mhnQSvcqqu^&5C6K?^HaNJy|3T=tu3dZc@WlMl`h8nj z30_+kI$e$10;o9^HFc!un6rYz3ZkNo4Kew>#2TZ(IP7GG=AksqhS)}KPf4NZx(<*sUt9O9|r;tK4~s&bEOaC9c!yF*f++1 zsZROVcE{C-hWNQHhtj%deOn!uL(^B~M|-I6*@Cv+1N~)lRAUdoCbPhLWHd(s@Qsy< zBK!7qh}j9sB$@(r4x@iMkOe4|`EMP1w}IpU6{CYE)+q~1+fvsWf27bMf6USFSf(FflNvrS{p=^`yP7WW`s)q$44jr_^TC3%MG-%?h;;XIf zJ+Au57UUSeo_pwj1gn#ttW#eL+h0{1CPtBCa8y;I3wIx;rB5Ak%w_`2`*(y32MQvM z_zZ2zzKYIWY)KsUza?F-+myMYm7yuX#D%6;ENRhDc;srtg+dbV=UrXs9Ubvau%ulU z0s&eagy=$lWg|@V-blJK1@L6+L|EH0+k*&9)K6z-0Celb+&kuX5AW&iGPeAi66b}&>)%bsLad7NPGsF`VW6B8|y3U$<=;Qe_%tVVNPx+YMb2{(hRq~toh`r%}%j`$X6 z&jA|^uLJY^Z>3yfemq^=1Qqisd8x7Mk{1sl2jkviWI#k8* zuRn!Mf>Ik~sNEN_O*N0JUgQ|oqs%eOF5VeMIFaZUt3w!h$P9*9#%eA~zowyLN00q`5{mR=GcPi$>c zx$ybwhZDDEw>+%buQ_n>jk3IqkobNsAva~7TRHIE%V6{LvX|0vhU0T% zp+`1fDn)+!@_e(J=Do)1r+3pFXOg!}PChZpA>E_-4zn}Y45=2t~WYogVV07}haI$Iar~eBA$GAD6LwhjEepz3Kld&Ylnq){8GTql}6+D3; zKifUPC5ipfp(nQJlw0BIK7HuM{=7P__&be&X>vpL=;dD6Gv3kKm;WHwNZ7-5&UYx4 zV}e4vd_FVd@vN~o z)C`;?%nAiN|Lxx_$eYw^Mo4GI|*LzxdjlP~|#qjTXQVZW@|e)6Umw~(EZ<1O>K zP)N<2Bm8Mt=`8lc^DQ+L#HdfG{^X){tc4z_savy3vd4yULDPn1UV>r+Aqe%g+gcu7 zQSc#@alz7>m^$zl5zI zwWj82$Q;4;Ysg1hC1=d6$FnKDFp@;xeignMM`EyK6O!%{5m6&U8@1`(&XQK$Z zZ~<<{ko6~;n3&KAg@*pcg=n1+P#vpxON)ld!{Qqm1Z2O1hx^`b)UXPfANXjvdH1`2 z7CHi*?;q3#jxAm#NL)H`mEiuN(av0d$421NeS_IuS^dp?{=1ZQJkL18I65&YKcDgM z+w7GRcs83c2?(5#?FP1ldzY_BdCT@YPh~W$jOOy3k zd3o^zT}BU({bFEjyrJHv!pWe?Zoo#6)UmbAZMCPNqeH9f<%tLWc4Dkg>#TLM;9T)z4=Hthffzj)kCfR&ie5aXzQ0UQckg$Ea|Ly<{rONl> z0*L@zD`n94%^G-~{ zVLwM?D?vbDJ3~(79Xj6^)cYQz2Tt?V(%znOXkS%zwb0(MBX)N0F*Avz-X4Oib^Lw^ z`?|SC{p}s*?l|LGPs7=uE#6O++27$JXpSuaw)1boiz6(0% zc5QguMUVb3MNMb6MfE3M*x9p6wAB)dVrFJubaS8 z;_O4WF&=;6T!sD%qtW_XFw`?5-(NkF3ki&*J^~`F%YRC%aeh;a?(6E3=VXxE0XWFV zz(|Doku5(TU$1D#BW=V+uy2>)y=f}ewEjg6j)eC=l2I&EX{AcHi1O|^OCj_M6yv@N zVU8>q2Hj_n->KS^9CSrT7|}k*B+|Z`o?v67JgAv>D2H1aSI6_``lBbch{juFc0`8} zi11Jrzmj%viSFHYZtn@ukjPVE<}SsTvDFY?iq#)xNqTL4dmd} zHBfxwIh99n3_Wk~VK+(rGmo`#nuk#L|55m)h_P-Sn{G?NjHle(=+(C_N;JQ3xqjHy z>*d~{5Zs)3oew-#XWTvI$U?KI`+k472`ZRqQs!vZstzsd@3I-c0Gy$Ss*9Cgd0mgo5te2IdZr7ZfG98xYa8taQSDZC<8&VE;*7 zvyzr(-!i8tQYEYE%+9FfY@>>7weNRR!XqfRoQ{4cK_9QSu56TUZh(>vbnUA>C-Tzm1@t824f`$lhCCJN~N zI_INFQ*br>M}zpA2kU!eef$5GKC;|6*AV(<)^XwKg3b1P!Kk7T$Ju(Rsah(+_;VPx z1G5^|p7!x~D4?V$7Yd`h;pj#T4&dSEzi(DDLDzcB3EViK;+N26B7u}SFa)3=+74rn9iyw!wq*DV2i)H7n<*nr*TW3>n75{?y2~Gj67h;;=&#XNo@g!my zxv5{6h?Z~D^5+vDu?Ae+5&Q+SR>*#mlERdk6|%~zPPD9%)g48~5O-o{c3wqCgMUni z<7og~m==TO%E!wK1C7+wRNoUkyoaBJ{@ucW7cQe<1UZ*aS9s*3#WgT+h*LihIlWXq z;$#uSM;AFp#e1z*MM_$_{KVs*m;s;GD3?pw_Q|o=IKm+>JPy=bplcYNKJ5lYa`)*$ zioJ1r>d6-PYt)}k$PBKn?%cutMYsv2lzT^@%}V#lm$re4+3O2g3k*NpBJ|1~131Dt zHF6Bq>&U*ijb7klIS&9bDXFFZ8@LJBjBAr59JD1nOP;_1_YU~h%nwih%Ly@1la-P2 z2CM@+N}xO#3Mx^OPYC@qvH9VUpjT-Hd_{uc2#b2eTXV~*7<^E&m$N_p^|O|L{o>FI z1_Rn^jdsm-`NrQ3Y9Zuj^agLoem_Wa30=lT>4VyDBWH$qn<5S#EjIgozpP10ixo2F!-n006^ATBZSRIon|!ZgF^JJChyMLS1| zv`OJngraK4)hl=k4=hU4VY2$3$95H`5FBOE`#^~%VSCS9V)ppLW3pT}0uPS|%LyDl zb#x!~Nggj?^4v%Lb$U9IfDp_=xnamxFyq@I1!;#`NC}$zz6+V~Xqze--f=bK?H{FQ zPKu7M_ic3%RK&-}muNt;UR#1A#2XPR8X5x4iZC?-;lxpH9TY}+Ql*`k5<9mt_G6MQzGz%jGn<&Q5*8?v}Q$si-^blCq8eErT-I zNYWz6#pr;EcY8An7uP(?u@TItJ zcnU-DTAY8jWk2@&SjOvUZ|rfSga5n`zo!znt}v6oq2|)1Xzc-*KTWBiO7#1*^-%03 zsvg+DV3+D$hk1DOM$PKzs~}KkX3H`$(JaKD=wi-j~}6cDA60@ZluRoTP3&HEmo* z@BQi;up&rbd_~yw_QwqXrS;2C!ZcYs^YYy(dm5js0vh>B!C=|6Z_mZ^f}Ch{Xb4pi zkqT9#L0u?lZK5}32wVW}ZosN$^{RyIUnbqQbSUA@jL_53A>8p zWjdGOb(0%<9^E}n0p>vTPEY=2DR@m|S<)2X$&FRBEb})7EM=>!wGL9Ml{Pu#Z-!h6 z9(F7S+6By5Qc|+*tL9I4sBv)w!Bs+w;dEpq+pLnRj9cj9wo=uWKanGZTbP@m3lK@S zhwWke$J-!d5}h)Pjkhr{d|zE9+Wth3Cn!a&mXbXy=H+rxWlQm_9+6^>&-`>_yTE=O z8puk3q0Y$YJiRzHc$7DJ>ahoJaVbEVw#!>r??b*XD!CxAkYz2*t;aMTIO8v`f@NKCPtW zqz2OnDXp%0W1dEJi`KcAsvori_84~m#3?Ktm=5^9egb$NBozj3rMM>@1apR&#k#8( z=nQ4$PYU4|Ug|GsBSs8)jisljs{q*su|N32g&k3KkmG=Q2k}l)7^rO%XH9Yw7|f4{ z^=pIja3+HBgm{`E5)wQmT8H54RsS9fy7Tv)0uQ2;)}ft4us(q%sB~?)ZTrAUy^3)X z=f1uURi6*jM_$pquveQFu-KKUqs}B|{ApzMUwS{ z4CS;~os_>inwk4kWpYVA1Ua7r?4m_^ozR9j^1 zek~IY(TdZ2OPC$y{vu(ch6Jf2czfE%gQTUYxijx9sE2Kpp<=_(j9B(D$HQhE)w-Q< zb$nuC`LPH2`XY3+w19HyLz>K)caaD^16jU|*8k@HgBW~5g@k8|4s4lpJKx?KY<0}! z-1~2amzIK9ccOexfPA-Ni%UCyvz+h~`{M@GA=iH<368_9QDtzQo?Xhv$0t+iG||2W zfZ_a?FDAlM>=ABFPo183%aY|Vxl}yPp1M=RaV;JyjAc_sQ~R0*D~nf(^zJh7XwTFG0{qHW1u2)S3IM8 z&kex(|pCbt)VK@gt&+ z&xBNuO(wS(w{EevoQ|sYrZ5*~8$PltSuSQzSeG-vqU$4`0HaaMKo+Bt>^Wup;_JKi zH)ms`CxXpRZ97nqtL7JO06N%!oBkb=Kk9=bmxqH^z^cdHb6sBqh<(@d=Yk>sx6*f? zmy4y<5nqTD*KaZWGc6`sFme9+7s@xJp?n zC46^y9#l_Q`_`(Ml3sEU2+fmoAoB8YHlZoQb2_wf7ej8Me0EOC?<+*67exTNNIg4S zYn^B$I5N8amNWK2HY>#lGuPSr2!W2nM=*s#(^8c`hQE2dm zqTJNuy)K``L?Lzc%?MmiXJ+=Osj(OYSX*<`v{qMD!L)u3nh{v)c`QEb?cK)W5o6W^ zLzZ^oB|ISu_ce+TPgjbo1@#7SzQQAo-#QOdKkCytXs;A>B5z8T8=M0RT;H-E-8&Si zawCu|NzcD1;$w7JbX6P@9R3Y;>7DWuXB4vjg;?^#@Cki$Iwxw3){kk2m4T4Q$d{LK zk|H>1;zk}GI7^1NP3gSqg*J!fwwOcD==|S`B&Em4aimmN`)O&B=Fk24{X5z0M3#Zd zA#shh3G&ZTgmJX7YG896~vSBgw((N~HRUH6Fs$0%?PS){M?!Du^^6Kh* zYLzf#R&eVF%Ntw`mobGbhQ2tZ$SRk{%zvB)w|VEFJcZIszAx+prrcIiodalE%HWIn z)JWyaHxZER#~$4#9fixG{r|hyx9tnv8sB^=>C5U2VRzkPPd)xziV+KZFK(!@9d<)1vzJziDxX_Q5}0? zub!J%p`24Til

jL0_h{q^MpbXcfj&%k#Nz+(*ugJKsImmaRBxYk$y4Hq6;OeMmk z^7G_mcy}*Z#?v3l<&_6`<6~)L)_-5IET!CXKYS|JkkUkghMwN(?@hsBjc2;8%XiSJ zA+nHaTGvq#EZOY(DO3v41i&Nd9gg!z?{jX0`#sarhID9Gm6!G1@cWoyRpqS+3jI3r zj~&2r-Tl6{SSD>)TGzPl!pw-O8|~v=Q<9sOrQpu(Jv}ILsLJ7o4-k!@9LyPPjNBc> zwt9MA`iR@VUtIvlV*IU!|DuSngajRxu30}5i8hnf*;Aq;6|9;kvccOx8E6N`0hIor z*1Rvb*`2IUAu<6r8l-O6_BOC~g_AczCpkGe^~*bYO)K7UU(uV!K?ykSjB(QE&!54} zA+nf4F2uGeJ1Jy^*?w~jbvXY`csiq+{FTj<^_~Ft_s?3Zuhz1=z25s=G~FP3wO>Xm zcVBQ7fPEa$_-s*U;};E7i;jAzB}(UX&&7Kbq`Ge z%m_yEJ4q!qM+fiycfao=H>)do@1Wv42Ji)qrROhT4#5 zUACL(=PrLymtvXUTYlHRkLD#oDt2Ru2?T#k}3mg4AMMqUwokU zv~XB(D@jOTp&w&QStMHI`i<42Ou^cMmK`RC`~S?{f(sQvd<_ntD6x=|jLJdI+Jh-) zUx%A=iJ*}&NOXTI^P>(5?Qe2<`|E0ljEfk92^`|%O$2_f(7YWLrz@km3$EF!1jrSz`=3w5bt%vVhd>p za`IuXMXB(sccxIG*o%&!rJ^YSGCsWxlAr<=u<;%xBp9I=VWsQ9z8M-Egv$iXO{w0s zhdW1R-KrhuN#|5QUz4Y2^}p -aVVuUuc6K*PdN%O)8~m;9EZ#}Q^%A9zs7>jv#=HSmMkyH?SQ;GPk!@YhKIG9OUSb2B z8zy!gV`CTa+KAi3Mz4{g*?++ja6M3d)Zz`=DTyOI&8L>aUmm&TF&syBBsCi(GJA`3 zK!rAXNLBqXK=6Im^V<5WmDtJv2_0^6yXV5F zmqNEz1ug^-{Z7UHoZu3%DYvAipg=I;6~n5p?;hj4q}+kc<>wJ(QYG0@kwPX1 z5TMrCTQX9O#hW!VgOcl$+({~TjbKnE>dhh`@Bz$@9DNm7GkC*M>2lcj@82bO8g9QA zyl71B6G7^yXeg3`%XKmXb0S?Dct6%)FJOR({r^k=j7m*?t(lh@av$q$I?cfE1R z<)uM*Hf2ire*}67Cd?r1Q%-#fL80q(r>(h``U@Ifw4KE653>b@EUY_QaN1J4zJu*^ zF`j5p4L}alR}2RRRIeON@lwdrbnS5}P;E-e$;nAcAxq)3M#NBYQIUOLyWPIX;`j{hHU)f)%;)JUuZVxjWhXXWh?Cj9@0Vy$t3ts4V zm{3HST3V(@59q(*M*PI7(05Avcqg=Uhzc>-U6@s1b`xa^I?LktH87;rMMu~dMm*7b z7tZW#nFPYM_36gnP-PjLx}J^>%G{#64l3)hX7(gS^(GdPb`QYEpJ<}~Yr}J;q|L^` zVG>M?I8l;{#{Y+^_m0Q<|G$83msM8CUdakkB9cv#5egxjP)R~oHj$lB6d|j!k_K5J zA*4bSq7aG*$+*we=li?w$K79_$EV@C-tX6VKF>MNb55C>QgFJ97iAk%)>n_jXS}*K zczwNmPvvpG~8*QTS4GoBemL&ROkhOY71T zd(1sBPudTn~TgnS06RKM<(I=z+PXuTx z2(e^GoZE*@PlaoYrY>JGe>_FAieN?T21vR+XE0sA&;0|v?ijdOxTmW8nPB<;Mu4OB zsMrf}uFh{Vp2tlRYz5L@Sz~HKAWaVzPDJHzz!;2yVekxZnX-Np9N80GWh9<#wgZm3 z^pCElzf@xsA9yLdko(bM%do6pLo!oC_;%SZ(F_*}R@zf89XaxLBa}dOXKv~i>Yw@< zrB{j23qj_qY*JPPX++vK-CJhxUU(j?#B#?gZLb~wp{1fO5F7vhIk;VHd5A2njE>fU zV))TNyF5raGuSKct7uc2I}PoO;Qg1}2J;hkh5xM$X42k9z!B)@XlpTTwD?QZ#paX9 znaV4FzOoZ@KGz`x5BUB4D{NHI4}Y&wh|teaeEFPrt?6atOMiTM;&1*Rgt7w!H;sON znVf57=!;Y~h8QyXQ}5}X=oXraKPacZ(4}SL%Ho_k>yoSLdAYc}Yfm_X(#V2WHLL`; z?Tkm2uHc)bIL>n1Yj54-4=p`(n!k?i8f1&xwRdj?4hPH&VDX&K3Ir5g?T>RXM(6CZ;ygaq2O!kn9% zTc6Vi7LTyE_C*x}1PSrdeO~5Eql_ao^z@npy8}T1=cGQyT>GCP)p=LcsOnP~HeH^j zV5Njyr+U$LfFm?nS6+GH*1j`>Y;kxLmwrtgaql*9dqweUF~%(w!)qbcR^Y$kHt*TU z$~>n^cwc0!0Uw_qmY^8d^WM9aI$O|MHt_3Y@5#_7X12h|1>t@ec({O?=-p4;HSU}K z`GS)kF?pDRdFyuL(T*uj>7#7IAKr*iZ9mDH_#?nmXF%96Y~-+}tt2LENv9h+VsS)uPV-5~}?c`@PEKjs96Dwp00%Cdw)X7J8b01YmjK zQhd`142WiZ$Ts?KS%nyymf7$Kz~uT+fY04tS4MSW6#b%YITJ^s#X2m(ZY&?V{Oje& z$Q@ncoi;f$!^O%;7*K$oe{#?HQCz`-9 zj_J35E#UFHqq0#283eAifw5$^`F%4mkqLy`ULm5_-n@B35MXXkh>4lP@|nK|yuQEK zgqnK+4(dr8zPKMQ&3s@uL7ubm$4w$YqiHEp*8V*CI zsJV%uqLS6suJi5=ADWaK`9DsW#XvK-+(wn`#oIiPKS)?iHf3&X33Zg`8Zy0Cn3B+F zS%_)aqq#=jQ$6rp!wm@DD!t>m_cRQVVVxQ2OZ&=J;cuN$BDM2{+S7Y#PX}lU=|W}? z5wrg+bob-Wk#xuK+6N=JDqx)y6*F1e;jK#Q(?cGJC@HjF@9sd^0HC7|T7!jLm#*s6 zX1UBoM?X+VNsRW=htz?7r|$pX4ei$oB$!bh?BwH%hXLQde5k)n{>7$tz}Ue|;*2fW zGZY8#PS#ARL;eLGJ{Yj3qn_l-7rsR7mvxDM4GM-i&fgPyOr?gK4u4N^aV=Gz4#ZUi zddur+E!K)AClebRs=5X>Q|rrXmfv_?>f;ajYDO}sOK^o)rL#7#uRF zRf@18HEhrV}<2b}av^ZUpIm(PYr$iUAQUU&5v zhD9lfFYGVX)n^k^&AEAR2MDJy+G%{Tsc!tO+c^QGXKXTua-F8XKk@3Zn4$c)c4o;)42gPED= zAH__RoX&4+Xl@RF9T5`|9C#=FY$n#o~6p_-2D}M_FZ(r#E3pm%msJ)yHSvm zH#8mSXfBsu4COxNt}=rys6qHW-RA-g+r@94#o!wtb-F4)w)!gbH#5EVETk9rHV>ZZ z0P=}>H+SJ%P9Jw_h;D$SKwk$FeQ<%uhkI69Dj{M6DJno3B%nk2ib=j)XO=HE&Wcy> z%8D18zK$|2C@gfSPOH8wW)m=GYvS-HAUUTbEAQI&lv_u(Dd&vt)H+&;oS%r1&<2^k zM;;XwA%GRqGsYE~VV;hev(`C6Y^v24t0y5!A`Uq)Dsf$gJscqybvCX3|0XxYfXq{= zBU1E?&yPaLLl<>T*Z?hs1z+CcGxRjmZupL_2z9Pc0=q`Uhkk~X$L5CFnL zRrvAo*`w|uPM0-3k&7YJH#+h40ra!QY2_Lb%OXJ&xD5QeD`PMD zd62FW$nTty!Z{A3Ca^e!MngvSC=Kk#1;?- zQyW0^M{rr3QEHTqVGDpgMqaPXz9$BS$dl`N=W$)moST`8t0QHEk^KdfMv+5Rv)BJq zl8l~XAQ1R}aDQ)yP&{ExYf5dK@T~~^9B;^Ir!4dSUkC`+hzH0P_mGSkemqM>&(Txu zesbLlkweHA#y$qv2gDUO{YyTgJr1DtFZxS+VVQdYabtZ zn~UI{Mwv9-%sjbFMOjzH8aF??P)*GAL)!OdL(-y>LIBYzx}h}x4Lyrf<`g{c^Sr(> z)e--PDO5tAq0Y5~Kq4&9h~KDD)c*vljYH`NZ`r3})=9@K z^ek=-RQ69!{1@tU^|3DmV`jtVEPn^)%|e+!Mqj6c)M~R=hp%x9J?Zs!M=YV1J5Ba) z(3c;%miaxa`Lj^W%8f~y_hss1%((N% zI|Y48!;6+0QJ9HklzWKg0fAoScI5ArXZi{eB;58o6bgUJ|ZgW%M46I=w%y7pbV*u9#jpT_3`_D0B4u1TwoF^s;1+Je73{<|v z!1yd}xglrc2+a=94$O(*SURa~-q_#IE}&WZ)d3!Us~SZ*LjNHtn)CLTsZ>HR{_0Oh zorM+lqC9CgbfFYmm}Yv*Pn$%rxl?;L@X?F6R+a*<15{2I%4J&s(2Gta@GtZ{%G?-ehJ)jF9r)L@6M2t)q>&_;W?!Xc6@Oe+dC;{P<8728|JA9Zd^sMa zHg(Uk|3a`DIB2;@Q2s1O-)-uf44g$f%oJUn!=`3DUvQGTjlqqKSE-QLpj6^^N4 z^r4u4LPgz%Ofc{ZCt?kS2j8&-ZmvTa@fXtixDjY@3F;VG3_=Mi%wC1l4|Xs&yPQ8t z+!?gamo2#-Zmew6pD%fA-hNubVEoa zo}gCMRG1y^#us8z-;ZkNxC`(h+aBU#tv;)=KCkg_s4-*&OjyVH`VD8`H(Sm7@5FzmZWnOgUpHSDL_!;T9W)1f=6WenM6MLY7&m2Ek#0h{vHf= zf6mpQzN!faDVqINB-rzuAZ@TPg_)0_v|TtzQZ(^&f6kysl#Zyp)&pAXk4BBeLzo_> z;iaV{j1ud&@>l@50uc>CKR1L1WyIl+lx-tF=r(!W5J!^pJQ6q#e&PH>T;ga1|7 zjE3;Y{yF5+g99Vy3OJne&m#^a{MC2mxN}U!cdoMCZZOZw2MWWh;F%K_N4L<0{3R4G z(&!eT_NG6~(3v)7C7z}7z@q9NmOr+7(@*c&f#eKhlI8ktyF#;=pfz9V^53Bhyywc@Ef_R*Mx z@aS|J=c>%RqPqJH`J&DalsEo(g_@~u@eO#uyD&$A2Z^|dcJPz+*X7nQ$WEb#^gwR3Y3J1p? z^Kz0u%^rWxG?-alD%+7t5O{FnIqrJ21*2!nS5`)@)W|tt!QkwA+0ik3uO1ms(Aq!= zsVUeP%wwC#pR8*t{+=#>ms3Xc@4wcnGDGi6OnQzgq&aE4@8`s55P}^ceecUv#C99lgAlKwr6AB*uJT4xdPf%iGCcp2ZvN7v^ z7+@o68&ivj13UPboomKQxm#{n-lu%1+3hZr6yTbnz!8d=lIoYgwFdwbXfc_QAV4la zRU40g1aQM20R}JjeF#(#3QpI214)AKuNSQT68bl^W%N~y^C;ODM(fAlRCzPz! zsrOZ2=+DF6kGDWMFt{OUa~_6gJ~XY!hl_lA|C5x?=#Ua zSA}Fuau3Vav~L@eDf~VLcLc!*;?tvScdmNYFt^{-%P6sFp}t5_k??_=YE_$Pa{hD5E;Fwnj%*^!kTbFE`IRjdD>Gb5 za2MFm8LwABoUSgtK#&XwdNU`TeS*&ChYQs@|LEy)Tz}1eu;vRhsBHY|57~fU2jE#^ zqEsRO&A*OjW@d;rx|e&~^6!xAVBYO!(k+Nv)Q*ljDB^GG5ODd%%#*5D(zJ`r%Q<6+ zWIg$(8)y_6i}m5pVi6JpliR%YKFPFmAg>Cd`#k11_=^a70XKv&+WlN2bvD+Mk?W0{kR?@7G;(iaG>e|E?{fVV*GHp)d zCs+3kJ1AQogAhK*>gzY}h^xa-ZDb_lh=J!2BH7sq1lC@hG;nkjo~Wd9>cCpF>&Gju z$F++y_lf^~>7+f0UCw>e-WfJk9<#V?9=Xr@9O+$LTx3#*J4@p!%mwJ`61@8msO=9S zX~S9&7Betxs5Na&bNEbh4)1EP&%lxO$9&s_GKOy>w*QwIb%&J6b%c5W9jgWbZ)N6B zVbH5o<<7_TF0Rp;!(}hl#P{u6!l3$&9XlTCKDK=D<6UuTsWZLtXQ-zu1P&-jU(*)} z2vz?`UrY@fBW|cP`rm_)W%fZ7OgR|RC2N$j54FV}y6!vidsSkcYNaVlVIT#@=75%|>tm7zv?BDN8 z@Lr`WdIOKoa;dw5o>#d+-uIL*cvWDGJi;-6x^h0bVHY&_5sWZ{yOH=+Rlh%NPxD1G zjM7X1Rc&c&D}C?wtsok6z6ed>XKe72fHOm{D;~ps%mU!_l)cZk0lO8IEg=4fx0GQs zX4X!~1&H#z&KVORvYD90visv~Z!buQI~`+Y^(vA@3nvi9Ij%*)%)GV~O6n!+a>@4T zUn(b0&>)h8ka@a9V%M$~5BWtuz7Y(jh;#KT{_olV;Q} z2|*r=zKU%o=CY$-b_A-N7D>H;FOd!fU`UOHBwK2G#Phqj!4#NJ@M9R$ACpI{T4pCs z2u8pbR@ay{y1DVwX9##;q8o=7wmMS@FD+CM^~ec<CAmDAbe}|4s~)I~QRFz)W<`dP@s`DVbIllnEOB<^jKT1QmQ2c+oCBCB?OLro~+bI^)) z6LpN$OQj^JlCC-`P4nbZ@4wZRLzOG~8vZ=mQt8jVzP`pI2bT7ne+mWh(W6Jlwn|D$ zu*o5tM+8DSj)QU{y@GJGe#lihUVM5mQeMhf-0q0Agsg=?PxyOTK4=xdHr4f|4u5sG z-SKr-7p23QG`)ge*K+xdY0`&{)1AR)W@#<jFDnC0AfdhH<)jN zS@Kh8$VthmxRw2So-2|TNj_226N$8ivMdU~<2 zoi&$)uT);ly>`bij>kr#j(nOmq%!3+0I|5Qix4&+3?<+DEYGdY@5Z$B7q0R<;toG@|$&~)WEYc~B%_wKTquZfL~f#4v8aLTdytS?;$Ml=aeW7#WpP^dAfgHpM2 z#*OMmS+AU}Qqy#kPMd8?U&tMk^Gfm!eQjvLu;3_(h-nRy!5@MHz&U}N3#~`w?^C!<0LWpTW2SdeD&;IYDdiX03twJ>-ZY{G zzXLpGl~2SD?cIEe^hkK}e0hjKMUB0rxOh`u83;zmAKO-3LZi(}-kVrQyHs25 z?L}0x<%1hz%m0EEBmLy|m7<_-*xG!iJ3N4Aadd=eWRDpqNQPh|dlE;i0=KIXuzHM> z;(MUlTL&sY&A=JKNUYjCCHy#PhPK2)sP5rRSGiFItR#XM3{2qTPxg>jQbOTm)p+`$ zc~2hz>a~L6o$y(=lG2c#(XGVgf;7<2SGIy`u0?0QsM<-=u!KoJN5gO&s%iq`c}@yk z4eS+mi)c~zt52aSOLz|70!|*DxhJ2b&PJbtzqryjX-AU8w#D?b7Eq+~epdaa9^N>* z`YPm;y}xyyHiLOTr5x{z?XgpDb}(L#Y@y+R?V8FNAy(SDRf~}5AFFOeESivu^JsL1 zQNSB~@~ti^0W)Ql)9?|3R^`Z%t0q+4S+s4*6t`SGhxF%(+5(tk&!f6l^v&*X=oNW zEv{jQA-4k~fhJ~Vku?qLzrkpAIxnI?pQeW28J6R7@vH)6ESR3%KL7$ACytB3AWcq= zWwUKTH^K<2!u4~lwNScXi7D!lW$8uXEWeN9&J8JQ3XDJ4{V9$z%}!7!lvtHfb1+I> z;$BDTehJj+!Gr!pX%w3zG=^Mq&h($(gHt1#*}`cXZSgh+hD+kFqU_R6v1?_-d8TdL z>i7y@`D}wp-6wmSZ|D`+=%2QwA;M0}>&tYW4l7?NZ8PL|Ya=#)xh~IH)U3cI7I} zaX?)e2s4YZ(iU>RTM@a4jSdS0FNG}l`X;KZ#oRWAhg<^Z{t}#ln2EZx-~C44qwkDP zE`DKn-ftMfo5y0#lsgQ0|K7H3sq&G!@6i4AzelGW9NK(W?7uEth=XEXkjU@_O8&>W zK+}=^|MnwL-%q>U`z#caxc~yjrgDumScv)RdQ%PmZO3%^?SAb*$EUmI;9(FjSKY6! zp)uk&&QPeq9}}Z=jQ0nV0K%PpYP8w+JPAY8;fz^WmGDQN6V}!n@G`)hn50duA0!U8 zB6a97ZgnA~@Bvb0Ae!~Tx3qll7z+qE)|!2KprH^;LjyM*TjE>mKSY+)Jp)+tGZ~)PjKQe%d!^!n(^B7R38DMqILkJf~ zlg7iv#l^-ZlB|mnrHKGM%Snadpxz5#U+*YX=QK2i*H3zk0;#}Ygd@uUIky``#NQnh zZ9nG#yuGZm4*75%*a~=#*Ska_=%>LmSUGIgJw^9 z#?E2RgwMVG>%C4pAi8qh*RSpgyA030b zd}n+s3L7*w7jXH}7|Pf+Q5c?-L-D9AAfP6gyn0lb==XC~GbJf$bV+ZD)C08NFT36y z-*E*mcaT^9Z9(iV`L%wK?EZ#C_${r;C)j&O}oHzK&4O5NT4nuq%q~+sY4FO#jR~eB{!l{pE8dCE^zs z7$S^T9G5;BsM9%!zPC~U%hJ&6nUIZj!n9sw?y3t=)Rka4xfuYkd5JZa(=+yXp2OZ{XGQN^ z#GfGMIX*h_;`$;{820ZMsrzof3m2Y@GOHKa*gDzT+QLZ=zvf3sxd5Hx*Fs|2PyRFS zX{?&+RR*Q`nyHx2$Yv^VCm0lxfB$xd28Cu%Izk9~!5}zV0{_5InWjGf@li2Q;-uk1 zECqS_Wz2de&~xqeH?E?%(@jl@A|oiY7?{Q@`L@n62qPg4;fzl@tgNE)`AnF<%AM_Z zufy@aUYRbgB?V7cn%ykkm`}@!A`upFq%c?@zTDnMkEOB(`9a{F!0b5KIg4P z286tK+p*4*(5o^lcmP>C(sv)IY6w_mr=)z*C6h5MFzgCwD_7%a=)8^Y%chLlayEVP z&E#Tezqt4^HWIsg}(N zCnnJ9$~zt0h#`i4B^4AEq2Yt>CM~gwLNJ-|nJr7X8Vd`j@g-#x3?GV&$00{wibpXX zgj^*qoXxl#0z@Zaf!uEI`$5@gDQ8$mP9rYp5v0S0F z!Ycv6!JAM@!^1}-ki=1J1ibH$cLK`})S3D>Qd1W)Ah70NW zRK0@WTILYF0)z!X0CFKygJ*tjzI84o7dIW!6~TCGkkU6Jnyo}%DXOm(fw z{kTMit#nJ}tR-rj4Owqv@w9(#5)imQi{Q*FDfy1lDSX|8!#2&t%4!`4?{U`sS2ov) z2|-Yx89Cz%Vxb9WFz_TC|BW^dl#f>9lwFniMHnHO49#n z0V2tQ<7Nls=(m&DS8&`gOX55G-(t5B2223891?U6W~0gP?k@B_PqHmq2>6!z7~X7o z`HnoONB8eHgTCd=+lafOglhnG%3#>NZ{H)(Q1}D~WjrE`OifL3AsF0Ine*GlC>*Zx zOWYE5%;oV_IrmbHeaY)P8en?m7EpkvSN%Ng z?n=MQ6D`5z3droALjY1Nmoc@4Jp&@{b!X>&B=tyohqk_e1_Km+c%!QE_3=xzk?Jsx zO7A$bbTeesBJ7nGfv`?56N{iaTWam-_ihEEh$(1fKBU8P4HpX>!f>@kLQD}I-F&wJ zs`{xyY)>RZX&-)p-^9K)P~7D&_#q1_J5anM0Y48ZrF2a$VnU4nd30$2DOIcOhej&K zZ#smhH{T%Cn}507ToUFtjB!qkY~jOX-9ab=pIfUC9yRx}e??oz=0dXH1u!Irzrlcl zxBa^`J%0Tg8mmrsixavA2HOHsh@Q^i`UCd8)wr_V<{+6(J&;iO{`tjj9p!?j^zPg| zy96H&S90%stV8^thyRvpY51dw50WC};oSi!C3rskl;2@eOUT+ZYK%UW- zclx>0<(zNCptjFMRgcKAn-mljxM$RUtPBhcpx0?=Xn+}i0n~ajC86xwht)-6$)YbE z^pL+b=z(#9E#4@G`qUTFqQ6cmQfyfQC<{IM?!HA|!rP6iueC9@88^OqD&VlIu2LyN zN{(<2X%_M%g@hb1BZ7CQPGI2Nr;EFsm9-)46?PQ)J5iBCcFj{%kaS3HT$31T7}c*Ot*#+w)#yjQt0?GtNiVtbv*zwWo=> zb`3Ma&_9Lk;3U4JH>oNR6ufI zPbj9$!i0g?1mE001I0S{(>;=s%ATVkd5WTUx}!%QCX(3$g-lC>)&$p1_GwTRhlyq@IqxrXE4y!DbWG!<{zrHJxf?!8y9Un{ z%LfT%2nj^oKj98`3*NBf3X|i#QpKjUCXA8`D4l!LIfWu{-@>D;-BV9nyY0z>_K^3*b2kX8gl8)5K?j!L)G>zu^6&lNIxBXL77>qJHc+~a#|1h zVLSyY?=2t3tD4HZ+xy5O7`2R1$b)e3+wHjX<<%K{a|}rxFV;6OV55yh!4O`BF~D1C zX-+a6%9X6%{_KQYkPWX~p-BIW2Z98jRvf!&>FFyo{oB7WGO7bDL~&qni#%Za{=|kc zPb4hh*KFj7%%9Zm`de)v&sHsJ2sg_M_>oUGFi4 zEPy$s0q6{{eDy9@7ShKn_NKhr;z_27i#z}IPg1Kc6AZyAoW zQkLEr6T?l|azQd;zaT zm@uLT=)ncY1;xVNhb8ac3?(PP!~^x_*U3q8CX9oia5Lh1XkPv4u!@`3K#~Vl)ZD5e zX7A8D<6M}1_x4{s(AL@tinuAynl~4iEl`J6p;Y`M77soE=MWq@UUBg3>_pA=B#*F3 z7ELMjQD)WCfrdVmDkgwS^7ZEUnXlRo+M{Ovxgn)x%s7Y+oaL$}0(5hg=n+JJ5BncY zAy5k}44~l!IxXS-<0&+B8n;5@KWKTgRByuahJtN3$$ahfvmD$6)g~uwV zAIteb1Gb%(maJKUSoN_c?YNP@JlH&E#(>Znlut589f;Qoh6Vf{b@bWI!%-gTNnRKX zT6LA-z(iS&`Nwl|)m@1&LSQ?}97Ma_N&)GA~NI1yo*hKYquq%vYN;xzozP0bfL%5jhK zfD^Ykd07erm%PHV4X%rW0n3s{n`tAAyu2#=pLYETR55V+8KCFWfFb4UI8Q)?D*cF! zkDu!+?7q3*o!C5OW==o)#Y9)bsO&>|_E|l%;YZS`=j<#(I1lLQ=uq)~#C8S3gE3~I zP*ns7xF=5S_uAd!<22A#+c9@QmY}|9E8!hG`wYgH+q->DPhf;;G3vy}pjR75p2`O^%5;6f{x3 z>Tc4UO8>Xd=TlNWnA@F4-Yv^{<;jjsqDbU$_sPqu#CRYDFmo+%z*aRSw2h zYpq}%Fj6pD?T*6bFjNnvWiP(RI#x~U8x`>WX}oM&alH5)-4D#IwSyB$*eUnz`Og<} z9P|hW!KseVap7p$^r#onjt~+^6lmvhToCO#A#Z{4YjXGGxWo7UGGcNwbPNmVO-Il} z1BAqTaer52chVGV6y-8xCqxbey~U4_`YnVn>9TV0x;a0i-=~33_Y`&s4Zuzfr0-nq!;?H)&^b_Shl7v(bRzagf~}NPPY4YzmI=?b+u4>tb6ovaUw}o?!L#9njX&0{D*N0xk6+ z85vk9Eo1p!gb-)kmEtn5a+Iki)+D4P=M1fC&hd1}s(o&rCu^uvvL<({FvnCx$b;BP66FLSyHE>n;-mJ7 z{nRl$CPilNd-{X~xNL|ukd)f%iUXZJKKqINVY!rJ6M`s-SQt|_eyK{OYy2$jn+DFM zoo8pRNARXq(uX|)8g3Nk$+{D9Vg#s=Yisc&R+-fR^oViKPai@c{A*bI zSi$i|A%i1FE__Y-!GwAD`^TMbe6bB@Z)?=XDUa!h<7Q@*B~iG+Au>a))YW^dySKay zI9if5F{7AR4=&GOLJepr&Mu*EKj5B0j0MFVO2!AM41-3mCl|2>h)o;POl(tvzJRRR zZ7^D<@E?kX*MAyK7ADwDqjcU&8uR$vRV? zDk?;BcaC+1w&YsA?;m;_Od0Q8vgY1KoT0*gzvb!hWQQD15Znv+=#6bKKEa1ZpZFM% zGAL}*()Tz~6I|3n&wYIW_^WwLb+qU7_M>^dAwxCnLe#d+zdN+8T|^T+{8T)|aRf?Z(#pYe zo0zopVI&NH`i$q*pw#Li=e4yNqd-LXr;;C=Bxs=LwqGXU2hvm^kq|I-_u^9Jm(M!*D30q z`&vP?!aV`r&+lN-1exHkKEuO7D3gK3a3Ar3IA!P()PU@ooWN1=q+cAhymXMqQ~IZQ zrKVszh$U!sOSnbNmYp4NR-*p%H*V*~Al`cSZEITQDL1$8Vc|Z}}S&Gd$t*y`3f88SgE*1gdR&BtFl%$#CbS48cQ{9zA0RAKgq z19)zo6hND1BImC^fk}c2x3|d;coZcf({1od?ZsU>hWB|x6#qP-JyzH^re=KnII|VA zaysY&KN#BZZ649n0~Fa*Q`|pO@wiQhjM|Wt-foz8_JqV+pwkgO08p_hI9@%HV0wig z4-F(yj)_gBz>8^bUmOcKO)g-r7~(oh0P5hmEDpLs_w#P$B>QKUqA@Ho*At+xu>c?5 zgaoU1<~RNmJ+;+5lSYbjE(#WUoijQKjog_Erc(F&{J%*sa;0c(B z`g=6MN*BLfvnc~)s$io&$Ry@PkKOp{Ud&)$L?BhzZ0v zr?U{y^dkexo`%CY2Y~93t_t7Xof)J|n~bzl!0@mlfdD%_ee#B*oU2w3%b@`j2DM3Q zI593Ygpi_+Mr$WR_%TN-CL!@0BerMyBcPsG zE?`7K(9KNF-I=Z@`6hzK0j7Q@&5dnaxi6^j4n{K=I z0h8To;Z&Fl$L=7BV(6xHyNwEya6nmabQlg*xQso;b1%^89w5IwjW;FN?kx2km;^z< z^Qm)l|3aIX$vq-@c;dtxAYWjh4C-fajbo-xhX6hcf0EdUK=_F}4Cm3gBR;5<@U&oK z1sT+#f~S6zGLAc13K#zb)^y=W2RTqaA$0D8v{ZYPIoiR8M+ZM z)>y#%z}*F@n^m6KJ7USfR+i*av|a((A0@7--~N&6q5UZb*8#7Gprs_Mq?@D7>OvF-BW;sB2g!8T0y1BUl{?_Aj&tl-vV{W7hq zT5udbgM_zJB;DJ#6Mq@z3-I%+@-wPN@#~Mz7Ud^GVn!O3ed9*!+u~z_$v}njdS8t% zsID}5iShD)8f0x=J@WKm%AnYGI)hoS+j22gIF@hTylH7>_8aIf21XOIXL;_d z#j(6dGTK&d+2F3)MxD)1N^D;?spq%z9g*Lx5Ne!d-}d=(T0^D!vto5HfW0htJPzV8 z1^k2dlwy{x^EO1l{+L=cHy=O|I}-f2>&IDd;U@|^Zx{OFhkW**+2dEI1RDrs2iRJQ zaOO;aoWOVwMESW!=2lh!zk^nGH_~%a$-v4zuh&nrSD2aRzCQ&!UD;*%``=jz6ez3{ zOo!%}n=wReRp-A$U>{hDh6dFd%|8GcviG~QsY9`Q8J(Uru(_jAXR8K*YmAog-+NQe z&EgXo6@`I4gvmT}L!DKYi62w?9)*5cfAba&ZIDS`Pr0v&pl!E!R?Vn<9-E2kmyWZ= zs#DHneb z@&lB=#qaLo%omL{u!3eltGnJ0=k~R0*FcZ}Gb{mueI0-^GS- zaw(pwe>J(7d0DQgrsD9`{>x{P0i$qM$!x=4??acfoaiV|YHO9lZSY$`8#fFWqU}zIv^k7^77$0L zQ!s|r@c}`sW0IbRKyU?~fT2eQ>28!hxMyFfR`Ohy≤ssD>oEe}}fo{OY=WzQ+7| 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 {`1iK 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%0AaFKL#_Jevu-OQ}3*~+ShZ*S-1bSa& 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

GiF*0rW(kMp=NGDMnfmaapvTA> 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

gQv4Le`X25EC0 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

N{@>*Z*q&TAF{3g|9~Gcyy|~{oc-&NZ<+>y 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

O@sVo1A^ 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

_mI768U>#GZaF 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 z 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 literal 0 HcmV?d00001 diff --git a/images/event-panel.png b/images/event-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2255672522bc7286c25997bda7dc4c5474b11b GIT binary patch literal 199659 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

Nx-WsNS0fYSd#uLePQ%nR+$EjnaL~7?Dk7lnv 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 literal 0 HcmV?d00001 diff --git a/images/overall-view.png b/images/overall-view.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1e471e71f7bd19fb16dcfa53dea000424cdb2f GIT binary patch literal 338560 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%0DT7fD%GZOf$=vMg>BHquq#>n07^zt58 z2zvCRJMM*c_$8K1_PY`a9|YGl%&jR1@aOtyH9^%Q9p7oJwxZrEv~L#EQyc18mbT&7 z-yp{?+cvi+pr-HdMW{#KG!XH7qH*CyGK7Yc3AdJO2n>oNDZxa z>-cL86y4+;EmHxFt&du#P)O#Zyy4M{oU2*-(jo*DW^BgNVSArF3^FOq8~K?W15WT zMNavo)jlM~mp>oy%OCSl<-C()^DRs$+okcwGyyrW9XE)A7)Y$ZE^7*kN^~}9I;_+l z?3R%SVJm?Lil{9Vvl|UXLkXc?=4vbw2Cr12@Lfj@m3+#mbNUeE;pnY5ehWYjNOnvP zYIBu=CS4U?an*b7C9P)V!XUPjyAagJCb8j zpL4DXRXSr)+{%!at?&8k7~K;=`JT?c!j4KXSw`O@T@{RtPUZL2&hd^Mh?%4Icq@&( zcp|HbBe#Tx>M$v;r{MLDe68f&brsl@Ur{b$B3x0)^JN_M;(4T-^1o@9dy#ECWOJsT zrZ<8NxuSM<2$XBt_SdV(^JFRRr!Eh#uWXhtZ8_)f?;C4fzUQgep{(4|fBafAVs~5p zQR4)K6!&C7Cc-eQk9f=m%?T|;{UPXQ+RKFQKX@Q0BN(S-Y;0UIzD_tt?Mw9YdE>fx zjb_Z>YsXT3jab&zk90WPbc<19mT)%k5i#QO6>==)uncps);r88{6pdvNS?-7sKS^0 z`#%xOeK7K0x)_2P^Bwl-+)lGJ&;8MKy}PCh1YS7+8e8ne8;3xzT%}7ouQHLg%{PP! zn@%ym9|u67^rrZrk`n4PN@|)L31U}@!y^!@ly4;@N9F(F!oQ|Be-`^K86u)^n1aas zrD30FEi6X9i zLN1m#i0}L$Oe@XgqCFZc~CvW{xn~4RAB)B)pz6Ezw?#sd4 zZi~rzDO2g(|IZUf{ZSL`QoY5%;5KvEXuMQHUS=@Pg1J{pq;tCLB*|9u zg6e|Hu}dHO-waHa5Ngk9uP4Nh@CYY$gF5xqAow*~le z6}ydpvjIdz_hOLdTDF#-=q?3=GhR6}UfC)p+NxZUtlHJ(vaejChFj;K*$3o?b?}78 zMX>}o-CBXSIg_>w2$40JiM{c8k!12*E}iFJHN45q-9tZbz(Gk!b_jzsQtS0QzOH(r z56&3v{#7Cv=*wsA=-c+Lgi%Z^dDOqjtD7rjJP3~YRtpDp!$0CAQogv|@i54KvFxuh zwWpK}osa*wjcP_j#8dcxK3Ybk8{__`DYKc9j@I_{tKHZC&6muS#Fh$b4@-(bfU~su zxGSCHe+JURhv^scU#VeX&Tg!Sqrks5YdZcYz(QgLiH#F8if+x7@okJ)WNQGf_*>9N zjo>dPaA!QoT&My5-FrLkhis(WrjjQ3V0$t$>{9))!`Si9%!Eh(BpYA@CH!k$)UR<% zFQre&s{sY+Yn8#w{a*WF`+3>Hyu5IS6Ii5N3x!^TI8M3| z#{=>p$~?bs8gL@yI`rLouu7!ewT5ZI)0|;%kqkO2m*vlu$NxYLz@jp!KkT+l?s8O= zV?^j=MyGx7hBsaZIu(`#klA1@)Cj+SL{x1URJUHio-%dOR!ggkZNVMzK8K&^bk=Pt z?n2lrniXK)73ag!*bAoq%%$McuWt9NU1~nw?$F>X5kQAf3Oj}2}`L5r>q6o6WPpO`Np5|Z-YJ1Rn`oPP_W-jV-n>}wf-t2k=0N9L)wR-fl zZ>+z!xDw*G=8&~?+Hu+Co{&TIEE@SXUq-bY#f1vgxl$V2STwwnstOcpeu_))a@)o}#B*@7~O z_Ravnauh!IL7L-DLrf)P;YFP$ciMZvif?`#@6s)n8Hn2W44=$+9Zp7QMD8Oj8+1zo z*T|?};)Sr)%1vT^_HwM~@GZmf(;*wry!QjC?jQy5?U_f42fcbhQ+5I8YOAHhZZ^aA zHXQ-&m*;9}hKW9itrXPuY`}eZu_h>RkyQP$M}g_(yQ@#y&)-eAl!pmYeYDXMuFwiT z(+KhypBbKGJ?X_GGaNWq?_nNQB*Lq7HKOb})u)yaayHHH6WX1Ht497PaPHTbZ%3hz z(f#{s^)7oP$iKA!0=CiySdTZ!l1-cBp$xdpEQl(FFC z@$`y*2qc%}VT9xsnG6kfoCb1`d<>`E>r+77 zIE}OFP1TC_F1s)Q;1Xe%|A^bOnHrPOuNF{tR541%GOnnZANtCvgUMuDJaPvE`ND*; z)xdsyc`Tsxa6yB|&v$N2tK4DunZ?2)Yf@n7lz&>SWx-hbeR$V!Wc_*3=ln*n?&{zM zq^b5Wr8^-JGe#blWYOomQ(=HihqO{xPSeA0L&k1|B@Hzp*h;vVC1n$6f|q}BWMN72 z3v~-XoEw}?Wwr)&wVr-U%?F25zC3y`{-e}U*>UDuS|XP+53vt~_|+2vxAA{`NVqR! z$Z~qH)V@qdCEdMii&QkOc7Sk9CO|EanWkJR4^26TRw)LItu|C53#1F(p{4pcKxrE2 zQ8tiZd<`}sX3TG9#HOc>lPpiAee&X5=dHRQJ3YNZ%wcVK*YNgobqz zV$E0^`cWdKo#MrycwKDlYZBWr7*xN;3&E7FF*kD?x-~i{)ZSCO-_ai0_WbwU0&?Gj zK(?o4BJ1M)U}VFCE$T|IpA~zyTHI1$vfDRgPRK!MgEL>$uRk7eNsn)ZF;NE*h0A+raI#$IRDJI+GGm~O$*<%Fx@(UCb=kUM zfeim)z_bvI`EkC`7y=8APt5NQks+`oNBFu3SR&_#QI6WK6c3D@t<{7Y^u3bmZjtRq zVa-v=i%gJ^D1Q$q9-+F&0ZiF-p-Ks~!8z{rH1d!hZSP1KV{KBZKM|l4Md>)lkD!A$ z=XMnyU&d>=IZ|i5jXgC6h+E}Ugw~@FB48p4z?J}pQbHmQz84Q-LDWD+0myXqDRCdA z=|4CIO5|j`a0YiM-+mJG)pxT~voo0-D;o7Ie%B9JBEV#(0OAkW$rS=)I9VY(X=_Wv zkX0_W%Tk8nUdjh`4(2e3>vWw0Y%tsTZKT6gA;?S;E@}PTUJ|V&-_@!O(g7g)H+hKN zv&~pAxMba#xr?lKk50idv3WbD1YxXmrl8-di~cyincIC}K^mq6@mmu_lLMtOIa=s} zf_<}+*e+CmStPTRlqx+<;sICx>g9=~hqCKi1H6BWWOJ&$`s(gtF%*3WD( z5Y0Ut7AnjKW>ho%0-)?yJb<1I0SXfHbH=VJ>(AJe$fL>T#B2Pins~?nT3c9HXq$Di zo_l!*HBq!dGSsSRcx%bfBjIaO$Jkrokt;S7U~T5=rCT>+6x9LK11zKRI%;@Oh5ORH z{GZ4ppu^nJG%(OU$X+n6uCC6!a@+!(rK9HM`hbOUiuW_{Y4p#JoJ9KX$47iuc!)1vH; zWei;VUeCfHBFKY4XY@(`xi;Vf&@Od#5bG0Eo#roUbb|EC{Kd;e|EC(M|J_LBKLt4d zYb98bKVFT+MSqR?8^DFLTJZh~p{)Mw459+{j>;e5ZF8or^nWHn^uKiL|CdMp|FPS% zD-jW;TVXcL>-Sa#p;FO)vO|Rrx^}#uNz0UfI5%Vd+j>5~0oLc<-R(9#Z_6F#dWou0 z3fkzxsf0W$X25ClRCc?hs&6fX*nxFx+F(*N$rNmQNQkYY?~uUzmu9jgcaHH(9~Y5<&289^*6 zYum0+8SYJQnKzL>e!^!2GKp!MiR*=4YQ<4yb-w4b-`5?64MZM}+XtsM;Eu<`{9St2 zQwg;=zV)%SQA;95qI;_vCDGhHz6AxGD8tAd;0&NgKW||--%OL~mI0EPUKwN&bS4f^ z!?)BCg=6`^INLf6GsDsZ#4Zt%HkU5G(&9{tCzB!E$#CMg#H(xpkwJ2-ORr)6B)+lm zBnQ-6tgZ*w*o?vQ3EpBO{~LNpW|DtrPDG!^S33FSG0t4m(cPY$12RVKuc+czAx$9B zK;VFyW>qho@J)EJHgv6{_GEIJfD(Oq>Vg;ZLy(}t<-$euaMhQ3fX-UIHW9*rB@Scq z(&Oa45J{M+zlweiD0OHbb{GIi2tAc5L9SjN$lNuZcXk?{?&Bj6RXCZG?GFu$Lgp2F zdJHuQm4`DCI6c3g@Ys^)xokRHeRkOCB!gqTlt7l&4`0677pSRBBO~D8QZPOXF4Vkn zO8T0;1_=MmClGZIKn6Panh3B(4NSGAGC@j*zb{LLMFN+5ADL~eb_Z8E?%p@E#eJnBIIrV%n^CAXvTlx;UZJD^CHyga7R)5u#AHDG$I2U4 zgZCV{)HA7awZW^OKHW+;o+?rqTAp>7MUm^pPzn7Ky)^ZMq|4zmG2B!+#!dmeCG@ck zZnZ##vv(vt0M*uCfrog{zmh6D$PJE&{gS%ctVpP#!#G?oAi&jBlc9UJ?#fI{jGx4J z&;lMmXa5jXDA|o4GhOuA75d>PrEU{Lh42TO#;3goV{*5?L4XxtGt}S_QXM>G?l$TQ z!JpFYn%j+BsDm;9U_Y#u;(8z1Wvdo(;TIRFHn)VTSu7_9EP0R8k;a_AK`!9VkXgz} zAUHPo;?h$I1)b&qn8W!&GKur>8j_#m$%i4T(>VG&JH`8uX&e#wHf5$Jh?9IJr<+nzV@npk}bhb=ZSHSLq=3uIS`@u0Uf>z@wuG2JeE<89`hBl-lO$I zRh~@UBA{+nb15ynFNKgrna2yUhx9ay{&${%6gYuUrz#z4YjHr9T;A*p?YZ1*aM_)6 zXM!}_2k{BR1R)(-*Rp;5X=qJ64U|BFT8f|4mHz&?X;_+y9JcRl=w9#q(ph=fR9uDp zv7ZMaW-+tT8v})cguqeSixJXaV-#HO;OX~ux?FZ$!J8B0&b79Ra{@!PB079lhW2jl zV9QrjT_TxmlVr=HB$$`R$3MP3NnGEjP zsGkwG-2}C>`NP|4QCTEDNHV_OVAWIu{XH#2zk2lsx9M-&#T&?glRgh>Jnlkr^wI;F zvVEIkclJu!0Yn1Yd^gjo&Em#bg%kvap6$uSfY*mLGpmWdU$VylUC;zI3f_$o9fM4@|M6N!k<;b^XVmE-@(S7@Ed{cz{6Z62KNJqGNR_ecZhRagqtl8w3{5 zrSrwt&5nZE#OL_+H$tKVlnz=f3WH3IEXWCp@{?&(oE#Z15{nKGw>rB{_SAo_!Ge-B z75`#Y(&0@tP-SAsB_rhdiDT~uX-Cx@LW)X{!S$Xj2#0Da@=_6%jDutJXDP~8iwXel z+BoUaAROG(xK58u_%A2^0gnTxx+T;*ZLG%g{cl5)!J(36V${K!`GNO1e~~M(gr^Qm$bsAO z=&A)S(^BM4uFZ*Dx{UODJL0k2%6rqO0fzBIJn2xLs&HhnJdI7bnUNDf} zmO7RlKbd19NUwSLwjDJltO`RP1)QJ*wG86f9NLDD9D$33H6c| zm1T@MqP-nDt*c_fHIX_i@y%=YH{uL`a2hAg`i`t^^ZdFSHEQfOA`=TL{p34Zzf?wH z-j5*Kn9B2Xj9}qz;uvTip<*M=5ld#ydUGnFCiC-&CcYeY|dG-Q=nj&&pcZjlxtOblU_10{~+!< zzn}3(rZy+Y%VQ7YkH2lA1vyX+d5}~xbX3vH_RPrFJnG}8SLhmK%rzUVQciMM>7RK& z?*C9eh^d<8CH^VSHh;=bwWIPor2X=Ak1VM5o^(<2#n;&fk6k*EpA}%M4qmSwsll%5 zsuU_4GiP?Fo_zYk8}q)frS%lF%(}^V5Ol=rVvMeuDL+*IgyD7+Av^UUzg|9oY za&|O+xcW;1Ngqws4U@u8YwZjG0w>4!)l+<(Tdnq{aN4cOSnF;KRZ zyOh2<+7?IQy8rs0cCVF2hi5cH>5;&vxXd#6BJAP3B?+iLjwgi^Q@T@vr40rpDvZa) z28`3g4~GW}UAi&9i`;ZFxe-U|1DPsO11p-|-ZgC6otxyil}xzp{?=@)uye}8hY#h` z^RQDsDxng4(QA7H!I%7&5 z^)gHs+XrPIFD_|Ttb7wCy1qCy{Ya+0ZaP(Pu*hztwbk!{Y2EI#mn`X;Er)boA;FyE&YvSITet{ViWX z===BTii#i4T%>VRTL?!=!*6*K8Ipe(O&fKb0Hxx$flZ?K_V{*NBwo25`^59&=5Xwp z-==NLsYmLh4kT(NkG5p$PmT|3)+@%{u#=v4sKM+S%#Z=5SLQOSn3zG(GwY-M?V6R0 zIDYfiEBPjf<1$~R1W~PeA8aHO_-IUg_L63yaXorAm{A_4Uv8U@IL3W=%zXwt22*8? zkzupLbyW6U`C~^6_4Q*jloN7_&05$*MfEi@m609Xh&=bzp*C|~)?2q8fX2C(=ta|7 z77$NJoLTY<5H(46~b&G-2DG#VNjK#EKqEMa>Tx5_Jc z;IBB(i!tsJvz5_-W1XH?&P!Xsmm7qrI~;92pB&D6<<@hWj5^apgh?2tH9BI-T8Bg*zlmZ92ZqK~Wn?p^u=@%WmWe&CNIsZFaUCQVA zD21_txKtZ@FDC~N=IU@m)aB*hw@0w+tThB(qR;VIAG0|=I-n7MUetg?v1=6=#yplZ zI0TQCsfq>?zd-NJSbAfkpkvPW@bB}?@H7h;@XduwTeGi!?a=^rWSNbI5?s<~vc_G* z-agORYk>m4KNq@zVGe^xN=mkObc7*okwwp%(BDY8t%1Iem0E>*Y)<8aF|c!SDbLQ% z@-I_^=uMi{mg;KKG<;oA=9l~ea+RaFjL0b{(oYeeX&oOo0DEZ1X8h5kN7g6D_zRaW z4@+PtQo+Ks@{pC=BIWZ9DkFgqySglnj!dJ;z*AQqEFhD(;KItyt#T38a3IayioP~hWN;5nl#mq^DCYM;A4cUgu- zMMbT7)PfU`RC(IDotCAFmb)?V7hk>{h(s6}UNZiNFY1rd5zV+{Y2`+il$J(>g}F9k zK2UKFbqP%?%22!l+vU#@)fJ{9skc^>3HOUVBTDN1UupQ|TV5Ev*Cr;=(@-8?`h1OZ1dr363z;E{QT*PQ#={# z^|(-Y^{bUPkq&)xuUw4RoJp;OatLF*Q?t;q2Ius(!p6<+VMlfkHW3j$aPX473i@Rt zXHI7M@Za3;qjtXyx*jV|Z%UPtm)}Y3K@$~-qQQ-x&#A~mhLyPSD%sQ`8w)Zu0)1Jh zphyn!CosYTP+^qzLum(b5s@*egCFVYxA3;etoc;Rs|RM=&N{ysynv3w7{AHxS2Rb> zidZWg$lhIC?bB?k5#rp5Ii52aUJicKM|g&bZW2EWkCm(lM!hF=&VcR>ZgCY&@J7#7 z%TDbNzi>e?OCpEy&D@Z#Z?Di(cP2p*#w}1S)r&v-b?&+jD<`MY%F2q1XafJeUm}VE z0salWv6@=`_d!>u1VRLB$f+`L=k~9|ThSL+UdugGxb@A(V=XV@ z?wO^Cq0DJ1|1_I}k%ii~AA2m}iEnMmn9*%1)MRJu_xZk+iSv$Bc5)y4Tqa^hV}&>w z>tj!cJSGl#++>1&_x9JppaDM~iKxw3@X73|H-Y<^7ZuugVSk+7TX~n&{PZE5Xbw?KSRE|oTM;@MeErgOjNrTm4hgDtUOseSFafP@#eXsD^_CH#y^jI`Yvcrdu{y7 zNRZ0s_;|WOe~WaRa6d&;%j!dPaFeOh$%oPHwSnFGC-zM=uQWD3TbwO=6qvax5*JxX zkI>#|DHx}<#DPZ^ygxr-0yP|;pX^uM{38rHU)&O&HhfG40rxpPG4&8XL_gAWl@!w> zF>gy#XFYTJXm{ac?pUGf`JL^C&<~K#@38z#r4IVIs)x6~NOMKWutk)Z{#_s$_|$Z5 zq>WeG(7*y}z@+ZWTSlx2FDLD0P|1IZSY_C?Ss@`VX2?Bm$1LV75tSp8=~iA>YbU38 z`sRu^*Ezpt65bdx`E;1c@ozak3e8rLny+qN-YR1uy2&TRn2MNko|g2jWR;4IB=!}* zY1#7MYseOHfsxGql$c%m3ei{p34aB;(}rLy5ca*~@o>hgltxuk-TLoVUcI>WDs%~+S=NLZeG124wt|CpPo`AeH9#M#)Y6)y!kGQ z$;@4G7MmQ*^l$Eq0YTY;wUM#0oe%KeHXth&v*IpF|MBsikImm~+?lRHvVCzWyl>yy z{=Vg_f37NJyxvrsi8;-&H|DK`;)*MIAmL?8Xm(J%F916-uE zUhc83k6s_ADr~^9UAuOz-QFNaAK0^KaW7tP^zzFGug=W={PBS(;Pva%b$erW%OGqh z##-Az6_71;Ub{sA0rF0}E{;X!Xg_~03cj_pcy8V#S|6`$Iow3_n9-7&@zdP**|Q%gR?^kI5entVQrSeI zE`TZ1iFuICwS>0pZ_fcUc}h-B4xp&c==;O~gD)0`yus`;&f{D5@)*GId7OWKzqX3l z|4C|C*ro`)@Ak)LWbql}5SUZCphJ=h^6MuT(UcUlFz6C!y zYFWcFN~z>#qS0=7`sEi+4yRAH4wm3?pPZlDn~CJ*=PPYCUT0B$ieBzp9xY`7BJ9l8 z$aFf~gW69w&}(EUHU^TAf=h4tdIJSZSAX~Y`y>0w8VV^q`nq<3;XBz6l#Ne$p0<3V z7q2Mp^*er5cQTTwUOsZ*-=$gRgKIF%Db zEh?bdD4TNq7l-SWH-w#@#=tWPT4?<6;Xe}-6YcKyO+5psmDVqJtS4&(z@pA9Ed_%a zZjUqvrl+URg7rRk=@LPG)Uq`*L`Fz2TzCqFb^$%SPC@ZTJ72%Ct?fJm14EVxLK65g zAhucXjBo=%B87f<+zs*PPQ~u>>DP>EJ$~@@i0}476)uOK_w_bS&&Wt|n5@ZI@W!BS z2?#_`XoR@0ja&_(5#SyFBnxe=$Zw$JGCUWf7&I|qNKl;R-eh8Rb#=w{bnV<*Q60&{ zs|rwq9BQ zZ{0ctBIU1NUlQNV+AE5I; zQ$r=$uvo@WXiijF8UG_Wxm2+9mWR~h71<4Y>*HtNJqnzx^)&nOo??GKOa(~f8I6GL z>nLOI^JXode(0F^z5z0kPFE*ri$v>T==#BY1*e2Kb#6eSW_Ne@+mH|e&glkUTJS#a z2C03^c%@@gM+a$faj}z!hb7SOvzHmZ=V;~f_#eOEx9$bCzCV8kf{TcWTwGj|hF6nS z@5vJunO4v~psX~x=5JBh|VF)xKK`nxm zk1_{lfsJX|nr%8o1Z4B3wpI)n7EL`UdJ_xR&$slEOon#!49PWJ1!mT^H|dm%tLqmS zEHFHr+?t<8Bk&7{oU}AiccKI-k+A0m-9N;{qZP>TKI`wmsQ{~5V!Gbf;OhfS-?yhc zGr-cGJ9mx;7(>h>weOAy{24WJ=h<&0!eV0Jzqh#q{KZmt!Yg2s4|bQXUb*rVm;l?5 z8~6XI_1tX!L@&kz_^CSl-Z&6Iz$n%b_$V#M{xrx4!e5H)3^7>uV9T!9nBTi%eseRl zDfsdoF)>;Y^5466F95&|Ftgq-cjS5tjKsjca6)X&G`{M!Ek8#}`bs6QgLI(M(S(VG#jN%7ttU!KvT#Y?kqV@ytu5QeMD;64U))VFQDEzUcHaU8D81virlwvVujFnx#@Thoi(Dt-0lPlWsFt!R=%UPUfstCF zu>{bI$Xzen0?>lMap{&?UL^Q*f|L06`uuPAEFoaie;V|5gV+3=WoPuu9?3(pz?)km z&ELq$$!B&JI;@BCVr&RA@A$yoaL&NM0KGbVxzw`j+uCU9t#ki?AKn7d8T(?i$f$Ww z!~JlqK*|<-yWuT@k+Tn`{Ox;KDxoX0=S@izyLI_lV8(?6)bwWLv>Vz6{ki7}Pi0v9 zw9xMei11gh4pH!^QHkpzK>x|A(%G61!3o|ohdlrx!RKh|&EvPMyDsbFh73oN!Vmu- zHv)cZ{f8&{56~vSZSzyny?;$#E zSLBbl&;7%6?fkrpNSeA$G4ySg?fqmGfya@LL-A49oQ0G$W-TgnHUlmx8S1tnzy37( z65*0GJDc{fsE~F|^YUJ?7mLy>aOIc$zEWq~Buj>hb9?SSGc88dac_vDV7f0qQV=9s z^7PEBQ{cZFdh+Cn^otkbW%`^KE?oEwhhMHgZp6KfNKmCZ-5CBo>IoC@c}10#a{2n@ zGiz&PK=%Oh6J%2p0Ly_qr?X-CY#ycodU%x?mh-K{A9_Ho?IOV2V3m4-d)M5YP4W

@>$E97$NcM;dNo9qyN}*JQ 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 z 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

DL%MrcH2Q0DXS|wIg)XL@Ew6w-KW+ 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⪼bXo%C@3nW>jKSA4j~#lBCZ)hSGS zU)uHihkQP18FAN^t!%5snll6SQ(EwLDjI7EB_Z}vz zv85m;zhI5XKeri*S7xr4#pEFRgi0Xqx^3!KAPU~c*(4XU%in& z@7f;q?_Gi#3b!I=`O8HwZ`k-Jvv<{&g#{;S72f9!p&&x>VP4TwVx>3`*2Gjsn=W13 zuwSQHW48@ebtPjwEvT`wpJT4#QwrjVv)5RZ;liHQjqp;{M}qXu#$ntO0?ZXue?rac z&eu4slJAZCa?ZW{Qhc?sLs* zMVuYU6lGJ2^eP-oZjY-jilS*~=gw&F8c&w6=L|gQ@2?c^ymET^S9|*Mtap{A;T|<5q11Iy8wFCuKiNGG7LVJ!SY1!&x2n9`h(ld%}XAXPhv??Yk zM6k9o>ib?160pt|bh3#qv0r9Hw$8Ag(H=e{;p5p)InvX&Y%oJ+9dE0%(WvQFKrwpg zE$K$_O?Rz)O_tAFvd$cnOR_rM#Al-5v~X0YjwXV1sbf@6OywE7xmUP%-x=f>j!~bR z6I6zG#Mw^{c_7JbdFrj9d%mgKm~*yAYa}U#zv*O~XyDwv^<1w5?q!K1rT4s(+M}iE zbD9^(QioaH%W|Bh^*8c@!kSAp-k9$c&ziYifM_FQ`%L6&;q?wVt|j}z1ha>E%hz2a zrk^-=Uf-G^_I|>48{LVkO;|anVuup-$G+Ol1`862yW{Gg8)CAO4uj{ynAY3Ek^@UL zW4NU@bD_*&Z^_tW#2@(OOPujs?KR7LRLRzprPs`E9(s37BbX88%}$;#M%Kd5QQ|hm zibZPX>%3oISZ$_hj*D>+P}e(uvDwZc;)a!zHw~%XSmJuhTw`YI@YtDD`6v>$0V=<< zyd0Cspne-EOJzl}N3J zd22y`K}VNmR8qxUkC#p`>e&BHo<)`RjBezd3K!BSb27nr=9Yc^Z|6F#6moZw+S5_g=$zC>c>q?)a?*6C_|&Fe1B_u?f((>N2_ZPuoYO4Mo!c?gXH zbM2EIfi}?{Sx@*yaW?n_hNwtgUCZJ*CMR-AFD|R-$L7xML$`(Yn0RCl?Ax$e51>g< z>6OiBdgtxzF)3YQ`I;)ZCyl3M<7(mlhU`9<32}`wu^)^-N3~_+29I@Q2q`?F4^IgA zwW%Oa=V^FeY8nlhUF*`?V%8CVl!p1XF9h;B-ldnSJ|#6U6OQ%an3>o#a$CsDXsKUX zPr#~7KlGukqQ=AfmKO}KEu5W@`qq^CRI+AGr*trNEi=5v_7@Eo#e33e4s+veF-eaX zYfnGfT+~(D{y_0g`sfhXO8>~w()9N^2&x-KsZ4DYiUQ>zeu2 zy7N5glC9Bt!CJvgjaC*HYf6SBOWecM#bIi-TYSvl)aXrf_{oeqztRkOp6txmF}@dE z&^_~D&RnvxW%2FAz=Ubb{1(GetGe>hmJDxJ1n1V>_teHjo)mEYv1$xC@Z6vlMfdPp zS%>ZU8Yl0>PugppLw%EhlMQka8>U*_zO4(5?^9*Y{CJ+|J-kpPu)#LurhZDdKkR*Y zS=?Y^@{f15HCLM>r{B^BCS!y#LA+CJbTF|cw(f} zF3X6hP-7x`pWP<1oXcx}=8HcQiAt7{zHs(!Cx6$kv#*9vFm*iSMnNd1(TZ@ zS5nx2T@jr36WpWO-X*x4D{k`9L9Cz;7hZei7!em9(Vgg@97siSDs4x1cWsE#G56AS zp|tKKkCol%=Z+Or%aY2BC=pKy*}7glouS;X{a#?W^>g!5R%>6~^l~PvynK_U*{kyC z+6UYn0UAg&Gp5P?6=T20Gp+>qTaz<)J-p?m-c_i2Ypzv_?4%f~?$#US7ThLnA@8bx zMA3A!Bz9c&SvXBEBYU@`gL6l{!kQWpak9s5#m=A9WjrR(>U3q`p{MUlrTO=*AF0jg zZcW&mvesJuj_9aV^x0(UEF=DB-e} zHH*DYk)T?h!c6OAD?_30Z29k#HR>4}I4#!wa(N0PZ=48UydGpLN+cv2LV3l+W5o{J zHhX$E3NR=sr!?o}f6`8{piPW*cJ7UtzMsBES{1Mbl$uB^=gZJ)F6?)Q!s)3NUePilL+ zgVbts^p6CQ<|l`Ox30w7_HCPY_Q|r-e{8ywq*=^f^mN(Ho@Fa#y6 zRj3%XeB)jVt@KV6op#IOJDt#BuC8(KO7)vcnRW^8uVMF#yH{+Z1XbRPiO={Viu#si|OmZ-aSfPFkjkebsvx4#jZABo^s~w^{03yJr;Yg#~7G#ZM7 zK5Z_hw7#fT=ajCF*Fd7gb>XF*&b+EvLsy`+U|f0ovOtB8ZrvU&z4jcNuBor;#WQ_& zDk-vef6LG%Q`~5=Opi|OJBiw{y7szWKfQu${Ovi9-3Sg588hyB>B?h2gtGlpbZM`2 z7werc`Qfa*;^S#>f9P8y%}dQd@+6j9MFv+x8JQKk1Tx$;^Jlc}JEG+TlrA~yICt?B zgq$>-Ze`NT9>uC0pE{(l6xo}+s=YEb*7qxMd{z7Ku5B!Bd*hVurYLsCURj>Yrp^8{ zFxGUjUJc24$Ak05wH9(U1?I{lyw65y=~DMF6iA-1=TDmnfw#Nt3~Fz;`ElEc z^6`?T&eL_RBNs!X9AAp|n_9Iz-q6&S7C9lNbZI6mr!2;>J>V+M_o$%Yt)16{y_}Z$ zRZf+CiDTkBenaN1Q-Q5A*;kiFQ7x+k$DX*3>P%i+>&y}5n`Q0zgi z!)FD@3XwFbNuPd*aXk&*74vQ*wxo%3_3psQlpwnlT;V%4VaJbdbO?;d9Z zE=sHo{Z?G->g z9(VCOs)iQ6lq7dCAS3aGam@9|#0*+8!loZ`Fy+?gXt7Rq$p+3FJhEn|Jw3Y(1X)zZe)Ggk|)8)*!PxZTk>@xO?B3$Q5Lu3Z?#RzyWbT9gow?lwU> zq*J=P8$}5L=`N)k1?f~k8YG7f>7hG@8TOjzdEa;M@B6w)|8w|o@Sx1x_jO;_ zit{|zT0O?9mC9O6M>@@xoMyvM-bT%{cwp{Y1V|0~wkN(Q8TS0A7T`$n$8m(9vU6p% zu?pf57XP;hl;}U%Lz#7%oFeSnT9X+Egy>(9?2nRPTbW(XJx`)LPeses%c7y0`X{vuWTlIh726`J91a6Z@%`y1D|l0;XG;1`jsK5CsM&`SCyKA!X?23 zbF8AdpJD}peoM0N>UUz>w3+uEB$JHD_b7&jmfG$;)#ByPG#+170O0B4meF$gIWN{% z(8!M*A?k2Ik=Q||8tO>i{@Ld*s-%Ia;S#!D~Lw}wDuzbiYzJy>L;vne(&_4ZuRx9^zF#1kRc!5>{$;!vNg50i+91>KX zdWWwq8&BKBYAQF)HQt#jshVQH_1c;QNf95278Ko0KlwTY4*;%^=Wsk}L7XR=CnDZM zHz1Q|`U%5vFA+#&0mQ2|5Tgj8Kiy4;!FvWGP`^OcN z>70s4^HP&r*{2#)GU4CNSAOszn!z<|pSVRHzwk3zd8@!UaytvhiW`f6UT_HF$yswb zL~23mGkFEVJfx=B70YQIk{N;AF|imi%@rL-F65ewK_`x}X!!Bdg zWKoe}SreB}MrNL*Q3E4l zdE{EPoP_ca~&_~I3?KI=uD5(mh9PI_LNz0R#}>I*&*LdhKR58XP+NwG5C15g^ z+1lAC0WxSwKJ+wZ@4KeAS{XGaC^6(Tx6tC=FzYjbA|yR0Esx>M0ur?HgP|HGaP9O3 zAmgZN?NRrGk^S;_1MR8GUlmQV9$F2C5inxC0^iDO#6I?x$jQef-qw-x#m1*4_}a^s zwDZ$p;}~opQ;bP!s*TE5$^&&mdq;<&l2T^D-%acM|ko#%jrD}q=$4CUi(mvaQc&mwfG$Pbx zyr+olc0pVD^?U?s?->Iw?05jT3J`Ug1useT_WF^6SMaxo`nmTJQqTE~dw=0pxwY32 zbkBz5l+(BN%qHglP0I6lh1&juqQ;Re8bCzy3*7!ElZu-Kksl1$EQIzABRMZtA zKM(w^w<{$>QR`$+Qmy*|uj;~POP%}x-s`vTI*Vs_f3SzI^YuF59bKx0A$kWcSH z!@iVnF6*PE5}6op6O^!cYe<0R3`uEPKV4T8VFds0RDu|*2 z1UNG;B&5vCartk;{(_T9F2t@u?U&%5382f?85f5k(=JcL$LHZby?37BT5&hKyOvY6 zjpz%|b|min&MG)Rv+zLdqf~bvka=e68u7MQ zCFWL^a}DuGmfq%7VSQ#P6KdW{$?UkM3ow7=#6=Nf*(`rPgi{AbfpPps*33kzDOvzH zD;du!$&1&G7^*+3NQcM2KQtY0C>sNo0YBT4`gGvLC%7?%6@v#uLN96aqZPaE# z7gDU*1PO3F^lJwb4c&y9#fYI%0hI~VOdfA|ol3lg=kIGUe5kU}CHxWIBpT7A>y z1)ptOyIu#MG>56B^?eiJV}p`9b@H^xhv(V&cmnHuGolG6fjWVB|D99g?M5P82@l zgsm(Q?*|Z%D5fm2ND+@o=)9dQtLq}{-~{rP^U7vlJsgr8kP6J?pDhi%)F)An4?N(M zSj-ymYI60CGc9YU(#~ed`!wXdGgkh&)#SwIotL-FP{=6Nyr?+k^bS`J1Ut88ddQ;H zP!RPPwHVOA1A2)4sBg9|z%apP%iM@=S&~&N?4*eR*gqRiWx+x)iR=+<XwHB;%^z4jYY`%W*kM;{9c)fFyYRh$3!RE*Lr=#L)26Q=rc+7d zRVoh@R@&hJDbY1)@y^zM81$i-6#wDTgC=Dgx)I`?@dNrt^okL0C>%`hreYK7ql7{6 zwodHIyvWEEO@`Th^K)|puPW_e^6P{rYK@px_dU7u^ck_f77DL?KXTVs?1r7PCMG%L zE^{|0To#j{h$$A@T78F-9*`r_ad0TWKe#`C9S3J|cx9>x`&s9Yt5#rLC*y0Sf&2%J zM#bI2kU==E9r_&EGGi=lZCq~*wtnHd&P2a8y|Z2vl=zISjUjwwBwK0bOgNPnMLBWD z))q&e#fwngKmF8VQtv#lC;a{tlFlwsn&mpx?z_mHA(ov2;lcb6RxFC4A{;aZ!ClB6ys%SWa(Iy9sPk8l+s;ET! z?((|=(>r%R=N*?v>sQ~~T-#u^C(apwStJErll!_*KRR9G8qcp}h#J$_!&_3<1BbRd}u*0-- zBjQLMt84%Y@A%E1OM6ycw&lqEPuC+tvQ+b&Xpm!5dbgKevxgXu`9HC6-f)B+(cUST z3#cDfe*$bqZ;kLi;?fd7FR#fm$t*}$6jD&aQG@gbi-acgkqMxg&7}-+hYwQ(l#T&* z&<3XFDb}3bTqxpY4vHvg`wXiyn0|2AY@uk3Q%6DhJjzwp1X)Spbs`7l09fmVt~E;W zP$JZ{4};3M3}~v64ectR_Cfj8EC00?cLGbXi#XFM1Ent6btgSh^o)737w>Y9#{<F6l^ta>_m9dw(JSF6?nz#b3+h$ zQn8bLd{~^>vE1u3q)0DC&n+Y0THL<*$8FMTY@cUr0;kY00-jc+KFLc8B4ifiq-z4P zS{AMp_{w``giK-}i72c0qT0yD@-CG%Sfz-~Vy0Tv(dWAS)v=UrD}Q<|OG7vDuFNl< zqbZRYzurz_7cd+?A`hfyWNoFI0wbRHyD$?Mvl#n)`tK^Li*$amrx$>P$OQru)!n^5 zvg2(8S$H~DA;L9tMy;A(Oq+SaWF=o2#Mb@m6oslCy5B8jighDOzPotkVwHVwBh72= zPB%?=@~bTNBhIU1Gh17B{*>M07oz7(^o#DsS39N%sedi_wb;|8QW(X53v1SZfGh-} z!sDBB0vIE?56$v=aGxdU(vse2&sIeLASO9u`{=A!Ezga?-!h;U%V(|k#iYwr-cWgb z7dp|rDuM~HHd!v{Jwz!OnpYC3<7c&p9o=c!Wxo0;I=R1i(;iiF z>aptMP>{tEB3iUufECTGC*p0}vZoBeYEP1Tt&=Ra?``cJmdI#TCaikw=xMTlE^z;} zTrVN-Pl0O=#;@Dx+-^@QNX)24Y`v5wGEpt-bHx4BhI7khHYGE`%=CW1cmnj7Fw2)8=-A7-Figt{QRBpGJpFa;Gb(j0|uj*2X zkC7kL&GGY@>FJbXE>q+H%njnjJcHPJK|C2bF_)wrJ3I6aZF_HhkgV0T#Z@7S?sjF6 zJVR~^%;)C?0gc2E{t#l1f$aNORPUoid#Qf^8MpSN-0!iyQa;_z&~|*_3CJ~jo$6a2 zm4BZ5?)f~?Geuw+!&m$z#j@xG?|~Tq^~}6Os(q}K9K(xU*rnF{%iPQ0c#|=!PGCvm zYju@_mn~iAjpCAmO^N@|DwoK4trj~Bj}2|lesPGvsTH<)4|1JPO6J1pVjIju{0DgD zA(6Qf&Y>ZN)fGu~DhhV*J*zXH@;UQ}?jTy|eSg9~(Aol8#?H^rXF!h!By<%24Q1MKwyO&AN|dy;ITr634YU-V3yT%+;ZnrWSvi$V zR$5hzn^letbadrodBMforrR-j9A+cZdx4gzz~1D_j9GW7)M)aaZzevPd#qZZIAjJ@X(Q=(F}QtS9Wa>hm>nQ z;+2BViuhfs)#V~MXnn8eiG}_*w6T&*YyffUSt|}SSNm9_;zfKTY@kG5T^0f`=Bwrl zkgCcMJ$hHNh{Rafqx_{!r`Iwml-J}8wZ4#76uSj4i|m_H$~cu^p?MJ8Vk3M`+)-r4 z*o7g!DWP5+*R?{*@N^Jl?WM@XB=xyYaOWlnOlX+aoX+8)Ilr5wKfaq+hq3T`@Z7^e zwdbx;z5rG}Ns&yFCsD;6(QG=nZQ&Og8CK*d<-=hjDMK$Q$N`nbP~Wa8u<^;$HBj8DA%lUF&+8Nru_)HW(I%FIop3Vo*9rpAi#*%TV5Zoc z0`yAem%3xbpx_-17o9iot85H*nA0d=AE$&kMG)HK(r1L$`9i}P@wo{#C#yfyc{#3L zrpQJ)y+3qW0>PgQio0ow^=SX;anBxlfKA{D|1A4=Pp4u4dNl<<7od;e@ZsvN3m4l)jDAoPWNvY^D#=%cZVx1Y|0lPV_7B`3J38VNn+ifBuv8Py*2?2vu8VgN4KOcNR5E8I*o>EAjI4cQiM@G%QhtKTzq%7AFZc75hdUNx=@n z>K%sf|NklXYIt#TKp{NlDS$7p=*k`$C}VT~1{WrQuV?;oAK8BY6Q428z6L${<)QK= zaq$*g@e<MVZ2)l=U|jyS3_2iI4klqCSMkXy;~w z;(YTVdrzx9T%WbZe~aMgbMSy_{v{m6#g;o)QQw zWW^xAl>P~7eQb6Xo}SfmfW;sadyj;Vmf1XZ#-us%_6CcJCY*no^p{*6T*1gti@jba z%fu=^5^2;@2z<<#@@Q7hsT~rmQrqSDnKC4 z!#q?3_>#=zZRc4$`N+O^}Cs>n6mjnYg{PJP}T16tR`~cqe6* z5Mwn@?#7}W?y2!@k>c_apuDZkBd^Xwk&*Qi$c%j*HYRAy3_?yytq@C~r=}9?n5q(k zqZFQwji(yK*dycI6f)-TTme-p=o;fWGP6L5NhJoku&cq4DFm0VEp-Ci1vLlrb#Mi( z6`l5s2eXF^>QA~%rBcdOfzGN$HC)0&-nRMaKsL%Lk4>+0R6nSFr&QWF`K|^0a6FI2 zx9D14El;h&@N{f2GBYj(xin>9b1Ec}RaW)~raPxgFXE)pg<7Yc?84(W-8317gxSD))>?NwfmR#8ci5Ge0^7G^ z^eF}%4C?Eiv72xwb)qJR0g-t=g?KsGEHW6vxNP!YZMHF*@aQ{5Y1&Nxko||7totnJI33fnWlwj$so0)+={D$mYtQ(|Nu;IxC!^<2fnL6^^Aw5BE2 z*JHMi+(#^$Hcs9yy>g%o?9J%im`wi3*t`!bdemZ95iNf~P_fBb$pyqY>Uq9^*C74` zUtI0LhX0l>pkr>L%Ke`D4D3UDJHt>JI)`(}tj{gbe$)EXN$ogt+&A*!k?Y!6sp$mO z6Y@f)(Hdb8M01J0q@KTWbyo=h7Swl(hwla`=~aMKD(%K16Ij?on{na`Kq+88UO$z~ z!KymH^>_lfk~WwroT&J@MHnN6(X!0V{%Q=Djz*svJ6jqTKexM?Cr4w3V%}gjkPyim(wbU~Ih8Mtu?y`C*2?fthD#O#c>$LN%JjZfC zcjBA!A@KJlaxg4`}Xg z_ciE(&vnx7GKXxdr7RFwQHg;Hn*K3U9&5eKf>m!P^_YPp>+}|y^Pl1uqFo2MO4vGT)D8^C){I6BQMT3Pngy$)1^FBdT?uNL3-NIk?;iNJ z(-*hXkA3Yt!QhBqR*+;YIM~@*>g`P2aPQ%rvfJF^O*u;Li8~1C)fl0kQ?@{at`|5T zl~A1FaZX?G^HIKQb^gtt-C^`*EVj7nA>t8gpPQ5KV&>sA!vL~a6B@mUcfc!w#j^Lm9#U_V9dqN|I*3K(P`htA%6;(z4u!U&Kn>Cw=yw+9*!-0o^$lbwV$E@7kvf{br%l2ku z-WkR5bDd{}rYb1Bl~08dSv|(&ElOFDy&tI37k8$t4mQUle~=2Pv2$@>UvKTa9Cq*8 zbp>?`QbDD2zq40xp>OfcO6$mg8von^E<>+7&3zP}nVs_7yjD5+nO~dU75T-rN;8hs zaDOlcj_sCj=^vYD7ShX;P{ARWlDr+I<}V!X){Uy?rX;~3j38)qdw=G} zO{9#R)Q880O54jh;K%!yU!7p73_;L{B+xe{3JVk<{s*tV1f! z&wFMezSR-u+;K%ObLx3BN2=i%&a#P|V+V7w@}V>P6>e6#(Hqb@Tj2CnHr3<>ovbLz{L{jKE#6i$Vkh78{Y z?)fZSlYM;`htfOVl?TE4TfXQQX!poQ(VbzBM-dZ#Y+{l&UXwABo0YmFb?@>~*gT;A_ey z^HV+g!{|IX^vCM4a1l+grMjYG`6FY4wL|pX@lM*7qk)UrBlhuu{{F2g-g$w5-~5ne z=f^aaq<7z?C^K7j`%%{T#nI4nk1pahC?P!iza4Vg%sBDidc>4B(p{;&p+EU?!XcU& zP5J4jU?bAqkRw^XuYYToK%01MUDD=2%7=euS&93Tl@dSeVj-)b@%rMAV?nVKcdD58 zX)aA!&zT~a zRRcM^=oFW=^_v15R*Z0H+0X@wH3!q$tDG!7O@<|MhB;L1MejGtC=B;c%Meh1!a=bWpV|wyEtZ!u0)}CcH{JiylPin zlld=vs?qw1yKz;O%{;Zb)VF3c#Z zy(STtfy_t8X(mdO^dC7_4E)M!$;rna1|KkP>NS_l-N)ZomP~pXNMS@CVap!|p z2S>GzjmO?{SbEqH#kn-=&)u0dw&q#cBE(+LRng1nz()@{DTWXO74FE!V6Y#La|)7N za@$Uii6eT$l)7qcSb2*X3u%_8a^42|U8j_CIiN_3J4V`aZAi_WPHHx;x`~b&i6?c( zCk4EaOj160)}lXG;8yr6YoF2pU&?=O=3uDU(&^SiLr-y)P(o2VsI_todaL>D-e49d zNos`4Oh3iajqykvE9JhBJ9;_!zkZzI`!LjrOmVTJ!mlgwjm&>`p-1J(D{sQM%4UrT z_8_lG-d*L8thS|A4?E@F&avR{qwz^+vZNmcVJS@B|7!B1{qw!EM%P#HvzJJWsoIY*oxRCiH$=L*{h_^o`oJw7EV!?xxS4OcA zfX~HY>PAXxYB*PJGSg_$Sp9XoIe|z6bwkU0s)-Fqe3)7a7V z0x@)Ekuw>bI}2(u3`W{b8(V*NOE5e+nEAF}{Jh|7Z7k~-<};;)-mI5ZN%IQUjwK8u z!g^9jdkUWO_Yag@4p=^_h)*IS9EoO5soV;}mnOh&?+9W73aznvLA~R$=KjGC=|N|8 zZxw%4P)aH5iOIzKqWGCGx}AQXMt_XrD__1S!+Lcgw`a1{D`CgPPn4c`zYsC<8i#`m zDQiVus!FuKTY{NpI3t{+%?sn2PkT(B-y17p6iIt1cd>7&{|oP|Dec$9+;3~$bIm5t zo&OBI{eIO_+}!s17(Qw98|yber=|B7&s|%(CAo5+;=0jXiKo*ogJ|(WAG-l;a(G=7$e3j{7*Z>gUc8tqE~Q@IbeVT4 zZz7{)p#f4@$0OnmG9`9I)W44z!}fQRspS6GMlt>eGn@vpBj zXQ+2y{{5ENuS~e&OW=_H`O>%$`5SAX{_(23_UPYUl6BvW0VBHh-uwO>_iM++UB`8> z7t%`2G~6RW385(?Hymzl~-?dUcek_Sg3HK8q(be|)UyD-qQn-%$ z6}8jUJ!OoPG(GeF)s1j8}sjF;-81q_tZ~&7%j%!5Hh(w6S461PnJ*p zQ5|}6^q6wi_+z85J~@?UjB`897M9A_l2Z*X>6N2hqBe&< ziqO|kzMGz|FVOFE~8^h%=y9d+F##W%rJR=>FVx<>CIjNOzEL09NR~azfI3C zJcHA-UjK#rL-XBr&m9uClv8InPV9eO2~{OWUHr&`*@6tYbVI`JM)lVf`)xhEN-FJS z%1-lbV}<9YF}zb-QUjC_p&lK7NWl53X5oH}7OES+E&5DE=)%Q|KXGeaU{gaKNKXaE zMuw?S**0s`bQTSuJdhrr=5Fh<@%3^Fc)Jy@y-eBfIs>Kav2Kg`XWy)Qq^ZCo(~41|d_@~u!|4OFEH;iXR(zyJ|= z@B~^G;6g|$DXv5*{pmt(Zh^xnjnQ4~Godn^i_q5ignOf}GcchD*)(@kb8SsJ(u@?W z-CZfcBinw@$5DgV*6;q@d0qIkYgO`@s}OkGD-AUlPk(Nb>)`BGF4mJWJT?H|BOqjh zV_}&RSjxp)N6A;YU^!Cu)_rTh*^oI$s@1E!BzKPDuQ4}@p{{8%5@39wehMHD2-m^o}V;x8`GPqNo8}D z@}lq-wOW?3e|9%PSN`5uIo@fFUAA=JlnP80hy61PQ;+qb{UnU2!#1*vkP#AtChlu% z(9&%fT4TMLY zASNUoN~6fOmIby`Hr6^e5_ZT|4ya})o0>w`zhDjPdLt33P`qDOLV)xa%zhc=nPhuB z{Lgy++DQ)jgpn+>6P%Iixz={9gQ^SD)(a!TGR(uRB@|WQiPV;uaIw|$WpKAwTo8uyPAdM9lWDJUrR*E+CYaKQUAYHG0e>0IWC z8*h{%r?5!=;qv|0nA*ewREVscrj#)|GbC04ypaJBKb{~qaU@Girac5Zu`6cg{3I!E z>w0ja{*-J!W^c$jv$pCTtowKT{S5UL!zL{ z2$&fGqZqEkgHD6yq%gfZuX`IB=ff}^5!61XQ#r89>lL%th0wdNCp``{C20uo1$S>i zL9Y)TJn;H>!zJw(N_oKttzx+> zj(9u$Bf6rdsj;X7qo6NS9uzp6(}#6I7N5C{4Wgo2Xs^G4Q>37%zH;u!mwmiDAyKs< z)q%4lSY-FwY?qq|7>ICf4G|kvYDTmGaVdr%obAdX(l1^uk9PgqqsMecs|10(uB$v& zOcNrf{?QI~c8FMV0gf*eW3&C0^G6wQ`ffyoHcuCR`41EObOH%*RC5oA`^y=Hn=`(d zqI3!=hLd6WZ`_)0Q=E9FT35Pm7sdDC_}grf3E%;6>@$jU<69Pr^xWL}rp)=9AUhj0 z*;x3~nHyu(jA-mkkBQ!TtwF4QKyl`H(8MW|XFo9O7yC>l^(tTN)1v*ikY?RO6?125 z2LoU*p33&IgPtceyiu@3IV@iDmE^O#f@9~mi+ViInbPDxPIkb>Ocp9AsY0v`=e<+8 zNBYfhV@fD&X#eCHEY^Xv@c9xJu;;70_fPaFIYqwzV0NQuaVHq%;?c$>vR{a56l160 z7V@$c@YIrmcx~kznry=B6n%I!C}~|aAFX}}BwuS+S2Ln~;bKNG2{)VZ@B3~jxin<7 zkLyC5QN?yUgP5dbK6?o^a+%Y3^u_C@OH~!iS34FQMzr8+%HrLqzMnll{~7*4TzfsD zgup2%-(+KM_>hDN*y0gw88U|t9(Tjb6Ns$1cX&5eCetI(!NKNcQ>Q;PpQ~0_Qb5*4 zQlVo0nw`rtD@aPG>l*q$0|_$!evGdy9)Q@(1*wx{_*&fs+NhH&f*J^9r zD41_Si>?}2OSiT&=OF5=S{4pnW6fsuWIR7gJS@*%eP@A+Pr6)F%JDJrXP;{aVD)YP zKxjw`SH0`Y8E`~sao2njv^Kw;8032*j|mF`OJ%D6$#^)g21q3RSD*$->2+-mJ(>;fICHSF zdcL_hBua}gJ6LT=IMmSwF%8qWm!{Q8tp+wQ0RyAJEvwX2z=g>R2q80_t&hjq9GJQ) zjb7g>{?+_#OVl=Q@5hDDndZL%3YsH~*%@z1FgyM}((R@peUdHb(H=tBoN;IIc3z6L zK}@I!+JAa+IhSDjmJZ86{RLh*AzBzW*ViXsSn=ly$^{La@o(rOErdDLJ3*tN`5^RP zl~+{E_;DNJJ8h}U=&9bY#0Qz5*1HFKC(byVEjxnWeZWUafK$@Z*7({qN1*HFOLULB zKtkwi6>&(La9XZNj1Z;BWl6<+#X+s$*Nr`oVev`~{&YJ!(yr$FyStv`!D{uj^-8oT z^>2IkCw?Z#DVXZ$Np^kEUR1&?a&Y|<0$4EmHxK|KZt(A9BRWNy;McB2qq6WxXRr_d zD6Q^EUytagGc2j1_achcKXzTPVhlW1T-mh|c8M`IRgxmDX5}N2csU!MaZ&<* z?mcvIhi2wDqchy?Z@`8FoGos1{1#xebfp7Hytg4A4|x7iVJQo0<^`;)MvF)#IJ!GQxL)4uFz^U*T>-_m+W==EFsE=*{-{;4fyun{! zMzdaLQ$WB_fUsQX3KKZ&CWad!63{zCc}7cr;jW!S4-3X+Q5NT?PfdVCn@+RLMP7G~ zl+0v9=qgP5|3Ea*l`6q|zu&(i_q1YMainF{UC4TW-o=I^E7r%P<=!y$dpQqNa0^ZT*xEWCmeU96i`ROEWVUpg1jQkZw} zWW0pvH+AgLQz6psRwMK}Rr}*8jX}o9^C22`qhrz7WOVK)D-qe&7R#)=Z`E1}jby9HCCDxV1fML-X(xTDu^YV>9j@$iJgCW1{cz0#X5H-&d~cOk0Umtb|H4X~e+ zdv5P(tw>agCMsGT-FfUt!;;kg=(B{zCi}%C1QZs?Oxheb?0GDWaNRIUdx(lC8PVpi z)K>{n8g~NQ1;^iWm51#4NyX{$Rq_^B(#|r_v`DB8)oC)u9xA&|zuii`7 zbjZTI96CC>-4&>wJz})-%wj%MsH|Wx++F zlotiPvFRBY0;Ie2pR`OF8n%7Va)NHjkTE9_J;3{Vd;Z4VyP0oqK$_B&u`nm+Q1is5 zpw;RIw8yFl&CY%VladPF-hsdME^8taDiYX;u4p`W&*EON2n;i3jgyR(qzMvv2-kD( zns1=v!FaPqx#2%^{1b8L;SMuh{?0M$FAx4R+dqo(#iuBI3LhFa74)xvj!l98J4oPv zFAe{%u?T76cgFyw5T6UXkRGEh7Q&zZ_cEME9X%?%Bd5UtVWrm-@g?qtxtXk|H%y+~ z__wgjN3)l=5l}awF;uqHa&RGM?i2P7{(k-6#zihQ=3PGbsW z6-21iP~M3e1ZbwmO}%cCxTiA#HM3@TVLELi)u9iIUun?5=RT zj@AqPTCj&Q2R{wfzqkgGlAYzjKO4bYYxKwCa{%D*gH-gs@8qd%1XR)b*VlUD!K z#pzSa)sD%g$7N0AUjo`%0lwVP<*5wjJh}xHyn@L`a3r+6vk4rhrvhkyy zrAG7~j>q~DGXzm_d{z7*GNexu#ujx8q&`{sOVa>6h9%Ij*^Zm)?Yz`mt(^>+={09% zxCvcLuj(#Hg*mK0;?b-T%vI)5KC!5)oiJL_J2Llpj6*UN+sP1Ez70?k-#OH`?Tmyo zDiHt6cvRf=~_(di$~Z~AQ6|TrTzZuXM*yR_{1b* zB>VR3pgN-j|JpP&Gj2RcQFPgie2C2@Lj zpZM2$+MJOOCr0y3koy;F=?YbUeowSf_+?!FLqgzXZ>)r1yI?C)m7bN4IJVrDaOwpa zUlv-Ua_vTnRS@-WL{h5!)sAv`O2=SwivVMSi~s(vFQ0Y?l6i4J7fuTTG3)j#c- zA$&-p)b>v;KuUs?v?QsTU0AWZSq(aRM#}B=qY{NbbH+eJRP%Y%0n~85r6b_d*2ALg zAl{BLV02>b_-L>;(u)QR5uEKo&XO|W{G?jJDw!2m3%e`gpi)SM1@@`-{mnES<0ES8 zvOe48UT1U4+Y-885!z4d2-*kVJc%xFPDVmA$QB;THK*5$}uqh+u+<7HXSTNS#8$<>eh^hpQPL658^1 zS4KRijnm3ZUi4U#l1@jIy5*FOs(kmPh;Bz-2(bd0Lqf9l&z}ycR=P*Pif}`2g~f$P zQjWqC-^t?$p*@+c7$>9wpQcHBD7-2$AJtPnw89LDh$L-kQy2d~^QLU(v$~7aXsbStx?f0ORKYhbhra9AqTFTq=2PxP9fR`16Ha#Gxe0cGW{-yFFH=JKk!j$^S7=_D>_c`O<} zM5PqXf(__~(4vntB0ROCwPJUh^XR(xA|9@|80+tY}kr!Opq6QF0neKi)=?uE*7Wgw`7X znlFtoZ3b2u_Be=&ZSefyH3{D(^1Ww0qc<8ID3jqO@-9gCj&;f zxJNy9Z=~8%w>B<>Bt@8)98d!A53mD2##cC7iyBJ%H@&g`49NJ>w^R{}*C533J-DRT z)%^k%uJz}J9_u~QSbP%6t(2(hGfOvCTViBFT6(7&3Ya~b z*GI*~Xlu}W*Rl3#tS@H1XDSF7d^iI~^-e>ZZ3k{gC{Dr4o3?`#Utnchi2&YtJ8T{r zu4wEvHIQ~W>DkHZ#sQ5!uB@Vk!89(#APR$-BXupi`T#3m`3oFzl43ElXB(y{B#DqE zxP4$s_yVjo4zQy0A7s36?sKtLOFx^MTWunHSUpH;E{c0ubZ4!jFej;td}&ss-v4fX zj#Lo0$keBnz=affOi=f`=R+ z)xO{y_hEN@7AI(x%y&e=E`T@FYRnaQo%fG%u9LTApvkNd)yc=a^Ra)2-$sE5&U1vm z;I{ZD<9>BNCz3=T*j~?^-wr8PE?KQiK#qr-aS>HoILEk7ZH#a&rJBbSRUduFpJXGJ zQPQw=6e#yIOUjPIr=?gm$SXLoLt^-NG!FS<%df9=VgU{OZ#h^M2iP5W1o!%C6>G}| zhawE@q$8J(GN%4Mml{Z#>&u-rcd9|$(vTJqu!YP2Rfw-rtJ+9-vI!q0zh!GTgIRH% z-I#BG$H}_tFH=O|mt=O$1?dzLqsU>JFdH(*1{}>3sgchhhG}JHTC5B)6R%X@-u<0z zXaAtAKxn=t@K4`I?K^?mBh=|~!VeBzhNP^gI5RJHp#@axX#-M1=EAKxLJkM?^2Z{Y zGP!AH=bZO*b3OPuvYvmXxF~Oj6Km^Ge${sJUJ@yZJ6dAq>EyNA2l0z|r_>W8D9<1#|pjIjQsHR@pD|%KK=it5zZ}vV{R_kGX4c=8gGO*}WuW zN;f$2pYp1~8O5VorjHsr?l5!5z$V9r8p033v;-}y+hzR$^y!bQ_ydfBFa__027huL z$+{|rhi>J7rJN`i^tViydnKv4Ev`T$|F}N(n zLZg(EQM}IOT7eT9=9Kuc-4sIox~U}RQHx`P$K=!V;th08=YiVlBlnpUO1-M7b~O7( z!>N0aIfXVfQnjH~tH4F?crgEX@x@&MS1GBQBxUn@A>$za!a^5g8@RdJQEq{-3<--G z4a=NjZA24|QADhq9m47bgBPS5s92FC`4%sA4K*~zv`A6BouSfA10Pj4Z$zf)7Kd-0*GuZ>i_qx-HVhhN`z#nDm5?%MFXc6tWC zKHE0B#|9&I1lVXTj$3qln&0eI8@>K!(E0c0oWtVOI|l_D4;Pc3V?PTUY=Lyl-%l7q zrYHGO1#7=N*L$OY-!<(-J>6K&0;Dx0=98o&Z#CRko(jr6(TMl{^Pz`^HwwY39FI`Z9>E0@_ zw$7$&vE@p7hGw}(3XH4(2IC6+#n#C2Ff{tPYxTVA+IB@GsnUskCc{xU2Xi5UBDfGRwJ#C?T-FP!Om?52&s!`o$D@A<~f*B-y%0QYCk ze)jLg9#_=`a(QrjU^!{Qc=NXaf#vH zIOA;`!nCa#6a}zK$(Ee>q?X`y{bf%tjCDae$x!|NO-}Z&v560Gha=1a#BNw5=>;YT z&{dGw@sP-9^BD}KGZ6K%Ujqm-bq@v1y{_a`S-opg(UjmjhEWdOix-Qpii5!DhPz-q z2eKMEDAd>@tlyypM;z}5!y0VPS>Ude@~hY2ZT>r0EP;b!DDBRHCW1t`hbEnZU%KUn zFld+#c-Ln4aL3raeyM;2SK3gE6;KIz1-0(qU^qx`*$i#q|0hx#UJI9$3(V*6t{*zb zn*6an9v(Mm+dhhzt#mLpig)FrWQEp?CG4{g#kvmT+7Qs?eOdF2no?(HK$TSFywIQ^Q2j@>oHdD+UVW@2uwKM{byj?P<`8VjU@+K z8XDd0&Hgx>jv8?==bSIfNEEg$(@MJ4tEa3piLV&Wr22e-~Pmp%X>3IG^&^*`5Bl#`t# z#&ymHaRDd?HClkq0Z%HDb`vP_YZn?{x?mQYwaUfUTVH;26+LSgy>>q}iUNcP`=ssZ z*#qwqM&jxb(KSb<*!Ug<3*VUONMyJP2nvzeXZ|JB2@@8e-knc19{U*+YDm5+)tWgV z|MYbT4OW`qf!L#Y{2NtsjPZ1O0QvlP(36!oUHdg*-sk-<;ZG|?@~vZAx!n+Bu~Yv9 zCh@7MdfPFg7?g9Y*x{}a**P$sf4`2N_dd7ze=i^Uud%`gvFCrC)$PSHs3ZqS;}#Cw zDv5SVkSGBGPLD@%90*;kxfA@8{|9q#0aaz&t&J`~Kt)AFK%^`{q(MMfl%gO?s7Ogm zcXx^c(jwg`2rAv((k0#9-3^N~7y9n~eP{1~pMRWl#u?`sLxu{hwVvm`?-|#1%{iSz zanOA1<0YMC?uCiGnGw?R|ldHjUKv#cNH<4N?Oe4X%<%&_? z%6!UEv*>pST2VBsI$E%`I1by|Z3LgODP&!Izx^w5>Nn4C50XUXCqM}8SOPgQQ%Y3) zQM|QMFSmogfNocLF!JWGkfqBh{w?{O904dhDnN5p;adL;LW%YLNTdv>MZ zybI)Wei|g0YmF1B2r=^Om7hT|-A>qxCLRzaWg3x}KBHIUNcSItcH#yXrbLFc`Hecz|r@nbR;lS;Wbyo70Fh#8WxcE_|XH zrsM+@7*>Xk5`%Y7P0u|2Dc^ceG0KweHu^4|`Mq3Ew{C);f`_G6WyCe;&O&pmtGtyh z@*-N)1W7VFBLdY@4d8c#RB1^WeQ%i~&F}fs&>(yy{C3((hFfxvqYaFYYpm0kt~@#% zOXNA-vA1&n%H{%iz&KNqk9q*ULe0rt+?o~TdIeq=5yn}B?7gHTqUCh1?m0bEeGyiP zBKR6=`tmdJf$ze(o=l9r$Y!{m9yTWw9ua-Y5jwx|`taxT#^~P~gt~)xAdY@)7RLU= z_HFL;BA+%ejSYUUw$vJkP4}RAys>7lFQ1R}Bw!Z+xvh6RcMZ81vbKWhrq4p>8{DU- z{v&AXh2rUH{!v$np*2F@KQ_C{zeiH^0Y*~G5i~jNh110s5lk&QRrWX@SL`&$vWD<4 zM+Sz=HqVs)xEdV7o+EON(Btvk7<&2YW4R>qm0W(@=Zw6V-2F^inkYCp_;HdJTim2E zyFSR7{-`ELV^<#A7@&B{`mTy33o@5EPje!K`HMaY>Dnp^WblFTwE*=-LS4E`Z6!MU zJX+C|_${`M%1VXtR9HD52d3)ukbdV;UQ6=%3-ceb8h9cdlx;^CO+C)B46t1HeSk!& zvxT#Si=o+&s3?|e7al}?U$!C0JARw0KyBUH8RX2Yy*YCA&>k0e&CL9Zz70EN%x_8j z^#dXvFF_OUD!R2(x6ax9HYJ_UO4Z|R6d+;z3Xon?kM zIUlibFMW!PY%*`-tAkUFQ^UE zQYQBwC|((qHB2oejn5p+KH87W958rr{X+R7CrR*|yZ3TUKoq57#8WYJD8g2tKWEHO znPhI6ZnEQS!iAuTM53_Qvz{^t5!+jfUCfFfx`%l5hJe5ZmY{iyq((Q%v7- zM$*B2;TZdsn=q=hKU;fpZmzy~wXErQceD*uQfL(~m~|LbZB#Ih!^_9lP+vc`oIg6# zE<&Y=I@(8|=fRqcSMeOeC~t==SFY&5{YAG49L(MJ5sp80gw{6_Xz48a3V0rtP{gU{?2u|xUJN_iTImXx^J zN;r1pp2o6r1ec|D?FT2cyak{vCma3qX-vYWl!P_)#KK#Rj*Qm(uWfXP0=*Z5hqzz5 zYb$Cfya67$N&GPLwG2Cea&3}@=ee@k5p_)ryvOY{JxeL_b*a_2p0?4=G__bZ9Ymqo z-4dtWvuvBs`pw+t)ageKQ29Xnf}k1pI8DXl_NI_z@5#ObITqLTBHq;iYEC6Nc;!SDR3) z=y}2yuHT<4862`wXxYz#Er=5;D=nP~W17+3v0!Zd`3g8;@^EHgr20jgt)`|X`En<| zY^|1CY*~r?Ys1!~EkM)DmDsR?K<-8S0HS1PK;P#&hnEPIW7o*Z5B5DqV!T*q6u0%T zC5e#x1q?l>yVqFXo=KKXpBd0khb|ZHFxP#f6}kGm#MT^vepmNP6pbN_3fFjTSl|c@ zK|7KiCvbCj>FCD4g(|~te9Lmp#M(NYy{W9EBnnh}Fzq(TPW^YHI2n-AsQ(Ba3&rNX z6p(}k#$(8aMkK&EJI}-zam3y9?-L;;q3i1dr9p4*k#=#MiEOF;YMD8-)0Y0@XC5Y6 z`HaTU^Hu~NJ+b8Y(ozEC2<^-Z8U(0QfOGucp&p)#Ppqu(_GUZi^MWAX#}8*Fb*P5x zrAMo-fUFVn*DRU(xh>12?_E_Jskk6K3U%C1IWd}Aq|)zEv$A@NYUGcUVf=tJGho9`a|NlCGYN>8e1#u);oZILk4m4T7!Hbw3XmiqS zNW>aCp5a=8f~8___A*NG2cIIU2|*~An*J5!qT5Ze5XRNEC7+YWrY_06<3+XeZ2|vh zrn9vKde(e~)$*J3czBs_QXLML^Fe59w`;WL5wNhJmm)*2m0j36tCbxNldXmGp|i!Vm3C+YW*k_jQcry6|12aM>w12`AAN~4$nL200=HK z&&~_ScnKK^Q8(H76AMyYL0Aa6Brm(|WlC|q&$TMXzO?+?*C79pDY0P(pbH`@_AwNG ze{59CLi9PbCIq$J?~efZ<6rAZ`S4w=Ls!2xzY--34B$u?y9Hun{BrLZ0CiPC|CIMD zkuAeK!?75M1hf!ZO2j(p=RhOqM`R2IE~uts$AT*Oy9jY~C#tCMLH5G5!umD~`}{Y} zqpP8{fY-Y?0f(DqHuw-hb8)d5vKJcm@((Zl8F1JTv13U~8gn^v={yn3Zv2{$ohF3wzLXXRSzjsk6@cFGsy?8?RG zPMGN35Zh9O5g-4~Udy=&!hf__T1vz+eKR`75OaUaa}g@V5_`9Hp>!?F()mraI-T~; zOr$ZJ`HUDGN3Zz!+px5~D$b=6z6Vl;MMWLC`m)3fa)Pt1(d(O=>dOPUziMj-7TdWJ zTcF(u#vU~5+=rU$hY(2YuN1EqfFG96P{n{b=6ATbNGed#gwPOWxrxVm#RsODgWZ|_ z;z0@JA}rP`iUyoyFbq9;vlL87kmX{JT6X_jPbyh@IqE>SZrb_ekV;nBmKuhZTlO4| zy~pqPAw>&X?LBy#FjjS(^wOOH`PC3KCWgKOM*TsndxMhRr3 z9h{0jC)&lgbu?PN{Y-x}opi_JQ#v=sb;=z3IRZE|xk1l9N76nKwUd7;vFvKTV>G{d zPIYuwNS8Knc~Y+zO3Z@mKZeY5)XFS24B|U2V|{n#ru4(Xy~4h+-!vK9zTA4kvR8@i z<6v|Wo!e3GbDIcPoDH*E0G-cD-GWJ z`rR9w{`*yemtHPc=NWHeTzN{Ju&WF^O8^s#_2EN7L4owyb<>#iS-f%k41+%h&@S%hK8=OYh8dYc(b6aSL@4A z^OY$+kst0d{=s6pWZ^N`eYE6gX&~48rjR>}M*ZcD zjSZdAGRMHA7=f+dLJp|?*`ry3lP?JgAE4)6UO$i2t5<#5+W4RiGmKw`x$Q^CtIkRG zyDM7@-Ay5{<~k(>x*wyfOVC%Li>@0=eqws&*G|86#-u87e)$ojCn+}X*3Nli0dt}F zvFz-Idht+eeKUvjwK4M!CMxUMK>n?69bU>Di=2FcR6GCaMvqDS;9SamL@~H$y7>LBVzkfEVLV4r zP;Vb)lzmzu4+WKEHFK?$lLBa^Mjdx4VjXu#q3tOGZF4ObWoB9;>j))z+m}ok74oLQ z<$fzFipa`hJ32ZF!h>VO(bqTVFtvoKSLWVN#`}dE( zf4>+!VqFe@sNf*Y=Ozo`G(8b;l}d-v{xhX)}!c{BV(^E)hD14jX^ z^@$pYGTYNt%16nonUsn$AXXMf%UaM^0A85PTx?6_{l0eETVchuikKB6L5eWr04GjA zOaLLxVd=9%SQ}4>vo`kuL(F@njhX_}Q)gMoB{bQv`?zZRuz}u4?u%hs{-?0^Pa(JO zFMa0(Jrhlhw3*advE|Yh8B{t~w{ivXw9W9WE7Pdy22p=Gxqr#T z`N3#xYsLQe>q5wm+q~cVy)j$;F187OPx*1!ZG~%7c*SIE#fxY#@cWPCIz6{lKPL&A zc)oF3pMa>sg@uK{Bk?pkZ0dis0M`xZ=bU{50|}j+oS=XtL$fJFtFtvKMJ!n+b!}&d zhLJJ#<$hP!YuEQ=OkI|9zcIA6wet)IwFbdtSHV*T!#0o2FDWSrk+po812=RE6URKD z{h4YQmRx7H7F*!hpQWkjxZRy(p~lF>l-6E@^XKWqE?(1dLvfpI)*Cg;=S6zKh&TBn z(C|RJPUkb`p{wJn!Z!(Hl%AGLq<&{tco6ndP+64PJJvJtTRO6n_QKeBKRwJzQtP`- zMR;ZGiPb~ycssX^iRe(%)q4b($wb31>RLeMdQBWtd5n3fVH^qA zhs?M3SJItwJ%>g66SRl|rRA)84n}K716hx&_Klw3qDucbUKibPHALFHNPk;))dE?y@f1C~G`O6;~+TTUIVb3qm3i^a->nwUOZoPHunT#5@F>}Af8za_H zW4^AXg}sb1;-%+J>hm*?FHz7{^>&8iC;95XYHhuQVl5N!Z`}_FOCWdWzfU3(&nL1$ zR=c;7$!BVAm5`CPAbFDiLSDXMytPd<;0s^tFu9$3WY%cDv z*=lOg8-09y{GpA_1NeT)R>yO(XdWVFW@ec*MNtO_UMK@9PF)!^E{}%pUTklFokjGd zt4O|ld74Y!zWv^M#MT44ey-=2AGcUF8wZ0@d&r_w{0N#9L+t7b7Ow0BWq*Z`aDTV_ zFYaPx;runk#cTo ziAu2*qpq$lWLy&q3(r8JX+G2Z1#(%7rM}GezI3JH5HJe0zWO{Oqs}LekO2b-7@wBr zH{BGP4RYETy9K&qET%u<(k(L#DZvx+H4Dp$S^}l8&0&xfneB70uwWJEXrX)-!wYo) z2m6*`YRqHA};x9j9%ikF=vP&jy-KAl$C<+Kv z*pJ?A>f|_|f*jrnDf9Jh3vS)gNe`=E)!o0MG?D$GG5+5=p4D+WiCymxK3C0iqKP8j zSs88$qLVUM)ozPvfki4jSV%V1HIew%3{XW4AP+k9<|oIySQqz~(@Qp<0WuQ?U9Okk zWp#IV=NJt~B*oZyfeY*N^Y-){&uU`Q@2Z8;htI*mZXjv~>#N=vL>DHO*m;j#x8qK; z7CU5CUkeJtz+P*$M)lvVcUmpoeVZv~Gww$6{rmSgg?ytDXcYJWNmbsIkdop9uk}h% zQ49>Y^^hqp*Qi6bVR>jM$>wYu+TDIBD!L9E2?w9D*)V_D{k_nnb1Mn6a&yHyto7Yp z0KDqm==jnvo6Be7Jetxdm;K3j9f0@%?~3qWwp=U7$1d$&?K;2O+X(_2 zK0rA!)D@47xm2n?NNzhhif>INIxv$+>5KW5QZqQ;(Tb02k5!DXCG|%BePs6SU7zJ2 z7^h{VSUO+4o^HCfKLSB<0N!w|qsRTTEiVLBT0Pff_&=PnyBrzxTvME}jFRcXB4rg; z@6OHp-`#LdfkZS6^myt%T^#f5uL`DA(!Ob&f2m5Ymw)^FG8!TLdnxW+{YPtzw#|iS z@5cRWu`>a@=jjXndDUBSF8^B1`$Q1qPf0U3wJa};ISSNbT`rX-aa2KZXmg!fX zK=l+!|2iIb^E9m8*B^9biCmX-9$qSQAx<-hupHzzuKuVS3pE7Izs8kpR`Q;2qjfAm z7ztq1P(|q*iX<0LNns4lGY?1ReF+E}j2kF>{UhR$0uP#pPVw6sx zQr0>XC<18PDf@#N8Y8<`>>tgl%R=a3omrZneYhQGEBb`Pn4zx``VH1Ird13MhZFD( zuD8vhY>IgL8&mzo)xkt8iMM{MHK3^<^ewL4(Xd!$VJfuuOC2iVFl|;K#I2A_AFaY2 zU7hKa&dk}eoDG;mH7gbbZw+1HY>pE9lut%)eFsYGBzC^ds^`j`ySSm%QJ*Gut*2i` zTUYbq370hmjK-W?(9r1km?oDhehB9zy!e)TdQVMYh?HwX(GUXzRp|f6sT=xw*G{s9#UVpuJ$}h+%Vd%yE>FI?g1-EK9iRluw8y ze#kLdo$IhK#Vd@9g~gLglbzwyUHqyqPau%GZ5aAhB+;A}$4AMY|0{cMF^@GID{SNJ z8&TnU@L6`HtfW8dIVbg}PcfsHbDW(pEBRM6h(g%sD*Zo7wrJM)-AP**d>1-%d;wmJ zc2ir?-x*JKp_%wI8=k49l}3AKdmj10ZF@J4NTKppgYk7TT+_o~K9*hu1QJ!O%8r1$ zZjLnN6Sl{a8aavyMt-(6o|iD98h-EEaZiEeM9vA7Qe`GAaPTDlKq}jNeeA#PAepBq`bT{|LZ^%9%=2@%3)fx>-$P7lR;TrFRC zJ3OMu?h5;PI)>D&Zqsd-vk2Fc;knUoMD+Qz6syn8{Fb-7@?}`IQ;B>JKZhjaE22M1 zD-!!JQ8m*L>0#1T|Gkr^wqIi^v8kA&e}tZQFD19BZg}5^%2ogVb%S(@k?EADF1 z>lWsEIgD#_ZfDV_KVVbz?}5(DluLQt8$o7hZf1be7V2ezNz-mWBY1>&&&4a~xTN}Z z7fXFSjfd$Uju^ozWt$v3ef6-aZEM0dFLj$rxmBgGj~H9hITM$anAUH8%ogknRcm(c7*TXnh~V0n4Mv@HY0#0hp*P-me$TMZU@%s6H$zZwVWHoWCHbXe-N2>G z*N0q@X-jJMWVwx1}nM>h$M*pr|ezk5nED(S|wv& zXh>a0izhkHs}Jc(>{JqD)*V&@{gnc>yR+@w0#^cqs(*XTOz7myK6N5RSo<$~g55T1 z^@Am>^;#A!Iq0UbqSXwHkQS3slaD_bz_DA;zZtz}cg(MR^!7G=9#vI!w`Wkwtq!wi zHU<-r1LNqsqVK2P_S;|6dc@R9gFDk!5EJg5mt`k=o@_U9a%SSGzKUcT#ZW*GiW1>N zcKKasBq5N}G@RTXQ_YWD9fv&ioE@Z(x)u*UOTQ3Sd_%eZqj1lz=xAoY4uAQhN3th( zlT{WojG6cr>}Plsc0Y@r(A_dG*nZt_`~gp2ww^4T!mc(;n)4Y7AqV*l^GERqG3DwH z##0^TGSmc2f7m{_b^)rzc0>f$32b1W}~CK^>Sl$sb!LhylY(h4H6+-C3lqXE3>K1O*xR>5Dy7?pVzCT0@f2=yw zsaIWpa#AYucoa?4ql!3JkQTzGBQW5JKsDzrwB@j{_yzqrfJy>R>A?e4mTMW=*+^|e z0omD}^T+J>_ot2JsUmxp%4S!ujp%6pt{EFPwq9$Ljl|eP)sR5~XI`0O_$x;eddFx@ ztTFLg4}Obq_$O8X7xI7hjX94_7(nqhG0R2EHK1jYfqOmagYEK2Q+P42JC?`hxgAsO zgNs-NU)$CdL@q%Svf8RtgXa$(J&~pW+ojl^#D}juNTwawE@R|qa2?i5%h-&GLyH}b z%n(POb|4b7!^~@c7gxV8AnZwoKbimNgRpVFff!Tg-WAd5(r-xU%~Aa}^KyS}=wbT2 zdUA0_j@QU;DSpKk8BT@(Uo4nc6Kks}h=B`EBKY%)AjQzA_0abeZT*5yl)mDwbsWW_ z6D7D;vEnZRp+kIiGEO5A4`xz5v97;bIwClR_~P%yJqmZLc*%&}_7iFwb^S=8;L6gZ z#2bloyKM*W9Dmp%?r2?QLCs^M^DCujH%?Sc!feP|`Kpy!UGk{uk}fW!zHG1n{a2mC z1`h0C=f9MDBi>xOL^B)7wuuXLd}3k`v~ys^FD-Tby77~Jq4%@+xuNxiS9!D=SNdx` zR+h0mMH|Okdqc7u2EWius~p?0o5D7>E&L>jWV>j$E8;ilhrF8V^I=$-M1Tl`Y6ADTqTJuXg z=gNJKI%uX7M_F7>j@2)W@(B>ANRp(;gl!%hAx8GCXaNI&;UOswnpcvQ!+-gRzQ=%) z#rM9Z7ay+uPSpmYhNE0zvMt@+U%q zgLA4kvV4sLH;38S&cCnpGg8CIGsLDYcdj|`oIQDKNe&?$0jDmp3hFAp;43YHZrU@G z7-@5zl=kl_z-B>>@%4chZ~A}lR%7Sw_^%9NxTp;ec2o_|Tj#DC?EXVhLU8)%3;BVz zCzvqgXz31r44>Hk$gJZVCt8;$v-tAJf@Vg7ZwkLe2vG$8{rtIUe!u_Y7k!7DR%c%CA%2eFKn+uHyXE67Ts zJr?Z{5zDbV1~1Q-@$yI!t9S*Za}>GcG0)4#$?kZVxt7~-9xhZ!+P|W^mu&Q^r$6(i zlBA}1G)?3`+wSAhG+-U_W(*!EPmrSpiqKxr$uUGl*vJ@2evM1lOuXg4U0>&$(0mK=2fQ#ugz>8(@Y|F{;Y3zb?uUIsFlXU4l6KPvk*t<1 zrEJeHkg9OnQ4tYWd`*hq*WN-Tmgakbfw;zf%>L+oDa2P2Z-x2a7rU_(86QgV*Y#nH zHy>z0XSZ)+wwv~E4sAb4%lUyP7FU`?UaN9d$Y5slhX9h>BH^rxq&9yPr$nG61R7J! ziE%kzq*SSzi>M3F8ud-?4`iRjAKqs{uf;}E648NkhCIIFLrAQNy@R1vL2JYrTWR0` z>+(pW2lfe93L23a4Z z=BQ8niVz%f`}=$|)_9(U*97)mLRXU`bo;_|?YNReGE-oC3_glGWQ3ryk4n65^T08F z&4jgohl+i>sBG&zepS1Uq=O#Q`VZTP7wFHZUAgkUKTrF%n|MSGm&ocpzM08jR^Oc@ zEt1&L)h_S+Of&l{(i~dCySi-!gfU1}r!EFRN`W4I`wu7(PYTxQqxJlX5 z5xFm^=-hD}VCZ1GI?h@y-}cGq=7o9Uj-|48$HBm^-FL!+U`s!5^<$OGukuaWnYI-u zm&+U3_~%_%ZQn^aEai)eO!eN( zvE%Yc!TLQn2!#s?4j&-W~I|btCRn=xZ~G&~1)t zA6gXbGct(0pVZ$?xB?c2uloJoLc@AVp$)x&f%vWBj3|Hzd55FsCQ5l{=C>7WG*L7mhI~%}9C6sK zI)mU>DGj9+I5_9h$89~iuv9Nal|K2u%HrSyZH#n8L&dLJrrbw^$)@AptxU!+2+qIm zI<8`^_5FIcB-*H^Bz9f>(DFet9p`DbI}sm*G#lAo>^mRW{;uVaz0Z~-w7ri28E50k8YrF}C^gD>P_6_$FmHuY)&l_I!{eeM3`cOpj#O-o>t;erwY~IZV zyRsv?GSU6jJo2fg*om_nrb#(j?#5iy8!H{r;*I^L8`4XB1Gp0lQ)i)D4Iy|y3!Qna z3cn8wdM(@F2I_x*zr4Um3^wQOM$_mkZKHx~nHJ`^0##5U;_DtiQqz+F8g={D{foRA zeg5t-RP0c6)m4Xo&p>>w!n~g9laH)r&F6M zXpptg-XI$0xQu=p(97<)s=tK!JyjmXL{VjcftP?7%vsWur zGj0Pg!(+~O5|JGN=Y(O<>=T*0rP1q=mWBW-)TTAOU-(uPwBTz}l{!+3bB;H2R}p=_ z*&R6P>7<2$B+QNPZLf;Q-d#wY08AJPmQa@ zKY$7ftFqFMjCrvt(mQXxB4rve#CGpzfA=_1x22f9F_AzWRo=HsZknX;Uq$zwpqPGg z{DPpqvn1SfTwKmVO0MIy-yJQcAw7G_PEQcJ{hO~Lg2U;8zleOGPSTh4|s-&+3AiKu`9~x^+^|iI0mw;!t zZUTKrOhkH?L=9i9%uDuULYxMe1YoCB5EJa%XkHj3Wc!gX7ZGG_Zk1EYzhfeooIC!g z!m}4of;TVa=T6W-lu3aLDODQw^$r~0C8B3wUfLY8%DzY>Z~N3u_dW4FAY@Vwl8q^G zr}bv(NQHa5wEpt7w~n(!4m|26oFVg(3;y#88eI+iyl`IvDv&$!*A8>q*)mu9h8 zvb68!`*>C9xrKY@qteXnijjlLNwYzSwa%E=dQO>dk2N6aHb_6=(`AA9oMF%|<7GIM zgh29Le~&?X{NVU8{<2SOC?13f4f0Pup8#c>}Eh!_>kHpL_K@f4z zdl8wxU9Fk{NyEn8q5d2k88CtoL6QGM>~O*5zvC#>RcARJve-f~$$lNNpmnwP#b{D-PlcNRqH^HqBj~sC(bL&7I1x{6EAK_t(+8X-c+VK26EfWaY}@rodah`zNOLdxFjTp8mqN-ijOO5sULM zfwXdp;QIBS=+9H=V%Sx)t3?;*?5@1`_I7NV7dAMb>dFy8J0lo%Lw&*XJhwK+v2kp) zOO0O5h>4np_<>e6h5`$fYWo3J($(MTsmXQiI?lDTk`4C~M>>AHoDA8LDh=-Io1Kc@ z(F;)@>jn3$)8F$R0p{hGRQ{!EjT~C=Z{U=5muGe9d;i8sz`Vy4=$=L3x4vo3O2wV; z=!peX^>@OGym$V3zrQ_QdYa~A{}(agyjLYN&G;oc?+Qm=GwZt ztdzXr%>e z?Z(a|vKi8B$bYP9S=@CyqW$twkX!NfmZ)A z@8{haIX0pNI=q`ht8DOdy}G$fY>tCvYPe?`^Gu+0=Ifp=*8BI)BzHHGBu^I1*HDKo zG9nm;qw1$Z%QYd8&|6&81r%LPmjh6AQbNrY(L2D$Qv#BL**Ug&^bIKwPb;k zTzrVz3XqXco9k)W%Y7hkg%p7pemsv_15lRdkc?e+0d$y#xA-G|*{C?|L#LQDo5Juu zz+4)yZ~psZ`AT%4Jr|S7XFJomo#HL7u4Hf>?tXX>*GzNtl2}0wd*wDQ40ro8BjD1G zZ+iH(3rWPk^SQ1;uS#DCsMm+I$@X;iDS_IgfqX6Row9f%bAON^P!5-Na6@oWi-p>c%eyFK<(w$oZBsosRYH9_-Nuw8ATj3 z(vjXVetE&i8%cYkOTBwvD9&w}PKTT@V2tG!Gbc$6x;tbV9`O|#D;nR^)1zZb|58-j zye;V{{=|}z-s(9aRHc`S4phIs;xfo-!{}&7Zhoc=Ig7F zf68r`V=C-Wfgk|`T@bv8x($5*Yn)dp_KO#mM+>PTR6r=Q-*xp5S;e?9Zt^f2;~1EL zxSMkPHVZ>Ehm%s9b3_Dy1#=^M@#jARVS(_uA1}dPPRK6$>&874t3A=8dgq?g z;zQ*!{WGwReyL6A0ucu|aV14NDfu=3N*Y9MIqvV=X-vL;u-@~TqNLbDHvSloYf1mg z@7+zaeW3%*+^SMzhIjx308~b^+i4QQsN?qQfD0JlxAO%=CuW~|8}t{&xU0Vfgrr8_ zRA#K)-10P#d+GdkZKS;t<1n6kr<6~rp8m%jzWg&TN1vZr-O-578DTv118nc1DxPdv zf0*hZv|AtcaQFwWtTFucMznTS}p&W*Brks2!((PjpKcG2Rrj~`_QRDTl(%R{0 zLnH{>=xOV{tnTGMf!Ye!VY%w?I`6)8OOQ%2G8o>=fzKazJ<{ICB{06aou@fzI6bg| zJ`G~%^DaO-RC2t(RnPP@E+uQ-E$I6WMzac;h@lc6jM`RL_!b+X&m>X%Uw6*{ zK!vM$cQ93rGxT#74u6&{8&)o2M8836rXz-bJQm1yfwcObzC_uhQAOkNEN3TI|6+Ck ztPlky+IN>-OClJZEl z6Fh?!$_U!=GdpAk_{-L+0<6QB6n2rFc5*_4SNHG@g(D&Z?c-D`iToW~;XcyH$Q$Ub zRh(Y#POF&9Y<3qp=HP8i)X5rkc$^}bB-q$nZNC9(mCwB$UeKjz=1tGq+e^4K*;+rM zCRUo4o;n0nH%^A&*QbVZ?Vz6c&+Wm-ibLKgGOg z3pzkkifm$I?QTB}HoQg?OS1&$q@IE>a;IEJbW-e$1L^>F)O>p6Fv;(#VDW4t|1NI?nbXtPA8}4AsahjQ z198|*ZAbkEGVLmCfHf;?t;cOvN9;ucF=-NcW?;OaFE*Ebp!pBh z$a5P|7M#gPI*jyrz7nHO&t)u5zS;8&W36*Bf30%2c;7;rfe{J-?-U8JlNeD$au2%` zF!0(&iUz=r0v+e~%ZPQ$zmcy#X;G^C8QoC8LmGbnD}4*2ewJKHvl2nI z?BWEFDV0-Wg0X&;V&0U39x@|;A;A%d5(7kequN@3F#w@%GB~%g<$1Oz4sH4Bxz+cA zU7Y?z8Z^aLnSOMgHM(IiJ7SI1P%038r zO4*ww{okSNd1C*6McEtvxQCHOc^N|x zeuqx<>ur<%^1Xe$wwsrYNJ%Z<)IEsw8M3g=rx~<&i!I&y1Xzdm)@4ORe7masvW~HH zhZ)y}MW3Wdsd&S8BFvA`d+TGAroih_j2P074LMVH^ zyO;B~clpKnU%iXF>k}ko@|nk%DbplCfFA%}R-F*H1IZ>wh`yi4t@M927gN@zoZKwV zwcE{#Il*YjO92-J7m3K5Lp!tOF_0hbB2Cp$!*wdB3AgjHXs!A5JDuBq{fX zrns_AbZmge1=5yjt~LQD9T8qd@qg^oy;KW>$-0C9rEr#%?9?G|>kD=5l`+!ApZkjh z-kToZMkmLgV+pT!?;cT9pEF)YXKHBP7*O1b!QeTyXwsovU;fjWkb8A0MJ9P$j2^0B z{wE)CtShhvk*MA1ELzo_l>qSIFpvoQ)5P(8JvxoB@1ClfIo*i>b zqg03v(P%WF`hwMluGYdSVDz3>Uqmh+epVkC^sEAzOT1LJfV zPQRdToCp3-M!y=X5|kBBf$|2$ZKCq12X6YZ{llDe0OpMGwI>8hND%SwkL8o?YZEGA z9?ckc@lR^BpFO=cWRqZkI9giYW(+-RbG)KG!%KLb3FY0ULE7c}oaYSd_vb>bE$>O) zO3F;|ARqWr@-rl)Y(03EH)qiWnR8rp~J6CDg@(LD$7=QohDV?cXg5*{_{y-Ub}xr+dnWK3!En@ z*A3Txd?npMRL#Nz#Ai0|YbRU15ORG;O7^T&8vLXr*XlfT+?*YohI=Ea!1YjzNxkh0 zIZuvWWn7w}2?(T!vvHo=R=KBc=BU1DlPdt&C?Fem zaIggGD6~58yg>(S61X8Xsw|=8$k$49n@+w4?Nz-RlkcDE=>BY)-{+6b6BTq2Wid=Z zLwzO;S3Q}5 z0f#v}vA&nQSg;i!Skv5}f;XpgU7p}v?TigY*@2oNy`tD8jKxxemAvoQQjr3pIq3+OLL z(-4(hl24I|8&@j?2>>_Z4kgo#jh=k6;M_Okf^Ycwc+LQEAO^)9j!6zKkjnrkK-y0q zbS~5iL$&RTyWN46fiB(*mIb#O_Ax7njdQ-uvyv|V*z?6+t#e&sk`T7b!Pn?+)wsfT zUZQw4la4#DR~`5M85EyV^flt{kT%&>P2*>s-uUVVmWa6ASPw&mho1k6bGl$2%r?ge zabFGLJQI)1+0e~lW+=c8Rk|`T6$T+Vq#z7VGdO6zt}lTct!@Ds4FrH0a;ZnhS!qe# zmjonxJMS5DDj1~ew`@Dlg%whkVpXC(bP0;2qg#&ry-ptlv2Mqf|>*GRooswC6 z)H2Gv_-uCv1AZ$T#@$&_H7AOA2qJdA&9wh8oQ&GB>Wh}4B0h0&kuW@d@L8pH2P+)$ zn7s7H_>zS~5g<&*dVIqJ*nP^(!$D60`G9k=M@K{ClD2%rq4uBFOyWI&f}*Cj9MQ)1 zNew$cdUw@KdN~n8TxnbaD`Gc+4kb7_3Ici-GzYiFO>Pn=qZQwQQm-rP=VJ**20TLe zSHP!(6bX}D@(26$!br+U_%nIwi|uVpaY}I{Kq7_t?4;N(&#*7l9dWF~X@2}ro(O=k zrKPbQ`eLlHmD3qtLlfs?P7H2u_SUi%JU@G~r%+C_jn3GBorC@9Qb_+6%@0p_=|RHJ za&5_G?!YPHKH8LS6kiRJVV#W6H5iV4C~A8V0@fX8i&&f)Os=B*u z2T&6rRr7x8Wdw8%m}o4cK#N5;Q5O&c*m+|El>|e)Z0B8m#}P9)(L|snb+#%vpzq(a zDPZ~jJd)k$Bn3BZ3^I}iz#jm#68U<_)!1@UMNw^w+Pp~K%1F&g7YeB&ZR(navs#3gbmPUF_*ZyR^@mkEjM(OhLf~@gZ z!?<2s{Z$Zt%N6pSgMyFv!<@SA1{;}0sy_*xBy#OYR9u80NH$sMZau+nMc#!TlRsjPBgoHXNcnAx`{EKnlo?i%_jI|bAM}v{gmXPuyoE^%gl(d&P##!v9eLxQTp_q#6eX|fSY7DuUyxF(g*eLU%7< z$E^n8gXNvtp|@Y#^L;;OvZ)~Fhf@cNJ8FXt20M4$bzq8Z&DUj|`XU}%sd0m8wJG9m zN8SpX=enR{AyRqJcYlUquw`UQQLkAGPym?zBPqOlY4UUNY+qxG0%08}#1ThZ2aF}4 z`)bOgOi(8iD6?0?M8u|#GzC%}pAlS&Dh9=}LC~$4|DqcI@AL+0pcO$}4UuU-EZfCE zt44S3OlL6B_+}pSm@E=TfTP1Dmd^Ws8K?h2)S^&T6Im>vR2TcG1bK2bG>{Zy) zkWOKY6R@s{5k8c7ZJfD*+AWsLFcR?CyuMQ9dmc{}_VGNK?Ge+^FCWa9Jrl-ExTjn?+0K0dk)U z-sf+A^~Lw}z_XbN+y<$*L*T}!A$NVKKn=mvB*=O$jv76ig2NaYls!3>+-IMI|Es%! z00E2!h!Ey}ci_4Jz}^+HIN#3y>C4NTT?!0fx_$vb|E+cCa+q=vcR&NPb5r78byrVs zCmffm4!yURv?f(qE)x-h%ozXv5FZ&4F*+9V6UoQO>$+bKX9z8N7q#>y<)S4-KrU+n zKzo18Cs7SDs-k@SJ2Z42NEL;~4MUHJuJr>~#+3eOS2$2sR#sp_q2798eBgzOgemrJ ziz3V!i1;k@LG~e(TfsLp7{Tvw&IsPzJKPjJs71un+H-a-aN6DW<2cN2-}#! z2gT@R(6*$1yrCSi%Z`BQQD|Ha#i;m$UEygX!>>OQ$3e3>|0SXxgG-Lpbi!MU&BT=D zrkC?oVB%~kHWGP2a+u~K^+3R=HNsr!;SvnewoRYx#ikWNuRp5CO2S8 zAW`ipvC1}dwzE11LCQiWd6whM*$-QnJCM48Y@3I-SuS6> zarR#2>S21geOr|MN+FkR^x@EK%;2YhScO;blDs?V2Is~Q?6o^Hp8mb-?Trr(Un9Bv zSF0DFb8_8_j8LkQUEIYm=`0xGHLEsxM*lN>udR(+&g5e#iQz;Q8X&{eON8B7gwL5yT#JPzx&Q| zl06ctMH}zvMIImjrF}<0DK}D5cG>7PKX-E2LPU{pQ=-qDUMy#wL$eg7h{d_h?9pG> zEPCxh3qwFO)7FO~5G(#J;yqy7y_R;QJx)WM;+>S37b9rQ#Y8bwC@Ltx#L6_?6+{?o3_rMm|*go1WE1bXkx+4gQ_q zgTDB(D;m!q5pVY-c77|M3S@Pfn$F- z7|`DL35&X-u>q%zrfGBfKw`Rw_p!OK5gkIHCQ*%>N&WcojyCatz=^rteaI3WNCNx5 zqwAXB@37ahb%vD_{pKWG^64$NWnN`@dm8kzkd%7|o^yHj+;Ec9jHzNA5Pd zBc!Q)r!keDl3+sV(^8G?s!tP zE@Erx@>xL*9U*}?dJBEwQO{TX9^Ro~(A$`L+~)Vrp$z9IL$27hz5r!{i`y^&U1s^| zx2ADB^nRGS`xnni@GQ*tnV{;uq#q>hToOZpDcZs`e%K-k6%d*99R5=&6DqlU#@5^(3^cm^URxzjO^hKJMblO(DP1bZT)Oop$E{^M`FLI0WLAw{8SUhJIa+QB z1{27(fx_3Nni7{#zYov5E$P#zW05fJD&RyUTeGa1vKGia2g6+epRe`Ix!5WR-?)>uk= zdHLXZ{?4qLGuIL8#Sg2!apzmh9rv|>8otTnz#p98?746EO3qZ<;`dX8y(eB_aop}x z6{C|iadL9fQ<^h@1xwefHsy&}eIs|Lsc~%#g^gpwYFeIciak^~u6gt9m~XrO z9z2BRmpuNl)^s_zCYKi6LmD?cwP(et+F-52C>eg`3f~WEri^6d2WdqI@jP|rPva4O1FXnk4zA8NiFJ;kc#J|xii%b(lYC_rOd^4%3Ao`sSKyDiV!vbR zMS?IrnCc4CUq6VX72M`u@S7|rn+!R}G6*qjkGZ(iIii`PTmKqLgX>Xs;yNMw4=(^Z zAZhH|3bMB_?4PI1c3sdTIMI=B+Uz|~-P-W8@bmTfBusiQSG^a`{?ETDQNauIoPvS0 zzHC_x_G}8zpC_?5G%&rU`%{m^_^{3V)8H48hyT({`rrFh?G5pt-*H^BBGRJXG<6Zc zAm>)Mi_Z9h0q!{F+@1IoYg-)o(P_@w3NtD4Lj#ov$>Cg-^q$M}`h_fJ-O(?snQ1@L zKLvEFCQfbl%NJXlrY(46ao&A&=oYxZGKJ4A>EaI_mY-JzVXsK?dfChXM@KaGA4O!E zJn7O2tK}9FsjjTVJ-XUvoQcFl#&<=oAXOm+FC1OEJ0ri3OAI#=-aF^8Z)Fv`-_DyItglAx>gI8C_+J(v zq>N^cxn*ht$5ZR-wj(#r5zAhm@BHBHj!J*_9Q|X{1rF}kKt?d?jO5{gDYG_1PZ!hOTJR+fxdZ#L3 z%qK}(FW`uL4P;pn$8t{|t1xHjz2kzmFegmH^#R}ZIYKR)ca&N5eiMTzVNOLI7ac4G z9G`jUg(j4vBOX3&1PmSkk9S$ zJvm@R-){Km(A?P;jSKOB^iUEZktIZ~m9eOCEz7$)Yfp75i$ghAqkiqX#ae#-v&Tz` zVx5dB=)YiRV)C1)UrB||!11Mt-;vG~wrY!)funZ|*XCtc61l$FP|glUrz?|dRm+Bq zM$%+(hc;^Jmk{T6t>#h{g_)BSdD1z^9J(*c=P;1yMVjmWid{RiKHS1APSP2s%`7^6 zGQ@%yE#4yOr&z~z}tT#3Wi%w%}xBSJ-K6hoE!`a46F67 zBVzOr^<8P0>5S`Bn+oBl`ZPrm3B`T-(tV|4kIcsy*10At``4CEI$Ok@x zUD#H?lU8GwGO7Hh_hlEtOp0C)MY?SmvyD(Y7K{&yRH(ULU3z(Xs?EJ%!?yTw&S5Q? zqUADrXW|_{`gQ<($7(#cXa5aT+Oi)paT9L5PN;jZpDnK_5=XT0jIF52y`&5;<#u-( zDRI&eNcLYQ==ipav9QG$vob9;Yf`0acY0S0n~QEqMX3ms65FWoyIv5(rOnUMlk`6`Q}bLhGx9jf&_gLVLV~1S z|Crp0=oq;opzzeuHK$bNb7mJ37W8F_`)RmXJTo>1u95%`?4Di)7|%HK_;Cz($5HJU zzTNir7IF#8_C(I}ht?*7V{OLo@{uks7C1T~R|E)&5m4fkYFagnx!jsrSr+@w7PVpA1*cOU@+o(xa`EF5p~%Q za#y%@(AQo@)*BWhD{du0(I#0M3cmmX>Z$zQ+dqHaG$xv;Imapb+X!A0R6puM4Y<0y>Mg9kbktt-qpZ8;8oQL#g zSH?)z=-d^j-*!8h8}MrA3wC&qM;{Q#Dm;SHaeCt6!Whj>JzMH=TZYz00Fj*CLg~i`EecGVib%zciNqHSrIE9 z<@=6pvM^OeT2YsVD{W!`1`IXp7ht;Crj1IS#ijU_N;8yBObjjAD5}~b%QN{-zVgm5r<+Tb5D-b$n1s+j#PX7U1oY+p>6F`iu+usT8} zW;g&12m3G0Gzk6}d@)l)JA04kPpAYspN)uLtb8PPaJNtVXsp}oZN*9)eOr@%h4wb|*DH7%WNGr-^=FjU4HqM8!k)s$yq8 z^tsPZNym*n!@Ls7Bv_0>s+T*p>=Xq8Z>*pi14eR&mBobvgD2+S@TNGhe*ga0szK4> z`%hM^X?~Py7chyL76P9kyi9nTFD}^8I8uf5=owijQ$})!VnA|QVG0ZE($qut7LSlI zCs8=h_YB%SpMDYi>xyEob(~V{EZ=OHGyK~0y4ll>V&Qsc5SB^7kbJ?NFvbLDhBn(z zmy8=Ei+Xx;Sh*rbDLh2D<)1t2&)i2bTWQ%GDJ7lS>Rz`nE%{J2GQ_Usta~lnNQ{V3 zm2)|Chg?9_C0_C=#`u)CcMD31Ws8mal$mY@Uc^|no2{$g@N0zgCy8qFmNGo&hZWRk zz^#%1;GTzZO&2NsNOYI-tAFO>| zxW%*b_wG(WfGKTF>`g>NW=>B~-+2$KNI~jRD0ilEiS3E!M2`Nhau?LqMnM@pv9j7y zHfF3VXFv&2Do|*%l&YSU`Bt|0cOG##=F$GY;0Al^a|Y6N-TzzEVfJ1x^7D)q{FCWm zGH+HJG&capk{z$_{?5dcYn@=(+*tj><|>Qodi+LPeKF+XLPs4YSgM6q_$|`*4%B3p zhEz`gV=*xfH2kDUT^4UNmX2=kiH#r}uQyJez81zh3x!^HDt@icPm#y3JbQIChZPrf&c5uj5F@cW^~opPq)o|=0r}llXLg>|&D^QNG zrVq~W@tn=w-!LR);Bj^&nxE>ME}}pkvMF%f`e~epy4lMaBkfde^&V4}JP%NRMSSf1 ze*p!%ekm#x*j)0j>Lz!NitV1o)5@ej<{^pN8=u+sy_5`xe{3UH%NO3D>?c__3TBec zDh@U~(_jf^m4&Jvf4uZ^)UIR_}z(kqD zYS339 zt*9twBt%eMdcwc;E^fs*B`Ha5_fkjH?XF8=3jFXLix5o_Y@sCNe8tM=C0pk8&SGe- zNa`KB9FK_xz~2x(8)XDA1`{g{c&1h7uNZ%ist&D}8+n7fV+N?Ee@?j3$N87ehyOo6 z^;`VIi3e|me5Y59z18KHZtzfHLlkpCSM;s^ei>X+QGD1v0IBrE{^M!~a7P?XVa2q* zq74z*3T=ebp^Mw|-(XghICZNGZ3y7IrJ!KdBuT(xPy-Myd@lyT@Q;rSkXZlmcliJR z+ozj8_a3Bu15`Bs_=NpN=1AJfnL2^(^Ast_I*-$%1lbh}L*pVi8bk~={~d=dk4Xq& zQ)cS?KEp@S&FQ|N=>Re-Khy3GO5!N0h&~*uVfq3qNM5=+*cRB>DJ@Pq^u3pYiOGgl z;6xWUE)&0g?qAVc>@enX=16e1UFc2^-!o91UKaj<#9LCS6s7ov#>`&e((Ub20A=(W zpgHhjS1OUU*Pj-U_o$I@6I&^oSw{iN0-1yXl z-n4h}HZPq5rAYd4bW3~pJYUYTby~%x@ z#9%jN)aH0kf~Covn6)%l=U!!CD{fZ%mtUSwV-YY^Mtd_6`YdYi$b2}rtMgCbj(IH8FOE`$jt^z&h>M7gXD>ZpGifmo}OEG}g|j z?%e2!GY{3tWxQY4iLECR41Ff_-s|O70NBw%2bSH-%2XF0I~P}M=Xp{bvpDSLO~zz{ zEWG5(xmw{_gdC}h%Xf^6=JI~%ZPiJYiowIF`UEF=4b`=Nd4nR(`ZPAOK2m2y=NXlk&Y?c;l5m27z*HUHc20fYw8VT0$Y5jnySq=heABHh2)dn(g+iy z{bBwFU$nA&^oa9IYi1xBK7S|MlaYTbdUT5k(YI!BQ%A{0v$m*a6@&6A?){iw0DgqPby@biS~p&4r(zgpb-v%la9TK&&>-)=M_m*f{2cV+ zO(c~QcY(UDIU}p8QqyLusKla^{sisYHIZ5fhQh=1(J6{meJyHa&X|A|=eIl($EfbS zEbt2EG-OQq#_t|4PW9g5y(}g{0f?VVd+;h-#z*(Am#a>iTrYfnrsnqKswwlz@gCwZ zF?~uHdMzxiaD6Mhc5}zu31*W!TCkWpmEq?#1{;V`jF}9z3$CT-W(o9`Sd;_McZbLL zm{)1L{yyAUcb4sTQs86@E7-5P#%pvJLuD{vls!Fn7B~^ZUCu1V0Cfd%7GN>~jE>K& zwzx7HM>(~=0vv^Ej`hFvowc!$YlQwwzpli1br=M%G=9%O;t{G6xBjS{*gfD4yvbrn ziNMf>$Eu7bg@FND(h?M%{w^bIMDX(9iZH;g1Ht6L1v7t+scdr8jCmUeYj2X1&);0G zM(X%|HJ#(|UsNh%jnxJ7tlKdQD9xMO#)+^vbFu_vIo_(6c~z`fBnyLB#gV4jeQslG zJcpzjyqdag<-N<2?I|+ZOctgUAApZmR6=43@e<4mgMttH*2EJmosdL6#K~_}rrF%8 z;2uR|aohQ;fJN=rjwpD|wnTvD)c|TrU_~4}PPm-9bd`bn=e(&JYfRh7#0ua4XmaoD z{6$Bos!w>lCfSTl>b~-Sz;$FebAeXf#r(&`d|}uJ+DfNA8sy|(#eN77@0_126g!+; z8GU5!jNVd36q{HQ#+4sXBPgA1*j117eNO3zYk-X*?M2n~$1+hyJp%zDe8~R6PlGQ; zWe&Co#nEznV4vZJ0^xH|&yzL~6I5#xO;nbCQ!g=?BOCx3VVF80It zvH)07vu&#FN6nfFCG1|{HFLcY%TrI9aQfdefOd26AWHOpY0vGv`#Aj|A?a(N$LiZQ_BPjr3J zlq#kjc1I@XArBBr^om~Pej>;*aCi{Cr<0?#%D$VPdIz(H`0kuBV~!R9eWH@{ZT9XA z*?Ii+B&VPVzO7^j+gn1ycrceh($SribSO?y>8XJ=b1dp$0%rHk)VG=*4)_RcEc_gK zQtev>X0-vA?4a%8E+MQFxcMfh?M0CiLcre`i8f50j-rEc0+o%CPmYhGA7Ww3TuC8e zAe^*jeZ}mi;?7Gjj-p}c@>`>xzTS|}$}Q<~5zqsYl>QSJ7JgaxCLFRe$Lq)Vk4ecT z%bek+1`B-YwYRif0;*r>3okFVlxA6Z_|m_cUg zPL$emEOY-_?cv?kzLw3D=&BtZvcH>Zct0%{C?JAguoNEEBEKbyGS4{KV&KFV@a4Jbz)JQ%~+1)z2WMK?Imxp^v-gX ze5vrf6Eg|^Zsng`ggki2=|+g;0#6ZLUD@Uv!3*sPUcs@(X}kzHZ!~7 zw7zFv(4KI*dJ++9PH=*hT&}-Lm8EH{#BDg$#T-qJfjtqI7F+UtOEoRo01Rj#J4jIi z?h&vQ2B$^L?5=|w&VMnlr;l|n+_%{J4I$;J9s^Z|pQeKbfowRpQcGQTTis$$n@>C1 z?z(`9)Wm4N90+m=u%g%6<7$9+fIX)^r!hmTUt7y9w%>Xbt`yoS?bZ*nS$_fzM0@{ja%7-NtW;X)+a-HRH z0TB+f+TC&+HE}F9r^Ap6Meo{wFlAD8hhU1YodC8Y|3FQODBK_DNV4-YVeEA2?cJ@7 z=t0ZJRdq*^HdhA-ueB@$+Ty_ts zyk;}=FXB1A!c$!y!3E1a<9A=&tkRotIgOauesx!-mn_GIM>1z}R`B5D!0E-Y!Y87k zbDPT2FWJB21$!A9SC;sI70$6@7lGgIFFd|!J6n|*?bx&jSt$dtaW zrUdygMjD76Ivk3SpuFMLsCO$jc8qyP4p=?|>613e!#og~f&~IVseBdYgz%!{&f$o7&{fOe6HMGD|@~5qmZ0}N%{In80eWg)tQ%ul}X)e;6#kIJaXd3 z0ek$jmQjyok(L|*W0LrADIn$StuIY)vEys5oyX=Gs<(tWn6f;t7l;;ZewV5$BfnEdh1 z8;&Caw(?VbBjh<9za@Vtdg%kW9@e)QnNOR_;F_JfxMb6z$(#GT58fXUO3Nq)!sr01 zqLgFWx%T9JkLhc29d-5opzI7p2p4V{viY2*woy2Y6el4_FHy7phI`0XjXeE!IE)t z*}?;Ku;nC9eOl?%qTf3+HDQDddb~TivOinEM%LWjJKPZ=RIgb$VQw35?9b@uB5{JL z5|KqETm8Ur911nV_HDb+X7)tzOha#VSq{`n?T)2x*A+jnTUuaxa<_+HQI!0X z%;pWRX`xQ$`@=Y4NKWRwpyMuRF=P%4s+PhgXW~lxu%05Re_r6TFo=NaKj)`iL;)1gi$v zwH^BcP)P~W<$F%_8w&>#eaZuTet~c6q+hGF)^NpZLSfy=h?Z!J2RrDlq$j@eT+pgl_sE7!&Lu9Yh&@_ zsO9*F36E+0rq3f&376-?x4Q>^q*x#IRXiu``YkJ(q+ z_$vW+ugA6Ceesult9~HsG}v{BanYdlV7>vbQmZG99m}lyIiM#a_=2&e9xo6l?yt~n`8DJDe(FSVps%<{F2s_rL)xLnE zEK0xb2|B(kzkuJMQ`;a>ZJ9m1&_sA{-CP?a?BwS*C$di5x`*#U_ZY}tLd0i|)+Qw= zLqpwcv?@_s6SKv8*THUY^KJ{VFX?2EnUY6KIK96K}Z;d*ux_{NSgsot(XbTpWhwawRzV8sD*pB_SbnKQx@P-yi9PzmMnjmPLmi zF|dZdo3v!fe)kQy*rPeaIp-JI@jNai=~Pp=Z1JfD`lhr{)te%-d96p=#qg|tS0yC) z_xrC_!O@(jA;u!8(|QNoH;}0tS7~MGi+#9`($YMM+rjv4k4c?)if-GX({DuBuswd? z?8!gOlF)v?8NIWKK8F8VGq-ju^{vY&+$-!3GR^4HyWu9)n~+y&at1ukI9Vnp5l1$R z-w31li-(gcMn5+e=;Vg55VXVCcZsG-%eeueu?PW&lPrFfPQGf%fn=~m)HuoE8{{v? zHTomlD`u!?N6n=ZwX@nt+tc#uIN$AV2xRKLKHXS}W49a6;RWd z&4;mUf~nu*N{z3bmh*pMR7V5ihQVnbH!l$&ANVEPsTebaMh zPCRh7>uD@lPP{@IKQ!unbqXS8Wh!$O4lHqXaI6!dEHgW+Tz%$8Zjbpbq+i?ZLL?K; zKfD0W{wfB2L>S!jpV=h*jy8+_oaUI*54xgM2{=$uEheMCbn?^--le9cB^DNj5BQOL zTOB#E__yyC!nBJ=4!H9zm-W5B)5m}KaLx*Hfg89O?;t;v3eu4Fe*)hE@LdMRAEdYw zAFp}u-*p$~09H>@QWEGrXl(tff2d0B*F>a^YurlV>08uW?|;gr{_j}{{!6ZefA|h! z;_0;y7BN{ZvWktLq+SbS*s!$3zpQr+c1>W?ki4ufq__!P39m3;jH%|BpLNK))?w<+ z67~E`ia1QB2=2R0|4T0RPau#vB_`aZNsCB74!-{U`8yx*bXffz6)VD2izyoa{`mid z!VDHr0uBinJt1&I0DFbrvKH`d`nh~m@_t1H5ng+DFoL3isk`ydi=)%}cbX4jyInWY zaubEBTnYE4Wo~v)C~-L5ojDnViA?jq3KH$rEPIxP{`_lac|dzb;U+UroJq8= z-vEP-<;AVJ%tq{+eRnSDMZWusDC;O7CW?+}298^td^k#1CqQSW?^@i65jF@z+X3e$ z+eA;Ijdb^&sNQFfU*1z@|DX_p_ZejNeII@-wUK5{jB8-{V9CzKjy`zhSblfe3e&v^ z1P`dl5KK{rr8ia=txs%ax;iD$0RE+LRy1o*X%urjG+6 zybQ0SG{O|4a#nqcbu6(aTqyY-=`Vz9ZQSf3~uSLKpM8G{6 z)q{-GGBEeM)k|arI8J}5WiDRh&Cr`-M{^CZO zi)?N{)p*BbuF9%TsSjQ*9Rr~&xaly|^*n^CVo1oz6h4rzy{#|Oq|ILjr7+jd^oH21 zir~?$ETNr~lh*41sgHR{GeuRDvV)!;#B_+J2MoNsRqvb!!ri0uJ}zk5Yve5yV>}|MR=>ANQ{tneQe(sG`kFWRu0^A%3MJihYjdtsbQWzi62iz<5A$`i+a zV>^Y+7MLl2XU=;Mrr$piAOqH{??mBow0}=eUmnBlXkVre;H^X^81-8tprBA|jxJJv z^!U}QccPHLfssg~ujcNX$Y_A41f+7WKnaYF4cFj!vc(S)B^U?f4|~{#4($Nyw`Dtw z>Po$%gqLNp@U<;vxn9(wQg8d@`QUylIRAc^?WyX-3!VaYK+SbXHQ%2A-V(9?pHXQI zLOcHRSKHET{Oh&Y)KW8aI}g1hHdOd>$?{SNz;p9;)L=@@O{D>oXknfSu>KM>7;a7# zzCnQXU~;TT)vtP@hKw%cPV6(sXr&f%Gso~2bjvfai3B|mW60FGs_v!&o{g>DBGd=5 zHf?lu$ch#ANBR?n%gRhuq}(STS6J% zeBV)pIUs_sz68ruTRFRb+-pAStm1Etxv)tPjjvpA1yujr&3kNTiCkP>O_1XttoqxR zv)gz!hUdB>?jz|KkT1Y+^-}3&=E+t?R@ON10&FI#_9`J` z!yE}rw24)ffyCCP^-K-~>up7-gZH(P+-HwEkQR@?A)gqch}k#(tOk*$2e~ekqpZV} z?@v+D5BFyyPIj#bl^t%gGF5!-G!1P3Y&Rc^SuagDH4KCDg z%Sh9OJ7ueFlJpL{_7IW~iQd-WsMFnSj>Gk;$V1UJWr3_;QjG< zNG*1f`EY(QME`ZJeK{#>#f3eV!b@8gBS?VAYG%Q)(Y_}Kt2hU5An^M5Oy6>$c)hrC z_wcpQ+h|HpTw6?81yP;BQL1%e)upfBDYObdw8^y>7BrWLc;w>9OFCQVa-3L@J{E?_ z=-Lyf6!}_2MwL0-816~Gn9-MP%;T6iVaupN5I3{30q5SN`xm(k! zwPDq^gfp%i=^u!?zqbKpBBtMD5kzjDS0bBL)UY5h_JabZ){Y}2W-tD;bz`B<&nBP0 zxNX8Vr)?3?{uvx1kC^6x7eBvig{L+dByu#>RwlDainFa~@V@BsF+uwn73q9!-M%>Z zTM!~Gy!L_`T^)=F0AH+0!aQ$HMEkHX`G3K*5aqu-)rewTXa?UICcHbL>C07g-9$0n zlRJV=;Ip7(WRHM{9j=IMiZz<5-P*X`?bw$8z>FAiQktJop6g90w~Wa-#kzUTimjpY zf3d57L|H4viT}Hyd+_Klios>;*2xvdHese-kUn>&clPoGj71OvB$m@@0p zfGwSj#mk!lUqhToA+>j8E$l&FUxaH^Rr~+a#su(crXb(*QkDCoZcUe=IW(*x}zC* zekh*1*jH--lycShld%BfAH3xG{6zDVT?{=cl_0%?%W~h@f(UEWWcg+59j>(ETH|Q8 zq>EJafq>#a=u0tbyf3ou=~Dno{4O&8bFGv(P0iR8=bA1dF)N&`V18WhImUOa)Zy&p z8`|1S!?V~~H=&m&ZfA`*QL7EV3z56veWwKh$|tiT2uqsI<C*WAXTKtQm4b@f^%H7oK`bcT9ddk7c5Sh7t$ z2Lc0UF;27ZWPy^X?mN_%5vp0V_9*_CoRd2kUA5Gn_)68N6364*T4M`lvIDSu4L>d< z29?%mAgn5Go7dfOxa1_)*%KG-Jh&t^#_@@uY7|}-?9g`@QqH=jn2^;9WCbRRMG64j zJy^bX3)cf%M%dc4Q>LQY-m5b;gGqF-HhnbiW!U#{IP$k9P9<{burNK!4P4xmMX{0( zTF(#spKab9lbZ)LVd5@2%%XUKlBz(|zOoU=JqhO8{znP7zwn*JpHh1yUZEi@kRiK0 zk!pF)r2Q`Ga6#>2`sSfiPaCpB*o!r8aL8WQ$NFe z(VPJFHF~Y}-w|atLiK+lN|>~CFGMuS4iG0$6%;I+zTip0e9YahxQ00h|Ncn2{x1`u z{)?YJ`g!rs&zUwlvKKs)N$5SG7E|ZR@ zO2W>0g)0!oS^arAHQ%Q<7v-V{W4{PPS1R}^pJDTrWINn+LE5kD_l7CHu39c~ffDS_ zgO>OP>&oZehk1Xj7@9Z;GSxD#Csajm`=vnizEtW!DI5L{eD^TltB(EMX?5W>^kJ6` zqTH60m{Lr>sHK|`H9Kq@(ou8bl1m741XYA`qt@KqN-tm6+c zi7cBhqtM&^pfDrUtXW>mzkQ*uaDC8gCWWFys+BQe)Bt;YFe-6j@b+cc_x9qi9yuf# z2jKd2qcfs?uY&$k^UcaZp@hK;?84yWU0y;CWfT5U4|i79ql?UjT?4?oB3x|-{qUHP z#?y`|SH?)@S+|VADl7SJ*3l`y7)*!IG9+I~gRvej8ozyZ%zJY*jju?2UJz`M0wV`O zfX-|xQEi9HBwE+We;ct7jn+kPVDqqO8kxpGzO6t}`Q!!fmM?g}nr-|wCxaTstd7Q< zj~HN-8|C2Opr@CY+1`i^tKozIECU=8HwChS0Jcw{8tikZGNiVT{}i zZ-9`a5EhI(|DdLt9Jtb$A3TBu9xDxuP3O_kmxSfkduqMAZ+MkricQ1`S1UEXI=PIY zt$8r!A4oV1ARx%!u+oL93?r_eY+xS0(ELoL)4v ztnjq{;k}IMPr}IQG1cQ|03Sdb?CDp8j`~?R6OMCvwxn#tio&C4ste85<0tB&&V27yf$c7G^lE+YWr0YibOhC+Ljod?wpF%TE& zv9i8ysrE+j;6D_4jNo3;+XM>z@bQ}I59kmWsxSY1VfA$FC5YOPv5F-R-u0r2>`)*M z;63V0ks-6DonzUm{Z2m?WBD6RIzUrX$)uV!rmKoxNq&B0okcn7zxaha)5(At{6xav zzlUF`K!I9;;hjuubDqqjvL;+gLbH9 zG~d5Dhy86xBQ-;FhM7|rvpr4Qke8)hbgqcxG_AGX|2cWUiBF!illXA(qz;C>GB z3<^>aVPb9fb#oK>s4fvD%#((>TZ9ue9g%sY#)b#_LJE%-l2O=*YH0YxjM|-L33&T<3Wj%WMB}|5aovRhKU&k_>tpN=5X}p{8?84+Pfd8X`d6o3sbCU5 zViV7l>1(Ba4@m@t`S4(PV zin(|`$H_c%7WHDt8RKXn#)J{8L~+ALrVFu5_tVnVRqZLEHz(9@n21Qme7=)$pzw5v zn>BEZ7n6wkQn`Y}qv}_4ylM81exO{m02*z8F4G}A{eoP`-x?#k)EA7C)gpCkBBEMr zHjHR-t;&6;@0-`|gtO&`^*N;BZcu1&phpFTZycG_2Qb=uXvut?y2Qv zdSo_!i$iMBl+0BvPLuZFy<6bgae{YzFq9!P;4^A{XRV5 zKg;K{_0aX0WU;O^U;-U+ZA@C*Ldp3R3!-a6l`5TQg%sIu#QZpSVcoJo zmf_@`i8NPQp`yt{C40{r~Uqf67@8{2@fzP3}nrj);%_*j5 z)m(J=6%K^;i5Gp#eD8?*To{N6t!+P*ubG^qy*$#CQiVou%m}^1v!7g>d1fzp9&Y+q zi#M0Cr>dieGfQ%~LSzLLk(Uw0ns4N2mCdMeuRK-Z<*1BbnM1azH1^m3EQW7=t@O54 zs*Etl%#_xGvcel}rjAc_Lw~3|Go|dU6z5fnJ7)$$!VP(nVNw&83NaeT@`kUMa+x)= z)nX5BGt4J%Z3=t1gNM11M3W1PHJ|6`9=VM0_uWn2vM}fH*$Ui*zADG9ZYKH|uDHlo zR75fXh>kqv4;kxIiy+8JE;_@X{5cts@p4UtCxiRNidT0z3H|3PYEc8F z0@23xM2AiR*PkNN2fq9^RHXs=mZj)Ny875iryEMhI*0%4APSxkN$Z4yR^2q~t-+ro z_(LgL*QI4;Y=-o&W|3WPPE(~(%aMP0lC?-t9WYIfFyZCEX>Yq`NR^&B+VTr;HYPWa zPu~uo=nx5Gk@}nqndt4ujQpKF=j~>$MTE#`twaaRlW05Wkc<>D zJSKrUN1sP7gp<@~ zZra%4q4NLIA~x36N(@Xy@|El}p`Pfd2Oqu+{drWTt0jCJtClqsSxyVD z#M&8j-Fn%SR($xeoh!yAR1P_0`SRIV=0_$2o{<86j!LRE0p1}F;T1@?D$%o;kBEqn zk(Kodl&T(!FDl~1!NEC9#8d(w%{WM+EML&kDtDgu#p$DccN76C4n69#xVT={Mf>B? zoP-wDqCjK3+zo4+x=y`z<2yWCqm#x)L(z?y9(~ic@dOEoyA%(`8wp(yYHzaiy!SpN zfu&nlKn3qf#rKKr;L6pu6sM}?uaX)1RIB~zTgEeUlE?t{ z)E)msTJaX9Y)=e%$83=EL8zGRE-k-ufp6@6uDeu>S|e?ieJkSiMmg`BJNCDT9OUTg zWe(%(g{f^!$yy?$#v0srj$k1OZ%$B$-z8UD2-mtH!0BeKUU|6wX9s`&a$fbW6OU&n z4fka|`9YW5B*DJBDV;@z;_VDRbMDDobvCxWdD_!s-Rj>O#m0V@hj4ZP?P4XcBp3(d zeIl#^#-TsYh%i+*F_jsEkn~%+JhckxbS-4#Z+;VWd~ac0Q#JA2rDIU*EM{9+;G!`S zZGu5ceri;lH;ji(4T*_K-q%e%<{>pc&H9mPoV~iwd+7B&j9x;7wo(G&1`j{}PC=#X zuDrB(mb@X+@pR?X)vI`z6X>%ib_(BamZ9vK3Z?Vg)-)+U$P+y%0!Mq=`)J`8P~Zi` z6mp*yli}8GcCQMOw=m8MG+QGcB`K1jLZ56%V>zNdtUlFAS9~*aQin*JpYeoopD&&6 zaD~hEsTIoGZYN*8!*3e5!+st~t|Pn|EOhmdPPKoN;r=kkw~GM;yY&3K4lq_kpKMXn zA*e26gCGJ%JF|7Yf9et+LPl7|f_;o}E%}?3o|5a@6yz`^(nFOO%CB z{c205{=wXN8%EXluQiRkEjgUdZd8oK8qGOw664%RZ(J8ZmU@B>Qlt8$#Q3?cQmh~E zMtpB*s4VB9#we@oW%eRv8BGgX=7dpvjV`*vUapacbf@o@TIp0mt@Cqd^HFT zGK4|blDAa6SaufKeTBZxPfi+w#%luHu_3DAJnDV@K)0H;&#(H;lf3wlRklJ?Cj2mM zp|6ko)G5%qs&Lxr=)FMsNP6RDz!h}i0v(JUVyC!s993j*lb3lEY<3cfUfoL{at@jZ zY@=bR@vXMgUT$yERZHoE38qeUD?T=XzefgZI-3ld($bv@$jEN4nf}8IfM=DRflM~# zf%K~?x0Yvh?Z=<^DW0Wfuv*;8gH-YhH+Xph-a4su!dy}2Lv>-&yjiq}Q8AU< zXr|UogtW3^U=;!`V|xPgtd}$_Uvu|OykD|sozO>M28d_OR18P0H6R~XcCS^Rm`ZzP znkws@y^*5;CD~Zu!qj0G1MNKLLwC}v<10-aCdP;X=kaq=&imLGO+|ka6)3lylvMu7 z9>&WK)|T%dNP)cAo!a^l_Bsyvhe-eu6+$9)_)<9fEV%h~>7NKmeq7m8RF<)M+rPMM zIq6WQD)(D?z+v=>qa$xLr>RLc@9o=elCj(ifuQj>&}h9%=^J*Ckb+}ja&E!BR->xA z_W5b?BYs=0OHlPbcSOBXofY5FkdOpngGio=TV5Udxfp75*4h_ zMg~SYW*VR45TWaFN;f;V4CR(;PmWmGvr7+3)iF4wU5%V=s3npi`PcgPUfUW ze`QqjOw29(23i3^$7#T|QzmRfNB?We?`RJb%QwpWroSi0OqEt~SGSY4A=;;YXQFQ+ zR;p}dpehH(Wy)Imo}bi{#RsXo#`|b%I9Bk>n;?taU3KT}mCH@Rzge6If`x=k&MSYz zwzC)tt0~;=_xV%8QOkItX{HyQjqRqQTcPAMUt1cxGQ0NFTAhS8(aFPZFM4QI>7l#i zTnWl2C@#-+y4tHnu_D?o%?9-|5rKB@&!$~#9%~MReG#S$+Ag6OlICt~DL>o9$zl|U z&w)b>lg~N4(_TxSkvhc zm`xx%Qd)Pg?@AICkLK{_vY36O_6rftsNCd+jb}Ugk#5@!nwv^IJr5k#JN%u#^a$ut zt=5;hkT}(GU{C%QjdE~FTuKgDXzXF;BU9e{tt@Cak(q#hWPCDYCV{l}FGN~D;mM@v zct28bg5un_tDCNBiR9hSpW{w4^fW&Edoa@KXr`s~WV1UH^M)-b;%#kbqzL$Q$0la^ zu$m4FZ2Hwx_40fP9ZjjThoT5hW8M{Oe#$m~bimt6-qfo05ftv$#5VKcpWp~3>Ng24 z=OHZgU_3Z&VUV$gW2g0@jPUq`Ms9|wWSK?AIc^FUCgMsvYx3^;9U4Yz1aZif#0rWG zY`!SoZ>%R%)n6ba7i$#VENl7c!uWgV`xl*$z3wNLUY=ZXeyZtIso9<9bWThq67%3) zxiSsz)?gZS#{CubZ2e? zp0_g|Zo`x2FzEOkbUNueRkV+Bd2&>#yy@@DVWojVuC>H7ajX4VRIEBJXS7e zkN2kn%eTA4YU=71vHxNuftKtN$8EN|=T#_A4+f>h#l;^P8QQ{iS8y#qRNf$&1Y~Cbm;$zCPZZF&7a0e7SE%jd*}XKuFI2`^PJDZ#HsydXfTbF%|XF(KW_cGxMQq; zZJcCqCHiNU|G)UD$Fo07J@p)lb1B63ubt^NoP&qOmB;$xfv2fATlV!B;vJDN7IHP+ zVTS`Dgx--M(7IuM@@u!;vHg0fH0I7GDg5I$S|`u0ANEHNIz5V*+U_#BB8Sn%1(r&XAYoS_m1e0!C3|C7ur&JZRlm=gXcK&3n@%!7T zJht0WN2Br=etnUny*j(rIjJ!ukMk#O__z?r0$To4dbZh!wqqPBj%Vs$)ds@{yc|fD>tyHtfD*Dy5VIUV9bU`GEe(gmTWc`<8bn6@D2mjd zS!x3aQR4K5_?hE~OOeGXNm}qnm7cL19NZ3oGn;GS(M(u@=YAII&?o9PMh>TDccVu1I&EXK}Jtu(?#91Ac2zk zsR=VDyOp%FEaqbS8wK~z9u;p?2e6GQ=ler$4s29IK1XI_1r;~D*uRP9kd5Bi4CSwE z)N^Y2!oF9}dLsr*MZ1|aiMz`@;tJaM8OOs>kM0KW z2wByx4iFR7`+C9o5&&U+l}csAHoC%ZPq*H_J&mbT95bPvdC$ylWwmct+QB~@IA=oT zj*Rd%LDLT8XyVz7+R% zR4&KNc!ZQNIuBDTZ8Y2o?D#4B5C_ve+xCU%a87zCSOeZ2GX-M9IhV#{>_RPc7DEgd zWnQg&#fX;^lUc>!Zx2(3xiU}eLTw>D9+s__jV%vr=hcKG=1((9c(#Dgn>oM%P-p}> zmFd**gy>Pt)n$YfnPsZ^`v+mMr*&09YrJKLHzKcciJ8@ggw%q1;%M8wk5-rLL z%Nb5xhxV*TESnp9mbC!#NmQIsk46OTTl!VCtN$E1eU!{M8r?z!7auG!(y# z+Eqk~0BMBtYZqHMTmItGLhtC1v*BwF;I1tF34V``{wl;Cq#yhIyK>v{Z8_VO#OjZg z)+T0LgvbhaNL3w<5l1+d-Tvr$GR6;724iylUl9mSP?k<(?2IzE6 zj4;e^_HXaC-}S!l+Uui$w}a(`w9Y)u{Bny2#j5$guxLM^3G+)!9$8IQVOX`%Zo zhvjkQM+vun?;FwYL@oD83(fm+Py84ijSAOr`V6#bP?yljScw~AFuSb0yr;(18G%+) z?=USL7m<^@9vT|zvOn$3ztv3Za=4uOTYYNrF{B0ur%~g?AGT3fZY0m$I7-7(PZgCAumJ_ zhvS9!B^Q$cKJXt*6T(5^ujLfHP8m?mHSD+XaX32Yj|%!LUhrEU3VS6a4J*YPC>%CK zZ)AilTT{nyzVaGyFAlbDxXh(AbP(BS?Dap|n%B|J9s|7 zyA4F**mtWiQ}J8fi}h+bKuK{pw{Y$0&Anw;{e-^<=WIJPY7X`crl6{6zG}++G^OR; z?x!=JKPci3%cq;hvAlZ9g%81SQGyvunPR~c4a{BTV)V`RPX94}7XPE1wSlCI*Y(ygM~!H)@JA=6-^vqodmx){kSiUXVmjLzFImrZ&tMIV@2E!=WuaO<4 zUSl{k?TR_hghp9MSi9!t*0T?;WBXkNRPB*Rv{8Gy1#b4|-r_Y~n?tnDk=CA_ibJVA z@jma4!z+4rWTD&rWV(l7p__0Qb@M@PNcK@76fZy(1SPk=Xs`7PIC&S0k-?? z4=lPwU=OpW*A3-dmFSwC7zz&xR29~KaamyG?C74Rs{R6&_HPPRPtW9r{l?*7o1jE+ zdQ%WJi_BdBYI-C0ASyDXTQi?C)W5XW^r)PtPpE>IZ)^9#tO@NyZ`3EF`@-AEZMW}P z1s_Y^)BvkVo#+v>Ch5i4yXZ^qg#c{TG*uZS|t1L?+xe zn2!0gFC0hDSn>Ps7A7yJNJV|Dt=-j#z5fPR(;dwT#M%Dgp~}&!@!)-jjnDU#Mf}JI zw2sIg=-oHyz9}OsOCh(1HP}4#hCnCoJ&1t-ozKM{)4zKA;tQr>+xy`VYFaamAAM7I zX)JMjdn9nJUg{iz^A(gJPcjJ4^Rg#w0{b`Q~Nx#O*T8(&O zHa+v;xaGV4cxX0bg+f4-71L?6 z3k9hKA9=N9zirlLmRt7OGtae?iHX5`xc+S*}UXyq$$DwOb*$bOst;_R0)rYBzEm8|JmzvI) zV3(>W33+8R_PBb8vW+mo8k`oC5;r9F=`N|{od zEGl{5I<71>a>U8$rE6U4iVD|iiw@jlGUg(c$gM4_jEszp%}v9+G1#j zG;flu_)Zj@v*g);YfRKvHcR6J<*53@VLIBv&g$K>D1QQ7Oogin-&a3yd15;@QVd6+ zNX*~%O-R~NwV#cb_I`yEbeVW#&RYoQeum=1I_GCHataNFG`WR)UIATQ*1oxw+lHDS z_|jyJ0ldWwI0h_{HPq6SZGC8DV5*Nw7=Ovyc(Cgn=O*Cg4-5Eg*F-&3Qb9874Xg)X z=gx|l~+QP#$HJ;AF>tAke3i4i;miM6i2NV65yf&~bnvI=^T6wx=dF7*KA6X)xj|o{Q^g=%y+%5n4Q*+IjRMpzgN^A zgd^)lW0uUUpC>#Ck4m46xw^)f6?&qoz^S#YMRuPYC7*e zY7;EA+g#=*>5g(%FcoSBTfjB4nTF{qjy?T_2YIr_BD*z@`o066FXR>ocus)|b}2hA zB&{zPE%*`ixB{!uC;r#N*jEFkm#$Gg>*;v`i(b1#iM(nkogEG+!FRV|Gp%!hy!54d zbwr1__bKwKRi)1Hkz(WW?M^;Zp`*jYnf3L~!(BuKUpcHI7&qF4n+FM6hWA3&Ik2>r&ujX^5tT>v^Z)Z_LtZaphL_HJ`aSy1wl z5qBg8vq0)N((~3}IeQzE@wdYfdqDmH!zKy9b|XuZM`~OQGBhvGpT1w^OcyL_qoqf%91~z$rjTw)vn0azNB>!b{#V5d?l^T{EH8RdtytPn7+ICSF5qm{^<*Qv4lZ4 zZg)2}M>sQ?{RV!0Q&XX%b=_5_3l}cftn`b!vp^QecFTjecwxfWsTZ_3sO4lKxkSyz zaM#5wk~X=rq+AL9Zv##jumnWr1D4!0}xN+ z!L6mHwJdhCcn@^OU2QMCx*|7pH_-mZGZLQZaM~-k|H{)Md`N(IUJUwz+q1iblGk9 zgJJU<)_!BE%^Tq;3Pj0|r*Dsr7u>4HqRR^G@dr3lFw%?)l<3KseDv@=J00kg5$I z?y29v9}M^593X^t0wBYK%yk}wJmy+(Q8?kBTe>kV3M31N@Uw;TmC7~rUNtCpF~Ew; zJPrKrO|M4VWZg}-K6M^PyLck6UCyIt^vR@-)6dl5#a!v5+%&}n2-O60?ts{p*HZ@I_+!0O!1uE_*iizN5LHzRynwJ%CoW)B4)a~J zh3tv(n+)!?#y8HL=6_gnFQ7w19DtAqO*EEzsXGvbf~J-AlGkU^yq-ZJfn6(ceK%06 zE&%${(sFnZ2my631&N1-y>x)I8>4xwZ`{|ykqBp-|MC7b|7JZK!=s z+88>s{}!eG;Xk3&DfZ0uC8^teTRfzlbDma+{1&1QySfy15*o5 zQT#1}>H$)gJJpYO){=bm&bzGp#X?82K(?OuW47}4 z+NwvVH`?dgJ{iupks9v>MXEO^RLN+o8~{MxE;=eMeX!AprY-;OOo4^H>qTm<%*NpB zN>-J;Uy5%$Q57Nmk`jwT5%yFwP|{tNqR9tGBrBEO0!gZGcq0E2J}QkCn30?eevko#s9qA~@SU?R?E<)A>V4OX`Z z8DDmU6$EEcB{#T{KqzeTC41m-f<`$m#@L@HBwS1m*SO8arQm)SqQbK|!do|QzGIY4 zxr?QctzO??S$wl)=F{+D*d!$<$A4r*#ZHIv&0}w$2a|ILf_6qmObmqX<7Bt}(%3p^ zIXGmnEM$4T?i{g7fo{%S9MRSpE{r>xSQ0%1useAU-A94DxXa7&1 zTD&^{=Up)0G9&T!WCwEcL+k*G zG22Tw&LVKh4~C?9zA86^jJdrfpm_JsW!0Xh-@#U`KEpJjU8c^zjXUVwEA07s*`AbW z`V=)jg1n`EdJ}x1U{yU z&2V5eoIirvYB^DtSjxv}LjqOGUyGGFOH6$)+hH4*LMC~1U#Ri2zp2e6kcVTKUSZIC zi&zUwA6Nhh*X91ZV+KxR++N}YvJ3a-t{A)Rt{#p?mGNDO<@cjl$I!XYamL(q$Hc=f z{Nn{sT(2rXAjxyBKa0u^{9*0Q_bRpxr`tCn!B|~;Xq^eStr__o@Z}ULtC6St!?~$S zQnM8GZ{{9cbt&$@z;48V|M~6UTKI{XW#m?`FxG<8*74aCIX0k0_U`b3Mi6BCW80(VX4dKHQpJtQTEDYXn}iCZK||QR z3uEkjb!zPeIPcm@lCCUSA7-pWwpB>K-LzxeG|52l3ve&-sLVG^Cn`jKa06OsDsA>Y zn^3O`Rb069yQF$A{Uo-amQ+x+>rz~{{>r!5F>70Hjc62+(5e{pyvHRCriGc~OEvcX zbKT4-=+ZGWaBv}O%y+gHg;>x5JME;Bz%N;GW8jhg7Bp`saK~8EfG;%ud1J43z8eqLR|-xRp}k5snQZjWeAp3son&rwT@N-wh?Ds`@=V$`DZ`H zphTOMo0#qNN5!gEF0(@?71yti$eLp*oZcpK+`tBA$_Yp>P!k z0JEiCQHiu<%PFjZ)-9F|d@@+w9g8I3BbHT3oT1kpI1Y;FT5$D_c*GK$5y{KIU-~Y| z*9CrjW2~H$Pu6PRWWWqeuLp+_6o3otysM=RM5l{|<#sQtO!d*;PbT;jH}-)W1Y zg2>dxEZv4dIWRMgaj^JjRdLj)m4<`fo#o;flx+%r352~q&Xq}qcj|c72Yab>ST6YT zp4~q>(B3v2`!r!>yy)7&986Ii`~Ty+E-iL8-?Xbys`Q4|#;XM9pm=VnFG1b|@7n^l zM`P+xDim_Jl%SQXb`H*AT^DPa9YFM%S(yB>_c(mC@dG!{Lm)%uXOXtw-T7|TIJy=& z6*h#i_!FQ?>9+$A)I{ykZ;59hKuc1RNPo>`4%R#-dFMW1eU|F>G4Q*6W?QN_l4QeP zKwRP6U-mM`DcdZ#%+H%c1LlmC4wB1@;kbk02nOA`SuOLX?~9E@Gl-Wk2B%Zd-U5c@ zER&JHLITw{wr%qLKDYu4tsgBaNMD&IzL}>qrMbFAC@@8T4;NL+KyA)X6aj!_h z3zaVhv1)@lu*wN323^a(v@(Ggo4$QAQF#ahG}mZ2tGR#$y`oJ3bkAVJ>W5n|n6S$f zLd>XE6qs!mfmbT~Uz z@Nl8@7lK3GL+lc2$|@fP*`&Se5LZ4v4tUPuW`^67?V?n|6H)7qA%dy1gS>I>oS2|m zGq|+%W4iHx8^$iq?Bfw|Y&6)qAK^l8q&0=Vta|p^(8l$I`v$%eOPIu-+L1lJF07Px zjj9+3oxKddvF`2?&y&s&wI7Ev6YmMzd32A!wyQS4m!jNcV#IItrLBdL2~X=;*Imh` z!`Z~666|b;D<6(i7JD}J*=RrC9hTISghL+#G`iB7Gk zUR_NQ>d*mOf{dL~>gE!(5L12S@S+oHX}xF*rM26IcQF6z6r=Yg@z!Sjfi65{=ic-3 zV8<6%jOOKh6;N`kLr~A=Q!`Ws!3l) z3NKy5_=~{=oD0IT64ln}jroNS?pK(r;;3?VzHcYm-UwJ8y8P~@x#D4iS4=?{Ypu@k zM`lf-AH1R`#iz4Il{9hf?Bv!=2aCGNZxS6_%-44c@u?q} za%kzrQKU+N1E%R;!8Dl15CKShiYJeNumT-9&hBK0z<^LmGv#m}FS7+29Y7@j@HyKD z`OCNJjs-fI%H1}^*lC?bw!wSA;ySG-c!=P{p=4yC1tNMs4d(|h>L^X)H5l({0{oCo zJC?4?Bt*|D?`z^jQ~8y+D##7RZhn*U69u;6eN##9fj}f*px3h;7H00ajnruqdM?w5cvi*7o*aMp{_(jDh7QE&5WE`I*o1eZ55j?d_ozGG>Q%;8u~cdtQ~jEF~)e0^-TPP z$+@hjpGeKb3J6%un1C=pUbzNkA)g6Qi{K2mwB^{UcUO>=QIJCCPY+@ZU-Nz31zKo9 zDBuWmDf>i!0Z*xdKBA#ZDo@~ij1N@{&voh}ncEEgiri6uz#CRF0p;(lhwk*L*eVWN z&$Y#WP5MVB`gHX5^Q5`}C47vrJFyQ~?}WZv;5KOgMIg>H_O)M26_h^=r|lUL?}Z`i z>OFZ}1WKnnC-j~Mb?2&7+vy)ebrDxI?Q@n#{dwB#EC4BOKB)Z;yt)yhowAwbW^U4l zvt9m)p>fV0J*SBDT&2Kci}GFX{1p4zkGhm`^Zt#ggnU;=lf4&!0&W~nQ36jx*(r4K zhk&9zh_iveMhcnRBY0EpFqcxziM=7KqdxFt>v?jWDw}Tk)h#_Aug!2}~>vx}##x_^^1kE}2iPg=uDDsD_rKKFT-x8Vd>HVPdI9 zk2uX;*aZW(C5aCgr(6_g>!alYtzA}PXrIrU{B}+IX~~>nq#R`NV{aSCN|2$s)8Y@d zk~~i~nW82$@>-bLO6B(^9d#7}?DNd30_ZndmQ7do7NU zw_K{fLnECBH?uO*X)~wpPMV3q<UPM$gPp#~(W|q<<0oG}&e74c^c1X)y|Ht3V!hc~Yb@Ka< z?$+KfeblAto7i$FC>r_#Z$X)zaSLuYPzte?*3CSmcnzM18v_rxIY3x}8&&)n+80pK zgVmkTZ|$uy3P=)%!@-~6J;kPff0HDKzsJxW<#rJIP6Ro_R6jP(E-nijDO}Cz^oN7d z!|v&iIW&^4U~}E(VRog?I@N688}$k!Dk^x5jE#o_Ej>?BeZSXwHX8XhH6=xRYs1{? z2&!utYP7N&dDe#p9)a>5yCpLgoN1Y&KG`<--hHZLzC_23S;+okfWn&}k-p|cs|~H; zcQyfS^B>0AYEHISecliLSl|X#HT=hWC>-o90e^`D7`<3V%CJ0j{xoLakr(U41TX); zW{!uB_cz|3d{tKx(aGaZJZjuf7v^A8_EKWG|3-|m(5yBZdj4obVHqrSICC#F>zD%? zUV#kwU3vDiDVQ2ks*1ka^7U<6S!<8-*>ft{@e+=8`xp-G4&K?l_F6qsR7WQX7t5%9 zZfj;vS~svPJS@Jw@~8MeSqD8aXWhD;GZ`fr-}9lzpuVT)YH*8Zi_R~Dhci=CpfQb` zcLrH8Qme|YM<>n>JfdNh)>&S-4mA;J+))>{>}Lzut`cNe@~cU;YZUlF)#Nv37PwUp zEFJh~?;#9EC$sq2>cH&+I74o*-*PB)T&$C64qQHu$g)HCno>s%=NBh#MiAalGNyo} zxPLI>z-U|$J8n~l6FQ`ny7o@g&b?Nf+ct(fD){Fdj_xULmhuRF4SD_J1C9GMX!}!> zlP3AD2RPk=?Ey7Z!Uy!Uan;L?P(HDIjjCB)(N@Tmqc%NS^76iO*_9!Ncb^q)zDt`h zkLzI3!C#Lw;gjnf+1)~u1sDBiX4id#6L%}aAcq%0PwK-7K^CB?ff@AMy2`o1NAOfk{YxTpcT8{rxzg zNygebP1EjWd+`5`2$FyTZ8vH*wZUXgl;)5R;E=P}ZTYXqoI4mM!@oiG*G@pCIF{=A z`w@6<^)DmlU(W+2;{GpKBDb34)FV@GetLL2vsH3%LI>-1eWpVB4>=PrNsYPqL5xb)ijU=&Vy^!L;A#y?q}1D9i=CLLaPmPPtTb;`VHri8Y62)^HmTuwedy zCH5UqvIk%3!osahI05o6L>FlN{V%@mQ_@F>|` zeidJJj~g-n1DDkHI#Vp!J@n7EvLA{1)Y@mKmI zM@4OK)eoVoXslZ$E-9BjsQ$?TJ_{g`t%u~*mxtKfORAt^E|uAS6DzzElD?Kz6os=U zvDK=JD`p^}aV;xpn7uS{USz|WP%aA%ul;Rc3@~PPegSKfYy{o~%;#_HKl5v0Pd*Xr z6X3DD3D(nLH?A9TJ2aDK3r|Bdz8xug64 z#1MUG3Mk#B+=d#J0i45Osl-pxmOcbY3D(<>wTua*o(c9iU9J7}n_vzN;I34^pQ6my zOk0kDY=@mri&td-t^R#D?g)Fff+wC6&MPGq@vd~_>5ZWa=;6Six{-RDoOPnQOZEiG zO9sTb?UVIT`xK<8<_|k8j3Ml>HJ%5mDE2i!T^8|2k4?&ieBx*bvFDU;mY!st(pp?~ zwy?F+X%sa!&5v@DB7`CKqkXPhUwT1nA*2mz;P4)AO$%c%2hyNh{T3m4=DmM^?V|>k zJEOUXT@DhTz&dmn5N{OH~i4{)GqoI}BiGEXKtZQRB} zJENO&-aJ-&^uI8N#ijolbI6-&4f*b!)U@d6?^f`_pEF=UUc9H6-inPiNnV9~Plap$ zH`X7@)itFeOCiFVVoDq+<%XhFoyG7#hpF?5DE|a&xtp~*bFxqj1d>TY)3u>HD0*w3 zHpl%n;xi5vGYdMnT9^@6tb()LFq`D+lgC`oNrvkp&s>8BY0`Q} zXm%Yju^)NAIW`X-dDpeivBe!7v`0TcaUze(Yn^nft$dgso(w(-O46(;(16qbUIhKZ z%|0BxGufQh*i>w>OzLF+^b3n#;>SIM)U5AT*`u~$OV(rFwYmCU5C`Xn{Kv;99O$iq-HH1r-rRJ?6NKlO82Dc~ zHiRCUh(>DD;#RkDr8=cmjmQcV>7}MREs1h7Ff-Q*BTaeJUT(foIT{O~Sgmy%IQ}Sb z=i%Z3u~lVqKrR3G>6W!!lyuGJ#{=1qb_3>a{4!5Yxv6YRMUot^S4`jv zqW3xIT@O6o>?>s!ysZS6xe|bM&o=khGoG!%XT=zJQ%4GZ;|3=B9igMsu%1A*Ng?VW zo3>)Pyt3&bT3{oSmN!Uw>cSdn$16m$mM*Eh!M!Ab~)Vbpl&+yL4Gdf%Wygm%tp=P zm!65w`A+)Na>|k-<3}^8DuoZ!@8#}`STpR%zfmscZqJR16RJ!TCZcw&{JAGR7qT=? zz!;RY=q@M{e9k_wZ+_6TX+lOtAzuS+QyN=kY?Elmqi&Y0ODqu-#3$lhcRWuavy-Vf z=p0Tlo|>rP>R{zzJA3=X&U$VtBX3ryiCwDTh*fiCcKCvH|2MY_ycV~mh4yzVTkmD} zQW)>8OfNsJLQq6SELD#8Mg@###ZtX3x+kDmdb|+V%9_*Pq)9cnmKYowyEeS|OPSV2 zJ7L)Y_f*3&d2o%FO}v7O@ul>*?Or`C+VbL;r(AGZ z7jGMcecUl{7DsEbM_ebn7Jo}%gvs%zj-UEQ7!X;-E_J5_?wekbMZ#4Sy*ldMqH|1f zpkzPU6>*p53CzW)t1`o=20erpc@3V<7d2oR*|&x-bJ659Tx!Ya!03c7uP!Co9Uk`e?)4f|^FJ6zqoKAg^aVMLMh z23A1u1y_gQ)BlY1NW=>gadJ1QqiwcDyUgK%r?zh}SroZFME3p)FD;W9_zwpiOVwpw zC(iM>2lvg(WRE-U>F6pc!lcoi3wse%Q5vxK@xb;Srs&)?_RLoL`&mQhd zq~a_Gby>NR& znnzaPIw^HpLdzOk8QLgHz1S}GyRfQZJ?GkPfadYzy5P~1p~D9GTupqli90ZzYU<~$ zGE)Y7rX~;6f^W>C1$p0SeW#9Lmka2;k#V-qdub%;k*z6d`tQ8Q4Wehng9Lxuh#k<& z2l30JA@(?x5>M#|(#gl9Mxw`tb+zkoiJcjAG^=T)xGH7MN_Sc!qWV-=8Eg$H5;{$P zRU=GAcd{l^5VF(W3iNREzkN|W(D)PiV~j?x|sHRebJv?cTsqE4ADqrw`-|G4)sKESREcN z4$c(QQ!k9}(ircrBZoGOB(jJnJOd;CB_U$_%^)0rs>YD`gi8BqXrOAw(};tN5*~87 zWn`B9wcy{p$6t2Dl|!ZY0vuk3z=Wq5yMhlxt5|Ej*d3k}l8kDe%-u|{>v&qRvfH%> zH|lnW!^&xb^&SN~Z;7Ut#7wnCFK7gK)J?yC*lqSraGJVj90KpsLs*?~IsZ*7V^((= z=7Q5+Dz`&z0Cjuw(3fn{P^Su|*9oUoDzsY9*76BGGW|rYUZCLIXT`aK8JgE;U$%Kt zPPe??g1&xzDm5NQ$dBS{8nj{EITotzT`!`HX=ZzE_uA28&DQr)pDC^LQneJ`?&_#& zk&|eKFfQ7bzfy^;JlV-);Xc9A;0`ffVbkv5dOxLW#o9NRl0AfO=p0`Wk1?~-G1Avl zR@>b^N9yxui{s-=3NMTW~Hf2Cw`pH#g^tGg_+(#BeCfB@n$PA(K9bxZKvkw zOE<%&$LYiy<~a}NGZFHyROlh>5vv9m9UPtxO0w&@6>iH@G`=hc8&u5;p7c0=l=*zP zQ$~)ST6p{M0lYP<(z}7I`AexQ{`u9{iAP>QjV=>Ct#tnMlf&U8HzQJ_+b!0+%f9WuI$Y$TvGPfIH#42=1yzZK0P?I%(rdVp1k1dfgKZX5y6!%bwtk2}b1%cv3LWal z-u>}WQRAL51jY4Hem<0w6m{=&5+Cu=%Q3z2>!wwT^@F7b>$`^o0U~L}M|Y_n1?H}K zzicyjXmGd`OK$m|kqcrENf$+~5T;9sK*B7w`(~!^IS=h$xVEM;(F@}oucRk+a)8QcR=VpAF%l0h`Cv!35Q_IteyJ?~FFzsOQKYloUYy&aTNw3qk zs^t_8P7cSp(oxsp;O}MQX60&ZJd~G**X-6>+Iu#rV@_!CERs<%v9WB%Vm5{0UH8&^ zv-E{zR+bC<=5P3&EAMRAKd6kGNHa{V;I3daL$4$pnNckXOn*CB9GJLYDtgTh-;j!4+#WqyTWqM=c$RsGzH7c7o;HoxE!hOGUAnl@XB;q=WgI-yS?QOuw_ECt z?6*D{bDFRf*N2W&M=RqKUQ3oq@Gm-hOXy7I8(AEl#r$_E;Dd`)VSr7CD}K7x&i2M(1!VAO|wm3}1Ayg~9HnX7g19wVd{5$YG&2jw_>5 z7&lv`V2gsPo#kt0YxeqDBB${xXC!+?s=c#x7a41COFSoEpS(JvTl$VhW`EXg?CLyb z4f8RJ8_))PgMMrdoul1dZI#kfzsMsjGHh+~KHe!E>S9pOyqup9K28Xe^4DqfK)I=> z8TE*KDLzuf769&_huV`fhl-Ei4SbK2Ue1Lt_n-5Pd(z#%F{C-TV7DE3V4X8Wvrfh= z&cu{C=&4!7D!$Ug-dZ^ZtH2O*Gs-toAg5F>0O2a$G}K=cX4qhDq_4i-yTPuDk{ltfxb-(7eQh>4ts$KwW>2k=IkQ;vc-}(EMI2)(V9RBk=`#89+|9tQAE`kmFy$XY>vS19(!&{k+$ypxh z*h#X%^XDaxFX<9|P9b{7P^3@;=T~7bIY(P{f3sTr%%N0#&;)Iw2Ie@!pljCLL~bUlf!y%~p=eY2Tz3Hbv(JSj2(+KK%hnAxoq-ZL?praX(~W0Ox;Iy^byNu|OP|c~#w}O6E|)uP z)~)ec@JrK&a$Yplm9PAEg#a=G0ClwD&j!{U0J^hjIe;JGVd3~l4i5} z(T$uC0J5P4JJixbN{>3=PVDDwNMY~ryCDGX54R6>klW^$A|;rOcYYm>7TFD1&WFk| z-G20#dk>N1ol5xHAimbVT11$t1-AT*vFuIMt09!()#51}hpGh*2#X-LQs+ie8WJ?o&_{>*-f~7sh?)zH)P%qbiDyku_84EsZjR_~Gbj zZbJa3;=S?Cn(|K!Ll-1hGc_?54#7=Uw^N^83U^D`S=A<1>~FrA{#5Oop4yOXVbh+1 zp>D_7rsc;@u^9VJCge73ofET~e@Cd%c?Dq?Pd&eCkq08E9W&$Ox8}i<&~&3DHCm} zoNMrm&5qprf{U#K#iqdj94t4t2%8E8C69OIcHi;Q%dn36v=Ap5!Cy*e&8yBEq8z`} z{TR|YX2^De_!=EXyCKDa{arkWxBep&OS2~XoA;9yXaHO~g?u_(Q97A620f}#yXzmX z$22nr_84@x9CHX9qKa2Wd0tY@{vyvZ?rxAjUJRErlvc@cvil^1tXG=9u80kGu`brZ z$LRLR{&vd@B&^w;rJ&-VB-o@2zDe~!fQprc9T@m1SJx}utR!0Rg{?Fom$18nrG%GdSbWgC>_8GT;J?a}nIC}rTMGeed zC=9qZWm{8vzxD7e=lYrAey@lYFs z@WaGf-PS}`mMGZ0_M$UfX#d-ryo=tLf3!>0 zLqHCIDZlmn6EM@WhAM6*Gd zRo_!m82nv4HQ%+X+bUk(IhGjza{c+958Zs2oYN2m_st$YlHiXvJ&`fX*a+p6AvVO& z!1-vR`AXNLVxJ2GgC41JN(vo#1n}vp|Jp`1YRlgy=>@F0zDAr;Vm;jars1c7oJ`&& zHdfTJcqiG|R%w|v$~wON>jk`jrt^`(I8RO~E}Hdlz!)K~@@9L&1SR8-hGe{DEsSej zAc3bV_f__IdY4@iQ~KHu2{Utpso``l76$2?)Fd{0HD}mLQ>$%HxuAVWqS?YxmX5Y- zrR#{#+}uXn7)h_Q2Z$O~VC-04nP&}WQi&Fjn;Dj zwq8~W?liev3*Npmowz)gbMO(zL)tcE=oN%()lT7fMlm0~quH1`SNSU&LuSx$6h z1UbRVD7^+Wk__)x%q&SZf_PDUhgB3ZVU8Pgg$JvQ3hxH2B~M}W5ow+FE{ej>EZ(6k z^~}=g4C`Wv3e>gm5tM?;H^s?E?>)h0YtThjUPigkpxm4yl{f#*`!534oF5l8a9);= z_uf$rcoCFE5?rCyIDp+XCl%%XK#dJv`^&E4FO;1Ej?v_Cykq=HnHnc10sb*ey}qe} z-BZ-2y7px@t8xij5}7+a!F>Y^OiBUmH!|=r1tO3xlB2sRR<2N_ME|UcX#rj zW6ZZLyR0{7+%TB#-kqLG-NujD+%I3Lz@en2->P*Nqc%Fq={H&|J z{0TQ9A_K+~$jPPT0QJ6$cww}~cSz;=ZG<4H;NSOSXLHUAz@Xwn9|8-hTE;k1tGTt$*8xIE1LL4_s zk5%)LJn(?YY26AV1wyinWR7152z$F2c4aGXbR8qHtnPoBBfkERIU;@W^5@~iT_^}l zht(iIy2=}&nUcg62&2p7@#GM3nmb)l+xI1D$Z}$bx9yOppb-_Bi}(@waHhw4wd1=( z8-IC7+RDexyow5p01Q_jZd|9Y_jV3<)mz_PxlY3nHJ;#V=*Sx=yA|Wx0yrKK5k8^y z3UOG@1xaXGXucP}Fm6_=#uiR_*?ZNla!+T$z#*XXB=GdU`8ov* zTA506YHAz#H7QXXsl3p6W;o#s0Q(eE$-LHz?tGQ%zV)3-_X}_3G zH=!8V=PzSlihcYaUBQ3MRXR8@`K2L`jPpsVjt}H}{^YFn%08T1n4#PyJ7`uG3O~E1 z&pLQSL3l97uGXAknm#eh7oll4U`7O&;}@}vO-`ncOi}riQqD8g3@0QM)M>dSCv$w} zb$*vH3A4lWk&dnfv6vQH!9M$=UhCZ%?@`++hu9ZP#@BmWGwj%Jkq;JDQ&*Yh(J|(h z$vjA{*y*SLW?za!TTeR*UD~<$4C}t>k z9ZQ6A76;K~#wmO04luD~D%id8;_j~fda}o^#yES9j!Ab}Al5C!prv(uBrf(& zR9ynZ8MKL&kkpN@X~sy68TIv;UA!H@{y|9u?$OzbLgU$gXa2k0JGTz|@J2)6Dm&aO zBtY0`JSvsCH^wLqi$tZwu6AP7;g#WV0|z<&3tz$^$Y9gWWugaHC5I*zR{H_*h02f2 zA@vmk_Fh+@!cLLLj$ytZ8qH4N%MbRqc4_xENss5SnbPVO^4YH1B-HQ(v5I2_6jW7S zZ)GR?UiKh-?UfuX>qb#fJyj<@X05ACx7EoD%O1a1*b*Nny`Bqf31X9*%c!H%=DF7y z15E#u3S9?oajc@!C|DpFv{Q;_)(gT&P|_1rO~!{_rjCf;inYhn8w>&S&t85eVM7Zq z4>vI7qy;{a@h-dHQI?Ym+je$uYvd*WzV|!)XylCi#Nyibr&Ue0I`iDT-;{5bwq<+n zpYI@d_S5rSUmhRaZ<^@Mmwk@ql}1FoR;v9N0VM#;@QAHI@WL4mn?E64d*tzF@%?Zl zyLV-2sGs+tb&n{hQt^2=-ThX^pB(jC?e0~a9*GJ|C5$VR(hGjgTtYnnpFV6ZT^o6W zG-dU}#WjJj#1@Y~$jtk}C4kw)Ae)rv|I!ljX{pSGeL!Gmi1W(@0=ciXyH%!#YZMea zd%V)!l;k?{pcMMYvdM{Jo=!8jp&dE#1Ou6Icvb8K;>bP0}H^$aS?t zD1yV$Onkwn!sc$_oB68tb~1-}dy#NU z5y1YMMAsj|lk4>@Cx^o;f}db@*iJtAv$%0=V>L>Y0sF7Ix*8|n$3qlof%#`OhxVq~tKTn*_x1;l6BDhc zOO}4~TNxD07(OcaN3Q$!Aav7jBsdn~%CG;cxF9y2l92G?D~DI_=okemm9W`)V(LYT z>^Ma=$Jb5JbSgKrtG)jy>at*^1TttgL+FpKWo7wvb?}m~zo4F=IZfq~fit z={q^xW{E0T~LKE1$S+f$XB zb(2^J_2|*}!3%jRJG1Q7PS7Z;>6o*yb*yHBN~LVvnwY%I==<=oiS8eTvX_)4V;}Rg zEUmg;P&1QuM&RxrlCnNhXG6|zt&EtD4-uK0^)H|!E?(LiaxKM|gT+6gRH(@3ufzF! z&_3O**lk>?a@yrOX@kqjTF}Z-yl$-a8(A#F^F% zfdBFKtAszqRnQrw4wV{+5Rz#ane_E^HGkEl=-QEKmtMbsH3!?ql? zlH#Vf2X1l6o%7fk!ZVY}t-le&cDGM7iV%@=!4-JF{h&S00!6%W=WU$bWy(y*KCCLo zfrcH(o3nG;oo0OTi4eth)INq7U=)<(s(cFW0h`;Yb9`jMLSqjGp+Dfyc~CvzETxo`&uU=xX}B#UB&3|Jfc?ip649YY<|jgi{}GwBHaSp}{@(!U{}Cd?o8!3r zPji58{|*+P%Y~`;CE$E-{d@69XIV{1u}Z$ps^{;ft-Bi*(-|UW;_fo=f91xK=q|X# ze>8=vEH}NgcuKmNwo49npEV90yxsPWq}iM+i|zD%kd??fc7WbfwLTaBs16!f>3#UE zb7n?kP8e3KnRsX-@t_7&6 zD-DCKh@wyg@c|SqQ7{U)f}yg-ASx0NkY^N$Q7S194U|{30znbk!KT(Ipdx}01QH=A zV0g$&6h%M-1R`P*a0yST2+^3(l>KjjZg-~L+L@i%GdC0N%zd0YIsbpY|NB1fp@WU1 zP<47T88r+pLXX0Rg6HFQwBfX@1$j$+U=~LO z^|f0dkT+Oo*)3v=L6OL8+GBn|=T$3HTy2J}6Fa8TIW(@ujV?(zOnCRarEl}fC3Hsn zlU3E@zhDXlQGO78$?BS1n!;unEH=6@A(>3y#)aMzj@k;9bnY{N?(Su+MN*6*4;1v=>*gLCSi8J2Rgjc&$Ya@v`KI&Fpe#UV$dq0{ zme3jCK01O~$=kNhi$3`148@x9*dG%dcs}|G8qKdHfE9Fa>b5v}G$6}k+{OjdcYJ-$ z?FSPIopItEwgZU25dgw*gjXpC{0ayK-N3HwM5@^MW(Q?4TQ}Ox;S5z!ILsF$X$>YT zB&6(|raRDWe}sK*xn~(I*Je550FdDWAEB} zPfJVm127pG%XlQpNUlr=vHpYInyAn2uGUFrmWUJk0@ zPNh%EmS~|L436@nv#8{?W*ThLo8>xcsNuYeawj@EPn`+E+f zEg4+AUdiBYbt?Aa+4o2DK%=sf%9btCEQS~Knf}w2cB1Wz-9e)_ zJQ0lrNAKtk(_eEcPWVVK$HYoYLn5v5vEIO~==fy*EM@zm1E3p8+Ax-L5^eRkwm#(B zzEiaGZ(FqVqJH@*^j<3ULiVvFH?T=wK+G9MUvG7KhVD8y**K{NOj%vP8fD7nZcK91 zbEG%EcjmtSwpt80TOQbRBF*|Sw^s)FiOv9J8Yx?F?ffKH;_df@iz{-(M8_HC)r);* zACBHE?y3|#>MSELQ0wcSy&~i>g(>r*nw>qscLLG?e=27B?N^=84QS`vxZ^9_2GW9{ zBDoqt5@2JC2^MjsF7U4m$3KDe+41f?V^Pe{@d67 zNXY})+bXLkk@fR8(?5NUptWR;wAxMvTkE^H;-T*KXRQ%CjCuM6r7F!e_&uJ^y!9Ye z{`hmGVEV#-o}@3e0d30S#d0+7`HyK7UoDI2^Ah~+ZW>|?1EW*!k^c3VuN<-IJhw4_ zdlW9?RfB{psZU;_;RTE!fFNepEhl>Ef3cvrOobk6=wCz7uT9$Fn4o$o)IA zht;zd-n|pE7KP#ht>*XekF6HJ+AFMLU!@$KqLhWA|6J4mt03TGq-YNHB0tiSnAKFPEw{jYWg2xUzn8daH0;cxcmOak%yXG7h2HY51h+@ByJgxVVIaS*)hgz+wW^0ek9SW~}a>|gOic{>(Tu&*wQ_s|pj2^UHMGLR+ zqoE}W-_M#%>ZF}oL+MwWa>;T-a`MTPC70U*B?gzeU#{+DYfO&X$J~#ZxwlH-))BYd z2y(uN*ZOU2N=5FHeS~~sE%+^>XAj5{v#?{XiqC4-o{@QIERu|>Inyamf37@5SHb}0 zQD%M$ZcSXdXzBf!g2egqs01%5He&Aa>ZHvT5hIyXS1l|#{i-aZ5zZym*~fvm9;aSj zn7-0#_FgJQaSlqx8`+O%8O;#5$j<+m!$vOo{|N<^kI(?d4L7Y=jE_7i!etrh9`fEr zqqQN7Inv;*`gp$Smvt~J;y3fAUFRvD|G3)FHiPAxbWs}!Ph~4T{+n>Y*C6475C2*% zVLNPvEe^XrogYl`y_s!)8W_G6F0&`uoda&uYu~{e812K%jph=Pc<`4hKm0~6TV%@V zDLho7yL5SOaMBLfv~=w`>rkoVDIaX2EQ!S^wj*;6thbbd7FGzKCnR$mQcSs zr_D5}VakY}#B=7COwY8qSDi^y3>D_#7b;etOcbK2516D|(vt)$T7p_^7f zk*Gd7JGNEKTnXC_rqR+{2OLu5QOyMAhHYY3LV|!yN!TO`wEB){%=`7?y6^IM1x7=B zt#|Co^^_6o4=*=~#Nk_*T$AT>$9!PQRbxFZpYvR5BfN#W_=y&66b@o>dmVB406+1= z8N`~YY(zX2oe{A^ag+SR$*nD-T@9o53VEk&4`*&T2NsODRe53`)OsAQL9Ki#+J65a z_8yjl&iqvZ;&_zkL#O`*zShT7 literal 0 HcmV?d00001 diff --git a/images/signal-values-details.png b/images/signal-values-details.png new file mode 100644 index 0000000000000000000000000000000000000000..64a10d7bce891101cea9808214e36c974463446a GIT binary patch literal 258713 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 literal 0 HcmV?d00001 diff --git a/images/signal-values.png b/images/signal-values.png new file mode 100644 index 0000000000000000000000000000000000000000..6fcade5f8e9cb5ba47ac4d4cd5536328ab9e7f55 GIT binary patch literal 213578 zcmdqJcT`hp*FMaQAg!Q!I35)AR-`L>Ai;*APNG~ z1rkCFk=_Xq2!xRE-HbTT^RD%+_5Jg%_50TEAm(tAbI!i+z3*MFYoCNaQByi|>gp*P z8k#f859Kv!Xz0Q3$xn2@f+Kb$dK>WahwDRq5AeqMqu*a>l2b2(gS5|;RTXIGem`;X zmhkUIZoM=#*JzaG?`!*vtzy03ze8hXzYA4G^$m_cQu4dl_G`q`C&izW<+Cc}<81G7 zE~k7E4Ig-V&f@U_X-xCAc|`jqVO{Mf8g_&JW%MeBPoE`X(@2y}-d4I-50x+1;Ugng zQuERmq^epW2Jx5U{Wq~+WPW}` z@a+ig@%~?m=g2<~e|=~U`MG~ZdG*Bc{r!QW47$>U28E4IUERmS}7xM~=KjrYR z3l<1Ny1<`8)7Gy23L)P9Ew6``}DGVDB2UGZGS>d&c@Kc|8=so1B{+Qb=Fvb^J< z+aKMbB_8vzkj?AWi`5(`g#6G-hWmW@Xm{kWh*ZiL(Vvl1m=q+0tM+Qm_}Gr@Ry%zb)|dNVWEO4zKyNS zQN|jm+GBuhgNKu0oiTgOY|wY4k;a@xTc|SKM_)=n(ocK&&J_Fbh9Rm5BKK6os4^#0 z(D+Yq;9TcD|3C!v68RxSb*f>9Bluu=|!A9m}I``*x44XG+|YXCvDN6Zc2D z{}do|5@WBb-m4tso8t)X%I^7hP+ygUE$Pe%30qx_#cSu-E1vQ`f@Rm-i0hPQ2wbf~ z%V=u6tEPLkOLu$|R`<-W@(Na&m6d``uT?JWfuTr-$`T(Fo7ueuZ?FHf4kkG(E31)) z7A4+GDvSZEy?;V(ldlmgj6<0JvyhnN-Vx{w;~*NM>@j(NUh>ypxY?|(m}D}g@SkN8 z{07`0TwZ(R=8pG%^mw23 zLR@3O;tkn<{nU%sqTn4BJgmUSVo7NzfmNcD@!!*~RjC@6Zw>mJ@J>Fx>M5ICGrLSS z6~FKnGMYrCQHdCqJ^cLIjy~cNv(r<}YMD#)C!>~Ghx5Ji63+BXmueMpde%x(qbdl^ zlutz(Ndl3ibUksI%7<=s{Ga$*hnbDI2bYUtOmkirCk8$JD|qs z|Gi!vcG$9*4|UHFiNQX%rki3`j|!NM3Lj`Emr3tTP}!i@k9G0pb}s)@-%e?PONsAt zTv&xYH_^Mutvyv6-TrQwR~gbldgOdk;xGU=6k zXH1ZPZ_Mdv=)p21>*yNB*%If%XJ-zn+X)>wnF}%oU0F{6;g;%2DCJ*?YCH|Cubv8(PjeMG{A5>rFXu^UKh!td}H{J_=3=?amK;}P4jI?+A&tgePY(=KM8OVdZPHK(&wVSd zKI2Wyl$K0V#q+kYw-c+YFBLt1-?4{|erG?kGW?2RMAKw+Wvt^-?eAIbvhJR+5_=sz z@@}5@;Z9J#be+q1n2XePdp*v#(xtHH9{Rp0HgcdIx=afy>cV_Q$YNB%TZS2~E}q$& zg_HG|pGG5niCF_e36ujCuGDd47GCVf+`kAy^9w?J#r3V`;w7DBpT%*-W+mhFRKrtG`3 zhp9tF#zWHS2}3cC8C`XaqHg#7RxQ8^)M-n}Bs%N*DBpOC^s`1;l)YAWy3JFT+MI6- z-bFSFZ`R_ju%486_o&?Wbi8Y>siU8yOweV;W$B>OrCh9*Cprm{nrrpl!`XrmV?)ts zK?uSZk+%QbYwG51{)g+(OPX?PyaaMjJ+X? zrc&s$Yq%?J{$$>up%12wppF(Wr@%xH-*y=c}Kmk zBb*XIY<#D;7<_Pf{LIc6u36A)ekEc0dbZzKGv=4@^DU#vln}bR=m{k zb7B+LtL7b-v)`=h&rIS)&}8*Vg~SQMG*Bv?0l=lSQ>vYBN@26dOc=I^Uat^P0sXa?2sll%;c(ZQvTJ6fi(K{ zX8UjWX34!}j;0lKX<e+z*;)_;EI zrmUbR_N@hiod}O>pm^@RLnSDC=;aQ-$=AAGW`p45+II9bFB^7Bo)4Ttck!H4M+%9f zo0eW?l}Rpq&6lnY>?nc}9w}IvWAtn%KM*}?O}_ybLC2AFT6Vv6!$wg%M|xhM>`~l} zIJ1f2Q@p*)7{BR+Di4oJIXW9Q51%4VQZ0pqwZ&|Q6#Y(gZ0Zp57}Hqe>@7NF@;bF{ z4&-q5oBD#ma0G`F3g22x|3J3SsgxSepyF9hvSQxPOz& zTb6GAMtc1NN0x54YRLmg;zIuzEHlazCWcUOPxWqv8Z@M3rHajT02U~ zqWRFZB&BRGHe43^8#S%j^$sR&T(m17n901tb@D}Dfw797&PCtbSWUO?wvI_p^an)g z)#sS_pv)enY+Gz@^=FsS6g%+}e2s*_^_pQ{lI!wY6!&$6{?r_$Q%AvUdUNDthl_ve zQ{DilC$-wUY3j`K9jq9*{pT1s%OmCzUIvcG>3SE*Vso!*G%S{1#&ZPo&BY5{Dv7RP z1rb?WXbBjQQp|*FyTS=Xja@RX+&Rhs?ExJ)V6?2YTyUcJjswQhMyF<%!-NN!8F zr5U1ol)g@&W#s58o{H_(so6k=+?HE1ce(hk3VDp8LKF(N6}xb_G(n{6nrWcay-VZ? zm7GL3@p|=?)#Cnavu42$TJ}rP{X-QW%=~KI3@+b8U1B4ReQ22qex|-P`{ca^y)2+dHfB5&7$xlKmIk)K62Z{urg zN}l;mpz<6aE&W1cT@%uJ@W~8s%YlX{jhPYtlLb-d=SxAzkJgaC&Ls)c&bw5Sf-)}8 z^l2N5;u&^IO}&IJwn5ylN5{6Y~wReLIV7Q;%M`DltD)Su*uK;9voRaS=?xx4S0 z8p&)tOMbKWdHYVqQ(Il+@S7~j2~zKQC7F$=XujH#Pj}6nr})(-j0|G!U20KEbQ}Vb z4yI8X8P{_&2tzg|Bp+RF!r7P(KW|%!y{}$mS9Uc?cf(IsUxGtC5=!-(b8jrKTZbfW zl@z%Je0M}il6+Kt-wJMShj zzdQf4lw`e{JX}QDRu3iGVtl*>A+h;m-C(66DV2ZIjyhV-+CxD2F?Pp97Oa;;G7vMT zF74RsAh)yEk6ckc;#SG)?r7kh)!>O`ljYdS5FX50oEdY;_;a$>_4DDDARpj?Q8$f2 zG;j>G0MQw!oeGpfj#Z>$;kEjc<*d*_sXUDf4g za*E4ppMHm@L;bV1S*DiikfQcp6LzOnbSWr^4O7}R{&;_zpqH&n7OPn?8>qbH?}yyqq{vKe)IAQ?iN@!E*CKf$ zUFqG=uk)M!ksDsLAY5p8-Cls-0BNsiD^Hf@epM zk&HuUVLldV_<3@I;it%MSFVtO>s9jRf9M&w)#2UVXVi?nE5uv|o8Ad8aNZR`7+`Xs zk^2Lc=Q)B$RWMT00q*vgz0nZ$W@)>O(~?lO*lkV0q6kq61zP|_3}vk^dEecmpmR48 zTfA{j?p0gMUE?A_)^PbP5~EEvKCQwQy~EhdPPsxP*3?VndPHiIv47BKDgs5x(HR@+ zwaF-|8XMIM>v*gV8?KJ79Si!MDKYKiOtYhFKVvR$#25&v0*x~n(qke^s7kY$2H~S} z2yWTiF;vU-yidL!V(d0_tnsdw35qgmsu*z3NjauQ)mp%q(A7}|f+g9q zhwtjJGCb@|hEeRpZF`I*Y56S|E>*j+;yJEQJ?!QFS_&qm%F)TbdtJ{bJOKKnHZUsr z3LGD>Oi|65>v-;5QBiHa+!7ztEZFR-s$9L&HRPYC)>)=gqBPDKH(&A)H(00)qx62hfpBFlJYBDFaGWha0qsIBD)^m~BpkQ}r-I}?SLHKEvc%A7_gt(5>lvNB_chiA z5eU<%n{&}F=|01E!vZHKdDK=sK@6=K_c5w{x$WFv{Z6sA#M7iOdev`a68EpkT8$=2 zZu>}ife4){`+?96=}#B)ZhMMNAF=t$-$iPggKDwyVgcRu1AI3vm z9@{-u1zrS2_~V~&lIt}lG95>7GTH-ABIj4~UDOa2m0STDS6KVQgC0*B4=cE?zK(5w z{`2OvzgEOB$$jnaZ18!Oh-?(Uy-fWcTT4CI|B?Xa$ruis28BXvpLnSSW;jaqzi*T8 zK7O;qg}=zh`b%}bB*1oV)9dCEt=lY^Q@`!l;KU~7|GfuYMGQA6cBJ((p3l9RY@JM( z^8DNdfSKaa@_JAppFFd|YVzbTC2z+bon5N`6KZ8(HHTyjd{m%}3rK#JI$nGWp z@*u{3D(8psl_LS2R32D@Gji(;f1jhR5~Anv$EctKHGJ@JCF z*pKIXB?u9~Nqm3ubU*V0YzLf6_Ox{!Zo;dZHcZv4C!}J^K6U)?4KFA+oKMk=1e#oK zx)JO;{*6COyFN|=UFE_ub~AV*@hpA7?>{~`5(s8)Bqmn?%Otmm`S|%G@p~HmayI)h zcSbx9Flr*=fqg;D!~2xw$>ZosPWcy#|DT-OXzq)kPr^v(PPi!NI(73zLu~*VlNijj z40|SP-ftZ{#M0JpH7ABONsHUd29iT;wjCgF#%ec)!{^jD5Q-C~quRx! z%s-`Fk6{Vgb=HY7gwf3E&(VDcq-njg1q!;pz?|y)JdBNTTw8Z?_JCabPEQf5PQ_hp z8WV-up^E7PH~Ve7=YsrY_9;RKPmVnWqSYSq33k_Jbc|Uh)puTu{j}j=>q{oGKG>)AL@%;#Gd7$*(^!vb=bdOt7OW%G;(_9m6 z@59=S%=K1`PhVR&v&b4rdU5QY{ncWb8Gffo)ZW5s#x`3GzeUg3Fe|R@!;3P;c7;3@ zCE$*>gT(k^pH+ZLWV`4iD;z;_8^RNzW#}B}E?@Yp_rBv_y9sBOwN0B~9&~0?5z`<*8 zEF3^auun4I|CZ`YM!S2bPIk#}(Z)2AKnkINEufD8DW>=+Eon<`RDaVWdTlQc!zGUu zZSTSI6Ysi^8bCfRzqWl!AdhX-c}dp!^_Z`CbHWb^USQ{TBUuNd_tznpN{k?IJ>*6! zsPG@q2}C7(P6<%2I5iTBufujq;sPl>`ADRY=jRAdl5i2*IQ;v3WVCdp1%at0#bSZ7 zPEv30=jX+04is1geTI%>-8UqGOykugQ-wQ&$a zg;1g_ad|H`?h?OY6Ndm7!gJ_=LkWJkUJqqiz)WzRPq`Qa#q&@!D`FzLzD#HCIHk99Z?!mmKS}v~Wmf$8DVI{3sG173Cafd#sOy}OlZ517eyZ4{5r#Vmsv3lDF zjJZ9gzIa(hkjdGuh4uoy;KwUQ`-uHnXrJxnz*{Kw;Z&*j!_>w)`O4{&2{J zH6!k#i`&47fnS(2Mm!Opy5=h*Iu50&ZHzX3Ppb=kEc9m%u2Ll6b+hl-ZMIj+Q_xRC z85RLOaMx=+YGFqOM;@+oQh{dc`H(sgT4l|L@%hjhU&?yZezt&QA&2b#_=fs|(wa@6 z7j?9Ql^x#E&o4Em7n9QIK1nJ3F zyneXZUKxoGSO;iQc1eYS&mMsckJo0 z>Ti;zG?4`yp4g24$^ojh8d)Sc#YR@`A2j=(OIx-t5BommJ#xZty}7VmvrHGh?MxXP zZ-{AV*CKtE^;i^YNrd59qE@@a^D9Ft|@M* z)Bs&+C{jFtP^H$Y+u^dE)A2WdIG=~%DZh?{AQ>{=0w7(R^Q|d)jsU3Icls*B6XL5B zZPD0=Caz>zzyvLU>e8dDSG{Dk+!xj$-iEawiu0KY>G`MjX0lX#%&q_m9lv|aq}Rz*O|4z4S`)W z?;e_zJ-(r3D3Yj?N}56D2tsbF=sE4ROAD-TH}ecTOOX=HmX;!(m%#)Vio9hq9>X@Z z7A!mZWoo$HHB4fCyjxmOr2tPXP?z%yNi-gzXaL$r)t}c`%D?kKtn&i;ypkCj01}vh0OwNezW)QEJ(vviK(&s`tYxi`0!ac5-J?~ zaJ}~#01U{kUDJ39(uqejU?H`+fG8bEzIJgy?4wfA5od%tOeIqY`#A|W^nruw81g;Lkzz&e*v4r4*DY zsa6i&67z?o){P_5$P3xWXVOfVc4IW%IV_cJf~^&5G|5=63*l9d5+AR06dw@f z?%yV>lV=mTD8x#WsO8!CcrKWjqj}pTRAzT@kF>%b0PV|9Dhd$&;cQ&5J()e({K>&P z&H}1g!L2Z!jjgR8!WoX|PT0k|(y*Pn{eeZ%eNdG>U$}Te3;7jifvgMo&d1Eg67om0 zXtimXi}cl!d<~7Hr{$Sq+&2j$JTscH(TFnE=h%9{zW#zWOs8fc0ZDwH&TRfI+9fJO zw9W;AZNvl6-Zu{mk37*QPTXJ#BSwyOTJG5zpbajZJmY}e>W=(}wP0pg9W3>wfT8k@ z3A?RFq%nMd4O=_hkNY?gQrb9%JNdu>!>fFU}z*T2R%q=9QZDf_PGs6X> z>&f-9P|k}lm2Y!TZuj^PWqL)1!VjSsy{s-??AX0^RORPRQN~EGqs%2zZFN87ykNd} ziiGeMFe!SDMj1b6!7G`GTUI=c0R29vb!;_ zF@JsVgW3*CfZE-~gQKK!-$9fqw2lE%<+1%Q;l$pR9d(xFmWw)`cPFokmMwG1vLgaq z`%%ACJgwV*EmN>w1nHmTs!B|Z+X)m+rPhx3b@vtS7XlJwvztdfV6UBn5hpe~#nKPb z>R8~=3%uNvN7V#;05}2IO^#su`ca^p%C#%>Mcg03^!v>LB%EBX=;_?N@g8+Ik9B|u zP*M@>Cyx@uscda(mY)d`aD9T)VVjE#J4GgLX5nSW z4C^aU_j(;6oJ-io>i2Sp`5hS-JF+_li$a&mqHAU?+XU*#ZQC&*?->7;1b{}f)e^0qvy}qyX?N^2;LUtKjPoG z-Okm|&aSIB-gRSkS>CDe$hs(~smtu52Jh%KfB_T@x$!xSh(7>yy(aVOMB&t+4ofb7 ze#0u@rb(4qWBf!n()V-=8(qGo0VLTBvlM%7e=2IRw4dxd3JREjrof`Vjj!gYyZc&gnOY>ukT>6kD6ptJ z;yHB{b@^MtlrUGV!xKqSiYD-}<-5$$sm=CX)6-q@m8x0E56JM#e%kj<)TDy%c(=6= ztzW&uMjF}hjX9Iyy;%{4b<+^V#r=r02h8EnPo=ZgHfx_tzb5aD!|ozM_^(8J$l$-W z!2J<^_u&(3wC8ag`sFp*_t5-2WdTmx3(+=h$pUxN|H=GoN*X}(oL=$h-V~}$gTZ3^ zwbcTS+7H~Vv9!y0ZEvu6$gVVb({N_KM1^IL84wne>q*m+D(XG@4V-9aboRQJ|2R}c z?3{iYF&Ctn;#SnI{ZaFwtCVcxqG*Xg$Ly^^>T+l)(pl3wV<+3*FI$PE`kh z4B>yO!76uI+QN>GBYsV+&?2&41*7&}>$2QsSqI-gV<*b(RH|39tINOs;=G-T<_K;~ z^@-6X6-31`Uo_p#+w2}r2xVHv^ccfGI)16nJUbM@FWroGdVrAE$Opv*B9L`=9hJ!> zS7JXZyj8hyA))6sudjvqRCg^yzE;z6T)kgw0tyhJLb0^8ldugk$Dz4s;N<*qU1cHP0YBg zPFjz)p$tF%w4Sfew<}PaUWIK33=4(@j3f$5fdkwiWNVc10 zRAE9vEIq&=JU$Pc1PbN6&@2hhhxJZ`l`eb8r}$Moefp$&sZgndmv?L%l=!8xCHABQ zglQ_Zb5$5?INUVT;tXa^n=>xUx^%x2m-{-UmKeQ|hxJzO=kz4N2vO;QJ~q_qoE2J6 zhXBGT8?^gJQnX>pMf`=Vf;B*EuDPTSuf(#19e8)dWr(DE^{%LrhiZ3mO$~6n38Z1S zHy7`#1}$doHW}Sw>>ecy_gWAFYRPW3HQ#}7_9#vXY%t(s*Z6{w3 zofKWpx!c|B?H87C#(vM>2MF=~uk)fO%QK!!72hwE_U~Li-1h-ZWDc5T)~IyTI_F*H z!x14+@~gx3T=EO`wl=qOZl)9^oFffifl~3IL+XnI+=YjN(5XVGJFcd8IcE&8D=E#z z59y{zyEdz*R|MM`d)CxRm>Nkn#waTx9>0mR>Lu zs9IOn(x+cq(7RWfcViOxjS=F(PY?!x_S;Ssb`WtkY@bhU?logKdSJ@nGVnp4VgUSoFq5LHp`gX)vYOrfH#UIvLTcw5USlaj;Dbrh4_pRueW0b3XIb{?&zNd?Y)$8$O!J?iGpRNUWU(Ky9X>5greZ6q$q`1Yvrv9!-r+*-Q}h<}hy1+M8U$s=Ua zo42PDJJx-={;;zP&%>n$th9CHU|!Z!I%BJ9a=qC1*1s!ydOLK6UG)_|s?R6LLUMFk z^8nOZhlM0cv*@%o2>aDI2!b4rsl_2{LEb;hQ+La~6403kOQ|hydkq0ie{amw9e<*t zrMn6zo2$2Spe>qo+Tl@6qmbtuTfeHm`)te0ec@(b^A%gn%XpRtbTQ4syPaq0YY-2m z*y-atTRd}4?i4Yu>1{0R&Z`?}PaFo~#NjqWz~m${Rhx99WC-k8Dovs#w)2%|#*Mkh zbm~e`-dBIPO4@6nQa3fP*eDSqPf%yS9?hTBZs4KY!bL7GJG86vKxj-ZAE~zr5+AR3 zB!F5r-jP4!PVGjsjf_D<;WG22=;^iE-Q7nw zYWcdKG~{p-2MRlDOc!Lgy6U#Nx?pJry!-}-fdWy+dX+A)l1Y%&RYk9F4Cd?W^lyD* z!K*%XmG77bHMF1g7t~h7m*~7BLIkuMX1%>fuX`Z_G%422Wm=>Rmx+6HChN(jQ$QbU zW~@kXuOe+0yGv>BJU0q^FhW*aC#yC z{@Mh6H2*Cly?rvq`p~~+>lRTX_F?HQetM4AX|+T`ANHxiSvj%d`#Xuw>w&m#AzV_! z7J9SWlnp5r{4Lk57o1(^_-tjO*oTh8fZ0;btP`j<&9tz1@PABmjI&f34%A2~&9*vp zX0WM-GTcr}bjQK6As4zZot$x{-wn$^ZZD8d5Ae{WI|6`uW15?0?j|y>Unya%NF0Q4 z>r7|6bXeDm>kr6X13e@VDyA;%P?&!#-XQaO@Dr1IJ)}8ur7&*tvZO$~urGic1Omi7 zFnI?=$vk#YGh}K_rj=hiWtiPvrn8o)m%5h|>NXa;1`M)mP*-{su&n-4h4-5bafkge zT7Uy}mw*>@U-I}erFytGR&!nQ(!E=@PbGt3$9L9|529Z&(MEJvrorJPFM2$TT$sQ+NQ z(Y}7XV+=rrWKf*rx8L>gu`~xPw1Ga4wdZ)VsO3fvTn=F6Nt&(sI?}t<*T-`jObh?9 zqB`fWIZGF^Io{ugQ0#;L^*U%^RgrZEt;9(?L#Pj4&U9v!+%1$%md?yo&}tAeo@k}a z+1iq+N*^hrpaepAgJthL-^K8&_4+{#BF%HF(E_-^!-AFQuIP?Xb^Ur2VT5aOxX<5lM0x51C%9NY(B=?6Z2$h!+tM%fYO>X@m3x@URB zth}>VPeN{O>UAisIrK|R zYmvKS!A>WgLE2RY4LV2`=LlZ3SMs)HlJlX)-E13u6b`e-vaCC!ElwN zaA92H<4{KH;{DHB=Rre&x{f1h6UQY>9(db&RXcFi5DF&oqTH?9MSHCqB*vz@dDbSw zBmQcg(H(MhdQyV(l%*oS>SF(eHmsy@8CztCIL{;JDBE6hZ@2hQ%FOc(f_{hyJ+l@;C z=S{9wt%3|_8PmnbQ#SEb_ljJd>Y(#i94Umnnb#4un-=>)qUv~RYp&Eu5Hmcu;jKn+z? z-4Qx5bw${K|*wH5U9+3n1!I9-0js`^a9sivcVoish^ zkB1URZM@z7x_|$3q(JlDrxT2)SwvPVyZI5+{guPk>j9JO=ARP_gdc9^sew3XaFju5@lw} zhAPn`=jN`^>|<`RlUvMh3E;*8JEEdiW^>BgE3{Nsbjh9H`b@<_Csy}7gT_roee~#k zX06-2^BRu``A>i6T69DQ{eI?=XUFR+Rc5WBR0?@vUbm!T?8E(_!|9EP$jCrK3hrQ< z8M)UI((AvojLua}>0tL?ZD(=WHu#0+UucDzbhkW|X$;0lyO}3fvF+nPsu#1|h zO=ZTnDYT`4mRf9s@)3+%df24_c%PJiko6G_Y=h^@a0waGY-eY;1a#uFgVqb2(uBmC zH2DeJ4bG0*WHe2MvNVE68^P3nN7Y-k;-KE;zDF8;f!zh;J(%T^t;aW$e`jF5ELXSD zLeD6ebxG9HZa(Vwwm>vc2E4NJM(YJVPMin3N~h!Crw_h!jbyC-QC?Ag=xMsF^m3q4(pRz$AecgT(6~eDZoy0#BLp^Tl^AtZxbQ(3 zgA%*%ERfR$NDS;@ZTb=fwr5tPTXI#z@v`Un@GpF|6I**TF)ovhq%Y^y9WkZYaTg@C zR~S=lSj+GEC_@JN=+UFx$4S#Cf1v@8*9(d>Wj;az%~%rXmQXyp+H_Ps(Efcz$lAyo z>zQZ@^QD^_R1uI~DXvm{ec5d(ClQAC$3?c8>zVk@>D#33baG|L)4GgRFM&l>qLI}; z6C*oWYK&lNskG`Yt)EY(g#>II$un9x7mZQBaSj+X+nr~B*>^Yk5)@0-yh!WRre{Z3ymwVQP7Q*TQdieU0rGnlP~<&=Uahv^S9q-soIKhm8fP zn^wx~?9pr-jv@%c1Uw+a^Dyq1tK zy8JdFAt^zBeQYI}rL^vQG+iZLvamwSAW+_2e)|90hLp4natfyWyg->qM<3b zH8C-HG$)H&9vK;_Lm(u@#4bbbPDDpWo|oI(-_Om>y~^O{?@!NBYE-W|NAhrY4`%A? z>kGYJVgR@Q_Th7l(|Bc7RoLk(g9Tb#0s>{=Z(W}cRaG8dULwB$r+*D}1i3Ow4`Ey= z6|?y$ht`DprU7h#?T;e#Q)cJfMZGhk zye%5~etr#1({qWYr2%>x8XED8w|RLl$c>DTvqXzYNbs9B2MlB?kazKkH8FO;n!d(f z?}%ctNqsTBxOl6C9!RnA;`)&sE+w!W@}5hKVvY&9zfy~_55cfqTDu>=F8`yoLh8u` z78}BZZzO>6tArq4V+eQVXJ>B&-@1MKuFT@v8ULy?k&24{ zOqA$ptB8mQXHPZYQD{%uL1GWQE-NoDuaw99>y#A3c*fXh<_i}tM}ym>N_g6TeZwImBV&y4S{s9} z2=z-5zFv=69k1;dTg&?J;e&Dl^m zFSAd|RvWC@WI$`cLbB>k&`HXf0^90p>YF#u#NMW-Q(GBjjSybFZ)P=~KFuGn&CZd( z0W7e)v(s+0@}?)~p8RX<=d-djb@WC?M!D)4R4^y6uL^UEi9Mw|d*w<}N{XcUmsiBK zaXk`Kz0qWjN}|U?-<9a?b?kU+t3_|JFwh_j1`7`lU+B-!D?*>=QoHxA-gOG_5PslU z`4_aTU>wKW_w~!-?%8E!cy(FIbK>gg;Gm|dDUR7Rz-{r{N5Q03UB;!+s)clEe_(?- zJ5s4>X^H&C`;=WAa8>&UBmzG_zj4F!Br&&4x3?Xgaa?R{Y~$5-4?@87f8F+@u%*kD zVODnh($w;XmZ}X(bc>=MKW3H-{#`ilXV)6dU&38oUBGX~mY0`r&UB<`nv`K;F5jL0 z7{=}g!c2iQ4b8K@7J+s;j)}Re^+u&nZe2JPvSmGZzut&HvD->eUpT1}{YGox-yy*& z;BYo^_gSz~9v`IHTUuHg7>of=l`jE4a{s^P7s;ufo|=^8ySHJcb?OiVA$1v2c5SWb z4rmj)*6sc}?Po8*!{dw@oWGk`RYd?%Y7^^?L)U#*vb3B<7wKgLQhmA40PX!L&*@V z`(RX-f=Q2cBW=w7ZRGpsyvXeAQ_lvR;YO-!gCG9dKJJ16Z+&|ChWJbObycE@A^noe zoe3VqeS_bX-u(98pZO5|=h}$``Q%m6Z}#xe@le4nmec;%u6W61{u=)8*9y?kpl)VE zKM6k6q8=#=J%1^|QTFUEX0zzz&BB8}(e-tYIpoK4+4~rV`-mbZB!!o7rLk2(QF2G} zKg!W8(0){#MCIDo{`q8_hgVTk$uBgYnk<%vUV$tBTIvSo23*%)8LqkLTqfPk=%^>GBZQg;OYePtbV?1aUbU9Ml z22mf)X5rtG+q}P9Jl~#1kGy<6 z*fr5%*1diccJlYoDEe&Wo-t|RBIu`L0WY|LldmtS7_uuc>0WrrM(jDq+_#W-1wrF# zkg>wX#);wK;X4!ozJtGRo(GZRpRG=SJKI~Eio8ZR0esm5PDJxxq0d`=mcQ-stN2QS zxe6%r7QU*gc7HRtzh+`xkn!R{Ic1_Pd!nDq)6H|x{@zuvsxT`#A&~cEuAfikZ{UU0 z@K53$D(NG)B2*%}Q3h$zUBA$LXV>^T#~?DyAMI7j;MK)q_}f?KJAH@wsSM_Q56Lf* zOz`&bvDBB-AMsRQettrqy3e9qS2Z4`l7XL^&X4D$=JazH$uL2=kH5d+6SC(G;Ujvf zG}~&`Gw9>}LfEF7= zXWZ_)QgiNuo9p=c zdNAre=nK2&X`6azb~_1DDT%wJR)$d#f=i^S9WBqXuV0>X$lE^gxO&F^e)3KrHDwJ+ zg?`*>Qk6=bO#9|P_{j^MYBtwbRi($4@4g?{^=VjuVY?O%hu8kIRaI40R=(|?)0X_7 z(qUFC1}iI1MXnY*H5#w1eBGm=`EGh6v0KyKqZ?(fZll!iM+{A6oH=C4dx4T5Tt6^> z&D3IC8rwa0D&%NIxp1<*>z)hcD(M~P$h=dlVp5{(|J}$uzKYuFSN-ZKt1hJ&$z%?s zI~&;=x?`(BDusBPh^1)fYZd^Ps?8m5P%>-}_f9|fE%RqXaPAv-nMde3{SXB?Iu|`= zcd+vJ5|^IuEAAMFFkLyRU>`O7zWRH}uIi%#`^=rxXN0-v<`$Cu)S}kN_4BtEjC!D`&)` zrGp#`BdK$~CH^9mc@%`!-j?L?u)0i7Rj=-t!6g?eF=67P2%1mQ=I`&mwT|gR&B@X6A(c;-6!LN6bS$_y5Ps=- zeaOwJ1s;Cl#(MB1=lZ%vQe@T|bHA+7)OX_f%{K0md%LD4Cj2EMt#28RQzDQ@vbCaO z2Yx#T3fE6i*5nW-xh%Au3+I{9P;q&J=|)gBPTEH!mb*edpp<5pOuxxHAWA?_G_0SFLd2)z4rs;d#-^XNq2#hNdUt-GW<@s!2~^ z1~V`UMZG48G=Ahmohcu%e!XGf!Is;+x0yvN&tx;+!HoWATxVz4O!nkJM_rZqSHc}C z(ycEni4g}p+v`$qPYGkQ@P-y+u>8GY)T1kCsPx-@9iP@rSv>!<-+lL;+48GG;Dn2R zU+m%uxV#YXp0vWXc4B@YSy09WzW`EuFdgZ~m=>wpeKWCCm28Cl)3 zRFc^|AX%(;-1bE?N}SO*3`{RuiiE14gwD?ZJ6KAvN%ZV3=LB}5_H+trP21DZf=`1 z8IID=Ig%DzFKCwU5#HAYef#I<-&aG{LXdKUkrlCK@tJ?Oh64l1K|bd6@G38LJ@_;l z{Lh?-jT-9s*ykSnS9E_t`-Y<_t0h$6(%-j;kd{$jCK0H0~ zX+rkrj2^|fZaH9cFRQ0t8u5F3l`oBs<+U_H%4FV~YU?6|7MSCqjr-3+f`SlxqlVo% zHo(^bzn8pcv;N=re{qrnC|oW%RPWY>INIt$S3Nn!&nSVK;q_`Q7mB~ z$e2Dpxy(ro|2IS&NkD%jLC8JYGHq^h4e|6J_S#dEy-Jy_&VlQ)tC1xsG4gt1m(QW{ zBg=xAM>;AW?R~j2(DuZ)< zH`Y{JWWH54aMZJA%h>EhGK<&6*mO0JP)wc};5zzps^g89!47hVxm{>8Eu}u>jI&{V z&;0cPV^brOx#!Il;BssG)1W4mrsK#x?Z~!h$K%W^U}k02_C!`_NBi0plAjS$ZliL)(->;5U|D&IgZ4*Ulo4(4{)bXE&pFByc+`K^adsT zw{PF(=kM!6hT0NMvAO0RIn8$i}O0n<-}{ zKIT00m-b0F+K>PI{QD{zSevYDw>+gx54^ZcM0XFz`i=a7v<#6O`LSlhxV_uOB_%o1GWotgSL%^AE`^cQ zz)2?<>~trGhihQch?80p>Q_eg)%wJ(o~@8(#xM8pt8j^~ZfYP>Z!`T&*}$1~$amVm z^h5!?e11M>XC2fyktZnraQltcQl2n@+=<}=xtCW%&e*a81tR_*^4>Bm%B}AkMo~dQ zLIhMwKtNjQMu%>t8td`i6ZEjC)$h@Buc;XE3k?lTPEH2jV`2zNJjdcUs!yH30;c?@$^=Iv=Kx2OmC~}8 z^l<1}wFjmDyO(3;PHt|sQQ9!!u1cGK?Vr5ke~}J`6skT*(9L3aW4X9x4#cj zS;<*`?L>R2xZ%TN_Z!dgUjq~u{&}fvpDPvHqaw4u+zU?QGh^4$oGt_Mjq;4uO+b** zg#U8=buUJmrvJ)<;~8jHMmJB~8|8DOdPq)pBCMZ~)AV1GOH_GAc3%klnMTC zasxdj&Vz5gv|e?a+S+TduJiG7ah0fx*ZXI!GF3?xiao^5d@Jc;-pa|Fpgz`!TH6N; zAG`b<)bZw(nwi6r4ych6Q~(xn7B*VzB_4=d46K4}Jw4J1N3m@8IC>!-e?s_}*(GNXX99^9cgVHk`8{ zkk&Ca#WRYiLcS`xO#7=H=2&HY9UZ;!Jcj#2 z&wrvklNfZ9QLzl#cx5WM z43!;41rU{zC|z~^uivH?$>~+h7*;$bOR`qNQp>&JMV;936omFdFIJz;V=W*nk#K#% zS&kew3orsqU-d8bwicZDlCSSAvweY6W_5f2E3pdvbgwc)?og8zu#Wz0YV}iPKHR(* zmf~GTRKLEWRQvA0+Gg^AGWtQSc;T!YTUCwn?gtY&5_I1lY30>?-pPUnMq19nh>Q0| z;6mz@$n`O8&`Tono|;ko6!@}<+}PLv^9(>Rs+hw7(g3J8{i|0)HP}ou9ib%6fD!RR zoT`Lf@6FfyTwknDO{s&r0>JW($fI8P_9Qn;xy57&z$Y%Y#tT)5eBGoK6!dCr7cY+2 zLEGZx<>hgwW12FZYm2T-(IrOLL)jaNv-m_I! zfCmT;4lb{(w1PFbsjI68;&6LCjEs$~{_yKF0K{q{kXA%iR@VDW@nYRZzUR-=e(P{{M9Q~h zs9Y2$f3@6M-L<=F%Z*V{ke`NnP_om;RVK%V{~L zegL+G4Hbm#cF#%;ctmvP-&W7-jb#-EbOb&={@cH9bn;2Afd69EYhq$PeRHMG2S&yF z>XKn!v)XzdkP8F^1R@X!z)`C$rymg!scLIms&BQvOOpsEx3;zh9ECS{HMlH!Dh_}O z;V|xt+nufUaCJS|Uue$CS_!1^j$2eb=@(M{j_(ViiF8jJ7pE5Es0Akml$X#Dwf3`79 z{ra`tM3Dw~5_=s{>$^$45t(Cz}Qa1~-=x zV3a1t#%x2ADu7Fpi0QNlp-%P{D_qm6e>QtB8Lh9sBuZ@-;lbtT#Bm{meU&2;8-S;S z-jM2D0}^5kh%@QEV=vI=q-7|oLCUD*n^tkNku}$a^HQ*e??{s+1TA#7C^Bo5iDoN$ zf#nD$E&&7y@KV5Zt(`6Spa90M$VnqiF|gNfV<`N~_4b+|(3f52eO z)Vu8a-a>z}vCTkC9Q&YCGMgGY7`a!RcC7zni*HJy^1;`{fb@jo9> z?NA|eo*HLVyOjh~Ge*g&Bus~^FG#83LZ9&4`=x` zsV*tCaSjQJY&D&PS?1gq01bFkrID&UnLEemg;4G1QD31k4X+4 zZ%t0L79u6{7JAJNoyr^`;&t$TsCPQKS?cv!DEac8^2gKf#dP61(%p;<7AvYy5eI0j z_&sj8eZJ1>ljwX-i&Ne6g~K>T`dYDU^GSDSfV_!+sd_fozVHs$2KCcq_d0lFw=wdt zpOy&^LV9`nRHRHsUVpPd(Bv#dzN?G5hnd02q3q1w>B&^Pk9O(=e0y5jXv99)z3C`w z(M_VMS{0MBk+YT2$J%tgIt4TTU90eJ(3}S?C2#q=%yIV`9!HCDQvg_5Aq7H$31bUp z<#iYu3+@e^Htz^kUw=^cbZ?4LgjJ;XP6@ru^r%#1SRtHQOy=t*%WjhW|-m!AO!|ClM>!PP%k}Qv!g&kX*>4eDj zD|M~PH70{)eASimDQ4k=wf^QeG85<2Fqr{{vF(8HKqXU))I;1#c;O}|iTQOWio{s` zVII-$J18+?pba|jb9fSS(vYF(LWfuj)$Tlf_-tx=L7Kj~o@}7_nO0~_+W2NY(nRB} z-E`hi3u}tc)Oo4j!Zjx!uLNf4(Jp?vRl<`ny^z6Ymjllz+v*8CgxT{1Gh35QHxK~sw*E)-3DdYw^cLDCNo&^X;z$o9vz>x7l!=$`C+ovEU^#rU;LxaFpXGSO~ zuRVxr5@DqIN3ff``}nZ{d`xMCA`lV;h~epp31^V3X^DKFj+kva-_iJQU0K4G$kYKU~Io@Bl<$L+M*_wPRyrH%onC0p*P04zZ~v z^VZbVT<)lz3n}jyND6*~RcW^@9soJqtKXL<0j8@VDhIXob8e9-Xm#{ zv(gpw!D;R7?O98k=o)}vFD)tAH8{9Gnj0Q{OzD3BhwqN&Dgc^GQSs4DZm^o=ikCf| z(6V`Iyb9zPfC5egsYzy=2ZZ{kfNzvnSDz}j7c##I_p1fhe}{YD?2Yl9QjX&KWl>8) zJAqVX^^8Z5kUcWTD+NT7MeD-VRU;uHOe}jvhfyikVtM44o1#g;`80LEcq(^ztHATe zg+;h5!hSpbSjug(M_Oey_E9;JjnM0zW{U^kpwN3;dzSke3vUw^oh!;ui}wHQd3uF+ zHCPyl7+-N&OfN{V(&QTIfp;cg$2v`w!c1&lEv9fzY+{((Q@SZV>dzB(dAD0L{qeXa zdL-&Du_(X5F@a+p{&BmMaa_QBvb*N}K6KubhmRVnUXc25@x9-It`{v=rgIFn)BpqN z^*}>6ceLI4}`s;CoQ_qJ`S7nC1-MwF@+l|asYPskO4+ha=zkq-_xgDnRG>5Iy_^6@3+=the zQmDK}Hd#;E`BM6_&&a2_!M5J+qJA80Px>cz0d!qUm)B$kHyJ+Lqhq2}292?BsYIAD7YQABZjYt+zFF}$wN zQ`XVWX-bM~MEXRcFK9OIwPf?>KOmUZkJmgt`n@|iuuw)##l`;DXY6I>b7eVPy*rzV zG}Muob3j(lE-H6NOTX(fO1FB3MH!|mTQZcCbK77bYT3TAVIg%~o=vYx^n3h#m0*p{f zUY^SzHauJ^m*`Vv3ltBbnVHMK{4nG!L1io^Cf3x{1eP|3kUCUXaFc~nR9swKR#w*5 z_9w@v!N%@Gd}t|JU%W09wUHUVv$K<>=L4H~qp-oO40HhUx$J$nCqAaFQw=?e`SIf# z6fZ#j!w##Q@9bPh>^G;r(!Y&?_j=fz#)B<+>0T$Ns(h{fuzTeb=dh<^tMo)s>_-^&8Tva=BRz2jq zC8KYZ9pUYOI?H!;s;&Cn2!+x4_GNfuh>C;jk%h4S>bbf9E$O|JvZ=fP8I;Geb z^fvtU*rwVY#7pse6dJEq!_UZL_b!{W>pzYjt=MZ!Ws><^?Hl;?yV-YJh}2bBzVtso zZpmh#3oooVUKu9})lTGed=1=qDi^0W%;j4h)MI;je-cCJ71GPE-jD?M#?86+^@7mNrX+JD522~f60SThqfA-i&> zmxWTf(j0ofK!QL%X17W5TvJMyAd-DLQe2CdVY1x;?(>#?_?8a~q#jC^8QO6R@;K#w7Tyk)}I` zVuRP7e` z?$@US1{Momo)b#xpyDvEs6!#V&%y}QEYt{Tt3)W7_N|zljC106m*u7xRFny+~_qh z7q>UHmo-^mMQ+AZK*RPfxALsVrglF@5pe9s{G$aRR?jLbVxsgG6N{(nY=tqrDxMp`iE-lma{Y{{D7(?icX=fu8zxmtZOJ+4X1Fi z5j}Acal7-4o=Jtpq zX8zq(H|hLXC*0>J(3AUg8Fo{3X3vUvRH)aZmMRs;7lWm~6jS))8JYL*McF}uA_dX2 z8cCW^+sc-jDG(Nf(}cmVPcX$&E^l&b_j?UhuAO?F2C6#(>^TY%(RV-oM9Ka(XuQ2H zNA|op;Ln<2^+Ak;cvJQ1N65t2jf$-W$$V*tKiU~U-t_+07pY$@w0r5rB%s4}u+}#_ zzi8{x5>s|AR(9I(9B~lgOVkalm)B)xQNp4Whhs;CfwTx_5p>>V(bIDcAa!8XGYW4R zI%;B3ObRdfX!ktEhcpOPA;8A~d5V?BScg&NY1o45DzfSf8MC5I*_OBrNg%JpB3Fsx z+3fmd9gf!wqRMh-0u`#KY~J79o3A+YYu+49rEdPie62|DYJ!MKBK*ukJvdwD zO=~9vUBc&F0x&XxjAv(7`xXY-HS@&AANd7{V#+85q|E~daqF+m9voR5NKUQ^@A9xC zV$s)^*?kZQWLw~@%CUBi3y%t0<0JR^E;3$s`stq+GNQ`BNi;diOPTqcjjK^PyR;nm zm>l`84)ZuDMN^%b;C9?MsTO|P1&SXPm7b&5ahIkNptK7d7y1xs@8A%CCoeDGfssuS zB;%5f6R4Z7JTo)%j3Qd|^W#gfbg-vqXEE;F;V>O)vCYcMGaX3cg#@LG1U{eyf?Yts zt$x*~qss-j{AREi#AX<%&u&l%Aogsg77uyJ$cO+rGi$+5TB}hRv$43iSTR5Px2D0Z zxZ;zOlN-cgF_2sw zcsD~V*pO|SKtbRT2*f;(y6M0@f5m+52G`OPdgC-`VFI^JN^Gpl<_OL5wx^j4jv3R3 zG#}fhx_qH9$J@B}vuOl1;W)_(2}c({%&!riyTY?)jy9{yYld|GQ{;A|inkC0FC^V? z!vmz7#~wBB);{--W2^C_To?J69ql8Ko$6Oysmtn|Qd9%;4Xr%tFQx22=)EL7^4`7j z$BVyc=k!dCPfqj8tU|` z4gR)&G#TdAtd`(AdA&MD&ps^QiwQoXO|8T;7N;g zMD*KHc0@ij^YUt)EBgFsQ`}M$HZ0Q(2?|fyw2*X(sNtLTLdptLin?15#}_`Wbk(P= zY8|g1#G;(xJWk@uQVL*~C7%-FY0<(g70mboSCiebEpXI|`SX5(va9+N-cnb)k19N< zCW+SH)mq&oUKUURk)@Mo8I4KN%vL6&fn>USRe-xJ>;^Q!PH4zrA7f62IUsV?vwr`E zQ2IAs$tBnL`T5~d2@9uQ=Fg_P*xJ5=J!l(xlr=P|j<&`MfY+_Dd;r4k0gWS=Q!Lg+ zcXbx2ZFm&ly?e94oGhJv2|7cUohg8yjAe*nZK|bLKWLPtEw8SQ{cDEPHR=j`oLZ8Q zByul!mOG;hrdPk)+}s3w6Ob5c19TEpv_AlDX}buaYy&Dt+Fi^KJ#PlZ(%K_)F1akH z{;aOvz<^hXGgh6t3cKYFnIBA%Yqy_nP~c$^vsezLeL95bRg!ElRy>TO12<`L!c=4n&d*B~xteDq?=% z@_NxU{?8Cb}?j#djWWpF&1g z;$A;)v23#S`%}DIJH{a014?oKdoM%Qe%E7MNJjN1hG|c17nbxj#pHzQklECBexi@b zoD80-0M*_G>}?0D_|oRm5VR4Bw`8uV3%4n-@I9Mk#lAec_(b?aacJuVKUT?N-g{~E zIJ@9g(X77Zhjrr-Z<^A4LOrm_wVV;*La1%Ai3jVmmSW9otGn9+l~!BtFZ`(eO_vt6 z^{KIm1HWN~lGa8r`Ts0cJZXr;w^y=7Cy^p_Do~ZFikrd-*Oq+*IoaQ!gO1@CvEk2D zmEtWa%eu!%_ixhUAa)1ffe#LjLGRDwyy-69HJqos**C9s z@#^KA*s-^81L*#?dfT$rUQNr7<>b~177&&9c-5@Eq%13zD4T9a}q=B z!~|r&{!JaXUzucQXD@goc7ej5(*Fsk`4~Wbv+g!#Pf6Jok!natNI+}=QKwBsMFntD z910-;&@}<{8N^IiH#e!$!lBu1_~rNSkIbkSL5LTy0%*rnsR2L$IboMqReyzIP#R@} z`l$O{@@#J&*hi|sbn5Er8X9`1bkCjTHgniXe^X#!r<$IZ5s-iTZ_L#mgZT`=M^rCs z^U2P1)TisWwtI86fMw`U;vMZ+OJ!x0Bi$&p0UcL-d_2$$hkzCI#}C*2bO&4;$BiLS ziRH@1m)WmMySTW3X;$$`lfO zpD=0xOgSeJ4u6n@nrqF8rI;yhXRRLqVoY&u`AB0ynVz0A(T@9+;%80Qy$Ju1ZL=DM zK3%o`{G(vTk|&^uRovzVA-WkZI(XCnM-mwX=Ew(hO`&>zy;8g#E_X3pQTwj4_Nt5B8x<_K2Y+_gy zSYkQN{&<$WEI;Z!u5X{M-G2B-)tXz~CEdU=k8ifS8`k0PK0pk~>!~bG(a@GF{hTr5 zKN9V%uAMVL&qN5hVKM=LFkcV{>Yx}4%i5b7}XZ6fezKh&Td4=iCo)`8S8u5ppBNSyKAbK}x9`H4TNxbZ@Uzdsn z69FNx`1$~9r)cxfpAS}6I&PCwAQ%JP>ZS>WKWqg2u`e~XNl;u65fb);Rv)zRz?T4M znivlRs4zmssRJs(>=$u!bJO#_FlzR`x`+Mb-S(%Hp-CE`Loq5+{&0b(s^?g4WneAGof z5(!SD$FK}=4nBa20pOWQ8nhLl|8s?EP{7NCgoOC|`VI{Zfh9P6B0L4cXy3oXC{Y$@ zMs-WVHfzOZ!#kzRe|ikI0WM5Bz|%DxEkC3J^%?KCG=1zm-zSJpNuh1q^shB}-Px75 zyNTQdsMS;nY6G?rhv11F!Di!qcrtCu(>ZU~aNlQ9ykXk1EWmN_;FSAH>LE!^Lz!)7 zagU_{sS59I>n7Ji5twZ$YA@yw9P=-~Ph~b`;!!c5CCKMO8?gOKgAXv_qKe?(>$~7469eZYxy)?D@_!kbV%Q&)9qG{It_sP*n0!5*57}asBBM?ha zNfBQHHWL)4K1bXw=#MUmm^Gi^(9+S7>=ghsMoCd|1dFxd-Me>qL_}OpTgm}TIfWeY zvTJ*LDM?91qnj&7+iDS-#ax`6yinATW?N8F*te3>c=XD^$D~po*0kVt_m9W10_Ib6x&5yFA^&^J;+e z1V4}M{o-s>x&s~Mmv3w0F0IyPnRP$;hWGJJZVueWvTkwJ{c3B^$DxzkV&llBsbPpq z4l>Kp-Ny*?;aXHz?m5gGTPgZouEwsb)o^U+I3p2-P(>YpbX>fUI8~IBlkO~( z#G7DIs0p(Y62cOaGW(On) zODo@EdJnSLs{KVIwL}OmIj_BF`a8$%iO|dZR)~m5wmM0eDM!L`XE?VFY_7GnHTw1| zg&Qjxa8v?kR|-%AJm97HG6Wnj+I5cIwkrT_ynFYqV%rU)Cnq;wW+bCIBS#`Dy>QN9 zHX@3-2&%mOeF}X1^kLHw4-b(x3nn!7m7N`dCF4eqGaw&9Ab?{7l0a2pmqvF&#K6R4 z*%$Y^<2?ZcG$ZdZhl@1WmG~S$j*Sct4^K>-1tAG8K6|mYzMh+t!({{0PN)UJXtv67 z8t72J;E-u9*3kb2C>l%7e5PbS&PffFMn&&^1U(I?5voDreyT7|3~&tKU2)lmjqG6q z-aqKsvLxL>O9sJD9+CQLJc!{6VQOQ7hH?Rn_$jOZlX?EGcP)e4?gbLE=6hal0pxJ9 zj+6TdAi*Mzv1Lx`3B&pduf5FBoWzwBh$%&ly$_Rjx*X_$QlujJ zovid;^U&g4vGm3~ObyfSL{U0ln!pV>=kZB5nEh=l%B^R|L@@1`7%n!lA8!(@tglkp zb~dSdR3s#Yt5Iy%U0=N}k#|;sdC<_fAd?N}a)5|CE z*qv+)1IdWg_M40nAQOp=iW&u-Y(kWS7kWD(qiS??bjZ!{vgd&~^$wI_080Y15BR}+ z3fWo%afuxbd{>Pb~{f?k5j0eG|2ADvU{ z3K%Bq_-D_oXWQPjv`(j|B!}XCln}LC4J3{&0350F&}?BfS-m~6-uRb;yw?<0yw<06 ziYm3k0oj;1C)X>}-Xp?=3L?C2G|bgM9X}8&xwsB*oh0Ju5kWYt|BU5}wKDW#)rD_c=t!7{zPW8Ur%#w-%B7vBsBu_xF2n!3h zPBw7@x|7dkFA0x|g~b{umtvZk6NG)5@Ti_Y{{vtd7?1;uDhSU5HWL*7KvxC8On?O8 zx%a{Wrei%=`a;F_3~K05-@)w_I*%{%y2`HA;r>Y zfH86I2ea0Vbs1=tfD<%@--U&f^M)J(I8(%fSAaaZxVQkPvjJWnbL9~FcSOwdL0y9s z3e@EaNxly{&Xud-PnCm;lbxGGfA_1P5<>R=AxceU26$J zDL^CzwYa$sr^9t+I;RIsU zG)i89WTe{`1kvQH-nV8r-edi6YX2cqRK65r_U{hOd_{{9`x2FxRqKw(%L5q*X0kl+ z+A;1w&K%wa)1Pw zMru;_lU17@YH~RT%l81EODoX)ojMnq)D$YKTpt$r0r8%nC&?50XM0lo*jAO>hS~t@ ztlkc9eq9xKh+zmASfEby$Fm8!U&}}~Fkj&Rr6i2mYc3XVYJ?%8+{ol5QP&=*>#MM^Fss?BWZ?BYoGAuBfJO*)I%@;U3s4o#g82x1>DW(R zwVd3}E4;ymM4g?TWq@52sFT3X2q5K*{?u;;siE#f>xzOC)oNAGJsprKJ zn4{!8wrK#?0qfrj;F+uTyg_SMm2V6C1LA$@Ud57HA z@%Gt!aoxiv_QUa5vp<##Gy6Hrj{{FlOHCa_foi9MvC|-(a1>LQd>ro6X#jf6lnc*e z09(VY_GgF2Uo%&m-sok*_w`80cbtPMY!f+Zx(p#f)Un?s;14PkyXKR3`KwJgc1)Gt zWhKCuVPiWPpa~6go&f5bMU$u>R>I8wKmelJzenlbIOVovzHr*)%#||`X2tWEX8sAR ze6<+r(-surYr{>d7Hd&0(H6E#;0Q(MyG{oinl$1i{y5vT31p!)1kIDpT$-+<;@(#C zU~+ zU-Qdr$B5g6s#cpi+;EUL)Mk<>W+`H9JV%!Wk^|jWcd}g|on%LPelO5Qtk7-eKHMBD zR-u;A+GbZ{|6$D=AF0RW@4EdJ4}*VOv*D266739WpI6}CWTG~|{_P zjDEiRV15lD{{SW>M3Z}O^4AzAyZO#d?m4mACrM6=zSd9DVirK$@T?gxV zRs8-1(qq&2Bu0PJ<@M5wWxE&(!k9QgqiZ5F!H@^ELUViIf`kyGJ-Hs(2LqH!GE;jb zx)VN2Ev)M_RNmAYc~=P=BNbu3T@qzCV)eIZ>=6V>_EdPcw^*f#9&j+t&HQzd9*tU! zoig_|M6T=C3W@K9VZJtl*C?vE9bokWRm5(B8{lazIcdNIxYtxGjXB&HGYCbI(fG$5 zTb!3Q%Y(hk<_`4RF?9dYC8b;tB)Zp*mDoRG$4ZH>=4BCVJ_-imazBw6--_86jyhPXMiqM6Q??am)-@iftBJI}WKpS3u2aT5Tt+?Io`pdn`uPvB zam_B^Sbka5E+c5xD&y58MOyh~DQ8Jxsh90Ulx^)4C<6;1TQRMu`=P-42;#}@)s@E5 zA2N6_ozN;%ol=Cft5;#R67sz02OJjTZs|vZ;w1L$g_oIqUzsH`^mHmjSYq3YJo6JA zVAlM7tPF_3NguLc>3nUHWKGwrbDvfli^Ifc{7DRYDS$HO^`tcWJr_E%i|Y4cNIMip z1chE7;L_V|0gHfe!@yC7%jh8g;1f1shIP*;qIByaspXWpKb4X7ycBlvPa&8twc;$X zjKH@JNpFaEd7-&h`8_fq$D=e*VXnj>hn8rmZgG0NV5r?!+321XmuLtCjAB(-agC55`3U8C(p&S`fx5nTR_N_m=eZJ8XZ8 zSV41Et-^zt8C1A!tJHc{M=W5xHpr!Zx-dOysUC)k%J)^~b01tKgNGYG7eybnLj{h0 z4Pq#p%SjHwt=u2mPrHm#T)3)$ZH`NlL(4#8&dCZ@@K_MklSP_&tN@F~N|D90;)&Mw zbge>h1zgL8s!cM^5PmbXGtC&dr@}+r`x{dkiwd*UxG8e7-Hpb@@6I_L_vRWFEA*2E zbx5xRs&|%5>&++fm?cyumbhJ1;L@I<>_B@*|$CC zSXBSBX+TZj-lRFjtJ9651p#eR)dt?A0Z-3h?YKP9vN^$uug>MutA zadiImGNwoW+5O?>0iv%J|CodS`h76)JN$L$?{B_hVB3Iy{oFzYysrQH`9tLY+lP-< z{@<(7(#*=j?k5c{j!V$^|L2^`-IEZNM)!K;ayjZG!1x(Pv8vT9~X=Ha7!zVz90VQ_rhNnkzR0cVi+>}lM33SxM3%CagqH#ayK>&BywX8vpa80by} z1O=xptK@SFwU0AtME+}{zCnNW1RHGRCc3h?_{kqkX31Lpyt(tQ+t7>uKHkl*(xiZC^8t+CWB()QoUrCJ#yE)5I4s%>I_zeeKUuQ5B1c${$GxTd#N zx5m-(U0QB&u3z3Qg$^I0K{Quc+8$55w@&9I|?*Dhty*aMjqyG-fH;*N}`0wC-^B9NJ|KF)(H+&cE;YK9| zOGj3$s@~xGPc8nh$azcShljgEnj?>WDmVkJQSNM^LHF+PqWB6WM3Ti(gt_)IoVh=6 z4;=9X6RFpFIn#R;+@`P;pihGMk@u~HqYkI9MX6?9HO~GCE8(nqdNRG)_h>wfmy+@t zN5PfHubcFI@jcZHLVuq{2naZzp3Pq*J~hJ9!;ZW5Or+zT_&W931x0cUF`0zhIC+G` zhF|kts+MH*NRtPScZiYx(LaX064oQ$7I&f-o+oSG_Eg=qqKZ8|bFL~VW7EnZuVH&| z3tk~m&7)W{f>B*HFWih9*k1tq^CxERF2D7u<@V2GzX&>E?Y2-P?zPMO@E0Gu@ig&q zTsfA{IGrnAHE{7=D^-P!S4}S49S1^~Hy8Bp+u)M|FEozNJcjtGtyRd*<)4n?qsg~d zhZ8SYp@PluiVA%NXqqg-K(r?XOT)?MYqxBmfqneyhE}@~gBSJY*07!gVlXuBYL>G% z;bG@K@=4^!SMhcfT*i!NG{9>p?)q`n+z&N}iK@j%1%Kx{&lIuYpj)TM(di|-QaSm> zSQ~n*s4BF`fGSlN6)nVhaWNRWQFqX$?>|A28CMS{ki(rG5qn+?bQzP;)7 zH>W^*Xmj0lTK?r+RaYsU^M!FNl-G6JSbTaC!zSP^U$t3{4LR`-GjG0xnQ1M><;frm zM-j~gwF3Q8$+qP@$ByOFyU^1k%cSJy#Wu3a0UirmEo(VF&p>f1y%G)L$cB~dH;!UP zGM)G2?jM&R=W0?|^t_%Q%73zNZ}RuPB_GCx6nFY$frKbEE%;hc@*@rZO~4VPL1k8xEYgPV#?Iu_LaVOW}Vv~atnyI z`yjEyy=j66LdsrxGKmmAD7u6wN~mPwAEpKVw4v9RtzxPHzpl z@=hPj)&|=cM`u5NnJ{EVBD+RCc^qVF$nD}`as8{XmiW7jAz@v|LBPC}SEH>SCofqe z&Bt43f5zt&T-x_9esbr&9yh{2n4-Wwvr(R3HKxOUXv;^gWt;nE`Z24EdYS|HGT<-l z`#28HZRWyTl8lkak}tCA^k7$fwi`?DfqD(~=~Vw`rTb#&e#!Uo-u~xe`qDB2KN$c7 z74uJ?QcQMsnzRMsqu;}Bp)tholaG)PQT6^Ve1o3icmB-+vD^9U98nX*;eRgsg7 zm|H3++}dBb6f|bnk!GIuWDw+qX5`6ko6~Llp>cD`)AJ3K8|U_G%RrAUBPi>^>g7xc zQx)N_mA`*%SEn}JG&vGQ^MDM0zVGF6D#>t1`{g;Eer4)$_T%^>NT>1e&_D@GtK#11m*xDxk~N}e zGwm0@*ZFJuNQMVg9jhsfQO>)D+WIRa*V4uMSEXZxE{3%1PL|A@B!4(K`w|DeK9FUq zV0^Di`N85rV=5hYHpk2zck-BO>*t>*_{k`wn~Bz~@?$yndSQwk#fwS@u1?Z=jf3Oa z`M5{4Aq1s&5v(SiCO_!MzMK|Y=D^Q3w+!@-6RnG{uq(Ar6#od{4=9Z{svj_FB)>eE zO9p|iS;FMSYP3wSa!Odn=^hvK)OtQQ*}yAlb_1Gev&!(B7;dp{ZSb{8khm;tzOOl+ za=mOi{gXUJsJRcXO4WzXem835g2ylDQLod@XLiBS>F3iszP--n1P`}1*l5OPr&Zrw1dLFPvqrjn9FZwEGXEO1 zzRlq6kT%%zoS0~Pct+qW_;CBz+-m^?CEE*Is$Le%3R(7*`mKj!+lm*(N%j`ExQ9kh z;odOx&q>U5swG^GdX5<;T7k(F{yU8kSEHqmYZWOF{X>Dmff}OWY}Pt%Z3*Kq>B5g3 z2oxw*>JQtJ2|boYkgY}MNi(yF{f;Z{x^1BiS)^iiwG#_Eq&xKSTrKOH1461EQ%#kN zJ=0q4DpaO@2^(3Y0g0ln#;b2+)b?v5;N2zXbq!kMf}g+jRB8=MDzp=?c8|OJb@$6p zRfb+AqR-r^DtmjUvgJQX-tH9KgChacYh=#V%6f)IQmSd39z2wr0j z3w4ufkRqqEKJqi_s)L;xMGuBXg*=&KgD$IF?0>Eiyf^iAFw}l~UfJ-B(W*=3(rzJn zkV*BT?i>7`l6d4+uyE9h^nAARbY+F20!Cz^XdJVWjc`;X>m(9+>gA_CT>VWA6`#kQ zP<&1r3VY&J&vWT~csPY*-aqx+cu9*7Kd4+U(*Vgz&iL7Me{$=``>siKdSvDCs$`OL z&a{3Px$0ewDJ;z?-Uix1CNV#pHrGwkAQo}wt?iNXb0)ZEvnwBeb$>w}#`!9^bV9EX zrx61sELD~BfqiML_lHIP13I*Flv*eUuM*WYN?Tzp4yk0FH>13y@tcEycb{BYS3)KC6t88N1IMf z<~#WfP<7u$M45=BL>s`u=VtFY)f<2vIG+u@$<4JF!hJY9^k%)h`WtIb7tCW3#x7@2 z6I1v+1IZ>=B|AU!zOBdvMu8B1+aAn-uUs?~s^cNlEGr^i?}&(q4bC7Xn^DU}#%gUIylwqdpuRb@i7q(!l>s6(g+%JhaCB&$Pq7 z1XSSqc1UKk(;CJ4cy0WUHX$A9uGDL3ZdKE}j&Yd7wT}$Ks9$a`)Q_H>E@O28W1%sa9}fs-k9Zu=&|-ysol0^ zi%`-9{SQB}V*920q34bY$jXWl-b8~irU!%vQ;fO~!+M$c6P0&%E#bRk1Gs_?$-f+# zxKe|}9UV+2uyY(~Eoi-vy~Dt~ zJu*1>Cxt5u?~^VuXoAX zkZdv6v0W8<@;O&eBH1dUEIh(5`^zt`wAa!tY9BGeX6Ta+P=A z9<-y;vNH)4?lhu03?Ju*!Mak1aydsWyD9AMMY%yzCn&=2|HQY0iyzz2jW%H^T(AAv z1?5K^6`zxt64cz2Y7;xBR;y(Fhq>;~;^ATNEwBtL2Wr+K6A2>K)v4W>mPQD3s83WW zFw#-%*F1f;!BH9>8}5)?7OuCyu9D96N@Tb)Tubd~DeS^KsM2?o2VJ_$0P0!Uszm~| z6pFe2h#RiCwB%~}OHa+7$8zF(EP5yW=%bX0JE1jgRLAwdI-3b~mI%LH!{gga2MV;&}91nv=x$<6e&Bh8GLX z!|lD@-*^{keA<#5RT^j*t`OXH&p&H^_@5fB!WIzyh|}GAw_{`AbOZaJ0-@a%5-A?~ z49Mr849pMji7YgEg^DlxIfE@l^&XN7)ci2WAK$v!qg7ei6BzY@WnjY-4K4WKz?OD> z8Ej1LcG}Jbqz>Q)w*N)#qplSgV#LM7^s8e3T4-O+bk27vs1=z|98nrJ90d5mVmEWk z#8j)7*lM}F2S>NxsfrNka_RtOlt8r*g*S@#;*9n;{DU3$z)aYueuP;3jNY&_OOt4~AZDSsIsa?Z?e+ z1u&9tSt^!7tp1c~i15LZ?;CxVNS$*FH@Ge~#m| zn`p&Gb_?vx9HFqYTnTb^gQA>qX@UJrV7Dbqh|d41fBBMw?(S;$dKs~0^ToEXS(Hel zl_>n&lReRFccD7SwBz|gEj2Perio=@7PignI=<;y+c8p>a#?%#W4YMe#P zy8+V0cCDrSq9<1*IuP`|lttg?>-#y*@lBiNp{yE$>F80%Z$)n5>*N_N2_n9JHc!75P`#xH`Rpq)}SSIkUppK06); z>(hNjkDN?>N4cZ;*@<=9)*FTw0(*_2Q?Uo5!_jt>DL?Y5j#d+1&kIh-Zz3h5B>J8$ z$%x)89Ewu!4MU=bj2uH|qH1TLV-T7rXtuDn;VN7sxlU}h!5>Dx-_7|lU#z~o`TWvI zHGEMoDUvAPJAA+s)NceSQaZmUCfjFPb>p-OYAIvRP8^Q&~-uscuzWpC>Cn_|^O329GMMmjWN|fwuvPa6^ zDukqEg%BcJLUv2CS3<}rdv8McK3?7Tb-l0qeZRl|!RP#;t4sBIo#**{K9BJ@j^pt- zUE8^bvao%Z^r0VKi)uIJJj-+LKffbrz3M_Ka=in~Jwo+YYWX$4zrVlGZU}9vS6g3z zlR7C0Gh+7By&q7(Js7x=(e*SoR_|iHtWLU4@gn*W2rrsP8kaY13XPWXi1deVYQ42T z9Z=$B5Kf?R6%p9!j(^2oWkL}bOodhTY($miUCn(z_a1p0HTFK_f>*ZR&fqx%%CFUL zWVKc=9(&D|BFHDp#n#7Es_1f3-C%idepcW@583Kf-F>mDYUzy*^G`HvDJP|#Z-17} z6eE4^h4!UT$#dc#djtvz2WW?lBCda~zeoLZ=!R5b{|)&)=8V`V+*{2FU#r)zhpsb4 zYx8hj<+d>9tLADsbbo12A^Fs(?s6VMI5lc@=|`2Apo6yB)mXQyEDLeZwOM$SZhlK2 z@$OL3Q|?=we$Dl<(1je8Cfd7U6!c=Hv|%W{F9`6lByr| z;}6G6pL*aY7u-^#+vNu<#LIrw3Pvam4RKDkt-nnVd3DMZVNk81YUm>Gn>(i&w7Ifo zZoXk=F3rAFu>lvO%o0Z`<+lb;U29j?9T_{n#?Sn-TRJtXi6)@ZIZN}-`S%7nl}1VX zkCT0#pVlw(FOS!;+gQ7IPN(DRz|Ezv(efNe;#1Z4ULRmC~|<$ z#5d8yak1-5<=jxi&<%^^k#BE3tb-d4OMCwA{op<9xak({g+wK0(!G1He`}tenaO^( zTlff|GYZPmcgscTKYNS}Y)sSm*c{zWWcBz{C57k>uf&Ob4+-Px-0vk-XawgOwzBPu z3@hbXR;sRgRTYl{YR&-v6rrZNHmS;HQGsIjuWe0Co_o)T7dl#AW9&DtNfDm3G~Z~w z%cbh5s+g2FKKd9~O7P9?1mV|dvI7feP8LUB=EeDhqm>w+qN}|5rqrf`S~T!1L1J%B z{XKOLkAnkcem9L)!`?$2WGAsQwLwd^BExebVZr&O)1|qFXfEHE1OQiu`zj7jFs__5-UC z_Z~4h7ZDqE;(giYnkLR1LMUHbLHjPg#7h5UujdF6j--YNCVrs_wmZ11eIQ)fxR$`* zaN>?O>z(0-n7=UWQ(M8B^A4H~0cL0k!Ju8y>ao+O-Z#dbkzVc(Mjsd&7|AhEatmmDHiYGUifh1=FJbPf1s381bZFL>iZvrs#{j>N-_ex z$}jB;4;FvB-j|5@F0r+8ci})tY5<4GJ7$r0gJMTQG+8KT#KsxyWLg<7uFcsl;^-u* z&`^qL%=tOlt?ECOp4($$@-!n^TT3M~!$qC8EFor5dd8QwG{B!~yr2*u!RVd`+6__b zzdZ&7Ea-olT!}vSR_ExQQ7)YcA3}&$s^=(m;;d6j;6Y7h+iZ{CUB6c=E=bPXb$OHs zEjHAMg|>}LL>10iB@M(rzPRdkQcEOGG4H2c*h8|IwXwXOOG%~Q(84qEwn;WZ##C^B z)LGRpcm4hAm`wwYz;dvwOAAl*WebFNRwdn~OZZ%Tmieb-)sL_Tdm{G@t~Ht*b2$iG z{OLtFRhVUff0;?1Q~s{m+@P8gKCgk`@U3g#KSfz4 zy%TxTxU5Fk7pc)hrxWGYRuYbxKDqbeEN6}HCP=LmP8O|vqnT2mjz1pBe7zq_?y$I$ z|G+o&R&#&6gW}F`c*Dz|sN9QAt}l^KM$v!xaJRwmah1Gn=-X-qGePA58CgR8n}rk4 zE5AF-t10SSSEowrF6PQm6kA^potx12f_`x8DZDAqu zTLu1}3sd2*>gX?CKgpQ;NH4J-n2c#F&dGoAz&d7OO28`2TSPDE>spT0DNEU=Go5xZ z1@PTJDWnfZyZua+_?-`<~s>eN}tnu=B-mj$A@Nx62nl>#j02?tVv`YhKF_ z#$8>_wbf`S7tAa#6PP?7xbd0jT?%!uycVmKI%E6V^!)7s5j2J7ke~FfLdfxB5oG$T-#4CuCe5 z0!B0Xa17*Xj^a^%HxpYEQJ$J`eD?Fw^@$0?vxH;I_eP63RYz-7UA4G$ z7si7$LsI5n?ho`gtE#!Ze??_Y($my_@LuUI6ci%LIr(0`6gm>Foxvz?B3H?oZ~rxz zKWcL0WyF`j_2`=SHC2)RuP=U0tWNC<320y1lPJC5>3J0APhotloI5;i59RS$WV9KF zsK0+bbFH20^w9N#dJ0@!PREL8U8VfGs&$dTvJY{h(#C01&7m~9n~gHIPl^24X(}n+ zRzk?Lm;6yv7f1M`jty)+=sMc@ruhqLh5-_V@Zia)0=c-iS+(-MpO2`I_)0to-t#Ua z%|T0jtSYXXG|vF;TGnRJ<|NOWqs35BuKAMAt3qEP`68Wos295MN( zayb9(lDyeRmevm$);%P1?Y5dl?l!+`PcPM-_$)Cd7^un_on5VcG~f0hp?~fZd8aIC z=c`jgHBLqdaIOz<_$T{iZKYfw#@Jj=MqM4>l%p?td~K>K_}DMu8=LkkYh#S7ckLw0 zeVGK=ZA^FmRm+HcgfUe_&)tP~6|dQZh}RtE`oMaqg|6}i;RmB=Bg2^Z`J)kr;Lx^P-8b|0*H1FGCSvu`qT(F&CSj9v z!4aG-yM_m*&J%X>8i#XE(cR#@GJH2(Tyi{6$fESI|GJ%oLvM95A32-qbtDp_jhZq9 zxuD1X;<;fOWGAoz!j+6dqay0&7e8}(t4BX@xly`A%kYqg|7oqnUP}$?{824Gr<>Pu z{QW;(n~hN$qA!V5PR#xMeWCsh2A*Fk%8YaTIdTZ9E&~Atcd9FF56pEIb{u;#dTmmOMLRD_z!89yr$ocE!=D}-7}+upfBh9 z?sMrw59XahNd)hyY^<@D%B8!AT{T}w>PZmd$~ykE7M`iOG$fE+W$D$PJ+{p8WXD+5 zn~f$HWyoPp3p>e5=`$t|aIjqOr@XT9{AI-AV|MlZS60);5YaP!7Rt|Z)j_^_44v!?#Q?4!B0kCGfKrW($Kh|Hyz{8sy&g> z(RD9Ee=RQySk{^d1uuT+n~~Z;k6mLU2>x~-mT<MGwx*auST9M7+XF^HG!M|{bcKE3J$V;1&Cm{*?=ggGII8A=rswNx{8lC*1 zU&kI_-|a}SpO%}fDv$||@UJuzl+|vKrqMe^=<4j)|2X>KRCJstzF=&jvS3SD>F+1y zUZ2X1!}1&t_;yL#swpOA2p&<{E>u=?OP~5=8m)!;3IFA|+w}zdUn7YgW(!FvV|?r; z;Ze0OT4|Pas)75^Q`Q~oUrk;RBCQq)Gxj=8$GkEnZEo)CRO5#1&7}33b=Pw`dN%V*R9(o`cvrWw7AvTblC&o*3Vm$~;h%c1CW^#8^g!~G-|C#$I95Ed zxX)OQfig60PY-=j>5`!+hB21I@E&(nCnHXo|b{90mZay_y#9)GaEDc`H7+eK74LnyK?ghjdGo3lu%;)n_R zGupwqe%UOyZ#$g7iFZtAy{xHexjW>(QFp?i+6PeePrGkSms$1?^pMz6?r&;;5g$e4 z#3eQmW+BxXTdFDs_Gdh_NhZHbsi1N>9D~$Ud1Lnz2E$u6Xh6$D(73@i$<4BdQN$1 zdd2#rzxJnFp88Ey*7s^WeYu=8qg~!ntwhgMvZC)hL#$&Mi9d&4Ce5#_D!2UVKGSri z#hPZzRD>LN&X!HvxyGGP?Dp&uw_LsQ3o4agh4*4h>~zPPSElp6Q@;~4<>^g!sO=R& z@%)|0D}^qnpUjj%T0dt>_EhW6zjKPUqnOhhYj&+@zkf$?Vw$i1SJAy1)s>I7)}}TW zvK${oUHZLhJdYx!{Mb~^K(0N?k_#0|)&y;n*85Ak)16KNX|qhD-x{XPrgW`Zhq4^# z(Imk+COPhVQE!*_8+L=G<@Bzh9QyQS`CB*I)6ep4-{$=7>rz0e*n4)i(s_HsrcSyn zQWq<#z{FM>w>J)lI@%ptZogQGY8*Pv=I1&k6?-u1Dpk>Vi1$;yIDz5aY^GWt?%n*r zwZ#7HGVe$>hv01U`r*ZoxRuq0?61HqMGwF0(=SuE*i*~Xl@TNYk-Ot)Q{y>#oD;tyMI)CH5w*csUpTvx>WCu8pq?poM$V|WDC#)Ci zW2Li{QovWsttx(4)zNVg>UUr}3^41+HLnffwYRxT&1{&hVe@Xy(abFQ;lsBG8+C^|NhUrXz6adrvfGn`@y%zPJqqWJb=ud%tVcOw*C1;Nv(^!jc zjE?)be`QV6=zCcYWHOFOXVo%4$`58*kAGgAcW3?7{Nxls9M7n(Yi-NvD3;C2i3s}E zw_NHSVvE@~+RXR9>b2eGho#pw+fKLHmR++AwmmSw>G9mp+U!yD{E!Ei`uL4t66$vc zrfaHl;{~lPWz%RIgnqilw96YZIlcF`RNp;0%-Nfr=i2=EX$kq=RcV)@d2)MCmf9id z3gv4;{V=3AEUTXHmC}=)vmH1(a#?+A8IG80EpJKd#uiW4{<1q zQnt5W3@bT2nm1=<61spua{HUtT{O`yTragXU(DO>-}&Zsv{bT!B3GyB4K-$|q3{UF zbtg_q!OSB}#oy0WMt^IwT(5N0x^yw1vg+LQeYdLS)44XDvDm<5(?G*Kfd;y2&vzC zCmPWDyXXWCH8WI##a%i}rE42b*JkzAD-8Oj!)j}Ok&3ZgwNWLn(H6Q~>bWnrtowJp z9qvqwM*R_co3q$ehuPO|cDF9Okw+~a77cX#tVvcVug&uBK=S#`Cvu6Hj3j)0=e03P zB-sR?OO|%w$D`I1kD<__&b3-Q&?*u3LMa8avadZ>9ZPjD6Nv2EL(xv0HhV}&^m8y5 z(=gfmk~{}REnHccj|G94C~Xi31_tV*Pev&0+O=z}EsH%KdCB+s`n_#?H$9ITwl4zv z*r$q$i-})mXKe>3-d9w-#FhuO?!b)maD0-#ai&MdU2*=XI+L7sqC6Q}0#P!?#t8N7 zcSoe>`6TGp?O6PiXLg$(e=}$9`L9Ne9}PB6nB_X?XK3o@9pJRV6y70>3@LJ?w+Xp` z=j@Ar<$6{YqZ|3Ivh|1l&%W&tjjH=`;{^TQCC^$QUU)B8xmy!j6YgD-&uCi{QY7|~ z_Kqly-A{OXk1gJtap@r0hKFB9BQ1005WrZ-&X!r6p-s~glH!VHc^Us7N4 zs2-TbvjBoe7AVmT@lqnQX?us1W=hxft|9?*#*~y4ERD`PPY(=P-MBH0iNu>Nn>LM} z0m1V_>2)GnzgqkmGg(;i;~-C7xp={6!>H!BW68>r#eV>DZ^GELS?$XZA&egby2y-=yE85z>G4?go-%rtmH#Srk zH8eQ5c!(WD1@+v}h+(d-uV;(*@$tb#amzPP41(8gQD)etPPM7`F-9U0c61pDwj|z! zkp*p)Ah=(DlwC2(ull2W_+B|@CGSC&yOZaX?|9|6JGa!{SY!x@U5@)g6K%acP?waj z@vocJc^2{;XWZI_Cs*_ z1J8J^vGc5`&Fo3h{?wN{_iCh{HA3K9n*#HH+zXU2sRGf21tNM82-$LKsdBbpRYYj( zKxK1xH_dEgDGDQ8tgOCeKYk<3B2pJ6vIdsl1M$X#2YX3K0CBr5EE_{?Q=T9b$Is9I z$R7+57-&wL8v5uEbzx_Q$mFF5?3%pqq$`uXI^6ASa646Xc6 zp9n$c&JgfqHys@I?AdenxTq((eg_k@tzRAd5q6zY^wQLWOJ*GHf+B`*9P8iQVdWU# zj80p&ga7WdtveW4P7C=&aFk)R4@5bw#ZERgY&q>En7hZP^M-d~FxzjkTA!bPt6$dJ z6^jWm#`~D-J1Z-TB*zky;TR!IE*ZfjIc9f{#3R<6TXtujou5y?$&NJmD#&{mrl;R; z-@eKDC`Mc{u4oe0ZnX$z`br5;OH^;Op(TJ1#y3zj!7I1o&D4Y#G@2PWZ;JHZL>{G8 zc<91ev5M6lQu>rfFz3Z{4bcs^bgre|Zs z9q##eyU!`Oxvlz5vV+T|px~)Lw88Muj9+V;n{%*D3G-McCr}fMiemfZ-Mo48%-!8L zZEdR?8s6EDe2Mj1zd!($3oO&8?OQe_OM|CMf7FrRW~Zd&#ATzih#cT9hO&&+RB#aq1C&<6dpxPH^ZOKoe7HPd~R z3Us~R|Jm4Vwm3d9(Uzr0%ix1;cA}3U0)urKO!e zs#$1j9F(<(jO^m&%jD$b?8IXY8QY?-E_Zf(I!Ap^;niJ%3v}rfpTCtn_E@twf zs%j+Yc(;BS7SMR74iN{{Bzg;FC&_rW12#JrEfX%?L*8 zia-EDNG_T+JcDECZlk4r>H+EWtM=v7Stc}p8qvdO{=WCTyan*`z^N>Lb9)LI)cKKS z#syVKT*1^``+VP}#QQBq)FHXOg_m*D`)hESwYZI~eq{z>s|#cKn4tyT4)S}7Cj9;S z7|E!|j}2T@!Ts}eyJ*xzZ}0osE!Wx)3TvY0w9Y5Pe|71jr=G&7|8m#n(F;g!)Pu#> zOJDUUN1WXvKt{rWMs}8fBYzpiTZ0u(-ap3t$9}sdI&V1eh1uDTLOW9{D{e}h1#l;5 z>i(RVkhC9GG!bKCV-piAtj>Ji^l|7#V|vNHp8+yGoBlM%|MhvBHsu-t1KmqXDkm?0 zG(L##cqZ5y>gyjg4Dmr60_Tb-N`NS3|Gs_mu9D5&ot~69oPSP33Cz0=M_1QG8byUMHds%av`|ZbDt@P#6V3=4W>O#9f7?d@-V=j zFwoQcpHFBa3cw3S+$S2sZkHj3d80l*v_=2tRd+8fZ49OtOabi7AT?S08OR5FY6L~C zp*dMF(m*SIlD73s)Ei5?a8X|;DF%R>colaWie@3_d^`U0h!K#9yKm#|?!hz!g zFfqA>J01%`3G(Qu_+erL6Y-@%;b1nddYZ_J4N%XvbTR;wq!+x;h<{6(FDs zrjrhw&AonS2-xs|=36e|{W%_@FshD8OQ|0sZs2 zxw$%%IUrAP_3RWR^b8CE$uC|I(pofWq51*6?wufm9?oam_Fp3ibz!lwJ(&L{if8m! zQijT%C4gTDM$(p!iz^Lml|hFkHIGm{uZX1judxJSQ<=CM(4_#MnG%?#-QC?m5D!sC z%Jz;9R~HutWK3W?bC+UdXgTm-gA>n}`{tHQ!QRl4MqLyyWAR%MC@|#CF-rsZwchQ$^Jc-Z%j*-HN`O zh|&DYOmgUcJp9iuIYq?dv+?gSP?VhfsLF`c_s)fN{dF5*+K3II6s9`vk=qW^Md1@4 zj=K93m>-`vvbN@-3beMeA}~`1Z``JXPVhf2S|;3c?g>a?CNyDc=#M1UzjQctv-100 z4h5a75mX-SyC5h{tJQjbU@qIplfQ<3uWVMEWgby&w|NATo#&6fe*Jo103v`#HRW6P z|KsB~(UK)9nOj?T-C|eN(C|-dJfweM|MPN0;o$p5(tz0~fHf($21pwsT0eb3?4!kYN8Wh#=8_J-7>HgDVK&z})WgG-8=s&DYGh>!S%w{{FoOhm(b zK6=!MY+{GRo)nepXS*}c|7oTr`*>hlF|7q(ig%yYmZQN9snUG`+qT?ReoU2i4Y`RyCYwk>~F z2;6J`c;Hi8X(92^ikRkl7cD*gcg5|}=pDfS2bf{^7clQ3!;a?huQK{Fwjh`IIyYA( ztwmg1yraE+X4zdTwqXErW0|Z&-jfFxlO=YNc1d%|1uG|h+}Wi!TJ~hw;MlLY7K;H} z7x;Bd;i2q%>Ig+(Ikv<8U$$wtDONDba!_{^txeu*w@z=YzkU$td4PV z&Mqz<=GWi!*Be4OiAO{oX>0-S8EWp`-7yt?GtLqh1s;yN9Ih)klWKZfqx$wAo#@L1 z+rsZ=!fGli=$|3mw&n0cKe}Ci-$NvGaMjV^Dy&#=aIhkWyGeyAQEB;0d3hqQUYZbX z5W?Dh0Wad-mh9csr~)Dd2sj0gtiLPR&g$&#uGE49^x?i}ki*nbt zEnZ$5Bh4?NH+9!dYGfqQm*D2+_K;p|pMwj=z2`^eKL}-JmjAZ!!-d(4fmDJQk;kr@StD((lcZbgcqLZbWX92_YFu#*U_5sxA zL;aBhUhx=1L;~pad5Z;)CA6j8-G75b>n=Itdb???YW;7_9nKBb6+6!u4oDuLqJsR; z5C$vg*o&dbmoH0l0mTQ`j@ zoJ*i|qWpV}gn78sGmUJex!naI6MsmqRSW`wQ1O5PF3`sO9RxhshORX}KMnT7 zyI}Ov=6!hYUI(OuV26N?Aug?QKSOj`sTk43BMU}ACQ>)c6z^FoHf63U*Tg{}3eNs+ z*$)z5nZ15<$?Oe=*#+9XLKWcMiGW3mkQYhvc%{LOv>Jo*4`66qOJgFo?})s&HQeqE zA(4H6qwydQL7ywid}{}w9a5dYmR6sVn%ZfwmWDYJks0!@h)_r{tu}bA3z>gGZk-RR z6EuBFevw*mUBkV$SS)zc(w}rhByr#W?ds&o8VNzfJGwAA5P3%+RpPdE{bGk-liBxD zx8sxxBh5pIc?_i%@?O7=6gGbXc60=ywzjr-Q%eZ?dM$uwd?gV&iG7Ja&WI$RI+Npt zJ`by@)mON` z)0{L>urKVm)&1A1>LYvJPZ?E*tU_sE0UYwRFE&9etZ~HtVQvG6un?Nm)YVO#-UH1f z|71`Vg*_wRfv*}2sj940%9^#yw~I~eNOv*8r{f8Rnj^b^mP74hMs!T z`P>D23XxyOmK%bO!~^)dneO@om0;uWEb&KALlQ7+T7HIc>CBP8o`Zr?$VCn>*vi^E z%?g4LCp~``Xl6VJ3YtKs$l&A*j#VrH>9#uqHR12(>Q9QiG5B)A;`i^cy0@#oM%bc| z@-qK@MBXh!E$|{N<@Edfi}ssO1u7MG$SQOHG7zRk8V;_7CbRT`{>w2E#A=(S_~}F? zfmH+X7w6(-){rNFw;su3?A6}9o%OA5= zyZcy}1!Fp!|MD5%s%2-zjtbD6d7@PriKh!JriiFM{{6z<8cz#@l*KC-?~n*{0#Ij* zPrT-BbvD_o<>$A11sLO_Y-(**n*S?QIR%Bz5Bf)#Wo0WywNP|^>I>wcXuQry&;w#( zwuMA3FaY1-mgZsxAARtR`_%h zAYC)6dIE2a#%iS5z^4R`vEf(aq`TN(w`dK{?|#mj`fRbO|58ja?YWRkuCi*j5AA4#13#zyGtDBlNLusc|8>ewk(pKvJvx81 zCExZ0JslmLugsN-+=qx1bPH|EF-s05hCHtVPO8A;U;+jWDm-{7m%3Va|LABD93*Fp zEZBfqvo%T(gMzyn40!RgNsvuiE+dyl3{yaC>LI^_oPx*SIPyu+QAy!T?ovI7mg?$) z8iv#_fBc3wqvy4DmhkT=mJ%6>o~nf>Y!+`gZ0Hn-SCMJ{xM3ki-+WQNW2dcDBvr_Y zSvG&hU$OixU)I<%;FOYuWQqCQjqEQ9zYZq`Qe<0dKT0X8VS zDe#O|S62Q4AM(=%O?2KP40&)^QjSmtu^Ygu;o;%hyhNc!uZ`6n1et8CtZT?5v4o$2 z3vEhXW?oX@@W^` z7;a>eirv7+Xsv%V_#$;!bM}Sp)dPdi3w-~2vQ5uZZrGQcJZKBX-Jm^B7m#e`jeoKd z&4L^x=*H3Q47_Ra47mmWp)g*ZRHYQqQxRc?i{=z?zi=s_lp+V|8WF5R-sd(ye3}5v zSiZgjr^IaeKwDiM&ygeg@QuL0ICy#2p-1SswxF)9_~!&Xp}rLsZ=3g!O}vb(i|gGL zk2Uaj4zE8WXZ~qhh+fwzAUTPrLo<^-?o!uKj_9uMlss|l@c-O=c8cUgnLa;)9aoJG zSa5h? zEyT`*mEi<5OCqUMiAgRu61-XXy}De&Vv6It(BF61*pDCrN5%cBrj*n~C zT!N4EPX;FcHTjB&s0IL9%0fF@||)+Y|+G|B;B{}E(oqw-{3b9SEmuS-P@UGWOHcuU0S-~g_Y{Mr&C=m-37L8 zScBv(L=uBTL7%}sh=7fM11(2#iGs*iczGv*2fB}C$ehuSoUy*Dibm2k7ewjG?FNvC zES`GH6g?I=l&H=Cl7g-r;(M%|3;al!3EU;4$NUxiyZuCmM0AY}G1i>f|Fg+_<|jIji-?GT zdl+bRd%J2koR0#LZw^RCvN1XEX_KTcnKHcL@0PmV2*Q@F>91b#Gs6)aq`Ycj3x*W% zEvmVw;%2ce2Tb53j`8pW1qLD~ZIR9?^;|1Tq{(DMV`tDK+Ff-Oz;IcZnSEq_d@r=y zfP+Lq4Q!2*C<>zlRa9lP0x%V_mjSx25+DeLS{6|4J)UgH?T_xGe2jO=846-1BSC@v zZz(7P%Yk6XUq3PDWfF{Fi#BM7_w8f*m9AWgYaStj3`bq>(fkCrB&0+var~M`=eCnk zK_?G%_h8YJ#ruVk09_y69W4BsvKRq}EO_oFa$-2@INq1@xErZqQKTirlHW#-Q_oEW z-HDC&m)V$h`B(0vpgj0E0|#*|H9lTxXWqdSt;V7li;Na=&ErxT32Ggh`3_%w?-eAf zYVF)2r}&EdDzn>mnZc=tbHeZ3y^kDW7KmM9eEYMi%A-fDu(BviTODr^U>0~TVMJY# z3E_5MX`};tBpx{XNRZ+WM%kc#rmdqxjK+ZaAR%mwiAH8&u}k3ZJwMG$BVuu2?WaAc z1|$1W;F{MeMnKqH-+@pnNg+HOjQ%Xq`o_j*WrrJD(4@=5!?TMC;IQlZ@4~^P1El3R zZmFrMBuv1&>>uemBd0@zlDz&p+!e^&?X5dWm=KM$aE=fiodwXknY*NJJPW*vJq)7wj%&Mp!*GdGbBvd&A(7;+q!it3kyp)_f?sldOLY) z3`|X5hW6<-gP#-~ViXJvIF!on)N;hlVsb_Z;WJ(d(Cym&O=i@+u>9ryR!hwj-{ zYCZ1FC3Mij>$eqqSdkE|oQpe>0#&f2qz?1rlJ%-tHh3uuMfEj1opfbPu#dg)$klh zDlrMo(DTJuV*k+4ewoy?G`i9XY+jJoIzsOnAU=?VoYp)@UjiogU5UCN8dZuw8VMk5 z18Q)%EHAxz{Tels2voTb%OdjVI5M%dn^*wwp{Vm@jKtSKCHN?jg|4twbzcCH%^5_U zNN$cFKRyNg0yfutvv?kY9~@(%bkU0!Pa`88C%?NOvOxrw!2Xh0b+Q|}#K_24CrX2E zFiE??-Aw%}3u8DI_S1jK&)HpGh8a@z4CaiAeRlax1tZ=T0?^z-$F5YrT-XwXRw z>{3)z6dz2sd-vCBH6oauqWlu6Xo<`=OBOw{b?80omQI%*;&9UX)c(M7ABt<&`jE%q@8NBIMv=jU*){Rm;?l2oHx)!S0}cop9WRj> z2u8R|Z4kXO`d%R4GO8ON&i1L~3Ew&WHiKLJtOdM zSO7%Ej4{$)o0??c$D}T`T~COK={Chjlbn&ruZ#OPqxNB#jqP#z z^yYu?M@3QvSJ6WQ2^B?MF*|s^h4ExV6O$y>h%!NCC`r8t-=Or9WX*NdaRCw4R!pnw^!ku%LiK2JNHf z16yUz%gf&vpYVQ@Kirvb!{C>T1|Kc0PDI8~3Qko?g+s`K#yCs~GRcIO-DjDbumn)T z@LHc^L^t);t=_OlK=Fuy<|M1@n5uXrecg}etdhc03GlD+tf`1IjvoL_lgP# zAjX7d`)|ZH9v&XZr;xwwqodR6TwcdGd>UCbgdQO}xnBmSX!yL5(NRf{w=m`4w%g$i z4~l1nY=neNB{6zZ;RHaba4P94gU=)E@O?69WszCWm_ALCl9@>rK=64~loQIjuL@9r zY;i6Bq5H^X#7~~wFJm^aL*~4O#vvvnpbfdX4Bj7Z*xI@p*H;wFCMs18*di!Kth?`m z>Yocm7zpFw*9#W{T(xJjAd^|Bt*gcUob9CwCv4jVlB)$bexQ9}#2e~NOHeO+bG=I( zB~xUPd0k;tEzg789?*+DL3@u$4k{%uDUz^oFl6G3QK6wkfoYjaSV};4e`DjGi z?9oI9do<{BALa#GynOot&~AmI@mDWnpGWZ6h!pB%=i2nV62no9?lIIZPYjp;wVw6+ z%P8Bk_Ghv!iU#URYV`Z7LhELzulyhD0=1o@1y{){D4D%Z}DgZmI?19 zSFl-ULe2$IQ{2mZ)ZbyrP>2r=Rb^N*tbD`-GZo2_Yq>-6C^|oe>KSAzQC=1q`qt3_ zK;Yfvf_aR#-ymeRjRdcvS-KF$p3tr%b%T>Z6PYyRB1X-$d_ZYdhLqS`6E4e!(V0Chi14 z7igl!CnOYVPXa>{cN{;TMT>9|ybtDdk=UE}%6}rlfJy$1y0ZP2iPLjx+Cg5FzshtX zw2jR_TBb(Sxu^s+7G_NU>WTR9PJ%+6t9zayW#et+T=Ksi>YxAEGr-g7oFSvDg`Eb- z1K&@+XAc7uB)mVImy?SWwbsNg9qfluvRoK%T(L1RVPpE#)O5v?4!=j>yWlYpBk(-h*<;tAtV$j8ZgD+b95ypfOLSw6%DOf7%?LL=K zQg0na!So_GS6EU~5@{|f^0~RWs0%{|wx}qQYU6qM$dQaKNExwgkr1K|~;3jgY* zho$)EJ1=?=#Cprg8&O`03aa&0zc;GnQSyR?+`4lwqM8pMJ|KDptpJ)=uUzIA70q>X+7OttUHxY~gjR;EcgQ^(T%GTfxt{N7`2Wm!~ zNmM!(DhKPGa|+v;42@B8awuE{mLu5A(%vr~7k4ony_cPRGD38aBDE~$DGgQRK>qY< z@I-8b*Hq~ex;hr{63QF4NO8c&2>AEQ;LZ2jE+Z0hkvPndb*8Iu z`@FW)#HRRxMDMA?cym;Ncw@+R(ZGhzM1UU(UHbfo>^)RC5B_Q87|kU|rmV<;;*B$w*6D8$t-n))!ZVL`7rJ06cge#}=I%q`q5D=fw1eSBL7+dmf;iD{*3P zW;C7W7d3jfUOOm}+E$_esQnCm$D2VO$$5_6)puTz?FoKo#`5204N7qSbJs@SW#gNE z0Cf^JAGA)l(T>TprO3LF^Wa$9+P-crATY=ANFZU6l{KSzh=BN0c{!zwnX4>v2vp$z z7~41k^UUn5AV0rzbnyizpyKK%&^xH&TuVtblKRHy=3@F7amX8smV03<2usn@Qud>f zY{!lr_+6ce-3j`IBM&RkPa_le3f=%v7PxFdhl4FImpHqJfpbp`(%Mmr3EqRk@vsRN z#Tn7j41Q%*_4R5T2Q<~;PWQ`T@6pocj-GaC6wSb1Ll6^5F$?qtU67@3o;?I=+EeP5 zKllSVXb=VZ$GVEYqjUFoe6t3=0f z6wwPEwvPBu^cWA#p(hz`U>6gDPag`Zz?KZH;~-PVgp$(3y?j|lh(Up{D5W4p&lHP^ zin=(}d-8IM3bqOA=BOQ_sQjma-TOm<*Ty<>O+?dmQ9#&`{{Y>%Rc_d%O%eI~ijEG? z7kC3LfI%-|M ze3>oS1x`2PE2(DCU9_n5TG^V`KSRs}iHlxhbeNMJsEJV&Ad1LdpI@&y)7B6F>_dSp zZ*ccZR=>mD7mr0sC6_s!j?os)xnM$!0W+i?SU=#Mzs}QN+qr-BL|VGOq~_Gn)iZ;bQS=8Z)*`GDahU^g^8u!YJ&gYYm74MO=^oN2_Z=z~i=9mOE!4&~T0 zo}TMaZ3Tt}_;+}D1pOQoGJrm11N|vvzF9dUa0YG#Tt?pp(~JunE0j=X@}{tbCXUQ` z_({Eu7|+FaQ=dmf*b&cyE~Z2!R(AHZhcCpqSW6Jh5@D|o`iBl3N_Hzos0g_72Mj!F znaUgocJCqeHNpZsRyn%ki-JlE&=vJ%-VRh&!;KiP#`73T(jRLMMmjA zUJigtG>cNKn?m@d=wapH!a^~oeuM|mUg3H=4oTe9 zsPP>FEQxP``Bvl@$21s_tanKM;3}QaIYb%dU}tyIHS3nR*x$VX!#D~$Iy!*bLPJ|_ zZQhE+Wu=^2&n!A#ZRtjn{OS#R`vWA~UK|rINv?|!Viy+9h1CT(@j)L&3gjt%H3R!( zu&&CT8D^f|Carf;+bwsMNTFM^na|A7uPC(wV-zwq*8pMycUDRvV!M%Z0%&hVkVYuo zlG}OFW7OS@mr_AEg@w-mXJvA760QMzdNe8>#|Q;1;I^+`zkX6Pfb{nE?c2mmIN@So z$DQqDqSwEpX5}Omd%4d78_RDmgR61j18k5frnH;q-^N5=d-43hCPnQ_sz0T6=3&FtzkBh^+;)v&9td= zch1XHN_XCETUEXP+g@bg-B4^t#LUvRB`ceHuRo8MRmc~5&#H8KzM|$B1JCw%JChrG%@3d0KUGyVyU*bP>^q2R8 zxZ9IrXH_@%Y^-r4%r6kJiPF6hGI{g)veLSjM%uF%vVA>hBXwr(F19?AMX~np>-iW4 zC7)j-3baK<6$7$HJyo1JyaobKkCFVKX`;Vh1w0(V7v?HSm{5bHjw+#$$(`-Wbw_K; z`ue(k62=Bz#(JiT+|E2D**svjMXKvq=|Sdcoq?X_!L~;+N`>A4nhTf#0qJ}+$Bf8Ny8bcgq2;QLBSANyud z9h#|@z`U2jekqRV;#I_6Xm-XC#YSSL7a7{NeS7=2Zxk{+$Pa7JX#ztr$-%L*#@@ev zUDqj!Zb7Dru-~VrI3w#?6bo6YsZUn}Uxwo=3W%8^+&t$TrYGj1=*M^Nq(F~5Q`E}T z|Mux^@ad;2rkzXBP#JsT=1(9ARaI4-q1BKwtf(+Wp$D!yef7<#Ep>m-XIAmHJReal zCZ9%T`aBo&k2@3V`;#x%kvp8B*JRnIpxfgi%_r>20(PL#0KUi;sYi=(?CJ8(3Q{>@4^vM^ z3Khq%ugVbR75=_Xt;LyczI8axoN?5Grs(NnT;}48xGi7gusS3K{YI~@NE5;xrn z+lpO0kF*=!5|J;ukOypaeCn8aW$X> z*oaCb05-_^{$khu_{~X;0|reu`XTG(MEAq#ri`$@Oh8 z`wXkGJQZ)OJ?KChs7B=vvs7iIl#+{}5va%O*Gh4UuiC9{qi>nSS>kZ2$FNVz*73_- zb#k@G7)zI1?`7*mTiv%-*ptmYRgxZ``f2=i-pd#xYE`kTbU|a*fg=9|Og)IBkdhzu z`M+6-#x@)m5Wq_p&N$5(`sMykqzCAl!SYre-AHo9#&Q_k*);Q;yv~Yzg|F0m{@rLb zBQ_)c+(TAVgpRY*EGN0cF?5=@F+FM3i%DW^=19z z&1{@Jbvruc zUHyn41vg$hYN~XRz+M9gcmtRv7C#>U#)>?8axq@D(8sLb3!MWfnFdSXHKWcNWP>AC z+|+xHocJ1d|NRtZ%a9bzCi0&&nxSjHQ91VqS#VYVjT5MZFY`rCT**oGE9wlqq`ul% z!V=kM|H#BsaWw3BC0HZ>aowUKcJZ$Se$a2MX4K}TPWzwxo>oHbLrK+|5SnGft$Um6wHti|l+}*8U11g& zwBuHAUT9YdRe7wcXkKaD9yy~`S*>!uzacQyN5WA{`HaVdM_<2_`YN@2kgGHi99`I{ z#d+*t4Y%fu=B^VwLoP`!hZR=ZJ{b#jY8~+|o*c5c5TIewUHzW$K4WOEHo@n`vv|(U z53MtzydLiHkh6M5&HCiETtwoohJx)SS&EcTo+)1<8TtSCdh>Xy*Y$n8iByUtAtfcV zOp7FQhA6X;ib5<5a?DKm4UcdFn z+55X^ID@w7oN#x`RJh zz2PTa_(-a;?(3X6RY(AyZ&ZN?wJ&!s}trdV1W%vQ@?V>;YiTxecA=tVTpqp3I~Zc_INw2U$0 zSN3CmE6V85jv5%C32p!W{p3%|&V(h>FE~z~eqpBK;^LyKOaHpK=$!cWzkBLG zJ91$Zd-j(e;FtTMy^>pzy|J%{W<^^FiAHdxJ!~gbHIvvKxJZk7VDy}s`?&6 zT9AS`M!#K4GBZbl*^X8DGnqmkn`iw%)d6Z1lr2zBSwf{73Kf*Ii00V2xx<2jJD0eE~zODa2&@`nUGQJh_$oru}I3N`j8(OYv(br3Bh#S%Ve_`mib9&m^FQ7c{?KNBIh5!upbi4?~FKXD>2ZmF9 z_VWlsNd&KX^5;qx3mliq(IW+VX2CdJ7m3Jzy1Qu9oQ7J+airsvluo)XQR+hdb0`E; z-|!*?2$0Z&iSzOC*&6ei3Ln-OTL`UFF6?LvN0kJz0VSaEsi`DS@H%Mq6gYGU01&^w zngr6xJ4wdAdgXlT)XuKkV0QK>D6Cy0d+&BG4Y>#(a$$SMcHm4>UM;?ua{%p2hw^Qj4wgrT)>@2a%Dl&zG-5p$yt! zRPmczS{~Gx`6(oVeR~iV2H#ghF8XbZf;VYjKwKjK4hKhJzm}|Q8M?j(7$~PIF7ZGIx-6A}_az0Z?!YhyI) z_U%IMi@%|>Oyj+ztE;;R>xzS3(_`H-BvM%Ia`&bbXq2g$gw1dQP+cbqk1wwr*n=jm z{a#LZNx1Tu{PK)Fd-;9G|GX<1|f}$3VqX; zz7|1wUy}PADc#Lc6O&Ex+tCS#!hiqRm~qZz=Z7Bun&i`apasczm5y^O_~;|5cXaYl zkwwSEc%ToPPx$|KgzSBI)qt#fe1w&L)o4|yb_jj(^^tbg))^%aUtb#xHQ+-FFXScK z{jQqWH*xL@+-$wzbJ0L|O%OtN+Qw{CWe1LpY+mK(VN5_YKOz?%QWu(u`@9bqdag<> zdOFfS&9Ca}7KV7`k3)MUFTd^$)|{yF#tSLzZvb^i42)Tc0^LR@k2CdDG&U?OEGnuq zLtnswvIf0;c%jbs{L}w^`ZZa0s7*o!WatUaCF0ZpujI#%EzkA!_oqJSyt1&#RZDPZghV_WesZ$SJQXp0Us{!3kv&!C?IPNSkS{CGU5vnpM(@oR=75a^IP;obwP}eyGu`2y$ihGsXLDud88qn}?T_`!_i@ zqCV`=BNZyB&v6hl>(;JcQ#1w2(8O=N>aDYK!vXaQOdx{Y5QC+HL^^k`Rb`tE%>as zT2MHn+p*)Sy*;#ZQ1)g!ju~~BKVBADfnac<`(k7R)J)eQ>i|d|c!k3VrxdVE3n$&7 zMMJgU^Y(3Yy#_vR+6hv8tJ2Y_7QOAyh~fj52;xFcPTxT2__xbT|Ngc<^AV7Q@FPOJ zZ*b|~Yprl5w>c~}R-Gz4KOe{2!7c$+0cxd4 z?4ql&cAEfwmw4B|374Wk{1Hm7)>~2YYEWgwC(imJ4~me6XTY!#Pc)d>AQK~Fih|x=(cj>k^;-$O0ZuRvdCujTKHRIdR zKca16cUe4|C=E)L;*^37S^DBW^;7L>f;yUlNd`D9Y*15@e&n;dj;}>s(!Osq8~fqI zb9jGfMOM0A)gI|7jbtQyoj41)5* zM_5dZ!wY0nr1_bsaE?n6j~?LFI4zEij0Irl7pQc0uIe|U1nzHS!_xBuh z^{lq`Bn0kiF%m7cwQ5}S#M}&tYXFnb{vy(5#YXM-dS~_mdZ#4Z!VtF9^&dzBHt)={ z4wulf!~Kj42}REXUXW$EPu6gvc!!*!{svnWfI{^SYvTO07o^9X*l z^2e8>Aau;=VN1e;JrBderW>OOg(}pWh#^qt9EO4C%F>+mr-a?9NB>2s-fY`WM`w>R z4i;lzfLuEPP-NGUix1mkaR85%e-#BES5m6NyNPBAi->f>vIKC;#SBFvRN`^aS5H7w zswn5xS6}cI0gn$~Ge0&n(9nY_;5lfy4ER#|1zM=7sY`I=W;YxuuFClV*=EH8kMzKu!P%LvADzyo=ZJ&{OfQTRJy_XjdyqNhkffmR+( z&G19(9UTokc&VnomxB3YLqiDd^U>!r$vQQR&z2$~A8rYE- z%tPV=IVJQcFr|TZ3L6;NloQ_2WmNWR5Ts}533>+GByVpDXowFVMqU($Zb=0NFY~oQ zKvx@#jk~dii02Kfeh?7*?%EX&5$XO&e}Q$c&f7&+&QJO#6MJ&PY&QTv{#AAbJ^UN^GJ_Zyx0diHKy3yvxkY zw0sb#PdIN~(pQUsE3((7JNwtvv++FeGZGXPJ*Dq3IWd9GL|JH1GYv^lYN30@YPqAk zy4u$W)-E_sxm)~Qbm~ozu#zOn5g+kcQE8U_CGe%ABeK#2tx)>xbhVJU0fM234!DX# zP}0hPZ@P&MhI)8{q6GpB_aNR96;WKnoQb>wrw*%g7T$TQniB+$P6)6$IXSUe;cFo* zBg1+xrH*K{MyK=4Sa-skr2#=B12;Ha4CT@% zpE&6MZGgCu9ifa0hh4eMVA+qdm!Jldl9YsM@%Q5V)!K=H!h-&d8n8jT?BIYjROZGk zU#qGeFqDJqBOoqo^*`toz=Vn&Z>h;8(@-K7;BNy6Ml{By*cOR!p9ffeZMeOmCOgN@ zqpsXdiWFys%_Y~*_250$B8XAw4SK|ynyw;Nz&z_sl zBjp)$K*X&M6LYv4;jV%9a)W?p zw4o0l&O%`Vk441Rdfax9U*O2y3%D`e(lM6pvcP?9#4jx)Brq@#AX+zF7a|1%)VUGu z5CtqGzCRY)!OFVwL7?>f%z21p4Z9t8$RAQtdTOx9y5&TM%6$%W#$vDta%J30t=p*; z{?P&eKkVU6@kQr06&u9AKq%`_Zy{9dh^jCU*|>2dfDHjx(0fAI zNFiEf-&~ky7XhWg5GCR=tgtIJkiz*D9?s<4TsKk*@CMsOGgZ* z$F>`RSek?5CoJu8gVFBKd}bu4o{)E!pwLO{B7KYA21dm?D*7#Q*~oDIkDQ23v|aATm)D-d4dK0zuBE3Z#@`z6@&4*bb&Y}B6F z)rCKSyvv}DfoSz*#Kwn<4#=`dOI9^vd=S26D(C67%p=ez;i^F0`Xj`_0EbrU;`p}M z9hfd8gd9r($xjZlBtp;(3~L}OrND~4veH#q=^g0$XQTid6ha)vt)WnmAeUy5aX-7{ z)<<-!vm6l~m}NaC!+4vb`S2AXn#5;HE^~v9=U0pjS?vI0AaVg&fkKMCgG1&4bKnoO z3!Z}7r|BXp6Uv7I#?Q3V)#Ie$4<}0nmH+JA91Qv5Bpi6| zRmy+7`4C8Phy1@-&xhgRGPeU=pdT$f=v;47}&Y)m#2!WquI2nTs7a7Jh?8Q z{JbFAm+ANJRbTlQ1v3ajo(wkV`MdE*@DgaSCR*vF<5n6sp__Kyt@H20xQ9ZJ^&%*G z`}!s+KH5unuM$^l9DH0P`aNlX^!F=Msi>=Sc%e@WgzC&lr~cGoD`@4|yv`On?cI_V zC*bYAyf){Uw9cG@SSutAd0z)}i(UaboWaVuVW z94mj$CEdDJj`IugzkpHE9fzhmO*Sva-Mibwz5|dTkHcgl?G*+Fp`?D0O*S^e$Q?lf zuz7vx1A>S?>KIsJ$Y%cS0m{m{pc1j=7mQtErPtd(;Q;IBcpwNr=Y2M^yn^*9X>oCpAAG|k)CvSy=di2Pu~d&Lg$|0#aW<>&ip)e zSC$}(=3{%iUVF^W>+g;2B5fSZ@r{W&w@1kI(xpAScKK2?Ti^pjezb@-C0?6c) zu;Vn2ABV_UJDoH?c>k07r{DHUas0+5MS-E1t2sB>Nchdfr{m}jHCn?;>#sqf)usD7 z+S=IFDTlNqul!JOkWnUo2M#v+rS@upQ0YaQMS)U$`$k^m9i+YKx;R9JJ=fSpMDEAt zQAo`Joo|;1W1>byxB)5ONy%?*MNGRW%)}=7G~z3C+}M}mXv77EQwn4mglU8FM=-lz zNJKB>!;WgQAfqJu$lTR@<+jko#T7(SG(3Z(xWklo zx4I|W;3=LPTv39o{}Veuw`Pj@9~cKl$3>8v^!sG1{Q&| z0e%Q5_JbV38n=QJMV^c{&c=oK&E7wd^${eS+aEFh*HtFjxMv6=q@`&mVHfA7tEGi@ zsLv~k`)Jd$D5MII;&0h?=wzI97no&Q)C^m;PkNXt9j8ivO25OzOR-4}#fHTq)FDUA@Fj|3N~E;Lmwv+k5aNp%Cxc{t7JEdx?Ljj7lmc+gSz3k3%}!CMix zURO%LBvNp6(OH(yfF{6j=)nxv&hovjvS`z}Iyu3VWx_R(X1EPZc1SmI6Du^{}=O+0CTGmL} zCXn-|&z>z>A-~K{|674YKUXe#yfL!@l?f2CcqY^^K|s3>cFN{Wn-T<0!PdnuD5&n^ zN2IqQ?|Z$1pS)Maqxtz@%*aTBNb9XCdL}@?!EXgY26rh!F2S$8MJxk`Y-!2E669*} z4Y0sv>!$RJ>}+U%M9)MtZHKQQUx+)%TF^n-xbna|iE2Eel_x8Ij}*H9;F0C$R;3I_ z(E(00pdz51MSrKTu>IRR+w&?GAx;<8spXDyEXh#@Ji_@!Ldj-+lQ!`XwT_7Sz>aNLx2wEE zJZ!z5G}86VsD|CUdl&S0WcR{FGqbdcP1CA?DQLNdGM_KALr-PrHC!vRLoK|Ll9Hg1 z@w9Me!6%UswSluwa^xURAW_E#Lg@kv!}1I&viG$$jjuN$(aXagbRGm!Ta&gs{KE|B z(An84?V=MAAoJ>vv23e`S13E(DXYa4g#=9?(`sA;9UaUkl6~3fYG8>BX)Lfz>Vqjc zD)0(Dm&H+~YhgL5qEb^=chzCcr={uG4fn62BRyJoHTJd@LD=;qFro(i@yIV2G`n^6 z^r~QEYGFacOnTRET)MJ+l4CqNd>_;G>;J|2=6ta^=D(^SMSsDI}&IEG{3*<2E;3R0@e80>Rb9PyU zz`F6H1&1Aq{l@nTCF!?AgKXBjJENa|>?-wwC~t-US)14pd>yJ!%F3?6DnW{A zYy}m%ARB?fOBW}%_*P8J&f0diO6*^pdvn{>C1Y}O5;rya1!#7QQCp|^A~RuNW_FqE zRhc=iuKwxP`i-y+Ks|(t?d#XCh`Q+YI^!;FLP^Eei~Rer$RCg4t{bj8GfOh#8coy5 z;a>9h^V!cv-d3aCw5v(zjIN)K?1sus@5M?@-8sMhoOPht)9HA%oBPM?sVhUxn?Cva zz2P`nV*2jfp2`dN+PRn&c34KqN7aiBdfzv)kK`zo`8qvyG&cDlf7`>hDVn|CQ7nnB zJ5qC`w%_3^YX$5T-)C%wLc#={InGR18aRcp_aU63KdgM!f%mi7MG;Oc(Y zaK@SW4_=dC*1X=3s0hBw{k!+BZLHEZIiC?akitlS<~ll7v?J4T`;*MfbD){@^d44x z*ZdMm0O1>>uY85_fndNh`kxIdzfdwiL%R9%S&1-Am3ISQ!o?5zv5yy zhpO|lqDj>}!(ue&r#8U?VXlI8Ir!(@8y~@`I$=wb%kHTmUWvAyO^P@^m$q})uH6Aj zRS_`WskQT%Yl{0a)w5#YI`zieD$fN(2bv?{kG``?v{YPbylg!=q7L0MgxGeY z_-owCVn4de#m(anyO)+0^OIu)g=W)F9D3FJtZ>v2;0-rg=~T=Z$~`tfCP@v8qmHG= z3eQEmFa0v^MlE@+JMY@pfP06c1eX;~G@Y?4ZfR`9`)>|V@-(G1;m6emgZJOxX*`@h z@E1_CN-tu^I!eSies$)&*vDkrR$Dk|JZ4)FB(jS?tE~`E!-dexGTuOA65unVDaijA zI6`t~8U3avpG2s8`Hl_3mSatb_A5(c9#bpsVE(RMRk5`_R4EO!8KWB`dBmmov-#Hy z0;=1$TN|N`X>i$-r|qih>dSG}E5FC)@`u0VUjzlRXU`sv`-6c;M_-}}2M7Ern%H(zb9m{Hr3PwS zL{7vyjSAQmPfQxGEVPkHE}t)kFJZ}|M6DSNfBrBNiy|Bjfh|B~jT5&7nFPhp>3kce zor;`TZbM*@xaDb1776r#qg#_J~TW!ns2~IgHj!y$d!+>tdUVsOs0cEkEP!U zxKG@Jk$n*i;s~2xL&FYaJA1)SfMZDNI;2i?;lN02dHToDo-vz_mnEk%S~_gRD%+?6 znSyf+GeKSa#CsAL2IQ8pea%6S-xaLAeKdFgdp#EFI>kzSSS=2z<4E~+Uoe9Gx=V0) z_+g|T3eSwllq3#3m9xE}^rnh5vhY1#^~$BYdku8Dqa&-NOSI7SzPBgpOD+cn_9Pnx z^+x)LakJEXsG)6UY#gAr-ln>|BjG!f{PmQSu_L<;CC+pf+WVxMr=-SreL8+jG~dUt zBYF5j^?S*tQ5=e*Vn=(Z56vpv(04o0|9m>^%lGuVAG_Hc+7>#Sym}ja zw)7o-dfuYFtvNyM)b5>(QN>|I8ekvoBZlNsydVan`pIM5z`B~X+n|^b< z##9x}j7fXp@vg>xM+b`&XY{Y9m^&#YcDG!LxnQTGtn{RVBrX%Qw4}-svGDNIj*)Y( zDs+6$t!dk-RTb!@SY>dFyFqo+TA^lkRhJl!6TbJISWJ}LCVr}8`0%^!=_)EJ({n$W z&Mu!{35zNC(42F%wNNn2vLb{$GjaX}kL8!+mprx^&b-_1ITJrL6zDY6sU3R%NIu=Mv zsa^evwP!bUkWAA)7{Hod>?Hk7TU@)T{$ZltqmA?3IuE3U=q~mIynegv6L{6=cw3tC zIkSH6uP)jr(|M|hw*AYL8`j)(Paut8md(SEE7DoKD5i~;uDDmV1FF`2*sM9SvOOw} zah$Fs;?I_<2)UieU;(c28nR2g3&}oO2@f7@u+zKS>G=EI>2uO@%Hr53|9X|hhlGb$ zGyZ|C$EPtXXqQWbFYhJJ_W!&D$tb)FR<(lkZ*9F^(wdN&Nery_&)#kOa_x=YMfu@> z>2Zkv@_hZv?>@V6r84i{4JLLOU9pErr05Thc4YEzXzcK_ukGy-;o-_m^x{Fyeq`guY2g9l^m-L>f9vJ4r8F3*<$>NS_EBq!e; z2$GyUuBKM2qao!`(#j?vFczY`x4cArjP`$=$r*nTE)D>UxRWB5qhex;$qk7_1um(9 zy(AdYo|47M52z-h$mB1Ssdq+O+a47`Ou}h@^y}9z!h%mvkAZ3fqbYMhN__mcPe;e1 zQLFm${5Y;5ghDAOzk6WBj2e5vXPcD?))kngXX6u?0C`HzH0z)&hpQwbJ^e`aSZsK> zW5w3P@t>+G)@A==Z%VA)&4l3x`bMXVUGiL2(JzbZWtvDt7l!cPrQhXChF=gkS-2Ot zstPi~59k-NH9Q$>v8X-~(AP54^~b`tu_b7tvT%$>a=Z-grKPwFoF@-32RuVNAyVhb zgB#ZY&}>`m!EIV==PrUtC&LPBZoWi?Jh*txTWR8RU=ULxZGe(!jn*v{PW5Z&zGa|2 zc!M1J!Bvt?#E3ta?S{FP%A+8lj|Hp+%VFEI$BtFt`pH9;yr8ofdKtn7H*5<&_Fo{}CY$f%!5QJu|3O4fo0WNNdoI zjRJtEbt{Yb<@2~|G4lh%o%*(PKfkd4qBP1x7>V%-33KtS*wL3TV0%C+=Q*O+h>S`wM5DK%b26GhLYBva%EScf5meb}9&N%>Mi*KB9^ z@s?*l3doWLqdRTCP@KK!-*u&Wk3@|6 zau8>jZ_V4SM>}$R&Lhl0b-4m`vfXk;v8f7LVlNLx!sMbB64DNGW(?V5WZ0EoPWFNzO{)jeOodt|l5X^O#C15Qa}aEMS9Qj z`sU_bL?D2O_>vOoqelx7NII;uVni&|zeKWZ#$NHyhT{N=H>j-)qgfUeq}%&WMhJeN z{2;JWPU9ZmK<=FqIQ^ox%ds0?_KWi{#A^a{@Z)`UTtfo}5QJqt4XgB1?Q|4CK7D}b zv07$%BFN)Q=NX*@3@o`Q7WH?5{x@u&r-HNFbbNZcCCW75iKn}fK;nf26{TXr#}-A0 zyL`$?4PUTVz_0F9g9;AHUZ~OjfSp?Y)4lT5Bzt@wn;P>`h*o1b8A8(fe%FJjs6U9& zuD{N7tC}qVbX6d)7pfxKd5lFl|Ijv_T*#$U{X__8CK&;*0 z*ULM(1qDr>Q1>bC4?!seN1+uX(OO$=zZT8k*O2~ZIn*+u^F3ru^T4&2~JL-31jF0`85ujop~;Mlre$iv|jw(2)Yr zsvYjqg(E_zJQnn~{IlZO4p?hHY2myP4j3wmdFL>nZEi&vFPt4M97`EQh4J-R$scf$ zC|ZW|pMlH+dlXe~T>Qio2si;pMn=Xh4ON0E_|+Y=b&0=Y6EW3jZcAgLx55RBPtDl5Up!O zSk20BQy>)&7GP)DMm)8Vkr9|Ad_fJ_5i#)g?R7~FsCh0TQhvqE1pn;A-L6gFFTX9( zholZg3RetR)c)BMY5nXodh5aGtcEOB+CMkhZd*M37sj|L^e`qyjiv-AzxrV-izjsxC%ONE}LD`y#PvR(#v_7yNoFGZY+jjGzYd95^`Clz=@PAyc0 zCQJ3yq>UsgutqVZ85t*}cbnQk$wdq$GaY`Pc=3 z*Q(k}SC;HHpLvIa;Uc-WsvXx0-RXBIF4XcmUq;l0N$_^lkLEeBm=LKVe`Bm_M(Rq|J^hMPcC|)NI{wCB^LxP+FM`FV$q|MM|7_7mV-Yp?$zNp>_TD z1yb>gcR6F@4??#Q&S47^mCQ`FOuZFSN(;X3-x&cv50`3Xw6tF&K9P45=il#M=3I{( zrM_MeOaa`!aw&-)M;`>mTsrxlmpCm%UHOA3A%|=*ICUz|eaVGqhESFk6-i1H>aP{V zP~j@~`47g>h1I_W@NkB@sJ&n^93DezS9mxjlJ4ynhIPH}qx@%7fM zNgc!qvmukk`)q(WAsrExa_x*Po=QT40eUuBs&FE@Ymd<|X&iw0y=hibawN zwG=M1?A30QZ~kXsD-J%u19)-OQKQs&xfya{C|!)^!_e&6-u{kpi?{sbAh8lSaNRiS zI0?&RE3kA+2knl1qH2_83cqbaU7crj3a6i_HW>!bNbi@d=`e&ok-qzgw&NJH$s?@9>>$XtxF;XY~RW5!b5fS@oS{lA= zH!^wW;iPBJ4o&pIZJdCReg$M38(3mY!5U|-Sx4h^rrz*s550I!uHgu8R?!P+k_bmH zef^D|<&Z$1j1nW@V+>5mZf}877EF%2C`#7g8woFLG;tg_UkE#WAd8Wu|B3b4BZyRhv)PSm`aYKmjx#JeS7PT7-f6R5bEdG(P z6PJM0+?T8G_4D%bim@-rQmc>grW_|sv}I;pfOZPIjLx2AIogl-+PmTg;KMZ~ginR) zKXy+FCg>3{6*Cji+6}1%)*Dly8i@OI&1G}E4Wu&=sSku*l|~9cBQ>pQSI2-2ymRNl z-zk80TB_`N04<|ISQ_!J9a53sNOu!oLd{&&4q6(zhu#S%*u`C$>vEhLGRrnJG?a$p z90Zh&&sQM~-sP4P)Rupou0u#4BsJR(t`-*xQy-1o_0wVn}TBuZ1bfi45_5V@AVe*ZNI z=VIem*xv%@UXy64;{PJ6HI(5nXtjuS#w5OZh>}_duaUBgi;G{qdPD#=^;cflpVzNl z6RZM#BT<>T4xjFUQWCN{_>mkm`R~xXVDY!o>TQtwGMeJ9DMIdtLZ)7pQ7t1BoHxF- zD~q$(T3erhH}MKueaIv~F-bRqtM0Z5$Dlsd+}*2BkUi~h;G&}R1l<>fF15JPsri9h z4P?nad7zL#PI_o)@4id^ucG^S^k%io5=BO1uw{792sSiU^)WM23rxdfG{r4ui|Tlc z2kLBp%+M3>BSsV#z`2btfog--(l=BMYzs%k=BHo3mZ&m7CJfrm^eKP>4#j9Ua4q6m zrrrm}8%SPv&aDXx57%J}#=S+INtk%AzV05&3u+=}A-f<{AFlU=p_BVei#}iB&sJ{=Pn{-Tf1OFNCuZP+b*c z6u3sz|LVW}=fkcc9u(yv<^b(s)5c^K)CWitfXr^7Cz(uf$dvy>Kb)s>!l7YTA?6;V z(7RIu>|+0v6n3$zi8u?I;T91^7J;u&l@?`3acwW|VLg++HQ})kB!2`3ja$&ZOS6TdZU@uguH{HHm zy~pvb^oeYms`i87X9+eKc;2QXcMwP<8qwNx7>nor^N~ew&nvHr3vqRAEiF3>)1cl& zt{Gqc4?2oB)*LbYme%ZRn29_;-*o~0yuf>0DvkKRKeqiNRPH~qI()&8Abo^fwiH0> zQq|61@CACp9e->fHiab%oT@yQ+B`r)G@yk31|fP8ybLi%1djqHl<3YVXZ$rf>i**{ z=U0yvx2kqWq`%l17(wzH(FcCSK(psyU)ecAcvhim=}pW+{rlP^KWusv=oYz6B_mn~ zQ1ZoVkvr$}Ng9Nee}GUKMIYz_*KeinDG^QxHQl%|vqgyEIoo^>aC2Lta(pE`AFK7U z3A2E)Rp!P#R*tf4V}+Z#2`l3J-iy+s5MdI+hiH)I4EOqw#}ZP%eY8$P>8a#i3=R4F zx~Z^lR!A01J$AK!Hn!X~s5P(j6Vh2z(GG;czF_XS5~-b0?(0M|9RWv8%$W& zD;y|_ZUmaQEnT`!YCEz|h3-G^qdwSpf^+$o@rtV1r`A@z$SL^EvbNuV0lqGfNp5aE zOpSqQfx7P;jsJ*KF}U`B0~Vz`eI=5|n?kcAb{>CF(D9E+K=&ae{TQ_fXmZEx?+2k) zg0N+HXo#?S^eDc0Bm1M9k#pf7Xlu%GI(qDD(-XG?0-JwRB1X z4L#n7s3?2y@28sSTyMIg=^$hy)i=ygRcX`k_bL9^_B!FMN0p`swhDG8z1G&Cfnq0O!^NKxJLHJ>yo^EeLa~fBbiGsr$|yd3$2R@4eRc>O>2;tA8$8;w8y=2 zr~b6m6u<;Z*sFKw(SNqCry{06fEKD+;F~GuH!6CWmPW=>918!1I33E)MC}8yVi#J0 zalPt%goySI@?i)|hdc5z5E1k9#Q<0Z1ni(jM2>kC_8-ju+~V=Z`%`Y$tI4o_y9W)5 z?3R7A4Kko8Q6-e2i=Ibpcm|h2Qy(l8liFX?zsm_KYHD4W@B3p4hVtP5 z-_Oq9Iiapz_5Pomt1Q^-pS+Fw3KY_wj(rqzWqbb#+Bd(ZHEa+xgD)F06D|6C_wLQO zNSU6bS2QEo1Mo7mUf`jQvr7)NN*+1ltZAV~{B+-TpkFfacQ6W0->InIPPO5SZ9!fC z)mLZzg|z62hadNVJ-uMp>;ygW`)jDTVgvvmw`K5BDHVl-(yw zgZ{27SF$nOaKk#$2gXcOe4*^c#S@vRlWOh^o}9FYVmAm$)j^d=i~~3Q*k|9;+>ELO z^=piCXLl|((xS&SSd+ekDw9rzq&n?{M8;p}NkI7&E5;WyQp4!85%1vJV&(AatgcAK;5EO*<0oM2 zgU>y9O}Gk-80L{d-lw3IJP7ST%FqFNTKowH_og;s`3+yznw$F1yOwBjy=BBe)?5Q5 zXP3nXy54CSFIlls9|Mgh5m{iwMk8b!`BOyk`hLK{AzW)k9C)$ zb&0C|HPecwG-e*+5&qxn^0s}TS_3Lgt`v5Kjc|effnDLpYFs^gwrx~HBLjzq7IwtI zwb#hw8m!T@1GCr85rz$Nq3m&W%4^}XD2acn1VYvdx?{pAEuPBsWNhxY9rJWf+}qxV z)%W0uRYn4`B7?+3nVQFx^-7b3$b+kci0~~j{YsFLk70|3&3M8Yr@`%p&N1rB^VFGo zClc;s8x(Y^S<82-XH<80kx3mR*A2H(oW-nBqpZV>)D7gYjhg<%AYaj_TKe!o8@s7I zmhP2u{amxuCY20@JQYfowXj6F6ZC)InE1D7Iy}W@_!t=#U>tKx%i%ql_5r2IWmb6@ zYljMcwT;*r?EDth#{wVCMSg9%jU^DQ8aQnji9sdeEZCt|d8(nk_OH0S*!=dl^kTAl zg65rdnDkyrCQU+>Sm`g6)pp`owkD$@?S{gxXHA1#d-eQv+d-fIQ&dtVC5~J$i=X07w_!<+GLcyLX4y4zP%4`%iQF(ZU;rU z`X-NJ+ zGK4-P+zFm(eu;eaM@+h(TK|}u4{cHstm?R3u0i9<;kV!PB={{ph7QMDvNt33w=djv zo4b0Kb>1!h7~I!3-Ig6>+UrE8C^Y&`F1Nd`P3gaZg4kx%40qhhg5{+K(BDvgKKKXo zP*~WYNdLsAo}9zi?i6`Qj22SeragSx-iS-0gS-DiL8qkwlVYNLpuJ!y``yH}#(_mn z`3e!Q;gehA%AxCcnE*Q$)MwtXS`IQfQ{4AIa+)d9tcvlV2%{+`d*cYAm}&H(x*qLe z$>p|;rn;eC0&zc>F`~E6z9CXGk8WPIai3`J5#0sv8GjSZiW)fWoKB~Xp^n!iR9_dt zX`7V4P2vyzIVlR6$V-VCCT&eJ+=K znMbi_?hiLpQUe*rXnGlsQ=K^O0`{t>ipa=#Ad$Ut>^}@9@c{7hq`*<9M+4I+!Gl(# zc)Lc*X*j!j!Aa%f#e*IE4~?=k*qH$2BR#ddr!)~}yWX;^Qh%#PaIdp7#bC<0D= z+}I~?P$wu6HV?5F!#(erX6ElA5w+%<&4#-RluP*0Zelyi&PWZn*9SrQ$LzjelaSg= zBlWOUwLziiG#|qW#0L{WJ|k*4<)MbhJ$j+6iSzb8lBlQ_KhtK{@q(21he#%Y`=~Jb z{QG51ZLc>6Nl_Kw<6Q*9I4-=9b2ce3EIFs1n)Cd5a7WI;`pdoJoF>+Yf*zVWb0Pi- z!8)aMru0b()w=QCN~g6ya%9bf9&ZS1lIzia)n#kt@kF+w`UG(JkWCO-N5oQ%zPi!* z>A`={)9OP>B@k5fIfA)Oq!uJS0CciErkeO--+d_5Ck4E>6 z^hR9VDsV~NTPf~xW~&^nZP7#(dhcV@ErcH}42Y!`7~KoC)!raZMrx}(LtNY$YI0j$?&8iOlW+E6QADXE z8Gj+>hiNF}LxhH|BFE(H$#-qjPXKnHc^HMx0ix3M)-73A_Jfo*=B50Vpq5g7tIEZp zKrgEevV@~C>XnB&F%DY5%6^z!TS7DIQ*kbr=%#Y@&eY=_Ip97%Zsy}!;e2ifJOag{ zFnql2SKpuGSGXEARb3yjtNf^59}upv)0ok;LRi@>;GKWK%sBsJhWK)q-#XWV>o+5s z@=$t?{bf~GpWK?8S5c^A+>9I^TxkVkl#EA7Vs&;(g4$+fh>SMmZQd#xHZ5fm_}OL| z%@B1*Q!VLtzt>>bE&%RDFGNnkGr0ggr5Kwe=~pOZJ6b(zBr|{Fk(61#2%~ zGG5R4dE`2fY4Icu1AT%ZbAT%gtFuX!c@Fn}j!<^U(6#hD{f-G%VTe!PMV^6k!`E+o zIrYF}uk-S;<*YNd4|}3H$LM6*s!T(ap2M&hUF66-hK8*SOQ`A zFFBcK7-Ldm_U3_pJNKALL1&lkVZ}SWuXc2B?+x;$W7K8x<~-kf(H!feY?enl%&m7G zAqMlp85AFgrKMpXga@h6Q&aXag|rt@)%87(mAl?sr)_?4_FHOe(ppE@2wtK%XlYPK zB@GcGZZ^AnhB5YudGiX^B74{-DYQ@R+{=&2S_+P}8m%UL;<+B6}#(VLQvHA{ik z3)yu0;1cr$`*v5!_>vn7&eHM5x7HZGtnN8-{i*HCE3W1#fvlS(VgiME!;U7zE5&a# z{kV#+{KV@Oqz!0(F=hD*vsMWED!;DKy=9J8eLpVG&o(KE9MW+DinJdo?r(m&LwR>2 z@LSVhvKzY!Jey7Y8>|GYij1;Qda^j0_Igv_xipq7#nFCG;TciT$uCeZ@2_NvA(3_@ z9@AqV9K~5AVn!QPbTp3F)K*&yi)bS*n#ypyPFX(aHJz^KIXvc_CY{Hs)m|oLFc7MmrtMRHIv)LoPDP*B~1wB9?K03S#7(i zHgJ_37<(18XMGyt_2%5?u@UmD>vv8#(p>k^AUXI81syhjJd5v)PO7DvT5>byIrN@7g&Oev zKAr`4ehU(_o3ydMep`ru^pVL*&dF3V%fS){Kl*K3e;qrjn|+d5>$vnmThU$8Ig9Pk zb%u#&8)o{a8?M_L=i$cnEi1gv_}saeIGA`J`aCjQB4dl)lpnpR&x_F%=eDfvUz@zl zdp#iuxM??V1FbpHUqWX1W2Pf`q^89@v+X7XxM~mh4K&oYI6v{U-&s`T+xF|?i+11c zG2{}iV$Am5%0gsw7st)6nzf;`&ytUmB;TdzTUBkyd4^VNk-}sQ*}o$HW`D9Jv4I?|p4vGA zrFlFTQeW2{^fjRn^KC!y0xA}AC(K!}`;R5i?u<$(NTCzX%}0{hGoe|zy($8hq`zi# z?L0v5j4S>Na9+NJGCa24CyCAX#tru=WVNBYhRaruL(H{F zxz#In$dqzEdXh1~wKwTWPxP!}|a-A0XnxEg^ zham?yt=f?|@a(5M%1Hai{1qym28M<_9(uGJV32>k5c4&1uKN31Ue^5=DmY8ED!aOQ zm0j$6gR)!L)o(08t_qd%pKNY44#-R!Ytd&|Tj}`pZEH*6W`0-=_@@JIgBTon7TDU# z9XB!FkZJ=E(`vpAaC2S|cex=w%z-w1hj8zxqm5eIHVsvixGgoV*-A-5A-(^t-C)_G zPyeNPsVO94Y`+|&C`kz{vC#2S6vy?M(ZcMQn}mxwtF5!SnO#)$U8>Gw+WBCTe>Skj zK_z?`_@~$<1k3LGHsg}1_iMg(&D!X|%P&6+URxmYcLg2P680i6v8+ z!gTqIN%oz@cPL>*skYxygqic24_0>{3J?#UU+oKVU40YV>UHDnWw_a+~7) z8ih>NE@X?qK3WIbnp^$^wN)L$d^df`sbdGOgJfMQEylWxNc`}mnwrSeV&mxVaSAS z3!;R6UX#E{gxH&1rTE+~0?%5!cWj*GUQ!VOJq`f#J}X+eWZ?^jo1Hz&ry--WyYb@Q zbM>>=XDYKO=Q-Z08CIA0J=3Opb$iC882AM|P{;-={qSqQ>o081gg70S#IMy$;^vmk zf0^8R8pBN6mqrKEPNhWOpA%?o7n(kLG%i5m18y4{Z>*7`fcUTZzK;H>hOCjdJri%; zei7Ur*0->0GQ6Hk1Sx|1#&C8F0cf!6OXQmDG}=m8!ENV`#|xIg=)`v#1fou^6^E$T zE8N*~yHDK3#c^V0x7YNAkX~H|ItlF-_tNf>>r*qSwA2pj<9GeDAq}NhQ%cLpOe$8( z)@#m_<&AIq#m#ge4o~f6m#t#cgz>ng`R3MlhvmK=VW+y?Wm{mF>H5Iw@cN57y@e-B zys+czd|vP8?%?BioKZ*-Dg6A8KeBHwzfktUYp71{z9JR1Wmr#S+FWC$jdO4;rKbeY~N?{MnfKEqtJ(nIQ7GAGr%9AgVO9H1rlr2*OW5`Rzknu^LV?(ZxSYGnT z12iS7gAa_|fQVnG#h;*H<_ximNu0R5$efp+u2NEFfXcF@wEXX#fs2Xiv>TlFMQ9}d zrr6qcTtDH8{@wg%fCOXf3OYyZU-gcZ38c#!m>m?+7dipcIS7tkNESs5y)k17e!sDF0VqOa;D|4649V7lET~q6{$7=8Q zrZ7FL91*>{*+DT-EZ2qpxmmWnM)wU3=YjmcuP_LmrPn zDr+1^_=n0dTWCtA*Jm$UTr`rtMMv3uPEBgVVw;)j!+Nzx>Z$i7KJ2u6dzIY{#L{}M zJlUAFe%A#C)yd_f;Bg`;{L{rr>7UEbTAT-ShX22s zJ3KD9O)F@j^w?TvW zGQe^FIK-w%OD)CbS<)?kMFO+wm7fH)?8*Gmc4Cp=X(9N>y6k%a|Btix4(Gb>|No_p z$|@qG$g0RHnMty;LQ09OP#I;b#6KW?Nrt&f6k91fNiStBd zK4%>oZT8>^lew^RLrp}j`SbLWSDY*h>y^`qxw)+)^NC4@H-#5Gjql9&@$9cY8}|LC z%QmMPufr}3vL}*^uVL?$oo%)(&(hTo_uZ{$NB(1aiTwdZ0Fr+}+@Mpuem!h`9B*yT z;pp6-w@S%W(*DQ9tu)SH?UFu|B0?#4Q-kMO=k+`M5@xB~%#+OJf-j&8hmB&gIfza% zzUfunaL@CJ*iu0|3Q4TTAFh?(3nETFC^TSyo%2YliLrue`ZqCGWmVnK{eF^G_9|mk zEUIUEQWPf4M};?F`q zR4j0DB0f4gX|qDSo~y9Z-}LBAbUnz%WV^QOd%I*N9@S4#=o*<{Xd2QLpu;m$+|EkA zhr^}YNUVG7&!HePUGLf6XE-nD#|(Yl%PSq3pmddU?u3;&_kv)J>(HA8L3M_Op+N)X zD$UJ5a_MzUmAgbz3fyc9PXF*5ev@499(UHi_j4`H4FuAX?OIXpnzQYr8j9RkTojal zthG)1#_xUB`H6|9#tyxT-Sk=~tq=ZTxE)(^(ld^EPchLYYwNsY{V^?LDUQr1PShIk znF!E*JXd^?WMSWoK>*Z*3G;$A9TZtrv?op4xF8ehL`&>erUJ_LQrDv_#%SZyv^ykY#H;?0W%L-=%PNcYEuoB2u9hf1X{16V z7l8IsYUbr*hBNNNhU3?Lovl0`KlYKL7TH7md+cg5&#m%4$-Ldv(xlWn;w(OF_mx~U z?{u}-Z?}qQ@&D#1H~;!$r*e=@aP9oPV3W#EwZiME6;&y-ypzm_nkDPlp>XAX zO*5zIswMv?IBcNg+VP^!NbTv<(cd1fA7-nh_3z47RSAq3C7A>a^~!RGdg-XM`cB_< zD~o9})#kQUYvJrKcM>?VdDQbphm<8@OGQ_Y^Zw;!=J9-W)rh*EQ+v z1oq*1Fa>_DJsMa{;jQ3Umn>=Z3{`1YC^h}YItsm+kvEh8Y*RT7B`#3Z=T4)GYwZ

^jzI^ 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

mI3Q&LhR}Y6qG_D{?}wavP_Ca1uWzt= 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 akC&{x`(ti0`Z*jya!XtqlY0IBv;P5l +

+ + ); + } +} + + +DownloadPanel.propTypes = { + downloads: PropTypes.array, +}; + +DownloadPanel.defaultProps = { + downloads: [], +}; + +export {DownloadPanel}; diff --git a/jsx/components/Sidebar.js b/jsx/components/Sidebar.js new file mode 100644 index 00000000000..45789e64540 --- /dev/null +++ b/jsx/components/Sidebar.js @@ -0,0 +1,132 @@ +import React, {Component} from 'react'; +import PropTypes from 'prop-types'; + + +const style = { + root: { + top: 0, + bottom: 0, + overflow: 'auto', + // display: 'table-cell' + }, + sidebar: { + top: 0, + bottom: 0, + zIndex: 1, + overflowY: 'auto', + }, + content: { + top: 0, + bottom: 0, + overflowY: 'scroll', + }, +}; + +/** + * This file contains React component for the Electrophysiology module sidebar. + * + * @author Alizée Wickenheiser. + * + */ +class Sidebar extends Component { + /** + * @constructor + * @param {object} props - React Component properties + */ + constructor(props) { + super(props); + + this.state = { + // width of the sidebar in pixels + sidebar: props.sidebar, + }; + + this.saveSidebarRef = this.saveSidebarRef.bind(this); + } + + /** + * Called by React when the component has been rendered on the page. + */ + componentDidMount() { + this.setState({ + + }); + this.saveSidebarWidth(); + } + + /** + * Save the sidebar reference + * @param {object} node - DOM node + */ + saveSidebarRef(node) { + this.sidebar = node; + } + + /** + * Save the sidebar width + */ + saveSidebarWidth() { + const width = this.sidebar.offsetWidth; + + if (width !== this.state.sidebar.width) { + let sidebar = this.state.sidebar; + sidebar.width = width; + this.setState({sidebar}); + } + } + + /** + * Renders the React component. + * + * @return {JSX} - React markup for the component + */ + render() { + const styleSidebar = {...style.sidebar, ...this.props.styles.sidebar}; + const rootProps = { + style: {...style.root, ...this.props.styles.root}, + role: 'navigation', + }; + + // sidebarStyle right/left + if (this.props.pullRight) { + styleSidebar.right = 0; + } else { + styleSidebar.left = 0; + } + + return ( +
+
+ {this.props.content} +
+
+ ); + } +} + +Sidebar.propTypes = { + // styles + styles: PropTypes.shape({ + root: PropTypes.object, + sidebar: PropTypes.object, + content: PropTypes.object, + }), + + // sidebar content to render + content: PropTypes.node.isRequired, + + // Place the sidebar on the right + pullRight: PropTypes.bool, + + sidebar: PropTypes.object, +}; + +Sidebar.defaultProps = { + styles: {}, + pullRight: false, + sidebar: { + width: 0, + }, +}; + +export default Sidebar; diff --git a/jsx/components/SidebarContent.js b/jsx/components/SidebarContent.js new file mode 100644 index 00000000000..4780bcc5f62 --- /dev/null +++ b/jsx/components/SidebarContent.js @@ -0,0 +1,77 @@ +/** + * Created by Alizée Wickenheiser on 6/25/18. + */ + +import PropTypes from 'prop-types'; + +const styles = { + sidebar: { + width: 150, + height: 'calc(100vh)', + background: '#E4EBF2', + border: '1px solid #C3D5DB', + fontWeight: 200, + fontFamily: 'Helvetica, Arial, sans-serif', + }, + sidebarLink: { + color: '#064785', + fontSize: '16px', + display: 'none', + padding: '10px 0 0 30px', + textDecoration: 'none', + }, + divider: { + height: 1, + width: '60%', + margin: '4px 0', + display: 'inline-block', + backgroundColor: '#123860', + }, + content: { + padding: '10px', + }, +}; + +const SidebarContent = (props) => { + return ( +
+
+ Navigation +
+ +
+ ); +}; + +SidebarContent.propTypes = { + previous: PropTypes.string, + next: PropTypes.string, +}; + +export default SidebarContent; diff --git a/jsx/components/electrophysiology_session_panels.js b/jsx/components/electrophysiology_session_panels.js new file mode 100644 index 00000000000..78d8d4a3a1b --- /dev/null +++ b/jsx/components/electrophysiology_session_panels.js @@ -0,0 +1,114 @@ +import React, {Component} from 'react'; +import PropTypes from 'prop-types'; +import Panel from 'jsx/Panel'; + +/** + * File Panel + * + * This file contains React component for Electrophysiology module. + * + * @version 0.0.1 + */ +class FilePanel extends Component { + /** + * @constructor + * @param {object} props - React Component properties + */ + constructor(props) { + super(props); + this.state = { + data: this.props.data, + }; + } + + /** + * Renders the React component. + * + * @return {JSX} - React markup for the component + */ + render() { + const halfSize = this.state.data.length/2; + const columns = [ + this.state.data.slice(0, halfSize), + this.state.data.slice(halfSize), + ]; + + return ( + +
+
+ {this.props.children} +
+ +
+
+
+ {columns.map((column, i) => ( +
+
+ + + {column.map((row, j) => { + const {name, value} = row; + return ( + + + + + ); + })} + +
{name}{value}
+
+
+ ))} +
+
+
+
+
+
+ ); + } +} + +FilePanel.propTypes = { + id: PropTypes.string, + title: PropTypes.string, + data: PropTypes.array, +}; + +FilePanel.defaultProps = { + id: 'file_panel', + title: 'FILENAME', + data: [], +}; + +export { + FilePanel, +}; diff --git a/jsx/components/electrophysiology_session_summary.js b/jsx/components/electrophysiology_session_summary.js new file mode 100644 index 00000000000..6b8383125a6 --- /dev/null +++ b/jsx/components/electrophysiology_session_summary.js @@ -0,0 +1,88 @@ +import React, {Component} from 'react'; +import PropTypes from 'prop-types'; +import Panel from 'jsx/Panel'; + +/** + * Summary Panel + * + * This file contains React component for Electrophysiology module. + * + * @version 0.0.1 + */ +class SummaryPanel extends Component { + /** + * @constructor + * @param {object} props - React Component properties + */ + constructor(props) { + super(props); + this.state = { + data: this.props.data, + }; + } + + /** + * Renders the React component. + * + * @return {JSX} - React markup for the component + */ + render() { + return ( +
+ +
+ + + {this.state.data.map((row, i) => { + const {name, value} = row; + return ( + + + + + ); + })} + +
{name}{value}
+
+
+
+ ); + } +} + +SummaryPanel.propTypes = { + data: PropTypes.array, +}; + +SummaryPanel.defaultProps = { + data: [], +}; + +export { + SummaryPanel, +}; diff --git a/jsx/electrophysiologyBrowserIndex.js b/jsx/electrophysiologyBrowserIndex.js new file mode 100644 index 00000000000..fc687a80a51 --- /dev/null +++ b/jsx/electrophysiologyBrowserIndex.js @@ -0,0 +1,180 @@ +import React, {Component} from 'react'; +import PropTypes from 'prop-types'; +import Loader from 'Loader'; +import FilterableDataTable from 'FilterableDataTable'; + +/** + * Electrophysiology Browser page. + * + * Serves as an entry-point to the module, rendering the whole react + * component page on load. + * + * Renders Electrophysiology Browser main page consisting of FilterTable and + * DataTable components. + * + * @author Cecile Madjar + * @version 1.0.0 + * + */ +class ElectrophysiologyBrowserIndex extends Component { + /** + * @constructor + * @param {object} props - React Component properties + */ + constructor(props) { + super(props); + + this.state = { + data: {}, + error: false, + isLoaded: false, + }; + + // Bind component instance to custom methods + this.fetchData = this.fetchData.bind(this); + } + + /** + * Called by React when the component has been rendered on the page. + */ + componentDidMount() { + this.fetchData() + .then(() => this.setState({isLoaded: true})); + } + + /** + * Retrieve data from the provided URL and save it in state. + * + * @return {object} + */ + fetchData() { + return fetch(this.props.dataURL, {credentials: 'same-origin'}) + .then((resp) => resp.json()) + .then((data) => this.setState({data})) + .catch((error) => { + this.setState({error: true}); + console.error(error); + }); + } + + /** + * Modify behaviour of specified column cells in the Data Table component + * + * @param {string} column - column name + * @param {string} cell - cell content + * @param {object} row - row content indexed by column + * + * @return {*} a formatted table cell for a given column + */ + formatColumn(column, cell, row) { + const style = ''; + let result = {cell}; + switch (column) { + case 'Links': + let cellTypes = cell.split(','); + let cellLinks = []; + cellTypes.reverse(); + for (let i = 0; i < cellTypes.length; i += 1) { + cellLinks.push( 1) { + cellLinks.push( + all types + ); + } + result = ({cellLinks}); + break; + } + + return result; + } + + /** + * Renders the React component. + * + * @return {JSX} - React markup for the component + */ + render() { + // If error occurs, return a message + if (this.state.error) { + return

An error occured while loading the page.

; + } + + // Waiting for async data to load + if (!this.state.isLoaded) { + return ; + } + + /** + * Currently, the order of these fields MUST match the order of the + * queried columns in _setupVariables() in electrophysiology_browser.class.inc + */ + const options = this.state.data.fieldOptions; + const fields = [ + {label: 'Site', show: true, filter: { + name: 'site', + type: 'select', + options: options.sites, + }}, + {label: 'PSCID', show: true, filter: { + name: 'PSCID', + type: 'text', + }}, + {label: 'DCCID', show: true, filter: { + name: 'DCCID', + type: 'text', + }}, + {label: 'Project', show: true, filter: { + name: 'project', + type: 'select', + options: options.projects, + }}, + {label: 'Visit Label', show: true, filter: { + name: 'visitLabel', + type: 'text', + }}, + {label: 'Acquisition Time', show: true}, + {label: 'Insertion Time', show: true}, + {label: 'Links', show: true}, + {label: 'Type', show: false, filter: { + name: 'type', + type: 'multiselect', + options: options.types, + }}, + {label: 'SessionID', show: false}, + ]; + + return ( + + ); + } +} + +ElectrophysiologyBrowserIndex.propTypes = { + dataURL: PropTypes.string.isRequired, +}; + +window.addEventListener('load', () => { + ReactDOM.render( + , + document.getElementById('lorisworkspace') + ); +}); diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js new file mode 100644 index 00000000000..638e79fcb54 --- /dev/null +++ b/jsx/electrophysiologySessionView.js @@ -0,0 +1,522 @@ +/** + * This is the React class for the eeg_session. + * + * @author Alizée Wickenheiser. + * @version 0.0.1 + * + */ + +import React, {Component} from 'react'; +import PropTypes from 'prop-types'; + +import StaticDataTable from 'jsx/StaticDataTable'; +import Panel from 'jsx/Panel'; +import {FilePanel} from './components/electrophysiology_session_panels'; +import {SummaryPanel} from './components/electrophysiology_session_summary'; +import {DownloadPanel} from './components/DownloadPanel'; +import Sidebar from './components/Sidebar'; +import SidebarContent from './components/SidebarContent'; +import EEGLabSeriesProvider + from './react-series-data-viewer/src/eeglab/EEGLabSeriesProvider'; +import SeriesRenderer + from './react-series-data-viewer/src/series/components/SeriesRenderer'; +import EEGMontage + from './react-series-data-viewer/src/series/components/EEGMontage'; + +/** + * Electrophysiology Session View page + * + * View session page of the electrophysiology module + * + * @author Alizée Wickenheiser + */ +class ElectrophysiologySessionView extends Component { + /** + * @constructor + * @param {object} props - React Component properties + */ + constructor(props) { + super(props); + + this.state = { + isLoaded: false, + url: { + params: { + sessionID: '', + outputType: '', + }, + }, + prevSession: '', + nextSession: '', + patient: { + info: { + pscid: '', + dccid: '', + visit_label: '', + site: '', + dob: '', + sex: '', + output_type: '', + subproject: '', + }, + }, + database: [ + { + file: { + name: '', + summary: { + frequency: { + sampling: '', + powerline: '', + }, + channel_count: [], + reference: '', + }, + details: { + task: { + description: '', + }, + instructions: '', + eeg: { + ground: '', + placement_scheme: '', + }, + trigger_count: '', + record_type: '', + cog: { + atlas_id: '', + poid: '', + }, + institution: { + name: '', + address: '', + }, + misc: { + channel_count: '', + }, + manufacturer: { + name: '', + model_name: '', + }, + cap: { + manufacturer: '', + model_name: '', + }, + hardware_filters: '', + recording_duration: '', + epoch_length: '', + device: { + version: '', + serial_number: '', + }, + subject_artifact_description: '', + }, + downloads: [ + { + type: 'physiological_file', + file: '', + }, + { + type: 'physiological_electrode_file', + file: '', + }, + { + type: 'physiological_channel_file', + file: '', + }, + { + type: 'physiological_task_event_file', + file: '', + }, + { + type: 'physiological_annotation_files', + file: '', + }, + { + type: 'all_files', + file: '', + }, + { + type: 'physiological_fdt_file', + file: '', + }, + ], + }, + chunksURL: null, + epochsURL: null, + electrodesURL: null, + splitData: null, + }, + ], + }; + + // Bind component instance to custom methods + this.collectParams = this.collectParams.bind(this); + this.fetchData = this.fetchData.bind(this); + } + + /** + * Fetch data when component mounts. + */ + componentDidMount() { + this.collectParams(); + this.fetchData(); + } + + /** + * Retrieve params from the browser URL and save it in state. + */ + collectParams() { + const url = new URL(window.location.href); + const outputType = url.searchParams.get('outputType'); + this.state.url.params = { + outputType: outputType === null ? 'all_types' : outputType, + }; + } + + /** + * Retrieve data from the provided URL and save it in state. + * + * @return {object} + */ + fetchData() { + const dataURL = loris.BaseURL + '/electrophysiology_browser/sessions/'; + const sessionID = this.props.sessionid; + const outputTypeArg = '?outputType=' + this.state.url.params['outputType']; + return fetch( + dataURL + sessionID + outputTypeArg, + {credentials: 'same-origin'} + ).then((resp) => { + if (!resp.ok) { + throw Error(resp.statusText); + } + return resp.json(); + }) + .then((data) => { + const database = data.database.map((dbEntry) => ({ + ...dbEntry, + // EEG Visualisation urls + chunksURLs: + dbEntry + && dbEntry.file.chunks_urls.map( + (url) => + loris.BaseURL + + '/electrophysiology_browser/file_reader/?file=' + + url + ), + epochsURL: + dbEntry + && dbEntry.file.downloads.map( + (group) => + group.links[3]?.file + && loris.BaseURL + + '/electrophysiology_browser/file_reader/?file=' + + group.links[3].file + ), + electrodesURL: + dbEntry + && dbEntry.file.downloads.map( + (group) => + group.links[1]?.file + && loris.BaseURL + + '/electrophysiology_browser/file_reader/?file=' + + group.links[1].file + ), + })); + + this.setState({ + setup: {data}, + isLoaded: true, + database: database, + patient: { + info: data.patient, + }, + }); + + document.getElementById( + 'nav_next' + ).href = dataURL + data.nextSession + outputTypeArg; + document.getElementById( + 'nav_previous' + ).href = dataURL + data.prevSession + outputTypeArg; + if (data.prevSession !== '') { + document.getElementById('nav_previous').style.display = 'block'; + } + if (data.nextSession !== '') { + document.getElementById('nav_next').style.display = 'block'; + } + }) + .catch((error) => { + this.setState({error: true}); + console.error(error); + }); + } + + /** + * Retrieve the previous state. + * + * @param {object} callback + */ + getState(callback) { + this.setState((prevState) => { + callback(prevState); + }); + } + + /** + * Get split data for split index + * + * @param {int} physioFileID + * @param {int} fileIndex + * @param {int} splitIndex + */ + getSplitData(physioFileID, fileIndex, splitIndex) { + const dataURL = loris.BaseURL + + '/electrophysiology_browser/split_data'; + const formData = new FormData(); + formData.append('physioFileID', physioFileID); + formData.append('splitIndex', splitIndex); + + fetch( + dataURL, { + method: 'POST', + body: formData, + }).then((resp) => { + if (!resp.ok) { + throw Error(resp.statusText); + } + + resp.json().then((splitData) => { + const database = JSON.parse(JSON.stringify(this.state.database)); + database[fileIndex].file.splitData = splitData; + this.setState({database}); + }); + }).catch((error) => { + this.setState({error: true}); + console.error(error); + }); + } + + /** + * Renders the React component. + * + * @return {JSX} - React markup for the component + */ + render() { + if (!this.state.isLoaded) { + return ( + + ); + } + + if (this.state.isLoaded) { + let database = []; + for (let i = 0; i < this.state.database.length; i++) { + const { + chunksURLs, + epochsURL, + electrodesURL, + } = this.state.database[i]; + const file = this.state.database[i].file; + const splitPagination = []; + for (const j of Array(file.splitData?.splitCount).keys()) { + splitPagination.push( + this.getSplitData(file.id, i, j)} + >{j+1} + ); + } + database.push( +
+ +
+ + + {file.splitData && + <> + + Viewing signal split file: + + this.getSplitData( + file.id, + i, + file.splitData.splitIndex-1 + )} + > + {'<'} + + {splitPagination} + this.getSplitData( + file.id, + i, + file.splitData.splitIndex+1 + ) + } + > + {'>'} + + + } + + +
+
+ +
+ +
+ +
+
+
+
+
+
+ ); + } + + return ( +
+ + {database} +
+ ); + } + } +} + +ElectrophysiologySessionView.propTypes = { + module: PropTypes.string.isRequired, +}; +ElectrophysiologySessionView.defaultProps = { + module: '', +}; + +/** + * Render EEGSession on page load. + */ +window.onload = function() { + const sidebarContent = ( + +); + + const eegSidebar = ( + + +); + + const eegSidebarDOM = document.createElement('div'); + eegSidebarDOM.id = 'eegSidebar'; + + const page = document.getElementById('page'); + page.classList.add('eegBrowser'); + + const wrapDOM = document.getElementById('wrap'); + wrapDOM.insertBefore(eegSidebarDOM, page); + + const pathparts = window.location.pathname.split('/'); + const eegSessionView = ( + +); + // Create a wrapper div in which react component will be loaded. + const EEGSessionViewAppDOM = document.createElement('div'); + EEGSessionViewAppDOM.id = 'eegSessionView'; + + // Append wrapper div to page content. + const rootDOM = document.getElementById('lorisworkspace'); + rootDOM.appendChild(EEGSessionViewAppDOM); + + // Render the React Components. + ReactDOM.render(eegSessionView, document.getElementById('eegSessionView')); + ReactDOM.render(eegSidebar, document.getElementById('eegSidebar')); +}; diff --git a/jsx/react-series-data-viewer/README.md b/jsx/react-series-data-viewer/README.md new file mode 100644 index 00000000000..164785e80c3 --- /dev/null +++ b/jsx/react-series-data-viewer/README.md @@ -0,0 +1,55 @@ +# EEG Browser Visualization + +## Main dependencies + +- [Ramda](https://ramdajs.com) +A practical functional library for JavaScript programmers. + +- [Redux](https://redux.js.org): +A Predictable State Container for JS Apps + +- [Visx](https://airbnb.io/visx): +A collection of expressive, low-level visualization primitives for React. + +- [RxJS](https://rxjs-dev.firebaseapp.com/guide/overview): +RxJS is a library for composing asynchronous and event-based programs by using observable sequences. +It provides one core type, the Observable, satellite types (Observer, Schedulers, Subjects) and operators to allow handling asynchronous events as collections. + +- [TypeScript](https://www.typescriptlang.org) +A static type checker for javascript. + +- [Protocol Buffers](https://developers.google.com/protocol-buffers) +To install the Protocol Buffers Compiler (protoc), run: +`apt install -y protobuf-compiler` + + +## User manual + +The EEG Browser visualization component adds support for some useful visual helpers: The **Signal Viewer** and the **Electrode Map**. + +![Overall View](./../../images/overall-view.png) + +### Signal Viewer +![Signal Viewer](./../../images/signal-values-details.png)

+Several tools can be used to navigate through the Signal Viewer: + - The **Timeline Range View** (1) can be used to change the boundaries of the viewed timeline. + - The **Amplitude** and **Filter** tools (2) can be used to increase/reduce the amplitude scale and apply high or low-pass filters. + - The **Channel navigation** (3) can be used to navigate through the viewed channels. + - The **Event Panel** (4) can be used to display information about the events when event data is available. + - If the selected timeline range contains more than 100 events, a message (5) indicates the user to reduce the boundaries of the timeline in order to display the event data. +

+

+
+ Signal Viewer with signal values and event data displayed. +

+ +### Electrode Map +The current implementation of the Electrode Map supports 2 display modes: 2D and 3D. + +| 2D View | 3D View | +|:-------------------------:|:-------------------------:| +|
The 2D view is a stereographic projection of the electrodes position. Electrodes are indexed and their name is displayed on mouse hover. |
The 3D view displays the exact position of the electrodes on the brain. | + +### Future developements to come + +A signal annotation feature is currently under development. diff --git a/jsx/react-series-data-viewer/package.json b/jsx/react-series-data-viewer/package.json new file mode 100644 index 00000000000..f1feca2fbdb --- /dev/null +++ b/jsx/react-series-data-viewer/package.json @@ -0,0 +1,40 @@ +{ + "name": "react-series-data-viewer", + "homepage": "https://github.com/aces/react-series-data-viewer/", + "version": "1.0.0", + "description": "react-series-data-viewer React component", + "dependencies": { + "@visx/axis": "^1.4.0", + "@visx/group": "^1.0.0", + "@visx/responsive": "^1.3.0", + "@visx/shape": "^1.4.0", + "d3-3d": "0.0.10", + "d3-array": "^1.2.4", + "d3-dsv": "^1.0.10", + "d3-scale": "^2.1.2", + "d3-scale-chromatic": "^1.3.3", + "differenceequationsignal1d": "^0.1.1", + "gl-matrix": "^2.8.1", + "google-protobuf": "^3.6.1", + "ramda": "^0.25.0", + "react": "^16.12.0", + "react-compound-slider": "^3.3.1", + "react-dom": "^16.13.1", + "react-redux": "^7.2.1", + "redux": "^4.0.0", + "redux-actions": "^2.6.1", + "redux-logger": "^3.0.6", + "redux-observable": "^1.0.0", + "redux-thunk": "^2.3.0", + "resize-observer-polyfill": "^1.5.0", + "rxjs": "^6.6.3", + "tslib": "^1.9.3" + }, + "devDependencies": { + "@types/react": "^16.12.0", + "@types/react-dom": "^16.9.9", + "@types/react-redux": "7.1.16" + }, + "license": "MIT", + "repository": "https://github.com/aces/react-series-data-viewer" +} diff --git a/jsx/react-series-data-viewer/protocol-buffers/chunk.proto b/jsx/react-series-data-viewer/protocol-buffers/chunk.proto new file mode 100644 index 00000000000..c3a069e172a --- /dev/null +++ b/jsx/react-series-data-viewer/protocol-buffers/chunk.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +message FloatChunk { + int64 index = 1; + int64 downsampling = 2; + int64 cutoff = 3; + repeated float samples = 4; +} diff --git a/jsx/react-series-data-viewer/src/ajax/index.tsx b/jsx/react-series-data-viewer/src/ajax/index.tsx new file mode 100644 index 00000000000..021f6a76f5d --- /dev/null +++ b/jsx/react-series-data-viewer/src/ajax/index.tsx @@ -0,0 +1,23 @@ +export const fetchBlob = (url: string, params?: {}) => + fetch(url, params).then((response) => { + if (!response.ok) { + return Promise.resolve(null) as Promise; + } + return response.blob().then((data) => data); + }); + +export const fetchJSON = (url: string, params?: {}) => + fetch(url, params).then((response) => { + if (!response.ok) { + return Promise.resolve(null) as Promise; + } + return response.json().then((data) => data); + }); + +export const fetchText = (url: string, params?: {}) => + fetch(url, params).then((response) => { + if (!response.ok) { + return Promise.resolve(null) as Promise; + } + return response.text().then((data) => data); + }); diff --git a/jsx/react-series-data-viewer/src/chunks/index.tsx b/jsx/react-series-data-viewer/src/chunks/index.tsx new file mode 100644 index 00000000000..aab41b787fd --- /dev/null +++ b/jsx/react-series-data-viewer/src/chunks/index.tsx @@ -0,0 +1,22 @@ +// @ts-ignore +import {FloatChunk} from '../protocol-buffers/chunk_pb'; +import {fetchBlob} from '../ajax'; + +export const fetchChunk = (url: string): Promise => { + return fetchBlob(url).then((blob) => { + const reader = new FileReader(); + reader.readAsArrayBuffer(blob); + return new Promise((resolve) => { + reader.addEventListener('loadend', () => { + const parsed = FloatChunk.deserializeBinary(reader.result); + resolve({ + index: parsed.getIndex(), + cutoff: parsed.getCutoff(), + downsampling: parsed.getDownsampling(), + originalValues: parsed.getSamplesList(), + values: parsed.getSamplesList(), + }); + }); + }); + }); +}; diff --git a/jsx/react-series-data-viewer/src/color/index.tsx b/jsx/react-series-data-viewer/src/color/index.tsx new file mode 100644 index 00000000000..1f2027139d8 --- /dev/null +++ b/jsx/react-series-data-viewer/src/color/index.tsx @@ -0,0 +1,16 @@ +import {scaleOrdinal} from 'd3-scale'; +// import * as R from 'ramda'; +// import {schemeCategory10, schemeSet3} from 'd3-scale-chromatic'; +// export const colorOrder = scaleOrdinal(R.concat(schemeCategory10, schemeSet3)); +export const colorOrder = scaleOrdinal(); + +export const hex2rgba = ({color = '#000000', alpha = 1} : { + color: string, + alpha: number, +}) => { + const r = parseInt(color.slice(1, 3), 16); + const g = parseInt(color.slice(3, 5), 16); + const b = parseInt(color.slice(5, 7), 16); + + return `rgba(${r}, ${g}, ${b}, ${alpha})`; +}; diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx new file mode 100644 index 00000000000..86e2b64627a --- /dev/null +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -0,0 +1,177 @@ +import React, {Component} from 'react'; +import {tsvParse} from 'd3-dsv'; +import {createStore, applyMiddleware, Store} from 'redux'; +import {Provider} from 'react-redux'; +import {createEpicMiddleware} from 'redux-observable'; +import thunk from 'redux-thunk'; +import {fetchJSON, fetchText} from '../ajax'; +import {rootReducer, rootEpic} from '../series/store'; +import {MAX_CHANNELS} from '../vector'; +import { + setChannels, + setEpochs, + setDatasetMetadata, + emptyChannels, +} from '../series/store/state/dataset'; +import {setDomain, setInterval} from '../series/store/state/bounds'; +import {updateFilteredEpochs} from '../series/store/logic/filterEpochs'; +import {setElectrodes} from '../series/store/state/montage'; +import {Channel} from '../series/store/types'; + +declare global { + interface Window { + EEGLabSeriesProviderStore: Store; + } +} + +type CProps = { + chunksURL: string, + epochsURL: string, + electrodesURL: string, + limit: number, +}; + +/** + * EEGLabSeriesProvider component + */ +class EEGLabSeriesProvider extends Component { + private store: Store; + public state: { + channels: Channel[] + }; + + /** + * @constructor + * @param {object} props - React Component properties + */ + constructor(props: CProps) { + super(props); + const epicMiddleware = createEpicMiddleware(); + + this.store = createStore( + rootReducer, + applyMiddleware(thunk, epicMiddleware) + ); + + this.state = { + channels: [], + }; + + this.store.subscribe(this.listener.bind(this)); + + epicMiddleware.run(rootEpic); + + window.EEGLabSeriesProviderStore = this.store; + + const { + chunksURL, + epochsURL, + electrodesURL, + limit, + } = props; + + const racers = (fetcher, url, route = '') => { + if (url) { + return [fetcher(`${url}${route}`) + .then((json) => ({json, url})) + // if request fails don't resolve + .catch((error) => { + console.error(error); + return new Promise((resolve) => {}); + })]; + } else { + return [new Promise((resolve) => {})]; + } + }; + + Promise.race(racers(fetchJSON, chunksURL, '/index.json')).then( + ({json, url}) => { + if (json) { + const {channelMetadata, shapes, timeInterval, seriesRange} = json; + this.store.dispatch( + setDatasetMetadata({ + chunksURL: url, + channelMetadata, + shapes, + timeInterval, + seriesRange, + limit, + }) + ); + this.store.dispatch(setChannels(emptyChannels( + Math.min(this.props.limit, channelMetadata.length), + 1 + ))); + this.store.dispatch(setDomain(timeInterval)); + this.store.dispatch(setInterval(timeInterval)); + } + } + ).then(() => Promise.race(racers(fetchText, epochsURL)).then((text) => { + if (!(typeof text.json === 'string' + || text.json instanceof String)) return; + this.store.dispatch( + setEpochs(tsvParse( + text.json.replace('trial_type', 'label')) + .map(({onset, duration, label}, i) => ({ + onset: parseFloat(onset), + duration: parseFloat(duration), + type: 'Event', + label: label, + comment: null, + channels: 'all', + })) + ) + ); + this.store.dispatch(updateFilteredEpochs()); + }) + ); + + Promise.race(racers(fetchText, electrodesURL)) + .then((text) => { + if (!(typeof text.json === 'string' + || text.json instanceof String)) return; + this.store.dispatch( + setElectrodes( + tsvParse(text.json).map(({name, x, y, z}) => ({ + name: name, + channelIndex: null, + position: [parseFloat(x), parseFloat(y), parseFloat(z)], + })) + ) + ); + }) + .catch((error) => { + console.error(error); + }); + } + + /** + * Store update listener + */ + listener() { + this.setState({ + channels: this.store.getState().dataset.channels, + }); + } + + /** + * Renders the React component. + * + * @return {JSX} - React markup for the component + */ + render() { + const [signalViewer, ...rest] = this.props.children; + return ( + + {(this.state.channels.length > 0) && signalViewer} + {rest} + + ); + } + + static defaultProps = { + limit: MAX_CHANNELS, + }; +} + +export default EEGLabSeriesProvider; diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx new file mode 100644 index 00000000000..cce1762d5b1 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -0,0 +1,202 @@ +import React, {useEffect, useState} from 'react'; +import {Epoch as EpochType, RightPanel} from '../store/types'; +import {connect, DefaultRootState} from 'react-redux'; +import {setTimeSelection} from '../store/state/timeSelection'; +import {setRightPanel} from '../store/state/rightPanel'; +import * as R from 'ramda'; +import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; +import {RootState} from '../store'; + +type CProps = { + timeSelection?: [number, number], + epochs: EpochType[], + filteredEpochs: number[], + setTimeSelection: (_: [number, number]) => void, + setRightPanel: (_: RightPanel) => void, + toggleEpoch: (_: number) => void, + updateActiveEpoch: (_: number) => void, + interval: [number, number], +}; + +const AnnotationForm = ({ + timeSelection, + epochs, + filteredEpochs, + setTimeSelection, + setRightPanel, + toggleEpoch, + updateActiveEpoch, + interval, +}: CProps) => { + const [startEvent = '', endEvent = ''] = timeSelection || []; + let [event, setEvent] = useState([startEvent, endEvent]); + + useEffect(() => { + const [startEvent = '', endEvent = ''] = timeSelection || []; + setEvent([startEvent, endEvent]); + }, [timeSelection]); + + const validate = (event) => ( + (event[0] || event[0] === 0) + && (event[1] || event[1] === 0) + && event[0] <= event[1] + && event[0] >= interval[0] && event[0] <= interval[1] + && event[1] >= interval[0] && event[1] <= interval[1] + ); + + return ( +
+
+ New Annotation + { + setRightPanel(null); + }} + > +
+
+
+
+ + { + const value = parseInt(e.target.value); + setEvent([value, event[1]]); + + if (validate([value, event[1]])) { + let endTime = event[1]; + if (typeof endTime === 'string'){ + endTime = parseInt(endTime); + } + setTimeSelection( + [ + value || null, + endTime || null, + ] + ); + } + }} + value={event[0]} + /> +
+
+ + { + const value = parseInt(e.target.value); + setEvent([event[0], value]); + + if (validate([event[0], value])) { + let startTime = event[0]; + if (typeof startTime === 'string'){ + startTime = parseInt(startTime); + } + setTimeSelection( + [ + startTime || null, + value + ] + ); + } + }} + value={event[1]} + /> +
+
+
+ + +
+
+ + +
+ +
+
+ ); +}; + +AnnotationForm.defaultProps = { + timeSelection: null, + epochs: [], + filteredEpochs: [], +}; + +export default connect( + (state: RootState)=> ({ + timeSelection: state.timeSelection, + epochs: state.dataset.epochs, + filteredEpochs: state.dataset.filteredEpochs, + interval: state.bounds.interval, + }), + (dispatch: (any) => void) => ({ + setTimeSelection: R.compose( + dispatch, + setTimeSelection + ), + setRightPanel: R.compose( + dispatch, + setRightPanel + ), + toggleEpoch: R.compose( + dispatch, + toggleEpoch + ), + updateActiveEpoch: R.compose( + dispatch, + updateActiveEpoch + ), + }) +)(AnnotationForm); diff --git a/jsx/react-series-data-viewer/src/series/components/Axis.tsx b/jsx/react-series-data-viewer/src/series/components/Axis.tsx new file mode 100644 index 00000000000..82a569f2ae3 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/Axis.tsx @@ -0,0 +1,51 @@ +import {scaleLinear} from 'd3-scale'; +import {Axis as VxAxis} from '@visx/axis'; + +type CProps = { + orientation: 'top' | 'right' | 'bottom' | 'left', + domain: [number, number], + range: [number, number], + ticks: number, + padding: number, + format: (_: number) => string, + hideLine: boolean, +}; + +const Axis = ({ + orientation, + domain, + range, + ticks, + padding, + format, + hideLine, +}: CProps) => { + const scale = scaleLinear() + .domain(domain) + .range(range); + + let tickValues = scale.ticks(ticks); + tickValues = tickValues.slice(padding, tickValues.length - padding); + + return ( + + ); +}; + +Axis.defaultProps = { + orientation: 'bottom', + domain: [0, 1], + ticks: 10, + padding: 0, + hideLine: false, + format: (tick) => `${tick}`, +}; + +export default Axis; diff --git a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx new file mode 100644 index 00000000000..cb053df941b --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx @@ -0,0 +1,268 @@ +import * as R from 'ramda'; +import {connect} from 'react-redux'; +import {_3d} from 'd3-3d'; +import {Group} from '@visx/group'; +import ResponsiveViewer from './ResponsiveViewer'; +import {Electrode} from '../../series/store/types'; +import {setHidden} from '../../series/store/state/montage'; +import React, {useState} from 'react'; +import Panel from 'Panel'; +import {RootState} from '../store'; + +type CProps = { + electrodes: Electrode[], + hidden: number[], + drag: boolean, + mx: number, + my: number, + mouseX: number, + mouseY: number, + setHidden: (_: number[]) => void, +}; + +const EEGMontage = ( + { + electrodes, + hidden, + setHidden, + }: CProps) => { + if (electrodes.length === 0) return null; + + const [angleX, setAngleX] = useState(0); + const [angleZ, setAngleZ] = useState(0); + const [drag, setDrag] = useState(false); + const [mx, setMx] = useState(0); + const [my, setMy] = useState(0); + const [mouseX, setMouseX] = useState(0); + const [mouseY, setMouseY] = useState(0); + const [view3D, setView3D] = useState(false); + + const scale = 1200; + let scatter3D = []; + let scatter2D = []; + const startAngle = 0; + const color = '#000000'; + + let point3D = _3d() + .x((d) => d.x) + .y((d) => d.y) + .z((d) => d.z) + .rotateZ( startAngle) + .rotateX(-startAngle) + .scale(scale); + + const dragStart = (v: any) => { + setDrag(true); + setMx(v[0]); + setMy(v[1]); + }; + + const dragged = (v: any) => { + if (!drag) return; + const beta = (v[0] - mx + mouseX) * -2 * Math.PI; + const alpha = (v[1] - my + mouseY) * -2 * Math.PI; + + const angleX = Math.min(Math.PI/2, Math.max(0, alpha - startAngle)); + setAngleX(angleX); + + const angleZ = (beta + startAngle); + setAngleZ(angleZ); + }; + + const dragEnd = (v: any) => { + setDrag( false); + setMouseX( v[0] - mx + mouseX); + setMouseY(v[1] - my + mouseY); + }; + + /** + * Compute the stereographic projection. + * + * Given a unit sphere with radius r = 1 and center at The origin. + * Project the point p = (x, y, z) from the sphere's South pole (0, 0, -1) + * on a plane on the sphere's North pole (0, 0, 1). + * + * P' = P * (2r / (r + z)) + * + * @param {number} x - x coordinate of electrodes on a unit sphere scale + * @param {number} y - x coordinate of electrodes on a unit sphere scale + * @param {number} z - x coordinate of electrodes on a unit sphere scale + * @param {number} scale - Scale to change the projection point.Defaults to 1, which is on the sphere + * + * @return {number[]} : x, y positions of electrodes as projected onto a unit circle. + */ + const stereographicProjection = (x, y, z, scale=1.0) => { + const mu = 1.0 / (scale + z); + return [x * mu, y * mu]; + }; + + electrodes.map((electrode, i) => { + scatter3D.push({ + x: electrode.position[0], + y: electrode.position[1], + z: electrode.position[2], + }); + const [x, y] = stereographicProjection( + electrode.position[0] * 10, + electrode.position[1] * 10, + electrode.position[2] * 10 + ); + scatter2D.push({x: x * 150, y: y * 150 / 0.8}); + }); + + const Montage3D = () => ( + + {point3D.rotateZ(angleZ).rotateX(angleX)(scatter3D).map((point, i) => { + return ( + + ); + })} + + ); + + const Montage2D = () => ( + + + + + + + {scatter2D.map((point, i) => + + + {electrodes[i].name} + + + {i + 1} + {electrodes[i].name} + + + )} + + ); + + return ( +
+ +
+
+ {view3D ? + + + + : + + + + } +
+ + +
+
+
+
+
+ ); +}; + +EEGMontage.defaultProps = { + montage: [], + hidden: [], +}; + +export default connect( + (state: RootState) => ({ + hidden: state.montage.hidden, + electrodes: state.montage.electrodes, + }), + (dispatch: (_: any) => void) => ({ + setHidden: R.compose( + dispatch, + setHidden, + ), + }) +)(EEGMontage); diff --git a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx new file mode 100644 index 00000000000..3ea2c4c60ea --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx @@ -0,0 +1,54 @@ +import {vec2} from 'gl-matrix'; +import {MIN_EPOCH_WIDTH} from '../../vector'; +import {ScaleLinear} from 'd3-scale'; + +type CProps = { + parentHeight: number, + onset: number, + duration: number, + scales: [ScaleLinear, ScaleLinear], + color: string, + opacity: number, +}; + +const Epoch = ( + { + parentHeight, + onset, + duration, + scales, + color, + opacity, + }: CProps) => { + const start = vec2.fromValues( + scales[0](onset), + scales[1](-parentHeight/2), + ); + + const end = vec2.fromValues( + scales[0](onset + duration) + MIN_EPOCH_WIDTH, + scales[1](parentHeight/2) + ); + + const width = Math.abs(end[0] - start[0]); + const height = Math.abs(end[1] - start[1]); + const center = (start[0] + end[0]) / 2; + + return ( + + ); +}; + +Epoch.defaultProps = { + color: '#dae5f2', + opacity: 1, +}; + +export default Epoch; diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx new file mode 100644 index 00000000000..a3f5c0da2a0 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -0,0 +1,142 @@ +import React from 'react'; +import {Epoch as EpochType, RightPanel} from '../store/types'; +import {connect} from 'react-redux'; +import {setTimeSelection} from '../store/state/timeSelection'; +import {setRightPanel} from '../store/state/rightPanel'; +import * as R from 'ramda'; +import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; +import {RootState} from '../store'; + +type CProps = { + timeSelection?: [number, number], + epochs: EpochType[], + filteredEpochs: number[], + setTimeSelection: (_: [number, number]) => void, + setRightPanel: (_: RightPanel) => void, + toggleEpoch: (_: number) => void, + updateActiveEpoch: (_: number) => void, + interval: [number, number], +}; + +const EventManager = ({ + epochs, + filteredEpochs, + setTimeSelection, + setRightPanel, + toggleEpoch, + updateActiveEpoch, + interval, +}: CProps) => { + return ( +
+
+ Events / Annotations + in timeline view + { + setRightPanel(null); + }} + > +
+
+
+ {[...Array(epochs.length).keys()].filter((index) => + epochs[index].onset + epochs[index].duration > interval[0] + && epochs[index].onset < interval[1] + ).map((index) => { + const epoch = epochs[index]; + const visible = filteredEpochs.includes(index); + + return ( +
+ {epoch.label}
+ {epoch.onset}{epoch.duration > 0 + && ' - ' + (epoch.onset + epoch.duration)} + +
+ ); + })} +
+
+
+ ); +}; + +EventManager.defaultProps = { + timeSelection: null, + epochs: [], + filteredEpochs: [], +}; + +export default connect( + (state: RootState)=> ({ + timeSelection: state.timeSelection, + epochs: state.dataset.epochs, + filteredEpochs: state.dataset.filteredEpochs, + interval: state.bounds.interval, + }), + (dispatch: (_: any) => void) => ({ + setTimeSelection: R.compose( + dispatch, + setTimeSelection + ), + setRightPanel: R.compose( + dispatch, + setRightPanel + ), + toggleEpoch: R.compose( + dispatch, + toggleEpoch + ), + updateActiveEpoch: R.compose( + dispatch, + updateActiveEpoch + ), + }) +)(EventManager); diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx new file mode 100644 index 00000000000..7c38dfdb799 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -0,0 +1,183 @@ +import * as R from 'ramda'; +import {connect} from 'react-redux'; +import { + startDragInterval, + continueDragInterval, + endDragInterval, +} from '../store/logic/dragBounds'; +import {setInterval} from '../store/state/bounds'; +import {updateFilteredEpochs} from '../store/logic/filterEpochs'; +import {Slider, Rail, Handles, Ticks} from 'react-compound-slider'; +import {Handle, Tick} from './components'; +import React, {useState, FunctionComponent} from 'react'; +import {RootState} from '../store'; + +type CProps = { + viewerHeight?: number, + domain: [number, number], + interval: [number, number], + setInterval: (_: [number, number]) => void, + dragStart: (_: [number, number]) => void, + dragContinue: (_: [number, number]) => void, + dragEnd: (_: [number, number]) => void, + updateFilteredEpochs: (_: void) => void, +}; + +const IntervalSelect: FunctionComponent = ({ + viewerHeight, + domain, + interval, + setInterval, + dragStart, + dragContinue, + dragEnd, + updateFilteredEpochs, +}) => { + const [isDragging, setIsDragging] = useState(false); + + const sliderStyle = { + position: 'relative', + }; + + const railStyle = { + position: 'absolute', + width: '100%', + height: 10, + marginTop: -9, + borderBottom: '1px solid #000', + cursor: 'pointer', + }; + + return ( +
+
+ Timeline Range View + { + setInterval([domain[0], domain[1]]); + updateFilteredEpochs(); + }} + value='Reset' + style={{marginLeft: '15px'}} + /> +
+
+ { + if (!isDragging) { + dragStart([values[0], values[1]]); + setIsDragging(true); + } else { + dragContinue([values[0], values[1]]); + } + }} + onChange={(values) => { + dragStart([values[0], values[1]]); + dragEnd([values[0], values[1]]); + setIsDragging(false); + }} + > + + {({getRailProps}) => ( +
+ )} + + + {({handles, getHandleProps}) => ( +
+ {handles.map((handle) => ( + + ))} +
+ )} +
+ + {({ticks}) => ( +
+ {ticks.map((tick) => ( + + ))} +
+ )} +
+ + +
+ Time (s) +
+
+
+ ); +}; + +IntervalSelect.defaultProps = { + viewerHeight: 20, + domain: [0, 1], + interval: [0.25, 0.75], +}; + +export default connect( + (state: RootState) => ({ + domain: state.bounds.domain, + interval: state.bounds.interval, + }), + (dispatch: (_: any) => void) => ({ + dragStart: R.compose( + dispatch, + startDragInterval + ), + dragContinue: R.compose( + dispatch, + continueDragInterval + ), + dragEnd: R.compose( + dispatch, + endDragInterval + ), + updateFilteredEpochs: R.compose( + dispatch, + updateFilteredEpochs + ), + setInterval: R.compose( + dispatch, + setInterval + ), + }) +)(IntervalSelect); diff --git a/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx b/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx new file mode 100644 index 00000000000..d726698c97c --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx @@ -0,0 +1,121 @@ +import * as R from 'ramda'; +import {scaleLinear, ScaleLinear} from 'd3-scale'; +import {vec2} from 'gl-matrix'; +import {colorOrder} from '../../color'; +import {Chunk} from '../store/types'; +import {LinePath} from '@visx/shape'; +import {Group} from '@visx/group'; + +const LineMemo = R.memoizeWith( + ({interval, amplitudeScale, filters, channelIndex, traceIndex, chunkIndex}) => + `${interval.join(',')},${amplitudeScale},${filters.join('-')},` + + `${channelIndex}-${traceIndex}-${chunkIndex}`, + ({ + channelIndex, + traceIndex, + chunkIndex, + interval, + seriesRange, + amplitudeScale, + filters, + values, + color, + ...rest +}) => { + const scales = [ + scaleLinear() + .domain(interval) + .range([-0.5, 0.5]), + scaleLinear() + .domain(seriesRange.map((x) => x * amplitudeScale)) + .range([-0.5, 0.5]), + ]; + + const points = values.map((value, i) => + vec2.fromValues( + scales[0]( + interval[0] + (i / values.length) * (interval[1] - interval[0]) + ), + -scales[1](value) + ) + ); + + return ( + + ); + } +); + +type CProps = { + channelIndex: number, + traceIndex: number, + chunkIndex: number, + chunk: Chunk, + seriesRange: [number, number], + amplitudeScale: number, + scales: [ScaleLinear, ScaleLinear], + color?: string +}; + +const LineChunk = ({ + channelIndex, + traceIndex, + chunkIndex, + chunk, + seriesRange, + amplitudeScale, + scales, + color, + ...rest +}: CProps) => { + const {interval, values} = chunk; + + if (values.length === 0) { + return ; + } + + const range = scales[1].range(); + const chunkLength = Math.abs(scales[0](interval[1]) - scales[0](interval[0])); + const chunkHeight = Math.abs(range[1] - range[0]); + + const p0 = vec2.fromValues( + (scales[0](interval[0]) + scales[0](interval[1])) / 2, + (range[0] + range[1]) / 2 + ); + + const lineColor = colorOrder(channelIndex.toString()) || '#999'; + + return ( + + + + + + ); +}; + +export default LineChunk; diff --git a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx new file mode 100644 index 00000000000..53f14d1e712 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx @@ -0,0 +1,107 @@ +import * as R from 'ramda'; +import React, { FunctionComponent, ReactNode, Children } from 'react'; +import {scaleLinear} from 'd3-scale'; +import {withParentSize} from '@visx/responsive'; +import { WithParentSizeProps } from '@visx/responsive/lib/enhancers/withParentSizeModern'; + +type CProps = { + parentWidth?: number, + parentHeight?: number, + mouseDown?: (_: any) => void, + mouseMove?: (_: any) => void, + mouseUp?: (_: any) => void, + mouseLeave?: (_: any) => void +}; + +const ResponsiveViewer : FunctionComponent = ({ + parentWidth, + parentHeight, + mouseDown, + mouseMove, + mouseUp, + mouseLeave, + children +}) => { + const provision = (layer) => + React.cloneElement( + layer, + {viewerWidth: parentWidth, viewerHeight: parentHeight} + ); + + const layers = React.Children.toArray(children).map(provision); + + const domain = window.EEGLabSeriesProviderStore.getState().bounds.domain; + const amplitude = [0, 1]; + const eventScale = [ + scaleLinear() + .domain(domain) + .range([-parentWidth/2, parentWidth/2]), + scaleLinear() + .domain(amplitude) + .range([-parentHeight/2, parentHeight/2]), + ]; + + const eventToPosition = (e) => { + const { + top, + left, + width, + height, + } = e.currentTarget.getBoundingClientRect(); + return [ + Math.min( + 1, + Math.max( + 0, + eventScale[0].invert( + eventScale[0]((e.clientX - left) / width) + ) + ) + ), + eventScale[1].invert(eventScale[1]((e.clientY - top) / height)), + ]; + }; + + return ( + + {layers} + + ); +}; + +ResponsiveViewer.defaultProps = { + parentWidth: 400, + parentHeight: 300, + mouseMove: () => {}, + mouseDown: () => {}, + mouseUp: () => {}, + mouseLeave: () => {}, +}; + +export default withParentSize(ResponsiveViewer); diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx new file mode 100644 index 00000000000..b297cd564be --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -0,0 +1,220 @@ +import * as R from 'ramda'; +import {bisector} from 'd3-array'; +import {colorOrder} from '../../color'; +import {Channel, Epoch} from '../store/types'; +import {connect} from 'react-redux'; +import {MAX_RENDERED_EPOCHS, SIGNAL_SCALE, SIGNAL_UNIT} from '../../vector'; +import {useEffect} from 'react'; +import {RootState} from '../store'; + +type CursorContentProps = { + time: number, + channel: Channel, + contentIndex: number, + showMarker: boolean, +}; + +type CProps = { + cursor: number, + channels: Channel[], + epochs: Epoch[], + filteredEpochs: number[], + CursorContent: (_: CursorContentProps) => JSX.Element, + interval: [number, number], + showMarker: boolean +}; + +const SeriesCursor = ( + { + cursor, + channels, + epochs, + filteredEpochs, + CursorContent, + interval, + showMarker, + }: CProps +) => { + if (!cursor) return null; + + let reversedEpochs = [...filteredEpochs].reverse(); + useEffect(() => { + reversedEpochs = [...filteredEpochs].reverse(); + }, [filteredEpochs]); + + const left = Math.min(Math.max(100 * cursor, 0), 100) + '%'; + const time = interval[0] + cursor * (interval[1] - interval[0]); + + const Cursor = () => ( +
+ ); + + const ValueTags = () => ( +
+ {channels.map((channel, i) => ( +
+ +
+ ))} +
+ ); + + const TimeMarker = () => ( +
+ {Math.round(time)} s +
+ ); + + const EpochMarker = () => { + if (reversedEpochs.length > MAX_RENDERED_EPOCHS) return null; + + const index = reversedEpochs.find((index) => + epochs[index].onset < time + ); + + return index !== undefined ? ( +
+ {epochs[index].label} +
+ ) : null; + }; + + return ( +
+ + + + +
+ ); +}; + +const createIndices = R.memoizeWith( + R.identity, + (array) => array.map((_, i) => i) +); + +const indexToTime = (chunk) => (index) => + chunk.interval[0] + + (index / chunk.values.length) * (chunk.interval[1] - chunk.interval[0]); + +const CursorContent = ({time, channel, contentIndex, showMarker}) => { + const Marker = ({color}) => ( +
+ ); + + return ( +
+ {channel.traces.map((trace, i) => { + const chunk = trace.chunks.find( + (chunk) => chunk.interval[0] <= time && chunk.interval[1] >= time + ); + const computeValue = (chunk) => { + const indices = createIndices(chunk.values); + const bisectTime = bisector(indexToTime(chunk)).left; + const idx = bisectTime(indices, time); + const value = chunk.values[idx-1]; + + return value * SIGNAL_SCALE; + }; + + return ( +
+ {showMarker && ()} + {chunk && Math.round(computeValue(chunk))} {SIGNAL_UNIT} +
+ ); + })} +
+ ); +}; + +SeriesCursor.defaultProps = { + channels: [], + epochs: [], + filteredEpochs: [], + CursorContent, + showMarker: false, +}; + +export default connect( + (state: RootState)=> ({ + epochs: state.dataset.epochs, + filteredEpochs: state.dataset.filteredEpochs, + }) +)(SeriesCursor); diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx new file mode 100644 index 00000000000..8db31c3a183 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -0,0 +1,729 @@ +import React, {useCallback, useEffect, useState, FunctionComponent} from 'react'; +import * as R from 'ramda'; +import {vec2} from 'gl-matrix'; +import {Group} from '@visx/group'; +import {connect} from 'react-redux'; +import {scaleLinear, ScaleLinear} from 'd3-scale'; +import {MAX_RENDERED_EPOCHS, MAX_CHANNELS, SIGNAL_UNIT, Vector2} from '../../vector'; +import ResponsiveViewer from './ResponsiveViewer'; +import Axis from './Axis'; +import LineChunk from './LineChunk'; +import Epoch from './Epoch'; +import SeriesCursor from './SeriesCursor'; +import {setCursor} from '../store/state/cursor'; +import {setRightPanel} from '../store/state/rightPanel'; +import {setFilteredEpochs} from '../store/state/dataset'; +import {setOffsetIndex} from '../store/logic/pagination'; +import IntervalSelect from './IntervalSelect'; +import EventManager from './EventManager'; +import AnnotationForm from './AnnotationForm'; +import {RootState} from '../store'; + +import { + setAmplitudesScale, + resetAmplitudesScale, +} from '../store/logic/scaleAmplitudes'; +import { + LOW_PASS_FILTERS, + setLowPassFilter, + HIGH_PASS_FILTERS, + setHighPassFilter, +} from '../store/logic/highLowPass'; +import { + setViewerWidth, + setViewerHeight, +} from '../store/state/bounds'; +import { + continueDragSelection, + endDragSelection, + startDragSelection, +} from '../store/logic/timeSelection'; + +import { + ChannelMetadata, + Channel, + Epoch as EpochType, + RightPanel, +} from '../store/types'; + +type CProps = { + viewerWidth: number, + viewerHeight: number, + interval: [number, number], + amplitudeScale: number, + rightPanel: RightPanel, + cursor?: number, + timeSelection?: [number, number], + setCursor: (number) => void, + setRightPanel: (_: RightPanel) => void, + channels: Channel[], + channelMetadata: ChannelMetadata[], + hidden: number[], + epochs: EpochType[], + filteredEpochs: number[], + activeEpoch: number, + offsetIndex: number, + setOffsetIndex: (_: number) => void, + setAmplitudesScale: (_: number) => void, + resetAmplitudesScale: (_: void) => void, + setLowPassFilter: (_: string) => void, + setHighPassFilter: (_: string) => void, + setViewerWidth: (_: number) => void, + setViewerHeight: (_: number) => void, + setFilteredEpochs: (_: number[]) => void, + dragStart: (_: number) => void, + dragContinue: (_: number) => void, + dragEnd: (_: number) => void, + limit: number, +}; + +const SeriesRenderer: FunctionComponent = ({ + viewerHeight, + viewerWidth, + interval, + amplitudeScale, + cursor, + rightPanel, + timeSelection, + setCursor, + setRightPanel, + channels, + channelMetadata, + hidden, + epochs, + filteredEpochs, + activeEpoch, + offsetIndex, + setOffsetIndex, + setAmplitudesScale, + resetAmplitudesScale, + setLowPassFilter, + setHighPassFilter, + setViewerWidth, + setViewerHeight, + setFilteredEpochs, + dragStart, + dragContinue, + dragEnd, + limit, +}) => { + if (channels.length === 0) return null; + + useEffect(() => { + setViewerHeight(viewerHeight); + }, [viewerHeight]); + + useEffect(() => { + if (refNode) { + setBounds(refNode.getBoundingClientRect()); + } + }, [viewerWidth]); + + const [highPass, setHighPass] = useState('none'); + const [lowPass, setLowPass] = useState('none'); + const [refNode, setRefNode] = useState(null); + const [bounds, setBounds] = useState(null); + const getBounds = useCallback((domNode) => { + if (domNode) { + setRefNode(domNode); + } + }, []); + + const topLeft = vec2.fromValues( + -viewerWidth/2, + viewerHeight/2 + ); + + const bottomRight = vec2.fromValues( + viewerWidth/2, + -viewerHeight/2 + ); + + const diagonal = vec2.create(); + vec2.sub(diagonal, bottomRight, topLeft); + + const center = vec2.create(); + vec2.add(center, topLeft, bottomRight); + vec2.scale(center, center, 1 / 2); + + const scales: [ScaleLinear, ScaleLinear] = [ + scaleLinear() + .domain(interval) + .range([topLeft[0], bottomRight[0]]), + scaleLinear() + .domain([-viewerHeight/2, viewerHeight/2]) + .range([topLeft[1], bottomRight[1]]), + ]; + + const filteredChannels = channels.filter((_, i) => !hidden.includes(i)); + + const XAxisLayer = ({viewerWidth, viewerHeight, interval}) => { + return ( + <> + + + + + + + + ); + }; + + const EpochsLayer = () => { + const fEpochs = [...Array(epochs.length).keys()].filter((i) => + epochs[i].onset + epochs[i].duration > interval[0] + && epochs[i].onset < interval[1] + ); + + return ( + + {fEpochs.length < MAX_RENDERED_EPOCHS && + fEpochs.map((index) => { + return ( + + ); + }) + } + {timeSelection && + + } + {activeEpoch !== null && + + } + + ); + }; + + const ChannelAxesLayer = ({viewerWidth, viewerHeight}) => { + const axisHeight = viewerHeight / MAX_CHANNELS; + return ( + + + {filteredChannels.map((channel, i) => { + const seriesRange = channelMetadata[channel.index]?.seriesRange; + if (!seriesRange) return null; + return ( + ''} + orientation='right' + hideLine={true} + /> + ); + })} + + ); + }; + + const ChannelsLayer = ({viewerWidth}) => { + useEffect(() => { + setViewerWidth(viewerWidth); + }, [viewerWidth]); + + return ( + <> + + + + + {filteredChannels.map((channel, i) => { + if (!channelMetadata[channel.index]) { + return null; + } + const subTopLeft = vec2.create(); + vec2.add( + subTopLeft, + topLeft, + vec2.fromValues(0, (i * diagonal[1]) / MAX_CHANNELS) + ); + + const subBottomRight = vec2.create(); + vec2.add( + subBottomRight, + topLeft, + vec2.fromValues( + diagonal[0], + ((i + 1) * diagonal[1]) / MAX_CHANNELS + ) + ); + + const subDiagonal = vec2.create(); + vec2.sub(subDiagonal, subBottomRight, subTopLeft); + + const axisEnd = vec2.create(); + vec2.add(axisEnd, subTopLeft, vec2.fromValues(0.1, subDiagonal[1])); + + const seriesRange = channelMetadata[channel.index].seriesRange; + const scales: [ScaleLinear, ScaleLinear] = [ + scaleLinear() + .domain(interval) + .range([subTopLeft[0], subBottomRight[0]]), + scaleLinear() + .domain(seriesRange) + .range([subTopLeft[1], subBottomRight[1]]), + ]; + + return ( + channel.traces.map((trace, j) => ( + trace.chunks.map((chunk, k) => ( + + )) + )) + ); + })} + + ); + }; + + const hardLimit = Math.min(offsetIndex + limit - 1, channelMetadata.length); + + const onMouseMove = (v : MouseEvent) => { + if (bounds === null || bounds === undefined) return; + const x = Math.min(1, Math.max(0, (v.pageX - bounds.left)/bounds.width)); + return (dragContinue)(x); + }; + + const onMouseUp = (v : MouseEvent) => { + if (bounds === null || bounds === undefined) return; + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + const x = Math.min(100, Math.max(0, (v.pageX - bounds.left)/bounds.width)); + return (dragEnd)(x); + }; + + return ( + <> + {channels.length > 0 ? ( +
+
+ +
+
+
+
+
+ setAmplitudesScale(1.1)} + value='-' + /> + resetAmplitudesScale()} + value='Reset Amplitude' + /> + setAmplitudesScale(0.9)} + value='+' + /> +
+
+ +
    + {Object.keys(HIGH_PASS_FILTERS).map((key) => +
  • { + setHighPassFilter(key); + setHighPass(key); + }} + >{HIGH_PASS_FILTERS[key].label}
  • + )} +
+
+ +
+ +
    + {Object.keys(LOW_PASS_FILTERS).map((key) => +
  • { + setLowPassFilter(key); + setLowPass(key); + }} + >{LOW_PASS_FILTERS[key].label}
  • + )} +
+
+
+ +
+ + Showing channels{' '} + { + let value = parseInt(e.target.value); + !isNaN(value) && setOffsetIndex(value); + }} + /> + {' '} + to {hardLimit} of {channelMetadata.length} + +
+ setOffsetIndex(offsetIndex - limit)} + value='<<' + /> + setOffsetIndex(offsetIndex - 1)} + value='<' + /> + setOffsetIndex(offsetIndex + 1)} + value='>' + /> + setOffsetIndex(offsetIndex + limit)} + value='>>' + /> +
+
+
+
+
+
+
+ {filteredChannels.map((channel) => ( +
+ {channelMetadata[channel.index] && + channelMetadata[channel.index].name} +
+ ))} +
+
setCursor(null)} + > +
+
+ ({SIGNAL_UNIT}) +
+
+ Time (s) +
+ +
+ { + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + R.compose(dragStart, R.nth(0))(v); + }} + > + + + + + +
+
+
+
+
+
+ {epochs.length > 0 && + + } + +
+ {[...Array(epochs.length).keys()].filter((i) => + epochs[i].onset + epochs[i].duration > interval[0] + && epochs[i].onset < interval[1] + ).length >= MAX_RENDERED_EPOCHS && +
+ Too many events to display for the timeline range. +
+ } +
+
+
+
+ {rightPanel && +
+ {rightPanel === 'annotationForm' && } + {rightPanel === 'epochList' && } +
+ } +
+ ) : ( +
+

Loading...

+
+ )} + + ); +}; + +SeriesRenderer.defaultProps = { + interval: [0.25, 0.75], + amplitudeScale: 1, + viewerHeight: 400, + channels: [], + epochs: [], + hidden: [], + channelMetadata: [], + offsetIndex: 1, + limit: MAX_CHANNELS, +}; + +export default connect( + (state: RootState)=> ({ + viewerWidth: state.bounds.viewerWidth, + viewerHeight: state.bounds.viewerHeight, + interval: state.bounds.interval, + amplitudeScale: state.bounds.amplitudeScale, + cursor: state.cursor, + rightPanel: state.rightPanel, + timeSelection: state.timeSelection, + channels: state.dataset.channels, + epochs: state.dataset.epochs, + filteredEpochs: state.dataset.filteredEpochs, + activeEpoch: state.dataset.activeEpoch, + hidden: state.montage.hidden, + channelMetadata: state.dataset.channelMetadata, + offsetIndex: state.dataset.offsetIndex, + }), + (dispatch: (_: any) => void) => ({ + setOffsetIndex: R.compose( + dispatch, + setOffsetIndex + ), + setCursor: R.compose( + dispatch, + setCursor + ), + setRightPanel: R.compose( + dispatch, + setRightPanel + ), + setAmplitudesScale: R.compose( + dispatch, + setAmplitudesScale + ), + resetAmplitudesScale: R.compose( + dispatch, + resetAmplitudesScale + ), + setLowPassFilter: R.compose( + dispatch, + setLowPassFilter + ), + setHighPassFilter: R.compose( + dispatch, + setHighPassFilter + ), + setViewerWidth: R.compose( + dispatch, + setViewerWidth + ), + setViewerHeight: R.compose( + dispatch, + setViewerHeight + ), + setFilteredEpochs: R.compose( + dispatch, + setFilteredEpochs + ), + dragStart: R.compose( + dispatch, + startDragSelection + ), + dragContinue: R.compose( + dispatch, + continueDragSelection + ), + dragEnd: R.compose( + dispatch, + endDragSelection + ), + }) +)(SeriesRenderer); diff --git a/jsx/react-series-data-viewer/src/series/components/components.tsx b/jsx/react-series-data-viewer/src/series/components/components.tsx new file mode 100644 index 00000000000..ac2158ecf7f --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/components.tsx @@ -0,0 +1,79 @@ +import * as React from 'react'; +import { + SliderItem, + GetHandleProps, +} from 'react-compound-slider'; + +// ******************************************************* +// HANDLE COMPONENT +// ******************************************************* +interface IHandleProps { + domain: number[]; + handle: SliderItem; + getHandleProps: GetHandleProps; +} + +export const Handle: React.SFC = ({ + domain: [min, max], + handle: {id, value, percent}, + getHandleProps, +}) => ( +
+); + +// ******************************************************* +// TICK COMPONENT +// ******************************************************* +interface ITickProps { + key: string; + tick: SliderItem; + count: number; +} + +export const Tick: React.FC = ({tick, count}) => ( +
+
+
+ {tick.value} +
+
+); diff --git a/jsx/react-series-data-viewer/src/series/store/index.tsx b/jsx/react-series-data-viewer/src/series/store/index.tsx new file mode 100644 index 00000000000..3e5a761865d --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/index.tsx @@ -0,0 +1,75 @@ +import * as R from 'ramda'; +import {combineReducers} from 'redux'; +import {combineEpics} from 'redux-observable'; +import {boundsReducer} from './state/bounds'; +import {filtersReducer} from './state/filters'; +import {datasetReducer} from './state/dataset'; +import {cursorReducer} from './state/cursor'; +import {panelReducer} from './state/rightPanel'; +import {timeSelectionReducer} from './state/timeSelection'; +import {montageReducer} from './state/montage'; +import {createDragBoundsEpic} from './logic/dragBounds'; +import {createTimeSelectionEpic} from './logic/timeSelection'; +import {createFetchChunksEpic} from './logic/fetchChunks'; +import {createPaginationEpic} from './logic/pagination'; +import { + createActiveEpochEpic, + createFilterEpochsEpic, + createToggleEpochEpic, +} from './logic/filterEpochs'; +import { + createScaleAmplitudesEpic, + createResetAmplitudesEpic, +} from './logic/scaleAmplitudes'; +import { + createLowPassFilterEpic, + createHighPassFilterEpic, +} from './logic/highLowPass'; + +export const rootReducer = combineReducers({ + bounds: boundsReducer, + filters: filtersReducer, + dataset: datasetReducer, + cursor: cursorReducer, + rightPanel: panelReducer, + timeSelection: timeSelectionReducer, + montage: montageReducer, +}); + +export const rootEpic = combineEpics( + createDragBoundsEpic(R.prop('bounds')), + createTimeSelectionEpic(({bounds, timeSelection}) => { + const {interval} = bounds; + return {interval, timeSelection}; + }), + createFetchChunksEpic(({bounds, dataset}) => ({ + bounds, + dataset, + })), + createPaginationEpic(({dataset}) => { + const {limit, channelMetadata, channels} = dataset; + return {limit, channelMetadata, channels}; + }), + createScaleAmplitudesEpic(({bounds}) => { + const {amplitudeScale} = bounds; + return amplitudeScale; + }), + createResetAmplitudesEpic(), + createLowPassFilterEpic(), + createHighPassFilterEpic(), + createFilterEpochsEpic(({bounds, dataset}) => { + const {interval} = bounds; + const {epochs} = dataset; + return {interval, epochs}; + }), + createToggleEpochEpic(({dataset}) => { + const {epochs, filteredEpochs} = dataset; + return {filteredEpochs, epochs}; + }), + createActiveEpochEpic(({dataset}) => { + const {epochs} = dataset; + return {epochs}; + }), +); + +export type RootState = ReturnType; \ No newline at end of file diff --git a/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx b/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx new file mode 100644 index 00000000000..ac596cbbfd0 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx @@ -0,0 +1,64 @@ +import * as R from 'ramda'; +import {Observable, merge} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {SET_INTERVAL, setInterval} from '../state/bounds'; +import {updateViewedChunks} from './fetchChunks'; + +import { + State as BoundsState, + Action as BoundsAction, +} from '../state/bounds'; + +export const START_DRAG_INTERVAL = 'START_DRAG_INTERVAL'; +export const startDragInterval = createAction(START_DRAG_INTERVAL); + +export const CONTINUE_DRAG_INTERVAL = 'CONTINUE_DRAG_INTERVAL'; +export const continueDragInterval = createAction(CONTINUE_DRAG_INTERVAL); + +export const END_DRAG_INTERVAL = 'END_DRAG_INTERVAL'; +export const endDragInterval = createAction(END_DRAG_INTERVAL); + +export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; + +export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( + action$: Observable, + state$: Observable +): Observable => { + const startDrag$ = action$.pipe( + ofType(START_DRAG_INTERVAL), + Rx.map(R.prop('payload')) + ); + + const continueDrag$ = action$.pipe( + ofType(CONTINUE_DRAG_INTERVAL), + Rx.map(R.prop('payload')) + ); + + const endDrag$ = action$.pipe(ofType(END_DRAG_INTERVAL)); + + const computeNewInterval = ([selection, _]) => setInterval(selection); + + const startUpdates$ = startDrag$.pipe( + Rx.withLatestFrom(state$), + Rx.map(computeNewInterval) + ); + + const dragUpdates$ = startDrag$.pipe( + Rx.switchMap(() => + continueDrag$.pipe( + Rx.withLatestFrom(state$), + Rx.map(computeNewInterval), + Rx.takeUntil(endDrag$) + ) + ) + ); + + const updateViewedChunks$ = action$.pipe( + ofType(SET_INTERVAL), + Rx.mapTo(updateViewedChunks()) + ); + + return merge(startUpdates$, dragUpdates$, updateViewedChunks$); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx new file mode 100644 index 00000000000..c964e1ea1f6 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx @@ -0,0 +1,157 @@ +import * as R from 'ramda'; +import {ofType} from 'redux-observable'; +import {Observable, from, of} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {createAction} from 'redux-actions'; +import {State as DatasetState} from '../state/dataset'; +import {Filter} from '../state/filters' +import {Chunk} from '../types'; +import {State as BoundsState} from '../state/bounds'; +import {fetchChunk} from '../../../chunks'; +import {MAX_VIEWED_CHUNKS} from '../../../vector'; +import {setActiveChannel} from '../state/dataset'; +import {setChunks} from '../state/channel'; + +export const UPDATE_VIEWED_CHUNKS = 'UPDATE_VIEWED_CHUNKS'; +export const updateViewedChunks = createAction(UPDATE_VIEWED_CHUNKS); + +type FetchedChunks = { + channelIndex: number, + chunks: Chunk[] +}; + + +export const loadChunks = ({channelIndex, ...rest}: FetchedChunks) => { + return (dispatch: (_: any) => void) => { + let filters: Filter[] = window.EEGLabSeriesProviderStore.getState().filters; + rest.chunks.forEach((chunk, index, chunks) => { + chunk.filters = []; + chunks[index].values = Object.values(filters).reduce( + (signal: number[], filter: Filter) => { + chunks[index].filters.push(filter.name); + return filter.fn(signal); + }, + chunk.originalValues + ); + }); + + dispatch(setActiveChannel(channelIndex)); + dispatch(setChunks({...rest, channelIndex})); + dispatch(setActiveChannel(null)); + }; +}; + +export const fetchChunkAt = R.memoizeWith( + (baseURL, downsampling, channelIndex, traceIndex, chunkIndex) => + `${baseURL}-${channelIndex}-${traceIndex}-${chunkIndex}-${downsampling}`, + ( + baseURL: string, + downsampling: number, + channelIndex: number, + traceIndex: number, + chunkIndex: number + ) => fetchChunk( + `${baseURL}/raw/${downsampling}/${channelIndex}/` + + `${traceIndex}/${chunkIndex}.buf` + ) +); + +type State = {bounds: BoundsState, dataset: DatasetState}; + +const UPDATE_DEBOUNCE_TIME = 100; + +export const createFetchChunksEpic = (fromState: (any) => State) => ( + action$: Observable, + state$: Observable +) => { + return action$.pipe( + ofType(UPDATE_VIEWED_CHUNKS), + Rx.withLatestFrom(state$), + Rx.map(([_, state]) => fromState(state)), + Rx.debounceTime(UPDATE_DEBOUNCE_TIME), + Rx.concatMap(({bounds, dataset}) => { + const {chunksURL, shapes, timeInterval, channels} = dataset; + if (!chunksURL) { + return of(); + } + + const fetches = R.flatten( + channels.map((channel, i) => { + return ( + channel && + channel.traces.map((trace, j) => { + const ncs = shapes.map((shape) => shape[shape.length - 2]); + + const citvs = ncs + .map((nc, downsampling) => { + const timeLength = Math.abs( + timeInterval[1] - timeInterval[0] + ); + const i0 = + (nc * Math.ceil(bounds.interval[0] - bounds.domain[0])) / + timeLength; + const i1 = + (nc * Math.ceil(bounds.interval[1] - bounds.domain[0])) / + timeLength; + return { + interval: [Math.floor(i0), Math.min(Math.ceil(i1), nc)], + numChunks: nc, + downsampling, + }; + }) + .filter( + ({interval, downsampling}) => + // TODO: check this condition... + // Why interval[1] - interval[0] < MAX_VIEWED_CHUNKS ? + // downsampling === 0 prevents a change of downsampling + // otherwise the interval becomes wrong + interval[1] - interval[0] < MAX_VIEWED_CHUNKS + && downsampling === 0 + ); + + const max = R.reduce( + R.maxBy(({interval}) => interval[1] - interval[0]), + {interval: [0, 0]}, + citvs + ); + + const chunkPromises = R.range(...max.interval).map( + (chunkIndex) => { + const numChunks = max.numChunks; + return fetchChunkAt( + chunksURL, + max.downsampling, + channel.index, + j, + chunkIndex + ).then((chunk) => ({ + interval: [ + timeInterval[0] + + (chunkIndex / numChunks) * + (timeInterval[1] - timeInterval[0]), + timeInterval[0] + + ((chunkIndex + 1) / numChunks) * + (timeInterval[1] - timeInterval[0]), + ], + ...chunk, + })); + } + ); + + return from( + Promise.all(chunkPromises).then((chunks) => ({ + channelIndex: channel.index, + traceIndex: j, + chunks, + })) + ); + }) + ); + }) + ); + + return from(fetches).pipe(Rx.mergeMap(R.identity)); + }), + Rx.map((payload) => loadChunks(payload)) + ); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx new file mode 100644 index 00000000000..137211163dc --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -0,0 +1,98 @@ +import * as R from 'ramda'; +import {Observable} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {setFilteredEpochs, setActiveEpoch} from '../state/dataset'; +import {MAX_RENDERED_EPOCHS} from '../../../vector'; + +export const UPDATE_FILTERED_EPOCHS = 'UPDATE_FILTERED_EPOCHS'; +export const updateFilteredEpochs = createAction(UPDATE_FILTERED_EPOCHS); + +export const TOGGLE_EPOCH = 'TOGGLE_EPOCH'; +export const toggleEpoch = createAction(TOGGLE_EPOCH); + +export const UPDATE_ACTIVE_EPOCH = 'UPDATE_ACTIVE_EPOCH'; +export const updateActiveEpoch = createAction(UPDATE_ACTIVE_EPOCH); + +export type Action = (_: (_: any) => void) => void; + +export const createFilterEpochsEpic = (fromState: (_: any) => any) => ( + action$: Observable, + state$: Observable +): Observable => { + return action$.pipe( + ofType(UPDATE_FILTERED_EPOCHS), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map(([payload, state]) => { + const {interval, epochs} = fromState(state); + let newFilteredEpochs = [...Array(epochs.length).keys()] + .filter((index) => + epochs[index].onset + epochs[index].duration > interval[0] + && epochs[index].onset < interval[1] + ); + + if (newFilteredEpochs.length >= MAX_RENDERED_EPOCHS) { + newFilteredEpochs = []; + } + + return (dispatch) => { + dispatch(setFilteredEpochs(newFilteredEpochs)); + }; + }) + ); +}; + +export const createToggleEpochEpic = (fromState: (_: any) => any) => ( + action$: Observable, + state$: Observable +): Observable => { + return action$.pipe( + ofType(TOGGLE_EPOCH), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map(([payload, state]) => { + const {filteredEpochs, epochs} = fromState(state); + const index = payload; + let newFilteredEpochs; + + if (filteredEpochs.includes(index)) { + newFilteredEpochs = filteredEpochs.filter((i) => i !== index); + } else if (index >= 0 && index < epochs.length) { + newFilteredEpochs = filteredEpochs.slice(); + newFilteredEpochs.push(index); + newFilteredEpochs.sort(); + } else { + return; + } + + return (dispatch) => { + dispatch(setFilteredEpochs(newFilteredEpochs)); + }; + }) + ); +}; + +export const createActiveEpochEpic = (fromState: (_: any) => any) => ( + action$: Observable, + state$: Observable +): Observable => { + return action$.pipe( + ofType(UPDATE_ACTIVE_EPOCH), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map(([payload, state]) => { + const {epochs} = fromState(state); + const index = payload; + + if (index < 0 || index >= epochs.length) { + return; + } + + return (dispatch) => { + dispatch(setActiveEpoch(index)); + }; + }) + ); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx b/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx new file mode 100644 index 00000000000..5a391d7f427 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx @@ -0,0 +1,134 @@ +import * as R from 'ramda'; +import {Observable} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {updateViewedChunks} from './fetchChunks'; +import {setFilter} from '../state/filters'; +import {DifferenceEquationSignal1D} from 'differenceequationsignal1d'; + +export const SET_LOW_PASS_FILTER = 'SET_LOW_PASS_FILTER'; +export const setLowPassFilter = createAction(SET_LOW_PASS_FILTER); + +export const SET_HIGH_PASS_FILTER = 'SET_HIGH_PASS_FILTER'; +export const setHighPassFilter = createAction(SET_HIGH_PASS_FILTER); + +export type Action = (_: (_: any) => void) => void; + +const applyFilter = (coefficients, input) => { + const diffFilter = new DifferenceEquationSignal1D(); + diffFilter.enableBackwardSecondPass(); + + if (coefficients) { + diffFilter.setInput(input); + diffFilter.setACoefficients(coefficients.a); + diffFilter.setBCoefficients(coefficients.b); + diffFilter.run(); // eventually should be pixpipe's update() + return Array.from(diffFilter.getOutput()); + } + return input; +}; + +export const LOW_PASS_FILTERS = { + 'none': { + label: 'No Low Pass Filter', + coefficients: null, + }, + 'lopass15': { + label: 'Low Pass 15Hz', + coefficients: { + b: [0.080716994603448, 0.072647596309189, 0.080716994603448], + a: [1.000000000000000, -1.279860238209870, 0.527812029663189], + }, + }, + 'lopass20': { + label: 'Low Pass 20Hz', + coefficients: { + b: [0.113997925584386, 0.149768961515167, 0.113997925584386], + a: [1.000000000000000, -1.036801335341888, 0.436950120418250], + }, + }, + 'lopass30': { + label: 'Low Pass 30Hz', + coefficients: { + b: [0.192813914343002, 0.325725940431161, 0.192813914343002], + a: [1.000000000000000, -0.570379950222695, 0.323884080078956], + }, + }, + 'lopass40': { + label: 'Low Pass 40Hz', + coefficients: { + b: [0.281307434361307, 0.517866041871659, 0.281307434361307], + a: [1.000000000000000, -0.135289362582513, 0.279792792112445], + }, + }, +}; + +export const createLowPassFilterEpic = () => ( + action$: Observable, + state$: Observable, +): Observable => action$.pipe( + ofType(SET_LOW_PASS_FILTER), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map<[string, any], any>(([payload]) => (dispatch) => { + dispatch(setFilter({ + key: 'lowPass', + name: payload, + fn: R.curry(applyFilter)(LOW_PASS_FILTERS[payload].coefficients), + })); + dispatch(updateViewedChunks()); + }) +); + +export const HIGH_PASS_FILTERS = { + 'none': { + label: 'No High Pass Filter', + coefficients: null, + }, + 'hipass0_5': { + label: 'High Pass 0.5Hz', + coefficients: { + b: [0.937293010134975, -1.874580964130496, 0.937293010134975], + a: [1.000000000000000, -1.985579602684723, 0.985739491853153], + }, + }, + 'hipass1': { + label: 'High Pass 1Hz', + coefficients: { + b: [0.930549324176904, -1.861078566912498, 0.930549324176904], + a: [1.000000000000000, -1.971047525054235, 0.971682555986628], + }, + }, + 'hipass5': { + label: 'High Pass 5Hz', + coefficients: { + b: [0.877493430773021, -1.754511635757187, 0.877493430773021], + a: [1.000000000000000, -1.851210698908115, 0.866238657864428], + }, + }, + 'hipass10': { + label: 'High Pass 10Hz', + coefficients: { + b: [0.813452161011750, -1.625120853023986, 0.813452161011750], + a: [1.000000000000000, -1.694160769645868, 0.750559011393507], + }, + }, +}; + +export const createHighPassFilterEpic = () => ( + action$: Observable, + state$: Observable +): Observable => action$.pipe( + ofType(SET_HIGH_PASS_FILTER), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map<[string, any], any>(([payload]) => (dispatch) => { + dispatch(setFilter({ + key: 'highPass', + name: payload, + fn: R.curry(applyFilter)(HIGH_PASS_FILTERS[payload].coefficients), + })); + dispatch(updateViewedChunks()); + }) +); diff --git a/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx b/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx new file mode 100644 index 00000000000..aa19a21a8cd --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx @@ -0,0 +1,69 @@ +import * as R from 'ramda'; +import {Observable} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {Channel, ChannelMetadata} from '../types'; +import { + emptyChannels, + setDatasetMetadata, + setChannels, +} from '../state/dataset'; +import {updateViewedChunks} from './fetchChunks'; + +export const SET_OFFSET_INDEX = 'SET_OFFSET_INDEX'; +export const setOffsetIndex = createAction(SET_OFFSET_INDEX); + +export type Action = (_: (_: any) => void) => void; + +export type State = { + limit: number, + channelMetadata: ChannelMetadata[], + channels: Channel[] +}; + +export const createPaginationEpic = (fromState: (_: any) => State) => ( + action$: Observable, + state$: Observable +): Observable => { + return action$.pipe( + ofType(SET_OFFSET_INDEX), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map<[number, State], any>(([payload, state]) => { + const {limit, channelMetadata, channels} = fromState(state); + + const offsetIndex = Math.min( + Math.max(payload, 1), + channelMetadata.length + ); + + let channelIndex = offsetIndex - 1; + + const newChannels = []; + const hardLimit = Math.min( + offsetIndex + limit - 1, + channelMetadata.length + ); + while (channelIndex < hardLimit) { + // TODO: need to handle multiple traces using shapes + const channel = + channels.find( + R.pipe( + R.prop('index'), + R.equals(channelIndex) + ) + ) || emptyChannels(1, 1)[0]; + channel.index = channelIndex; + newChannels.push(channel); + channelIndex++; + } + + return (dispatch) => { + dispatch(setDatasetMetadata({offsetIndex})); + dispatch(setChannels(newChannels)); + dispatch(updateViewedChunks()); + }; + }) + ); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx b/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx new file mode 100644 index 00000000000..a597ca9aab2 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx @@ -0,0 +1,48 @@ +import * as R from 'ramda'; +import {Observable} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {setAmplitudeScale} from '../state/bounds'; +import {updateViewedChunks} from './fetchChunks'; +import {State} from '../state/dataset'; + +export const SET_AMPLITUDES_SCALE = 'SET_AMPLITUDES_SCALE'; +export const setAmplitudesScale = createAction(SET_AMPLITUDES_SCALE); +export const RESET_AMPLITUDES_SCALE = 'RESET_AMPLITUDES_SCALE'; +export const resetAmplitudesScale = createAction(RESET_AMPLITUDES_SCALE); +export type Action = (_: (_: any) => void) => void; + +export const createScaleAmplitudesEpic = (fromState: (_: any) => number) => ( + action$: Observable, + state$: Observable +): Observable => { + return action$.pipe( + ofType(SET_AMPLITUDES_SCALE), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map<[number, State], any>(([payload, state]) => { + const scale = payload; + const amplitudeScale = fromState(state); + + return (dispatch) => { + dispatch(setAmplitudeScale(scale * amplitudeScale)); + dispatch(updateViewedChunks()); + }; + }) + ); +}; + +export const createResetAmplitudesEpic = () => ( + action$: Observable, +): Observable => { + return action$.pipe( + ofType(RESET_AMPLITUDES_SCALE), + Rx.map(() => { + return (dispatch) => { + dispatch(setAmplitudeScale()); + dispatch(updateViewedChunks()); + }; + }) + ); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx new file mode 100644 index 00000000000..3f169f97cc3 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx @@ -0,0 +1,83 @@ +import * as R from 'ramda'; +import {Observable, merge} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {setTimeSelection} from '../state/timeSelection'; +import {Action as BoundsAction} from '../state/bounds'; +import {MIN_INTERVAL_FACTOR} from '../../../vector'; + +export const START_DRAG_SELECTION = 'START_DRAG_SELECTION'; +export const startDragSelection = createAction(START_DRAG_SELECTION); + +export const CONTINUE_DRAG_SELECTION = 'CONTINUE_DRAG_SELECTION'; +export const continueDragSelection = createAction(CONTINUE_DRAG_SELECTION); + +export const END_DRAG_SELECTION = 'END_DRAG_SELECTION'; +export const endDragSelection = createAction(END_DRAG_SELECTION); + +export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; + +export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( + action$: Observable, + state$: Observable +): Observable => { + const startDrag$ = action$.pipe( + ofType(START_DRAG_SELECTION), + Rx.map(R.prop('payload')), + ); + + const continueDrag$ = action$.pipe( + ofType(CONTINUE_DRAG_SELECTION), + Rx.map(R.prop('payload')) + ); + + const initInterval = ([position, state]) => { + const {interval} = R.clone(fromState(state)); + const x = Math.round(interval[0] + position * (interval[1] - interval[0])); + return setTimeSelection([x, x]); + }; + + const updateInterval = ([position, state]) => { + const {interval, timeSelection} = R.clone(fromState(state)); + const x = interval[0] + position * (interval[1] - interval[0]); + const minSize = Math.abs(interval[1] - interval[0]) * MIN_INTERVAL_FACTOR; + timeSelection[1] = Math.round( + x + Math.max(timeSelection[0] + minSize - timeSelection[1], 0) + ); + + return setTimeSelection(timeSelection); + }; + + const endDrag$ = action$.pipe( + ofType(END_DRAG_SELECTION), + Rx.withLatestFrom(state$), + Rx.map(([payload, state]) => { + if ( + state.timeSelection + && (state.timeSelection[1] - state.timeSelection[0] < 2) + ) { + return setTimeSelection(null); + } else { + return setTimeSelection(state.timeSelection); + } + }) + ); + + const startUpdates$ = startDrag$.pipe( + Rx.withLatestFrom(state$), + Rx.map(initInterval) + ); + + const dragUpdates$ = startDrag$.pipe( + Rx.switchMap(() => + continueDrag$.pipe( + Rx.withLatestFrom(state$), + Rx.map(updateInterval), + Rx.takeUntil(endDrag$) + ) + ) + ); + + return merge(startUpdates$, dragUpdates$, endDrag$); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx new file mode 100644 index 00000000000..e71100a14ad --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx @@ -0,0 +1,83 @@ +import {createAction} from 'redux-actions'; + +export const SET_INTERVAL = 'SET_INTERVAL'; +export const setInterval = createAction(SET_INTERVAL); + +export const SET_DOMAIN = 'SET_DOMAIN'; +export const setDomain = createAction(SET_DOMAIN); + +export const SET_AMPLITUDE_SCALE = 'SET_AMPLITUDE_SCALE'; +export const setAmplitudeScale = createAction(SET_AMPLITUDE_SCALE); + +export const SET_VIEWER_WIDTH = 'SET_VIEWER_WIDTH'; +export const setViewerWidth = createAction(SET_VIEWER_WIDTH); + +export const SET_VIEWER_HEIGHT = 'SET_VIEWER_HEIGHT'; +export const setViewerHeight = createAction(SET_VIEWER_HEIGHT); + +export type Action = + | {type: 'SET_INTERVAL', payload: [number, number]} + | {type: 'SET_DOMAIN', payload: [number, number]} + | {type: 'SET_AMPLITUDE_SCALE', payload: number} + | {type: 'SET_VIEWER_WIDTH', payload: number} + | {type: 'SET_VIEWER_HEIGHT', payload: number} + +export type State = { + interval: [number, number], + domain: [number, number], + amplitudeScale: number, + viewerWidth: number, + viewerHeight: number, +}; + +const interval = (state: [number, number] = [0.25, 0.75], action?: Action): [number, number] => { + if (action && action.type === 'SET_INTERVAL') { + return action.payload; + } + return state; +}; + +const domain = (state: [number, number] = [0, 1], action?: Action): [number, number] => { + if (action && action.type === 'SET_DOMAIN') { + return action.payload; + } + return state; +}; + +const amplitudeScale = (state = 1, action?: Action): number => { + if (action && action.type === 'SET_AMPLITUDE_SCALE') { + return action.payload; + } + return state; +}; + +const viewerWidth = (state = 400, action?: Action): number => { + if (action && action.type === 'SET_VIEWER_WIDTH') { + return action.payload; + } + return state; +}; + +const viewerHeight = (state = 400, action?: Action): number => { + if (action && action.type === 'SET_VIEWER_HEIGHT') { + return action.payload; + } + return state; +}; + +export const boundsReducer: (State, Action) => State = ( + state = { + interval: interval(), + domain: domain(), + amplitudeScale: amplitudeScale(), + viewerWidth: viewerWidth(), + viewerHeight: viewerHeight(), + }, + action +) => ({ + interval: interval(state.interval, action), + domain: domain(state.domain, action), + amplitudeScale: amplitudeScale(state.amplitudeScale, action), + viewerWidth: viewerWidth(state.viewerWidth, action), + viewerHeight: viewerHeight(state.viewerHeight, action), +}); diff --git a/jsx/react-series-data-viewer/src/series/store/state/channel.tsx b/jsx/react-series-data-viewer/src/series/store/state/channel.tsx new file mode 100644 index 00000000000..bc2c06eb132 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/channel.tsx @@ -0,0 +1,34 @@ +import * as R from 'ramda'; +import {createAction} from 'redux-actions'; +import {Channel, Chunk} from '../types'; + +export const SET_CHUNKS = 'SET_CHUNKS'; +export const setChunks = createAction(SET_CHUNKS); + +export type Action = { + type: 'SET_CHUNKS', + payload: {traceIndex: number, chunks: Chunk[]} +}; + +export type State = Channel; + +export const channelReducer = ( + state: Channel = {index: 0, traces: []}, + action?: Action +): State => { + if (!action) { + return state; + } + switch (action.type) { + case SET_CHUNKS: { + return R.assocPath( + ['traces', action.payload.traceIndex, 'chunks'], + action.payload.chunks, + state + ); + } + default: { + return state; + } + } +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx b/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx new file mode 100644 index 00000000000..2d406b793ee --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx @@ -0,0 +1,27 @@ +import {createAction} from 'redux-actions'; + +export const SET_CURSOR = 'SET_CURSOR'; +export const setCursor = createAction(SET_CURSOR); + +export type Action = { + type: "SET_CURSOR", + payload?: number +}; + +export type State = number; + +export type Reducer = (state?: number, action?: Action) => State; + +export const cursorReducer: Reducer = (state = null, action) => { + if (!action) { + return state; + } + switch (action.type) { + case SET_CURSOR: { + return action.payload; + } + default: { + return state; + } + } +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx b/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx new file mode 100644 index 00000000000..1a362fbc440 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx @@ -0,0 +1,123 @@ +import * as R from 'ramda'; +import {createAction} from 'redux-actions'; +import {Channel, ChannelMetadata, Epoch} from '../types'; +import {Action as ChannelAction} from './channel'; +import {channelReducer} from './channel'; +import {MAX_CHANNELS} from '../../../vector'; + +export const SET_CHANNELS = 'SET_CHANNELS'; +export const setChannels = createAction(SET_CHANNELS); + +export const SET_ACTIVE_CHANNEL = 'SET_ACTIVE_CHANNEL'; +export const setActiveChannel = createAction(SET_ACTIVE_CHANNEL); + +export const SET_EPOCHS = 'SET_EPOCHS'; +export const setEpochs = createAction(SET_EPOCHS); + +export const SET_FILTERED_EPOCHS = 'SET_FILTERED_EPOCHS'; +export const setFilteredEpochs = createAction(SET_FILTERED_EPOCHS); + +export const SET_ACTIVE_EPOCH = 'SET_ACTIVE_EPOCH'; +export const setActiveEpoch = createAction(SET_ACTIVE_EPOCH); + +export const SET_DATASET_METADATA = 'SET_DATASET_METADATA'; +export const setDatasetMetadata = createAction(SET_DATASET_METADATA); + +export type Action = + | {type: 'SET_CHANNELS', payload: Channel[]} + | {type: 'SET_ACTIVE_CHANNEL', payload: number} + | {type: 'SET_EPOCHS', payload: Epoch[]} + | {type: 'SET_FILTERED_EPOCHS', payload: number[]} + | {type: 'SET_ACTIVE_EPOCH', payload: number} + | { + type: 'SET_DATASET_METADATA', + payload: { + chunksURL: string, + channelNames: string[], + shapes: number[][], + timeInterval: [number, number], + seriesRange: [number, number], + limit: number + } + } + | ChannelAction; + +export type State = { + chunksURL: string, + channelMetadata: ChannelMetadata[], + channels: Channel[], + activeChannel: number | null, + offsetIndex: number, + limit: number, + epochs: Epoch[], + filteredEpochs: number[], + activeEpoch: number | null, + shapes: number[][], + timeInterval: [number, number], + seriesRange: [number, number], +}; + +export const datasetReducer = ( + state: State = { + chunksURL: '', + channelMetadata: [], + channels: [], + activeChannel: null, + epochs: [], + filteredEpochs: [], + activeEpoch: null, + offsetIndex: 1, + limit: MAX_CHANNELS, + shapes: [], + timeInterval: [0, 1], + seriesRange: [-1, 2], + }, + action?: Action +): State => { + if (!action) { + return state; + } + switch (action.type) { + case SET_CHANNELS: { + return R.assoc('channels', action.payload, state); + } + case SET_ACTIVE_CHANNEL: { + return R.assoc('activeChannel', action.payload, state); + } + case SET_EPOCHS: { + return R.assoc('epochs', action.payload, state); + } + case SET_FILTERED_EPOCHS: { + return R.assoc('filteredEpochs', action.payload, state); + } + case SET_ACTIVE_EPOCH: { + return R.assoc('activeEpoch', action.payload, state); + } + case SET_DATASET_METADATA: { + return R.merge(state, action.payload); + } + default: { + const activeIndex = state.channels.findIndex( + (c) => c.index === state.activeChannel + ); + if (activeIndex < 0) { + return state; + } + return R.assocPath( + ['channels', activeIndex], + channelReducer(state.channels[activeIndex], action), + state + ); + } + } +}; + +export const emptyChannels = (channelsCount: number, tracesCount: number) => { + const makeTrace = () => ({chunks: [], type: 'line'}); + const makeChannel = (index) => ({ + index, + traces: R.range(0, tracesCount).map(makeTrace), + }); + + return R.range(0, channelsCount).map(makeChannel); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/filters.tsx b/jsx/react-series-data-viewer/src/series/store/state/filters.tsx new file mode 100644 index 00000000000..7fbcbdafc4a --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/filters.tsx @@ -0,0 +1,43 @@ +import * as R from 'ramda'; +import {createAction} from 'redux-actions'; + +export const SET_FILTER = 'SET_FILTER'; +export const setFilter = createAction(SET_FILTER); + +export type Action = { + type: 'SET_FILTER', + payload: { + key: string, + name: string, + fn: (_: number[]) => number[], + } +}; + +export type Filter = { + name: string, + fn: (n: number[]) => number[] +} + +export const filtersReducer = ( + state: {[key: string]: Filter} = {}, + action?: Action +): any => { + if (!action) { + return state; + } + switch (action.type) { + case SET_FILTER: { + return R.assoc( + action.payload.key, + { + name: action.payload.name, + fn: action.payload.fn, + }, + state + ); + } + default: { + return state; + } + } +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/montage.tsx b/jsx/react-series-data-viewer/src/series/store/state/montage.tsx new file mode 100644 index 00000000000..8fa3748050c --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/montage.tsx @@ -0,0 +1,40 @@ +import * as R from 'ramda'; +import {createAction} from 'redux-actions'; +import {Electrode} from '../types'; + +export const SET_ELECTRODES = 'SET_ELECTRODES'; +export const setElectrodes = createAction(SET_ELECTRODES); + +export const SET_HIDDEN = 'SET_HIDDEN'; +export const setHidden = createAction(SET_HIDDEN); + +export type Action = + | {type: 'SET_ELECTRODES', payload: Electrode[]} + | {type: 'SET_HIDDEN', payload: number[]}; + +export type State = { + electrodes: Electrode[], + hidden: number[] +}; + +export type Reducer = (state: State, action?: Action) => State; + +export const montageReducer: Reducer = ( + state = {electrodes: [], hidden: []}, + action +) => { + if (!action) { + return state; + } + switch (action.type) { + case SET_ELECTRODES: { + return R.assoc('electrodes', action.payload, state); + } + case SET_HIDDEN: { + return R.assoc('hidden', action.payload, state); + } + default: { + return state; + } + } +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx b/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx new file mode 100644 index 00000000000..8f3ea261c60 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx @@ -0,0 +1,26 @@ +import {createAction} from 'redux-actions'; +import {RightPanel} from '../types'; + +export const SET_RIGHT_PANEL = 'SET_RIGHT_PANEL'; +export const setRightPanel = createAction(SET_RIGHT_PANEL); + +export type Action = { + type: "SET_RIGHT_PANEL", + payload: RightPanel +}; + +export type Reducer = (state: RightPanel, action?: Action) => RightPanel; + +export const panelReducer: Reducer = (state = null, action) => { + if (!action) { + return state; + } + switch (action.type) { + case SET_RIGHT_PANEL: { + return action.payload; + } + default: { + return state; + } + } +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx b/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx new file mode 100644 index 00000000000..12958af2580 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx @@ -0,0 +1,28 @@ +import {createAction} from 'redux-actions'; + +export const SET_TIME_SELECTION = 'SET_TIME_SELECTION'; +export const setTimeSelection = createAction(SET_TIME_SELECTION); + +export type Action = { + type: "SET_TIME_SELECTION", + payload?: [number, number] +}; + +export type State = [number, number]; + +export type Reducer = (state?: [number, number], action?: Action) => State; + +export const timeSelectionReducer: Reducer = (state = null, action) => { + if (!action) { + return state; + } + + switch (action.type) { + case SET_TIME_SELECTION: { + return action.payload; + } + default: { + return state; + } + } +}; diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx new file mode 100644 index 00000000000..2c378859f57 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -0,0 +1,41 @@ +export type Chunk = { + index: number, + originalValues: number[], + values: number[], + filters: string[], + downsampling: number, + interval: [number, number], + cutoff: number +}; + +export type Trace = { + chunks: Chunk[], + type: "line" +}; + +export type ChannelMetadata = { + name: string, + seriesRange: [number, number] +}; + +export type Channel = { + index: number, + traces: Trace[] +}; + +export type Epoch = { + onset: number, + duration: number, + type: 'Event' | 'Annotation', + label: string, + comment?: string, + channels: number[] | "all", +}; + +export type RightPanel = 'annotationForm' | 'epochList' | null; + +export type Electrode = { + name: string, + channelIndex?: number, + position: [number, number, number], +}; diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx new file mode 100644 index 00000000000..88e5515f216 --- /dev/null +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -0,0 +1,20 @@ +import {vec2, glMatrix} from 'gl-matrix'; + +export type Vector2 = typeof glMatrix.ARRAY_TYPE; + +export const ap = (f: [(_: any) => any, (_: any) => any], p: Vector2): Vector2 => + vec2.fromValues(f[0](p[0]), f[1](p[1])); + +export const MIN_INTERVAL_FACTOR = 0.005; + +export const MIN_EPOCH_WIDTH = 1; + +export const MAX_VIEWED_CHUNKS = 3; + +export const MAX_CHANNELS = 6; + +export const SIGNAL_SCALE = Math.pow(10, 6); + +export const SIGNAL_UNIT = 'µV'; + +export const MAX_RENDERED_EPOCHS = 100; diff --git a/php/annotations.class.inc b/php/annotations.class.inc new file mode 100644 index 00000000000..cd9aecec68a --- /dev/null +++ b/php/annotations.class.inc @@ -0,0 +1,121 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class Annotations extends \NDB_Page +{ + /** + * Handle how to operate all the files. + * GET method gets a file. + * + * @param ServerRequestInterface $request The incoming PSR7 request + * + * @return ResponseInterface The outgoing PSR7 response + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $parameters = $request->getQueryParams(); + $factory = \NDB_Factory::singleton(); + $user = $factory->user(); + $db = $factory->database(); + + switch ($request->getMethod()) { + case 'GET': + $sessionID = $db->pselectOne( + 'SELECT SessionID + FROM physiological_file + WHERE PhysiologicalFileID=:PFID', + ['PFID' => $parameters['physioFileID']] + ); + + $timepoint = \NDB_Factory::singleton()->timepoint( + new \SessionID(strval($sessionID)) + ); + + if (!(($user->hasPermission('electrophysiology_browser_view_allsites') + || ($user->hasCenter($timepoint->getCenterID()) + && $user->hasPermission('electrophysiology_browser_view_site'))) + && $user->hasProject($timepoint->getProject()->getId())) + ) { + return (new \LORIS\Http\Response\JSON\Unauthorized()); + } + + if (!isset($parameters['physioFileID']) + || !isset($parameters['filePath']) + ) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + } + + $physioFileID = intval($parameters['physioFileID']); + (new ElectrophysioAnnotations($physioFileID))->updateFiles(); + + $config = \NDB_Factory::singleton()->config(); + $downloadpath = \Utility::appendForwardSlash( + $config->getSetting("dataDirBasepath") + ); + + $file = $parameters['filePath'] ?? null; + $filename = urldecode(basename($file)); + $path = dirname($file); + + $downloader = new \LORIS\FilesDownloadHandler( + new \SPLFileInfo($downloadpath . $path) + ); + return $downloader->handle( + $request->withAttribute('filename', $filename) + ); + case 'DELETE': + if (!$user->hasPermission('electrophysiology_browser_edit_annotations') + ) { + return (new \LORIS\Http\Response\JSON\Unauthorized()); + } + + if (!isset($parameters['physioFileID']) + || !isset($parameters['instance_id']) + ) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + } + + (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) + ->delete($parameters['instance_id']); + + return (new \LORIS\Http\Response\JSON\OK()); + case 'POST': + if (!$user->hasPermission('electrophysiology_browser_edit_annotations') + ) { + return (new \LORIS\Http\Response\JSON\Unauthorized()); + } + + if (!isset($parameters['physioFileID'])) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + } + + $instance_data = $parameters['instance']; + $metadata = $parameters['metadata']; + $instance_id = $parameters['instance_id'] ?? null; + $parameter_id = $parameters['parameter_id'] ?? null; + + (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) + ->update($instance_data, $metadata, $instance_id, $parameter_id); + + return (new \LORIS\Http\Response\JSON\OK()); + default: + return (new \LORIS\Http\Response\JSON\MethodNotAllowed( + ["GET", "DELETE", "POST"] + )); + } + } +} diff --git a/php/electrophysiology_browser.class.inc b/php/electrophysiology_browser.class.inc new file mode 100644 index 00000000000..7a0b523c8d1 --- /dev/null +++ b/php/electrophysiology_browser.class.inc @@ -0,0 +1,120 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ + +class Electrophysiology_Browser extends \DataFrameworkMenu +{ + /** + * Determine whether the user has permission to view this page + * + * @param \User $user The use whose access if being checked + * + * @return bool whether the user has access + */ + function _hasAccess(\User $user) : bool + { + return ($user->hasPermission('electrophysiology_browser_view_allsites') + || ($user->hasPermission('electrophysiology_browser_view_site') + && $user->hasStudySite() + ) + ); + } + + /** + * Tells the base class that this page's provisioner can support the + * HasAnyPermissionOrUserSiteMatch filter. + * + * @return ?array of site permissions or null + */ + public function allSitePermissionNames() : ?array + { + return ['electrophysiology_browser_view_allsites']; + } + + /** + * Tells the base class that this page's provisioner can support + * the UserProjectMatch filter. + * + * @return bool always true + */ + public function useProjectFilter(): bool + { + return true; + } + + /** + * Set up the variables required by NDB_Menu_Filter class for + * constructing a query + * + * @return array list of sites + */ + function getFieldOptions(): array + { + $factory = \NDB_Factory::singleton(); + $user = $factory->user(); + $db = $factory->database(); + + // get list of types + $list_of_types = []; + $typeList = $db->pselect( + "SELECT OutputTypeName FROM physiological_output_type", + [] + ); + foreach ($typeList as $row) { + $list_of_types[$row['OutputTypeName']] = ucfirst($row['OutputTypeName']); + } + + return [ + 'sites' => $this->getSiteOptions($user, false), + 'projects' => $this->getProjectOptions($user, false), + 'types' => $list_of_types + ]; + } + + /** + * Gets the data source for this menu filter. + * + * @return \LORIS\Data\Provisioner + */ + function getBaseDataProvisioner() : \LORIS\Data\Provisioner + { + return new ElectrophysiologyBrowserRowProvisioner(); + } + + + + /** + * Include additional JS files + * + * @return array of extra JS files that this page depends on + */ + function getJSDependencies() + { + $factory = \NDB_Factory::singleton(); + $baseURL = $factory->settings()->getBaseURL(); + return array_merge( + parent::getJSDependencies(), + [ + $baseURL + . '/electrophysiology_browser/js/electrophysiologyBrowserIndex.js', + ] + ); + } + +} diff --git a/php/electrophysiologybrowserrow.class.inc b/php/electrophysiologybrowserrow.class.inc new file mode 100644 index 00000000000..6bbbd13b1f8 --- /dev/null +++ b/php/electrophysiologybrowserrow.class.inc @@ -0,0 +1,81 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ + +namespace LORIS\electrophysiology_browser; + +/** + * An ElectrophysiologyBrowserRow represents a row in the + * electrophysiology browser menu table. + * + * @category Behavioural + * @package Main + * @subpackage Electrophysiology + * @author Cecile Madjar + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class ElectrophysiologyBrowserRow implements \LORIS\Data\DataInstance, + \LORIS\StudyEntities\SiteHaver +{ + protected $DBRow; + protected $CenterID; + protected $ProjectID; + + /** + * Create a new ElectrophysiologyBrowserRow + * + * @param array $row The row (in the same format as + * \Database::pselectRow returns + * @param \CenterID $cid The centerID affiliated with this row. + * @param \ProjectID $pid The projectID affiliated with this row. + */ + public function __construct(array $row, \CenterID $cid, \ProjectID $pid) + { + $this->DBRow = $row; + $this->CenterID = $cid; + $this->ProjectID = $pid; + } + + /** + * Implements \LORIS\Data\DataInstance interface for this row. + * + * @return array which can be serialized by json_encode() + */ + public function jsonSerialize() : array + { + return $this->DBRow; + } + + /** + * Returns the CenterID for this row, for filters such as + * \LORIS\Data\Filters\UserSiteMatch to match again. + * + * @return \CenterID + */ + public function getCenterID(): \CenterID + { + return $this->CenterID; + } + + /** + * Returns the ProjectID for this row + * + * @return \ProjectID The ProjectID + */ + public function getProjectID(): \ProjectID + { + return $this->ProjectID; + } +} diff --git a/php/electrophysiologybrowserrowprovisioner.class.inc b/php/electrophysiologybrowserrowprovisioner.class.inc new file mode 100644 index 00000000000..e99b52e4ed0 --- /dev/null +++ b/php/electrophysiologybrowserrowprovisioner.class.inc @@ -0,0 +1,91 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ + +namespace LORIS\electrophysiology_browser; + +/** + * This class implements a data provisioner to get all possible rows + * for the electrophysiology browser menu page. + * + * PHP Version 7 + * + * @category Behavioural + * @package Main + * @subpackage Electrophysiology + * @author Cecile Madjar + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class ElectrophysiologyBrowserRowProvisioner + extends \LORIS\Data\Provisioners\DBRowProvisioner +{ + /** + * Create an ElectrophyiologyBrowserRowProvisioner, which gets rows for the + * electrophysiology browser menu table. + */ + function __construct() + { + + parent::__construct( + "SELECT + psc.Name AS Site, + c.PSCID AS PSCID, + c.CandID AS DCCID, + Project.Name AS Project, + s.Visit_label AS Visit_Label, + MIN(pf.AcquisitionTime) AS Acquisition_Time, + MIN(pf.InsertTime) AS Insert_Time, + GROUP_CONCAT(DISTINCT pot.OutputTypeName) AS Links, + GROUP_CONCAT(DISTINCT pot.OutputTypeName) AS Type, + s.ID AS SessionID, + s.CenterID AS CenterID, + s.ProjectID AS ProjectID + FROM physiological_file pf + LEFT JOIN session s ON (s.ID=pf.SessionID) + LEFT JOIN candidate c USING (CandID) + LEFT JOIN psc ON (s.CenterID=psc.CenterID) + LEFT JOIN Project ON (s.ProjectID=Project.ProjectID) + LEFT JOIN physiological_output_type pot + USING (PhysiologicalOutputTypeID) + WHERE c.Active='Y' + AND s.Active='Y' + AND pf.FileType IN ( + SELECT type FROM ImagingFileTypes + WHERE + description LIKE '%(EEG)' + OR type = 'archive' + ) + GROUP BY SessionID", + [] + ); + } + + /** + * Returns an instance of a ElectrophysiologyBrowserRow object for a given + * table row. + * + * @param array $row The database row from the LORIS Database class. + * + * @return \LORIS\Data\DataInstance An instance representing this row. + */ + public function getInstance($row) : \LORIS\Data\DataInstance + { + $cid = new \CenterID($row['CenterID']); + $pid = new \ProjectID($row['ProjectID']); + unset($row['CenterID']); + unset($row['ProjectID']); + return new ElectrophysiologyBrowserRow($row, $cid, $pid); + } +} diff --git a/php/file_reader.class.inc b/php/file_reader.class.inc new file mode 100644 index 00000000000..9d2343c03bf --- /dev/null +++ b/php/file_reader.class.inc @@ -0,0 +1,53 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class File_Reader extends \NDB_Page +{ + public $skipTemplate = true; + + /** + * Handle how to operate all the files. + * GET method gets a file. + * + * @param ServerRequestInterface $request The incoming PSR7 request + * + * @return ResponseInterface The outgoing PSR7 response + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $config = \NDB_Factory::singleton()->config(); + $downloadpath = \Utility::appendForwardSlash( + $config->getSetting("dataDirBasepath") + ); + switch ($request->getMethod()) { + case "GET": + $file = $request->getQueryParams()['file'] ?? null; + $filename = urldecode(basename($file)); + $path = dirname($file); + + $downloader = new \LORIS\FilesDownloadHandler( + new \SPLFileInfo($downloadpath . $path) + ); + return $downloader->handle( + $request->withAttribute('filename', $filename) + ); + default: + return (new \LORIS\Http\Response\JSON\MethodNotAllowed( + ["GET"] + )); + } + } +} diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc new file mode 100644 index 00000000000..551fa1a6616 --- /dev/null +++ b/php/models/electrophysioannotations.class.inc @@ -0,0 +1,570 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class ElectrophysioAnnotations +{ + private int $_physioFileID; + private array $_data; + + /** + * Construct an Annotation object + * + * @param integer $physioFileID Electrophysiological file ID + * to collect annotation data from + */ + function __construct(int $physioFileID) + { + $this->_physioFileID = $physioFileID; + $db = \NDB_Factory::singleton()->database(); + + $annotationInstance = $db->pselect( + 'SELECT i.* + FROM physiological_annotation_instance AS i + JOIN physiological_annotation_file AS f + ON f.AnnotationFileID = i.AnnotationFileID + WHERE f.PhysiologicalFileID=:PFID AND f.FileType="tsv"', + ['PFID' => $this->_physioFileID] + ); + + $annotationMetadata = $db->pselect( + 'SELECT p.* + FROM physiological_annotation_parameter AS p + JOIN physiological_annotation_file AS f + ON f.AnnotationFileID = p.AnnotationFileID + WHERE f.PhysiologicalFileID=:PFID AND f.FileType="json"', + ['PFID' => $this->_physioFileID] + ); + + $annotationLabels = $db->pselect( + 'SELECT * FROM physiological_annotation_label', + ['PFID' => $this->_physioFileID] + ); + + $this->_data = [ + 'instances' => $annotationInstance, + 'metadata' => $annotationMetadata, + 'labels' => $annotationLabels, + ]; + } + + /** + * Get data for the Electrophysiological file annotations + * + * @return array The data array + */ + function getData(): array + { + return $this->_data; + } + + /** + * Updates annotation tables when there is a POST request. + * Will add new derivative files if none exist for the given instance. + * Will either add new annotations or update existing ones. + * + * @param array $instance_data Instance data + * @param array $metadata Metadata + * @param int $instance_id InstanceID + * @param int $parameter_id ParameterID + * + * @return void + */ + function update( + array $instance_data, + array $metadata, + int $instance_id, + int $parameter_id + ): void { + + $factory = \NDB_Factory::singleton(); + $user = $factory->user(); + $db = $factory->database(); + + if ($user->hasPermission('electrophysiology_browser_edit_annotations')) { + + //If the label is new, add to annotation label table + //and get label ID + $labelID = $db->pselectOne( + "SELECT AnnotationLabelID + FROM physiological_annotation_label + WHERE LabelName=:label", + ['label' => $instance_data['label_name']] + ); + if (empty($labelID)) { + $data = [ + 'LabelName' => $instance_data['label_name'], + 'LabelDescription' => $instance_data['label_description'] + ]; + $db->insert("physiological_annotation_label", $data); + $labelID = $db->pselectOne( + "SELECT AnnotationLabelID + FROM physiological_annotation_label + WHERE LabelName=:label", + ['label' => $instance_data['label_name']] + ); + } + + //If no derivative files exist, must create new files + $annotationFID = $db->pselect( + "SELECT AnnotationFileID + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID", + ['PFID' => $this->_physioFileID] + ); + + //Get data from POST request + $metadata = [ + 'Description' => $metadata['description'], + 'Sources' => $metadata['sources'], + 'Author' => $metadata['author'] + ]; + + $instance = [ + 'Onset' => $instance_data['onset'], + 'Duration' => $instance_data['duration'], + 'AnnotationLabelID' => $labelID, + 'Channels' => $instance_data['channels'], + 'AbsoluteTime' => $instance_data['abs_time'], + 'Description' => $instance_data['description'] + ]; + + //Insert new files and data into DB + if (empty($annotationFID)) { + + //Create new annotation files + $this->_createFiles(); + + //Get new annotation file ID + $annotation_tsv_ID = $db->pselectOne( + "SELECT AnnotationFileID + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID + AND FileType='tsv'", + ['PFID' => $this->_physioFileID] + ); + //Get new annotation file ID + $annotation_json_ID = $db->pselectOne( + "SELECT AnnotationFileID + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID + AND FileType='json'", + ['PFID' => $this->_physioFileID] + ); + + $metadata['AnnotationFileID'] = $annotation_json_ID; + $instance['AnnotationFileID'] = $annotation_tsv_ID; + + $db->insert("physiological_annotation_parameter", $metadata); + + //Get new metadata file ID + $metadata_ID = $db->pselectOne( + "SELECT AnnotationParameterID + FROM physiological_annotation_parameter + WHERE AnnotationFileID=:annotation_ID", + ['annotation_ID' => $annotation_json_ID] + ); + + $instance['AnnotationParameterID'] = $metadata_ID; + + $db->insert("physiological_annotation_instance", $instance); + + } else { + //If the files are not new + //Get annotation file ID for the tsv file + $tsv_ID = $db->pselectOne( + "SELECT AnnotationFileID + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID + AND FileType='tsv'", + ['PFID' => $this->_physioFileID] + ); + //Get annotation file ID for the json file + $json_ID = $db->pselectOne( + "SELECT AnnotationFileID + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID + AND FileType='json'", + ['PFID' => $this->_physioFileID] + ); + + $instance['AnnotationFileID'] = $tsv_ID; + $metadata['AnnotationFileID'] = $json_ID; + + /* If no instance ID is specified, insert new instance + * into instance table and get the parameter file ID + * from the parameter table + */ + if (is_null($instance_id)) { + $parameterID = $db->pselectOne( + "SELECT AnnotationParameterID + FROM physiological_annotation_parameter + WHERE AnnotationFileID=:annotationFID", + ['annotationFID' => $json_ID] + ); + $instance['AnnotationParameterID'] = $parameterID; + + $db->insert('physiological_annotation_instance', $instance); + } else { + $db->update( + 'physiological_annotation_instance', + $instance, + ['AnnotationInstanceID' => $instance_id] + ); + } + //Update parameter table if parameter ID provided + if (!is_null($parameter_id)) { + $db->update( + 'physiological_annotation_parameter', + $metadata, + ['AnnotationParameterID' => $parameter_id] + ); + } + + //In all cases where files are not new, + //set LastUpdate time for all related files + + $db->update( + 'physiological_annotation_file', + ['LastUpdate' => date("Y-m-d H:i:s")], + ['PhysiologicalFileID' => $this->_physioFileID] + ); + } + } + } + + /** + * Deletes one annotation + * + * @param int $annotationID Annotation ID + * + * @return void + */ + function delete(int $annotationID): void + { + // TODO : check that $annotationID belongs to physioFileID + $db = \NDB_Factory::singleton()->database(); + + $physioFileID = $db->pselectone( + 'SELECT PhysiologicalFileID + FROM physiological_annotation_file AS f + INNER JOIN physiological_annotation_instance AS i + ON f.AnnotationFileID=i.AnnotationFileID + AND i.AnnotationInstanceID=:annotationID', + ['annotationID' => $annotationID] + ); + + if ($this->_physioFileID == $physioFileID) { + $db->delete( + "physiological_annotation_instance", + ['AnnotationInstanceID' => $annotationID] + ); + } + } + + /** + * Updates the derivative files associated with the given + * physiological file ID + * + * @return void + * @throws SodiumException + */ + function updateFiles(): void + { + $db = \NDB_Factory::singleton()->database(); + + //Get data directory base path from Config + $dataDir = $db->pselectOne( + 'SELECT Value + FROM Config AS config + INNER JOIN ConfigSettings AS c + ON c.Name=:name AND config.ConfigID=c.ID', + ['name' => 'dataDirBasepath'] + ); + + $tsv_entries = [ + 'onset', 'duration', 'label', 'channels', 'aboslute_time', 'description' + ]; + + $tsv = $db->pselect( + "SELECT + AnnotationFileID AS id, + FilePath AS filePath, + LastUpdate AS lastUpdate, + LastWritten AS lastWritten + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID + AND FileType='tsv'", + ['PFID' => $this->_physioFileID] + ); + + $json = $db->pselect( + "SELECT + AnnotationFileID AS id, + FilePath AS filePath, + LastUpdate AS lastUpdate, + LastWritten AS lastWritten + FROM physiological_annotation_file + WHERE PhysiologicalFileID=:PFID + AND FileType='json'", + ['PFID' => $this->_physioFileID] + ); + + $tsv_path = $dataDir.$tsv[0]['filePath']; + $json_path = $dataDir.$json[0]['filePath']; + + //Update files if files updated before database updated + if ($tsv[0]['lastWritten'] <= $tsv[0]['lastUpdate'] + || $json[0]['lastWritten'] <= $json[0]['lastUpdate'] + ) { + //Update the three files with the given paths + $labels = []; // Label Name => Label Description + $tsv_file = fopen($tsv_path, 'w'); //Will override all file content + //Add columns + $columns = implode("\t", $tsv_entries); + fwrite($tsv_file, $columns."\n"); + //Get all annotation instances + //Then go thru each and get the label name + description + //add label name to file and also to an array for json file + //change anything null to n/a + $instances = $db->pselect( + "SELECT + p.Onset AS Onset, + p.Duration AS Duration, + l.LabelName AS LabelName, + l.LabelDescription AS LabelDescription, + p.Channels AS Channels, + p.AbsoluteTime AS AbsoluteTime, + p.Description AS Description + FROM physiological_annotation_instance p + LEFT JOIN physiological_annotation_label l + ON (l.AnnotationLabelID=p.AnnotationLabelID) + WHERE p.AnnotationFileID=:AFID", + ['AFID' => $tsv[0]['id']] + ); + + foreach ($instances as $instance) { + //Add labels to list for parameter file + $labels[$instance['LabelName']] = $instance['LabelDescription']; + + //Setup each column in correct order + $input_tsv = [ + $instance['Onset'], + $instance['Duration'], + $instance['LabelName'], + $instance['Channels'], + $instance['AbsoluteTime'], + $instance['Description'] + ]; + //Set all null values to 'n/a' + $input_tsv = array_map( + function ($v) { + return (is_null($v)) ? "n/a" : $v; + }, + $input_tsv + ); + //Implode with tabs as delimeter + $input = implode("\t", $input_tsv); + + fwrite($tsv_file, $input."\n"); + } + fclose($tsv_file); + + //Write to metadata (json) file + //Get metadata from database (should only be 1 entry) + $json_desc = $db->pselectOne( + "SELECT Description + FROM physiological_annotation_parameter + WHERE AnnotationFileID=:AFID", + ['AFID' => $json[0]['id']] + ); + $json_source = $db->pselectOne( + "SELECT Sources + FROM physiological_annotation_parameter + WHERE AnnotationFileID=:AFID", + ['AFID' => $json[0]['id']] + ); + $json_author = $db->pselectOne( + "SELECT Author + FROM physiological_annotation_parameter + WHERE AnnotationFileID=:AFID", + ['AFID' => $json[0]['id']] + ); + //Get "IntendedFor" entry: physiological file path + $physioFilePath = $db->pselectOne( + "SELECT FilePath + FROM physiological_file + WHERE PhysiologicalFileID=:PFID", + ['PFID' => $this->_physioFileID] + ); + + $input_json = [ + "Description" => $json_desc, + "IntendedFor" => $physioFilePath, + "Sources" => $json_source, + "Author" => $json_author, + "LabelDescription" => $labels + ]; + $input_encode = json_encode($input_json, JSON_PRETTY_PRINT); + + $json_file = fopen($json_path, 'w'); + fwrite($json_file, $input_encode); + fclose($json_file); + + //Update archives and create new hash + $this->_updateArchives([$tsv_path, $json_path]); + + //Update time that files were written to + $db->update( + 'physiological_annotation_file', + ['LastWritten' => date("Y-m-d H:i:s")], + ['PhysiologicalFileID' => $this->_physioFileID] + ); + } + } + + /** + * Creates new annotation files for the given physiological file + * and inserts their information into database + * + * @return void + * @throws SodiumException + */ + function _createFiles() : void + { + $db = \NDB_Factory::singleton()->database(); + + $physioFilePath = $db->pselectOne( + 'SELECT FilePath + FROM physiological_file + WHERE PhysiologicalFileID=:PFID', + ['PFID' => $this->_physioFileID] + ); + + //Create new filepaths + //Get data directory base path from Config + $dataDir = $db->pselectOne( + 'SELECT Value + FROM Config AS config + INNER JOIN ConfigSettings AS c + ON c.Name=:name AND config.ConfigID=c.ID', + ['name' => 'dataDirBasepath'] + ); + //Create path with correct structure + $subPath = strstr($physioFilePath, "sub"); + $pathWithDeriv = $dataDir + . "bids_imports/derivatives/loris_annotations/" + . $subPath; + //Create directories if they don't exist + $dirname = pathinfo($pathWithDeriv, PATHINFO_DIRNAME); + if (!file_exists($dirname)) { + mkdir($dirname, 0777, true); + } + + //Replace file type with "annotations" + $pathWithoutEDF = substr( + $pathWithDeriv, + 0, + strrpos($pathWithDeriv, "_") + ); + + $tsv_path = $pathWithoutEDF . "_annotations.tsv"; + $json_path = $pathWithoutEDF . "_annotations.json"; + $tgz_path = $pathWithoutEDF . "_annotations.tgz"; + + //Create files + $tsv_file = fopen($tsv_path, 'a+'); + $json_file = fopen($json_path, 'a+'); + + $tgz_file = new \PharData($tgz_path); + $tgz_file->addFile($tsv_path, basename($tsv_path)); + $tgz_file->addFile($json_path, basename($json_path)); + fclose($tsv_file); + fclose($json_file); + + $annotation_f = file_get_contents($tgz_path); + $annotation_hash = sodium_crypto_generichash($annotation_f); + + $params_tsv = [ + 'PhysiologicalFileID' => $this->_physioFileID, + 'FileType' => 'tsv', + 'FilePath' => str_replace($dataDir, '', $tsv_path) + ]; + $params_json = [ + 'PhysiologicalFileID' => $this->_physioFileID, + 'FileType' => 'json', + 'FilePath' => str_replace($dataDir, '', $json_path), + ]; + $params_archive = [ + 'PhysiologicalFileID' => $this->_physioFileID, + 'FilePath' => str_replace($dataDir, '', $tgz_path), + 'Blake2bHash' => bin2hex($annotation_hash) + ]; + $db->insert("physiological_annotation_file", $params_tsv); + $db->insert("physiological_annotation_file", $params_json); + $db->insert("physiological_annotation_archive", $params_archive); + } + + /** + * Updates the annotation and physiological archives for the given + * physiological file ID with the provided paths and updates + * database with new archive file hash + * + * @param array $paths Paths to files to be added to archive + * + * @return void + * @throws SodiumException + */ + function _updateArchives(array $paths) : void + { + $db = \NDB_Factory::singleton()->database(); + + $dataDir = $db->pselectOne( + 'SELECT Value + FROM Config AS config + INNER JOIN ConfigSettings AS c + ON c.Name=:name AND config.ConfigID=c.ID', + ['name' => 'dataDirBasepath'] + ); + $queries = [ + 'physiological_annotation_archive', + 'physiological_archive' + ]; + + foreach ($queries as $query) { + $filepath = $db->pselectone( + "SELECT + DISTINCT(FilePath) + FROM $query + WHERE PhysiologicalFileID=:PFID", + ['PFID' => $this->_physioFileID] + ); + $filepath = $dataDir.$filepath; + + $arch_file = new \PharData($filepath); + foreach ($paths as $path) { + $arch_file->addFile($path, basename($path)); + } + + $f = file_get_contents($filepath); + $hash = sodium_crypto_generichash($f); + + //Update database with hash + $db->update( + $query, + ['Blake2bHash' => bin2hex($hash)], + ['PhysiologicalFileID' => $this->_physioFileID] + ); + } + } +} diff --git a/php/models/electrophysiofile.class.inc b/php/models/electrophysiofile.class.inc new file mode 100644 index 00000000000..9939fa897c2 --- /dev/null +++ b/php/models/electrophysiofile.class.inc @@ -0,0 +1,189 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ + +namespace LORIS\electrophysiology_browser\Models; + +/** + * This object represents an electrophysiology file in the physiological_file table. + * + * @category Electrophysiology + * @package Electrophysiology + * @author Loris Team + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class ElectrophysioFile implements \LORIS\Data\DataInstance +{ + private $_fileData = []; + private $_parameters = []; + private $_chunksURLs = []; + private $_splitFileIDs = []; + + /** + * Construct a BIDSFile + * + * @param integer $physiologicalFileID The PhysiologicalFileID to be loaded + */ + function __construct(int $physiologicalFileID) + { + + $db = \NDB_Factory::singleton()->database(); + + $query = "SELECT + PhysiologicalFileID, + PhysiologicalModality as Modality, + PhysiologicalOutputTypeID, + SessionID, + InsertTime, + FileType, + AcquisitionTime, + InsertedByUser, + FilePath + FROM physiological_file + LEFT JOIN physiological_modality as pm + USING (PhysiologicalModalityID) + WHERE PhysiologicalFileID=:PFID"; + $fileData = $db->pselectRow($query, ['PFID' => $physiologicalFileID]); + + foreach ($fileData AS $key=>$value) { + $this->_fileData[$key] = $value; + } + + $query = "SELECT + pt.Name, + ppf.Value + FROM physiological_parameter_file as ppf + LEFT JOIN parameter_type as pt USING (ParameterTypeID) + WHERE + PhysiologicalFileID=:PFID + AND pt.Name <> 'electrophyiology_chunked_dataset_path'"; + $parameterRaw = $db->pselect($query, ['PFID' => $physiologicalFileID]); + + foreach ($parameterRaw AS $row) { + $this->_parameters[$row['Name']] = $row['Value']; + } + + /* + * Split files + * + * If the physiological file is the parent of a collection + * set or override a few parameters + */ + + $query = "SELECT PhysiologicalFileID + FROM `physiological_file` + WHERE ParentID=:PFID + ORDER BY `Index`"; + $splitFileIDs = $db->pselectCol( + $query, + ['PFID' => $physiologicalFileID] + ); + + $this->_splitFileIDs = array_combine( + array_map('intval', array_keys($splitFileIDs)), + array_values($splitFileIDs) + ); + + if (count($this->_splitFileIDs) > 0) { + $this->_fileData['SplitCount'] = strval(count($this->_splitFileIDs)); + + // Overrides Recording Duration + $query = "SELECT SUM(ppf.Value) + FROM physiological_parameter_file as ppf + LEFT JOIN parameter_type as pt USING (ParameterTypeID) + WHERE PhysiologicalFileID IN (" + . join(',', $this->_splitFileIDs) + . ") + AND pt.Name = 'RecordingDuration'"; + $this->_parameters['RecordingDuration'] = $db->pselectOne($query, []); + + // Set chunk paths + $query = "SELECT ppf.Value + FROM physiological_parameter_file as ppf + LEFT JOIN parameter_type as pt USING (ParameterTypeID) + WHERE PhysiologicalFileID IN (" + . join(',', $this->_splitFileIDs) + . ") + AND pt.Name = 'electrophyiology_chunked_dataset_path'"; + $this->_chunksURLs = $db->pselectCol($query, []); + } else { + $this->_fileData['SplitCount'] = 'n/a'; + + $query = "SELECT ppf.Value + FROM physiological_parameter_file as ppf + LEFT JOIN parameter_type as pt USING (ParameterTypeID) + WHERE PhysiologicalFileID=:PFID + AND pt.Name = 'electrophyiology_chunked_dataset_path'"; + $this->_chunksURLs = $db->pselectCol( + $query, + ['PFID' => $physiologicalFileID] + ); + } + } + + /** + * Gets a parameter for this file from the appropriate place + * + * @param string $parameterName The parameter to be retrieved + * + * @return string The value of the parameter + */ + function getParameter(string $parameterName) : string + { + return $this->_fileData[$parameterName] ?? + ($this->_parameters[$parameterName] ?? ''); + } + + /** + * Gets the chunks URLs for this file + * + * @return array The list of URLs + */ + function getChunksURLs() : array + { + return $this->_chunksURLs; + } + + /** + * Gets the split data for this file + * + * @param int $index The split index + * + * @return ?array The split data + */ + function getSplitData(int $index) : ?array + { + if (count($this->_splitFileIDs) === 0) { + + return null; + } + + return [ + 'splitIndex' => $index, + 'splitCount' => intval($this->_fileData['SplitCount']), + 'splitPhysioFile' => new ElectrophysioFile( + intval($this->_splitFileIDs[$index]) + ), + ]; + } + + /** + * Implements \LORIS\Data\DataInstance interface + * + * @return string which can be serialized by json_encode() + */ + public function jsonSerialize() : string + { + return ''; + } +} diff --git a/php/module.class.inc b/php/module.class.inc new file mode 100644 index 00000000000..2d5b21f0e4c --- /dev/null +++ b/php/module.class.inc @@ -0,0 +1,65 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +namespace LORIS\electrophysiology_browser; +/** + * Class module implements the basic LORIS module functionality + * + * @category Behavioural + * @package Main + * @subpackage Electophysiology + * @author Cécile Madjar + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class Module extends \Module +{ + /** + * {@inheritDoc} + * + * @param \User $user The user whose access is being checked. + * + * @return bool whether access is granted + */ + public function hasAccess(\User $user) : bool + { + return parent::hasAccess($user) && + $user->hasAnyPermission( + [ + 'electrophysiology_browser_view_allsites', + 'electrophysiology_browser_view_site' + ] + ); + } + + /** + * {@inheritDoc} + * + * @return string The menu category for this module + */ + public function getMenuCategory() : string + { + return "Electrophysiology"; + } + + /** + * {@inheritDoc} + * + * @return string The human readable name for this module + */ + public function getLongName() : string + { + return "Electrophysiology Browser"; + } +} \ No newline at end of file diff --git a/php/sessions.class.inc b/php/sessions.class.inc new file mode 100644 index 00000000000..c4070a623b3 --- /dev/null +++ b/php/sessions.class.inc @@ -0,0 +1,674 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ +namespace LORIS\electrophysiology_browser; + +use \Psr\Http\Message\ServerRequestInterface; +use \Psr\Http\Message\ResponseInterface; +use LORIS\electrophysiology_browser\Models\ElectrophysioFile; +use LORIS\electrophysiology_browser\Models\ElectrophysioAnnotations; + + +/** + * Provides the PHP code for the menu filter for the electrophysiology browser + * + * @category Behavioural + * @package Main + * @subpackage Sessions + * @author Loris team + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ + +class Sessions extends \NDB_Page +{ + + public $skipTemplate = true; // stops from looking for a smarty template + protected $timepoint; + protected $sessionID; + protected $candidate; + + /** + * Determine whether the user has permission to view this page + * + * @param \User $user The user whose access is being checked + * + * @return bool whether the user has access + */ + function _hasAccess(\User $user) : bool + { + return (($user->hasPermission('electrophysiology_browser_view_allsites') + || ($user->hasCenter($this->timepoint->getCenterID()) + && $user->hasPermission('electrophysiology_browser_view_site')) + ) && $user->hasProject($this->timepoint->getProject()->getId())); + } + + /** + * Load the required variables in order to check that the user + * has access to the session. + * + * @param \User $user The user to load the resources for + * @param ServerRequestInterface $request The PSR15 Request being handled + * + * @throws \NotFound If the session id is non-numerical + * @throws \LorisException If the session is not found + * + * @return void + */ + public function loadResources( + \User $user, ServerRequestInterface $request + ) : void { + + $path = $request->getUri()->getPath(); + $matches = []; + + if (preg_match('#/sessions/(\d+)#', $path, $matches) !== 1) { + throw new \NotFound("Invalid session"); + } + $session_id = intval($matches[1]); + + try { + $this->timepoint = \NDB_Factory::singleton()->timepoint( + new \SessionID(strval($session_id)) + ); + $this->sessionID = $session_id; + } catch (\LorisException $e) { + throw new \NotFound("Session not found"); + } + + parent::loadResources($user, $request); + } + + /** + * Handles a login request + * + * @param ServerRequestInterface $request The incoming PSR7 request + * + * @return ResponseInterface The outgoing PSR7 response + */ + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $parameters = $request->getQueryParams(); + $user = $request->getAttribute('user'); + + if (!$this->_hasAccess($user)) { + return (new \LORIS\Middleware\PageDecorationMiddleware($user)) + ->process( + $request, + new \LORIS\Http\StringStream("Permission denied") + )->withStatus(403); + } + + $accepted_hdrs = explode( + ',', + $request->getHeaderLine('Accept') + ); + + if (in_array('text/html', $accepted_hdrs, true)) { + return parent::handle($request); + } + + if ($request->getMethod() != 'GET') { + return (new \LORIS\Http\Response\JSON\MethodNotAllowed( + ['GET'] + )); + } + + if (!isset($parameters['outputType'])) { + return (new \LORIS\Http\Response\JSON\BadRequest( + 'OutputType required' + )); + } + + $outputType = $parameters['outputType']; + if (!in_array($outputType, ['raw', 'derivative', 'all_types'])) { + return (new \LORIS\Http\Response\JSON\BadRequest( + 'Invalid output type' + )); + } + return $this->getSessionData($outputType); + } + + + /** + * Get the session data information. + * + * @param string $outputType output type to be displayed + * + * @return ResponseInterface The JSON response + */ + function getSessionData($outputType) + { + + $db = \NDB_Factory::singleton()->database(); + + $query = 'SELECT + DISTINCT(pf.SessionID) + FROM physiological_file pf + LEFT JOIN session s ON (s.ID=pf.SessionID) + LEFT JOIN candidate c USING (CandID) + LEFT JOIN psc ON (s.CenterID=psc.CenterID) + LEFT JOIN physiological_output_type pot + USING (PhysiologicalOutputTypeID) + WHERE + s.Active = "Y" + AND pf.FileType IN ('. + '"bdf", "cnt", "edf", "set", "vhdr", "vsm", "archive"'. + ') ORDER BY pf.SessionID'; + + $response = []; + + $sessions = $db->pselect($query, []); + $sessions = array_column($sessions, 'SessionID'); + $response['patient'] = $this->getSubjectData($outputType); + $response['database'] = array_values( + $this->getFilesData($outputType) + ); + $response['sessions'] = $sessions; + $currentIndex = array_search($this->sessionID, $sessions); + $response['nextSession'] = $sessions[$currentIndex+1] ?? ''; + $response['prevSession'] = $sessions[$currentIndex-1] ?? ''; + + return new \LORIS\Http\Response\JSON\OK($response); + } + + + /** + * Get the subject data information. + * + * @param string $outputType output type to be displayed + * + * @return array with the subject information + */ + function getSubjectData($outputType) + { + $subjectData = []; + $candidate = \NDB_Factory::singleton()->candidate( + $this->timepoint->getCandID() + ); + + $subjectData['pscid'] = $candidate->getPSCID(); + $subjectData['dccid'] = $candidate->getCandID(); + $subjectData['visit_label'] = $this->timepoint->getVisitLabel(); + $subjectData['sessionID'] = $this->timepoint->getSessionID(); + $subjectData['site'] = $this->timepoint->getPSC(); + $subjectData['dob'] = $candidate->getCandidateDoB(); + $subjectData['sex'] = $candidate->getCandidateSex(); + $subjectData['subproject'] = $this->timepoint->getData('SubprojectTitle'); + $subjectData['output_type'] = $outputType; + + return $subjectData; + } + + + + /** + * Get the list of electrophysiology recordings with their recording information. + * + * @param string $outputType output type to be displayed + * + * @return array with the file collection + */ + function getFilesData(string $outputType) + { + $db = \NDB_Factory::singleton()->database(); + + $fileCollection = []; + $params = []; + $params['SID'] = $this->sessionID; + $query = 'SELECT + pf.PhysiologicalFileID + FROM + physiological_file pf '; + + if ($outputType != 'all_types') { + $query .= 'LEFT JOIN physiological_output_type pot ON '; + $query .= 'pf.PhysiologicalOutputTypeID=' + .'pot.PhysiologicalOutputTypeID '; + $query .= 'WHERE SessionID=:SID '; + $query .= 'AND pot.OutputTypeName = :OTN '; + $params['OTN'] = $outputType; + } else { + $query .= "WHERE SessionID=:SID AND pf.ParentID IS NULL"; + } + + $physiologicalFiles = $db->pselect($query, $params); + + foreach ($physiologicalFiles as $file) { + $fileCollection[]['file'] = $this->getSummary($file); + } + + return $fileCollection; + } + + + /** + * Get the electrophysiology recording summary metadata. + * + * @param array $file electrophysiology file data + * + * @return array with the file metadata + */ + function getSummary(array $file) : array + { + $db = \NDB_Factory::singleton()->database(); + + $fileSummary = []; + $physioFileID = intval($file['PhysiologicalFileID']); + $physioFileObj = new ElectrophysioFile($physioFileID); + $physioFile = $physioFileObj->getParameter('FilePath'); + $modality = $physioFileObj->getParameter('Modality'); + $modalityPrefix = $modality === 'ieeg' ? 'iEEG' : 'EEG'; + $modalityCapName = $modality === 'ieeg' ? 'Electrode' : 'Cap'; + + $fileSummary['id'] = $physioFileID; + $fileSummary['name'] = basename($physioFile); + + // Summary + + $channels = ['EEG', 'EOG', 'ECG', 'EMG']; + if ($modality === 'ieeg') { + $channels = array_merge(['ECOG', 'SEEG'], $channels); + } + + $fileSummary['summary'] = [ + [ + 'name' => 'Sampling Frequency', + 'value' => $physioFileObj->getParameter('SamplingFrequency'), + ], + ]; + $fileSummary['summary'] = array_merge( + $fileSummary['summary'], + array_map( + fn($channel) => + [ + 'name' => $channel.' Channel Count', + 'value' => $physioFileObj->getParameter( + $channel.'ChannelCount' + ), + ], + $channels + ) + ); + $fileSummary['summary'] = array_merge( + $fileSummary['summary'], + [ + [ + 'name' => 'Reference', + 'value' => $physioFileObj->getParameter( + $modalityPrefix.'Reference' + ), + ], + [ + 'name' => 'Powerline Frequency', + 'value' => $physioFileObj->getParameter('PowerLineFrequency'), + ], + ] + ); + + // Details + + $fileSummary['details'] = [ + [ + 'name' => 'Task Name', + 'value' => $physioFileObj->getParameter('TaskName'), + ], + [ + 'name' => 'Task Description', + 'value' => $physioFileObj->getParameter('TaskDescription'), + ], + [ + 'name' => 'Instructions', + 'value' => $physioFileObj->getParameter('Instructions'), + ], + [ + 'name' => 'Recording Type', + 'value' => $physioFileObj->getParameter('RecordingType'), + ], + [ + 'name' => 'Recording Split Count', + 'value' => $physioFileObj->getParameter('SplitCount'), + ], + [ + 'name' => 'Recording Duration', + 'value' => $physioFileObj->getParameter('RecordingDuration'), + ], + [ + 'name' => 'Epoch Length', + 'value' => $physioFileObj->getParameter('EpochLength'), + ], + [ + 'name' => 'Subject Artefact Description', + 'value' => $physioFileObj->getParameter( + 'SubjectArtefactDescription' + ), + ], + [ + 'name' => 'Head Circumference', + 'value' => $physioFileObj->getParameter('HeadCircumference'), + ], + [ + 'name' => 'Placement Scheme', + 'value' => $physioFileObj->getParameter( + $modalityPrefix.'PlacementScheme' + ), + ], + [ + 'name' => 'Ground', + 'value' => $physioFileObj->getParameter($modalityPrefix.'Ground'), + ], + [ + 'name' => 'Trigger Channel Count', + 'value' => $physioFileObj->getParameter('TriggerChannelCount'), + ], + [ + 'name' => 'Misc Channel Count', + 'value' => $physioFileObj->getParameter('MiscChannelCount'), + ], + [ + 'name' => 'CogAtlas ID', + 'value' => $physioFileObj->getParameter('CogAtlasID'), + ], + [ + 'name' => 'CogPO ID', + 'value' => $physioFileObj->getParameter('CogPOID'), + ], + [ + 'name' => 'Institution Name', + 'value' => $physioFileObj->getParameter('InstitutionName'), + ], + [ + 'name' => 'Institution Address', + 'value' => $physioFileObj->getParameter('InstitutionAddress'), + ], + [ + 'name' => 'Manufacturer', + 'value' => $physioFileObj->getParameter('Manufacturer'), + ], + [ + 'name' => 'Manufacturers Model Name', + 'value' => $physioFileObj->getParameter( + 'ManufacturersModelName' + ), + ], + [ + 'name' => $modalityCapName.' Manufacturer', + 'value' => $physioFileObj->getParameter( + $modalityCapName.'Manufacturer' + ), + ], + [ + 'name' => $modalityCapName.' Manufacturer\'s Model Name', + 'value' => $physioFileObj->getParameter( + $modalityCapName.'ManufacturersModelName' + ), + ], + [ + 'name' => 'Device Serial Number', + 'value' => $physioFileObj->getParameter('DeviceSerialNumber'), + ], + [ + 'name' => 'Hardware Filters', + 'value' => $physioFileObj->getParameter('HardwareFilters'), + ], + [ + 'name' => 'Software Versions', + 'value' => $physioFileObj->getParameter('SoftwareVersions'), + ], + [ + 'name' => 'Software Filters', + 'value' => $physioFileObj->getParameter('SoftwareFilters'), + ], + ]; + + if ($modality == 'ieeg') { + $fileSummary['details'][] = [ + 'name' => 'DC Offset Correction', + 'value' => $physioFileObj->getParameter('DCOffsetCorrection'), + ]; + + $fileSummary['details'][] = [ + 'name' => 'Electrode Groups', + 'value' => $physioFileObj->getParameter('ElectrodeGroups'), + ]; + + $fileSummary['details'][] = [ + 'name' => 'Electrical Stimulation', + 'value' => $physioFileObj->getParameter('ElectricalStimulation'), + ]; + + $fileSummary['details'][] = [ + 'name' => 'Electrical Stimulation Parameters', + 'value' => $physioFileObj->getParameter( + 'ElectricalStimulationParameters' + ), + ]; + } + + // get the links to the files for downloads + + $fileSummary['downloads'] = $this->getDownloadLinks($physioFileObj); + $fileSummary['chunks_urls'] = $physioFileObj->getChunksURLs(); + + $fileOutput = $db->pselectone( + 'SELECT pot.OutputTypeName + FROM physiological_output_type pot + INNER JOIN physiological_file AS pf + ON pf.PhysiologicalFileID=:PFID + AND pf.PhysiologicalOutputTypeID=pot.PhysiologicalOutputTypeID', + ['PFID' => $physioFileID] + ); + + //Get the annotation data if the output type is derivative + //Get the annotation data if the output type is derivative + if (strcmp($fileOutput, 'derivative') == 0) { + $annotations = new ElectrophysioAnnotations( + intval($physioFileID) + ); + $fileSummary['annotations'] = $annotations->getData(); + } + + $fileSummary['output_type'] = $fileOutput; + $fileSummary['splitData'] = $physioFileObj->getSplitData(0); + + return $fileSummary; + } + + /** + * Gets the download link for all the electrophysiology files + * + * @param ElectrophysioFile $physioFile ElectrophysiologyFile instance + * + * @return array array with the path to the different files associated to the + * electrophysiology file + */ + function getDownloadLinks(ElectrophysioFile $physioFile): array + { + $nSplit = intval($physioFile->getParameter('SplitCount')); + $downloadLinks = []; + + if ($nSplit === 0) { + $downloadLinks[] = [ + 'groupName' => '', + 'links' => $this->getPhysioFileDownloadlinks($physioFile), + ]; + } else { + foreach (range(0, $nSplit-1) as $i) { + $splitData = $physioFile->getSplitData($i); + if (is_null($splitData)) { + continue; + } + + $splitPhysioFile = $splitData['splitPhysioFile']; + + $downloadLinks[] = [ + 'groupName' => 'Split '.($i+1), + 'links' => $this->getPhysioFileDownloadlinks( + $splitPhysioFile + ), + ]; + } + } + return $downloadLinks; + } + + /** + * Gets the download link for the files associated to a particular + * electrophysiology file (channels.tsv, electrodes.tsv, task events.tsv...) + * + * @param ElectrophysioFile $physioFileObj ElectrophysiologyFile instance + * + * @return array array with the path to the different files associated to the + * electrophysiology file + */ + function getPhysioFileDownloadlinks(ElectrophysioFile $physioFileObj): array + { + $physioFileID = $physioFileObj->getParameter('PhysiologicalFileID'); + $physioFile = $physioFileObj->getParameter('FilePath'); + $db = \NDB_Factory::singleton()->database(); + $downloadLinks = []; + + $downloadLinks[] = [ + 'type' => 'physiological_file', + 'file' => $physioFile, + 'label' => 'EEG File', + ]; + + $queries = [ + 'physiological_electrode' => 'physiological_electrode_file', + 'physiological_channel' => 'physiological_channel_file', + 'physiological_task_event' => 'physiological_task_event_file', + 'physiological_annotation_archive' => 'physiological_annotation_files', + 'physiological_archive' => 'all_files', + ]; + + $labels = [ + 'physiological_electrode_file' => 'Electrodes', + 'physiological_channel_file' => 'Channels', + 'physiological_task_event_file' => 'Events', + 'physiological_annotation_files' => 'Annotations', + 'all_files' => 'All Files', + ]; + + foreach ($queries as $query_key => $query_value) { + $query_statement = "SELECT + DISTINCT(FilePath), '$query_value' AS FileType + FROM + $query_key + WHERE + PhysiologicalFileID=:PFID"; + $query_statement = $db->pselectRow( + $query_statement, + ['PFID' => $physioFileID] + ); + if (isset($query_statement['FileType'])) { + $downloadLinks[] = [ + 'type' => $query_statement['FileType'], + 'file' => $query_statement['FilePath'], + 'label' => $labels[$query_statement['FileType']] + ]; + } else { + $downloadLinks[] = [ + 'type' => $query_value, + 'file' => '', + 'label' => $labels[$query_value], + ]; + } + } + + $queryFDT = "SELECT + Value AS FilePath, + 'physiological_fdt_file' AS FileType + FROM + physiological_parameter_file + JOIN parameter_type AS pt USING (ParameterTypeID) + WHERE + pt.Name='fdt_file' + AND PhysiologicalFileID=:PFID"; + $queryFDT = $db->pselectRow($queryFDT, ['PFID' => $physioFileID]); + if (isset($queryFDT['FileType'])) { + $downloadLinks[] = [ + 'type' => $queryFDT['FileType'], + 'file' => $queryFDT['FilePath'], + 'label' => '', + ]; + } else { + $downloadLinks[] = [ + 'type' => 'physiological_fdt_file', + 'file' => '', + 'label' => '', + ]; + } + return $downloadLinks; + } + + /** + * Get JS Dependencies + * + * @return array of extra JS files that this page depends on + */ + function getJSDependencies() + { + $depends = parent::getJSDependencies(); + $factory = \NDB_Factory::singleton(); + $baseurl = $factory->settings()->getBaseURL(); + $depends = array_merge( + $depends, + [ + $baseurl + . '/electrophysiology_browser/js/electrophysiologySessionView.js', + ] + ); + return $depends; + } + + /** + * Get CSS Dependencies + * + * @return array + */ + function getCSSDependencies() + { + $depends = parent::getCSSDependencies(); + $factory = \NDB_Factory::singleton(); + $baseurl = $factory->settings()->getBaseURL(); + $depends = array_merge( + $depends, + [ + $baseurl + . '/electrophysiology_browser/css/electrophysiology_browser.css', + ] + ); + return $depends; + } + + /** + * Generate a breadcrumb trail for this page. + * + * @return \LORIS\BreadcrumbTrail + */ + public function getBreadcrumbs(): \LORIS\BreadcrumbTrail + { + return new \LORIS\BreadcrumbTrail( + new \LORIS\Breadcrumb( + 'Electrophysiology Browser', + '/electrophysiology_browser' + ), + new \LORIS\Breadcrumb( + 'View Session', + "/electrophysiology_browser/sessions/$this->sessionID" + ) + ); + } +} diff --git a/php/split_data.class.inc b/php/split_data.class.inc new file mode 100644 index 00000000000..529fc7d5d66 --- /dev/null +++ b/php/split_data.class.inc @@ -0,0 +1,60 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class Split_Data extends \NDB_Page +{ + /** + * Handle how to operate all the files. + * GET method gets a file. + * + * @param ServerRequestInterface $request The incoming PSR7 request + * + * @return ResponseInterface The outgoing PSR7 response + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $user = \NDB_Factory::singleton()->user(); + + switch ($request->getMethod()) { + case 'POST': + if (!($user->hasPermission('electrophysiology_browser_view_allsites') + || ($user->hasPermission('electrophysiology_browser_view_site') + && $user->hasStudySite())) + ) { + return (new \LORIS\Http\Response\JSON\Unauthorized()); + } + + // Parse POST request body. + $values = (array)$request->getParsedBody(); + + if (!isset($values['physioFileID']) + || !isset($values['splitIndex']) + ) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + } + + return new \LORIS\Http\Response\JSON\OK( + (new ElectrophysioFile(intval($values['physioFileID']))) + ->getSplitData(intval($values['splitIndex'])) + ); + default: + return (new \LORIS\Http\Response\JSON\MethodNotAllowed( + ["POST"] + )); + } + } +} \ No newline at end of file diff --git a/test/TestPlan.md b/test/TestPlan.md new file mode 100644 index 00000000000..5f2a3ac1a37 --- /dev/null +++ b/test/TestPlan.md @@ -0,0 +1,40 @@ +## Electrophysiology Browser test plan + +### A. Electrophysiology Browser front page +1. User can load Electrophysiology Browser module front page if and only if user has either permission: + * `electrophysiology_browser_view_site` : _"View all-sites Electrophysiology Browser pages" [Automated Testing] + * `electrophysiology_browser_view_allsites` : _"View own site Electrophysiology Browser pages"_[Automated Testing] +2. User can see other sites Electrophysiology datasets if and only if user has permission `electrophysiology_browser_view_allsites`. User can see only own-site datasets if and only if user has permission `electrophysiology_browser_view_site`. +3. Test that all Filters work. [Automated Testing] +4. Test Clear Filters button. [Automated Testing] +5. Test column table is sortable by headers. [Automated Testing] +6. Test that Links work and point to correct dataset (raw/derivative). [Manual Testing] + +### B. Subpage: Sessions + +7. User can view a session from any site if the user has `electrophysiology_browser_view_allsites` permissions. User can see only own-site session if the user has permission `electrophysiology_browser_view_site`. [Automated Testing] +8. User can view only own-project sessions if they have either `electrophysiology_browser_view_site` or `electrophysiology_browser_view_allsites` permissions. [Automated Testing] +9. Sidebar: Navigation links work. [Automated Testing] +10. Data table display: information displayed looks decently laid out, not garbled. +11. Click each "Download" button (there should be 6). Check: Does the download button work? Does the file that is downloaded have greater than 0kb size? Is a different file downloaded by each button? + * Check that if a session does not have annotation files, the `Annotations` download button is not clickable + * Check that if the session has annotation files, the `Annotations` download button is clickable and downloads the proper files +12. Test Breadcrumb link back to Electrophysiology Browser. [Automated Testing] +13. Test that if changes have been made to the session's annotations, the downloaded annotation files are correctly updated to match [Manual Testing] + +### C. Visualization + +13. Follow the [module README extra installation steps](../README.md#installation-requirements-to-use-the-visualization-features) +and make sure the [Signal Viewer panel] displays correctly on the screen. (Documentation: see [react-series-data-viewer README](../jsx/react-series-data-viewer/README.md#user-manual)) +14. Delete modules/electrophysiology_browser/jsx/react-series-data-viewer/src/protocol-buffers/chunk_pb.js and revert the change made +to modules/electrophysiology_browser/jsx/react-series-data-viewer/package.json to simulate an environement for which the extra installation steps have not been run yet. +Make sure `make dev` runs without failing, and that except the Signal Viewer panel, all the other components in the page display well. +15. Temporarily desactivate an entry in `physiological_parameter_file` +for a ParameterTypeID IN (SELECT ParameterTypeID from parameter_type WHERE Name = 'electrophysiology_chunked_dataset_path') +and a chosen PhysiologicalFileID to simulate an environment for which the visualization components are not loaded. +Load the corresponding session page and make sure that except the Signal Viewer panel, the rest of the page displays well, either with or without the extra installation steps. + +_For extra credit: Verify LORIS Menu permissions_ +User can view the top-level LORIS Menu _Electrophysiology_ and Menu item : _Electrophysiology Browser_ if and only if user has either permission: + * `electrophysiology_browser_view_site` : _"View all-sites Electrophysiology Browser pages"_ + * `electrophysiology_browser_view_allsites` : _"View own site Electrophysiology Browser pages"_ diff --git a/test/electrophysiologyBrowserTest.php b/test/electrophysiologyBrowserTest.php new file mode 100644 index 00000000000..c1963585358 --- /dev/null +++ b/test/electrophysiologyBrowserTest.php @@ -0,0 +1,566 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ +use Facebook\WebDriver\WebDriverBy; +require_once __DIR__ . "/../../../test/integrationtests/" + . "LorisIntegrationTestWithCandidate.class.inc"; + +/** + * Implements automated integration tests for Electrophysiology Browser within Loris + * + * @category Test + * @package Loris + * @author Alexandra Livadas + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ +class EEGBrowserIntegrationTest extends LorisIntegrationTestWithCandidate +{ + + //Filter options + static $site = 'select[name="site"]'; + static $PSCID = 'input[name="PSCID"]'; + static $DCCID = 'input[name="DCCID"]'; + static $project = 'select[name="project"]'; + static $visitLabel = 'input[name="visitLabel"]'; + + static $display = ".table-header > div > div > div:nth-child(1)"; + static $clearFilter = ".nav-tabs a"; + static $PSCIDHeader = "#dynamictable > thead > tr > th:nth-child(3)"; + static $DCCIDHeader = "#dynamictable > thead > tr > th:nth-child(4)"; + static $firstElement = "#dynamictable > tbody > tr:nth-child(1)"; + + static $allLink = "tbody > tr:nth-child(1) > td:nth-child(9) > a:last-child"; + static $rawLink = "tbody > tr:nth-child(1) > td:nth-child(9) > a:nth-child(1)"; + + static $prevLink = "#nav_previous"; + static $nextLink = "#nav_next"; + static $breadcrumbLink = "#bc2 > a:nth-child(2)"; + + /** + * Setup and insert testing data + * + * @return void + */ + function setUp(): void + { + parent::setUp(); + $this->DB->insert( + "psc", + [ + 'CenterID' => '253', + 'Name' => 'Test Site AOL', + 'Alias' => 'AOL', + 'MRI_alias' => 'Y', + ] + ); + $this->DB->insert( + "candidate", + [ + 'CandID' => '000001', + 'PSCID' => 'DCC0001', + 'RegistrationCenterID' => 253, + 'RegistrationProjectID' => 2, + 'Active' => 'Y', + 'Entity_type' => 'Human', + ] + ); + $this->DB->insert( + 'session', + [ + 'ID' => '999997', + 'CandID' => '000001', + 'Visit_label' => 'Test0', + 'CenterID' => 253, + 'ProjectID' => 2, + 'Scan_done' => 'Y', + 'Current_stage' => 'Visit', + 'Visit' => 'In Progress', + ] + ); + $this->DB->insert( + "ImagingFileTypes", + [ + 'type' => 'testType', + 'description' => 'test%(EEG)' + ] + ); + $this->DB->insert( + "ImagingFileTypes", + [ + 'type' => 'testType2', + 'description' => 'test2%(EEG)' + ] + ); + $this->DB->insert( + "physiological_output_type", + [ + 'PhysiologicalOutputTypeID' => 22, + 'OutputTypeName' => 'test' + ] + ); + $this->DB->insert( + "physiological_output_type", + [ + 'PhysiologicalOutputTypeID' => 23, + 'OutputTypeName' => 'test2' + ] + ); + $this->DB->insert( + "physiological_file", + [ + 'SessionID' => '999999', + 'PhysiologicalOutputTypeID' => 22, + 'FileType' => 'testType' + ] + ); + $this->DB->insert( + "physiological_file", + [ + 'SessionID' => '999997', + 'PhysiologicalOutputTypeID' => 23, + 'FileType' => 'testType2' + ] + ); + } + + /** + * Teardown and delete testing data + * + * @return void + */ + function tearDown() : void + { + $this->DB->delete( + "physiological_file", + [ + 'SessionID' => '999999', + 'PhysiologicalOutputTypeID' => 22, + ] + ); + $this->DB->delete( + "physiological_file", + [ + 'SessionID' => '999997', + 'PhysiologicalOutputTypeID' => 23, + ] + ); + $this->DB->delete( + 'session', + [ + 'ID' => 999997, + 'CandID' => 000001 + ] + ); + $this->DB->delete( + "candidate", + [ + 'CandID' => '000001', + 'PSCID' => 'DCC0001', + ] + ); + $this->DB->delete( + "psc", + ['CenterID' => '253'] + ); + + $this->DB->delete( + "physiological_output_type", + [ + 'PhysiologicalOutputTypeID' => 22, + 'OutputTypeName' => 'test' + ] + ); + $this->DB->delete( + "physiological_output_type", + [ + 'PhysiologicalOutputTypeID' => 23, + 'OutputTypeName' => 'test2' + ] + ); + $this->DB->delete( + "ImagingFileTypes", + [ + 'type' => 'testType', + 'description' => 'test%(EEG)' + ] + ); + $this->DB->delete( + "ImagingFileTypes", + [ + 'type' => 'testType2', + 'description' => 'test2%(EEG)' + ] + ); + parent::tearDown(); + } + + /** + * Tests that the page loads + * + * @return void + */ + function testEEGBrowserDoesPageLoad() + { + $this->safeGet($this->url . "/electrophysiology_browser/"); + $bodyText + = $this->safeFindElement(WebDriverBy::cssSelector("body")) + ->getText(); + $this->assertStringContainsString( + "Electrophysiology Browser", + $bodyText + ); + } + + /** + * Test that the page loads with the given permissions + * + * @return void + */ + function testEEGBrowserPermissions() + { + $this->checkPagePermissions( + '/electrophysiology_browser/?', + [ + 'electrophysiology_browser_view_allsites', + 'electrophysiology_browser_view_site' + ], + "Electrophysiology Browser" + ); + } + + /** + * Test that the EEG Browser still loads if the user has a different site but + * has 'electrophysiology_browser_view_allsites' permissions + * + * @return void + */ + function testEEGBrowserWithSitePermissions() + { + $this->resetStudySite(); + $this->changeStudySite(); + $this->setupPermissions(['electrophysiology_browser_view_allsites']); + $this->safeGet($this->url . "/electrophysiology_browser/?"); + $bodyText + = $this->safeFindElement(WebDriverBy::cssSelector("body")) + ->getText(); + $this->assertStringNotContainsString( + "You do not have access to this page.", + $bodyText + ); + $this->resetPermissions(); + $this->resetStudySite(); + } + + /** + * Test all filters on the main page. Test that the Clear Filter works. + * + * @return void + */ + function testFilters() + { + $this->setupPermissions(['electrophysiology_browser_view_site']); + $this->safeGet($this->url . "/electrophysiology_browser/"); + $this->_filterTest( + self::$PSCID, + self::$display, + self::$clearFilter, + 'TST0001', + "1 rows" + ); + $this->_filterTest( + self::$PSCID, + self::$display, + self::$clearFilter, + 'TST0002', + "0 rows" + ); + $this->_filterTest( + self::$DCCID, + self::$display, + self::$clearFilter, + '900000', + "1 rows" + ); + $this->_filterTest( + self::$DCCID, + self::$display, + self::$clearFilter, + '900001', + "0 rows" + ); + $this->_filterTest( + self::$site, + self::$display, + self::$clearFilter, + 'Data Coordinating Center', + "1 rows" + ); + $this->_filterOptionsTest( + self::$site, + 'Montreal', + false + ); + $this->_filterTest( + self::$project, + self::$display, + self::$clearFilter, + 'Pumpernickel', + "1 rows" + ); + $this->_filterOptionsTest( + self::$project, + 'Challah', + false + ); + $this->_filterTest( + self::$visitLabel, + self::$display, + self::$clearFilter, + 'Test', + "1 rows" + ); + $this->_filterTest( + self::$visitLabel, + self::$display, + self::$clearFilter, + 'V2', + "0 rows" + ); + } + + /** + * Test that the column headers at the top of the table + * sort the table data when clicked + * + * @return void + */ + function testEEGBrowserSortableByColumn() + { + $this->safeGet($this->url . "/electrophysiology_browser/?"); + + //Test PSCID Header + $this->safeClick( + WebDriverBy::cssSelector(self::$PSCIDHeader) + ); + + $firstEntry = $this->safeFindElement( + WebDriverBy::cssSelector("#dynamictable > tbody > tr:nth-child(1)") + )->getText(); + $this->assertStringContainsString( + "OTT166", + $firstEntry + ); + $this->safeClick( + WebDriverBy::cssSelector(self::$PSCIDHeader) + ); + $firstEntry = $this->safeFindElement( + WebDriverBy::cssSelector(self::$firstElement) + )->getText(); + $this->assertStringContainsString("TST0001", $firstEntry); + + //Test DCCID Header + $firstEntry = $this->safeFindElement( + WebDriverBy::cssSelector(self::$firstElement) + )->getText(); + $this->assertStringContainsString("900000", $firstEntry); + + $this->safeClick( + WebDriverBy::cssSelector(self::$DCCIDHeader) + ); + + $firstEntry = $this->safeFindElement( + WebDriverBy::cssSelector(self::$firstElement) + )->getText(); + $this->assertStringContainsString("900000", $firstEntry); + } + + /** + * Test that the all types link takes you to a Sessions page + * + * @return void + */ + function testAllTypesLink() + { + $this->safeGet($this->url . "/electrophysiology_browser/"); + $link = self::$allLink; + $this->safeClick(WebDriverBy::cssSelector($link)); + $bodyText = $this->safeFindElement( + WebDriverBy::cssSelector("body") + )->getText(); + $this->assertStringContainsString( + "View Session", + $bodyText + ); + } + + /** + * Test that the raw link takes you to a Sessions page + * + * @return void + */ + function testRawLink() + { + $this->safeGet($this->url . "/electrophysiology_browser/"); + $link = self::$rawLink; + $this->safeClick(WebDriverBy::cssSelector($link)); + $bodyText = $this->safeFindElement( + WebDriverBy::cssSelector("body") + )->getText(); + $this->assertStringContainsString( + "View Session", + $bodyText + ); + } + + /** + * Test that the sessions page loads + * + * @return void + */ + function testSessionsDoesPageLoad() + { + $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $bodyText + = $this->safeFindElement(WebDriverBy::cssSelector("body")) + ->getText(); + $this->assertStringContainsString("Electrophysiology Browser", $bodyText); + } + + /** + * Test that the Sessions page loads with EEG permissions + * + * @return void + */ + function testSessionsWithPermissions() + { + $this->checkPagePermissions( + '/electrophysiology_browser/sessions/999999', + [ + 'electrophysiology_browser_view_allsites', + 'electrophysiology_browser_view_site' + ], + "Electrophysiology Browser" + ); + } + + /** + * Test that the Sessions page does not load if the user does + * not have the same site. + * + * @return void + */ + function testSessionsSitePermissions() + { + $this->resetStudySite(); + $this->changeStudySite(); + + $this->setupPermissions(['electrophysiology_browser_view_site']); + $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $bodyText + = $this->safeFindElement(WebDriverBy::cssSelector("body")) + ->getText(); + $this->assertStringContainsString( + "You do not have access to this page.", + $bodyText + ); + $this->resetPermissions(); + + $this->setupPermissions(['electrophysiology_browser_view_allsites']); + $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $bodyText + = $this->safeFindElement(WebDriverBy::cssSelector("body")) + ->getText(); + $this->assertStringNotContainsString( + "You do not have access to this page.", + $bodyText + ); + $this->resetPermissions(); + + $this->resetStudySite(); + } + + /** + * Test that the Sessions page does not load if the user + * does not have the same project. + * + * @return void + */ + function testSessionsProjectPermissions() + { + $this->resetUserProject(); + $this->changeUserProject(); + + $this->setupPermissions(['electrophysiology_browser_view_allsites']); + $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $bodyText + = $this->safeFindElement(WebDriverBy::cssSelector("body")) + ->getText(); + $this->assertStringContainsString( + "You do not have access to this page.", + $bodyText + ); + $this->resetPermissions(); + + $this->resetUserProject(); + } + + /** + * Test that the "Previous" and "Next" links navigate to other + * sessions pages. + * + * @return void + */ + function testSessionsNavigation() + { + $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $link = self::$nextLink; + $this->safeClick(WebDriverBy::cssSelector($link)); + + $bodyText = $this->safeFindElement( + WebDriverBy::cssSelector("body") + )->getText(); + $this->assertStringContainsString( + "View Session", + $bodyText + ); + $this->assertStringContainsString("167", $this->webDriver->getCurrentURL()); + + $this->safeClick(WebDriverBy::cssSelector(self::$prevLink)); + $this->assertStringContainsString("166", $this->webDriver->getCurrentURL()); + } + + /** + * Test that the breadcrumbs link returns + * to the main EEG page + * + * @return void + */ + function testSessionsBreadcrumbLink() + { + $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $this->safeClick(WebDriverBy::cssSelector(self::$breadcrumbLink)); + + $bodyText = $this->safeFindElement( + WebDriverBy::cssSelector("body") + )->getText(); + $this->assertStringNotContainsString("View Session", $bodyText); + $this->assertStringContainsString( + "/electrophysiology_browser", + $this->webDriver->getCurrentURL() + ); + $this->assertStringNotContainsString( + "sessions", + $this->webDriver->getCurrentURL() + ); + } +} From 589a7988b6887a19d93a1b43c1bc3e5f7af43748 Mon Sep 17 00:00:00 2001 From: jesscall Date: Fri, 19 Nov 2021 16:12:25 -0500 Subject: [PATCH 002/126] [Overrides] Adding overrides to EEG Browser for annotation support and filtered epoch bugfix --- jsx/components/DownloadPanel.js | 5 +- jsx/electrophysiologySessionView.js | 16 ++- .../src/eeglab/EEGLabSeriesProvider.tsx | 59 +++++++-- .../src/series/components/AnnotationForm.tsx | 112 +++++++++++++++++- .../src/series/components/SeriesRenderer.tsx | 32 ++++- .../src/series/store/types.tsx | 8 ++ php/annotations.class.inc | 36 +++++- php/models/electrophysioannotations.class.inc | 15 ++- php/sessions.class.inc | 20 ++-- 9 files changed, 265 insertions(+), 38 deletions(-) diff --git a/jsx/components/DownloadPanel.js b/jsx/components/DownloadPanel.js index 85527b5f94d..facf5ca5906 100644 --- a/jsx/components/DownloadPanel.js +++ b/jsx/components/DownloadPanel.js @@ -91,7 +91,10 @@ class DownloadPanel extends Component { >Not Available : { chunksURL, epochsURL, electrodesURL, + // ##################### EEGNET OVERRIDE START ################## // + annotations, + // ##################### EEGNET OVERRIDE END ################## // limit, } = props; @@ -106,22 +115,50 @@ class EEGLabSeriesProvider extends Component { this.store.dispatch(setInterval(timeInterval)); } } - ).then(() => Promise.race(racers(fetchText, epochsURL)).then((text) => { + ) + // ##################### EEGNET OVERRIDE START ################## // + .then(() => Promise.race(racers(fetchText, epochsURL)) + .then((text) => { if (!(typeof text.json === 'string' || text.json instanceof String)) return; + return tsvParse( + text.json.replace('trial_type', 'label')) + .map(({ onset, duration, label }, i) => ({ + onset: parseFloat(onset), + duration: parseFloat(duration), + type: 'Event', + label: label, + comment: null, + channels: 'all', + })); + }).then(events => { + let epochs = events; + annotations.instances.map(instance => { + const label = annotations.labels + .find(label => + label.AnnotationLabelID == instance.AnnotationLabelID + ).LabelDescription; + epochs.push({ + onset: parseFloat(instance.Onset), + duration: parseFloat(instance.Duration), + type: 'Annotation', + label: label, + comment: null, + channels: 'all', + }); + }); + return epochs; + }).then(epochs => { this.store.dispatch( - setEpochs(tsvParse( - text.json.replace('trial_type', 'label')) - .map(({onset, duration, label}, i) => ({ - onset: parseFloat(onset), - duration: parseFloat(duration), - type: 'Event', - label: label, - comment: null, - channels: 'all', - })) + setEpochs( + epochs + .flat() + .sort(function(a, b) { + return a.onset - b.onset; + }) ) ); + // ##################### EEGNET OVERRIDE END ################## // this.store.dispatch(updateFilteredEpochs()); }) ); diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index cce1762d5b1..77f7f15939a 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -6,6 +6,9 @@ import {setRightPanel} from '../store/state/rightPanel'; import * as R from 'ramda'; import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; import {RootState} from '../store'; +// ##################### EEGNET OVERRIDE START ################## // +import {setEpochs} from '../store/state/dataset'; +// ##################### EEGNET OVERRIDE END ################## // type CProps = { timeSelection?: [number, number], @@ -30,6 +33,11 @@ const AnnotationForm = ({ }: CProps) => { const [startEvent = '', endEvent = ''] = timeSelection || []; let [event, setEvent] = useState([startEvent, endEvent]); + // ##################### EEGNET OVERRIDE START ################## // + let [label, setLabel] = useState(''); + let [comment, setComment] = useState(''); + let [isSubmitted, setIsSubmitted] = useState(false); + // ##################### EEGNET OVERRIDE END ################## // useEffect(() => { const [startEvent = '', endEvent = ''] = timeSelection || []; @@ -44,6 +52,99 @@ const AnnotationForm = ({ && event[1] >= interval[0] && event[1] <= interval[1] ); + // ##################### EEGNET OVERRIDE START ################## // + const handleLabelChange = (e) => { + setLabel(e.target.value); + }; + const handleCommentChange = (e) => { + setComment(e.target.value); + }; + const handleSubmit = () => { + setIsSubmitted(true); + }; + + useEffect(() => { + // only proceed if isSubmitted === true + if (!isSubmitted) { + return; + } + + // Validate inputs + if (!label || !comment || !event[0] || !event[1]) { + // TODO: Display message + setIsSubmitted(false); + return; + } + + const url = window.location.origin + + '/electrophysiology_browser/annotations/'; + + // get duration of annotation + let startTime = event[0]; + let endTime = event[1]; + if (typeof startTime === 'string') { + startTime = parseInt(startTime); + } + if (typeof endTime === 'string') { + endTime = parseInt(endTime); + } + const duration = endTime - startTime; + + // get sessionID from path + const sessionID = window.location.pathname.split('/')[3]; + + // set body + // instance_id = null for new annotations, + // should be updated when we implement annotation editing + const body = { + sessionID: sessionID, + instance_id: null, + instance: { + onset: startTime, + duration: duration, + label_name: label, + label_description: label, + channels: 'all', + description: comment, + }, + // TODO: Figure out data that should go here + metadata: { + description: 'An annotation', + sources: 'LORIS', + author: 'LORIS user', + }, + }; + + const newAnnotation : EpochType = { + onset: startTime, + duration: duration, + type: 'Annotation', + label: label, + comment: comment, + channels: 'all' + }; + + fetch(url, { + method: 'POST', + credentials: 'same-origin', + body: JSON.stringify(body), + }).then(response => { + if (response.ok) { + setIsSubmitted(false); + epochs.push(newAnnotation); + setEpochs( + epochs + .sort(function(a, b) { + return a.onset - b.onset; + }) + ); + } + }).catch(error => { + console.log(error); + }) + }, [isSubmitted]); + // ##################### EEGNET OVERRIDE END ################## // + return (
- @@ -158,9 +259,10 @@ const AnnotationForm = ({ className="form-control" id="comment" rows={3} + onChange={handleCommentChange} >
-
@@ -198,5 +300,11 @@ export default connect( dispatch, updateActiveEpoch ), + // ##################### EEGNET OVERRIDE START ################## // + setEpochs: R.compose( + dispatch, + setEpochs + ), + // ##################### EEGNET OVERRIDE END ################## // }) )(AnnotationForm); diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 8db31c3a183..912443cc2b1 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -175,15 +175,20 @@ const SeriesRenderer: FunctionComponent = ({ }; const EpochsLayer = () => { - const fEpochs = [...Array(epochs.length).keys()].filter((i) => + // ##################### EEGNET OVERRIDE START ################## // + // Override: Delete Enclosed Code + /*const fEpochs = [...Array(epochs.length).keys()].filter((i) => epochs[i].onset + epochs[i].duration > interval[0] && epochs[i].onset < interval[1] - ); + );*/ + // ##################### EEGNET OVERRIDE END ################## // return ( - {fEpochs.length < MAX_RENDERED_EPOCHS && - fEpochs.map((index) => { + {// ##################### EEGNET OVERRIDE START ################## // + filteredEpochs.length < MAX_RENDERED_EPOCHS && + filteredEpochs.map((index) => { + // ##################### EEGNET OVERRIDE END ################## // return ( = ({ } } + { + // ##################### EEGNET OVERRIDE START ################## // + + // ##################### EEGNET OVERRIDE END ################## // + }
getQueryParams(); + // ##################### EEGNET OVERRIDE START ################## // + /*$parameters = $request->getQueryParams();*/ + // ##################### EEGNET OVERRIDE END ################## // $factory = \NDB_Factory::singleton(); $user = $factory->user(); $db = $factory->database(); switch ($request->getMethod()) { case 'GET': + // ##################### EEGNET OVERRIDE START ################## // + $parameters = $request->getQueryParams(); + // ##################### EEGNET OVERRIDE END ################## // $sessionID = $db->pselectOne( 'SELECT SessionID FROM physiological_file @@ -78,6 +83,9 @@ class Annotations extends \NDB_Page $request->withAttribute('filename', $filename) ); case 'DELETE': + // ##################### EEGNET OVERRIDE START ################## // + $parameters = $request->getQueryParams(); + // ##################### EEGNET OVERRIDE END ################## // if (!$user->hasPermission('electrophysiology_browser_edit_annotations') ) { return (new \LORIS\Http\Response\JSON\Unauthorized()); @@ -94,22 +102,44 @@ class Annotations extends \NDB_Page return (new \LORIS\Http\Response\JSON\OK()); case 'POST': + // ##################### EEGNET OVERRIDE START ################## // + $parameters = json_decode((string) $request->getBody(), true); + // ##################### EEGNET OVERRIDE END ################## // if (!$user->hasPermission('electrophysiology_browser_edit_annotations') ) { return (new \LORIS\Http\Response\JSON\Unauthorized()); } - if (!isset($parameters['physioFileID'])) { + // ##################### EEGNET OVERRIDE START ################## // + /*if (!isset($parameters['physioFileID'])) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + }*/ + + if (!isset($parameters['sessionID'])) { return (new \LORIS\Http\Response\JSON\BadRequest()); } + $physioFileID = $db->pselectOne( + 'SELECT PhysiologicalFileID + FROM physiological_file + WHERE SessionID=:SID', + ['SID' => $parameters['sessionID']] + ); + + if (!isset($physioFileID)) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + } + // ##################### EEGNET OVERRIDE END ################## // + $instance_data = $parameters['instance']; $metadata = $parameters['metadata']; $instance_id = $parameters['instance_id'] ?? null; $parameter_id = $parameters['parameter_id'] ?? null; - (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) + // ##################### EEGNET OVERRIDE START ################## // + (new ElectrophysioAnnotations(intval($physioFileID))) ->update($instance_data, $metadata, $instance_id, $parameter_id); + // ##################### EEGNET OVERRIDE END ################## // return (new \LORIS\Http\Response\JSON\OK()); default: diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 551fa1a6616..77376c2e1b6 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -75,16 +75,20 @@ class ElectrophysioAnnotations * * @param array $instance_data Instance data * @param array $metadata Metadata - * @param int $instance_id InstanceID - * @param int $parameter_id ParameterID + * // ##################### EEGNET OVERRIDE START ################## // + * @param int|null $instance_id InstanceID + * @param int|null $parameter_id ParameterID + * // ##################### EEGNET OVERRIDE END ################## // * * @return void */ function update( array $instance_data, array $metadata, - int $instance_id, - int $parameter_id + // ##################### EEGNET OVERRIDE START ################## // + ?int $instance_id, + ?int $parameter_id + // ##################### EEGNET OVERRIDE END ################## // ): void { $factory = \NDB_Factory::singleton(); @@ -130,14 +134,15 @@ class ElectrophysioAnnotations 'Author' => $metadata['author'] ]; + // ##################### EEGNET OVERRIDE START ################## // $instance = [ 'Onset' => $instance_data['onset'], 'Duration' => $instance_data['duration'], 'AnnotationLabelID' => $labelID, 'Channels' => $instance_data['channels'], - 'AbsoluteTime' => $instance_data['abs_time'], 'Description' => $instance_data['description'] ]; + // ##################### EEGNET OVERRIDE END ################## // //Insert new files and data into DB if (empty($annotationFID)) { diff --git a/php/sessions.class.inc b/php/sessions.class.inc index c4070a623b3..5411da65708 100644 --- a/php/sessions.class.inc +++ b/php/sessions.class.inc @@ -461,24 +461,22 @@ class Sessions extends \NDB_Page $fileSummary['downloads'] = $this->getDownloadLinks($physioFileObj); $fileSummary['chunks_urls'] = $physioFileObj->getChunksURLs(); - $fileOutput = $db->pselectone( + // ##################### EEGNET OVERRIDE START ################## // + /*$fileOutput = $db->pselectone( 'SELECT pot.OutputTypeName FROM physiological_output_type pot INNER JOIN physiological_file AS pf ON pf.PhysiologicalFileID=:PFID AND pf.PhysiologicalOutputTypeID=pot.PhysiologicalOutputTypeID', ['PFID' => $physioFileID] - ); - - //Get the annotation data if the output type is derivative - //Get the annotation data if the output type is derivative - if (strcmp($fileOutput, 'derivative') == 0) { - $annotations = new ElectrophysioAnnotations( - intval($physioFileID) - ); - $fileSummary['annotations'] = $annotations->getData(); - } + );*/ + // Get the annotation data + $annotations = new ElectrophysioAnnotations( + intval($physioFileID) + ); + $fileSummary['annotations'] = $annotations->getData(); + // ##################### EEGNET OVERRIDE END ################## // $fileSummary['output_type'] = $fileOutput; $fileSummary['splitData'] = $physioFileObj->getSplitData(0); From 92a288bc2e6a3c05871656ba429e4134574df223 Mon Sep 17 00:00:00 2001 From: jesscall Date: Tue, 23 Nov 2021 13:02:45 -0500 Subject: [PATCH 003/126] amend props annotationForm --- .../src/series/components/AnnotationForm.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 77f7f15939a..4ab6e6a869e 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -16,6 +16,9 @@ type CProps = { filteredEpochs: number[], setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, + // ##################### EEGNET OVERRIDE START ################## // + setEpochs: (_: EpochType[]) => void, + // ##################### EEGNET OVERRIDE END ################## // toggleEpoch: (_: number) => void, updateActiveEpoch: (_: number) => void, interval: [number, number], @@ -27,6 +30,9 @@ const AnnotationForm = ({ filteredEpochs, setTimeSelection, setRightPanel, + // ##################### EEGNET OVERRIDE START ################## // + setEpochs, + // ##################### EEGNET OVERRIDE END ################## // toggleEpoch, updateActiveEpoch, interval, From 5308237845007d652700b432fbb5476a59cc2545 Mon Sep 17 00:00:00 2001 From: jesscall Date: Fri, 3 Dec 2021 11:58:27 -0500 Subject: [PATCH 004/126] update package.json to include protobuf --- jsx/react-series-data-viewer/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jsx/react-series-data-viewer/package.json b/jsx/react-series-data-viewer/package.json index f1feca2fbdb..ce869505d17 100644 --- a/jsx/react-series-data-viewer/package.json +++ b/jsx/react-series-data-viewer/package.json @@ -35,6 +35,9 @@ "@types/react-dom": "^16.9.9", "@types/react-redux": "7.1.16" }, + "scripts": { + "postinstall": "protoc protocol-buffers/chunk.proto --js_out=import_style=commonjs,binary:./src/" + }, "license": "MIT", "repository": "https://github.com/aces/react-series-data-viewer" } From 42cb9f5ac539f03f6b37100f370f8610d7661499 Mon Sep 17 00:00:00 2001 From: jesscall Date: Mon, 6 Dec 2021 12:36:15 -0500 Subject: [PATCH 005/126] Amend metadata to include current user as annotation author --- .../src/series/components/AnnotationForm.tsx | 6 ------ php/annotations.class.inc | 10 +++++++++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 4ab6e6a869e..59ef63c1883 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -113,12 +113,6 @@ const AnnotationForm = ({ channels: 'all', description: comment, }, - // TODO: Figure out data that should go here - metadata: { - description: 'An annotation', - sources: 'LORIS', - author: 'LORIS user', - }, }; const newAnnotation : EpochType = { diff --git a/php/annotations.class.inc b/php/annotations.class.inc index 9baf0c75304..7d7963b49a0 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -132,7 +132,15 @@ class Annotations extends \NDB_Page // ##################### EEGNET OVERRIDE END ################## // $instance_data = $parameters['instance']; - $metadata = $parameters['metadata']; + // ##################### EEGNET OVERRIDE START ################## // + // $metadata = $parameters['metadata']; + // TODO: Figure out a better description modeled on other derivatives + $metadata = [ + 'description' => 'An annotation', + 'sources' => 'EEGNet LORIS', + 'author' => $user->getFullname() + ]; + // ##################### EEGNET OVERRIDE END ################## // $instance_id = $parameters['instance_id'] ?? null; $parameter_id = $parameters['parameter_id'] ?? null; From 0952b40275573a71e7243a9b8ae1e3a5eada5593 Mon Sep 17 00:00:00 2001 From: jesscall Date: Mon, 6 Dec 2021 12:43:53 -0500 Subject: [PATCH 006/126] fixed typo in annotationtsv header --- php/models/electrophysioannotations.class.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 77376c2e1b6..9cabea6b898 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -298,7 +298,7 @@ class ElectrophysioAnnotations ); $tsv_entries = [ - 'onset', 'duration', 'label', 'channels', 'aboslute_time', 'description' + 'onset', 'duration', 'label', 'channels', 'absolute_time', 'description' ]; $tsv = $db->pselect( From 4ea55ce9ff657ea7eaa0fec06c5c5bf33d1e0698 Mon Sep 17 00:00:00 2001 From: Jessica Callegaro <34260251+jesscall@users.noreply.github.com> Date: Tue, 7 Dec 2021 08:52:27 -0500 Subject: [PATCH 007/126] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9ae4d1334ef..d5a65bf3098 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ js/* -jsx/react-series-data-viewer/src/protocol-buffers/chunk_pb.js From ae0b22612d48b2b644c9d9cf3d8f58f200aac8d7 Mon Sep 17 00:00:00 2001 From: jesscall Date: Tue, 7 Dec 2021 15:22:02 -0500 Subject: [PATCH 008/126] Added annotation labels for sara --- .../src/series/components/AnnotationForm.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 59ef63c1883..b1e5407cc42 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -228,6 +228,8 @@ const AnnotationForm = ({ - + From c909fc6a6cdb13f895c5966f6df49e5dec6ff2d2 Mon Sep 17 00:00:00 2001 From: jesscall Date: Wed, 5 Jan 2022 16:06:41 -0500 Subject: [PATCH 010/126] started improvements on annatoationForm --- .../src/series/components/AnnotationForm.tsx | 246 ++++++++++-------- 1 file changed, 142 insertions(+), 104 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 4663ab647ea..174e4f8de49 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -1,4 +1,4 @@ -import React, {useEffect, useState} from 'react'; +import React, { Component, useEffect, useState } from 'react'; import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect, DefaultRootState} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; @@ -7,7 +7,9 @@ import * as R from 'ramda'; import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; import {RootState} from '../store'; // ##################### EEGNET OVERRIDE START ################## // -import {setEpochs} from '../store/state/dataset'; +import { setEpochs } from '../store/state/dataset'; +import { NumericElement, SelectElement, TextareaElement } from './Form'; +import swal from 'sweetalert2'; // ##################### EEGNET OVERRIDE END ################## // type CProps = { @@ -40,7 +42,7 @@ const AnnotationForm = ({ const [startEvent = '', endEvent = ''] = timeSelection || []; let [event, setEvent] = useState([startEvent, endEvent]); // ##################### EEGNET OVERRIDE START ################## // - let [label, setLabel] = useState(''); + let [label, setLabel] = useState(null); let [comment, setComment] = useState(''); let [isSubmitted, setIsSubmitted] = useState(false); // ##################### EEGNET OVERRIDE END ################## // @@ -59,16 +61,60 @@ const AnnotationForm = ({ ); // ##################### EEGNET OVERRIDE START ################## // - const handleLabelChange = (e) => { - setLabel(e.target.value); + const handleStartTimeChange = (id, val) => { + const value = parseInt(val); + setEvent([value, event[1]]); + + if (validate([value, event[1]])) { + let endTime = event[1]; + if (typeof endTime === 'string'){ + endTime = parseInt(endTime); + } + setTimeSelection( + [ + value || null, + endTime || null, + ] + ); + } + } + + const handleEndTimeChange = (name, val) => { + const value = parseInt(val); + setEvent([event[0], value]); + + if (validate([event[0], value])) { + let startTime = event[0]; + if (typeof startTime === 'string'){ + startTime = parseInt(startTime); + } + setTimeSelection( + [ + startTime || null, + value + ] + ); + } + } + + const handleLabelChange = (name, value) => { + setLabel(value); }; - const handleCommentChange = (e) => { - setComment(e.target.value); + const handleCommentChange = (name, value) => { + setComment(value); }; const handleSubmit = () => { setIsSubmitted(true); }; + const handleReset = () => { + // Clear all fields + setEvent(['', '']); + setTimeSelection([null, null]); + setLabel(''); + setComment(''); + } + useEffect(() => { // only proceed if isSubmitted === true if (!isSubmitted) { @@ -76,8 +122,12 @@ const AnnotationForm = ({ } // Validate inputs - if (!label || !comment || !event[0] || !event[1]) { - // TODO: Display message + if (!label || !event[0] || !event[1]) { + swal.fire( + 'Warning', + 'Please fill out all required fields', + 'warning' + ); setIsSubmitted(false); return; } @@ -131,6 +181,7 @@ const AnnotationForm = ({ }).then(response => { if (response.ok) { setIsSubmitted(false); + epochs.push(newAnnotation); setEpochs( epochs @@ -138,12 +189,55 @@ const AnnotationForm = ({ return a.onset - b.onset; }) ); + + // Reset Form + handleReset(); + + // Disaply success message + swal.fire( + 'Success', + 'Annotation Added!', + 'success' + ); } }).catch(error => { console.log(error); + // Display error message + swal.fire( + 'Error', + 'Something went wrong!', + 'error' + ); }) }, [isSubmitted]); - // ##################### EEGNET OVERRIDE END ################## // + + const labelOptions = { + 'manual_exclusion': 'Exclusion Flag - Manual', + 'ambiguous': 'Ambiguous', + 'artifact': 'Artifact', + 'motion': 'Motion', + 'flux_jump': 'Flux jump', + 'line_noise': 'Line Noise', + 'muscle': 'Muscle', + 'epilepsy_interictal': 'Epilepsy interictal', + 'epilepsy_preictal': 'Epilepsy preictal', + 'epilepsy_seizure': 'Epilepsy seizure', + 'epilepsy_postictal': 'Epilepsy postictal', + 'epileptiform': 'Epileptiform', + 'epileptiform_single': 'Epileptiform single', + 'epileptiform_run': 'Epileptiform run', + 'eye_blink': 'Eye blink', + 'eye_movement': 'Eye movement', + 'eye_fixation': 'Eye fixation', + 'sleep_N1': 'Sleep N1', + 'sleep_N2': 'Sleep N2', + 'sleep_N3': 'Sleep N3', + 'sleep_REM': 'Sleep REM', + 'sleep_wake': 'Sleep wake', + 'sleep_spindle': 'Sleep spindle', + 'sleep_k-complex': 'Sleep k-complex', + 'scorelabeled': 'Score labeled' + } return (
-
- - { - const value = parseInt(e.target.value); - setEvent([value, event[1]]); - - if (validate([value, event[1]])) { - let endTime = event[1]; - if (typeof endTime === 'string'){ - endTime = parseInt(endTime); - } - setTimeSelection( - [ - value || null, - endTime || null, - ] - ); - } - }} - value={event[0]} - /> -
-
- - + { - const value = parseInt(e.target.value); - setEvent([event[0], value]); - - if (validate([event[0], value])) { - let startTime = event[0]; - if (typeof startTime === 'string'){ - startTime = parseInt(startTime); - } - setTimeSelection( - [ - startTime || null, - value - ] - ); - } - }} + min="0" + label="End Time" value={event[1]} - /> -
-
-
- - -
-
- - + label="Comment" + value={comment} + onUserInput={handleCommentChange} + /> + +
-
); }; +// ##################### EEGNET OVERRIDE END ################## // AnnotationForm.defaultProps = { timeSelection: null, From 32aab7c1b7d1ed2a3f5f21cc2e039a95dc8cdb01 Mon Sep 17 00:00:00 2001 From: jesscall Date: Thu, 6 Jan 2022 10:03:09 -0500 Subject: [PATCH 011/126] form elements --- .../src/series/components/Form.js | 306 ++++++++++++++++++ 1 file changed, 306 insertions(+) create mode 100644 jsx/react-series-data-viewer/src/series/components/Form.js diff --git a/jsx/react-series-data-viewer/src/series/components/Form.js b/jsx/react-series-data-viewer/src/series/components/Form.js new file mode 100644 index 00000000000..228a65d16ee --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/components/Form.js @@ -0,0 +1,306 @@ +import React, {useEffect} from 'react'; +import PropTypes from 'prop-types'; + +export const SelectElement = (props) => { + const handleChange = (e) => { + let value = e.target.value; + let options = e.target.options; + const numOfOptions = options.length; + + // Multiple values + if (props.multiple && numOfOptions > 1) { + value = []; + for (let i = 0, l = numOfOptions; i < l; i++) { + if (options[i].selected) { + value.push(options[i].value); + } + } + } + + props.onUserInput(props.name, value); + } + + let multiple = props.multiple ? 'multiple' : null; + let required = props.required ? 'required' : null; + let disabled = props.disabled ? 'disabled' : null; + let sortByValue = props.sortByValue; + let options = props.options; + let disabledOptions = props.disabledOptions; + let errorMessage = null; + let emptyOptionHTML = null; + let requiredHTML = null; + let elementClass = props.noMargins ? '' : 'row form-group'; + + // Add required asterisk + if (required) { + requiredHTML = *; + } + + // Add empty option + if (props.emptyOption) { + emptyOptionHTML = ; + } + + // Add error message + if (props.hasError) { + errorMessage = {props.errorMessage}; + elementClass = elementClass + ' has-error'; + } + + let newOptions = {}; + let optionList = []; + if (sortByValue) { + for (let key in options) { + if (options.hasOwnProperty(key)) { + newOptions[options[key]] = key; + } + } + optionList = Object.keys(newOptions).sort().map(function(option) { + let isDisabled = (newOptions[option] in disabledOptions); + return ( + + ); + }); + } else { + optionList = Object.keys(options).map(function(option) { + let isDisabled = (option in disabledOptions); + return ( + + ); + }); + } + + if (props.placeholder !== '') { + optionList.unshift(); + } + + // Default to empty string for regular select and to empty array for 'multiple' select + const value = props.value || (multiple ? [] : ''); + + // Label prop needs to be provided to render label + // (including empty label i.e. ) + // and retain formatting. If label prop is not provided at all, the input + // element will take up the whole row. + let label = null; + let inputClass = props.noMargins ? '' : 'col-sm-12'; + if (props.label && props.label != '') { + label = ( + + ); + inputClass = 'col-sm-12'; + } + + return ( +
+ {label} +
+ + {errorMessage} +
+
+ ); +} + +SelectElement.propTypes = { + name: PropTypes.string.isRequired, + options: PropTypes.object.isRequired, + disabledOptions: PropTypes.object, + label: PropTypes.string, + value: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.array, + ]), + id: PropTypes.string, + multiple: PropTypes.bool, + disabled: PropTypes.bool, + required: PropTypes.bool, + emptyOption: PropTypes.bool, + hasError: PropTypes.bool, + errorMessage: PropTypes.string, + onUserInput: PropTypes.func, + noMargins: PropTypes.bool, + placeholder: PropTypes.string, +}; + +SelectElement.defaultProps = { + name: '', + options: {}, + disabledOptions: {}, + value: undefined, + id: null, + multiple: false, + disabled: false, + required: false, + sortByValue: true, + emptyOption: true, + hasError: false, + errorMessage: 'The field is required!', + onUserInput: function() { + console.warn('onUserInput() callback is not set'); + }, + noMargins: false, + placeholder: '', +}; + +export const NumericElement = (props) => { + + const handleChange = (e) => { + props.onUserInput(props.name, e.target.value); + } + + const {disabled, required} = props; + let requiredHTML = required ? * : null; + let errorMessage = null; + let elementClass = 'row form-group'; + + // Add error message + if (props.hasError) { + errorMessage = {props.errorMessage}; + elementClass = elementClass + ' has-error'; + } + + return ( +
+ +
+ + {errorMessage} +
+
+ ); +} + +NumericElement.propTypes = { + name: PropTypes.string.isRequired, + min: PropTypes.number.isRequired, + max: PropTypes.number.isRequired, + label: PropTypes.string, + value: PropTypes.string, + id: PropTypes.string, + disabled: PropTypes.bool, + required: PropTypes.bool, + hasError: PropTypes.bool, + onUserInput: PropTypes.func, +}; + +NumericElement.defaultProps = { + name: '', + min: null, + max: null, + label: '', + value: '', + id: null, + required: false, + disabled: false, + hasError: false, + onUserInput: function() { + console.warn('onUserInput() callback is not set'); + }, +}; + +export const TextareaElement = (props) => { + const handleChange = (e) => { + props.onUserInput(props.name, e.target.value); + } + + let disabled = props.disabled ? 'disabled' : null; + let required = props.required ? 'required' : null; + let requiredHTML = null; + + // Add required asterix + if (required) { + requiredHTML = *; + } + + return ( +
+ +
+ +
+
+ ); +} + +TextareaElement.propTypes = { + name: PropTypes.string.isRequired, + label: PropTypes.string, + value: PropTypes.string, + id: PropTypes.string, + disabled: PropTypes.bool, + required: PropTypes.bool, + rows: PropTypes.number, + cols: PropTypes.number, + onUserInput: PropTypes.func, +}; + +TextareaElement.defaultProps = { + name: '', + label: '', + value: '', + id: null, + disabled: false, + required: false, + rows: 4, + cols: 25, + onUserInput: function() { + console.warn('onUserInput() callback is not set'); + }, +}; \ No newline at end of file From 83a464c12798612067266ed5a8e20168f9e8de06 Mon Sep 17 00:00:00 2001 From: jesscall Date: Thu, 6 Jan 2022 16:24:58 -0500 Subject: [PATCH 012/126] more improvements - event manager --- .../src/eeglab/EEGLabSeriesProvider.tsx | 2 +- .../src/series/components/EventManager.tsx | 142 +++++++++++++----- .../src/series/components/SeriesRenderer.tsx | 42 ++++-- .../src/series/store/types.tsx | 2 +- 4 files changed, 143 insertions(+), 45 deletions(-) diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index c080f164ac7..5df52493b7d 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -143,7 +143,7 @@ class EEGLabSeriesProvider extends Component { duration: parseFloat(instance.Duration), type: 'Annotation', label: label, - comment: null, + comment: instance.Description, channels: 'all', }); }); diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index a3f5c0da2a0..e9bf53404cb 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -1,16 +1,17 @@ -import React from 'react'; +import React, {useState, useEffect} from 'react'; import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; import {setRightPanel} from '../store/state/rightPanel'; import * as R from 'ramda'; -import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; +import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; import {RootState} from '../store'; type CProps = { timeSelection?: [number, number], epochs: EpochType[], filteredEpochs: number[], + rightPanel: RightPanel, setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, toggleEpoch: (_: number) => void, @@ -21,12 +22,31 @@ type CProps = { const EventManager = ({ epochs, filteredEpochs, + rightPanel, setTimeSelection, setRightPanel, toggleEpoch, updateActiveEpoch, interval, }: CProps) => { + const epochType = (rightPanel && rightPanel !== 'annotationForm' && rightPanel === 'eventList') ? 'Event' : 'Annotation'; + const [allEpochsVisible, setAllEpochsVisibility] = useState(false); + + useEffect(() => { + // Reset: turn all epochs on / off regardless of independent toggle state + [...Array(epochs.length).keys()].filter((index) => + epochs[index].onset + epochs[index].duration > interval[0] + && epochs[index].onset < interval[1] + && epochs[index].type === epochType + ).map((index) => { + if ((!allEpochsVisible && filteredEpochs.includes(index)) + || (allEpochsVisible && !filteredEpochs.includes(index)) + ) { + toggleEpoch(index); + } + }); + }, [allEpochsVisible]); + return (
- Events / Annotations - in timeline view + {`${epochType}s in timeline view`} + setAllEpochsVisibility(!allEpochsVisible)} + > epochs[index].onset + epochs[index].duration > interval[0] && epochs[index].onset < interval[1] + && epochs[index].type === epochType ).map((index) => { const epoch = epochs[index]; const visible = filteredEpochs.includes(index); + let commentVisible = false; return ( -
- {epoch.label}
- {epoch.onset}{epoch.duration > 0 - && ' - ' + (epoch.onset + epoch.duration)} - -
+
+ {epoch.label}
+ {epoch.onset}{epoch.duration > 0 + && ' - ' + (epoch.onset + epoch.duration)} +
+
+ {epoch.type === 'Annotation' && + + } + + {epoch.type === 'Annotation' && epoch.comment && + + } +
+
+ {commentVisible && epoch.comment && +
+ Comment: {epoch.comment} +
+ } + + ); })}
@@ -119,6 +192,7 @@ export default connect( timeSelection: state.timeSelection, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, + rightPanel: state.rightPanel, interval: state.bounds.interval, }), (dispatch: (_: any) => void) => ({ diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 912443cc2b1..41f6ce555bd 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -188,17 +188,18 @@ const SeriesRenderer: FunctionComponent = ({ {// ##################### EEGNET OVERRIDE START ################## // filteredEpochs.length < MAX_RENDERED_EPOCHS && filteredEpochs.map((index) => { - // ##################### EEGNET OVERRIDE END ################## // return ( ); }) + // ##################### EEGNET OVERRIDE END ################## // } {timeSelection && = ({ {...epochs[activeEpoch]} parentHeight={viewerHeight} scales={scales} - color={'#ffb2b2'} + color={'#d8ffcc'} /> } @@ -587,26 +588,46 @@ const SeriesRenderer: FunctionComponent = ({ }} >
- {epochs.length > 0 && + + { + // ##################### EEGNET OVERRIDE START ################## // + epochs.length > 0 && } + {epochs.length > 0 && + + } { - // ##################### EEGNET OVERRIDE START ################## //
@@ -303,6 +392,11 @@ const AnnotationForm = ({ + {currentAnnotation && + + }
@@ -314,6 +408,7 @@ AnnotationForm.defaultProps = { timeSelection: null, epochs: [], filteredEpochs: [], + currentAnnotation: null, }; export default connect( @@ -321,6 +416,7 @@ export default connect( timeSelection: state.timeSelection, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, + currentAnnotation: state.currentAnnotation, interval: state.bounds.interval, }), (dispatch: (any) => void) => ({ @@ -345,6 +441,10 @@ export default connect( dispatch, setEpochs ), + setCurrentAnnotation: R.compose( + dispatch, + setCurrentAnnotation + ), // ##################### EEGNET OVERRIDE END ################## // }) )(AnnotationForm); diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index e9bf53404cb..7c346bc01bd 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -3,15 +3,17 @@ import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; import {setRightPanel} from '../store/state/rightPanel'; +import {setCurrentAnnotation} from '../store/state/currentAnnotation'; import * as R from 'ramda'; import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; -import {RootState} from '../store'; +import { RootState } from '../store'; type CProps = { timeSelection?: [number, number], epochs: EpochType[], filteredEpochs: number[], rightPanel: RightPanel, + setCurrentAnnotation: (_: EpochType) => void, setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, toggleEpoch: (_: number) => void, @@ -23,6 +25,7 @@ const EventManager = ({ epochs, filteredEpochs, rightPanel, + setCurrentAnnotation, setTimeSelection, setRightPanel, toggleEpoch, @@ -92,7 +95,18 @@ const EventManager = ({ ).map((index) => { const epoch = epochs[index]; const visible = filteredEpochs.includes(index); - let commentVisible = false; + const [commentVisible, setCommentVisibility] = useState(false); + const handleCommentVisibilityChange = () => { + setCommentVisibility(!commentVisible); + } + + const handleEditClick = () => { + setCurrentAnnotation(epoch); + setRightPanel('annotationForm'); + const startTime = epoch.onset; + const endTime = epoch.duration + startTime; + setTimeSelection([startTime, endTime]); + } return ( <> @@ -130,7 +144,7 @@ const EventManager = ({
} - ); })} @@ -196,6 +209,10 @@ export default connect( interval: state.bounds.interval, }), (dispatch: (_: any) => void) => ({ + setCurrentAnnotation: R.compose( + dispatch, + setCurrentAnnotation + ), setTimeSelection: R.compose( dispatch, setTimeSelection diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 41f6ce555bd..48c0d66e8d3 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -45,6 +45,7 @@ import { Epoch as EpochType, RightPanel, } from '../store/types'; +import {setCurrentAnnotation} from '../store/state/currentAnnotation'; type CProps = { viewerWidth: number, @@ -71,6 +72,7 @@ type CProps = { setViewerWidth: (_: number) => void, setViewerHeight: (_: number) => void, setFilteredEpochs: (_: number[]) => void, + setCurrentAnnotation: (_: EpochType) => void, dragStart: (_: number) => void, dragContinue: (_: number) => void, dragEnd: (_: number) => void, @@ -102,6 +104,7 @@ const SeriesRenderer: FunctionComponent = ({ setViewerWidth, setViewerHeight, setFilteredEpochs, + setCurrentAnnotation, dragStart, dragContinue, dragEnd, @@ -636,6 +639,7 @@ const SeriesRenderer: FunctionComponent = ({ rightPanel === 'annotationForm' ? setRightPanel(null) : setRightPanel('annotationForm'); + setCurrentAnnotation(null); }} > {rightPanel === 'annotationForm' @@ -761,6 +765,10 @@ export default connect( dispatch, setFilteredEpochs ), + setCurrentAnnotation: R.compose( + dispatch, + setCurrentAnnotation + ), dragStart: R.compose( dispatch, startDragSelection diff --git a/jsx/react-series-data-viewer/src/series/store/index.tsx b/jsx/react-series-data-viewer/src/series/store/index.tsx index 3e5a761865d..a1afda67214 100644 --- a/jsx/react-series-data-viewer/src/series/store/index.tsx +++ b/jsx/react-series-data-viewer/src/series/store/index.tsx @@ -4,6 +4,7 @@ import {combineEpics} from 'redux-observable'; import {boundsReducer} from './state/bounds'; import {filtersReducer} from './state/filters'; import {datasetReducer} from './state/dataset'; +import {currentAnnotationReducer} from './state/currentAnnotation'; import {cursorReducer} from './state/cursor'; import {panelReducer} from './state/rightPanel'; import {timeSelectionReducer} from './state/timeSelection'; @@ -30,6 +31,7 @@ export const rootReducer = combineReducers({ bounds: boundsReducer, filters: filtersReducer, dataset: datasetReducer, + currentAnnotation: currentAnnotationReducer, cursor: cursorReducer, rightPanel: panelReducer, timeSelection: timeSelectionReducer, diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx index 18cc900ebc6..4da29716d93 100644 --- a/jsx/react-series-data-viewer/src/series/store/types.tsx +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -30,6 +30,9 @@ export type Epoch = { label: string, comment?: string, channels: number[] | "all", + // ##################### EEGNET OVERRIDE START ################## // + annotationInstanceID?: number, + // ##################### EEGNET OVERRIDE END ################## // }; // ##################### EEGNET OVERRIDE START ################## // diff --git a/php/annotations.class.inc b/php/annotations.class.inc index 7d7963b49a0..2667a79efcc 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -84,21 +84,32 @@ class Annotations extends \NDB_Page ); case 'DELETE': // ##################### EEGNET OVERRIDE START ################## // - $parameters = $request->getQueryParams(); + $parameters = json_decode((string) $request->getBody(), true); // ##################### EEGNET OVERRIDE END ################## // if (!$user->hasPermission('electrophysiology_browser_edit_annotations') ) { return (new \LORIS\Http\Response\JSON\Unauthorized()); } - if (!isset($parameters['physioFileID']) + if (!isset($parameters['sessionID']) || !isset($parameters['instance_id']) ) { return (new \LORIS\Http\Response\JSON\BadRequest()); } - (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) - ->delete($parameters['instance_id']); + $physioFileID = $db->pselectOne( + 'SELECT PhysiologicalFileID + FROM physiological_file + WHERE SessionID=:SID', + ['SID' => $parameters['sessionID']] + ); + + if (!isset($physioFileID)) { + return (new \LORIS\Http\Response\JSON\BadRequest()); + } + + (new ElectrophysioAnnotations(intval($physioFileID))) + ->delete((int) $parameters['instance_id']); return (new \LORIS\Http\Response\JSON\OK()); case 'POST': @@ -141,7 +152,7 @@ class Annotations extends \NDB_Page 'author' => $user->getFullname() ]; // ##################### EEGNET OVERRIDE END ################## // - $instance_id = $parameters['instance_id'] ?? null; + $instance_id = (int) $parameters['instance_id'] ?? null; $parameter_id = $parameters['parameter_id'] ?? null; // ##################### EEGNET OVERRIDE START ################## // From 9515e5f0327996af4461456150539c30aff31267 Mon Sep 17 00:00:00 2001 From: jesscall Date: Mon, 10 Jan 2022 12:42:34 -0500 Subject: [PATCH 014/126] deriv structure changed for raw files, bugs fixed --- css/electrophysiology_browser.css | 23 +++++++++- .../src/series/components/AnnotationForm.tsx | 1 + .../src/series/components/EventManager.tsx | 43 +++++++++---------- php/models/electrophysioannotations.class.inc | 23 ++++++++-- 4 files changed, 63 insertions(+), 27 deletions(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index 8d28406cd9b..c6e9e4d946e 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -42,11 +42,32 @@ svg { user-select: none; } -.annotation.list-group-item { +.list-group-item { + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.annotation { background: #fffae6; border-left: 5px solid #ff6600; } +.epoch-details { + padding-right: 100px; +} + +.epoch-action { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: absolute; + right: 0; +} + .event-list .btn.btn-primary { color: #555; border: 1px solid #555; diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 4b7218e8fa9..89530493dcd 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -347,6 +347,7 @@ const AnnotationForm = ({ onClick={() => { setRightPanel(null); setCurrentAnnotation(null); + setTimeSelection(null); }} >
diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 7c346bc01bd..1addb52d131 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -32,8 +32,12 @@ const EventManager = ({ updateActiveEpoch, interval, }: CProps) => { - const epochType = (rightPanel && rightPanel !== 'annotationForm' && rightPanel === 'eventList') ? 'Event' : 'Annotation'; + const [epochType, setEpochType] = useState((rightPanel + && rightPanel !== 'annotationForm' + && rightPanel === 'eventList') ? + 'Event' : 'Annotation'); const [allEpochsVisible, setAllEpochsVisibility] = useState(false); + const [commentVisible, setCommentVisibility] = useState(false); useEffect(() => { // Reset: turn all epochs on / off regardless of independent toggle state @@ -50,15 +54,23 @@ const EventManager = ({ }); }, [allEpochsVisible]); + useEffect(() => { + setEpochType((rightPanel + && rightPanel !== 'annotationForm' + && rightPanel === 'eventList') ? + 'Event' : 'Annotation'); + }, [rightPanel]); + return (
{`${epochType}s in timeline view`} { const epoch = epochs[index]; const visible = filteredEpochs.includes(index); - const [commentVisible, setCommentVisibility] = useState(false); + const handleCommentVisibilityChange = () => { setCommentVisibility(!commentVisible); } @@ -116,29 +128,16 @@ const EventManager = ({ (epoch.type == 'Annotation' ? 'annotation ' : '') + 'list-group-item list-group-item-action' } - style={{ - position: 'relative', - display: 'flex', - flexDirection: 'row', - justifyContent: 'sapce-between', - alignItems: 'center', - }} > -
+
{epoch.label}
{epoch.onset}{epoch.duration > 0 && ' - ' + (epoch.onset + epoch.duration)}
{epoch.type === 'Annotation' && }
- {commentVisible && epoch.comment && + {visibleComments.includes(index) && epoch.comment &&
From 79387623f8adba4735e90acdcfa0ae00e193c438 Mon Sep 17 00:00:00 2001 From: jesscall Date: Tue, 18 Jan 2022 14:36:46 -0500 Subject: [PATCH 017/126] time range buttons and annotations edit bugfix --- .../src/series/components/AnnotationForm.tsx | 4 + .../src/series/components/IntervalSelect.tsx | 88 ++++++++++++++++--- 2 files changed, 82 insertions(+), 10 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 89530493dcd..46be3a6c1ad 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -194,6 +194,10 @@ const AnnotationForm = ({ if (response.ok) { setIsSubmitted(false); + // if in edit mode, remove old annotation instance + if (currentAnnotation !== null) { + epochs.splice(epochs.indexOf(currentAnnotation), 1); + } epochs.push(newAnnotation); setEpochs( epochs diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 7c38dfdb799..6e23b121474 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -50,18 +50,85 @@ const IntervalSelect: FunctionComponent = ({ return (
-
- Timeline Range View - + Timeline Range View +
+
+
+ { + if (interval[0] !== domain[0]) { + setInterval([interval[0] - 50, interval[1] - 50]) + } else { + setInterval([interval[0], interval[1] - 50]) + } + }} + value='<<' + /> + { + if (interval[0] !== domain[0]) { + setInterval([interval[0] - 5, interval[1] - 5]) + } else { + setInterval([interval[0], interval[1] - 5]) + } + }} + value='<' + /> + { + if (interval[1] !== domain[1]) { + setInterval([interval[0] + 5, interval[1] + 5]) + } else { + setInterval([interval[0] + 5, interval[1]]) + } + }} + value='>' + /> + { + if (interval[1] !== domain[1]) { + setInterval([interval[0] + 50, interval[1] + 50]) + } else { + setInterval([interval[0] + 50, interval[1]]) + } + }} + value='>>' + /> +
+ { @@ -71,7 +138,8 @@ const IntervalSelect: FunctionComponent = ({ value='Reset' style={{marginLeft: '15px'}} /> - +
+
Date: Tue, 18 Jan 2022 16:38:06 -0500 Subject: [PATCH 018/126] bugfix epochs visibility toggle --- .../src/series/components/EventManager.tsx | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 7d314c664aa..67c39ed1bad 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -7,6 +7,7 @@ import {setCurrentAnnotation} from '../store/state/currentAnnotation'; import * as R from 'ramda'; import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; import { RootState } from '../store'; +import {MAX_RENDERED_EPOCHS} from '../../vector'; type CProps = { timeSelection?: [number, number], @@ -36,22 +37,26 @@ const EventManager = ({ && rightPanel !== 'annotationForm' && rightPanel === 'eventList') ? 'Event' : 'Annotation'); + const [activeEpochs, setActiveEpochs] = useState([]); const [allEpochsVisible, setAllEpochsVisibility] = useState(false); const [visibleComments, setVisibleComments] = useState([]); useEffect(() => { // Reset: turn all epochs on / off regardless of independent toggle state - [...Array(epochs.length).keys()].filter((index) => + const epochsInRange = [...Array(epochs.length).keys()].filter((index) => epochs[index].onset + epochs[index].duration > interval[0] && epochs[index].onset < interval[1] && epochs[index].type === epochType - ).map((index) => { - if ((!allEpochsVisible && filteredEpochs.includes(index)) - || (allEpochsVisible && !filteredEpochs.includes(index)) - ) { - toggleEpoch(index); - } - }); + ); + if (epochsInRange.length < MAX_RENDERED_EPOCHS) { + epochsInRange.map((index) => { + if ((!allEpochsVisible && filteredEpochs.includes(index)) + || (allEpochsVisible && !filteredEpochs.includes(index)) + ) { + toggleEpoch(index); + } + }); + } }, [allEpochsVisible]); useEffect(() => { From bb4b11fec7eb781f02045a5d5b0415499babcfd7 Mon Sep 17 00:00:00 2001 From: jesscall Date: Wed, 19 Jan 2022 10:32:31 -0500 Subject: [PATCH 019/126] labels fix --- .../src/eeglab/EEGLabSeriesProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index 24e798ff379..026d37872c1 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -138,7 +138,7 @@ class EEGLabSeriesProvider extends Component { const label = annotations.labels .find(label => label.AnnotationLabelID == instance.AnnotationLabelID - ).LabelDescription; + ).LabelName; epochs.push({ onset: parseFloat(instance.Onset), duration: parseFloat(instance.Duration), From aaae443d9292059d9338efb288cbb3db7795b170 Mon Sep 17 00:00:00 2001 From: jesscall Date: Wed, 19 Jan 2022 12:37:57 -0500 Subject: [PATCH 020/126] 2022_01_19_event_label_trial_type_fix --- .../src/eeglab/EEGLabSeriesProvider.tsx | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index c080f164ac7..212e1bb1552 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -121,16 +121,20 @@ class EEGLabSeriesProvider extends Component { .then((text) => { if (!(typeof text.json === 'string' || text.json instanceof String)) return; - return tsvParse( - text.json.replace('trial_type', 'label')) - .map(({ onset, duration, label }, i) => ({ - onset: parseFloat(onset), - duration: parseFloat(duration), - type: 'Event', - label: label, - comment: null, - channels: 'all', - })); + return tsvParse(text.json) + .map((eventRow, i) => { + // --- Fix related to Brock face-13 data + const label = (eventRow.trial_type === 'n/a' && 'sample' in eventRow) ? + eventRow.sample : eventRow.trial_type; + return { + onset: parseFloat(eventRow.onset), + duration: parseFloat(eventRow.duration), + type: 'Event', + label: label, + comment: null, + channels: 'all', + } + }); }).then(events => { let epochs = events; annotations.instances.map(instance => { From 1ddc04ae7ecd5e81fa74b122ddfe16f17cf711d5 Mon Sep 17 00:00:00 2001 From: jesscall Date: Fri, 21 Jan 2022 11:20:22 -0500 Subject: [PATCH 021/126] document overrides --- css/electrophysiology_browser.css | 2 ++ .../src/series/components/AnnotationForm.tsx | 12 +++++++----- .../src/series/components/EventManager.tsx | 19 +++++++++++++++---- .../src/series/components/IntervalSelect.tsx | 2 ++ .../src/series/components/SeriesRenderer.tsx | 16 +++++++++++++++- .../src/series/store/types.tsx | 2 +- php/annotations.class.inc | 8 ++++++-- php/models/electrophysioannotations.class.inc | 4 ++++ 8 files changed, 52 insertions(+), 13 deletions(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index c6e9e4d946e..33d8510293e 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -42,6 +42,7 @@ svg { user-select: none; } +/* ##################### EEGNET OVERRIDE START ################## */ .list-group-item { position: relative; display: flex; @@ -67,6 +68,7 @@ svg { position: absolute; right: 0; } +/* ##################### EEGNET OVERRIDE END ################## */ .event-list .btn.btn-primary { color: #555; diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 46be3a6c1ad..ccf3cc4821e 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -1,4 +1,4 @@ -import React, { Component, useEffect, useState } from 'react'; +import React, {useEffect, useState} from 'react'; import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect, DefaultRootState} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; @@ -7,9 +7,9 @@ import * as R from 'ramda'; import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; import {RootState} from '../store'; // ##################### EEGNET OVERRIDE START ################## // -import { setEpochs } from '../store/state/dataset'; +import {setEpochs} from '../store/state/dataset'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; -import { NumericElement, SelectElement, TextareaElement } from './Form'; +import {NumericElement, SelectElement, TextareaElement} from './Form'; import swal from 'sweetalert2'; // ##################### EEGNET OVERRIDE END ################## // @@ -17,11 +17,11 @@ type CProps = { timeSelection?: [number, number], epochs: EpochType[], filteredEpochs: number[], - currentAnnotation: EpochType, setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, // ##################### EEGNET OVERRIDE START ################## // setEpochs: (_: EpochType[]) => void, + currentAnnotation: EpochType, setCurrentAnnotation: (_: EpochType) => void, // ##################### EEGNET OVERRIDE END ################## // toggleEpoch: (_: number) => void, @@ -33,11 +33,11 @@ const AnnotationForm = ({ timeSelection, epochs, filteredEpochs, - currentAnnotation, setTimeSelection, setRightPanel, // ##################### EEGNET OVERRIDE START ################## // setEpochs, + currentAnnotation, setCurrentAnnotation, // ##################### EEGNET OVERRIDE END ################## // toggleEpoch, @@ -421,7 +421,9 @@ export default connect( timeSelection: state.timeSelection, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, + // ##################### EEGNET OVERRIDE START ################## // currentAnnotation: state.currentAnnotation, + // ##################### EEGNET OVERRIDE END ################## // interval: state.bounds.interval, }), (dispatch: (any) => void) => ({ diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 67c39ed1bad..76565263f7e 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -1,20 +1,24 @@ +// ##################### EEGNET OVERRIDE START ################## // import React, {useState, useEffect} from 'react'; +import {setCurrentAnnotation} from '../store/state/currentAnnotation'; +import {MAX_RENDERED_EPOCHS} from '../../vector'; +import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; +// ##################### EEGNET OVERRIDE END ################## // import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; import {setRightPanel} from '../store/state/rightPanel'; -import {setCurrentAnnotation} from '../store/state/currentAnnotation'; import * as R from 'ramda'; -import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; import { RootState } from '../store'; -import {MAX_RENDERED_EPOCHS} from '../../vector'; type CProps = { timeSelection?: [number, number], epochs: EpochType[], filteredEpochs: number[], + // ##################### EEGNET OVERRIDE START ################## // rightPanel: RightPanel, setCurrentAnnotation: (_: EpochType) => void, + // ##################### EEGNET OVERRIDE END ################## // setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, toggleEpoch: (_: number) => void, @@ -25,14 +29,17 @@ type CProps = { const EventManager = ({ epochs, filteredEpochs, + // ##################### EEGNET OVERRIDE START ################## // rightPanel, setCurrentAnnotation, + // ##################### EEGNET OVERRIDE END ################## // setTimeSelection, setRightPanel, toggleEpoch, updateActiveEpoch, interval, }: CProps) => { + // ##################### EEGNET OVERRIDE START ################## // const [epochType, setEpochType] = useState((rightPanel && rightPanel !== 'annotationForm' && rightPanel === 'eventList') ? @@ -72,7 +79,6 @@ const EventManager = ({ className="panel-heading" style={{ display: 'flex', - flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', }} @@ -206,6 +212,7 @@ const EventManager = ({
); }; +// ##################### EEGNET OVERRIDE END ################## // EventManager.defaultProps = { timeSelection: null, @@ -218,14 +225,18 @@ export default connect( timeSelection: state.timeSelection, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, + // ##################### EEGNET OVERRIDE START ################## // rightPanel: state.rightPanel, + // ##################### EEGNET OVERRIDE END ################## // interval: state.bounds.interval, }), (dispatch: (_: any) => void) => ({ + // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation: R.compose( dispatch, setCurrentAnnotation ), + // ##################### EEGNET OVERRIDE END ################## // setTimeSelection: R.compose( dispatch, setTimeSelection diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 6e23b121474..21d8f5aada5 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -50,6 +50,7 @@ const IntervalSelect: FunctionComponent = ({ return (
+ {/* ##################### EEGNET OVERRIDE START ################## */}
= ({ />
+ {/* ##################### EEGNET OVERRIDE END ################## */}
void, setViewerHeight: (_: number) => void, setFilteredEpochs: (_: number[]) => void, + // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation: (_: EpochType) => void, + // ##################### EEGNET OVERRIDE END ################## // dragStart: (_: number) => void, dragContinue: (_: number) => void, dragEnd: (_: number) => void, @@ -104,7 +108,9 @@ const SeriesRenderer: FunctionComponent = ({ setViewerWidth, setViewerHeight, setFilteredEpochs, + // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation, + // ##################### EEGNET OVERRIDE END ################## // dragStart, dragContinue, dragEnd, @@ -219,7 +225,9 @@ const SeriesRenderer: FunctionComponent = ({ {...epochs[activeEpoch]} parentHeight={viewerHeight} scales={scales} + // ##################### EEGNET OVERRIDE START ################## // color={'#d8ffcc'} + // ##################### EEGNET OVERRIDE END ################## // /> } @@ -660,9 +668,11 @@ const SeriesRenderer: FunctionComponent = ({ > {[...Array(epochs.length).keys()].filter((i) => epochs[i].onset + epochs[i].duration > interval[0] - && epochs[i].onset < interval[1] + && epochs[i].onset < interval[1] + // ##################### EEGNET OVERRIDE START ################## // && ((epochs[i].type === 'Event' && rightPanel === 'eventList') || (epochs[i].type === 'Annotation' && rightPanel === 'annotationList')) + // ##################### EEGNET OVERRIDE END ################## // ).length >= MAX_RENDERED_EPOCHS &&
= ({ {rightPanel &&
{rightPanel === 'annotationForm' && } + {/* ##################### EEGNET OVERRIDE START ################## */} {rightPanel === 'eventList' && } {rightPanel === 'annotationList' && } + {/* ##################### EEGNET OVERRIDE START ################## */}
}
@@ -765,10 +777,12 @@ export default connect( dispatch, setFilteredEpochs ), + // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation: R.compose( dispatch, setCurrentAnnotation ), + // ##################### EEGNET OVERRIDE END ################## // dragStart: R.compose( dispatch, startDragSelection diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx index 4da29716d93..e31e53a55b2 100644 --- a/jsx/react-series-data-viewer/src/series/store/types.tsx +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -41,9 +41,9 @@ export type AnnotationMetadata = { labels: any[], metadata: any[] } -// ##################### EEGNET OVERRIDE END ################## // export type RightPanel = 'annotationForm' | 'eventList' | 'annotationList' | null; +// ##################### EEGNET OVERRIDE END ################## // export type Electrode = { name: string, diff --git a/php/annotations.class.inc b/php/annotations.class.inc index 2667a79efcc..65e398d403a 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -91,12 +91,15 @@ class Annotations extends \NDB_Page return (new \LORIS\Http\Response\JSON\Unauthorized()); } + // ##################### EEGNET OVERRIDE START ################## // if (!isset($parameters['sessionID']) + // ##################### EEGNET OVERRIDE END ################## // || !isset($parameters['instance_id']) ) { return (new \LORIS\Http\Response\JSON\BadRequest()); } + // ##################### EEGNET OVERRIDE START ################## // $physioFileID = $db->pselectOne( 'SELECT PhysiologicalFileID FROM physiological_file @@ -110,7 +113,7 @@ class Annotations extends \NDB_Page (new ElectrophysioAnnotations(intval($physioFileID))) ->delete((int) $parameters['instance_id']); - + // ##################### EEGNET OVERRIDE END ################## // return (new \LORIS\Http\Response\JSON\OK()); case 'POST': // ##################### EEGNET OVERRIDE START ################## // @@ -151,8 +154,9 @@ class Annotations extends \NDB_Page 'sources' => 'EEGNet LORIS', 'author' => $user->getFullname() ]; - // ##################### EEGNET OVERRIDE END ################## // + $instance_id = (int) $parameters['instance_id'] ?? null; + // ##################### EEGNET OVERRIDE END ################## // $parameter_id = $parameters['parameter_id'] ?? null; // ##################### EEGNET OVERRIDE START ################## // diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 6560e44e29d..1b7225167bd 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -456,6 +456,7 @@ class ElectrophysioAnnotations ['PFID' => $this->_physioFileID] ); + // ##################### EEGNET OVERRIDE START ################## // // Get output type (raw, derivative) $outputType = $db->pselectOne( 'SELECT OutputTypeName @@ -464,6 +465,7 @@ class ElectrophysioAnnotations WHERE PhysiologicalFileID=:PFID', ['PFID' => $this->_physioFileID] ); + // ##################### EEGNET OVERRIDE END ################## // //Create new filepaths //Get data directory base path from Config @@ -477,6 +479,7 @@ class ElectrophysioAnnotations //Create path with correct structure $subPath = strstr($physioFilePath, "sub"); + // ##################### EEGNET OVERRIDE START ################## // if ($outputType === 'derivative') { $destinationPath = $dataDir . "bids_imports/derivatives/loris_annotations/" @@ -497,6 +500,7 @@ class ElectrophysioAnnotations 0, strrpos($destinationPath, "_") ); + // ##################### EEGNET OVERRIDE END ################## // $tsv_path = $pathWithoutEDF . "_annotations.tsv"; $json_path = $pathWithoutEDF . "_annotations.json"; From eef8b9ccf6b117d9b7e6dc6090e66f661a2f9b04 Mon Sep 17 00:00:00 2001 From: jesscall Date: Mon, 31 Jan 2022 15:53:43 -0500 Subject: [PATCH 022/126] cosmetic changes --- .../src/series/components/AnnotationForm.tsx | 4 +- .../src/series/components/EventManager.tsx | 40 +++++++++++-------- .../src/series/components/SeriesRenderer.tsx | 4 +- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index ccf3cc4821e..990e7df79e1 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -344,12 +344,12 @@ const AnnotationForm = ({ justifyContent: 'space-between', }} > - {currentAnnotation ? 'Edit' : 'New'} Annotation + {currentAnnotation ? 'Edit' : 'Add'} Annotation { - setRightPanel(null); + setRightPanel('annotationList'); setCurrentAnnotation(null); setTimeSelection(null); }} diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 76565263f7e..267b2799d6c 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -83,21 +83,29 @@ const EventManager = ({ justifyContent: 'space-between', }} > - {`${epochType}s in timeline view`} - setAllEpochsVisibility(!allEpochsVisible)} - > - { - setRightPanel(null); - }} - > +

+ {`${epochType}s`} + +
in timeline view +
+

+
+ setAllEpochsVisibility(!allEpochsVisible)} + > + { + setRightPanel(null); + }} + > +
handleCommentVisibilityChange()} > diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 45c0560592e..544f483c5d1 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -652,14 +652,14 @@ const SeriesRenderer: FunctionComponent = ({ > {rightPanel === 'annotationForm' ? 'Close Annotation Form' - : 'New Annotation' + : 'Add Annotation' } // ##################### EEGNET OVERRIDE END ################## // }
Date: Wed, 9 Feb 2022 13:01:27 -0500 Subject: [PATCH 023/126] finished sql, archive event files tool --- php/sessions.class.inc | 672 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 672 insertions(+) create mode 100644 php/sessions.class.inc diff --git a/php/sessions.class.inc b/php/sessions.class.inc new file mode 100644 index 00000000000..e3acd62e9bc --- /dev/null +++ b/php/sessions.class.inc @@ -0,0 +1,672 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ +namespace LORIS\electrophysiology_browser; + +use \Psr\Http\Message\ServerRequestInterface; +use \Psr\Http\Message\ResponseInterface; +use LORIS\electrophysiology_browser\Models\ElectrophysioFile; +use LORIS\electrophysiology_browser\Models\ElectrophysioAnnotations; + + +/** + * Provides the PHP code for the menu filter for the electrophysiology browser + * + * @category Behavioural + * @package Main + * @subpackage Sessions + * @author Loris team + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://github.com/aces/Loris + */ + +class Sessions extends \NDB_Page +{ + + public $skipTemplate = true; // stops from looking for a smarty template + protected $timepoint; + protected $sessionID; + protected $candidate; + + /** + * Determine whether the user has permission to view this page + * + * @param \User $user The user whose access is being checked + * + * @return bool whether the user has access + */ + function _hasAccess(\User $user) : bool + { + return (($user->hasPermission('electrophysiology_browser_view_allsites') + || ($user->hasCenter($this->timepoint->getCenterID()) + && $user->hasPermission('electrophysiology_browser_view_site')) + ) && $user->hasProject($this->timepoint->getProject()->getId())); + } + + /** + * Load the required variables in order to check that the user + * has access to the session. + * + * @param \User $user The user to load the resources for + * @param ServerRequestInterface $request The PSR15 Request being handled + * + * @throws \NotFound If the session id is non-numerical + * @throws \LorisException If the session is not found + * + * @return void + */ + public function loadResources( + \User $user, ServerRequestInterface $request + ) : void { + + $path = $request->getUri()->getPath(); + $matches = []; + + if (preg_match('#/sessions/(\d+)#', $path, $matches) !== 1) { + throw new \NotFound("Invalid session"); + } + $session_id = intval($matches[1]); + + try { + $this->timepoint = \NDB_Factory::singleton()->timepoint( + new \SessionID(strval($session_id)) + ); + $this->sessionID = $session_id; + } catch (\LorisException $e) { + throw new \NotFound("Session not found"); + } + + parent::loadResources($user, $request); + } + + /** + * Handles a login request + * + * @param ServerRequestInterface $request The incoming PSR7 request + * + * @return ResponseInterface The outgoing PSR7 response + */ + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $parameters = $request->getQueryParams(); + $user = $request->getAttribute('user'); + + if (!$this->_hasAccess($user)) { + return (new \LORIS\Middleware\PageDecorationMiddleware($user)) + ->process( + $request, + new \LORIS\Http\StringStream("Permission denied") + )->withStatus(403); + } + + $accepted_hdrs = explode( + ',', + $request->getHeaderLine('Accept') + ); + + if (in_array('text/html', $accepted_hdrs, true)) { + return parent::handle($request); + } + + if ($request->getMethod() != 'GET') { + return (new \LORIS\Http\Response\JSON\MethodNotAllowed( + ['GET'] + )); + } + + if (!isset($parameters['outputType'])) { + return (new \LORIS\Http\Response\JSON\BadRequest( + 'OutputType required' + )); + } + + $outputType = $parameters['outputType']; + if (!in_array($outputType, ['raw', 'derivative', 'all_types'])) { + return (new \LORIS\Http\Response\JSON\BadRequest( + 'Invalid output type' + )); + } + return $this->getSessionData($outputType); + } + + + /** + * Get the session data information. + * + * @param string $outputType output type to be displayed + * + * @return ResponseInterface The JSON response + */ + function getSessionData($outputType) + { + + $db = \NDB_Factory::singleton()->database(); + + $query = 'SELECT + DISTINCT(pf.SessionID) + FROM physiological_file pf + LEFT JOIN session s ON (s.ID=pf.SessionID) + LEFT JOIN candidate c USING (CandID) + LEFT JOIN psc ON (s.CenterID=psc.CenterID) + LEFT JOIN physiological_output_type pot + USING (PhysiologicalOutputTypeID) + WHERE + s.Active = "Y" + AND pf.FileType IN ('. + '"bdf", "cnt", "edf", "set", "vhdr", "vsm", "archive"'. + ') ORDER BY pf.SessionID'; + + $response = []; + + $sessions = $db->pselect($query, []); + $sessions = array_column($sessions, 'SessionID'); + $response['patient'] = $this->getSubjectData($outputType); + $response['database'] = array_values( + $this->getFilesData($outputType) + ); + $response['sessions'] = $sessions; + $currentIndex = array_search($this->sessionID, $sessions); + $response['nextSession'] = $sessions[$currentIndex+1] ?? ''; + $response['prevSession'] = $sessions[$currentIndex-1] ?? ''; + + return new \LORIS\Http\Response\JSON\OK($response); + } + + + /** + * Get the subject data information. + * + * @param string $outputType output type to be displayed + * + * @return array with the subject information + */ + function getSubjectData($outputType) + { + $subjectData = []; + $candidate = \NDB_Factory::singleton()->candidate( + $this->timepoint->getCandID() + ); + + $subjectData['pscid'] = $candidate->getPSCID(); + $subjectData['dccid'] = $candidate->getCandID(); + $subjectData['visit_label'] = $this->timepoint->getVisitLabel(); + $subjectData['sessionID'] = $this->timepoint->getSessionID(); + $subjectData['site'] = $this->timepoint->getPSC(); + $subjectData['dob'] = $candidate->getCandidateDoB(); + $subjectData['sex'] = $candidate->getCandidateSex(); + $subjectData['subproject'] = $this->timepoint->getData('SubprojectTitle'); + $subjectData['output_type'] = $outputType; + + return $subjectData; + } + + + + /** + * Get the list of electrophysiology recordings with their recording information. + * + * @param string $outputType output type to be displayed + * + * @return array with the file collection + */ + function getFilesData(string $outputType) + { + $db = \NDB_Factory::singleton()->database(); + + $fileCollection = []; + $params = []; + $params['SID'] = $this->sessionID; + $query = 'SELECT + pf.PhysiologicalFileID + FROM + physiological_file pf '; + + if ($outputType != 'all_types') { + $query .= 'LEFT JOIN physiological_output_type pot ON '; + $query .= 'pf.PhysiologicalOutputTypeID=' + .'pot.PhysiologicalOutputTypeID '; + $query .= 'WHERE SessionID=:SID '; + $query .= 'AND pot.OutputTypeName = :OTN '; + $params['OTN'] = $outputType; + } else { + $query .= "WHERE SessionID=:SID AND pf.ParentID IS NULL"; + } + + $physiologicalFiles = $db->pselect($query, $params); + + foreach ($physiologicalFiles as $file) { + $fileCollection[]['file'] = $this->getSummary($file); + } + + return $fileCollection; + } + + + /** + * Get the electrophysiology recording summary metadata. + * + * @param array $file electrophysiology file data + * + * @return array with the file metadata + */ + function getSummary(array $file) : array + { + $db = \NDB_Factory::singleton()->database(); + + $fileSummary = []; + $physioFileID = intval($file['PhysiologicalFileID']); + $physioFileObj = new ElectrophysioFile($physioFileID); + $physioFile = $physioFileObj->getParameter('FilePath'); + $modality = $physioFileObj->getParameter('Modality'); + $modalityPrefix = $modality === 'ieeg' ? 'iEEG' : 'EEG'; + $modalityCapName = $modality === 'ieeg' ? 'Electrode' : 'Cap'; + + $fileSummary['id'] = $physioFileID; + $fileSummary['name'] = basename($physioFile); + + // Summary + + $channels = ['EEG', 'EOG', 'ECG', 'EMG']; + if ($modality === 'ieeg') { + $channels = array_merge(['ECOG', 'SEEG'], $channels); + } + + $fileSummary['summary'] = [ + [ + 'name' => 'Sampling Frequency', + 'value' => $physioFileObj->getParameter('SamplingFrequency'), + ], + ]; + $fileSummary['summary'] = array_merge( + $fileSummary['summary'], + array_map( + fn($channel) => + [ + 'name' => $channel.' Channel Count', + 'value' => $physioFileObj->getParameter( + $channel.'ChannelCount' + ), + ], + $channels + ) + ); + $fileSummary['summary'] = array_merge( + $fileSummary['summary'], + [ + [ + 'name' => 'Reference', + 'value' => $physioFileObj->getParameter( + $modalityPrefix.'Reference' + ), + ], + [ + 'name' => 'Powerline Frequency', + 'value' => $physioFileObj->getParameter('PowerLineFrequency'), + ], + ] + ); + + // Details + + $fileSummary['details'] = [ + [ + 'name' => 'Task Name', + 'value' => $physioFileObj->getParameter('TaskName'), + ], + [ + 'name' => 'Task Description', + 'value' => $physioFileObj->getParameter('TaskDescription'), + ], + [ + 'name' => 'Instructions', + 'value' => $physioFileObj->getParameter('Instructions'), + ], + [ + 'name' => 'Recording Type', + 'value' => $physioFileObj->getParameter('RecordingType'), + ], + [ + 'name' => 'Recording Split Count', + 'value' => $physioFileObj->getParameter('SplitCount'), + ], + [ + 'name' => 'Recording Duration', + 'value' => $physioFileObj->getParameter('RecordingDuration'), + ], + [ + 'name' => 'Epoch Length', + 'value' => $physioFileObj->getParameter('EpochLength'), + ], + [ + 'name' => 'Subject Artefact Description', + 'value' => $physioFileObj->getParameter( + 'SubjectArtefactDescription' + ), + ], + [ + 'name' => 'Head Circumference', + 'value' => $physioFileObj->getParameter('HeadCircumference'), + ], + [ + 'name' => 'Placement Scheme', + 'value' => $physioFileObj->getParameter( + $modalityPrefix.'PlacementScheme' + ), + ], + [ + 'name' => 'Ground', + 'value' => $physioFileObj->getParameter($modalityPrefix.'Ground'), + ], + [ + 'name' => 'Trigger Channel Count', + 'value' => $physioFileObj->getParameter('TriggerChannelCount'), + ], + [ + 'name' => 'Misc Channel Count', + 'value' => $physioFileObj->getParameter('MiscChannelCount'), + ], + [ + 'name' => 'CogAtlas ID', + 'value' => $physioFileObj->getParameter('CogAtlasID'), + ], + [ + 'name' => 'CogPO ID', + 'value' => $physioFileObj->getParameter('CogPOID'), + ], + [ + 'name' => 'Institution Name', + 'value' => $physioFileObj->getParameter('InstitutionName'), + ], + [ + 'name' => 'Institution Address', + 'value' => $physioFileObj->getParameter('InstitutionAddress'), + ], + [ + 'name' => 'Manufacturer', + 'value' => $physioFileObj->getParameter('Manufacturer'), + ], + [ + 'name' => 'Manufacturers Model Name', + 'value' => $physioFileObj->getParameter( + 'ManufacturersModelName' + ), + ], + [ + 'name' => $modalityCapName.' Manufacturer', + 'value' => $physioFileObj->getParameter( + $modalityCapName.'Manufacturer' + ), + ], + [ + 'name' => $modalityCapName.' Manufacturer\'s Model Name', + 'value' => $physioFileObj->getParameter( + $modalityCapName.'ManufacturersModelName' + ), + ], + [ + 'name' => 'Device Serial Number', + 'value' => $physioFileObj->getParameter('DeviceSerialNumber'), + ], + [ + 'name' => 'Hardware Filters', + 'value' => $physioFileObj->getParameter('HardwareFilters'), + ], + [ + 'name' => 'Software Versions', + 'value' => $physioFileObj->getParameter('SoftwareVersions'), + ], + [ + 'name' => 'Software Filters', + 'value' => $physioFileObj->getParameter('SoftwareFilters'), + ], + ]; + + if ($modality == 'ieeg') { + $fileSummary['details'][] = [ + 'name' => 'DC Offset Correction', + 'value' => $physioFileObj->getParameter('DCOffsetCorrection'), + ]; + + $fileSummary['details'][] = [ + 'name' => 'Electrode Groups', + 'value' => $physioFileObj->getParameter('ElectrodeGroups'), + ]; + + $fileSummary['details'][] = [ + 'name' => 'Electrical Stimulation', + 'value' => $physioFileObj->getParameter('ElectricalStimulation'), + ]; + + $fileSummary['details'][] = [ + 'name' => 'Electrical Stimulation Parameters', + 'value' => $physioFileObj->getParameter( + 'ElectricalStimulationParameters' + ), + ]; + } + + // get the links to the files for downloads + + $fileSummary['downloads'] = $this->getDownloadLinks($physioFileObj); + $fileSummary['chunks_urls'] = $physioFileObj->getChunksURLs(); + + // ##################### EEGNET OVERRIDE START ################## // + /*$fileOutput = $db->pselectone( + 'SELECT pot.OutputTypeName + FROM physiological_output_type pot + INNER JOIN physiological_file AS pf + ON pf.PhysiologicalFileID=:PFID + AND pf.PhysiologicalOutputTypeID=pot.PhysiologicalOutputTypeID', + ['PFID' => $physioFileID] + );*/ + + // Get the annotation data + $annotations = new ElectrophysioAnnotations( + intval($physioFileID) + ); + $fileSummary['annotations'] = $annotations->getData(); + // ##################### EEGNET OVERRIDE END ################## // + $fileSummary['output_type'] = $fileOutput; + $fileSummary['splitData'] = $physioFileObj->getSplitData(0); + + return $fileSummary; + } + + /** + * Gets the download link for all the electrophysiology files + * + * @param ElectrophysioFile $physioFile ElectrophysiologyFile instance + * + * @return array array with the path to the different files associated to the + * electrophysiology file + */ + function getDownloadLinks(ElectrophysioFile $physioFile): array + { + $nSplit = intval($physioFile->getParameter('SplitCount')); + $downloadLinks = []; + + if ($nSplit === 0) { + $downloadLinks[] = [ + 'groupName' => '', + 'links' => $this->getPhysioFileDownloadlinks($physioFile), + ]; + } else { + foreach (range(0, $nSplit-1) as $i) { + $splitData = $physioFile->getSplitData($i); + if (is_null($splitData)) { + continue; + } + + $splitPhysioFile = $splitData['splitPhysioFile']; + + $downloadLinks[] = [ + 'groupName' => 'Split '.($i+1), + 'links' => $this->getPhysioFileDownloadlinks( + $splitPhysioFile + ), + ]; + } + } + return $downloadLinks; + } + + /** + * Gets the download link for the files associated to a particular + * electrophysiology file (channels.tsv, electrodes.tsv, task events.tsv...) + * + * @param ElectrophysioFile $physioFileObj ElectrophysiologyFile instance + * + * @return array array with the path to the different files associated to the + * electrophysiology file + */ + function getPhysioFileDownloadlinks(ElectrophysioFile $physioFileObj): array + { + $physioFileID = $physioFileObj->getParameter('PhysiologicalFileID'); + $physioFile = $physioFileObj->getParameter('FilePath'); + $db = \NDB_Factory::singleton()->database(); + $downloadLinks = []; + + $downloadLinks[] = [ + 'type' => 'physiological_file', + 'file' => $physioFile, + 'label' => 'EEG File', + ]; + + $queries = [ + 'physiological_electrode' => 'physiological_electrode_file', + 'physiological_channel' => 'physiological_channel_file', + 'physiological_event_archive' => 'physiological_event_files', + 'physiological_annotation_archive' => 'physiological_annotation_files', + 'physiological_archive' => 'all_files', + ]; + + $labels = [ + 'physiological_electrode_file' => 'Electrodes', + 'physiological_channel_file' => 'Channels', + 'physiological_event_files' => 'Events', + 'physiological_annotation_files' => 'Annotations', + 'all_files' => 'All Files', + ]; + + foreach ($queries as $query_key => $query_value) { + $query_statement = "SELECT + DISTINCT(FilePath), '$query_value' AS FileType + FROM + $query_key + WHERE + PhysiologicalFileID=:PFID"; + $query_statement = $db->pselectRow( + $query_statement, + ['PFID' => $physioFileID] + ); + if (isset($query_statement['FileType'])) { + $downloadLinks[] = [ + 'type' => $query_statement['FileType'], + 'file' => $query_statement['FilePath'], + 'label' => $labels[$query_statement['FileType']] + ]; + } else { + $downloadLinks[] = [ + 'type' => $query_value, + 'file' => '', + 'label' => $labels[$query_value], + ]; + } + } + + $queryFDT = "SELECT + Value AS FilePath, + 'physiological_fdt_file' AS FileType + FROM + physiological_parameter_file + JOIN parameter_type AS pt USING (ParameterTypeID) + WHERE + pt.Name='fdt_file' + AND PhysiologicalFileID=:PFID"; + $queryFDT = $db->pselectRow($queryFDT, ['PFID' => $physioFileID]); + if (isset($queryFDT['FileType'])) { + $downloadLinks[] = [ + 'type' => $queryFDT['FileType'], + 'file' => $queryFDT['FilePath'], + 'label' => '', + ]; + } else { + $downloadLinks[] = [ + 'type' => 'physiological_fdt_file', + 'file' => '', + 'label' => '', + ]; + } + return $downloadLinks; + } + + /** + * Get JS Dependencies + * + * @return array of extra JS files that this page depends on + */ + function getJSDependencies() + { + $depends = parent::getJSDependencies(); + $factory = \NDB_Factory::singleton(); + $baseurl = $factory->settings()->getBaseURL(); + $depends = array_merge( + $depends, + [ + $baseurl + . '/electrophysiology_browser/js/electrophysiologySessionView.js', + ] + ); + return $depends; + } + + /** + * Get CSS Dependencies + * + * @return array + */ + function getCSSDependencies() + { + $depends = parent::getCSSDependencies(); + $factory = \NDB_Factory::singleton(); + $baseurl = $factory->settings()->getBaseURL(); + $depends = array_merge( + $depends, + [ + $baseurl + . '/electrophysiology_browser/css/electrophysiology_browser.css', + ] + ); + return $depends; + } + + /** + * Generate a breadcrumb trail for this page. + * + * @return \LORIS\BreadcrumbTrail + */ + public function getBreadcrumbs(): \LORIS\BreadcrumbTrail + { + return new \LORIS\BreadcrumbTrail( + new \LORIS\Breadcrumb( + 'Electrophysiology Browser', + '/electrophysiology_browser' + ), + new \LORIS\Breadcrumb( + 'View Session', + "/electrophysiology_browser/sessions/$this->sessionID" + ) + ); + } +} From 93469da021f77e1582ebbaf9683e79b9af27bf5c Mon Sep 17 00:00:00 2001 From: jesscall Date: Fri, 11 Feb 2022 14:55:01 -0500 Subject: [PATCH 024/126] first commit --- jsx/electrophysiologySessionView.js | 279 +++++++++--------- .../src/eeglab/EEGLabSeriesProvider.tsx | 142 ++++----- .../src/series/components/AnnotationForm.tsx | 108 +++---- .../src/series/components/SeriesRenderer.tsx | 22 +- php/annotations.class.inc | 59 ++-- 5 files changed, 299 insertions(+), 311 deletions(-) diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js index 45b96fe202f..c3bdfb4494c 100644 --- a/jsx/electrophysiologySessionView.js +++ b/jsx/electrophysiologySessionView.js @@ -313,13 +313,13 @@ class ElectrophysiologySessionView extends Component { render() { if (!this.state.isLoaded) { return ( - - ); + + ); } if (this.state.isLoaded) { @@ -337,148 +337,151 @@ class ElectrophysiologySessionView extends Component { const splitPagination = []; for (const j of Array(file.splitData?.splitCount).keys()) { splitPagination.push( - this.getSplitData(file.id, i, j)} - >{j+1} - ); + this.getSplitData(file.id, i, j)} + >{j+1} + ); } database.push( -
+
-
- - - {file.splitData && - <> - - Viewing signal split file: - - this.getSplitData( - file.id, - i, - file.splitData.splitIndex-1 - )} - > - {'<'} - - {splitPagination} - this.getSplitData( - file.id, - i, - file.splitData.splitIndex+1 - ) - } - > - {'>'} - - - } - - -
-
- -
- -
- -
-
-
-
-
-
- ); +
+ + + {file.splitData && + <> + + Viewing signal split file: + + this.getSplitData( + file.id, + i, + file.splitData.splitIndex-1 + )} + > + {'<'} + + {splitPagination} + this.getSplitData( + file.id, + i, + file.splitData.splitIndex+1 + ) + } + > + {'>'} + + + } + + +
+
+ +
+ +
+ +
+
+
+
+ +
+ ); } return ( -
+
- {database} -
- ); + Headers={[ + 'PSCID', + 'DCCID', + 'Visit Label', + 'Site', + 'DOB', + 'Sex', + 'Output Type', + 'Subproject', + ]} + Data={[ + [ + this.state.patient.info.pscid, + this.state.patient.info.dccid, + this.state.patient.info.visit_label, + this.state.patient.info.site, + this.state.patient.info.dob, + this.state.patient.info.sex, + this.state.patient.info.output_type, + this.state.patient.info.subproject, + ], + ]} + freezeColumn='PSCID' + Hide={{rowsPerPage: true, downloadCSV: true, defaultColumn: true}} + /> + {database} +
+ ); } } } diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index 1e5feb029c4..fa59d1fc30f 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -117,75 +117,81 @@ class EEGLabSeriesProvider extends Component { } ) // ##################### EEGNET OVERRIDE START ################## // - .then(() => Promise.race(racers(fetchText, epochsURL)) - .then((text) => { - if (!(typeof text.json === 'string' - || text.json instanceof String)) return; - return tsvParse(text.json) - .map((eventRow, i) => { - // --- Fix related to Brock face-13 data - const label = (eventRow.trial_type === 'n/a' && 'sample' in eventRow) ? - eventRow.sample : eventRow.trial_type; - return { - onset: parseFloat(eventRow.onset), - duration: parseFloat(eventRow.duration), - type: 'Event', - label: label, - comment: null, - channels: 'all', - annotationInstanceID: null, - } - }); - }).then(events => { - let epochs = events; - annotations.instances.map(instance => { - const label = annotations.labels - .find(label => - label.AnnotationLabelID == instance.AnnotationLabelID - ).LabelName; - epochs.push({ - onset: parseFloat(instance.Onset), - duration: parseFloat(instance.Duration), - type: 'Annotation', - label: label, - comment: instance.Description, - channels: 'all', - annotationInstanceID: instance.AnnotationInstanceID, - }); - }); - return epochs; - }).then(epochs => { - this.store.dispatch( - setEpochs( - epochs - .flat() - .sort(function(a, b) { - return a.onset - b.onset; - }) - ) - ); - // ##################### EEGNET OVERRIDE END ################## // - this.store.dispatch(updateFilteredEpochs()); - }) + .then(() => { + if (epochsURL[0] !== "") { + Promise.race(racers(fetchText, epochsURL)) + .then((text) => { + console.log(epochsURL); + if (!(typeof text.json === 'string' + || text.json instanceof String)) return; + return tsvParse(text.json) + .map((eventRow, i) => { + // --- Fix related to Brock face-13 data + const label = (eventRow.trial_type === 'n/a' && 'sample' in eventRow) ? + eventRow.sample : eventRow.trial_type; + return { + onset: parseFloat(eventRow.onset), + duration: parseFloat(eventRow.duration), + type: 'Event', + label: label, + comment: null, + channels: 'all', + annotationInstanceID: null, + } + }); + }).then(events => { + let epochs = events; + annotations.instances.map(instance => { + const label = annotations.labels + .find(label => + label.AnnotationLabelID == instance.AnnotationLabelID + ).LabelName; + epochs.push({ + onset: parseFloat(instance.Onset), + duration: parseFloat(instance.Duration), + type: 'Annotation', + label: label, + comment: instance.Description, + channels: 'all', + annotationInstanceID: instance.AnnotationInstanceID, + }); + }); + return epochs; + }).then(epochs => { + this.store.dispatch( + setEpochs( + epochs + .flat() + .sort(function (a, b) { + return a.onset - b.onset; + }) + ) + ); + // ##################### EEGNET OVERRIDE END ################## // + this.store.dispatch(updateFilteredEpochs()); + }) + } + } ); - - Promise.race(racers(fetchText, electrodesURL)) - .then((text) => { - if (!(typeof text.json === 'string' - || text.json instanceof String)) return; - this.store.dispatch( - setElectrodes( - tsvParse(text.json).map(({name, x, y, z}) => ({ - name: name, - channelIndex: null, - position: [parseFloat(x), parseFloat(y), parseFloat(z)], - })) - ) - ); - }) - .catch((error) => { - console.error(error); - }); + if (electrodesURL[0]!== "") { + Promise.race(racers(fetchText, electrodesURL)) + .then((text) => { + if (!(typeof text.json === 'string' + || text.json instanceof String)) return; + this.store.dispatch( + setElectrodes( + tsvParse(text.json).map(({ name, x, y, z }) => ({ + name: name, + channelIndex: null, + position: [parseFloat(x), parseFloat(y), parseFloat(z)], + })) + ) + ); + }) + .catch((error) => { + console.error(error); + }); + } } /** diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 990e7df79e1..7bfbc259598 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -1,5 +1,5 @@ import React, {useEffect, useState} from 'react'; -import {Epoch as EpochType, RightPanel} from '../store/types'; +import {AnnotationMetadata, Epoch as EpochType, RightPanel} from '../store/types'; import {connect, DefaultRootState} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; import {setRightPanel} from '../store/state/rightPanel'; @@ -27,6 +27,8 @@ type CProps = { toggleEpoch: (_: number) => void, updateActiveEpoch: (_: number) => void, interval: [number, number], + physioFileID: number, + annotationMetadata: AnnotationMetadata, }; const AnnotationForm = ({ @@ -43,6 +45,8 @@ const AnnotationForm = ({ toggleEpoch, updateActiveEpoch, interval, + physioFileID, + annotationMetadata, }: CProps) => { const [startEvent = '', endEvent = ''] = timeSelection || []; let [event, setEvent] = useState([startEvent, endEvent]); @@ -158,13 +162,10 @@ const AnnotationForm = ({ } const duration = endTime - startTime; - // get sessionID from path - const sessionID = window.location.pathname.split('/')[3]; - // set body // instance_id = null for new annotations const body = { - sessionID: sessionID, + physioFileID: physioFileID, instance_id: currentAnnotation ? currentAnnotation.annotationInstanceID : null, instance: { onset: startTime, @@ -192,37 +193,41 @@ const AnnotationForm = ({ body: JSON.stringify(body), }).then(response => { if (response.ok) { - setIsSubmitted(false); + return response.json(); + } + }).then(data => { + setIsSubmitted(false); - // if in edit mode, remove old annotation instance - if (currentAnnotation !== null) { - epochs.splice(epochs.indexOf(currentAnnotation), 1); - } - epochs.push(newAnnotation); - setEpochs( - epochs - .sort(function(a, b) { - return a.onset - b.onset; - }) - ); + // if in edit mode, remove old annotation instance + if (currentAnnotation !== null) { + epochs.splice(epochs.indexOf(currentAnnotation), 1); + } else { + newAnnotation.annotationInstanceID = parseInt(data.instance_id); + } + epochs.push(newAnnotation); + setEpochs( + epochs + .sort(function(a, b) { + return a.onset - b.onset; + }) + ); - // Reset Form - handleReset(); - - // Disaply success message - const message = currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'; - swal.fire( - 'Success', - message, - 'success' - ); + // Reset Form + handleReset(); + + // Disaply success message + const message = currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'; + swal.fire( + 'Success', + message, + 'success' + ); - // If in edit mode, switch back to annotation panel - if (currentAnnotation !== null) { - setCurrentAnnotation(null); - setRightPanel('annotationList'); - } - } + // If in edit mode, switch back to annotation panel + if (currentAnnotation !== null) { + setCurrentAnnotation(null); + setRightPanel('annotationList'); + } }).catch(error => { console.log(error); // Display error message @@ -238,9 +243,8 @@ const AnnotationForm = ({ useEffect(() => { if (isDeleted) { const url = window.location.origin + '/electrophysiology_browser/annotations/'; - const sessionID = window.location.pathname.split('/')[3]; const body = { - sessionID: sessionID, + physioFileID: physioFileID, instance_id: currentAnnotation ? currentAnnotation.annotationInstanceID : null, }; @@ -303,33 +307,13 @@ const AnnotationForm = ({ } }, [isDeleted]); - const labelOptions = { - 'manual_exclusion': 'Exclusion Flag - Manual', - 'ambiguous': 'Ambiguous', - 'artifact': 'Artifact', - 'motion': 'Motion', - 'flux_jump': 'Flux jump', - 'line_noise': 'Line Noise', - 'muscle': 'Muscle', - 'epilepsy_interictal': 'Epilepsy interictal', - 'epilepsy_preictal': 'Epilepsy preictal', - 'epilepsy_seizure': 'Epilepsy seizure', - 'epilepsy_postictal': 'Epilepsy postictal', - 'epileptiform': 'Epileptiform', - 'epileptiform_single': 'Epileptiform single', - 'epileptiform_run': 'Epileptiform run', - 'eye_blink': 'Eye blink', - 'eye_movement': 'Eye movement', - 'eye_fixation': 'Eye fixation', - 'sleep_N1': 'Sleep N1', - 'sleep_N2': 'Sleep N2', - 'sleep_N3': 'Sleep N3', - 'sleep_REM': 'Sleep REM', - 'sleep_wake': 'Sleep wake', - 'sleep_spindle': 'Sleep spindle', - 'sleep_k-complex': 'Sleep k-complex', - 'scorelabeled': 'Score labeled' - } + let labelOptions = {}; + annotationMetadata.labels.map(label => { + labelOptions = { + ...labelOptions, + [label.LabelName]: label.LabelName + } + }); return (
void, dragEnd: (_: number) => void, limit: number, + physioFileID: number, + annotationMetadata: AnnotationMetadata, }; const SeriesRenderer: FunctionComponent = ({ @@ -115,6 +118,8 @@ const SeriesRenderer: FunctionComponent = ({ dragContinue, dragEnd, limit, + physioFileID, + annotationMetadata, }) => { if (channels.length === 0) return null; @@ -602,7 +607,9 @@ const SeriesRenderer: FunctionComponent = ({ { // ##################### EEGNET OVERRIDE START ################## // - epochs.length > 0 && + [...Array(epochs.length).keys()].filter((i) => + epochs[i].type === 'Event' + ).length > 0 && } - {epochs.length > 0 && + {[...Array(epochs.length).keys()].filter((i) => + epochs[i].type === 'Annotation' + ).length > 0 &&
{rightPanel &&
- {rightPanel === 'annotationForm' && } + {rightPanel === 'annotationForm' && + + } {/* ##################### EEGNET OVERRIDE START ################## */} {rightPanel === 'eventList' && } {rightPanel === 'annotationList' && } @@ -716,7 +730,7 @@ SeriesRenderer.defaultProps = { hidden: [], channelMetadata: [], offsetIndex: 1, - limit: MAX_CHANNELS, + limit: MAX_CHANNELS }; export default connect( diff --git a/php/annotations.class.inc b/php/annotations.class.inc index 65e398d403a..1a38285cdce 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -91,29 +91,15 @@ class Annotations extends \NDB_Page return (new \LORIS\Http\Response\JSON\Unauthorized()); } - // ##################### EEGNET OVERRIDE START ################## // - if (!isset($parameters['sessionID']) - // ##################### EEGNET OVERRIDE END ################## // + if (!isset($parameters['physioFileID']) || !isset($parameters['instance_id']) ) { return (new \LORIS\Http\Response\JSON\BadRequest()); } - // ##################### EEGNET OVERRIDE START ################## // - $physioFileID = $db->pselectOne( - 'SELECT PhysiologicalFileID - FROM physiological_file - WHERE SessionID=:SID', - ['SID' => $parameters['sessionID']] - ); - - if (!isset($physioFileID)) { - return (new \LORIS\Http\Response\JSON\BadRequest()); - } - - (new ElectrophysioAnnotations(intval($physioFileID))) - ->delete((int) $parameters['instance_id']); - // ##################### EEGNET OVERRIDE END ################## // + (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) + ->delete(intval($parameters['instance_id'])); + return (new \LORIS\Http\Response\JSON\OK()); case 'POST': // ##################### EEGNET OVERRIDE START ################## // @@ -124,26 +110,9 @@ class Annotations extends \NDB_Page return (new \LORIS\Http\Response\JSON\Unauthorized()); } - // ##################### EEGNET OVERRIDE START ################## // - /*if (!isset($parameters['physioFileID'])) { - return (new \LORIS\Http\Response\JSON\BadRequest()); - }*/ - - if (!isset($parameters['sessionID'])) { - return (new \LORIS\Http\Response\JSON\BadRequest()); - } - - $physioFileID = $db->pselectOne( - 'SELECT PhysiologicalFileID - FROM physiological_file - WHERE SessionID=:SID', - ['SID' => $parameters['sessionID']] - ); - - if (!isset($physioFileID)) { + if (!isset($parameters['physioFileID'])) { return (new \LORIS\Http\Response\JSON\BadRequest()); } - // ##################### EEGNET OVERRIDE END ################## // $instance_data = $parameters['instance']; // ##################### EEGNET OVERRIDE START ################## // @@ -155,16 +124,28 @@ class Annotations extends \NDB_Page 'author' => $user->getFullname() ]; - $instance_id = (int) $parameters['instance_id'] ?? null; + $instance_id = $parameters['instance_id'] ? + (int) $parameters['instance_id'] : null; // ##################### EEGNET OVERRIDE END ################## // $parameter_id = $parameters['parameter_id'] ?? null; // ##################### EEGNET OVERRIDE START ################## // - (new ElectrophysioAnnotations(intval($physioFileID))) + (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) ->update($instance_data, $metadata, $instance_id, $parameter_id); + + // if new annotation, get instanceID + if (is_null($instance_id)) { + $instance_id = $db->pselectOne( + "SELECT MAX(AnnotationInstanceID) + FROM physiological_annotation_instance", + [] + ); + } // ##################### EEGNET OVERRIDE END ################## // - return (new \LORIS\Http\Response\JSON\OK()); + return (new \LORIS\Http\Response\JSON\OK( + ['instance_id' => $instance_id] + )); default: return (new \LORIS\Http\Response\JSON\MethodNotAllowed( ["GET", "DELETE", "POST"] From 43c1b256228a0646c91f18128410a014638f64a5 Mon Sep 17 00:00:00 2001 From: jesscall Date: Tue, 15 Feb 2022 10:51:11 -0500 Subject: [PATCH 025/126] overrides documented --- jsx/electrophysiologySessionView.js | 2 + .../src/eeglab/EEGLabSeriesProvider.tsx | 142 +++++++++--------- .../src/series/components/AnnotationForm.tsx | 8 +- .../src/series/components/SeriesRenderer.tsx | 21 +-- php/annotations.class.inc | 2 +- 5 files changed, 86 insertions(+), 89 deletions(-) diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js index c3bdfb4494c..74dfdcabf8b 100644 --- a/jsx/electrophysiologySessionView.js +++ b/jsx/electrophysiologySessionView.js @@ -422,10 +422,12 @@ class ElectrophysiologySessionView extends Component { } + {/* ##################### EEGNET OVERRIDE START ################## */} + {/* ##################### EEGNET OVERRIDE END ################## */}
diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index fa59d1fc30f..1e5feb029c4 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -117,81 +117,75 @@ class EEGLabSeriesProvider extends Component { } ) // ##################### EEGNET OVERRIDE START ################## // - .then(() => { - if (epochsURL[0] !== "") { - Promise.race(racers(fetchText, epochsURL)) - .then((text) => { - console.log(epochsURL); - if (!(typeof text.json === 'string' - || text.json instanceof String)) return; - return tsvParse(text.json) - .map((eventRow, i) => { - // --- Fix related to Brock face-13 data - const label = (eventRow.trial_type === 'n/a' && 'sample' in eventRow) ? - eventRow.sample : eventRow.trial_type; - return { - onset: parseFloat(eventRow.onset), - duration: parseFloat(eventRow.duration), - type: 'Event', - label: label, - comment: null, - channels: 'all', - annotationInstanceID: null, - } - }); - }).then(events => { - let epochs = events; - annotations.instances.map(instance => { - const label = annotations.labels - .find(label => - label.AnnotationLabelID == instance.AnnotationLabelID - ).LabelName; - epochs.push({ - onset: parseFloat(instance.Onset), - duration: parseFloat(instance.Duration), - type: 'Annotation', - label: label, - comment: instance.Description, - channels: 'all', - annotationInstanceID: instance.AnnotationInstanceID, - }); - }); - return epochs; - }).then(epochs => { - this.store.dispatch( - setEpochs( - epochs - .flat() - .sort(function (a, b) { - return a.onset - b.onset; - }) - ) - ); - // ##################### EEGNET OVERRIDE END ################## // - this.store.dispatch(updateFilteredEpochs()); - }) - } - } - ); - if (electrodesURL[0]!== "") { - Promise.race(racers(fetchText, electrodesURL)) - .then((text) => { - if (!(typeof text.json === 'string' - || text.json instanceof String)) return; - this.store.dispatch( - setElectrodes( - tsvParse(text.json).map(({ name, x, y, z }) => ({ - name: name, - channelIndex: null, - position: [parseFloat(x), parseFloat(y), parseFloat(z)], - })) - ) - ); - }) - .catch((error) => { - console.error(error); + .then(() => Promise.race(racers(fetchText, epochsURL)) + .then((text) => { + if (!(typeof text.json === 'string' + || text.json instanceof String)) return; + return tsvParse(text.json) + .map((eventRow, i) => { + // --- Fix related to Brock face-13 data + const label = (eventRow.trial_type === 'n/a' && 'sample' in eventRow) ? + eventRow.sample : eventRow.trial_type; + return { + onset: parseFloat(eventRow.onset), + duration: parseFloat(eventRow.duration), + type: 'Event', + label: label, + comment: null, + channels: 'all', + annotationInstanceID: null, + } + }); + }).then(events => { + let epochs = events; + annotations.instances.map(instance => { + const label = annotations.labels + .find(label => + label.AnnotationLabelID == instance.AnnotationLabelID + ).LabelName; + epochs.push({ + onset: parseFloat(instance.Onset), + duration: parseFloat(instance.Duration), + type: 'Annotation', + label: label, + comment: instance.Description, + channels: 'all', + annotationInstanceID: instance.AnnotationInstanceID, + }); }); - } + return epochs; + }).then(epochs => { + this.store.dispatch( + setEpochs( + epochs + .flat() + .sort(function(a, b) { + return a.onset - b.onset; + }) + ) + ); + // ##################### EEGNET OVERRIDE END ################## // + this.store.dispatch(updateFilteredEpochs()); + }) + ); + + Promise.race(racers(fetchText, electrodesURL)) + .then((text) => { + if (!(typeof text.json === 'string' + || text.json instanceof String)) return; + this.store.dispatch( + setElectrodes( + tsvParse(text.json).map(({name, x, y, z}) => ({ + name: name, + channelIndex: null, + position: [parseFloat(x), parseFloat(y), parseFloat(z)], + })) + ) + ); + }) + .catch((error) => { + console.error(error); + }); } /** diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 7bfbc259598..623664108cf 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -23,12 +23,12 @@ type CProps = { setEpochs: (_: EpochType[]) => void, currentAnnotation: EpochType, setCurrentAnnotation: (_: EpochType) => void, + physioFileID: number, + annotationMetadata: AnnotationMetadata, // ##################### EEGNET OVERRIDE END ################## // toggleEpoch: (_: number) => void, updateActiveEpoch: (_: number) => void, interval: [number, number], - physioFileID: number, - annotationMetadata: AnnotationMetadata, }; const AnnotationForm = ({ @@ -41,12 +41,12 @@ const AnnotationForm = ({ setEpochs, currentAnnotation, setCurrentAnnotation, + physioFileID, + annotationMetadata, // ##################### EEGNET OVERRIDE END ################## // toggleEpoch, updateActiveEpoch, interval, - physioFileID, - annotationMetadata, }: CProps) => { const [startEvent = '', endEvent = ''] = timeSelection || []; let [event, setEvent] = useState([startEvent, endEvent]); diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index d8228ef0349..27a253a65c4 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -44,9 +44,9 @@ import { Channel, Epoch as EpochType, RightPanel, +// ##################### EEGNET OVERRIDE START ################## // AnnotationMetadata, } from '../store/types'; -// ##################### EEGNET OVERRIDE START ################## // import {setCurrentAnnotation} from '../store/state/currentAnnotation'; // ##################### EEGNET OVERRIDE END ################## // @@ -75,15 +75,15 @@ type CProps = { setViewerWidth: (_: number) => void, setViewerHeight: (_: number) => void, setFilteredEpochs: (_: number[]) => void, - // ##################### EEGNET OVERRIDE START ################## // - setCurrentAnnotation: (_: EpochType) => void, - // ##################### EEGNET OVERRIDE END ################## // dragStart: (_: number) => void, dragContinue: (_: number) => void, dragEnd: (_: number) => void, limit: number, + // ##################### EEGNET OVERRIDE START ################## // + setCurrentAnnotation: (_: EpochType) => void, physioFileID: number, annotationMetadata: AnnotationMetadata, + // ##################### EEGNET OVERRIDE END ################## // }; const SeriesRenderer: FunctionComponent = ({ @@ -111,15 +111,15 @@ const SeriesRenderer: FunctionComponent = ({ setViewerWidth, setViewerHeight, setFilteredEpochs, - // ##################### EEGNET OVERRIDE START ################## // - setCurrentAnnotation, - // ##################### EEGNET OVERRIDE END ################## // dragStart, dragContinue, dragEnd, limit, + // ##################### EEGNET OVERRIDE START ################## // + setCurrentAnnotation, physioFileID, annotationMetadata, + // ##################### EEGNET OVERRIDE END ################## // }) => { if (channels.length === 0) return null; @@ -627,7 +627,8 @@ const SeriesRenderer: FunctionComponent = ({ } } - {[...Array(epochs.length).keys()].filter((i) => + { + [...Array(epochs.length).keys()].filter((i) => epochs[i].type === 'Annotation' ).length > 0 &&
{rightPanel &&
+ {/* ##################### EEGNET OVERRIDE START ################## */} {rightPanel === 'annotationForm' && } - {/* ##################### EEGNET OVERRIDE START ################## */} {rightPanel === 'eventList' && } {rightPanel === 'annotationList' && } {/* ##################### EEGNET OVERRIDE START ################## */} @@ -730,7 +731,7 @@ SeriesRenderer.defaultProps = { hidden: [], channelMetadata: [], offsetIndex: 1, - limit: MAX_CHANNELS + limit: MAX_CHANNELS, }; export default connect( diff --git a/php/annotations.class.inc b/php/annotations.class.inc index 1a38285cdce..0bc7de875b2 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -141,11 +141,11 @@ class Annotations extends \NDB_Page [] ); } - // ##################### EEGNET OVERRIDE END ################## // return (new \LORIS\Http\Response\JSON\OK( ['instance_id' => $instance_id] )); + // ##################### EEGNET OVERRIDE END ################## // default: return (new \LORIS\Http\Response\JSON\MethodNotAllowed( ["GET", "DELETE", "POST"] From 681d82f78263af70df6411c3c696fd8f4da49c3e Mon Sep 17 00:00:00 2001 From: jesscall Date: Tue, 15 Feb 2022 11:46:47 -0500 Subject: [PATCH 026/126] fixing issue with bids_import duplication of labels - LORIS-MRI/#763 --- php/annotations.class.inc | 9 ++++++--- php/models/electrophysioannotations.class.inc | 7 ++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/php/annotations.class.inc b/php/annotations.class.inc index 0bc7de875b2..d618cef3137 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -125,7 +125,7 @@ class Annotations extends \NDB_Page ]; $instance_id = $parameters['instance_id'] ? - (int) $parameters['instance_id'] : null; + intval($parameters['instance_id']) : null; // ##################### EEGNET OVERRIDE END ################## // $parameter_id = $parameters['parameter_id'] ?? null; @@ -137,8 +137,11 @@ class Annotations extends \NDB_Page if (is_null($instance_id)) { $instance_id = $db->pselectOne( "SELECT MAX(AnnotationInstanceID) - FROM physiological_annotation_instance", - [] + FROM physiological_annotation_instance ai + JOIN physiological_annotation_file af USING (AnnotationFileID) + WHERE PhysiologicalFileID=:physioFileID + ", + ['physioFileID' => $parameters['physioFileID']] ); } diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 1b7225167bd..6a9f12f5336 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -100,9 +100,14 @@ class ElectrophysioAnnotations //If the label is new, add to annotation label table //and get label ID $labelID = $db->pselectOne( - "SELECT AnnotationLabelID + // ##################### EEGNET OVERRIDE START ################## // + // Adding MAX here as a hack fix for now until LORIS-MRI + // bugfix for issue https://github.com/aces/Loris-MRI/issues/763 + // is available and cleanup happens of the annotation_label table + "SELECT MAX(AnnotationLabelID) FROM physiological_annotation_label WHERE LabelName=:label", + // ##################### EEGNET OVERRIDE END ################## // ['label' => $instance_data['label_name']] ); if (empty($labelID)) { From b1a1623b1bfc47bd055e6873c64f774c336d7a8c Mon Sep 17 00:00:00 2001 From: jesscall Date: Tue, 15 Feb 2022 12:10:00 -0500 Subject: [PATCH 027/126] don't save 'all' as chan value in DB --- php/models/electrophysioannotations.class.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 6a9f12f5336..7a397ae9100 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -144,7 +144,7 @@ class ElectrophysioAnnotations 'Onset' => $instance_data['onset'], 'Duration' => $instance_data['duration'], 'AnnotationLabelID' => $labelID, - 'Channels' => $instance_data['channels'], + 'Channels' => $instance_data['channels'] === 'all' ? null : $instance_data['channels'], 'Description' => $instance_data['description'] ]; // ##################### EEGNET OVERRIDE END ################## // From 69ffe7c8d371c73dc8e713336f5b1a7778306ed4 Mon Sep 17 00:00:00 2001 From: jesscall Date: Mon, 7 Mar 2022 11:20:38 -0500 Subject: [PATCH 028/126] bugfix accessing events file for visualization --- jsx/electrophysiologySessionView.js | 11 ++++------- php/sessions.class.inc | 8 ++++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js index 74dfdcabf8b..7ccee9730d0 100644 --- a/jsx/electrophysiologySessionView.js +++ b/jsx/electrophysiologySessionView.js @@ -209,13 +209,10 @@ class ElectrophysiologySessionView extends Component { ), epochsURL: dbEntry - && dbEntry.file.downloads.map( - (group) => - group.links[3]?.file - && loris.BaseURL - + '/electrophysiology_browser/file_reader/?file=' - + group.links[3].file - ), + && dbEntry.file?.epochsURL + && [loris.BaseURL + + '/electrophysiology_browser/file_reader/?file=' + + dbEntry.file.epochsURL], electrodesURL: dbEntry && dbEntry.file.downloads.map( diff --git a/php/sessions.class.inc b/php/sessions.class.inc index e3acd62e9bc..9de66a9bebc 100644 --- a/php/sessions.class.inc +++ b/php/sessions.class.inc @@ -476,6 +476,14 @@ class Sessions extends \NDB_Page intval($physioFileID) ); $fileSummary['annotations'] = $annotations->getData(); + $fileSummary['epochsURL'] = $db->pselectOne( + "SELECT FilePath + FROM physiological_event_file + WHERE PhysiologicalFileID=:physioFileID + AND FileType='tsv'", + ['physioFileID' => $physioFileID] + ); + error_log(print_r($fileSummary['epochsURL'], true)); // ##################### EEGNET OVERRIDE END ################## // $fileSummary['output_type'] = $fileOutput; $fileSummary['splitData'] = $physioFileObj->getSplitData(0); From 2a674eb93458984e3d5f4c407fbaeb4c464e362b Mon Sep 17 00:00:00 2001 From: jesscall Date: Mon, 9 May 2022 11:34:11 -0400 Subject: [PATCH 029/126] Epoch Refactor and Viewing HED Tags --- css/electrophysiology_browser.css | 11 ++++ jsx/electrophysiologySessionView.js | 6 ++ .../src/eeglab/EEGLabSeriesProvider.tsx | 28 +++++++- .../src/series/components/EventManager.tsx | 41 +++++++++--- .../src/series/store/types.tsx | 5 ++ php/models/electrophysioevents.class.inc | 64 +++++++++++++++++++ php/sessions.class.inc | 9 ++- 7 files changed, 150 insertions(+), 14 deletions(-) create mode 100644 php/models/electrophysioevents.class.inc diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index 33d8510293e..c95c147383c 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -68,6 +68,17 @@ svg { position: absolute; right: 0; } + +.epoch-tag { + padding: 5px; + background: #e7e4e4; + border-left: 5px solid #797878; +} + +.epoch-tag p { + word-wrap: break-word; + width: 95%; +} /* ##################### EEGNET OVERRIDE END ################## */ .event-list .btn.btn-primary { diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js index 7ccee9730d0..3f345a92152 100644 --- a/jsx/electrophysiologySessionView.js +++ b/jsx/electrophysiologySessionView.js @@ -146,6 +146,7 @@ class ElectrophysiologySessionView extends Component { epochsURL: null, electrodesURL: null, // ##################### EEGNET OVERRIDE START ################## // + events: null, annotations: null, // ##################### EEGNET OVERRIDE END ################## // splitData: null, @@ -223,6 +224,9 @@ class ElectrophysiologySessionView extends Component { + group.links[1].file ), // ##################### EEGNET OVERRIDE START ################## // + events: + dbEntry + && dbEntry.file.events, annotations: dbEntry && dbEntry.file.annotations, @@ -326,6 +330,7 @@ class ElectrophysiologySessionView extends Component { chunksURLs, epochsURL, // ##################### EEGNET OVERRIDE START ################## // + events, annotations, // ##################### EEGNET OVERRIDE END ################## // electrodesURL, @@ -358,6 +363,7 @@ class ElectrophysiologySessionView extends Component { } epochsURL={epochsURL} // ##################### EEGNET OVERRIDE START ################## // + events={events} annotations={annotations} // ##################### EEGNET OVERRIDE END ################## // electrodesURL={electrodesURL} diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index 1e5feb029c4..e942b4a3b86 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -18,7 +18,7 @@ import {updateFilteredEpochs} from '../series/store/logic/filterEpochs'; import {setElectrodes} from '../series/store/state/montage'; import {Channel} from '../series/store/types'; // ##################### EEGNET OVERRIDE START ################## // -import {AnnotationMetadata} from '../series/store/types'; +import {AnnotationMetadata, EventMetadata} from '../series/store/types'; // ##################### EEGNET OVERRIDE END ################## // declare global { @@ -32,6 +32,7 @@ type CProps = { epochsURL: string, electrodesURL: string, // ##################### EEGNET OVERRIDE START ################## // + events: EventMetadata, annotations: AnnotationMetadata, // ##################### EEGNET OVERRIDE END ################## // limit: number, @@ -74,6 +75,7 @@ class EEGLabSeriesProvider extends Component { epochsURL, electrodesURL, // ##################### EEGNET OVERRIDE START ################## // + events, annotations, // ##################### EEGNET OVERRIDE END ################## // limit, @@ -117,7 +119,7 @@ class EEGLabSeriesProvider extends Component { } ) // ##################### EEGNET OVERRIDE START ################## // - .then(() => Promise.race(racers(fetchText, epochsURL)) + /*.then(() => Promise.race(racers(fetchText, epochsURL)) .then((text) => { if (!(typeof text.json === 'string' || text.json instanceof String)) return; @@ -136,6 +138,25 @@ class EEGLabSeriesProvider extends Component { annotationInstanceID: null, } }); + })*/ + .then(() => { + return events.instances.map(instance => { + const onset = parseFloat(instance.Onset); + const duration = parseFloat(instance.Duration); + const label = instance.TrialType && instance.TrialType !== 'n/a' ? + instance.TrialType : instance.EventValue; + const hed = instance.AssembledHED; + return { + onset: onset, + duration: duration, + type: 'Event', + label: label, + comment: null, + hed: hed, + channels: 'all', + annotationInstanceID: null, + } + }); }).then(events => { let epochs = events; annotations.instances.map(instance => { @@ -149,6 +170,7 @@ class EEGLabSeriesProvider extends Component { type: 'Annotation', label: label, comment: instance.Description, + hed: null, channels: 'all', annotationInstanceID: instance.AnnotationInstanceID, }); @@ -167,7 +189,7 @@ class EEGLabSeriesProvider extends Component { // ##################### EEGNET OVERRIDE END ################## // this.store.dispatch(updateFilteredEpochs()); }) - ); + ; Promise.race(racers(fetchText, electrodesURL)) .then((text) => { diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 267b2799d6c..af4203dea18 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -47,6 +47,7 @@ const EventManager = ({ const [activeEpochs, setActiveEpochs] = useState([]); const [allEpochsVisible, setAllEpochsVisibility] = useState(false); const [visibleComments, setVisibleComments] = useState([]); + const [allCommentsVisible, setAllCommentsVisible] = useState(false); useEffect(() => { // Reset: turn all epochs on / off regardless of independent toggle state @@ -66,6 +67,21 @@ const EventManager = ({ } }, [allEpochsVisible]); + useEffect(() => { + // Toggle comment section if in range and has a comment / tag + if (!allCommentsVisible) { + setVisibleComments([]); + } else { + const commentIndexes = [...Array(epochs.length).keys()].filter((index) => + epochs[index].onset + epochs[index].duration > interval[0] + && epochs[index].onset < interval[1] + && epochs[index].type === epochType + && (epochs[index].hed || epochs[index].comment) + ).map((index) => index); + setVisibleComments([...commentIndexes]); + } + }, [allCommentsVisible]); + useEffect(() => { setEpochType((rightPanel && rightPanel !== 'annotationForm' @@ -98,6 +114,11 @@ const EventManager = ({ style={{padding: '0.5em'}} onClick={() => setAllEpochsVisibility(!allEpochsVisible)} > + setAllCommentsVisible(!allCommentsVisible)} + > - {epoch.type === 'Annotation' && epoch.comment && + {(epoch.comment || epoch.hed) && }
- {visibleComments.includes(index) && epoch.comment && -
- Comment: {epoch.comment} + {visibleComments.includes(index) && +
+ {epoch.type == 'Annotation' && epoch.comment && +

Comment: {epoch.comment}

+ } + {epoch.type == 'Event' && epoch.hed && +

HED: {epoch.hed}

+ }
} diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx index e31e53a55b2..073e431804c 100644 --- a/jsx/react-series-data-viewer/src/series/store/types.tsx +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -29,6 +29,7 @@ export type Epoch = { type: 'Event' | 'Annotation', label: string, comment?: string, + hed?: string, channels: number[] | "all", // ##################### EEGNET OVERRIDE START ################## // annotationInstanceID?: number, @@ -36,6 +37,10 @@ export type Epoch = { }; // ##################### EEGNET OVERRIDE START ################## // +export type EventMetadata = { + instances: any[], +} + export type AnnotationMetadata = { instances: any[], labels: any[], diff --git a/php/models/electrophysioevents.class.inc b/php/models/electrophysioevents.class.inc new file mode 100644 index 00000000000..6a19aa25535 --- /dev/null +++ b/php/models/electrophysioevents.class.inc @@ -0,0 +1,64 @@ + + * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 + * @link https://www.github.com/aces/Loris/ + */ +class ElectrophysioEvents +{ + private int $_physioFileID; + private array $_data; + + /** + * Construct an Event object + * + * @param integer $physioFileID Electrophysiological file ID + * to collect annotation data from + */ + function __construct(int $physioFileID) + { + $this->_physioFileID = $physioFileID; + $db = \NDB_Factory::singleton()->database(); + + $taskEvents = $db->pselect( + 'SELECT te.* + FROM physiological_task_event AS te + JOIN physiological_event_file AS f + ON f.EventFileID = te.EventFileID + WHERE f.PhysiologicalFileID=:PFID AND f.FileType="tsv"', + ['PFID' => $this->_physioFileID] + ); + + /** + * TODO: Get event params and metadata. + * NOT in the scope of current task + **/ + + $this->_data = [ + 'instances' => $taskEvents, + ]; + } + + /** + * Get data for the Electrophysiological file annotations + * + * @return array The data array + */ + function getData(): array + { + return $this->_data; + } + + /** + * TODO: Add other features such as add, update, delete + * NOT in the scope of current task + **/ +} diff --git a/php/sessions.class.inc b/php/sessions.class.inc index 9de66a9bebc..623708b70cf 100644 --- a/php/sessions.class.inc +++ b/php/sessions.class.inc @@ -18,7 +18,7 @@ use \Psr\Http\Message\ServerRequestInterface; use \Psr\Http\Message\ResponseInterface; use LORIS\electrophysiology_browser\Models\ElectrophysioFile; use LORIS\electrophysiology_browser\Models\ElectrophysioAnnotations; - +use LORIS\electrophysiology_browser\Models\ElectrophysioEvents; /** * Provides the PHP code for the menu filter for the electrophysiology browser @@ -476,6 +476,13 @@ class Sessions extends \NDB_Page intval($physioFileID) ); $fileSummary['annotations'] = $annotations->getData(); + + // Get the task events data + $events = new ElectrophysioEvents( + intval($physioFileID) + ); + $fileSummary['events'] = $events->getData(); + $fileSummary['epochsURL'] = $db->pselectOne( "SELECT FilePath FROM physiological_event_file From 0f0b60bf6dd3cb8612ae85bd61bc658e3ba67e70 Mon Sep 17 00:00:00 2001 From: jesscall Date: Wed, 11 May 2022 09:56:31 -0400 Subject: [PATCH 030/126] rm commented out code --- .../src/eeglab/EEGLabSeriesProvider.tsx | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index e942b4a3b86..2fd559f2235 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -119,26 +119,6 @@ class EEGLabSeriesProvider extends Component { } ) // ##################### EEGNET OVERRIDE START ################## // - /*.then(() => Promise.race(racers(fetchText, epochsURL)) - .then((text) => { - if (!(typeof text.json === 'string' - || text.json instanceof String)) return; - return tsvParse(text.json) - .map((eventRow, i) => { - // --- Fix related to Brock face-13 data - const label = (eventRow.trial_type === 'n/a' && 'sample' in eventRow) ? - eventRow.sample : eventRow.trial_type; - return { - onset: parseFloat(eventRow.onset), - duration: parseFloat(eventRow.duration), - type: 'Event', - label: label, - comment: null, - channels: 'all', - annotationInstanceID: null, - } - }); - })*/ .then(() => { return events.instances.map(instance => { const onset = parseFloat(instance.Onset); From f1b104b21003d5ac7c105794b80d6616ad1ad049 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Wed, 1 Jun 2022 13:23:28 -0400 Subject: [PATCH 031/126] fix interval hops to be 1s instead of 5s --- .../src/series/components/IntervalSelect.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 21d8f5aada5..d1ddd185794 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -97,9 +97,9 @@ const IntervalSelect: FunctionComponent = ({ className='btn btn-primary btn-xs' onClick={() => { if (interval[0] !== domain[0]) { - setInterval([interval[0] - 5, interval[1] - 5]) + setInterval([interval[0] - 1, interval[1] - 1]) } else { - setInterval([interval[0], interval[1] - 5]) + setInterval([interval[0], interval[1] - 1]) } }} value='<' @@ -109,9 +109,9 @@ const IntervalSelect: FunctionComponent = ({ className='btn btn-primary btn-xs' onClick={() => { if (interval[1] !== domain[1]) { - setInterval([interval[0] + 5, interval[1] + 5]) + setInterval([interval[0] + 1, interval[1] + 1]) } else { - setInterval([interval[0] + 5, interval[1]]) + setInterval([interval[0] + 1, interval[1]]) } }} value='>' From bc17fd9a98e184650acb84289160e754f9730728 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Wed, 1 Jun 2022 13:36:35 -0400 Subject: [PATCH 032/126] fix cursor to show 3 decimals in data series could be a better rounding method, but works for now --- .../src/series/components/SeriesCursor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index b297cd564be..3590c8a92d6 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -100,7 +100,7 @@ const SeriesCursor = ( borderRadius: '3px', }} > - {Math.round(time)} s + {Math.round(time * 1000) / 1000} s
); From cd59c99aa0998f31bfdabdfad5d74001fb740816 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Wed, 1 Jun 2022 15:13:13 -0400 Subject: [PATCH 033/126] remove popup on annotation success; add toast should be easy to modify in the future --- .../src/series/components/AnnotationForm.tsx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 623664108cf..ff94c5df389 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -55,6 +55,7 @@ const AnnotationForm = ({ let [comment, setComment] = useState(currentAnnotation ? currentAnnotation.comment : ''); let [isSubmitted, setIsSubmitted] = useState(false); let [isDeleted, setIsDeleted] = useState(false); + let [annoMessage, setAnnoMessage] = useState(''); // ##################### EEGNET OVERRIDE END ################## // // Time Selection @@ -216,12 +217,10 @@ const AnnotationForm = ({ handleReset(); // Disaply success message - const message = currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'; - swal.fire( - 'Success', - message, - 'success' - ); + setAnnoMessage(currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'); + setTimeout(function () { + setAnnoMessage(''); + }, 3000); // If in edit mode, switch back to annotation panel if (currentAnnotation !== null) { @@ -386,6 +385,13 @@ const AnnotationForm = ({ Delete } + {annoMessage ? ( +
+ {annoMessage} +
+ ):( +
+ )}
From d55af053f578dd7dbb9a6fcd74a0c09b78c416b4 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Thu, 2 Jun 2022 11:32:10 -0400 Subject: [PATCH 034/126] fix style in conditional divs --- .../src/series/components/AnnotationForm.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index ff94c5df389..fb68692b582 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -218,7 +218,7 @@ const AnnotationForm = ({ // Disaply success message setAnnoMessage(currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'); - setTimeout(function () { + setTimeout(() => { setAnnoMessage(''); }, 3000); @@ -385,12 +385,10 @@ const AnnotationForm = ({ Delete } - {annoMessage ? ( + {annoMessage && (
{annoMessage}
- ):( -
)}
From 2510cbcfac870529c33b29c0cdc86ea6d45bfdf1 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Thu, 2 Jun 2022 11:40:33 -0400 Subject: [PATCH 035/126] fix context switch to anno menu after timeout --- .../src/series/components/AnnotationForm.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index fb68692b582..3e2c8c6e284 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -219,14 +219,15 @@ const AnnotationForm = ({ // Disaply success message setAnnoMessage(currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'); setTimeout(() => { - setAnnoMessage(''); + setAnnoMessage(''); // Empty string will cause success div to hide + + // If in edit mode, switch back to annotation panel + if (currentAnnotation !== null) { + setCurrentAnnotation(null); + setRightPanel('annotationList'); + } }, 3000); - // If in edit mode, switch back to annotation panel - if (currentAnnotation !== null) { - setCurrentAnnotation(null); - setRightPanel('annotationList'); - } }).catch(error => { console.log(error); // Display error message From c3ea3f4fef223e310fe82a875e1e658106dc4267 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Thu, 2 Jun 2022 12:06:46 -0400 Subject: [PATCH 036/126] add spacing to annotation alert --- .../src/series/components/AnnotationForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 3e2c8c6e284..58d32ae16e2 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -387,7 +387,7 @@ const AnnotationForm = ({ } {annoMessage && ( -
+
{annoMessage}
)} From eb7dd02e3ad6f5aa4138d434a4237425ac45b418 Mon Sep 17 00:00:00 2001 From: Jessica Callegaro <34260251+jesscall@users.noreply.github.com> Date: Thu, 9 Jun 2022 12:43:56 -0400 Subject: [PATCH 037/126] add TextboxElement --- .../src/series/components/Form.js | 78 ++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/Form.js b/jsx/react-series-data-viewer/src/series/components/Form.js index 228a65d16ee..2c16b93ad53 100644 --- a/jsx/react-series-data-viewer/src/series/components/Form.js +++ b/jsx/react-series-data-viewer/src/series/components/Form.js @@ -303,4 +303,80 @@ TextareaElement.defaultProps = { onUserInput: function() { console.warn('onUserInput() callback is not set'); }, -}; \ No newline at end of file +}; + +/** + * TextboxElement - the input type='text' component. + * @param {object} props + * @return {JSX.Element} + */ +export const TextboxElement = (props) => { + /** + * handleChange - input change by user. + * @param {object} event - input event + */ + const handleChange = (event) => { + const value = event.target.value; + if (props.bannedCharacters) { + for (const character of props.bannedCharacters) { + if (value.includes(character)) { + return; + } + } + } + props.onUserInput(props.id, value); + }; + /** + * Renders the React component. + * @return {JSX.Element} - React markup for component. + */ + return ( + <> + {props.label && + + } + + + ); +}; +TextboxElement.defaultProps = { + readonly: false, + required: false, +}; +TextboxElement.propTypes = { + id: PropTypes.string, + name: PropTypes.string, + required: PropTypes.bool, + label: PropTypes.string, + value: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + ]), + onUserInput: PropTypes.func, + placeholder: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + ]), + bannedCharacters: PropTypes.array, + readonly: PropTypes.bool, + help: PropTypes.string, +}; From 223ac306e5a83cb630e6396e7cfab0606eda23ff Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Sat, 13 Aug 2022 10:55:32 -0400 Subject: [PATCH 038/126] add keyboard event listener with cursor var read --- .../src/series/components/SeriesRenderer.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 27a253a65c4..f43d59a7238 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -123,6 +123,25 @@ const SeriesRenderer: FunctionComponent = ({ }) => { if (channels.length === 0) return null; + const memoizedCallback = useCallback( + () => { + console.log('inside the callback: ', cursor); + }, + [cursor], + ); + + useEffect(() => { + const someFunction = (e) => { + console.log('inside the useffect: ', cursor); + console.log(e); + } + + window.addEventListener('keydown', someFunction); + return function cleanUp() { //don't forget to clean up + window.removeEventListener('keydown', someFunction); + } + }, [memoizedCallback]); + useEffect(() => { setViewerHeight(viewerHeight); }, [viewerHeight]); From e31dc69519c9a13aeec99cfa5702df3b2b9296d5 Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Mon, 15 Aug 2022 11:01:44 -0400 Subject: [PATCH 039/126] add right panel keybind functionality --- .../src/series/components/SeriesRenderer.tsx | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index f43d59a7238..b33b5cd2046 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -123,22 +123,32 @@ const SeriesRenderer: FunctionComponent = ({ }) => { if (channels.length === 0) return null; - const memoizedCallback = useCallback( - () => { - console.log('inside the callback: ', cursor); - }, - [cursor], - ); - - useEffect(() => { - const someFunction = (e) => { - console.log('inside the useffect: ', cursor); - console.log(e); + // Memoized to singal which vars are to be read from + const memoizedCallback = useCallback(() => {}, [cursor]); + useEffect(() => { // Keypress handler + const keybindHandler = (e) => { + if (cursor) { // Cursor not null implies on page / focus + console.log('inside the useffect: ', cursor); + console.log(e); + + // Prevent the arrow key scroll, followed by handling the key + if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { + e.preventDefault(); + } + } + + // Generic keybinds that don't require focus + if (e.code === 'KeyC' && e.shiftKey) { // Close all right panels + setRightPanel(null); + } + if (e.code === 'KeyA' && e.shiftKey) { // Open annotation form + setRightPanel('annotationForm'); + } } - window.addEventListener('keydown', someFunction); - return function cleanUp() { //don't forget to clean up - window.removeEventListener('keydown', someFunction); + window.addEventListener('keydown', keybindHandler); + return function cleanUp() { // Prevent multiple listeners + window.removeEventListener('keydown', keybindHandler); } }, [memoizedCallback]); From 22159e5e78971306b4bcd8fab53648f22779b82e Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Mon, 15 Aug 2022 11:17:49 -0400 Subject: [PATCH 040/126] add working support for keybind channel scrolling --- .../src/series/components/SeriesRenderer.tsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index b33b5cd2046..72b331fb637 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -128,12 +128,22 @@ const SeriesRenderer: FunctionComponent = ({ useEffect(() => { // Keypress handler const keybindHandler = (e) => { if (cursor) { // Cursor not null implies on page / focus - console.log('inside the useffect: ', cursor); - console.log(e); - - // Prevent the arrow key scroll, followed by handling the key if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { - e.preventDefault(); + switch(e.code){ + case "ArrowUp": + setOffsetIndex(offsetIndex - limit); + break; + case "ArrowDown": + setOffsetIndex(offsetIndex + limit); + break; + default: + console.log('Keyboard event handler error.'); + break; + // case "ArrowLeft": + // case "ArrowRight": + } + + e.preventDefault(); // Make sure arrows don't scroll } } From 0c7cfd8b26935466ae4aa70acc17b386c2f5824f Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Mon, 15 Aug 2022 11:29:21 -0400 Subject: [PATCH 041/126] fix double press needed for channel offset key press --- .../src/series/components/SeriesRenderer.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 72b331fb637..13fe93bc41b 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -124,9 +124,10 @@ const SeriesRenderer: FunctionComponent = ({ if (channels.length === 0) return null; // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [cursor]); + const memoizedCallback = useCallback(() => {}, [cursor, offsetIndex]); useEffect(() => { // Keypress handler const keybindHandler = (e) => { + console.log(cursor); if (cursor) { // Cursor not null implies on page / focus if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { switch(e.code){ From 692ea2a9eb706ebb7aeec11b22fbfde62305ebef Mon Sep 17 00:00:00 2001 From: Tyler Collins Date: Mon, 15 Aug 2022 14:07:29 -0400 Subject: [PATCH 042/126] add timeline scrolling support will need testing where ever possible --- .../src/series/components/SeriesRenderer.tsx | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 13fe93bc41b..d53f6ca2edb 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -32,6 +32,7 @@ import { import { setViewerWidth, setViewerHeight, + setInterval, } from '../store/state/bounds'; import { continueDragSelection, @@ -54,6 +55,7 @@ type CProps = { viewerWidth: number, viewerHeight: number, interval: [number, number], + domain: number, amplitudeScale: number, rightPanel: RightPanel, cursor?: number, @@ -79,6 +81,7 @@ type CProps = { dragContinue: (_: number) => void, dragEnd: (_: number) => void, limit: number, + setInterval: (_: [number, number]) => void, // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation: (_: EpochType) => void, physioFileID: number, @@ -90,6 +93,8 @@ const SeriesRenderer: FunctionComponent = ({ viewerHeight, viewerWidth, interval, + setInterval, + domain, amplitudeScale, cursor, rightPanel, @@ -124,10 +129,9 @@ const SeriesRenderer: FunctionComponent = ({ if (channels.length === 0) return null; // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [cursor, offsetIndex]); + const memoizedCallback = useCallback(() => {}, [cursor, offsetIndex, interval]); useEffect(() => { // Keypress handler const keybindHandler = (e) => { - console.log(cursor); if (cursor) { // Cursor not null implies on page / focus if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { switch(e.code){ @@ -137,11 +141,23 @@ const SeriesRenderer: FunctionComponent = ({ case "ArrowDown": setOffsetIndex(offsetIndex + limit); break; + case "ArrowRight": + if (interval[1] !== domain[1]) { // Bounds check + setInterval([interval[0] + 50, interval[1] + 50]); + } else { + setInterval([interval[0] + 50, interval[1]]); + } + break; + case "ArrowLeft": + if (interval[0] !== domain[0]) { // Bounds check + setInterval([interval[0] - 50, interval[1] - 50]); + } else { + setInterval([interval[0], interval[1] - 50]); + } + break; default: console.log('Keyboard event handler error.'); break; - // case "ArrowLeft": - // case "ArrowRight": } e.preventDefault(); // Make sure arrows don't scroll @@ -790,12 +806,17 @@ export default connect( hidden: state.montage.hidden, channelMetadata: state.dataset.channelMetadata, offsetIndex: state.dataset.offsetIndex, + domain: state.bounds.domain, }), (dispatch: (_: any) => void) => ({ setOffsetIndex: R.compose( dispatch, setOffsetIndex ), + setInterval: R.compose( + dispatch, + setInterval + ), setCursor: R.compose( dispatch, setCursor From 41ab72bcc1fa2f80b27d85510c1c6a4beca2643c Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 30 Nov 2022 14:29:37 -0500 Subject: [PATCH 043/126] Minor UX changes to the event panel --- css/electrophysiology_browser.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index c95c147383c..724043443fe 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -136,6 +136,14 @@ svg { height: auto !important; } +#eegSessionView .panel-heading > div > i { + cursor: pointer; +} + +#eegSessionView .panel-heading > div > i:hover { + scale: 1.05; +} + #eegSidebar { top: 0; bottom: 0; @@ -194,4 +202,4 @@ svg { .pagination-nav { padding-top: 0; } -} \ No newline at end of file +} From 0680c3893e666c6f8a90ef68d65781e22acfb43d Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 1 Dec 2022 18:55:02 -0500 Subject: [PATCH 044/126] Increased default number of channels to 32. Adjusted display height to accomodate and fixed the overflow issue of the SeriesCursor text --- .../src/series/components/SeriesCursor.tsx | 2 +- jsx/react-series-data-viewer/src/series/store/state/bounds.tsx | 2 +- jsx/react-series-data-viewer/src/vector/index.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 3590c8a92d6..4d9bab0d1b8 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -170,7 +170,7 @@ const CursorContent = ({time, channel, contentIndex, showMarker}) => { ); return ( -
+
{channel.traces.map((trace, i) => { const chunk = trace.chunks.find( (chunk) => chunk.interval[0] <= time && chunk.interval[1] >= time diff --git a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx index e71100a14ad..c1e89aeae1d 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx @@ -58,7 +58,7 @@ const viewerWidth = (state = 400, action?: Action): number => { return state; }; -const viewerHeight = (state = 400, action?: Action): number => { +const viewerHeight = (state = 800, action?: Action): number => { if (action && action.type === 'SET_VIEWER_HEIGHT') { return action.payload; } diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index 88e5515f216..b5af32246c2 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -11,7 +11,7 @@ export const MIN_EPOCH_WIDTH = 1; export const MAX_VIEWED_CHUNKS = 3; -export const MAX_CHANNELS = 6; +export const MAX_CHANNELS = 32; export const SIGNAL_SCALE = Math.pow(10, 6); From 6f2d370350d5298ef30d73ecfdfd1fe36afc8051 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 1 Dec 2022 19:14:58 -0500 Subject: [PATCH 045/126] Modified the initial time interval to 30 seconds. Added a button to the front end that displays entire timeline --- .../src/eeglab/EEGLabSeriesProvider.tsx | 6 ++-- .../src/series/components/IntervalSelect.tsx | 31 +++++++++++++------ .../src/vector/index.tsx | 2 ++ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index 2fd559f2235..ca40ce62ad2 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -6,7 +6,7 @@ import {createEpicMiddleware} from 'redux-observable'; import thunk from 'redux-thunk'; import {fetchJSON, fetchText} from '../ajax'; import {rootReducer, rootEpic} from '../series/store'; -import {MAX_CHANNELS} from '../vector'; +import {MAX_CHANNELS, DEFAULT_TIME_INTERVAL} from '../vector'; import { setChannels, setEpochs, @@ -114,7 +114,7 @@ class EEGLabSeriesProvider extends Component { 1 ))); this.store.dispatch(setDomain(timeInterval)); - this.store.dispatch(setInterval(timeInterval)); + this.store.dispatch(setInterval(DEFAULT_TIME_INTERVAL)); } } ) @@ -216,7 +216,7 @@ class EEGLabSeriesProvider extends Component { static defaultProps = { limit: MAX_CHANNELS, - }; + }; } export default EEGLabSeriesProvider; diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index d1ddd185794..7f51468d059 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -11,6 +11,7 @@ import {Slider, Rail, Handles, Ticks} from 'react-compound-slider'; import {Handle, Tick} from './components'; import React, {useState, FunctionComponent} from 'react'; import {RootState} from '../store'; +import {DEFAULT_TIME_INTERVAL} from "../../vector"; type CProps = { viewerHeight?: number, @@ -129,16 +130,26 @@ const IntervalSelect: FunctionComponent = ({ value='>>' />
- { - setInterval([domain[0], domain[1]]); - updateFilteredEpochs(); - }} - value='Reset' - style={{marginLeft: '15px'}} - /> +
+ { + setInterval(DEFAULT_TIME_INTERVAL); + updateFilteredEpochs(); + }} + value='Reset' + /> + { + setInterval([domain[0], domain[1]]); + updateFilteredEpochs(); + }} + value='Show All' + /> +
{/* ##################### EEGNET OVERRIDE END ################## */} diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index b5af32246c2..f1babb3f695 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -13,6 +13,8 @@ export const MAX_VIEWED_CHUNKS = 3; export const MAX_CHANNELS = 32; +export const DEFAULT_TIME_INTERVAL: [number, number] = [0, 30]; + export const SIGNAL_SCALE = Math.pow(10, 6); export const SIGNAL_UNIT = 'µV'; From 859b41ef9e775afcfed675749516ab0a62dda340 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 1 Dec 2022 19:34:11 -0500 Subject: [PATCH 046/126] Right-aligned SeriesCursor text for better appearance while loading --- .../src/series/components/SeriesCursor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 4d9bab0d1b8..5e563cafd21 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -189,7 +189,7 @@ const CursorContent = ({time, channel, contentIndex, showMarker}) => { key={`${i}-${channel.traces.length}`} style={{ display: 'flex', - flexDirection: 'row', + flexDirection: 'row-reverse', backgroundColor: 'rgba(238, 238, 238, 0.8)', padding: '2px 2px', borderRadius: '3px', From e32031589912fe02b73d8966fce305462d287f56 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Tue, 6 Dec 2022 14:52:50 -0500 Subject: [PATCH 047/126] Added dataDirBasepath to config.xml and removed package-lock from .gitignore --- .../package-lock.json | 7682 +++++++++++++++++ 1 file changed, 7682 insertions(+) create mode 100644 jsx/react-series-data-viewer/package-lock.json diff --git a/jsx/react-series-data-viewer/package-lock.json b/jsx/react-series-data-viewer/package-lock.json new file mode 100644 index 00000000000..0a541309e28 --- /dev/null +++ b/jsx/react-series-data-viewer/package-lock.json @@ -0,0 +1,7682 @@ +{ + "name": "react-series-data-viewer", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "react-series-data-viewer", + "version": "1.0.0", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@visx/axis": "^1.4.0", + "@visx/group": "^1.0.0", + "@visx/responsive": "^1.3.0", + "@visx/shape": "^1.4.0", + "d3-3d": "0.0.10", + "d3-array": "^1.2.4", + "d3-dsv": "^1.0.10", + "d3-scale": "^2.1.2", + "d3-scale-chromatic": "^1.3.3", + "differenceequationsignal1d": "^0.1.1", + "gl-matrix": "^2.8.1", + "google-protobuf": "^3.6.1", + "ramda": "^0.25.0", + "react": "^16.12.0", + "react-compound-slider": "^3.3.1", + "react-dom": "^16.13.1", + "react-redux": "^7.2.1", + "redux": "^4.0.0", + "redux-actions": "^2.6.1", + "redux-logger": "^3.0.6", + "redux-observable": "^1.0.0", + "redux-thunk": "^2.3.0", + "resize-observer-polyfill": "^1.5.0", + "rxjs": "^6.6.3", + "tslib": "^1.9.3" + }, + "devDependencies": { + "@types/react": "^16.12.0", + "@types/react-dom": "^16.9.9", + "@types/react-redux": "7.1.16" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/d3-color": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.2.tgz", + "integrity": "sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz", + "integrity": "sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg==", + "dependencies": { + "@types/d3-color": "^1" + } + }, + "node_modules/@types/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==" + }, + "node_modules/@types/d3-scale": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.2.tgz", + "integrity": "sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ==", + "dependencies": { + "@types/d3-time": "^2" + } + }, + "node_modules/@types/d3-shape": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz", + "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==", + "dependencies": { + "@types/d3-path": "^1" + } + }, + "node_modules/@types/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg==" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.177", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.177.tgz", + "integrity": "sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, + "node_modules/@types/react": { + "version": "16.14.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.21.tgz", + "integrity": "sha512-rY4DzPKK/4aohyWiDRHS2fotN5rhBSK6/rz1X37KzNna9HJyqtaGAbq9fVttrEPWF5ywpfIP1ITL8Xi2QZn6Eg==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "16.9.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.14.tgz", + "integrity": "sha512-FIX2AVmPTGP30OUJ+0vadeIFJJ07Mh1m+U0rxfgyW34p3rTlXI+nlenvAxNn4BP36YyI9IJ/+UJ7Wu22N1pI7A==", + "dev": true, + "dependencies": { + "@types/react": "^16" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", + "integrity": "sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==", + "dev": true, + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@visx/axis": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/axis/-/axis-1.17.1.tgz", + "integrity": "sha512-3JdAY8xwA4xVnzkbXdIzCOWYCknCgw3L185lOJTXWNGO7kIgzbQ2YrLXnet37BFgD83MfxmlP6LhiHLkKVI6OQ==", + "dependencies": { + "@types/react": "*", + "@visx/group": "1.17.1", + "@visx/point": "1.7.0", + "@visx/scale": "1.14.0", + "@visx/shape": "1.17.1", + "@visx/text": "1.17.1", + "classnames": "^2.3.1", + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": "^16.3.0-0" + } + }, + "node_modules/@visx/curve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@visx/curve/-/curve-1.7.0.tgz", + "integrity": "sha512-n0/SHM4YXjke+aEinhHFZPLMxWu3jbqtvqzfGJyibX8OmbDjavk9P+MHfGokUcw0xHy6Ch3YTuwbYuvVw5ny9A==", + "dependencies": { + "@types/d3-shape": "^1.3.1", + "d3-shape": "^1.0.6" + } + }, + "node_modules/@visx/group": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/group/-/group-1.17.1.tgz", + "integrity": "sha512-g8pSqy8TXAisiOzypnVycDynEGlBhfxtVlwDmsbYB+XSFGEjnOheQSDohDI+ia7ek54Mw9uYe05tx5kP1hRMYw==", + "dependencies": { + "@types/react": "*", + "classnames": "^2.3.1", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "^15.0.0-0 || ^16.0.0-0" + } + }, + "node_modules/@visx/point": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@visx/point/-/point-1.7.0.tgz", + "integrity": "sha512-oaoY/HXYHhmpkkeKI4rBPmFtjHWtxSrIhZCVm1ipPoyQp3voJ8L6JD5eUIVmmaUCdUGUGwL1lFLnJiQ2p1Vlwg==" + }, + "node_modules/@visx/responsive": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@visx/responsive/-/responsive-1.10.1.tgz", + "integrity": "sha512-7FT2BBmWFkFFqynI9C1NYfVOKT1FsNOm6MwWMqXKA7TMomdBW0wdtQNB1bHvwJvWurM/sNqxcQ/CBED6t9xujQ==", + "dependencies": { + "@types/lodash": "^4.14.146", + "@types/react": "*", + "lodash": "^4.17.10", + "prop-types": "^15.6.1", + "resize-observer-polyfill": "1.5.1" + }, + "peerDependencies": { + "react": "^15.0.0-0 || ^16.0.0-0" + } + }, + "node_modules/@visx/scale": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@visx/scale/-/scale-1.14.0.tgz", + "integrity": "sha512-ovbtEOF/d76uGMJ5UZlxdS3t2T8I6md+aIwOXBaq0HdjaCLbe7HLlMyHJKjak/sqBxLAiCGVnechTUpSkfgSQw==", + "dependencies": { + "@types/d3-interpolate": "^1.3.1", + "@types/d3-scale": "^3.3.0", + "@types/d3-time": "^2.0.0", + "d3-interpolate": "^1.4.0", + "d3-scale": "^3.3.0", + "d3-time": "^2.1.1" + } + }, + "node_modules/@visx/scale/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/@visx/scale/node_modules/d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "dependencies": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } + }, + "node_modules/@visx/shape": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/shape/-/shape-1.17.1.tgz", + "integrity": "sha512-rVYFpytPCnV4s5U0za+jQ2jqFzKnmB3c8RP6fuOfF6kKosFPJcOYg9ikvewojARyMBTr1u3XvWV960Da+xyUdQ==", + "dependencies": { + "@types/d3-path": "^1.0.8", + "@types/d3-shape": "^1.3.1", + "@types/lodash": "^4.14.146", + "@types/react": "*", + "@visx/curve": "1.7.0", + "@visx/group": "1.17.1", + "@visx/scale": "1.14.0", + "classnames": "^2.3.1", + "d3-path": "^1.0.5", + "d3-shape": "^1.2.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "react": "^16.3.0-0" + } + }, + "node_modules/@visx/text": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/text/-/text-1.17.1.tgz", + "integrity": "sha512-Cx6iH0kVq3YqCfFj7U6bMiKwa/bz4Z3q0vPdxmnVGcPjGZM1ac/y61KFH263e164LJ5jFaTYpPrrFmbZoy8+Vg==", + "dependencies": { + "@types/lodash": "^4.14.160", + "@types/react": "*", + "classnames": "^2.3.1", + "lodash": "^4.17.20", + "prop-types": "^15.7.2", + "reduce-css-calc": "^1.3.0" + }, + "peerDependencies": { + "react": "^16.3.0-0" + } + }, + "node_modules/ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dependencies": { + "string-width": "^2.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dependencies": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "node_modules/cint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", + "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=" + }, + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-table": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.9.tgz", + "integrity": "sha512-7eA6hFtAZwVx3dWAGoaBqTrzWko5jRUFKpHT64ZHkJpaA3y5wf5NlLjguqTRmqycatJZiwftODYYyGNLbQ7MuA==", + "dependencies": { + "colors": "1.0.3", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/cli-table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "dependencies": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dependencies": { + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "node_modules/d3-3d": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/d3-3d/-/d3-3d-0.0.10.tgz", + "integrity": "sha512-zku/wgZFw7qOc0BA7f8mbk0hF2NIzyJu+1ucNXXWCSJgLu+nkZdZlu4oZ268vsBmlxTPUodjwL32hyqnwQNc9g==" + }, + "node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "node_modules/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "node_modules/d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "node_modules/d3-dsv": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "node_modules/d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "dependencies": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "node_modules/d3-scale/node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "dependencies": { + "d3-array": "2" + } + }, + "node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-time-format/node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "node_modules/d3-time/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-diff": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", + "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/differenceequationsignal1d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/differenceequationsignal1d/-/differenceequationsignal1d-0.1.1.tgz", + "integrity": "sha512-GHZ5QfnHbcmzn5dUNz6uVKi3JhUiXO1h8MuY7c/70bHVECAjPsFaowSu0+CWGDB6bfXwYoDDQa3kOvY89stUvA==", + "dependencies": { + "npm-check-updates": "^2.14.1" + } + }, + "node_modules/dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "engines": { + "node": ">=4" + } + }, + "node_modules/gl-matrix": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.8.1.tgz", + "integrity": "sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw==" + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/google-protobuf": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.19.1.tgz", + "integrity": "sha512-Isv1RlNC+IzZzilcxnlVSf+JvuhxmY7DaxYCBy+zPS9XVuJRtlTTIXR9hnZ1YL1MMusJn/7eSy2swCzZIomQSg==" + }, + "node_modules/got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dependencies": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dependencies": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "dependencies": { + "jju": "^1.1.0" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/just-curry-it": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", + "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==" + }, + "node_modules/latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dependencies": { + "package-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/math-expression-evaluator": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.8.tgz", + "integrity": "sha512-9FbRY3i6U+CbHgrdNbAUaisjWTozkm1ZfupYQJiZ87NtYHk2Zh9DvxMgp/fifxVhqTLpd5fCCLossUbpZxGeKw==" + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-alias": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-alias/-/node-alias-1.0.4.tgz", + "integrity": "sha1-HxuRa1a56iQcATX5fO1pQPVW8pI=", + "dependencies": { + "chalk": "^1.1.1", + "lodash": "^4.2.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/npm": { + "version": "3.10.10", + "resolved": "https://registry.npmjs.org/npm/-/npm-3.10.10.tgz", + "integrity": "sha1-Wx1XfkyIadbIYDvInpzRY3MD5G4=", + "bundleDependencies": [ + "abbrev", + "ansi-regex", + "ansicolors", + "ansistyles", + "aproba", + "archy", + "asap", + "chownr", + "cmd-shim", + "columnify", + "config-chain", + "debuglog", + "dezalgo", + "editor", + "fs-vacuum", + "fs-write-stream-atomic", + "fstream", + "fstream-npm", + "glob", + "graceful-fs", + "has-unicode", + "hosted-git-info", + "iferr", + "imurmurhash", + "inflight", + "inherits", + "ini", + "init-package-json", + "lockfile", + "lodash._baseindexof", + "lodash._baseuniq", + "lodash._bindcallback", + "lodash._cacheindexof", + "lodash._createcache", + "lodash._getnative", + "lodash.clonedeep", + "lodash.restparam", + "lodash.union", + "lodash.uniq", + "lodash.without", + "mkdirp", + "node-gyp", + "nopt", + "normalize-git-url", + "normalize-package-data", + "npm-cache-filename", + "npm-install-checks", + "npm-package-arg", + "npm-registry-client", + "npm-user-validate", + "npmlog", + "once", + "opener", + "osenv", + "path-is-inside", + "read", + "read-cmd-shim", + "read-installed", + "read-package-json", + "read-package-tree", + "readable-stream", + "readdir-scoped-modules", + "realize-package-specifier", + "request", + "retry", + "rimraf", + "semver", + "sha", + "slide", + "sorted-object", + "strip-ansi", + "tar", + "text-table", + "uid-number", + "umask", + "unique-filename", + "unpipe", + "validate-npm-package-license", + "validate-npm-package-name", + "which", + "wrappy", + "write-file-atomic" + ], + "dependencies": { + "abbrev": "~1.0.9", + "ansi-regex": "*", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.0.4", + "archy": "~1.0.0", + "asap": "~2.0.5", + "chownr": "~1.0.1", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "~1.1.11", + "debuglog": "*", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "fs-vacuum": "~1.2.9", + "fs-write-stream-atomic": "~1.0.8", + "fstream": "~1.0.10", + "fstream-npm": "~1.2.0", + "glob": "~7.1.0", + "graceful-fs": "~4.1.9", + "has-unicode": "~2.0.1", + "hosted-git-info": "~2.1.5", + "iferr": "~0.1.5", + "imurmurhash": "*", + "inflight": "~1.0.5", + "inherits": "~2.0.3", + "ini": "~1.3.4", + "init-package-json": "~1.9.4", + "lockfile": "~1.0.2", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "mkdirp": "~0.5.1", + "node-gyp": "~3.4.0", + "nopt": "~3.0.6", + "normalize-git-url": "~3.0.2", + "normalize-package-data": "~2.3.5", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-package-arg": "~4.2.0", + "npm-registry-client": "~7.2.1", + "npm-user-validate": "~0.1.5", + "npmlog": "~4.0.0", + "once": "~1.4.0", + "opener": "~1.4.2", + "osenv": "~0.1.3", + "path-is-inside": "~1.0.2", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "~2.0.4", + "read-package-tree": "~5.1.5", + "readable-stream": "~2.1.5", + "readdir-scoped-modules": "*", + "realize-package-specifier": "~3.0.3", + "request": "~2.75.0", + "retry": "~0.10.0", + "rimraf": "~2.5.4", + "semver": "~5.3.0", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "strip-ansi": "~3.0.1", + "tar": "~2.2.1", + "text-table": "~0.2.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "validate-npm-package-license": "*", + "validate-npm-package-name": "~2.2.2", + "which": "~1.2.11", + "wrappy": "~1.0.2", + "write-file-atomic": "~1.2.0" + }, + "bin": { + "npm": "bin/npm-cli.js" + } + }, + "node_modules/npm-check-updates": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-2.15.0.tgz", + "integrity": "sha512-0ZUokfgS+4uPVSVWP3CMie7kQwngiQag2e70CdcnUfBM7/tOUmxb0DDMfxqshw4MvgqlPsxSYprzKaBGlvXqnA==", + "dependencies": { + "bluebird": "^3.4.3", + "chalk": "^1.1.3", + "cint": "^8.2.1", + "cli-table": "^0.3.1", + "commander": "^2.9.0", + "fast-diff": "^1.0.1", + "find-up": "1.1.2", + "get-stdin": "^5.0.1", + "json-parse-helpfulerror": "^1.0.3", + "lodash": "^4.15.0", + "node-alias": "^1.0.4", + "npm": "^3.10.6", + "npmi": "^2.0.1", + "rc-config-loader": "^2.0.1", + "semver": "^5.3.0", + "semver-utils": "^1.1.1", + "spawn-please": "^0.3.0", + "update-notifier": "^2.2.0" + }, + "bin": { + "ncu": "bin/ncu", + "npm-check-updates": "bin/npm-check-updates" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "1.0.9", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ansicolors": { + "version": "0.3.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ansistyles": { + "version": "0.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/aproba": { + "version": "1.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/asap": { + "version": "2.0.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/chownr": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "2.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.5.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "node_modules/npm/node_modules/columnify/node_modules/wcwidth": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.0" + } + }, + "node_modules/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/config-chain": { + "version": "1.1.11", + "inBundle": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/npm/node_modules/config-chain/node_modules/proto-list": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/debuglog": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/dezalgo": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/editor": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/fs-vacuum": { + "version": "1.2.9", + "inBundle": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/npm/node_modules/fs-write-stream-atomic": { + "version": "1.0.8", + "inBundle": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/npm/node_modules/fstream": { + "version": "1.0.10", + "inBundle": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/npm/node_modules/fstream-npm": { + "version": "1.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fstream-ignore": "^1.0.0", + "inherits": "2" + } + }, + "node_modules/npm/node_modules/fstream-npm/node_modules/fstream-ignore": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + } + }, + "node_modules/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match": { + "version": "0.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/fstream-npm/node_modules/fstream-ignore/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/glob": { + "version": "7.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/glob/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/glob/node_modules/minimatch": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match": { + "version": "0.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/glob/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.1.9", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "2.1.5", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/iferr": { + "version": "0.1.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/inflight": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/inherits": { + "version": "2.0.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "1.3.4", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "1.9.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^6.0.0", + "npm-package-arg": "^4.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^2.0.1" + } + }, + "node_modules/npm/node_modules/init-package-json/node_modules/glob": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/init-package-json/node_modules/glob/node_modules/minimatch": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/init-package-json/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/init-package-json/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match": { + "version": "0.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/init-package-json/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/init-package-json/node_modules/glob/node_modules/path-is-absolute": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/init-package-json/node_modules/promzard": { + "version": "0.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "node_modules/npm/node_modules/lockfile": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/lodash._baseindexof": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash._baseuniq": { + "version": "4.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "node_modules/npm/node_modules/lodash._baseuniq/node_modules/lodash._createset": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash._baseuniq/node_modules/lodash._root": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash._bindcallback": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash._cacheindexof": { + "version": "3.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash._createcache": { + "version": "3.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "lodash._getnative": "^3.0.0" + } + }, + "node_modules/npm/node_modules/lodash._getnative": { + "version": "3.9.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash.clonedeep": { + "version": "4.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash.restparam": { + "version": "3.6.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash.union": { + "version": "4.6.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash.uniq": { + "version": "4.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/lodash.without": { + "version": "4.4.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "0.5.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/npm/node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "3.4.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3", + "osenv": "0", + "path-array": "^1.0.0", + "request": "2", + "rimraf": "2", + "semver": "2.x || 3.x || 4 || 5", + "tar": "^2.0.0", + "which": "1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match": { + "version": "0.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.6.0", + "set-blocking": "~2.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet": { + "version": "1.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge": { + "version": "2.6.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-color": "^0.1.7", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/has-color": { + "version": "0.1.7", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/object-assign": { + "version": "4.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/gauge/node_modules/wide-align": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "array-index": "^1.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/debug": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "0.7.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/debug/node_modules/ms": { + "version": "0.7.1", + "inBundle": true + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/es6-symbol": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.11" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/es6-symbol/node_modules/d": { + "version": "0.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/es6-symbol/node_modules/es5-ext": { + "version": "0.10.12", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es6-iterator": "2", + "es6-symbol": "~3.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/es6-symbol/node_modules/es5-ext/node_modules/es6-iterator": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "d": "^0.1.1", + "es5-ext": "^0.10.7", + "es6-symbol": "3" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "3.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/npm/node_modules/normalize-git-url": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "2.3.5", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm/node_modules/normalize-package-data/node_modules/is-builtin-module": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data/node_modules/is-builtin-module/node_modules/builtin-modules": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-cache-filename": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "3.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "4.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^2.1.5", + "semver": "^5.1.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client": { + "version": "7.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3" + }, + "optionalDependencies": { + "npmlog": "~2.0.0 || ~3.1.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream": { + "version": "1.5.2", + "engines": [ + "node >= 0.8" + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/process-nextick-args": { + "version": "1.0.7", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder": { + "version": "0.10.31", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray": { + "version": "0.0.6", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.6.0", + "set-blocking": "~2.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/are-we-there-yet": { + "version": "1.1.2", + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge": { + "version": "2.6.0", + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-color": "^0.1.7", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/has-color": { + "version": "0.1.7", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/object-assign": { + "version": "4.1.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/gauge/node_modules/wide-align": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.1" + } + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/npmlog/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/npm/node_modules/npm-registry-client/node_modules/retry": { + "version": "0.10.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "0.1.5", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/npmlog": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.6.0", + "set-blocking": "~2.0.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet": { + "version": "1.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/npmlog/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge": { + "version": "2.6.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-color": "^0.1.7", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-color": { + "version": "0.1.7", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/object-assign": { + "version": "4.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/wide-align": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/opener": { + "version": "1.4.2", + "inBundle": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "opener.js" + } + }, + "node_modules/npm/node_modules/osenv": { + "version": "0.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/npm/node_modules/osenv/node_modules/os-homedir": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/osenv/node_modules/os-tmpdir": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/path-is-inside": { + "version": "1.0.2", + "inBundle": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/npm/node_modules/read": { + "version": "1.0.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2" + } + }, + "node_modules/npm/node_modules/read-installed": { + "version": "4.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.2" + } + }, + "node_modules/npm/node_modules/read-installed/node_modules/util-extend": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^6.0.0", + "json-parse-helpfulerror": "^1.0.2", + "normalize-package-data": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.2" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/glob": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/glob/node_modules/minimatch": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match": { + "version": "0.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/read-package-json/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/read-package-json/node_modules/glob/node_modules/path-is-absolute": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jju": "^1.1.0" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju": { + "version": "1.3.0", + "inBundle": true, + "license": "WTFPL" + }, + "node_modules/npm/node_modules/read-package-tree": { + "version": "5.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "node_modules/npm/node_modules/read/node_modules/mute-stream": { + "version": "0.0.5", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/readable-stream": { + "version": "2.1.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/npm/node_modules/readable-stream/node_modules/buffer-shims": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/readable-stream/node_modules/core-util-is": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/readable-stream/node_modules/process-nextick-args": { + "version": "1.0.7", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/readable-stream/node_modules/string_decoder": { + "version": "0.10.31", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/readable-stream/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/readdir-scoped-modules": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/npm/node_modules/realize-package-specifier": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "dezalgo": "^1.0.1", + "npm-package-arg": "^4.1.1" + } + }, + "node_modules/npm/node_modules/request": { + "version": "2.75.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "bl": "~1.1.2", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.0.0", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.1", + "qs": "~6.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/aws-sign2": { + "version": "0.6.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/request/node_modules/aws4": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/bl": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.0.5" + } + }, + "node_modules/npm/node_modules/request/node_modules/bl/node_modules/readable-stream": { + "version": "2.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/process-nextick-args": { + "version": "1.0.7", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder": { + "version": "0.10.31", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/caseless": { + "version": "0.11.0", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/request/node_modules/combined-stream": { + "version": "1.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/extend": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/forever-agent": { + "version": "0.6.1", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/request/node_modules/form-data": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/npm/node_modules/request/node_modules/form-data/node_modules/asynckit": { + "version": "0.4.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/har-validator": { + "version": "2.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + }, + "bin": { + "har-validator": "bin/har-validator" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/chalk": { + "version": "1.1.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/ansi-styles": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/commander": { + "version": "2.9.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/commander/node_modules/graceful-readlink": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid": { + "version": "2.15.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-function": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/generate-object-property/node_modules/is-property": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/pinkie-promise": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/pinkie-promise/node_modules/pinkie": { + "version": "2.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/hawk": { + "version": "3.1.3", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/npm/node_modules/request/node_modules/hawk/node_modules/boom": { + "version": "2.10.1", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles": { + "version": "2.0.5", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "boom": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/npm/node_modules/request/node_modules/hawk/node_modules/hoek": { + "version": "2.16.3", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/npm/node_modules/request/node_modules/hawk/node_modules/sntp": { + "version": "1.0.9", + "inBundle": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/jsprim": { + "version": "1.3.1", + "engines": [ + "node >=0.6.0" + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/jsprim/node_modules/extsprintf": { + "version": "1.0.2", + "engines": [ + "node >=0.6.0" + ], + "inBundle": true + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/jsprim/node_modules/json-schema": { + "version": "0.2.3", + "inBundle": true + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/jsprim/node_modules/verror": { + "version": "1.3.6", + "engines": [ + "node >=0.6.0" + ], + "inBundle": true, + "dependencies": { + "extsprintf": "1.0.2" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk": { + "version": "1.10.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "dashdash": "^1.12.0", + "getpass": "^0.1.1" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + }, + "optionalDependencies": { + "bcrypt-pbkdf": "^1.0.0", + "ecc-jsbn": "~0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/asn1": { + "version": "0.2.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/assert-plus": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/bcrypt-pbkdf": { + "version": "1.0.0", + "inBundle": true, + "license": "BSD-4-Clause", + "optional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/dashdash": { + "version": "1.14.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/ecc-jsbn": { + "version": "0.1.1", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "jsbn": "~0.1.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/getpass": { + "version": "0.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/jodid25519": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "jsbn": "~0.1.0" + } + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.0", + "inBundle": true, + "license": "BSD", + "optional": true + }, + "node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.3", + "inBundle": true, + "license": "SEE LICENSE IN COPYING.txt", + "optional": true + }, + "node_modules/npm/node_modules/request/node_modules/is-typedarray": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/isstream": { + "version": "0.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/json-stringify-safe": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/request/node_modules/mime-types": { + "version": "2.1.12", + "inBundle": true, + "license": "MIT", + "dependencies": { + "mime-db": "~1.24.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/request/node_modules/mime-types/node_modules/mime-db": { + "version": "1.24.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/request/node_modules/node-uuid": { + "version": "1.4.7", + "inBundle": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/npm/node_modules/request/node_modules/oauth-sign": { + "version": "0.8.2", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/request/node_modules/qs": { + "version": "6.2.1", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/npm/node_modules/request/node_modules/stringstream": { + "version": "0.0.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/request/node_modules/tough-cookie": { + "version": "2.3.1", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/request/node_modules/tunnel-agent": { + "version": "0.4.3", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.10.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "2.5.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/npm/node_modules/semver": { + "version": "5.3.0", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm/node_modules/sha": { + "version": "2.0.1", + "inBundle": true, + "license": "(BSD-2-Clause OR MIT)", + "dependencies": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "node_modules/npm/node_modules/slide": { + "version": "1.1.6", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/sorted-object": { + "version": "2.0.1", + "inBundle": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "2.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "node_modules/npm/node_modules/tar/node_modules/block-stream": { + "version": "0.0.8", + "inBundle": true, + "license": "ISC", + "dependencies": { + "inherits": "~2.0.0" + }, + "engines": { + "node": "0.4 || >=0.5.8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/uid-number": { + "version": "0.0.6", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/umask": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename/node_modules/unique-slug": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/npm/node_modules/unpipe": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-correct": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-license-ids": "^1.0.2" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-correct/node_modules/spdx-license-ids": { + "version": "1.2.0", + "inBundle": true, + "license": "Unlicense" + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "1.0.2", + "inBundle": true, + "license": "(MIT AND CC-BY-3.0)", + "dependencies": { + "spdx-exceptions": "^1.0.4", + "spdx-license-ids": "^1.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/node_modules/spdx-exceptions": { + "version": "1.0.4", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/node_modules/spdx-license-ids": { + "version": "1.2.0", + "inBundle": true, + "license": "Unlicense" + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "2.2.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "0.0.7" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name/node_modules/builtins": { + "version": "0.0.7", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/which": { + "version": "1.2.11", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^1.1.1" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "1.1.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "1.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "node_modules/npmi": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npmi/-/npmi-2.0.1.tgz", + "integrity": "sha1-MmB2V+G9R8qFerTp2Y8KDP+WvOo=", + "dependencies": { + "npm": "^3", + "semver": "^4.1.0" + } + }, + "node_modules/npmi/node_modules/semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dependencies": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/ramda": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", + "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc-config-loader": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-2.0.5.tgz", + "integrity": "sha512-T464K2MQlnNWOblUDIglpFhyN+zYJq7jSlL++/N0hUkcmIXeNFumwXFVdtf8qhUGohn4RYQ0wdi74R575I44PQ==", + "dependencies": { + "debug": "^4.1.1", + "js-yaml": "^3.12.0", + "json5": "^2.1.0", + "object-assign": "^4.1.0", + "object-keys": "^1.0.12", + "path-exists": "^3.0.0", + "require-from-string": "^2.0.2" + } + }, + "node_modules/rc-config-loader/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-compound-slider": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-compound-slider/-/react-compound-slider-3.3.1.tgz", + "integrity": "sha512-1t0nCA0FXfe2hbuJG8VODTrN29FVTp1e2AuR8fRtF/J08/1q1F6OzDhHQqXqYl7O58i8Hei6oCAh4NQ6Kg90Rw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "d3-array": "^2.8.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.9" + } + }, + "node_modules/react-compound-slider/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-redux": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", + "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/@types/react-redux": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.20.tgz", + "integrity": "sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dependencies": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + } + }, + "node_modules/reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/reduce-function-call/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/reduce-reducers": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/reduce-reducers/-/reduce-reducers-0.4.3.tgz", + "integrity": "sha512-+CNMnI8QhgVMtAt54uQs3kUxC3Sybpa7Y63HR14uGLgI9/QR5ggHvpxwhGGe3wmx5V91YwqQIblN9k5lspAmGw==" + }, + "node_modules/redux": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz", + "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-actions": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/redux-actions/-/redux-actions-2.6.5.tgz", + "integrity": "sha512-pFhEcWFTYNk7DhQgxMGnbsB1H2glqhQJRQrtPb96kD3hWiZRzXHwwmFPswg6V2MjraXRXWNmuP9P84tvdLAJmw==", + "dependencies": { + "invariant": "^2.2.4", + "just-curry-it": "^3.1.0", + "loose-envify": "^1.4.0", + "reduce-reducers": "^0.4.3", + "to-camel-case": "^1.0.0" + } + }, + "node_modules/redux-logger": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", + "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "dependencies": { + "deep-diff": "^0.3.5" + } + }, + "node_modules/redux-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redux-observable/-/redux-observable-1.2.0.tgz", + "integrity": "sha512-yeR90RP2WzZzCxxnQPlh2uFzyfFLsfXu8ROh53jGDPXVqj71uNDMmvi/YKQkd9ofiVoO4OYb1snbowO49tCEMg==", + "peerDependencies": { + "redux": ">=4 <5", + "rxjs": ">=6.0.0-beta.0 <7" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dependencies": { + "semver": "^5.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semver-utils": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/semver-utils/-/semver-utils-1.1.4.tgz", + "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + }, + "node_modules/spawn-please": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-0.3.0.tgz", + "integrity": "sha1-2zOOxM/2Orxp8dDgjO6euL69nRE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dependencies": { + "execa": "^0.7.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-camel-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz", + "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=", + "dependencies": { + "to-space-case": "^1.0.0" + } + }, + "node_modules/to-no-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", + "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" + }, + "node_modules/to-space-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", + "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", + "dependencies": { + "to-no-case": "^1.0.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dependencies": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dependencies": { + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "engines": { + "node": ">=4" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@types/d3-color": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.2.tgz", + "integrity": "sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA==" + }, + "@types/d3-interpolate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz", + "integrity": "sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg==", + "requires": { + "@types/d3-color": "^1" + } + }, + "@types/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==" + }, + "@types/d3-scale": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.2.tgz", + "integrity": "sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ==", + "requires": { + "@types/d3-time": "^2" + } + }, + "@types/d3-shape": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz", + "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==", + "requires": { + "@types/d3-path": "^1" + } + }, + "@types/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg==" + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/lodash": { + "version": "4.14.177", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.177.tgz", + "integrity": "sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw==" + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, + "@types/react": { + "version": "16.14.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.21.tgz", + "integrity": "sha512-rY4DzPKK/4aohyWiDRHS2fotN5rhBSK6/rz1X37KzNna9HJyqtaGAbq9fVttrEPWF5ywpfIP1ITL8Xi2QZn6Eg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.14.tgz", + "integrity": "sha512-FIX2AVmPTGP30OUJ+0vadeIFJJ07Mh1m+U0rxfgyW34p3rTlXI+nlenvAxNn4BP36YyI9IJ/+UJ7Wu22N1pI7A==", + "dev": true, + "requires": { + "@types/react": "^16" + } + }, + "@types/react-redux": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.16.tgz", + "integrity": "sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==", + "dev": true, + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@visx/axis": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/axis/-/axis-1.17.1.tgz", + "integrity": "sha512-3JdAY8xwA4xVnzkbXdIzCOWYCknCgw3L185lOJTXWNGO7kIgzbQ2YrLXnet37BFgD83MfxmlP6LhiHLkKVI6OQ==", + "requires": { + "@types/react": "*", + "@visx/group": "1.17.1", + "@visx/point": "1.7.0", + "@visx/scale": "1.14.0", + "@visx/shape": "1.17.1", + "@visx/text": "1.17.1", + "classnames": "^2.3.1", + "prop-types": "^15.6.0" + } + }, + "@visx/curve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@visx/curve/-/curve-1.7.0.tgz", + "integrity": "sha512-n0/SHM4YXjke+aEinhHFZPLMxWu3jbqtvqzfGJyibX8OmbDjavk9P+MHfGokUcw0xHy6Ch3YTuwbYuvVw5ny9A==", + "requires": { + "@types/d3-shape": "^1.3.1", + "d3-shape": "^1.0.6" + } + }, + "@visx/group": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/group/-/group-1.17.1.tgz", + "integrity": "sha512-g8pSqy8TXAisiOzypnVycDynEGlBhfxtVlwDmsbYB+XSFGEjnOheQSDohDI+ia7ek54Mw9uYe05tx5kP1hRMYw==", + "requires": { + "@types/react": "*", + "classnames": "^2.3.1", + "prop-types": "^15.6.2" + } + }, + "@visx/point": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@visx/point/-/point-1.7.0.tgz", + "integrity": "sha512-oaoY/HXYHhmpkkeKI4rBPmFtjHWtxSrIhZCVm1ipPoyQp3voJ8L6JD5eUIVmmaUCdUGUGwL1lFLnJiQ2p1Vlwg==" + }, + "@visx/responsive": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@visx/responsive/-/responsive-1.10.1.tgz", + "integrity": "sha512-7FT2BBmWFkFFqynI9C1NYfVOKT1FsNOm6MwWMqXKA7TMomdBW0wdtQNB1bHvwJvWurM/sNqxcQ/CBED6t9xujQ==", + "requires": { + "@types/lodash": "^4.14.146", + "@types/react": "*", + "lodash": "^4.17.10", + "prop-types": "^15.6.1", + "resize-observer-polyfill": "1.5.1" + } + }, + "@visx/scale": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@visx/scale/-/scale-1.14.0.tgz", + "integrity": "sha512-ovbtEOF/d76uGMJ5UZlxdS3t2T8I6md+aIwOXBaq0HdjaCLbe7HLlMyHJKjak/sqBxLAiCGVnechTUpSkfgSQw==", + "requires": { + "@types/d3-interpolate": "^1.3.1", + "@types/d3-scale": "^3.3.0", + "@types/d3-time": "^2.0.0", + "d3-interpolate": "^1.4.0", + "d3-scale": "^3.3.0", + "d3-time": "^2.1.1" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } + } + } + }, + "@visx/shape": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/shape/-/shape-1.17.1.tgz", + "integrity": "sha512-rVYFpytPCnV4s5U0za+jQ2jqFzKnmB3c8RP6fuOfF6kKosFPJcOYg9ikvewojARyMBTr1u3XvWV960Da+xyUdQ==", + "requires": { + "@types/d3-path": "^1.0.8", + "@types/d3-shape": "^1.3.1", + "@types/lodash": "^4.14.146", + "@types/react": "*", + "@visx/curve": "1.7.0", + "@visx/group": "1.17.1", + "@visx/scale": "1.14.0", + "classnames": "^2.3.1", + "d3-path": "^1.0.5", + "d3-shape": "^1.2.0", + "lodash": "^4.17.15", + "prop-types": "^15.5.10" + } + }, + "@visx/text": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@visx/text/-/text-1.17.1.tgz", + "integrity": "sha512-Cx6iH0kVq3YqCfFj7U6bMiKwa/bz4Z3q0vPdxmnVGcPjGZM1ac/y61KFH263e164LJ5jFaTYpPrrFmbZoy8+Vg==", + "requires": { + "@types/lodash": "^4.14.160", + "@types/react": "*", + "classnames": "^2.3.1", + "lodash": "^4.17.20", + "prop-types": "^15.7.2", + "reduce-css-calc": "^1.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", + "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=" + }, + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-table": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.9.tgz", + "integrity": "sha512-7eA6hFtAZwVx3dWAGoaBqTrzWko5jRUFKpHT64ZHkJpaA3y5wf5NlLjguqTRmqycatJZiwftODYYyGNLbQ7MuA==", + "requires": { + "colors": "1.0.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "requires": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "d3-3d": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/d3-3d/-/d3-3d-0.0.10.tgz", + "integrity": "sha512-zku/wgZFw7qOc0BA7f8mbk0hF2NIzyJu+1ucNXXWCSJgLu+nkZdZlu4oZ268vsBmlxTPUodjwL32hyqnwQNc9g==" + }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "d3-dsv": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + }, + "dependencies": { + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + } + } + }, + "d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + } + } + }, + "d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "requires": { + "d3-time": "1" + }, + "dependencies": { + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + } + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "deep-diff": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", + "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "differenceequationsignal1d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/differenceequationsignal1d/-/differenceequationsignal1d-0.1.1.tgz", + "integrity": "sha512-GHZ5QfnHbcmzn5dUNz6uVKi3JhUiXO1h8MuY7c/70bHVECAjPsFaowSu0+CWGDB6bfXwYoDDQa3kOvY89stUvA==", + "requires": { + "npm-check-updates": "^2.14.1" + } + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "gl-matrix": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.8.1.tgz", + "integrity": "sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw==" + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "google-protobuf": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.19.1.tgz", + "integrity": "sha512-Isv1RlNC+IzZzilcxnlVSf+JvuhxmY7DaxYCBy+zPS9XVuJRtlTTIXR9hnZ1YL1MMusJn/7eSy2swCzZIomQSg==" + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "requires": { + "jju": "^1.1.0" + } + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "just-curry-it": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", + "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==" + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "math-expression-evaluator": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.8.tgz", + "integrity": "sha512-9FbRY3i6U+CbHgrdNbAUaisjWTozkm1ZfupYQJiZ87NtYHk2Zh9DvxMgp/fifxVhqTLpd5fCCLossUbpZxGeKw==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-alias": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-alias/-/node-alias-1.0.4.tgz", + "integrity": "sha1-HxuRa1a56iQcATX5fO1pQPVW8pI=", + "requires": { + "chalk": "^1.1.1", + "lodash": "^4.2.0" + } + }, + "npm": { + "version": "3.10.10", + "resolved": "https://registry.npmjs.org/npm/-/npm-3.10.10.tgz", + "integrity": "sha1-Wx1XfkyIadbIYDvInpzRY3MD5G4=", + "requires": { + "abbrev": "~1.0.9", + "ansi-regex": "*", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.0.4", + "archy": "~1.0.0", + "asap": "~2.0.5", + "chownr": "~1.0.1", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "~1.1.11", + "debuglog": "*", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "fs-vacuum": "~1.2.9", + "fs-write-stream-atomic": "~1.0.8", + "fstream": "~1.0.10", + "fstream-npm": "~1.2.0", + "glob": "~7.1.0", + "graceful-fs": "~4.1.9", + "has-unicode": "~2.0.1", + "hosted-git-info": "~2.1.5", + "iferr": "~0.1.5", + "imurmurhash": "*", + "inflight": "~1.0.5", + "inherits": "~2.0.3", + "ini": "~1.3.4", + "init-package-json": "~1.9.4", + "lockfile": "~1.0.2", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "mkdirp": "~0.5.1", + "node-gyp": "~3.4.0", + "nopt": "~3.0.6", + "normalize-git-url": "~3.0.2", + "normalize-package-data": "~2.3.5", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-package-arg": "~4.2.0", + "npm-registry-client": "~7.2.1", + "npm-user-validate": "~0.1.5", + "npmlog": "~4.0.0", + "once": "~1.4.0", + "opener": "~1.4.2", + "osenv": "~0.1.3", + "path-is-inside": "~1.0.2", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "~2.0.4", + "read-package-tree": "~5.1.5", + "readable-stream": "~2.1.5", + "readdir-scoped-modules": "*", + "realize-package-specifier": "~3.0.3", + "request": "~2.75.0", + "retry": "~0.10.0", + "rimraf": "~2.5.4", + "semver": "~5.3.0", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "strip-ansi": "~3.0.1", + "tar": "~2.2.1", + "text-table": "~0.2.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "validate-npm-package-license": "*", + "validate-npm-package-name": "~2.2.2", + "which": "~1.2.11", + "wrappy": "~1.0.2", + "write-file-atomic": "~1.2.0" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "bundled": true + }, + "ansi-regex": { + "version": "2.0.0", + "bundled": true + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "1.0.4", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "asap": { + "version": "2.0.5", + "bundled": true + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + }, + "dependencies": { + "wcwidth": { + "version": "1.0.0", + "bundled": true, + "requires": { + "defaults": "^1.0.0" + }, + "dependencies": { + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.2", + "bundled": true + } + } + } + } + } + } + }, + "config-chain": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + }, + "dependencies": { + "proto-list": { + "version": "1.2.4", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "fs-vacuum": { + "version": "1.2.9", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.8", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "fstream-npm": { + "version": "1.2.0", + "bundled": true, + "requires": { + "fstream-ignore": "^1.0.0", + "inherits": "2" + }, + "dependencies": { + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "glob": { + "version": "7.1.0", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.1.9", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.1.5", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.5", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true + }, + "init-package-json": { + "version": "1.9.4", + "bundled": true, + "requires": { + "glob": "^6.0.0", + "npm-package-arg": "^4.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^2.0.1" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "bundled": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.0", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + } + } + }, + "lockfile": { + "version": "1.0.2", + "bundled": true + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + }, + "dependencies": { + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + } + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "node-gyp": { + "version": "3.4.0", + "bundled": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3", + "osenv": "0", + "path-array": "^1.0.0", + "request": "2", + "rimraf": "2", + "semver": "2.x || 3.x || 4 || 5", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "npmlog": { + "version": "3.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.6.0", + "set-blocking": "~2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.6.0", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-color": "^0.1.7", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "has-color": { + "version": "0.1.7", + "bundled": true + }, + "object-assign": { + "version": "4.1.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.0", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "bundled": true + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + } + } + }, + "path-array": { + "version": "1.0.1", + "bundled": true, + "requires": { + "array-index": "^1.0.0" + }, + "dependencies": { + "array-index": { + "version": "1.0.0", + "bundled": true, + "requires": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "bundled": true, + "requires": { + "ms": "0.7.1" + }, + "dependencies": { + "ms": { + "version": "0.7.1", + "bundled": true + } + } + }, + "es6-symbol": { + "version": "3.1.0", + "bundled": true, + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.11" + }, + "dependencies": { + "d": { + "version": "0.1.1", + "bundled": true, + "requires": { + "es5-ext": "~0.10.2" + } + }, + "es5-ext": { + "version": "0.10.12", + "bundled": true, + "requires": { + "es6-iterator": "2", + "es6-symbol": "~3.1" + }, + "dependencies": { + "es6-iterator": { + "version": "2.0.0", + "bundled": true, + "requires": { + "d": "^0.1.1", + "es5-ext": "^0.10.7", + "es6-symbol": "3" + } + } + } + } + } + } + } + } + } + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-git-url": { + "version": "3.0.2", + "bundled": true + }, + "normalize-package-data": { + "version": "2.3.5", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "^1.0.0" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "bundled": true + } + } + } + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-package-arg": { + "version": "4.2.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.5", + "semver": "^5.1.0" + } + }, + "npm-registry-client": { + "version": "7.2.1", + "bundled": true, + "requires": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0", + "npmlog": "~2.0.0 || ~3.1.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "npmlog": { + "version": "3.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.6.0", + "set-blocking": "~2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.6.0", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-color": "^0.1.7", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "has-color": { + "version": "0.1.7", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.0", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + } + } + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.1" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + } + } + }, + "retry": { + "version": "0.10.0", + "bundled": true + } + } + }, + "npm-user-validate": { + "version": "0.1.5", + "bundled": true + }, + "npmlog": { + "version": "4.0.0", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.6.0", + "set-blocking": "~2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.6.0", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-color": "^0.1.7", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "has-color": { + "version": "0.1.7", + "bundled": true + }, + "object-assign": { + "version": "4.1.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.0", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "bundled": true + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.4.2", + "bundled": true + }, + "osenv": { + "version": "0.1.3", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.1", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.1", + "bundled": true + } + } + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + }, + "dependencies": { + "mute-stream": { + "version": "0.0.5", + "bundled": true + } + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + }, + "dependencies": { + "util-extend": { + "version": "1.0.3", + "bundled": true + } + } + }, + "read-package-json": { + "version": "2.0.4", + "bundled": true, + "requires": { + "glob": "^6.0.0", + "graceful-fs": "^4.1.2", + "json-parse-helpfulerror": "^1.0.2", + "normalize-package-data": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "bundled": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.0", + "bundled": true + } + } + }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "bundled": true, + "requires": { + "jju": "^1.1.0" + }, + "dependencies": { + "jju": { + "version": "1.3.0", + "bundled": true + } + } + } + } + }, + "read-package-tree": { + "version": "5.1.5", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.1.5", + "bundled": true, + "requires": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "realize-package-specifier": { + "version": "3.0.3", + "bundled": true, + "requires": { + "dezalgo": "^1.0.1", + "npm-package-arg": "^4.1.1" + } + }, + "request": { + "version": "2.75.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "bl": "~1.1.2", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.0.0", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.1", + "qs": "~6.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1" + }, + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "bundled": true + }, + "aws4": { + "version": "1.4.1", + "bundled": true + }, + "bl": { + "version": "1.1.2", + "bundled": true, + "requires": { + "readable-stream": "~2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + } + } + }, + "caseless": { + "version": "0.11.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.0", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.0.0", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "bundled": true + } + } + }, + "har-validator": { + "version": "2.0.6", + "bundled": true, + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "bundled": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "bundled": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "bundled": true + } + } + }, + "commander": { + "version": "2.9.0", + "bundled": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + }, + "dependencies": { + "graceful-readlink": { + "version": "1.0.1", + "bundled": true + } + } + }, + "is-my-json-valid": { + "version": "2.15.0", + "bundled": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "generate-function": { + "version": "2.0.0", + "bundled": true + }, + "generate-object-property": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-property": "^1.0.0" + }, + "dependencies": { + "is-property": { + "version": "1.0.2", + "bundled": true + } + } + }, + "jsonpointer": { + "version": "4.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "requires": { + "pinkie": "^2.0.0" + }, + "dependencies": { + "pinkie": { + "version": "2.0.4", + "bundled": true + } + } + } + } + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.x.x" + } + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.x.x" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "bundled": true + }, + "jsprim": { + "version": "1.3.1", + "bundled": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "requires": { + "extsprintf": "1.0.2" + } + } + } + }, + "sshpk": { + "version": "1.10.1", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "dashdash": { + "version": "1.14.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "getpass": { + "version": "0.1.6", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "jsbn": { + "version": "0.1.0", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.3", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "mime-types": { + "version": "2.1.12", + "bundled": true, + "requires": { + "mime-db": "~1.24.0" + }, + "dependencies": { + "mime-db": { + "version": "1.24.0", + "bundled": true + } + } + }, + "node-uuid": { + "version": "1.4.7", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "qs": { + "version": "6.2.1", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "tough-cookie": { + "version": "2.3.1", + "bundled": true + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true + } + } + }, + "retry": { + "version": "0.10.0", + "bundled": true + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "requires": { + "glob": "^7.0.5" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + }, + "dependencies": { + "block-stream": { + "version": "0.0.8", + "bundled": true, + "requires": { + "inherits": "~2.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.0", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + }, + "dependencies": { + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + }, + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-license-ids": "^1.0.2" + }, + "dependencies": { + "spdx-license-ids": { + "version": "1.2.0", + "bundled": true + } + } + }, + "spdx-expression-parse": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-exceptions": "^1.0.4", + "spdx-license-ids": "^1.0.0" + }, + "dependencies": { + "spdx-exceptions": { + "version": "1.0.4", + "bundled": true + }, + "spdx-license-ids": { + "version": "1.2.0", + "bundled": true + } + } + } + } + }, + "validate-npm-package-name": { + "version": "2.2.2", + "bundled": true, + "requires": { + "builtins": "0.0.7" + }, + "dependencies": { + "builtins": { + "version": "0.0.7", + "bundled": true + } + } + }, + "which": { + "version": "1.2.11", + "bundled": true, + "requires": { + "isexe": "^1.1.1" + }, + "dependencies": { + "isexe": { + "version": "1.1.2", + "bundled": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "1.2.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + } + } + }, + "npm-check-updates": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-2.15.0.tgz", + "integrity": "sha512-0ZUokfgS+4uPVSVWP3CMie7kQwngiQag2e70CdcnUfBM7/tOUmxb0DDMfxqshw4MvgqlPsxSYprzKaBGlvXqnA==", + "requires": { + "bluebird": "^3.4.3", + "chalk": "^1.1.3", + "cint": "^8.2.1", + "cli-table": "^0.3.1", + "commander": "^2.9.0", + "fast-diff": "^1.0.1", + "find-up": "1.1.2", + "get-stdin": "^5.0.1", + "json-parse-helpfulerror": "^1.0.3", + "lodash": "^4.15.0", + "node-alias": "^1.0.4", + "npm": "^3.10.6", + "npmi": "^2.0.1", + "rc-config-loader": "^2.0.1", + "semver": "^5.3.0", + "semver-utils": "^1.1.1", + "spawn-please": "^0.3.0", + "update-notifier": "^2.2.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npmi": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npmi/-/npmi-2.0.1.tgz", + "integrity": "sha1-MmB2V+G9R8qFerTp2Y8KDP+WvOo=", + "requires": { + "npm": "^3", + "semver": "^4.1.0" + }, + "dependencies": { + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "ramda": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", + "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "rc-config-loader": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-2.0.5.tgz", + "integrity": "sha512-T464K2MQlnNWOblUDIglpFhyN+zYJq7jSlL++/N0hUkcmIXeNFumwXFVdtf8qhUGohn4RYQ0wdi74R575I44PQ==", + "requires": { + "debug": "^4.1.1", + "js-yaml": "^3.12.0", + "json5": "^2.1.0", + "object-assign": "^4.1.0", + "object-keys": "^1.0.12", + "path-exists": "^3.0.0", + "require-from-string": "^2.0.2" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-compound-slider": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-compound-slider/-/react-compound-slider-3.3.1.tgz", + "integrity": "sha512-1t0nCA0FXfe2hbuJG8VODTrN29FVTp1e2AuR8fRtF/J08/1q1F6OzDhHQqXqYl7O58i8Hei6oCAh4NQ6Kg90Rw==", + "requires": { + "@babel/runtime": "^7.12.5", + "d3-array": "^2.8.0", + "warning": "^4.0.3" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + } + } + }, + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-redux": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", + "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", + "requires": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "dependencies": { + "@types/react-redux": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.20.tgz", + "integrity": "sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + } + }, + "reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "requires": { + "balanced-match": "^1.0.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + } + } + }, + "reduce-reducers": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/reduce-reducers/-/reduce-reducers-0.4.3.tgz", + "integrity": "sha512-+CNMnI8QhgVMtAt54uQs3kUxC3Sybpa7Y63HR14uGLgI9/QR5ggHvpxwhGGe3wmx5V91YwqQIblN9k5lspAmGw==" + }, + "redux": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz", + "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-actions": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/redux-actions/-/redux-actions-2.6.5.tgz", + "integrity": "sha512-pFhEcWFTYNk7DhQgxMGnbsB1H2glqhQJRQrtPb96kD3hWiZRzXHwwmFPswg6V2MjraXRXWNmuP9P84tvdLAJmw==", + "requires": { + "invariant": "^2.2.4", + "just-curry-it": "^3.1.0", + "loose-envify": "^1.4.0", + "reduce-reducers": "^0.4.3", + "to-camel-case": "^1.0.0" + } + }, + "redux-logger": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", + "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "requires": { + "deep-diff": "^0.3.5" + } + }, + "redux-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redux-observable/-/redux-observable-1.2.0.tgz", + "integrity": "sha512-yeR90RP2WzZzCxxnQPlh2uFzyfFLsfXu8ROh53jGDPXVqj71uNDMmvi/YKQkd9ofiVoO4OYb1snbowO49tCEMg==", + "requires": {} + }, + "redux-thunk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", + "requires": {} + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "^5.0.3" + } + }, + "semver-utils": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/semver-utils/-/semver-utils-1.1.4.tgz", + "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + }, + "spawn-please": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-0.3.0.tgz", + "integrity": "sha1-2zOOxM/2Orxp8dDgjO6euL69nRE=" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "to-camel-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz", + "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=", + "requires": { + "to-space-case": "^1.0.0" + } + }, + "to-no-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", + "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo=" + }, + "to-space-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", + "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", + "requires": { + "to-no-case": "^1.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } +} From cd5ab5e6184249d7af51d576c65e1feb047e2ede Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 7 Dec 2022 11:05:03 -0500 Subject: [PATCH 048/126] Adjusted event panel max-height in consequence of having changed the series viewer height --- .../src/series/components/EventManager.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index af4203dea18..07ad1882e82 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -135,7 +135,7 @@ const EventManager = ({
{ const epoch = epochs[index]; const visible = filteredEpochs.includes(index); - + const handleCommentVisibilityChange = () => { if (!visibleComments.includes(index)) { setVisibleComments([ From 22e483d7ed8cd41c0d79099714d462d0fafbb424 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Mon, 12 Dec 2022 09:02:33 -0500 Subject: [PATCH 049/126] Fixed bug when fetching chunks --- .../src/series/store/logic/fetchChunks.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx index c964e1ea1f6..234a9825ac7 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx @@ -106,8 +106,7 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( // downsampling === 0 prevents a change of downsampling // otherwise the interval becomes wrong interval[1] - interval[0] < MAX_VIEWED_CHUNKS - && downsampling === 0 - ); + ).reverse(); const max = R.reduce( R.maxBy(({interval}) => interval[1] - interval[0]), From 3203aac4f786aaee2249befb2ea21389e3ca2fdb Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 21 Dec 2022 19:29:50 -0500 Subject: [PATCH 050/126] Merge EEG Browser improvements and jsdoc additions from branch 'loris_eeg_browser' into HEAD --- .gitignore | 4 + README.md | 8 + jsx/components/Sidebar.js | 1 + jsx/electrophysiologySessionView.js | 6 +- .../src/ajax/index.tsx | 27 ++- .../src/chunks/index.tsx | 6 + .../src/color/index.tsx | 14 +- .../src/eeglab/EEGLabSeriesProvider.tsx | 62 +++--- .../src/series/components/AnnotationForm.tsx | 196 ++++++++++++------ .../src/series/components/Axis.tsx | 16 ++ .../src/series/components/EEGMontage.tsx | 188 +++++++++++++---- .../src/series/components/Epoch.tsx | 15 +- .../src/series/components/EventManager.tsx | 139 +++++++------ .../src/series/components/Form.js | 18 +- .../src/series/components/IntervalSelect.tsx | 39 ++-- .../src/series/components/LineChunk.tsx | 21 +- .../series/components/ResponsiveViewer.tsx | 49 ++++- .../src/series/components/SeriesCursor.tsx | 57 ++++- .../src/series/components/SeriesRenderer.tsx | 152 ++++++++++---- .../src/series/components/components.tsx | 18 ++ .../src/series/store/index.tsx | 13 +- .../src/series/store/logic/dragBounds.tsx | 7 +- .../src/series/store/logic/fetchChunks.tsx | 102 ++++++--- .../src/series/store/logic/filterEpochs.tsx | 20 +- .../src/series/store/logic/highLowPass.tsx | 17 ++ .../src/series/store/logic/pagination.tsx | 20 +- .../series/store/logic/scaleAmplitudes.tsx | 11 + .../src/series/store/logic/timeSelection.tsx | 24 ++- .../src/series/store/state/bounds.tsx | 52 ++++- .../src/series/store/state/channel.tsx | 34 --- .../src/series/store/state/channels.tsx | 85 ++++++++ .../series/store/state/currentAnnotation.tsx | 9 +- .../src/series/store/state/cursor.tsx | 9 +- .../src/series/store/state/dataset.tsx | 64 ++---- .../src/series/store/state/filters.tsx | 7 + .../src/series/store/state/montage.tsx | 7 + .../src/series/store/state/rightPanel.tsx | 9 +- .../src/series/store/state/timeSelection.tsx | 15 +- .../src/series/store/types.tsx | 14 +- .../src/vector/index.tsx | 13 +- php/annotations.class.inc | 13 +- php/models/electrophysioannotations.class.inc | 56 +++++ php/models/electrophysioevents.class.inc | 15 ++ php/sessions.class.inc | 11 +- test/electrophysiologyBrowserTest.php | 13 ++ 45 files changed, 1232 insertions(+), 444 deletions(-) delete mode 100644 jsx/react-series-data-viewer/src/series/store/state/channel.tsx create mode 100644 jsx/react-series-data-viewer/src/series/store/state/channels.tsx diff --git a/.gitignore b/.gitignore index d5a65bf3098..15d54d6e6fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ js/* +<<<<<<< HEAD +======= +jsx/react-series-data-viewer/src/protocol-buffers/chunk_pb.js +>>>>>>> loris_eeg_browser diff --git a/README.md b/README.md index ef1003d9563..3a9802f982e 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ electrode information, task event information, the actual recording) -- as well New annotations or edits to existing annotations made through the browser must also be updated in the derivative files stored in the filesystem, before a user tries to download a derivative file package. To do this automatically, a script is provided under `tools/update_annotation_files.php`, and a cron job should be set up to execute it regularly, e.g. every evening. +<<<<<<< HEAD ## Installation requirements to use the visualization features The visualization component requires Protocol Buffers v3.0.0 or higher. For install instructions, you can refer to the Protocol Buffers GitHub page: https://github.com/protocolbuffers/protobuf @@ -54,4 +55,11 @@ In order to automatically generate the protoc compiled files, add the following } ``` and run `make dev` or 'npm install && npm run compile' from the loris root directory. +======= +## Installation requirements to use the visualization features +The visualization components require Protocol Buffers v3.0.0 or higher. +For install instructions, you can refer to the Protocol Buffers GitHub page: https://github.com/protocolbuffers/protobuf + +To enable the visualization components, set the useEEGBrowserVisualizationComponents config (Configuration/GUI) to true and run `make dev` or 'npm install && npm run compile' from the loris root directory. +>>>>>>> loris_eeg_browser diff --git a/jsx/components/Sidebar.js b/jsx/components/Sidebar.js index 45789e64540..46d57ce8d20 100644 --- a/jsx/components/Sidebar.js +++ b/jsx/components/Sidebar.js @@ -56,6 +56,7 @@ class Sidebar extends Component { /** * Save the sidebar reference + * * @param {object} node - DOM node */ saveSidebarRef(node) { diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js index 3f345a92152..d5a23feccf7 100644 --- a/jsx/electrophysiologySessionView.js +++ b/jsx/electrophysiologySessionView.js @@ -1,3 +1,4 @@ +/* global EEG_VIS_ENABLED */ /** * This is the React class for the eeg_session. * @@ -23,6 +24,7 @@ import SeriesRenderer import EEGMontage from './react-series-data-viewer/src/series/components/EEGMontage'; + /** * Electrophysiology Session View page * @@ -426,9 +428,9 @@ class ElectrophysiologySessionView extends Component { } {/* ##################### EEGNET OVERRIDE START ################## */} - {/* ##################### EEGNET OVERRIDE END ################## */} diff --git a/jsx/react-series-data-viewer/src/ajax/index.tsx b/jsx/react-series-data-viewer/src/ajax/index.tsx index 021f6a76f5d..9d5fcdfa394 100644 --- a/jsx/react-series-data-viewer/src/ajax/index.tsx +++ b/jsx/react-series-data-viewer/src/ajax/index.tsx @@ -1,4 +1,11 @@ -export const fetchBlob = (url: string, params?: {}) => +/** + * fetchBlob + * + * @param {string} url - The url to fetch + * @param {object} params - The request params + * @returns {Promise} - The blob data + */ +export const fetchBlob = (url: string, params?: RequestInit) : Promise => fetch(url, params).then((response) => { if (!response.ok) { return Promise.resolve(null) as Promise; @@ -6,7 +13,14 @@ export const fetchBlob = (url: string, params?: {}) => return response.blob().then((data) => data); }); -export const fetchJSON = (url: string, params?: {}) => +/** + * fetchJSON + * + * @param {string} url - The url to fetch + * @param {object} params - The request params + * @returns {Promise} - The json data + */ +export const fetchJSON = (url: string, params?: RequestInit) => fetch(url, params).then((response) => { if (!response.ok) { return Promise.resolve(null) as Promise; @@ -14,7 +28,14 @@ export const fetchJSON = (url: string, params?: {}) => return response.json().then((data) => data); }); -export const fetchText = (url: string, params?: {}) => +/** + * fetchText + * + * @param {string} url - The url to fetch + * @param {object} params - The request params + * @returns {Promise} - The text data + */ +export const fetchText = (url: string, params?: RequestInit) => fetch(url, params).then((response) => { if (!response.ok) { return Promise.resolve(null) as Promise; diff --git a/jsx/react-series-data-viewer/src/chunks/index.tsx b/jsx/react-series-data-viewer/src/chunks/index.tsx index aab41b787fd..e0b8f141366 100644 --- a/jsx/react-series-data-viewer/src/chunks/index.tsx +++ b/jsx/react-series-data-viewer/src/chunks/index.tsx @@ -2,6 +2,12 @@ import {FloatChunk} from '../protocol-buffers/chunk_pb'; import {fetchBlob} from '../ajax'; +/** + * fetchChunk + * + * @param {string} url - The url to fetch + * @returns {Promise} - The chunk data + */ export const fetchChunk = (url: string): Promise => { return fetchBlob(url).then((blob) => { const reader = new FileReader(); diff --git a/jsx/react-series-data-viewer/src/color/index.tsx b/jsx/react-series-data-viewer/src/color/index.tsx index 1f2027139d8..d7aa0d79c63 100644 --- a/jsx/react-series-data-viewer/src/color/index.tsx +++ b/jsx/react-series-data-viewer/src/color/index.tsx @@ -1,9 +1,21 @@ import {scaleOrdinal} from 'd3-scale'; + // import * as R from 'ramda'; // import {schemeCategory10, schemeSet3} from 'd3-scale-chromatic'; -// export const colorOrder = scaleOrdinal(R.concat(schemeCategory10, schemeSet3)); +// export const colorOrder = scaleOrdinal( +// R.concat(schemeCategory10, schemeSet3) +// ); + export const colorOrder = scaleOrdinal(); +/** + * hex2rgba + * + * @param {object} root - An object + * @param {string} root.color - An hexadecimal color + * @param {number} root.alpha - Opacity + * @returns {string} - An rgba expression + */ export const hex2rgba = ({color = '#000000', alpha = 1} : { color: string, alpha: number, diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index ca40ce62ad2..232220dbfcd 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -9,17 +9,17 @@ import {rootReducer, rootEpic} from '../series/store'; import {MAX_CHANNELS, DEFAULT_TIME_INTERVAL} from '../vector'; import { setChannels, + emptyChannels, +} from '../series/store/state/channels'; +import { setEpochs, setDatasetMetadata, - emptyChannels, + setPhysioFileID, } from '../series/store/state/dataset'; import {setDomain, setInterval} from '../series/store/state/bounds'; import {updateFilteredEpochs} from '../series/store/logic/filterEpochs'; import {setElectrodes} from '../series/store/state/montage'; -import {Channel} from '../series/store/types'; -// ##################### EEGNET OVERRIDE START ################## // import {AnnotationMetadata, EventMetadata} from '../series/store/types'; -// ##################### EEGNET OVERRIDE END ################## // declare global { interface Window { @@ -31,11 +31,11 @@ type CProps = { chunksURL: string, epochsURL: string, electrodesURL: string, - // ##################### EEGNET OVERRIDE START ################## // events: EventMetadata, annotations: AnnotationMetadata, - // ##################### EEGNET OVERRIDE END ################## // + physioFileID: number, limit: number, + children: React.ReactNode, }; /** @@ -43,12 +43,9 @@ type CProps = { */ class EEGLabSeriesProvider extends Component { private store: Store; - public state: { - channels: Channel[] - }; /** - * @constructor + * @class * @param {object} props - React Component properties */ constructor(props: CProps) { @@ -60,12 +57,6 @@ class EEGLabSeriesProvider extends Component { applyMiddleware(thunk, epicMiddleware) ); - this.state = { - channels: [], - }; - - this.store.subscribe(this.listener.bind(this)); - epicMiddleware.run(rootEpic); window.EEGLabSeriesProviderStore = this.store; @@ -74,13 +65,21 @@ class EEGLabSeriesProvider extends Component { chunksURL, epochsURL, electrodesURL, - // ##################### EEGNET OVERRIDE START ################## // events, annotations, - // ##################### EEGNET OVERRIDE END ################## // + physioFileID, limit, } = props; + this.store.dispatch(setPhysioFileID(physioFileID)); + + /** + * + * @param {Function} fetcher The fn to collect the type of data + * @param {string} url - The url + * @param {string} route - The route + * @returns {Promise} - The data + */ const racers = (fetcher, url, route = '') => { if (url) { return [fetcher(`${url}${route}`) @@ -135,13 +134,13 @@ class EEGLabSeriesProvider extends Component { hed: hed, channels: 'all', annotationInstanceID: null, - } + }; }); - }).then(events => { - let epochs = events; - annotations.instances.map(instance => { + }).then((events) => { + const epochs = events; + annotations.instances.map((instance) => { const label = annotations.labels - .find(label => + .find((label) => label.AnnotationLabelID == instance.AnnotationLabelID ).LabelName; epochs.push({ @@ -156,7 +155,7 @@ class EEGLabSeriesProvider extends Component { }); }); return epochs; - }).then(epochs => { + }).then((epochs) => { this.store.dispatch( setEpochs( epochs @@ -190,25 +189,16 @@ class EEGLabSeriesProvider extends Component { }); } - /** - * Store update listener - */ - listener() { - this.setState({ - channels: this.store.getState().dataset.channels, - }); - } - /** * Renders the React component. * - * @return {JSX} - React markup for the component + * @returns {JSX} - React markup for the component */ render() { - const [signalViewer, ...rest] = this.props.children; + const [signalViewer, ...rest] = React.Children.toArray(this.props.children); return ( - {(this.state.channels.length > 0) && signalViewer} + {signalViewer} {rest} ); diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index 58d32ae16e2..fdd83dd2998 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -1,17 +1,19 @@ import React, {useEffect, useState} from 'react'; -import {AnnotationMetadata, Epoch as EpochType, RightPanel} from '../store/types'; -import {connect, DefaultRootState} from 'react-redux'; +import { + AnnotationMetadata, + Epoch as EpochType, + RightPanel, +} from '../store/types'; +import {connect} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; import {setRightPanel} from '../store/state/rightPanel'; import * as R from 'ramda'; import {toggleEpoch, updateActiveEpoch} from '../store/logic/filterEpochs'; import {RootState} from '../store'; -// ##################### EEGNET OVERRIDE START ################## // import {setEpochs} from '../store/state/dataset'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; import {NumericElement, SelectElement, TextareaElement} from './Form'; import swal from 'sweetalert2'; -// ##################### EEGNET OVERRIDE END ################## // type CProps = { timeSelection?: [number, number], @@ -19,44 +21,61 @@ type CProps = { filteredEpochs: number[], setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, - // ##################### EEGNET OVERRIDE START ################## // setEpochs: (_: EpochType[]) => void, currentAnnotation: EpochType, setCurrentAnnotation: (_: EpochType) => void, physioFileID: number, annotationMetadata: AnnotationMetadata, - // ##################### EEGNET OVERRIDE END ################## // toggleEpoch: (_: number) => void, updateActiveEpoch: (_: number) => void, interval: [number, number], }; +/** + * + * @param root0 + * @param root0.timeSelection + * @param root0.epochs + * @param root0.setTimeSelection + * @param root0.setRightPanel + * @param root0.setEpochs + * @param root0.currentAnnotation + * @param root0.setCurrentAnnotation + * @param root0.physioFileID + * @param root0.annotationMetadata + * @param root0.toggleEpoch, + * @param root0.updateActiveEpoch, + * @param root0.interval + */ const AnnotationForm = ({ timeSelection, epochs, - filteredEpochs, setTimeSelection, setRightPanel, - // ##################### EEGNET OVERRIDE START ################## // setEpochs, currentAnnotation, setCurrentAnnotation, physioFileID, annotationMetadata, - // ##################### EEGNET OVERRIDE END ################## // toggleEpoch, updateActiveEpoch, interval, }: CProps) => { const [startEvent = '', endEvent = ''] = timeSelection || []; - let [event, setEvent] = useState([startEvent, endEvent]); - // ##################### EEGNET OVERRIDE START ################## // - let [label, setLabel] = useState(currentAnnotation ? currentAnnotation.label : null); - let [comment, setComment] = useState(currentAnnotation ? currentAnnotation.comment : ''); - let [isSubmitted, setIsSubmitted] = useState(false); - let [isDeleted, setIsDeleted] = useState(false); - let [annoMessage, setAnnoMessage] = useState(''); - // ##################### EEGNET OVERRIDE END ################## // + const [event, setEvent] = useState([startEvent, endEvent]); + const [label, setLabel] = useState( + currentAnnotation ? + currentAnnotation.label : + null + ); + const [comment, setComment] = useState( + currentAnnotation ? + currentAnnotation.comment : + '' + ); + const [isSubmitted, setIsSubmitted] = useState(false); + const [isDeleted, setIsDeleted] = useState(false); + const [annoMessage, setAnnoMessage] = useState(''); // Time Selection useEffect(() => { @@ -64,6 +83,10 @@ const AnnotationForm = ({ setEvent([startEvent, endEvent]); }, [timeSelection]); + /** + * + * @param event + */ const validate = (event) => ( (event[0] || event[0] === 0) && (event[1] || event[1] === 0) @@ -72,14 +95,19 @@ const AnnotationForm = ({ && event[1] >= interval[0] && event[1] <= interval[1] ); - // ##################### EEGNET OVERRIDE START ################## // + /** + * + * @param id + * @param val + */ const handleStartTimeChange = (id, val) => { const value = parseInt(val); setEvent([value, event[1]]); if (validate([value, event[1]])) { let endTime = event[1]; - if (typeof endTime === 'string'){ + + if (typeof endTime === 'string') { endTime = parseInt(endTime); } setTimeSelection( @@ -89,47 +117,72 @@ const AnnotationForm = ({ ] ); } - } + }; + /** + * + * @param name + * @param val + */ const handleEndTimeChange = (name, val) => { const value = parseInt(val); setEvent([event[0], value]); if (validate([event[0], value])) { let startTime = event[0]; - if (typeof startTime === 'string'){ + + if (typeof startTime === 'string') { startTime = parseInt(startTime); } setTimeSelection( [ startTime || null, - value + value, ] ); } - } - + }; + + /** + * + * @param name + * @param value + */ const handleLabelChange = (name, value) => { setLabel(value); }; + /** + * + * @param name + * @param value + */ const handleCommentChange = (name, value) => { setComment(value); }; + /** + * + */ const handleSubmit = () => { setIsSubmitted(true); }; + /** + * + */ const handleReset = () => { // Clear all fields setEvent(['', '']); setTimeSelection([null, null]); setLabel(''); setComment(''); - } + }; + /** + * + */ const handleDelete = () => { setIsDeleted(true); - } + }; // Submit useEffect(() => { @@ -167,7 +220,9 @@ const AnnotationForm = ({ // instance_id = null for new annotations const body = { physioFileID: physioFileID, - instance_id: currentAnnotation ? currentAnnotation.annotationInstanceID : null, + instance_id: currentAnnotation ? + currentAnnotation.annotationInstanceID : + null, instance: { onset: startTime, duration: duration, @@ -185,18 +240,20 @@ const AnnotationForm = ({ label: label, comment: comment, channels: 'all', - annotationInstanceID: currentAnnotation ? currentAnnotation.annotationInstanceID : null, + annotationInstanceID: currentAnnotation ? + currentAnnotation.annotationInstanceID : + null, }; fetch(url, { method: 'POST', credentials: 'same-origin', body: JSON.stringify(body), - }).then(response => { + }).then((response) => { if (response.ok) { return response.json(); } - }).then(data => { + }).then((data) => { setIsSubmitted(false); // if in edit mode, remove old annotation instance @@ -215,9 +272,11 @@ const AnnotationForm = ({ // Reset Form handleReset(); - - // Disaply success message - setAnnoMessage(currentAnnotation ? 'Annotation Updated!' : 'Annotation Added!'); + + // Display success message + setAnnoMessage(currentAnnotation ? + 'Annotation Updated!' : + 'Annotation Added!'); setTimeout(() => { setAnnoMessage(''); // Empty string will cause success div to hide @@ -227,35 +286,37 @@ const AnnotationForm = ({ setRightPanel('annotationList'); } }, 3000); - - }).catch(error => { - console.log(error); + }).catch((error) => { + console.error(error); // Display error message swal.fire( 'Error', 'Something went wrong!', 'error' ); - }) + }); }, [isSubmitted]); // Delete useEffect(() => { if (isDeleted) { - const url = window.location.origin + '/electrophysiology_browser/annotations/'; + const url = window.location.origin + + '/electrophysiology_browser/annotations/'; const body = { physioFileID: physioFileID, - instance_id: currentAnnotation ? currentAnnotation.annotationInstanceID : null, + instance_id: currentAnnotation ? + currentAnnotation.annotationInstanceID : + null, }; swal.fire({ title: 'Are you sure?', - text: "You won't be able to revert this!", + text: 'You won\'t be able to revert this!', type: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', - confirmButtonText: 'Yes, delete it!' + confirmButtonText: 'Yes, delete it!', }).then((result) => { // if isConfirmed if (result.value) { @@ -263,36 +324,36 @@ const AnnotationForm = ({ method: 'DELETE', credentials: 'same-origin', body: JSON.stringify(body), - }).then(response => { + }).then((response) => { if (response.ok) { setIsDeleted(false); - + epochs.splice(epochs.indexOf(currentAnnotation), 1); setEpochs( epochs - .sort(function (a, b) { + .sort(function(a, b) { return a.onset - b.onset; }) ); - + // Reset Form handleReset(); - - // Disaply success message + + // Display success message swal.fire( 'Success', 'Annotation Deleted!', 'success' ); - + // If in edit mode, switch back to annotation panel if (currentAnnotation !== null) { setCurrentAnnotation(null); setRightPanel('annotationList'); } } - }).catch(error => { - console.log(error); + }).catch((error) => { + console.error(error); // Display error message swal.fire( 'Error', @@ -308,11 +369,11 @@ const AnnotationForm = ({ }, [isDeleted]); let labelOptions = {}; - annotationMetadata.labels.map(label => { + annotationMetadata.labels.map((label) => { labelOptions = { ...labelOptions, - [label.LabelName]: label.LabelName - } + [label.LabelName]: label.LabelName, + }; }); return ( @@ -375,19 +436,35 @@ const AnnotationForm = ({ value={comment} onUserInput={handleCommentChange} /> - - {currentAnnotation && - } {annoMessage && ( -
+
{annoMessage}
)} @@ -396,7 +473,6 @@ const AnnotationForm = ({
); }; -// ##################### EEGNET OVERRIDE END ################## // AnnotationForm.defaultProps = { timeSelection: null, @@ -410,9 +486,7 @@ export default connect( timeSelection: state.timeSelection, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, - // ##################### EEGNET OVERRIDE START ################## // currentAnnotation: state.currentAnnotation, - // ##################### EEGNET OVERRIDE END ################## // interval: state.bounds.interval, }), (dispatch: (any) => void) => ({ @@ -432,7 +506,6 @@ export default connect( dispatch, updateActiveEpoch ), - // ##################### EEGNET OVERRIDE START ################## // setEpochs: R.compose( dispatch, setEpochs @@ -441,6 +514,5 @@ export default connect( dispatch, setCurrentAnnotation ), - // ##################### EEGNET OVERRIDE END ################## // }) )(AnnotationForm); diff --git a/jsx/react-series-data-viewer/src/series/components/Axis.tsx b/jsx/react-series-data-viewer/src/series/components/Axis.tsx index 82a569f2ae3..f907109c058 100644 --- a/jsx/react-series-data-viewer/src/series/components/Axis.tsx +++ b/jsx/react-series-data-viewer/src/series/components/Axis.tsx @@ -11,6 +11,17 @@ type CProps = { hideLine: boolean, }; +/** + * + * @param root0 + * @param root0.orientation + * @param root0.domain + * @param root0.range + * @param root0.ticks + * @param root0.padding + * @param root0.format + * @param root0.hideLine + */ const Axis = ({ orientation, domain, @@ -45,6 +56,11 @@ Axis.defaultProps = { ticks: 10, padding: 0, hideLine: false, + + /** + * + * @param tick + */ format: (tick) => `${tick}`, }; diff --git a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx index cb053df941b..1ba8a9ef388 100644 --- a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx @@ -4,7 +4,7 @@ import {_3d} from 'd3-3d'; import {Group} from '@visx/group'; import ResponsiveViewer from './ResponsiveViewer'; import {Electrode} from '../../series/store/types'; -import {setHidden} from '../../series/store/state/montage'; +import {setHidden} from '../store/state/montage'; import React, {useState} from 'react'; import Panel from 'Panel'; import {RootState} from '../store'; @@ -18,13 +18,19 @@ type CProps = { mouseX: number, mouseY: number, setHidden: (_: number[]) => void, + physioFileID: number, }; +/** + * + * @param root0 + * @param root0.electrodes + * @param root0.physioFileID + */ const EEGMontage = ( { electrodes, - hidden, - setHidden, + physioFileID, }: CProps) => { if (electrodes.length === 0) return null; @@ -37,26 +43,33 @@ const EEGMontage = ( const [mouseY, setMouseY] = useState(0); const [view3D, setView3D] = useState(false); - const scale = 1200; - let scatter3D = []; - let scatter2D = []; + const scatter3D = []; + const scatter2D = []; const startAngle = 0; const color = '#000000'; - let point3D = _3d() + const point3D = _3d() .x((d) => d.x) .y((d) => d.y) .z((d) => d.z) .rotateZ( startAngle) - .rotateX(-startAngle) - .scale(scale); + .rotateX(-startAngle); + /** + * + * @param v + */ const dragStart = (v: any) => { setDrag(true); setMx(v[0]); setMy(v[1]); }; + + /** + * + * @param v + */ const dragged = (v: any) => { if (!drag) return; const beta = (v[0] - mx + mouseX) * -2 * Math.PI; @@ -72,44 +85,131 @@ const EEGMontage = ( const dragEnd = (v: any) => { setDrag( false); setMouseX( v[0] - mx + mouseX); + /** + * + * @param v + */ + const dragEnd = (v: any) => { + setDrag(false); + setMouseX(v[0] - mx + mouseX); setMouseY(v[1] - my + mouseY); }; /** * Compute the stereographic projection. * - * Given a unit sphere with radius r = 1 and center at The origin. + * Given a unit sphere with radius r = 1 and center at the origin. * Project the point p = (x, y, z) from the sphere's South pole (0, 0, -1) * on a plane on the sphere's North pole (0, 0, 1). * * P' = P * (2r / (r + z)) * * @param {number} x - x coordinate of electrodes on a unit sphere scale - * @param {number} y - x coordinate of electrodes on a unit sphere scale - * @param {number} z - x coordinate of electrodes on a unit sphere scale - * @param {number} scale - Scale to change the projection point.Defaults to 1, which is on the sphere - * - * @return {number[]} : x, y positions of electrodes as projected onto a unit circle. + * @param {number} y - y coordinate of electrodes on a unit sphere scale + * @param {number} z - z coordinate of electrodes on a unit sphere scale + * @param {number} scale - Scale to change the projection point. + * Defaults to 1, which is on the sphere + * @return {number[]} : x, y positions of electrodes + * as projected onto a unit circle. */ const stereographicProjection = (x, y, z, scale=1.0) => { - const mu = 1.0 / (scale + z); + const mu = (2 * scale) / (scale + z); return [x * mu, y * mu]; }; - electrodes.map((electrode, i) => { + /** + * Computes an axis aligned bounding box for a set of points + * + * @param {number[][]} points - an array of nD points + * @return {[number, number]} : a pair of lower and upper bounds + */ + const boundingBox = (points) => { + if (points.length === 0) return []; + const dim = points[0].length; + + return points.reduce( + (boundingBox, point) => { + for (let j=0; j < dim; ++j) { + boundingBox[0][j] = Math.min(boundingBox[0][j], point[j]); + boundingBox[1][j] = Math.max(boundingBox[1][j], point[j]); + } + return boundingBox; + }, + [points[0].slice(), points[0].slice()] + ); + }; + + // Find the enclosing rectangle + const bb = boundingBox( + electrodes.map( + (electrode) => electrode.position.slice(0, 2) + ) + ); + + let ALSOrientation = false; + let headRadius = 1; + let headRatio = 1; + let montageRadius = 100; + + // === Those values may need to be adjusted + // depending on the coord space/net used + const scale3D = 10; + const scale2D = 5; + // === + + if (bb.length > 0) { + // Determine if the points are in an ALS or RAS coordinate system + const bbw = Math.abs(bb[0][0]) + Math.abs(bb[1][0]); + const bbh = Math.abs(bb[0][1]) + Math.abs(bb[1][1]); + if (bbw > bbh) ALSOrientation = true; + + // Scale the sphere used for projection + // with the radius of the enclosing sphere + headRadius = Math.max(bbw, bbh)/2; + headRatio = Math.max(bbw, bbh) / Math.min(bbw, bbh); + montageRadius = stereographicProjection( + headRadius, + 0, + 0, + headRadius + )[0] * scale2D; + } + + electrodes.map((electrode) => { + let electrodeCoords = electrode.position.slice(); + + // SVG Y axis points toward bottom + // Rotate the points to have the nose up + electrodeCoords[1] *= -1; + + // We want the electrodes in the RAS orientation + // Convert from ALS if necessary + if (ALSOrientation) { + electrodeCoords = [ + electrodeCoords[1], + -electrodeCoords[0], + electrodeCoords[2], + ]; + } + scatter3D.push({ - x: electrode.position[0], - y: electrode.position[1], - z: electrode.position[2], + x: electrodeCoords[0] * scale3D, + y: electrodeCoords[1] * scale3D, + z: electrodeCoords[2] * scale3D, }); + const [x, y] = stereographicProjection( - electrode.position[0] * 10, - electrode.position[1] * 10, - electrode.position[2] * 10 + electrodeCoords[0] * headRatio, + electrodeCoords[1], + electrodeCoords[2], + headRadius ); - scatter2D.push({x: x * 150, y: y * 150 / 0.8}); + scatter2D.push({x: x * scale2D, y: y * scale2D}); }); + /** + * + */ const Montage3D = () => ( {point3D.rotateZ(angleZ).rotateX(angleX)(scatter3D).map((point, i) => { @@ -122,38 +222,43 @@ const EEGMontage = ( fill={color} fillOpacity='0.3' opacity='1' - /> + > + {electrodes[i].name} + ); })} ); + /** + * + */ const Montage2D = () => ( @@ -163,28 +268,20 @@ const EEGMontage = ( key={i} > {electrodes[i].name} {i + 1} {electrodes[i].name} @@ -197,7 +294,7 @@ const EEGMontage = ( return (
({ hidden: state.montage.hidden, electrodes: state.montage.electrodes, + physioFileID: state.dataset.physioFileID, }), (dispatch: (_: any) => void) => ({ setHidden: R.compose( diff --git a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx index 3ea2c4c60ea..06902e813fe 100644 --- a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx +++ b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx @@ -6,11 +6,24 @@ type CProps = { parentHeight: number, onset: number, duration: number, - scales: [ScaleLinear, ScaleLinear], + scales: [ + ScaleLinear, + ScaleLinear, + ], color: string, opacity: number, }; +/** + * + * @param root0 + * @param root0.parentHeight + * @param root0.onset + * @param root0.duration + * @param root0.scales + * @param root0.color + * @param root0.opacity + */ const Epoch = ( { parentHeight, diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 07ad1882e82..97132fd07ac 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -1,24 +1,20 @@ -// ##################### EEGNET OVERRIDE START ################## // import React, {useState, useEffect} from 'react'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; import {MAX_RENDERED_EPOCHS} from '../../vector'; import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; -// ##################### EEGNET OVERRIDE END ################## // import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect} from 'react-redux'; import {setTimeSelection} from '../store/state/timeSelection'; import {setRightPanel} from '../store/state/rightPanel'; import * as R from 'ramda'; -import { RootState } from '../store'; +import {RootState} from '../store'; type CProps = { timeSelection?: [number, number], epochs: EpochType[], filteredEpochs: number[], - // ##################### EEGNET OVERRIDE START ################## // rightPanel: RightPanel, setCurrentAnnotation: (_: EpochType) => void, - // ##################### EEGNET OVERRIDE END ################## // setTimeSelection: (_: [number, number]) => void, setRightPanel: (_: RightPanel) => void, toggleEpoch: (_: number) => void, @@ -26,19 +22,31 @@ type CProps = { interval: [number, number], }; +/** + * + * @param root0 + * @param root0.epochs + * @param root0.filteredEpochs + * @param root0.rightPanel + * @param root0.setCurrentAnnotation + * @param root0.setTimeSelection + * @param root0.setRightPanel + * @param root0.toggleEpoch + * @param root0.updateActiveEpoch + * @param root0.interval + */ const EventManager = ({ epochs, filteredEpochs, - // ##################### EEGNET OVERRIDE START ################## // rightPanel, setCurrentAnnotation, - // ##################### EEGNET OVERRIDE END ################## // setTimeSelection, setRightPanel, toggleEpoch, updateActiveEpoch, interval, }: CProps) => { + // ##################### EEGNET OVERRIDE START ################## // const [epochType, setEpochType] = useState((rightPanel && rightPanel !== 'annotationForm' @@ -99,9 +107,9 @@ const EventManager = ({ justifyContent: 'space-between', }} > -

+

{`${epochType}s`} - +
in timeline view

@@ -116,7 +124,7 @@ const EventManager = ({ >
setAllCommentsVisible(!allCommentsVisible)} > { if (!visibleComments.includes(index)) { setVisibleComments([ ...visibleComments, - index + index, ]); } else { setVisibleComments(visibleComments.filter( - value => value !== index + (value) => value !== index )); } - } + }; + /** + * + */ const handleEditClick = () => { setCurrentAnnotation(epoch); setRightPanel('annotationForm'); const startTime = epoch.onset; const endTime = epoch.duration + startTime; setTimeSelection([startTime, endTime]); - } + }; return ( - <> +
+ {epoch.label}
+ {Math.round(epoch.onset * 1000) / 1000} + {epoch.duration > 0 + && ' - ' + + (Math.round((epoch.onset + epoch.duration) * 1000) / 1000) } +
+
-
- {epoch.label}
- {epoch.onset}{epoch.duration > 0 - && ' - ' + (epoch.onset + epoch.duration)} -
-
- {epoch.type === 'Annotation' && - - } + {epoch.type === 'Annotation' && - {(epoch.comment || epoch.hed) && - - } -
+ } + + {(epoch.comment || epoch.hed) && + + }
{visibleComments.includes(index) &&
@@ -233,7 +251,7 @@ const EventManager = ({ }
} - +
); })}
@@ -241,7 +259,6 @@ const EventManager = ({
); }; -// ##################### EEGNET OVERRIDE END ################## // EventManager.defaultProps = { timeSelection: null, @@ -254,18 +271,14 @@ export default connect( timeSelection: state.timeSelection, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, - // ##################### EEGNET OVERRIDE START ################## // rightPanel: state.rightPanel, - // ##################### EEGNET OVERRIDE END ################## // interval: state.bounds.interval, }), (dispatch: (_: any) => void) => ({ - // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation: R.compose( dispatch, setCurrentAnnotation ), - // ##################### EEGNET OVERRIDE END ################## // setTimeSelection: R.compose( dispatch, setTimeSelection diff --git a/jsx/react-series-data-viewer/src/series/components/Form.js b/jsx/react-series-data-viewer/src/series/components/Form.js index 2c16b93ad53..7e07d58db20 100644 --- a/jsx/react-series-data-viewer/src/series/components/Form.js +++ b/jsx/react-series-data-viewer/src/series/components/Form.js @@ -1,4 +1,5 @@ import React, {useEffect} from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; export const SelectElement = (props) => { @@ -18,7 +19,7 @@ export const SelectElement = (props) => { } props.onUserInput(props.name, value); - } + }; let multiple = props.multiple ? 'multiple' : null; let required = props.required ? 'required' : null; @@ -128,7 +129,7 @@ export const SelectElement = (props) => {
); -} +}; SelectElement.propTypes = { name: PropTypes.string.isRequired, @@ -175,7 +176,7 @@ export const NumericElement = (props) => { const handleChange = (e) => { props.onUserInput(props.name, e.target.value); - } + }; const {disabled, required} = props; let requiredHTML = required ? * : null; @@ -211,7 +212,7 @@ export const NumericElement = (props) => {
); -} +}; NumericElement.propTypes = { name: PropTypes.string.isRequired, @@ -244,7 +245,7 @@ NumericElement.defaultProps = { export const TextareaElement = (props) => { const handleChange = (e) => { props.onUserInput(props.name, e.target.value); - } + }; let disabled = props.disabled ? 'disabled' : null; let required = props.required ? 'required' : null; @@ -277,7 +278,7 @@ export const TextareaElement = (props) => { ); -} +}; TextareaElement.propTypes = { name: PropTypes.string.isRequired, @@ -307,12 +308,14 @@ TextareaElement.defaultProps = { /** * TextboxElement - the input type='text' component. + * * @param {object} props * @return {JSX.Element} */ export const TextboxElement = (props) => { /** * handleChange - input change by user. + * * @param {object} event - input event */ const handleChange = (event) => { @@ -328,7 +331,8 @@ export const TextboxElement = (props) => { }; /** * Renders the React component. - * @return {JSX.Element} - React markup for component. + * + * @return {JSX} - React markup for component. */ return ( <> diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 7f51468d059..63e6efdd440 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -24,6 +24,18 @@ type CProps = { updateFilteredEpochs: (_: void) => void, }; +/** + * + * @param root0 + * @param root0.viewerHeight + * @param root0.domain + * @param root0.interval + * @param root0.setInterval + * @param root0.dragStart + * @param root0.dragContinue + * @param root0.dragEnd + * @param root0.updateFilteredEpochs + */ const IntervalSelect: FunctionComponent = ({ viewerHeight, domain, @@ -51,13 +63,12 @@ const IntervalSelect: FunctionComponent = ({ return (
- {/* ##################### EEGNET OVERRIDE START ################## */}
= ({ style={{ marginBottom: '20px', display: 'flex', - justifyContent: 'center' + justifyContent: 'center', }} >
@@ -86,9 +97,9 @@ const IntervalSelect: FunctionComponent = ({ className='btn btn-primary btn-xs' onClick={() => { if (interval[0] !== domain[0]) { - setInterval([interval[0] - 50, interval[1] - 50]) + setInterval([interval[0] - 50, interval[1] - 50]); } else { - setInterval([interval[0], interval[1] - 50]) + setInterval([interval[0], interval[1] - 50]); } }} value='<<' @@ -98,9 +109,9 @@ const IntervalSelect: FunctionComponent = ({ className='btn btn-primary btn-xs' onClick={() => { if (interval[0] !== domain[0]) { - setInterval([interval[0] - 1, interval[1] - 1]) + setInterval([interval[0] - 1, interval[1] - 1]); } else { - setInterval([interval[0], interval[1] - 1]) + setInterval([interval[0], interval[1] - 1]); } }} value='<' @@ -110,9 +121,9 @@ const IntervalSelect: FunctionComponent = ({ className='btn btn-primary btn-xs' onClick={() => { if (interval[1] !== domain[1]) { - setInterval([interval[0] + 1, interval[1] + 1]) + setInterval([interval[0] + 1, interval[1] + 1]); } else { - setInterval([interval[0] + 1, interval[1]]) + setInterval([interval[0] + 1, interval[1]]); } }} value='>' @@ -122,9 +133,9 @@ const IntervalSelect: FunctionComponent = ({ className='btn btn-primary btn-xs' onClick={() => { if (interval[1] !== domain[1]) { - setInterval([interval[0] + 50, interval[1] + 50]) + setInterval([interval[0] + 50, interval[1] + 50]); } else { - setInterval([interval[0] + 50, interval[1]]) + setInterval([interval[0] + 50, interval[1]]); } }} value='>>' @@ -152,7 +163,6 @@ const IntervalSelect: FunctionComponent = ({
- {/* ##################### EEGNET OVERRIDE END ################## */}
= ({ setIsDragging(false); }} > + {/* @ts-ignore */} {({getRailProps}) => (
)} + + {/* @ts-ignore */} {({handles, getHandleProps}) => (
@@ -195,6 +208,8 @@ const IntervalSelect: FunctionComponent = ({
)}
+ + {/* @ts-ignore */} {({ticks}) => (
, ScaleLinear], + scales: [ + ScaleLinear, + ScaleLinear, + ], + physioFileID: number, color?: string }; +/** + * + * @param root0 + * @param root0.channelIndex + * @param root0.traceIndex + * @param root0.chunkIndex + * @param root0.chunk + * @param root0.seriesRange + * @param root0.amplitudeScale + * @param root0.scales + * @param root0.physioFileID + */ const LineChunk = ({ channelIndex, traceIndex, @@ -72,6 +88,7 @@ const LineChunk = ({ amplitudeScale, scales, color, + physioFileID, ...rest }: CProps) => { const {interval, values} = chunk; @@ -93,7 +110,7 @@ const LineChunk = ({ return ( void }; +/** + * + * @param root0 + * @param root0.parentWidth + * @param root0.parentHeight + * @param root0.mouseDown + * @param root0.mouseMove + * @param root0.mouseUp + * @param root0.mouseLeave + * @param root0.children + */ const ResponsiveViewer : FunctionComponent = ({ parentWidth, parentHeight, @@ -20,8 +31,12 @@ const ResponsiveViewer : FunctionComponent = ({ mouseMove, mouseUp, mouseLeave, - children + children, }) => { + /** + * + * @param layer + */ const provision = (layer) => React.cloneElement( layer, @@ -41,6 +56,10 @@ const ResponsiveViewer : FunctionComponent = ({ .range([-parentHeight/2, parentHeight/2]), ]; + /** + * + * @param e + */ const eventToPosition = (e) => { const { top, @@ -98,10 +117,30 @@ const ResponsiveViewer : FunctionComponent = ({ ResponsiveViewer.defaultProps = { parentWidth: 400, parentHeight: 300, - mouseMove: () => {}, - mouseDown: () => {}, - mouseUp: () => {}, - mouseLeave: () => {}, + /** + * + */ + mouseMove: () => { + // do nothing + }, + /** + * + */ + mouseDown: () => { + // do nothing + }, + /** + * + */ + mouseUp: () => { + // do nothing + }, + /** + * + */ + mouseLeave: () => { + // do nothing + }, }; export default withParentSize(ResponsiveViewer); diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 5e563cafd21..7bb1f29cd9b 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -24,6 +24,17 @@ type CProps = { showMarker: boolean }; +/** + * + * @param root0 + * @param root0.cursor + * @param root0.channels + * @param root0.epochs + * @param root0.filteredEpochs + * @param root0.CursorContent + * @param root0.interval + * @param root0.showMarker + */ const SeriesCursor = ( { cursor, @@ -45,6 +56,9 @@ const SeriesCursor = ( const left = Math.min(Math.max(100 * cursor, 0), 100) + '%'; const time = interval[0] + cursor * (interval[1] - interval[0]); + /** + * + */ const Cursor = () => (
); + /** + * + */ const ValueTags = () => (
); + /** + * + */ const TimeMarker = () => (
); + /** + * + */ const EpochMarker = () => { if (reversedEpochs.length > MAX_RENDERED_EPOCHS) return null; @@ -152,12 +175,30 @@ const createIndices = R.memoizeWith( (array) => array.map((_, i) => i) ); +/** + * + * @param chunk + */ const indexToTime = (chunk) => (index) => chunk.interval[0] + (index / chunk.values.length) * (chunk.interval[1] - chunk.interval[0]); -const CursorContent = ({time, channel, contentIndex, showMarker}) => { - const Marker = ({color}) => ( +/** + * + * @param root0 + * @param root0.time + * @param root0.channel + * @param root0.contentIndex + * @param root0.showMarker + */ +const CursorContent = ( + {time, channel, contentIndex, showMarker}: CursorContentProps +) => { + /** + * + * @param color + */ + const Marker = (color) => (
{ const chunk = trace.chunks.find( (chunk) => chunk.interval[0] <= time && chunk.interval[1] >= time ); + + /** + * + * @param chunk + */ const computeValue = (chunk) => { const indices = createIndices(chunk.values); const bisectTime = bisector(indexToTime(chunk)).left; @@ -195,7 +241,11 @@ const CursorContent = ({time, channel, contentIndex, showMarker}) => { borderRadius: '3px', }} > - {showMarker && ()} + {showMarker && ( + + )} {chunk && Math.round(computeValue(chunk))} {SIGNAL_UNIT}
); @@ -214,6 +264,7 @@ SeriesCursor.defaultProps = { export default connect( (state: RootState)=> ({ + cursor: state.cursor, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, }) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index d53f6ca2edb..ed5f635027b 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -1,10 +1,20 @@ -import React, {useCallback, useEffect, useState, FunctionComponent} from 'react'; +import React, { + useCallback, + useEffect, + useState, + FunctionComponent, +} from 'react'; import * as R from 'ramda'; import {vec2} from 'gl-matrix'; import {Group} from '@visx/group'; import {connect} from 'react-redux'; import {scaleLinear, ScaleLinear} from 'd3-scale'; -import {MAX_RENDERED_EPOCHS, MAX_CHANNELS, SIGNAL_UNIT, Vector2} from '../../vector'; +import { + MAX_RENDERED_EPOCHS, + MAX_CHANNELS, + SIGNAL_UNIT, + Vector2, +} from '../../vector'; import ResponsiveViewer from './ResponsiveViewer'; import Axis from './Axis'; import LineChunk from './LineChunk'; @@ -45,20 +55,16 @@ import { Channel, Epoch as EpochType, RightPanel, -// ##################### EEGNET OVERRIDE START ################## // AnnotationMetadata, } from '../store/types'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; -// ##################### EEGNET OVERRIDE END ################## // type CProps = { viewerWidth: number, viewerHeight: number, interval: [number, number], - domain: number, amplitudeScale: number, rightPanel: RightPanel, - cursor?: number, timeSelection?: [number, number], setCursor: (number) => void, setRightPanel: (_: RightPanel) => void, @@ -82,13 +88,45 @@ type CProps = { dragEnd: (_: number) => void, limit: number, setInterval: (_: [number, number]) => void, - // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation: (_: EpochType) => void, physioFileID: number, annotationMetadata: AnnotationMetadata, - // ##################### EEGNET OVERRIDE END ################## // }; +/** + * + * @param root0 + * @param root0.viewerHeight + * @param root0.viewerWidth + * @param root0.interval + * @param root0.amplitudeScale + * @param root0.cursor + * @param root0.rightPanel + * @param root0.timeSelection + * @param root0.setCursor + * @param root0.setRightPanel + * @param root0.channels + * @param root0.channelMetadata + * @param root0.hidden + * @param root0.epochs + * @param root0.filteredEpochs + * @param root0.activeEpoch + * @param root0.offsetIndex + * @param root0.setOffsetIndex + * @param root0.setAmplitudesScale + * @param root0.resetAmplitudesScale + * @param root0.setLowPassFilter + * @param root0.setHighPassFilter + * @param root0.setViewerWidth + * @param root0.setViewerHeight + * @param root0.dragStart + * @param root0.dragContinue + * @param root0.dragEnd + * @param root0.limit + * @param root0.setCurrentAnnotation + * @param root0.physioFileID + * @param root0.annotationMetadata + */ const SeriesRenderer: FunctionComponent = ({ viewerHeight, viewerWidth, @@ -96,7 +134,6 @@ const SeriesRenderer: FunctionComponent = ({ setInterval, domain, amplitudeScale, - cursor, rightPanel, timeSelection, setCursor, @@ -120,19 +157,17 @@ const SeriesRenderer: FunctionComponent = ({ dragContinue, dragEnd, limit, - // ##################### EEGNET OVERRIDE START ################## // setCurrentAnnotation, physioFileID, annotationMetadata, - // ##################### EEGNET OVERRIDE END ################## // }) => { if (channels.length === 0) return null; // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [cursor, offsetIndex, interval]); + const memoizedCallback = useCallback(() => {}, [/*cursor*/, offsetIndex, interval]); useEffect(() => { // Keypress handler const keybindHandler = (e) => { - if (cursor) { // Cursor not null implies on page / focus + /*if (cursor) { // Cursor not null implies on page / focus if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { switch(e.code){ case "ArrowUp": @@ -162,7 +197,7 @@ const SeriesRenderer: FunctionComponent = ({ e.preventDefault(); // Make sure arrows don't scroll } - } + } */ // Generic keybinds that don't require focus if (e.code === 'KeyC' && e.shiftKey) { // Close all right panels @@ -216,7 +251,10 @@ const SeriesRenderer: FunctionComponent = ({ vec2.add(center, topLeft, bottomRight); vec2.scale(center, center, 1 / 2); - const scales: [ScaleLinear, ScaleLinear] = [ + const scales: [ + ScaleLinear, + ScaleLinear + ] = [ scaleLinear() .domain(interval) .range([topLeft[0], bottomRight[0]]), @@ -227,6 +265,13 @@ const SeriesRenderer: FunctionComponent = ({ const filteredChannels = channels.filter((_, i) => !hidden.includes(i)); + /** + * + * @param root0 + * @param root0.viewerWidth + * @param root0.viewerHeight + * @param root0.interval + */ const XAxisLayer = ({viewerWidth, viewerHeight, interval}) => { return ( <> @@ -262,14 +307,16 @@ const SeriesRenderer: FunctionComponent = ({ ); }) - // ##################### EEGNET OVERRIDE END ################## // } {timeSelection && = ({ {...epochs[activeEpoch]} parentHeight={viewerHeight} scales={scales} - // ##################### EEGNET OVERRIDE START ################## // color={'#d8ffcc'} - // ##################### EEGNET OVERRIDE END ################## // /> } ); }; + /** + * + * @param root0 + * @param root0.viewerWidth + * @param root0.viewerHeight + */ const ChannelAxesLayer = ({viewerWidth, viewerHeight}) => { const axisHeight = viewerHeight / MAX_CHANNELS; return ( @@ -319,6 +370,11 @@ const SeriesRenderer: FunctionComponent = ({ ); }; + /** + * + * @param root0 + * @param root0.viewerWidth + */ const ChannelsLayer = ({viewerWidth}) => { useEffect(() => { setViewerWidth(viewerWidth); @@ -326,7 +382,10 @@ const SeriesRenderer: FunctionComponent = ({ return ( <> - + = ({ vec2.add(axisEnd, subTopLeft, vec2.fromValues(0.1, subDiagonal[1])); const seriesRange = channelMetadata[channel.index].seriesRange; - const scales: [ScaleLinear, ScaleLinear] = [ + const scales: [ + ScaleLinear, + ScaleLinear + ] = [ scaleLinear() .domain(interval) .range([subTopLeft[0], subBottomRight[0]]), @@ -384,6 +446,7 @@ const SeriesRenderer: FunctionComponent = ({ seriesRange={seriesRange} amplitudeScale={amplitudeScale} scales={scales} + physioFileID={physioFileID} /> )) )) @@ -395,12 +458,20 @@ const SeriesRenderer: FunctionComponent = ({ const hardLimit = Math.min(offsetIndex + limit - 1, channelMetadata.length); + /** + * + * @param v + */ const onMouseMove = (v : MouseEvent) => { if (bounds === null || bounds === undefined) return; const x = Math.min(1, Math.max(0, (v.pageX - bounds.left)/bounds.width)); return (dragContinue)(x); }; + /** + * + * @param v + */ const onMouseUp = (v : MouseEvent) => { if (bounds === null || bounds === undefined) return; document.removeEventListener('mousemove', onMouseMove); @@ -473,7 +544,7 @@ const SeriesRenderer: FunctionComponent = ({ {Object.keys(HIGH_PASS_FILTERS).map((key) =>
  • { + onClick={() => { setHighPassFilter(key); setHighPass(key); }} @@ -505,7 +576,7 @@ const SeriesRenderer: FunctionComponent = ({ {Object.keys(LOW_PASS_FILTERS).map((key) =>
  • { + onClick={() => { setLowPassFilter(key); setLowPass(key); }} @@ -531,7 +602,7 @@ const SeriesRenderer: FunctionComponent = ({ style={{width: '55px'}} value={offsetIndex} onChange={(e) => { - let value = parseInt(e.target.value); + const value = parseInt(e.target.value); !isNaN(value) && setOffsetIndex(value); }} /> @@ -620,19 +691,18 @@ const SeriesRenderer: FunctionComponent = ({ Time (s)
  • { + mouseMove={useCallback(R.compose(setCursor, R.nth(0)), [])} + mouseDown={useCallback((v: Vector2) => { document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); R.compose(dragStart, R.nth(0))(v); - }} + }, [bounds])} > = ({ }} >
    - { - // ##################### EEGNET OVERRIDE START ################## // [...Array(epochs.length).keys()].filter((i) => epochs[i].type === 'Event' ).length > 0 && @@ -721,7 +789,6 @@ const SeriesRenderer: FunctionComponent = ({ : 'Add Annotation' } - // ##################### EEGNET OVERRIDE END ################## // }
    = ({ > {[...Array(epochs.length).keys()].filter((i) => epochs[i].onset + epochs[i].duration > interval[0] - && epochs[i].onset < interval[1] - // ##################### EEGNET OVERRIDE START ################## // - && ((epochs[i].type === 'Event' && rightPanel === 'eventList') - || (epochs[i].type === 'Annotation' && rightPanel === 'annotationList')) - // ##################### EEGNET OVERRIDE END ################## // + && epochs[i].onset < interval[1] + && ( + (epochs[i].type === 'Event' + && rightPanel === 'eventList') + || + (epochs[i].type === 'Annotation' + && rightPanel === 'annotationList') + ) ).length >= MAX_RENDERED_EPOCHS &&
    = ({
    {rightPanel &&
    - {/* ##################### EEGNET OVERRIDE START ################## */} {rightPanel === 'annotationForm' && = ({ } {rightPanel === 'eventList' && } {rightPanel === 'annotationList' && } - {/* ##################### EEGNET OVERRIDE START ################## */}
    }
    @@ -796,10 +864,9 @@ export default connect( viewerHeight: state.bounds.viewerHeight, interval: state.bounds.interval, amplitudeScale: state.bounds.amplitudeScale, - cursor: state.cursor, rightPanel: state.rightPanel, timeSelection: state.timeSelection, - channels: state.dataset.channels, + channels: state.channels, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, activeEpoch: state.dataset.activeEpoch, @@ -807,6 +874,7 @@ export default connect( channelMetadata: state.dataset.channelMetadata, offsetIndex: state.dataset.offsetIndex, domain: state.bounds.domain, + physioFileID: state.dataset.physioFileID, }), (dispatch: (_: any) => void) => ({ setOffsetIndex: R.compose( @@ -853,12 +921,10 @@ export default connect( dispatch, setFilteredEpochs ), - // ##################### EEGNET OVERRIDE START ################## // - setCurrentAnnotation: R.compose( + setCurrentAnnotation: R.compose( dispatch, setCurrentAnnotation ), - // ##################### EEGNET OVERRIDE END ################## // dragStart: R.compose( dispatch, startDragSelection diff --git a/jsx/react-series-data-viewer/src/series/components/components.tsx b/jsx/react-series-data-viewer/src/series/components/components.tsx index ac2158ecf7f..0e97539e575 100644 --- a/jsx/react-series-data-viewer/src/series/components/components.tsx +++ b/jsx/react-series-data-viewer/src/series/components/components.tsx @@ -13,6 +13,18 @@ interface IHandleProps { getHandleProps: GetHandleProps; } +/** + * + * @param root0 + * @param root0.domain + * @param root0.domain.0 + * @param root0.domain.1 + * @param root0.handle + * @param root0.handle.id + * @param root0.handle.value + * @param root0.handle.percent + * @param root0.getHandleProps + */ export const Handle: React.SFC = ({ domain: [min, max], handle: {id, value, percent}, @@ -50,6 +62,12 @@ interface ITickProps { count: number; } +/** + * + * @param root0 + * @param root0.tick + * @param root0.count + */ export const Tick: React.FC = ({tick, count}) => (
    { const {interval} = bounds; return {interval, timeSelection}; }), - createFetchChunksEpic(({bounds, dataset}) => ({ + createFetchChunksEpic(({bounds, dataset, channels}) => ({ bounds, dataset, + channels, })), - createPaginationEpic(({dataset}) => { - const {limit, channelMetadata, channels} = dataset; + createPaginationEpic(({dataset, channels}) => { + const {limit, channelMetadata} = dataset; return {limit, channelMetadata, channels}; }), createScaleAmplitudesEpic(({bounds}) => { @@ -74,4 +77,4 @@ export const rootEpic = combineEpics( }), ); -export type RootState = ReturnType; \ No newline at end of file +export type RootState = ReturnType; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx b/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx index ac596cbbfd0..e9fd4ae1ac0 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx @@ -22,9 +22,14 @@ export const endDragInterval = createAction(END_DRAG_INTERVAL); export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; +/** + * createDragBoundsEpic + * + * @returns {Observable} - A stream of actions + */ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( action$: Observable, - state$: Observable + state$: Observable, ): Observable => { const startDrag$ = action$.pipe( ofType(START_DRAG_INTERVAL), diff --git a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx index 234a9825ac7..ba9f611ad51 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx @@ -4,40 +4,69 @@ import {Observable, from, of} from 'rxjs'; import * as Rx from 'rxjs/operators'; import {createAction} from 'redux-actions'; import {State as DatasetState} from '../state/dataset'; -import {Filter} from '../state/filters' -import {Chunk} from '../types'; +import {Filter} from '../state/filters'; +import {Channel, Chunk} from '../types'; import {State as BoundsState} from '../state/bounds'; import {fetchChunk} from '../../../chunks'; import {MAX_VIEWED_CHUNKS} from '../../../vector'; -import {setActiveChannel} from '../state/dataset'; -import {setChunks} from '../state/channel'; +import {setChannels} from '../state/channels'; export const UPDATE_VIEWED_CHUNKS = 'UPDATE_VIEWED_CHUNKS'; export const updateViewedChunks = createAction(UPDATE_VIEWED_CHUNKS); type FetchedChunks = { channelIndex: number, + traceIndex: number, chunks: Chunk[] }; - -export const loadChunks = ({channelIndex, ...rest}: FetchedChunks) => { +/** + * loadChunks + * + * @param {FetchedChunks[]} chunksData - The fetched chunks + * @returns {Function} - Dispatch actions to the store + */ +export const loadChunks = (chunksData: FetchedChunks[]) => { return (dispatch: (_: any) => void) => { - let filters: Filter[] = window.EEGLabSeriesProviderStore.getState().filters; - rest.chunks.forEach((chunk, index, chunks) => { - chunk.filters = []; - chunks[index].values = Object.values(filters).reduce( - (signal: number[], filter: Filter) => { - chunks[index].filters.push(filter.name); - return filter.fn(signal); - }, - chunk.originalValues - ); - }); + const channels : Channel[] = []; + + const filters: Filter[] = window.EEGLabSeriesProviderStore + .getState().filters; + for (let index = 0; index < chunksData.length; index++) { + const {channelIndex, chunks} : { + channelIndex: number, + chunks: Chunk[] + } = chunksData[index]; + for (let i = 0; i < chunks.length; i++) { + chunks[i].filters = []; + chunks[i].values = Object.values(filters).reduce( + (signal: number[], filter: Filter) => { + chunks[i].filters.push(filter.name); + return filter.fn(signal); + }, + chunks[i].originalValues + ); + } - dispatch(setActiveChannel(channelIndex)); - dispatch(setChunks({...rest, channelIndex})); - dispatch(setActiveChannel(null)); + const idx = channels.findIndex((c) => c.index === channelIndex); + if (idx >= 0) { + channels[idx].traces.push({ + chunks: chunks, + type: 'line', + }); + } else { + channels.push({ + index: channelIndex, + traces: [{ + chunks: chunks, + type: 'line', + }], + }); + } + } + + channels.sort((a, b) => a.index - b.index); + dispatch(setChannels(channels)); }; }; @@ -56,10 +85,16 @@ export const fetchChunkAt = R.memoizeWith( ) ); -type State = {bounds: BoundsState, dataset: DatasetState}; +type State = {bounds: BoundsState, dataset: DatasetState, channels: Channel[]}; const UPDATE_DEBOUNCE_TIME = 100; +/** + * createFetchChunksEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - An observable + */ export const createFetchChunksEpic = (fromState: (any) => State) => ( action$: Observable, state$: Observable @@ -67,19 +102,19 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( return action$.pipe( ofType(UPDATE_VIEWED_CHUNKS), Rx.withLatestFrom(state$), - Rx.map(([_, state]) => fromState(state)), + Rx.map(([, state]) => fromState(state)), Rx.debounceTime(UPDATE_DEBOUNCE_TIME), - Rx.concatMap(({bounds, dataset}) => { - const {chunksURL, shapes, timeInterval, channels} = dataset; + Rx.concatMap(({bounds, dataset, channels}) => { + const {chunksURL, shapes, timeInterval} = dataset; if (!chunksURL) { return of(); } const fetches = R.flatten( - channels.map((channel, i) => { + channels.map((channel) => { return ( channel && - channel.traces.map((trace, j) => { + channel.traces.map((_, j) => { const ncs = shapes.map((shape) => shape[shape.length - 2]); const citvs = ncs @@ -100,13 +135,10 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( }; }) .filter( - ({interval, downsampling}) => - // TODO: check this condition... - // Why interval[1] - interval[0] < MAX_VIEWED_CHUNKS ? - // downsampling === 0 prevents a change of downsampling - // otherwise the interval becomes wrong + ({interval}) => interval[1] - interval[0] < MAX_VIEWED_CHUNKS - ).reverse(); + ) + .reverse(); const max = R.reduce( R.maxBy(({interval}) => interval[1] - interval[0]), @@ -149,8 +181,12 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( }) ); - return from(fetches).pipe(Rx.mergeMap(R.identity)); + return from(fetches).pipe( + Rx.mergeMap(R.identity), + Rx.toArray(), + ); }), + // @ts-ignore Rx.map((payload) => loadChunks(payload)) ); }; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index 137211163dc..156906fe839 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -17,6 +17,12 @@ export const updateActiveEpoch = createAction(UPDATE_ACTIVE_EPOCH); export type Action = (_: (_: any) => void) => void; +/** + * createFilterEpochsEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ export const createFilterEpochsEpic = (fromState: (_: any) => any) => ( action$: Observable, state$: Observable @@ -25,7 +31,7 @@ export const createFilterEpochsEpic = (fromState: (_: any) => any) => ( ofType(UPDATE_FILTERED_EPOCHS), Rx.map(R.prop('payload')), Rx.withLatestFrom(state$), - Rx.map(([payload, state]) => { + Rx.map(([, state]) => { const {interval, epochs} = fromState(state); let newFilteredEpochs = [...Array(epochs.length).keys()] .filter((index) => @@ -44,6 +50,12 @@ export const createFilterEpochsEpic = (fromState: (_: any) => any) => ( ); }; +/** + * createToggleEpochEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ export const createToggleEpochEpic = (fromState: (_: any) => any) => ( action$: Observable, state$: Observable @@ -74,6 +86,12 @@ export const createToggleEpochEpic = (fromState: (_: any) => any) => ( ); }; +/** + * createActiveEpochEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ export const createActiveEpochEpic = (fromState: (_: any) => any) => ( action$: Observable, state$: Observable diff --git a/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx b/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx index 5a391d7f427..8843bb5b43b 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/highLowPass.tsx @@ -15,6 +15,13 @@ export const setHighPassFilter = createAction(SET_HIGH_PASS_FILTER); export type Action = (_: (_: any) => void) => void; +/** + * applyFilter + * + * @param {object} coefficients - The coefficients a, b + * @param {Float32Array} input - The input signal + * @returns {Float32Array} - The output signal + */ const applyFilter = (coefficients, input) => { const diffFilter = new DifferenceEquationSignal1D(); diffFilter.enableBackwardSecondPass(); @@ -64,6 +71,11 @@ export const LOW_PASS_FILTERS = { }, }; +/** + * createLowPassFilterEpic + * + * @returns {Observable} - A stream of actions + */ export const createLowPassFilterEpic = () => ( action$: Observable, state$: Observable, @@ -116,6 +128,11 @@ export const HIGH_PASS_FILTERS = { }, }; +/** + * createLowPassFilterEpic + * + * @returns {Observable} - A stream of actions + */ export const createHighPassFilterEpic = () => ( action$: Observable, state$: Observable diff --git a/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx b/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx index aa19a21a8cd..c92750a5b22 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx @@ -4,11 +4,8 @@ import * as Rx from 'rxjs/operators'; import {ofType} from 'redux-observable'; import {createAction} from 'redux-actions'; import {Channel, ChannelMetadata} from '../types'; -import { - emptyChannels, - setDatasetMetadata, - setChannels, -} from '../state/dataset'; +import {setChannels} from '../state/channels'; +import {setDatasetMetadata} from '../state/dataset'; import {updateViewedChunks} from './fetchChunks'; export const SET_OFFSET_INDEX = 'SET_OFFSET_INDEX'; @@ -22,6 +19,12 @@ export type State = { channels: Channel[] }; +/** + * createPaginationEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ export const createPaginationEpic = (fromState: (_: any) => State) => ( action$: Observable, state$: Observable @@ -53,8 +56,11 @@ export const createPaginationEpic = (fromState: (_: any) => State) => ( R.prop('index'), R.equals(channelIndex) ) - ) || emptyChannels(1, 1)[0]; - channel.index = channelIndex; + ) || { + index: channelIndex, + traces: [{chunks: [], type: 'line'}], + }; + newChannels.push(channel); channelIndex++; } diff --git a/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx b/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx index a597ca9aab2..fad70d9f328 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/scaleAmplitudes.tsx @@ -13,6 +13,12 @@ export const RESET_AMPLITUDES_SCALE = 'RESET_AMPLITUDES_SCALE'; export const resetAmplitudesScale = createAction(RESET_AMPLITUDES_SCALE); export type Action = (_: (_: any) => void) => void; +/** + * createScaleAmplitudesEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ export const createScaleAmplitudesEpic = (fromState: (_: any) => number) => ( action$: Observable, state$: Observable @@ -33,6 +39,11 @@ export const createScaleAmplitudesEpic = (fromState: (_: any) => number) => ( ); }; +/** + * createResetAmplitudesEpic + * + * @returns {Observable} - A stream of actions + */ export const createResetAmplitudesEpic = () => ( action$: Observable, ): Observable => { diff --git a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx index 3f169f97cc3..5bd62d8652e 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx @@ -18,6 +18,12 @@ export const endDragSelection = createAction(END_DRAG_SELECTION); export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; +/** + * createTimeSelectionEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( action$: Observable, state$: Observable @@ -32,12 +38,28 @@ export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( Rx.map(R.prop('payload')) ); + /** + * initInterval + * + * @param {Array} root - An array + * @param {number} root."0" - The mouse position + * @param {object} root."1" - The state + * @returns {Function} - Action creator for dispatching actions + */ const initInterval = ([position, state]) => { const {interval} = R.clone(fromState(state)); const x = Math.round(interval[0] + position * (interval[1] - interval[0])); return setTimeSelection([x, x]); }; + /** + * updateInterval + * + * @param {Array} root - An array + * @param {number} root."0" - The mouse position + * @param {object} root."1" - The state + * @returns {Function} - Action creator for dispatching actions + */ const updateInterval = ([position, state]) => { const {interval, timeSelection} = R.clone(fromState(state)); const x = interval[0] + position * (interval[1] - interval[0]); @@ -52,7 +74,7 @@ export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( const endDrag$ = action$.pipe( ofType(END_DRAG_SELECTION), Rx.withLatestFrom(state$), - Rx.map(([payload, state]) => { + Rx.map(([, state]) => { if ( state.timeSelection && (state.timeSelection[1] - state.timeSelection[0] < 2) diff --git a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx index c1e89aeae1d..e2418676b24 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx @@ -30,20 +30,47 @@ export type State = { viewerHeight: number, }; -const interval = (state: [number, number] = [0.25, 0.75], action?: Action): [number, number] => { +/** + * interval reducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ +const interval = ( + state: [number, number] = [0.25, 0.75], + action?: Action +): [number, number] => { if (action && action.type === 'SET_INTERVAL') { return action.payload; } return state; }; -const domain = (state: [number, number] = [0, 1], action?: Action): [number, number] => { +/** + * domain reducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ +const domain = ( + state: [number, number] = [0, 1], + action?: Action +): [number, number] => { if (action && action.type === 'SET_DOMAIN') { return action.payload; } return state; }; +/** + * amplitudeScale reducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ const amplitudeScale = (state = 1, action?: Action): number => { if (action && action.type === 'SET_AMPLITUDE_SCALE') { return action.payload; @@ -51,6 +78,13 @@ const amplitudeScale = (state = 1, action?: Action): number => { return state; }; +/** + * viewerWidth reducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ const viewerWidth = (state = 400, action?: Action): number => { if (action && action.type === 'SET_VIEWER_WIDTH') { return action.payload; @@ -58,6 +92,13 @@ const viewerWidth = (state = 400, action?: Action): number => { return state; }; +/** + * viewerHeight reducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ const viewerHeight = (state = 800, action?: Action): number => { if (action && action.type === 'SET_VIEWER_HEIGHT') { return action.payload; @@ -65,6 +106,13 @@ const viewerHeight = (state = 800, action?: Action): number => { return state; }; +/** + * boundsReducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ export const boundsReducer: (State, Action) => State = ( state = { interval: interval(), diff --git a/jsx/react-series-data-viewer/src/series/store/state/channel.tsx b/jsx/react-series-data-viewer/src/series/store/state/channel.tsx deleted file mode 100644 index bc2c06eb132..00000000000 --- a/jsx/react-series-data-viewer/src/series/store/state/channel.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as R from 'ramda'; -import {createAction} from 'redux-actions'; -import {Channel, Chunk} from '../types'; - -export const SET_CHUNKS = 'SET_CHUNKS'; -export const setChunks = createAction(SET_CHUNKS); - -export type Action = { - type: 'SET_CHUNKS', - payload: {traceIndex: number, chunks: Chunk[]} -}; - -export type State = Channel; - -export const channelReducer = ( - state: Channel = {index: 0, traces: []}, - action?: Action -): State => { - if (!action) { - return state; - } - switch (action.type) { - case SET_CHUNKS: { - return R.assocPath( - ['traces', action.payload.traceIndex, 'chunks'], - action.payload.chunks, - state - ); - } - default: { - return state; - } - } -}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/channels.tsx b/jsx/react-series-data-viewer/src/series/store/state/channels.tsx new file mode 100644 index 00000000000..69fe4dfea45 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/state/channels.tsx @@ -0,0 +1,85 @@ +import * as R from 'ramda'; +import {createAction} from 'redux-actions'; +import {Channel, Trace, Chunk} from '../types'; + +export const SET_CHUNKS = 'SET_CHUNKS'; +export const setChunks = createAction(SET_CHUNKS); + +export const SET_CHANNELS = 'SET_CHANNELS'; +export const setChannels = createAction(SET_CHANNELS); + +export type Action = +| { + type: 'SET_CHUNKS', + payload: { + channelIndex: number, + traceIndex: number, + chunks: Chunk[]} + } +| {type: 'SET_CHANNELS', payload: Channel[]} + +/** + * channelsReducer + * + * @param {Channel[]} state - The current state + * @param {Action} action - The action + * @returns {Channel[]} - The updated state + */ +export const channelsReducer = ( + state: Channel[] = [], + action?: Action +) => { + if (!action) { + return state; + } + switch (action.type) { + case SET_CHUNKS: { + const i = state.findIndex( + (c) => c.index === action.payload.channelIndex + ); + + if (i >= 0) { + return R.assocPath( + [i, 'traces', action.payload.traceIndex, 'chunks'], + action.payload.chunks, + state + ); + } + } + case SET_CHANNELS: { + return action.payload; + } + default: { + return state; + } + } +}; + +/** + * emptyChannels + * + * @param {number} channelsCount - The channels count + * @param {number} tracesCount - The traces count + * @returns {Function} - A Fn that returns channelsCount empty channels + */ +export const emptyChannels = (channelsCount: number, tracesCount: number) => { + /** + * makeTrace + * + * @returns {Trace} - An empty trace + */ + const makeTrace = () => ({chunks: [], type: 'line'}); + + /** + * makeChannel + * + * @param {number} index - The channel index + * @returns {Channel} - An empty channel + */ + const makeChannel = (index) => ({ + index, + traces: R.range(0, tracesCount).map(makeTrace), + }); + + return R.range(0, channelsCount).map(makeChannel); +}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/currentAnnotation.tsx b/jsx/react-series-data-viewer/src/series/store/state/currentAnnotation.tsx index 90e1afd351f..b1be51b44a0 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/currentAnnotation.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/currentAnnotation.tsx @@ -5,12 +5,19 @@ export const SET_CURRENT_ANNOTATION = 'SET_CURRENT_ANNOTATION'; export const setCurrentAnnotation = createAction(SET_CURRENT_ANNOTATION); export type Action = { - type: "SET_CURRENT_ANNOTATION", + type: 'SET_CURRENT_ANNOTATION', payload: Epoch }; export type Reducer = (state: Epoch, action?: Action) => Epoch; +/** + * currentAnnotationReducer + * + * @param {object} state - The current state + * @param {Action} action - The action + * @returns {object} - The updated state + */ export const currentAnnotationReducer: Reducer = (state = null, action) => { if (!action) { return state; diff --git a/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx b/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx index 2d406b793ee..4b728fafcc7 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx @@ -4,7 +4,7 @@ export const SET_CURSOR = 'SET_CURSOR'; export const setCursor = createAction(SET_CURSOR); export type Action = { - type: "SET_CURSOR", + type: 'SET_CURSOR', payload?: number }; @@ -12,6 +12,13 @@ export type State = number; export type Reducer = (state?: number, action?: Action) => State; +/** + * cursorReducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ export const cursorReducer: Reducer = (state = null, action) => { if (!action) { return state; diff --git a/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx b/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx index 1a362fbc440..65a3174742f 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx @@ -1,16 +1,8 @@ import * as R from 'ramda'; import {createAction} from 'redux-actions'; -import {Channel, ChannelMetadata, Epoch} from '../types'; -import {Action as ChannelAction} from './channel'; -import {channelReducer} from './channel'; +import {ChannelMetadata, Epoch} from '../types'; import {MAX_CHANNELS} from '../../../vector'; -export const SET_CHANNELS = 'SET_CHANNELS'; -export const setChannels = createAction(SET_CHANNELS); - -export const SET_ACTIVE_CHANNEL = 'SET_ACTIVE_CHANNEL'; -export const setActiveChannel = createAction(SET_ACTIVE_CHANNEL); - export const SET_EPOCHS = 'SET_EPOCHS'; export const setEpochs = createAction(SET_EPOCHS); @@ -20,15 +12,17 @@ export const setFilteredEpochs = createAction(SET_FILTERED_EPOCHS); export const SET_ACTIVE_EPOCH = 'SET_ACTIVE_EPOCH'; export const setActiveEpoch = createAction(SET_ACTIVE_EPOCH); +export const SET_PHYSIOFILE_ID = 'SET_PHYSIOFILE_ID'; +export const setPhysioFileID = createAction(SET_PHYSIOFILE_ID); + export const SET_DATASET_METADATA = 'SET_DATASET_METADATA'; export const setDatasetMetadata = createAction(SET_DATASET_METADATA); export type Action = - | {type: 'SET_CHANNELS', payload: Channel[]} - | {type: 'SET_ACTIVE_CHANNEL', payload: number} | {type: 'SET_EPOCHS', payload: Epoch[]} | {type: 'SET_FILTERED_EPOCHS', payload: number[]} | {type: 'SET_ACTIVE_EPOCH', payload: number} + | {type: 'SET_PHYSIOFILE_ID', payload: number} | { type: 'SET_DATASET_METADATA', payload: { @@ -39,33 +33,38 @@ export type Action = seriesRange: [number, number], limit: number } - } - | ChannelAction; + }; + export type State = { chunksURL: string, channelMetadata: ChannelMetadata[], - channels: Channel[], - activeChannel: number | null, offsetIndex: number, limit: number, epochs: Epoch[], filteredEpochs: number[], activeEpoch: number | null, + physioFileID: number | null, shapes: number[][], timeInterval: [number, number], seriesRange: [number, number], }; +/** + * datasetReducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ export const datasetReducer = ( state: State = { chunksURL: '', channelMetadata: [], - channels: [], - activeChannel: null, epochs: [], filteredEpochs: [], activeEpoch: null, + physioFileID: null, offsetIndex: 1, limit: MAX_CHANNELS, shapes: [], @@ -78,12 +77,6 @@ export const datasetReducer = ( return state; } switch (action.type) { - case SET_CHANNELS: { - return R.assoc('channels', action.payload, state); - } - case SET_ACTIVE_CHANNEL: { - return R.assoc('activeChannel', action.payload, state); - } case SET_EPOCHS: { return R.assoc('epochs', action.payload, state); } @@ -93,31 +86,14 @@ export const datasetReducer = ( case SET_ACTIVE_EPOCH: { return R.assoc('activeEpoch', action.payload, state); } + case SET_PHYSIOFILE_ID: { + return R.assoc('physioFileID', action.payload, state); + } case SET_DATASET_METADATA: { return R.merge(state, action.payload); } default: { - const activeIndex = state.channels.findIndex( - (c) => c.index === state.activeChannel - ); - if (activeIndex < 0) { - return state; - } - return R.assocPath( - ['channels', activeIndex], - channelReducer(state.channels[activeIndex], action), - state - ); + return state; } } }; - -export const emptyChannels = (channelsCount: number, tracesCount: number) => { - const makeTrace = () => ({chunks: [], type: 'line'}); - const makeChannel = (index) => ({ - index, - traces: R.range(0, tracesCount).map(makeTrace), - }); - - return R.range(0, channelsCount).map(makeChannel); -}; diff --git a/jsx/react-series-data-viewer/src/series/store/state/filters.tsx b/jsx/react-series-data-viewer/src/series/store/state/filters.tsx index 7fbcbdafc4a..f7830da7529 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/filters.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/filters.tsx @@ -18,6 +18,13 @@ export type Filter = { fn: (n: number[]) => number[] } +/** + * filtersReducer + * + * @param {object} state - The current state + * @param {Action} action - The action + * @returns {object} - The updated state + */ export const filtersReducer = ( state: {[key: string]: Filter} = {}, action?: Action diff --git a/jsx/react-series-data-viewer/src/series/store/state/montage.tsx b/jsx/react-series-data-viewer/src/series/store/state/montage.tsx index 8fa3748050c..13d2f799486 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/montage.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/montage.tsx @@ -19,6 +19,13 @@ export type State = { export type Reducer = (state: State, action?: Action) => State; +/** + * montageReducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ export const montageReducer: Reducer = ( state = {electrodes: [], hidden: []}, action diff --git a/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx b/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx index 8f3ea261c60..d1a75cfbc79 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/rightPanel.tsx @@ -5,12 +5,19 @@ export const SET_RIGHT_PANEL = 'SET_RIGHT_PANEL'; export const setRightPanel = createAction(SET_RIGHT_PANEL); export type Action = { - type: "SET_RIGHT_PANEL", + type: 'SET_RIGHT_PANEL', payload: RightPanel }; export type Reducer = (state: RightPanel, action?: Action) => RightPanel; +/** + * panelReducer + * + * @param {RightPanel} state - The current state + * @param {Action} action - The action + * @returns {RightPanel} - The updated state + */ export const panelReducer: Reducer = (state = null, action) => { if (!action) { return state; diff --git a/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx b/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx index 12958af2580..a027fbeb648 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/timeSelection.tsx @@ -4,14 +4,21 @@ export const SET_TIME_SELECTION = 'SET_TIME_SELECTION'; export const setTimeSelection = createAction(SET_TIME_SELECTION); export type Action = { - type: "SET_TIME_SELECTION", - payload?: [number, number] + type: 'SET_TIME_SELECTION', + payload?: [number, number] | null }; -export type State = [number, number]; +export type State = [number, number] | null | undefined; -export type Reducer = (state?: [number, number], action?: Action) => State; +export type Reducer = (state?: State, action?: Action) => State; +/** + * timeSelectionReducer + * + * @param {State} state - The current state + * @param {Action} action - The action + * @returns {State} - The updated state + */ export const timeSelectionReducer: Reducer = (state = null, action) => { if (!action) { return state; diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx index 073e431804c..2e49c8ad983 100644 --- a/jsx/react-series-data-viewer/src/series/store/types.tsx +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -10,7 +10,7 @@ export type Chunk = { export type Trace = { chunks: Chunk[], - type: "line" + type: 'line' }; export type ChannelMetadata = { @@ -30,13 +30,10 @@ export type Epoch = { label: string, comment?: string, hed?: string, - channels: number[] | "all", - // ##################### EEGNET OVERRIDE START ################## // + channels: number[] | 'all', annotationInstanceID?: number, - // ##################### EEGNET OVERRIDE END ################## // }; -// ##################### EEGNET OVERRIDE START ################## // export type EventMetadata = { instances: any[], } @@ -47,8 +44,11 @@ export type AnnotationMetadata = { metadata: any[] } -export type RightPanel = 'annotationForm' | 'eventList' | 'annotationList' | null; -// ##################### EEGNET OVERRIDE END ################## // +export type RightPanel = + 'annotationForm' + | 'eventList' + | 'annotationList' + | null; export type Electrode = { name: string, diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index f1babb3f695..355c80cd5a9 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -2,8 +2,17 @@ import {vec2, glMatrix} from 'gl-matrix'; export type Vector2 = typeof glMatrix.ARRAY_TYPE; -export const ap = (f: [(_: any) => any, (_: any) => any], p: Vector2): Vector2 => - vec2.fromValues(f[0](p[0]), f[1](p[1])); +/** + * Apply transformation f on point p + * + * @param {Function[]} f - an array of functions + * @param {Vector2} p - a point + * @returns {Vector2} - a vector + */ +export const ap = ( + f: [(_: any) => any, (_: any) => any], + p: Vector2 +): Vector2 => vec2.fromValues(f[0](p[0]), f[1](p[1])); export const MIN_INTERVAL_FACTOR = 0.005; diff --git a/php/annotations.class.inc b/php/annotations.class.inc index d618cef3137..6cb1cf6d97d 100644 --- a/php/annotations.class.inc +++ b/php/annotations.class.inc @@ -83,9 +83,7 @@ class Annotations extends \NDB_Page $request->withAttribute('filename', $filename) ); case 'DELETE': - // ##################### EEGNET OVERRIDE START ################## // $parameters = json_decode((string) $request->getBody(), true); - // ##################### EEGNET OVERRIDE END ################## // if (!$user->hasPermission('electrophysiology_browser_edit_annotations') ) { return (new \LORIS\Http\Response\JSON\Unauthorized()); @@ -99,12 +97,10 @@ class Annotations extends \NDB_Page (new ElectrophysioAnnotations(intval($parameters['physioFileID']))) ->delete(intval($parameters['instance_id'])); - + return (new \LORIS\Http\Response\JSON\OK()); case 'POST': - // ##################### EEGNET OVERRIDE START ################## // $parameters = json_decode((string) $request->getBody(), true); - // ##################### EEGNET OVERRIDE END ################## // if (!$user->hasPermission('electrophysiology_browser_edit_annotations') ) { return (new \LORIS\Http\Response\JSON\Unauthorized()); @@ -115,7 +111,6 @@ class Annotations extends \NDB_Page } $instance_data = $parameters['instance']; - // ##################### EEGNET OVERRIDE START ################## // // $metadata = $parameters['metadata']; // TODO: Figure out a better description modeled on other derivatives $metadata = [ @@ -123,8 +118,8 @@ class Annotations extends \NDB_Page 'sources' => 'EEGNet LORIS', 'author' => $user->getFullname() ]; - - $instance_id = $parameters['instance_id'] ? + + $instance_id = $parameters['instance_id'] ? intval($parameters['instance_id']) : null; // ##################### EEGNET OVERRIDE END ################## // $parameter_id = $parameters['parameter_id'] ?? null; @@ -136,7 +131,7 @@ class Annotations extends \NDB_Page // if new annotation, get instanceID if (is_null($instance_id)) { $instance_id = $db->pselectOne( - "SELECT MAX(AnnotationInstanceID) + "SELECT MAX(AnnotationInstanceID) FROM physiological_annotation_instance ai JOIN physiological_annotation_file af USING (AnnotationFileID) WHERE PhysiologicalFileID=:physioFileID diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 7a397ae9100..18aef275458 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -48,7 +48,11 @@ class ElectrophysioAnnotations $annotationLabels = $db->pselect( 'SELECT * FROM physiological_annotation_label', +<<<<<<< HEAD ['PFID' => $this->_physioFileID] +======= + [] +>>>>>>> loris_eeg_browser ); $this->_data = [ @@ -73,22 +77,34 @@ class ElectrophysioAnnotations * Will add new derivative files if none exist for the given instance. * Will either add new annotations or update existing ones. * +<<<<<<< HEAD * @param array $instance_data Instance data * @param array $metadata Metadata * // ##################### EEGNET OVERRIDE START ################## // * @param int|null $instance_id InstanceID * @param int|null $parameter_id ParameterID * // ##################### EEGNET OVERRIDE END ################## // +======= + * @param array $instance_data Instance data + * @param array $metadata Metadata + * @param int|null $instance_id InstanceID + * @param int|null $parameter_id ParameterID +>>>>>>> loris_eeg_browser * * @return void */ function update( array $instance_data, array $metadata, +<<<<<<< HEAD // ##################### EEGNET OVERRIDE START ################## // ?int $instance_id, ?int $parameter_id // ##################### EEGNET OVERRIDE END ################## // +======= + ?int $instance_id, + ?int $parameter_id +>>>>>>> loris_eeg_browser ): void { $factory = \NDB_Factory::singleton(); @@ -100,6 +116,7 @@ class ElectrophysioAnnotations //If the label is new, add to annotation label table //and get label ID $labelID = $db->pselectOne( +<<<<<<< HEAD // ##################### EEGNET OVERRIDE START ################## // // Adding MAX here as a hack fix for now until LORIS-MRI // bugfix for issue https://github.com/aces/Loris-MRI/issues/763 @@ -108,6 +125,14 @@ class ElectrophysioAnnotations FROM physiological_annotation_label WHERE LabelName=:label", // ##################### EEGNET OVERRIDE END ################## // +======= + // Adding MAX here as a hack fix for now until LORIS-MRI + // bugfix for issue https://github.com/aces/Loris-MRI/issues/763 + // is available and cleanup happens of the annotation_label table + "SELECT MAX(AnnotationLabelID) + FROM physiological_annotation_label + WHERE LabelName=:label", +>>>>>>> loris_eeg_browser ['label' => $instance_data['label_name']] ); if (empty($labelID)) { @@ -139,15 +164,26 @@ class ElectrophysioAnnotations 'Author' => $metadata['author'] ]; +<<<<<<< HEAD // ##################### EEGNET OVERRIDE START ################## // +======= +>>>>>>> loris_eeg_browser $instance = [ 'Onset' => $instance_data['onset'], 'Duration' => $instance_data['duration'], 'AnnotationLabelID' => $labelID, +<<<<<<< HEAD 'Channels' => $instance_data['channels'] === 'all' ? null : $instance_data['channels'], 'Description' => $instance_data['description'] ]; // ##################### EEGNET OVERRIDE END ################## // +======= + 'Channels' => $instance_data['channels'] === 'all' ? + null : + $instance_data['channels'], + 'Description' => $instance_data['description'] + ]; +>>>>>>> loris_eeg_browser //Insert new files and data into DB if (empty($annotationFID)) { @@ -461,7 +497,10 @@ class ElectrophysioAnnotations ['PFID' => $this->_physioFileID] ); +<<<<<<< HEAD // ##################### EEGNET OVERRIDE START ################## // +======= +>>>>>>> loris_eeg_browser // Get output type (raw, derivative) $outputType = $db->pselectOne( 'SELECT OutputTypeName @@ -470,7 +509,10 @@ class ElectrophysioAnnotations WHERE PhysiologicalFileID=:PFID', ['PFID' => $this->_physioFileID] ); +<<<<<<< HEAD // ##################### EEGNET OVERRIDE END ################## // +======= +>>>>>>> loris_eeg_browser //Create new filepaths //Get data directory base path from Config @@ -482,17 +524,28 @@ class ElectrophysioAnnotations ['name' => 'dataDirBasepath'] ); //Create path with correct structure +<<<<<<< HEAD $subPath = strstr($physioFilePath, "sub"); // ##################### EEGNET OVERRIDE START ################## // if ($outputType === 'derivative') { $destinationPath = $dataDir +======= + $subPath = strstr($physioFilePath, "sub"); + + if ($outputType === 'derivative') { + $destinationPath = $dataDir +>>>>>>> loris_eeg_browser . "bids_imports/derivatives/loris_annotations/" . $subPath; } else { $destinationPath = $dataDir . $physioFilePath; } +<<<<<<< HEAD +======= + +>>>>>>> loris_eeg_browser //Create directories if they don't exist $dirname = pathinfo($destinationPath, PATHINFO_DIRNAME); if (!file_exists($dirname)) { @@ -505,7 +558,10 @@ class ElectrophysioAnnotations 0, strrpos($destinationPath, "_") ); +<<<<<<< HEAD // ##################### EEGNET OVERRIDE END ################## // +======= +>>>>>>> loris_eeg_browser $tsv_path = $pathWithoutEDF . "_annotations.tsv"; $json_path = $pathWithoutEDF . "_annotations.json"; diff --git a/php/models/electrophysioevents.class.inc b/php/models/electrophysioevents.class.inc index 6a19aa25535..05282799737 100644 --- a/php/models/electrophysioevents.class.inc +++ b/php/models/electrophysioevents.class.inc @@ -1,6 +1,9 @@ >>>>>> loris_eeg_browser /** * This object contains the methods to get @@ -37,9 +40,15 @@ class ElectrophysioEvents ['PFID' => $this->_physioFileID] ); +<<<<<<< HEAD /** * TODO: Get event params and metadata. * NOT in the scope of current task +======= + /** + * TODO: Get event params and metadata. + * NOT in the scope of current task +>>>>>>> loris_eeg_browser **/ $this->_data = [ @@ -57,8 +66,14 @@ class ElectrophysioEvents return $this->_data; } +<<<<<<< HEAD /** * TODO: Add other features such as add, update, delete * NOT in the scope of current task +======= + /** + * TODO: Add other features such as add, update, delete + * NOT in the scope of current task +>>>>>>> loris_eeg_browser **/ } diff --git a/php/sessions.class.inc b/php/sessions.class.inc index 623708b70cf..bd74f53d2fa 100644 --- a/php/sessions.class.inc +++ b/php/sessions.class.inc @@ -462,14 +462,14 @@ class Sessions extends \NDB_Page $fileSummary['chunks_urls'] = $physioFileObj->getChunksURLs(); // ##################### EEGNET OVERRIDE START ################## // - /*$fileOutput = $db->pselectone( + $fileOutput = $db->pselectone( 'SELECT pot.OutputTypeName FROM physiological_output_type pot INNER JOIN physiological_file AS pf ON pf.PhysiologicalFileID=:PFID AND pf.PhysiologicalOutputTypeID=pot.PhysiologicalOutputTypeID', ['PFID' => $physioFileID] - );*/ + ); // Get the annotation data $annotations = new ElectrophysioAnnotations( @@ -482,15 +482,14 @@ class Sessions extends \NDB_Page intval($physioFileID) ); $fileSummary['events'] = $events->getData(); - + $fileSummary['epochsURL'] = $db->pselectOne( - "SELECT FilePath + "SELECT FilePath FROM physiological_event_file - WHERE PhysiologicalFileID=:physioFileID + WHERE PhysiologicalFileID=:physioFileID AND FileType='tsv'", ['physioFileID' => $physioFileID] ); - error_log(print_r($fileSummary['epochsURL'], true)); // ##################### EEGNET OVERRIDE END ################## // $fileSummary['output_type'] = $fileOutput; $fileSummary['splitData'] = $physioFileObj->getSplitData(0); diff --git a/test/electrophysiologyBrowserTest.php b/test/electrophysiologyBrowserTest.php index c1963585358..571937edaaf 100644 --- a/test/electrophysiologyBrowserTest.php +++ b/test/electrophysiologyBrowserTest.php @@ -120,6 +120,8 @@ function setUp(): void [ 'SessionID' => '999999', 'PhysiologicalOutputTypeID' => 22, + 'InsertedByUser' => 'Unit Tester', + 'FilePath' => '/path/to/test/file', 'FileType' => 'testType' ] ); @@ -128,6 +130,8 @@ function setUp(): void [ 'SessionID' => '999997', 'PhysiologicalOutputTypeID' => 23, + 'InsertedByUser' => 'Unit Tester', + 'FilePath' => '/path/to/test/file2', 'FileType' => 'testType2' ] ); @@ -219,6 +223,14 @@ function testEEGBrowserDoesPageLoad() "Electrophysiology Browser", $bodyText ); + $this->assertStringNotContainsString( + "You do not have access to this page.", + $bodyText + ); + $this->assertStringNotContainsString( + "An error occured while loading the page.", + $bodyText + ); } /** @@ -548,6 +560,7 @@ function testSessionsNavigation() function testSessionsBreadcrumbLink() { $this->safeGet($this->url . "/electrophysiology_browser/sessions/999999"); + $this->safeClick(WebDriverBy::cssSelector(self::$breadcrumbLink)); $bodyText = $this->safeFindElement( From b3cf5ffcafca0bad558d81749293b478df4b526d Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 21 Dec 2022 19:45:22 -0500 Subject: [PATCH 051/126] Resolved some forgotten merge conflicts --- .gitignore | 3 - README.md | 14 ++-- php/models/electrophysioannotations.class.inc | 72 +------------------ php/models/electrophysioevents.class.inc | 19 +---- 4 files changed, 9 insertions(+), 99 deletions(-) diff --git a/.gitignore b/.gitignore index 15d54d6e6fd..9ae4d1334ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ js/* -<<<<<<< HEAD -======= jsx/react-series-data-viewer/src/protocol-buffers/chunk_pb.js ->>>>>>> loris_eeg_browser diff --git a/README.md b/README.md index 3a9802f982e..054b1ed1310 100644 --- a/README.md +++ b/README.md @@ -43,23 +43,17 @@ electrode information, task event information, the actual recording) -- as well New annotations or edits to existing annotations made through the browser must also be updated in the derivative files stored in the filesystem, before a user tries to download a derivative file package. To do this automatically, a script is provided under `tools/update_annotation_files.php`, and a cron job should be set up to execute it regularly, e.g. every evening. -<<<<<<< HEAD -## Installation requirements to use the visualization features -The visualization component requires Protocol Buffers v3.0.0 or higher. +## Installation requirements to use the visualization features +The visualization components require Protocol Buffers v3.0.0 or higher. For install instructions, you can refer to the Protocol Buffers GitHub page: https://github.com/protocolbuffers/protobuf -In order to automatically generate the protoc compiled files, add the following block in `modules/electrophysiology_browser/jsx/react-series-data-viewer/package.json`: +In order to automatically generate the protoc compiled files, add the following block in `modules/electrophysiology_browser/jsx/react-series-data-viewer/package.json`: ``` "scripts": { "postinstall": "protoc protocol-buffers/chunk.proto --js_out=import_style=commonjs,binary:./src/" } ``` and run `make dev` or 'npm install && npm run compile' from the loris root directory. -======= -## Installation requirements to use the visualization features -The visualization components require Protocol Buffers v3.0.0 or higher. -For install instructions, you can refer to the Protocol Buffers GitHub page: https://github.com/protocolbuffers/protobuf -To enable the visualization components, set the useEEGBrowserVisualizationComponents config (Configuration/GUI) to true and run `make dev` or 'npm install && npm run compile' from the loris root directory. ->>>>>>> loris_eeg_browser +[//]: # (To enable the visualization components, set the useEEGBrowserVisualizationComponents config (Configuration/GUI) to true and run `make dev` or 'npm install && npm run compile' from the loris root directory.) diff --git a/php/models/electrophysioannotations.class.inc b/php/models/electrophysioannotations.class.inc index 18aef275458..30e53cb33bf 100644 --- a/php/models/electrophysioannotations.class.inc +++ b/php/models/electrophysioannotations.class.inc @@ -29,10 +29,10 @@ class ElectrophysioAnnotations $db = \NDB_Factory::singleton()->database(); $annotationInstance = $db->pselect( - 'SELECT i.* + 'SELECT i.* FROM physiological_annotation_instance AS i JOIN physiological_annotation_file AS f - ON f.AnnotationFileID = i.AnnotationFileID + ON f.AnnotationFileID = i.AnnotationFileID WHERE f.PhysiologicalFileID=:PFID AND f.FileType="tsv"', ['PFID' => $this->_physioFileID] ); @@ -48,11 +48,7 @@ class ElectrophysioAnnotations $annotationLabels = $db->pselect( 'SELECT * FROM physiological_annotation_label', -<<<<<<< HEAD - ['PFID' => $this->_physioFileID] -======= [] ->>>>>>> loris_eeg_browser ); $this->_data = [ @@ -77,34 +73,18 @@ class ElectrophysioAnnotations * Will add new derivative files if none exist for the given instance. * Will either add new annotations or update existing ones. * -<<<<<<< HEAD - * @param array $instance_data Instance data - * @param array $metadata Metadata - * // ##################### EEGNET OVERRIDE START ################## // - * @param int|null $instance_id InstanceID - * @param int|null $parameter_id ParameterID - * // ##################### EEGNET OVERRIDE END ################## // -======= * @param array $instance_data Instance data * @param array $metadata Metadata * @param int|null $instance_id InstanceID * @param int|null $parameter_id ParameterID ->>>>>>> loris_eeg_browser * * @return void */ function update( array $instance_data, array $metadata, -<<<<<<< HEAD - // ##################### EEGNET OVERRIDE START ################## // - ?int $instance_id, - ?int $parameter_id - // ##################### EEGNET OVERRIDE END ################## // -======= ?int $instance_id, ?int $parameter_id ->>>>>>> loris_eeg_browser ): void { $factory = \NDB_Factory::singleton(); @@ -116,23 +96,12 @@ class ElectrophysioAnnotations //If the label is new, add to annotation label table //and get label ID $labelID = $db->pselectOne( -<<<<<<< HEAD - // ##################### EEGNET OVERRIDE START ################## // - // Adding MAX here as a hack fix for now until LORIS-MRI - // bugfix for issue https://github.com/aces/Loris-MRI/issues/763 - // is available and cleanup happens of the annotation_label table - "SELECT MAX(AnnotationLabelID) - FROM physiological_annotation_label - WHERE LabelName=:label", - // ##################### EEGNET OVERRIDE END ################## // -======= // Adding MAX here as a hack fix for now until LORIS-MRI // bugfix for issue https://github.com/aces/Loris-MRI/issues/763 // is available and cleanup happens of the annotation_label table "SELECT MAX(AnnotationLabelID) FROM physiological_annotation_label WHERE LabelName=:label", ->>>>>>> loris_eeg_browser ['label' => $instance_data['label_name']] ); if (empty($labelID)) { @@ -164,26 +133,15 @@ class ElectrophysioAnnotations 'Author' => $metadata['author'] ]; -<<<<<<< HEAD - // ##################### EEGNET OVERRIDE START ################## // -======= ->>>>>>> loris_eeg_browser $instance = [ 'Onset' => $instance_data['onset'], 'Duration' => $instance_data['duration'], 'AnnotationLabelID' => $labelID, -<<<<<<< HEAD - 'Channels' => $instance_data['channels'] === 'all' ? null : $instance_data['channels'], - 'Description' => $instance_data['description'] - ]; - // ##################### EEGNET OVERRIDE END ################## // -======= 'Channels' => $instance_data['channels'] === 'all' ? null : $instance_data['channels'], 'Description' => $instance_data['description'] ]; ->>>>>>> loris_eeg_browser //Insert new files and data into DB if (empty($annotationFID)) { @@ -393,7 +351,7 @@ class ElectrophysioAnnotations p.AbsoluteTime AS AbsoluteTime, p.Description AS Description FROM physiological_annotation_instance p - LEFT JOIN physiological_annotation_label l + LEFT JOIN physiological_annotation_label l ON (l.AnnotationLabelID=p.AnnotationLabelID) WHERE p.AnnotationFileID=:AFID", ['AFID' => $tsv[0]['id']] @@ -497,10 +455,6 @@ class ElectrophysioAnnotations ['PFID' => $this->_physioFileID] ); -<<<<<<< HEAD - // ##################### EEGNET OVERRIDE START ################## // -======= ->>>>>>> loris_eeg_browser // Get output type (raw, derivative) $outputType = $db->pselectOne( 'SELECT OutputTypeName @@ -509,10 +463,6 @@ class ElectrophysioAnnotations WHERE PhysiologicalFileID=:PFID', ['PFID' => $this->_physioFileID] ); -<<<<<<< HEAD - // ##################### EEGNET OVERRIDE END ################## // -======= ->>>>>>> loris_eeg_browser //Create new filepaths //Get data directory base path from Config @@ -524,28 +474,16 @@ class ElectrophysioAnnotations ['name' => 'dataDirBasepath'] ); //Create path with correct structure -<<<<<<< HEAD - $subPath = strstr($physioFilePath, "sub"); - - // ##################### EEGNET OVERRIDE START ################## // - if ($outputType === 'derivative') { - $destinationPath = $dataDir -======= $subPath = strstr($physioFilePath, "sub"); if ($outputType === 'derivative') { $destinationPath = $dataDir ->>>>>>> loris_eeg_browser . "bids_imports/derivatives/loris_annotations/" . $subPath; } else { $destinationPath = $dataDir . $physioFilePath; } -<<<<<<< HEAD - -======= ->>>>>>> loris_eeg_browser //Create directories if they don't exist $dirname = pathinfo($destinationPath, PATHINFO_DIRNAME); if (!file_exists($dirname)) { @@ -558,10 +496,6 @@ class ElectrophysioAnnotations 0, strrpos($destinationPath, "_") ); -<<<<<<< HEAD - // ##################### EEGNET OVERRIDE END ################## // -======= ->>>>>>> loris_eeg_browser $tsv_path = $pathWithoutEDF . "_annotations.tsv"; $json_path = $pathWithoutEDF . "_annotations.json"; diff --git a/php/models/electrophysioevents.class.inc b/php/models/electrophysioevents.class.inc index 05282799737..368e68b28ae 100644 --- a/php/models/electrophysioevents.class.inc +++ b/php/models/electrophysioevents.class.inc @@ -1,9 +1,6 @@ >>>>>> loris_eeg_browser /** * This object contains the methods to get @@ -32,23 +29,17 @@ class ElectrophysioEvents $db = \NDB_Factory::singleton()->database(); $taskEvents = $db->pselect( - 'SELECT te.* + 'SELECT te.* FROM physiological_task_event AS te JOIN physiological_event_file AS f - ON f.EventFileID = te.EventFileID + ON f.EventFileID = te.EventFileID WHERE f.PhysiologicalFileID=:PFID AND f.FileType="tsv"', ['PFID' => $this->_physioFileID] ); -<<<<<<< HEAD - /** - * TODO: Get event params and metadata. - * NOT in the scope of current task -======= /** * TODO: Get event params and metadata. * NOT in the scope of current task ->>>>>>> loris_eeg_browser **/ $this->_data = [ @@ -66,14 +57,8 @@ class ElectrophysioEvents return $this->_data; } -<<<<<<< HEAD - /** - * TODO: Add other features such as add, update, delete - * NOT in the scope of current task -======= /** * TODO: Add other features such as add, update, delete * NOT in the scope of current task ->>>>>>> loris_eeg_browser **/ } From 4555acb8fcd66d8505a77dfc5fb106c50002d2cb Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 21 Dec 2022 20:21:59 -0500 Subject: [PATCH 052/126] Resolved some forgotten merge conflicts --- .../src/series/components/EEGMontage.tsx | 5 +---- jsx/react-series-data-viewer/src/series/components/Form.js | 1 - .../src/series/components/SeriesRenderer.tsx | 4 ++++ jsx/react-series-data-viewer/src/series/store/index.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx index 1ba8a9ef388..f2431100eca 100644 --- a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx @@ -81,10 +81,7 @@ const EEGMontage = ( const angleZ = (beta + startAngle); setAngleZ(angleZ); }; - - const dragEnd = (v: any) => { - setDrag( false); - setMouseX( v[0] - mx + mouseX); + /** * * @param v diff --git a/jsx/react-series-data-viewer/src/series/components/Form.js b/jsx/react-series-data-viewer/src/series/components/Form.js index 7e07d58db20..3d0176fc72d 100644 --- a/jsx/react-series-data-viewer/src/series/components/Form.js +++ b/jsx/react-series-data-viewer/src/series/components/Form.js @@ -1,5 +1,4 @@ import React, {useEffect} from 'react'; -import React from 'react'; import PropTypes from 'prop-types'; export const SelectElement = (props) => { diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index ed5f635027b..8dd6e96f882 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -63,6 +63,7 @@ type CProps = { viewerWidth: number, viewerHeight: number, interval: [number, number], + domain: number, amplitudeScale: number, rightPanel: RightPanel, timeSelection?: [number, number], @@ -99,6 +100,8 @@ type CProps = { * @param root0.viewerHeight * @param root0.viewerWidth * @param root0.interval + * @param root0.setInterval + * @param root0.domain * @param root0.amplitudeScale * @param root0.cursor * @param root0.rightPanel @@ -119,6 +122,7 @@ type CProps = { * @param root0.setHighPassFilter * @param root0.setViewerWidth * @param root0.setViewerHeight + * @param root0.setFilteredEpochs * @param root0.dragStart * @param root0.dragContinue * @param root0.dragEnd diff --git a/jsx/react-series-data-viewer/src/series/store/index.tsx b/jsx/react-series-data-viewer/src/series/store/index.tsx index 9d33e73640a..42c09299b29 100644 --- a/jsx/react-series-data-viewer/src/series/store/index.tsx +++ b/jsx/react-series-data-viewer/src/series/store/index.tsx @@ -41,7 +41,7 @@ export const rootReducer = combineReducers({ }); export const rootEpic = combineEpics( - createDragBoundsEpic(), + createDragBoundsEpic(R.prop('bounds')), createTimeSelectionEpic(({bounds, timeSelection}) => { const {interval} = bounds; return {interval, timeSelection}; From 43a4afe22a97f6957941495f4d887cec3f40d7da Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 21 Dec 2022 21:23:48 -0500 Subject: [PATCH 053/126] Re-enabled keyboard events --- .../src/series/components/SeriesCursor.tsx | 1 + .../src/series/components/SeriesRenderer.tsx | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 7bb1f29cd9b..4b910172351 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -61,6 +61,7 @@ const SeriesCursor = ( */ const Cursor = () => (
    = ({ if (channels.length === 0) return null; // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [/*cursor*/, offsetIndex, interval]); + const memoizedCallback = useCallback(() => {}, [offsetIndex, interval]); useEffect(() => { // Keypress handler const keybindHandler = (e) => { - /*if (cursor) { // Cursor not null implies on page / focus + if (document.querySelector('#cursor-div')) { // Cursor not null implies on page / focus if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { switch(e.code){ case "ArrowUp": @@ -201,7 +200,7 @@ const SeriesRenderer: FunctionComponent = ({ e.preventDefault(); // Make sure arrows don't scroll } - } */ + } // Generic keybinds that don't require focus if (e.code === 'KeyC' && e.shiftKey) { // Close all right panels From 34d987bd19c023b4ba9040271cc352ba5becd34c Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 22 Dec 2022 12:03:28 -0500 Subject: [PATCH 054/126] Interval jump behaviour made uniform --- .../src/series/components/IntervalSelect.tsx | 40 +++++++++---------- .../src/series/components/SeriesRenderer.tsx | 22 +++++----- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 63e6efdd440..5bf1d41e8a2 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -61,6 +61,22 @@ const IntervalSelect: FunctionComponent = ({ cursor: 'pointer', }; + const increaseIntervalBy = (increment: number) => { + const intervalSize = interval[1] - interval[0]; + setInterval([ + Math.min(Math.ceil(domain[1]) - intervalSize, interval[0] + increment), + Math.min(Math.ceil(domain[1]), interval[1] + increment) + ]); + } + + const decreaseIntervalBy = (decrement: number) => { + const intervalSize = interval[1] - interval[0]; + setInterval([ + Math.max(Math.floor(domain[0]), interval[0] - decrement), + Math.max(Math.floor(domain[0]) + intervalSize, interval[1] - decrement) + ]); + } + return (
    = ({ type='button' className='btn btn-primary btn-xs' onClick={() => { - if (interval[0] !== domain[0]) { - setInterval([interval[0] - 50, interval[1] - 50]); - } else { - setInterval([interval[0], interval[1] - 50]); - } + decreaseIntervalBy(interval[1] - interval[0]); }} value='<<' /> @@ -108,11 +120,7 @@ const IntervalSelect: FunctionComponent = ({ type='button' className='btn btn-primary btn-xs' onClick={() => { - if (interval[0] !== domain[0]) { - setInterval([interval[0] - 1, interval[1] - 1]); - } else { - setInterval([interval[0], interval[1] - 1]); - } + decreaseIntervalBy(1); }} value='<' /> @@ -120,11 +128,7 @@ const IntervalSelect: FunctionComponent = ({ type='button' className='btn btn-primary btn-xs' onClick={() => { - if (interval[1] !== domain[1]) { - setInterval([interval[0] + 1, interval[1] + 1]); - } else { - setInterval([interval[0] + 1, interval[1]]); - } + increaseIntervalBy(1); }} value='>' /> @@ -132,11 +136,7 @@ const IntervalSelect: FunctionComponent = ({ type='button' className='btn btn-primary btn-xs' onClick={() => { - if (interval[1] !== domain[1]) { - setInterval([interval[0] + 50, interval[1] + 50]); - } else { - setInterval([interval[0] + 50, interval[1]]); - } + increaseIntervalBy(interval[1] - interval[0]); }} value='>>' /> diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index cd895ca2153..85f865f6281 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -172,7 +172,9 @@ const SeriesRenderer: FunctionComponent = ({ const keybindHandler = (e) => { if (document.querySelector('#cursor-div')) { // Cursor not null implies on page / focus if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { - switch(e.code){ + const intervalSize = interval[1] - interval[0]; + + switch(e.code) { case "ArrowUp": setOffsetIndex(offsetIndex - limit); break; @@ -180,18 +182,16 @@ const SeriesRenderer: FunctionComponent = ({ setOffsetIndex(offsetIndex + limit); break; case "ArrowRight": - if (interval[1] !== domain[1]) { // Bounds check - setInterval([interval[0] + 50, interval[1] + 50]); - } else { - setInterval([interval[0] + 50, interval[1]]); - } + setInterval([ + Math.min(Math.ceil(domain[1]) - intervalSize, interval[0] + intervalSize), + Math.min(Math.ceil(domain[1]), interval[1] + intervalSize) + ]); break; case "ArrowLeft": - if (interval[0] !== domain[0]) { // Bounds check - setInterval([interval[0] - 50, interval[1] - 50]); - } else { - setInterval([interval[0], interval[1] - 50]); - } + setInterval([ + Math.max(Math.floor(domain[0]), interval[0] - intervalSize), + Math.max(Math.floor(domain[0]) + intervalSize, interval[1] - intervalSize) + ]); break; default: console.log('Keyboard event handler error.'); From 539f8979cf66e1fd050a406fa5a6b8c49201adf2 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 22 Dec 2022 12:18:51 -0500 Subject: [PATCH 055/126] Reduced slider handle size --- .../src/series/components/IntervalSelect.tsx | 2 +- .../src/series/components/components.tsx | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 5bf1d41e8a2..2658408c409 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -210,7 +210,7 @@ const IntervalSelect: FunctionComponent = ({ {/* @ts-ignore */} - + {({ticks}) => (
    = ({ style={{ left: `${percent}%`, position: 'absolute', - marginLeft: '-9px', - marginTop: '-9px', + marginLeft: '-5px', + marginTop: '-5px', zIndex: 2, - width: 18, - height: 18, + width: 10, + height: 10, cursor: 'pointer', boxShadow: '1px 1px 1px 1px rgba(0, 0, 0, 0.2)', - border: '3px solid #064785', + border: '2px solid #064785', background: '#fff', borderRadius: '50%', }} From f38b8c9fba6040f196d278157bd6b438189fab0d Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 22 Dec 2022 19:37:57 -0500 Subject: [PATCH 056/126] Added fields to control the time interval --- css/electrophysiology_browser.css | 7 ++ .../src/series/components/IntervalSelect.tsx | 90 ++++++++++++++++++- 2 files changed, 93 insertions(+), 4 deletions(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index 724043443fe..680ef6110cf 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -98,6 +98,13 @@ svg { border: 1px solid #333; } +.input-interval-bound { + width: 60px; + height: 22px; + font-size: 10px; + float: left; +} + #electrode-montage .list-group { border: 1px solid #ddd; } diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 2658408c409..b23e23d0da3 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -61,22 +61,82 @@ const IntervalSelect: FunctionComponent = ({ cursor: 'pointer', }; + /** + * + * @param increment + */ const increaseIntervalBy = (increment: number) => { const intervalSize = interval[1] - interval[0]; setInterval([ - Math.min(Math.ceil(domain[1]) - intervalSize, interval[0] + increment), - Math.min(Math.ceil(domain[1]), interval[1] + increment) + Math.min(domain[1] - intervalSize, interval[0] + increment), + Math.min(domain[1], interval[1] + increment) ]); } + /** + * + * @param decrement + */ const decreaseIntervalBy = (decrement: number) => { const intervalSize = interval[1] - interval[0]; setInterval([ - Math.max(Math.floor(domain[0]), interval[0] - decrement), - Math.max(Math.floor(domain[0]) + intervalSize, interval[1] - decrement) + Math.max(domain[0], interval[0] - decrement), + Math.max(domain[0] + intervalSize, interval[1] - decrement) ]); } + /** + * + * @param value + */ + const round = (value: number) => { + return Math.round(value * 100 + Number.EPSILON) / 100 + } + + /** + * + * @param event + */ + const handleIntervalChange = (event) => { + let value = parseInt(event.target.value); + const name = event.target.name; + + if (isNaN(value)){ + if (event.target.value === '') { + if (name.endsWith('lower-bound')) { + setInterval([0, interval[1]]); + } else if (name.endsWith('upper-bound')) { + setInterval([interval[0], 0]); + } + } + return; + } + + if (name.endsWith('lower-bound')) { + // Prevent exceeding max, which causes render + setInterval([Math.min(value, domain[1]), interval[1]]); + } else if (name.endsWith('upper-bound')) { + setInterval([interval[0], value]); + } + }; + + /** + * + * @param event + */ + const handleIntervalBlur = (event) => { + const value = parseInt(event.target.value); + + if (isNaN(value)){ + setInterval(interval); // Reset + return; + } + + if (interval[0] > interval[1] || interval[1] < interval[0]) { + setInterval([interval[1], interval[0]]); // Invert + } + }; + return (
    = ({ }} value='<' /> + e.target.select()} + /> + e.target.select()} + /> Date: Fri, 23 Dec 2022 23:11:33 -0500 Subject: [PATCH 057/126] Added toggle functionality for amplitude data visibility --- .../src/series/components/SeriesCursor.tsx | 8 ++++++-- .../src/series/components/SeriesRenderer.tsx | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 4b910172351..5da2c4d78c5 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -21,7 +21,8 @@ type CProps = { filteredEpochs: number[], CursorContent: (_: CursorContentProps) => JSX.Element, interval: [number, number], - showMarker: boolean + showMarker: boolean, + enabled: boolean, }; /** @@ -34,6 +35,7 @@ type CProps = { * @param root0.CursorContent * @param root0.interval * @param root0.showMarker + * @param root0.enabled */ const SeriesCursor = ( { @@ -44,6 +46,7 @@ const SeriesCursor = ( CursorContent, interval, showMarker, + enabled, }: CProps ) => { if (!cursor) return null; @@ -164,7 +167,7 @@ const SeriesCursor = ( }} > - + {enabled ? : null}
    @@ -261,6 +264,7 @@ SeriesCursor.defaultProps = { filteredEpochs: [], CursorContent, showMarker: false, + enabled: false }; export default connect( diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index cd895ca2153..5c9851cd2a6 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -209,6 +209,9 @@ const SeriesRenderer: FunctionComponent = ({ if (e.code === 'KeyA' && e.shiftKey) { // Open annotation form setRightPanel('annotationForm'); } + if (e.code === 'KeyV' && e.shiftKey) { // Open annotation form + toggleCursor(); + } } window.addEventListener('keydown', keybindHandler); @@ -227,6 +230,8 @@ const SeriesRenderer: FunctionComponent = ({ } }, [viewerWidth]); + const [cursorEnabled, setCursorEnabled] = useState(false); + const toggleCursor = () => setCursorEnabled(value => !value); const [highPass, setHighPass] = useState('none'); const [lowPass, setLowPass] = useState('none'); const [refNode, setRefNode] = useState(null); @@ -696,6 +701,7 @@ const SeriesRenderer: FunctionComponent = ({
    Date: Thu, 5 Jan 2023 14:10:21 -0500 Subject: [PATCH 058/126] Added channel hover for value and visibility + Added ability to toggle cursor values --- jsx/electrophysiologySessionView.js | 1 + .../src/color/index.tsx | 12 +- .../src/series/components/LineChunk.tsx | 15 ++- .../series/components/ResponsiveViewer.tsx | 5 +- .../src/series/components/SeriesCursor.tsx | 120 +++++++++++++----- .../src/series/components/SeriesRenderer.tsx | 34 ++++- .../src/series/store/index.tsx | 7 +- .../series/store/logic/cursorInteraction.tsx | 75 +++++++++++ .../src/series/store/state/cursor.tsx | 29 +++-- .../src/series/store/types.tsx | 7 + 10 files changed, 246 insertions(+), 59 deletions(-) create mode 100644 jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx diff --git a/jsx/electrophysiologySessionView.js b/jsx/electrophysiologySessionView.js index d5a23feccf7..5cf77fd0e56 100644 --- a/jsx/electrophysiologySessionView.js +++ b/jsx/electrophysiologySessionView.js @@ -369,6 +369,7 @@ class ElectrophysiologySessionView extends Component { annotations={annotations} // ##################### EEGNET OVERRIDE END ################## // electrodesURL={electrodesURL} + physioFileID={this.state.database[i].file.id} > + ({interval, amplitudeScale, filters, channelIndex, traceIndex, chunkIndex, color}) => `${interval.join(',')},${amplitudeScale},${filters.join('-')},` - + `${channelIndex}-${traceIndex}-${chunkIndex}`, + + `${channelIndex}-${traceIndex}-${chunkIndex}-${color}`, ({ channelIndex, traceIndex, @@ -22,6 +22,7 @@ const LineMemo = R.memoizeWith( color, ...rest }) => { + const scales = [ scaleLinear() .domain(interval) @@ -42,6 +43,7 @@ const LineMemo = R.memoizeWith( return ( , ], physioFileID: number, - color?: string + color?: string, + isHovered: boolean }; /** @@ -78,6 +81,7 @@ type CProps = { * @param root0.amplitudeScale * @param root0.scales * @param root0.physioFileID + * @param root0.isHovered */ const LineChunk = ({ channelIndex, @@ -89,6 +93,7 @@ const LineChunk = ({ scales, color, physioFileID, + isHovered, ...rest }: CProps) => { const {interval, values} = chunk; @@ -106,11 +111,11 @@ const LineChunk = ({ (range[0] + range[1]) / 2 ); - const lineColor = colorOrder(channelIndex.toString()) || '#999'; + const lineColor = isHovered ? colorOrder(channelIndex.toString()) : '#999'; return ( , parentWidth?: number, parentHeight?: number, mouseDown?: (_: any) => void, @@ -16,6 +17,7 @@ type CProps = { /** * * @param root0 + * @param root0.ref * @param root0.parentWidth * @param root0.parentHeight * @param root0.mouseDown @@ -25,6 +27,7 @@ type CProps = { * @param root0.children */ const ResponsiveViewer : FunctionComponent = ({ + ref, parentWidth, parentHeight, mouseDown, diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 5da2c4d78c5..a190e0d8fca 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -1,21 +1,25 @@ import * as R from 'ramda'; import {bisector} from 'd3-array'; import {colorOrder} from '../../color'; -import {Channel, Epoch} from '../store/types'; +import {Channel, ChannelMetadata, Epoch} from '../store/types'; import {connect} from 'react-redux'; import {MAX_RENDERED_EPOCHS, SIGNAL_SCALE, SIGNAL_UNIT} from '../../vector'; -import {useEffect} from 'react'; +import {MutableRefObject, useEffect} from 'react'; import {RootState} from '../store'; + type CursorContentProps = { time: number, channel: Channel, contentIndex: number, showMarker: boolean, + hoveredChannels: number[], + channelMetadata: ChannelMetadata[], }; type CProps = { - cursor: number, + cursorRef: MutableRefObject, + cursorPosition: [number, number], channels: Channel[], epochs: Epoch[], filteredEpochs: number[], @@ -23,12 +27,15 @@ type CProps = { interval: [number, number], showMarker: boolean, enabled: boolean, + hoveredChannels: number[], + channelMetadata: ChannelMetadata[], }; /** * * @param root0 - * @param root0.cursor + * @param root0.cursorRef + * @param root0.cursorPosition * @param root0.channels * @param root0.epochs * @param root0.filteredEpochs @@ -36,10 +43,13 @@ type CProps = { * @param root0.interval * @param root0.showMarker * @param root0.enabled + * @param root0.hoveredChannels + * @param root0.channelMetadata */ const SeriesCursor = ( { - cursor, + cursorRef, + cursorPosition, channels, epochs, filteredEpochs, @@ -47,24 +57,26 @@ const SeriesCursor = ( interval, showMarker, enabled, + hoveredChannels, + channelMetadata }: CProps ) => { - if (!cursor) return null; + if (!cursorPosition) return null; let reversedEpochs = [...filteredEpochs].reverse(); useEffect(() => { reversedEpochs = [...filteredEpochs].reverse(); }, [filteredEpochs]); - const left = Math.min(Math.max(100 * cursor, 0), 100) + '%'; - const time = interval[0] + cursor * (interval[1] - interval[0]); + const left = Math.min(Math.max(100 * cursorPosition[0], 0), 100) + '%'; + const time = interval[0] + cursorPosition[0] * (interval[1] - interval[0]); /** * */ const Cursor = () => (
    ))} @@ -117,14 +131,44 @@ const SeriesCursor = ( top: '100%', position: 'absolute', display: 'flex', - flexDirection: 'row', + flexDirection: 'column', backgroundColor: '#fff', color: '#064785', padding: '2px 2px', borderRadius: '3px', }} > - {Math.round(time * 1000) / 1000} s + {Math.round(time * 1000) / 1000}s +
    + {hoveredChannels.map((channelIndex) => { + const channelName = channelMetadata[channelIndex].name; + const hoveredChannel = channels.find( + (channel) => channel.index === channelIndex + ); + if (!hoveredChannel) return; + const hoveredChunk = hoveredChannel.traces[0].chunks.find( + (chunk) => chunk.interval[0] <= time && chunk.interval[1] >= time + ); + if (!hoveredChunk) return; + const chunkValue = computeValue(hoveredChunk, time); + const channelColor = colorOrder(channelIndex.toString()).toString(); + return ( +
    + {channelName}: {Math.round(chunkValue)} {SIGNAL_UNIT} +
    + ); + })} +
    ); @@ -187,6 +231,21 @@ const indexToTime = (chunk) => (index) => chunk.interval[0] + (index / chunk.values.length) * (chunk.interval[1] - chunk.interval[0]); + +/** + * + * @param chunk + * @param time + */ +const computeValue = (chunk, time) => { + const indices = createIndices(chunk.values); + const bisectTime = bisector(indexToTime(chunk)).left; + const idx = bisectTime(indices, time); + const value = chunk.values[idx-1]; + + return value * SIGNAL_SCALE; +}; + /** * * @param root0 @@ -196,7 +255,14 @@ const indexToTime = (chunk) => (index) => * @param root0.showMarker */ const CursorContent = ( - {time, channel, contentIndex, showMarker}: CursorContentProps + { + time, + channel, + contentIndex, + showMarker, + hoveredChannels, + channelMetadata + }: CursorContentProps ) => { /** * @@ -215,34 +281,25 @@ const CursorContent = ( ); return ( -
    +
    {channel.traces.map((trace, i) => { const chunk = trace.chunks.find( (chunk) => chunk.interval[0] <= time && chunk.interval[1] >= time ); - /** - * - * @param chunk - */ - const computeValue = (chunk) => { - const indices = createIndices(chunk.values); - const bisectTime = bisector(indexToTime(chunk)).left; - const idx = bisectTime(indices, time); - const value = chunk.values[idx-1]; - - return value * SIGNAL_SCALE; - }; - return (
    {showMarker && ( @@ -250,7 +307,8 @@ const CursorContent = ( color={colorOrder(contentIndex.toString())} /> )} - {chunk && Math.round(computeValue(chunk))} {SIGNAL_UNIT} + {channelMetadata[channel.index].name}:  + {chunk && Math.round(computeValue(chunk, time))} {SIGNAL_UNIT}
    ); })} @@ -264,12 +322,12 @@ SeriesCursor.defaultProps = { filteredEpochs: [], CursorContent, showMarker: false, - enabled: false + enabled: false, }; export default connect( (state: RootState)=> ({ - cursor: state.cursor, + cursorPosition: state.cursor.cursorPosition, epochs: state.dataset.epochs, filteredEpochs: state.dataset.filteredEpochs, }) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 5c9851cd2a6..929d330f8be 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -2,13 +2,16 @@ import React, { useCallback, useEffect, useState, + useRef, FunctionComponent, + MutableRefObject, } from 'react'; import * as R from 'ramda'; import {vec2} from 'gl-matrix'; import {Group} from '@visx/group'; import {connect} from 'react-redux'; import {scaleLinear, ScaleLinear} from 'd3-scale'; +import {colorOrder} from "../../color"; import { MAX_RENDERED_EPOCHS, MAX_CHANNELS, @@ -20,7 +23,6 @@ import Axis from './Axis'; import LineChunk from './LineChunk'; import Epoch from './Epoch'; import SeriesCursor from './SeriesCursor'; -import {setCursor} from '../store/state/cursor'; import {setRightPanel} from '../store/state/rightPanel'; import {setFilteredEpochs} from '../store/state/dataset'; import {setOffsetIndex} from '../store/logic/pagination'; @@ -58,8 +60,10 @@ import { AnnotationMetadata, } from '../store/types'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; +import {setCursorInteraction} from "../store/logic/cursorInteraction"; type CProps = { + ref: MutableRefObject, viewerWidth: number, viewerHeight: number, interval: [number, number], @@ -92,6 +96,7 @@ type CProps = { setCurrentAnnotation: (_: EpochType) => void, physioFileID: number, annotationMetadata: AnnotationMetadata, + hoveredChannels: number[] }; /** @@ -129,6 +134,7 @@ type CProps = { * @param root0.setCurrentAnnotation * @param root0.physioFileID * @param root0.annotationMetadata + * @param root0.hoveredChannels */ const SeriesRenderer: FunctionComponent = ({ viewerHeight, @@ -163,14 +169,18 @@ const SeriesRenderer: FunctionComponent = ({ setCurrentAnnotation, physioFileID, annotationMetadata, + hoveredChannels }) => { if (channels.length === 0) return null; - // Memoized to singal which vars are to be read from + const viewerRef = useRef(null); + const cursorRef = useRef(null); + + // Memoized to signal which vars are to be read from const memoizedCallback = useCallback(() => {}, [offsetIndex, interval]); useEffect(() => { // Keypress handler const keybindHandler = (e) => { - if (document.querySelector('#cursor-div')) { // Cursor not null implies on page / focus + if (cursorRef.current) { // Cursor is on page / focus if(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { switch(e.code){ case "ArrowUp": @@ -209,7 +219,7 @@ const SeriesRenderer: FunctionComponent = ({ if (e.code === 'KeyA' && e.shiftKey) { // Open annotation form setRightPanel('annotationForm'); } - if (e.code === 'KeyV' && e.shiftKey) { // Open annotation form + if (e.code === 'KeyV' && e.shiftKey) { // Toggle SeriesCursor ValueTags toggleCursor(); } } @@ -455,6 +465,7 @@ const SeriesRenderer: FunctionComponent = ({ amplitudeScale={amplitudeScale} scales={scales} physioFileID={physioFileID} + isHovered={hoveredChannels.includes(channel.index)} /> )) )) @@ -667,6 +678,7 @@ const SeriesRenderer: FunctionComponent = ({ display: 'flex', height: 1 / MAX_CHANNELS * 100 + '%', alignItems: 'center', + color: `${hoveredChannels.includes(channel.index) ? colorOrder(channel.index.toString()) : '#333'}` }} > {channelMetadata[channel.index] && @@ -699,14 +711,23 @@ const SeriesRenderer: FunctionComponent = ({ Time (s)
    { + setCursor({ + cursorPosition: [cursor[0], cursor[1]], + viewerRef: viewerRef + }); + }, [])} mouseDown={useCallback((v: Vector2) => { document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); @@ -884,6 +905,7 @@ export default connect( offsetIndex: state.dataset.offsetIndex, domain: state.bounds.domain, physioFileID: state.dataset.physioFileID, + hoveredChannels: state.cursor.hoveredChannels }), (dispatch: (_: any) => void) => ({ setOffsetIndex: R.compose( @@ -896,7 +918,7 @@ export default connect( ), setCursor: R.compose( dispatch, - setCursor + setCursorInteraction ), setRightPanel: R.compose( dispatch, diff --git a/jsx/react-series-data-viewer/src/series/store/index.tsx b/jsx/react-series-data-viewer/src/series/store/index.tsx index 42c09299b29..38aa248fd68 100644 --- a/jsx/react-series-data-viewer/src/series/store/index.tsx +++ b/jsx/react-series-data-viewer/src/series/store/index.tsx @@ -9,6 +9,7 @@ import {cursorReducer} from './state/cursor'; import {panelReducer} from './state/rightPanel'; import {timeSelectionReducer} from './state/timeSelection'; import {montageReducer} from './state/montage'; +import {channelsReducer} from './state/channels'; import {createDragBoundsEpic} from './logic/dragBounds'; import {createTimeSelectionEpic} from './logic/timeSelection'; import {createFetchChunksEpic} from './logic/fetchChunks'; @@ -26,7 +27,7 @@ import { createLowPassFilterEpic, createHighPassFilterEpic, } from './logic/highLowPass'; -import {channelsReducer} from './state/channels'; +import {createCursorInteractionEpic} from "./logic/cursorInteraction"; export const rootReducer = combineReducers({ bounds: boundsReducer, @@ -75,6 +76,10 @@ export const rootEpic = combineEpics( const {epochs} = dataset; return {epochs}; }), + createCursorInteractionEpic(({cursor}) => { + const {hoveredChannels} = cursor; + return {hoveredChannels}; + }), ); export type RootState = ReturnType; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx b/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx new file mode 100644 index 00000000000..d4ee08ea077 --- /dev/null +++ b/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx @@ -0,0 +1,75 @@ +import * as R from 'ramda'; +import {Observable} from 'rxjs'; +import * as Rx from 'rxjs/operators'; +import {ofType} from 'redux-observable'; +import {createAction} from 'redux-actions'; +import {setCursor, setHoveredChannels} from "../state/cursor"; +import {Cursor} from "../types"; + +export const SET_CURSOR_INTERACTION = 'SET_CURSOR_INTERACTION'; +export const setCursorInteraction = createAction(SET_CURSOR_INTERACTION); + +export type Action = (_: (_: any) => void) => void; + +/** + * createChannelInteractionEpic + * + * @param {Function} fromState - A function to parse the current state + * @returns {Observable} - A stream of actions + */ +export const createCursorInteractionEpic = (fromState: (_: any) => any) => ( + action$: Observable, + state$: Observable +): Observable => { + return action$.pipe( + ofType(SET_CURSOR_INTERACTION), + Rx.map(R.prop('payload')), + Rx.withLatestFrom(state$), + Rx.map<[Cursor, any], any>(([cursor, state]) => { + + const channelElements = getChannelsAtCursor( + cursor ? cursor.cursorPosition : null, + cursor ? cursor.viewerRef : null + ); + + const channelIndices = channelElements.map((element) => { + const className = Array.from(element.classList) + .find((name) => name.includes('channel')); + return parseInt(className.split('-')[1]); + }).reverse(); + + const {hoveredChannels} = fromState(state); + + return (dispatch) => { + dispatch(setCursor(cursor ? cursor.cursorPosition : null)); + if (JSON.stringify(hoveredChannels) !== JSON.stringify(channelIndices)) + dispatch(setHoveredChannels(channelIndices)); + }; + }) + ); +}; + + +/** + * getChannelsAtCursor + * + * @param {[number, number]} cursorPosition - Cursor position from mouseMove callback + * @param {object} viewerRef - Reference to corresponding ResponsiveViewer + * @returns {Array} - The output signal + */ +const getChannelsAtCursor = (cursorPosition, viewerRef) => { + if (cursorPosition === null || viewerRef === null) return []; + + const viewerElement = viewerRef.current.container; + const { + top, + left, + width, + height, + } = viewerElement.getBoundingClientRect(); + + return document.elementsFromPoint( + (cursorPosition[0] * width) + left, + (cursorPosition[1] * height) + top + ).filter((element) => element.tagName === 'path'); +} diff --git a/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx b/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx index 4b728fafcc7..fac3029d259 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/cursor.tsx @@ -1,16 +1,23 @@ +import * as R from 'ramda'; import {createAction} from 'redux-actions'; export const SET_CURSOR = 'SET_CURSOR'; export const setCursor = createAction(SET_CURSOR); -export type Action = { - type: 'SET_CURSOR', - payload?: number -}; +export const SET_HOVERED_CHANNELS = 'SET_HOVERED_CHANNELS'; +export const setHoveredChannels = createAction(SET_HOVERED_CHANNELS); + +export type Action = + | {type: 'SET_CURSOR', payload?: [number, number]} + | {type: 'SET_HOVERED_CHANNELS', payload?: number[]} -export type State = number; -export type Reducer = (state?: number, action?: Action) => State; +export type State = { + cursorPosition: [number, number] | null, + hoveredChannels: number[], +}; + +export type Reducer = (state?: State, action?: Action) => State; /** * cursorReducer @@ -19,13 +26,19 @@ export type Reducer = (state?: number, action?: Action) => State; * @param {Action} action - The action * @returns {State} - The updated state */ -export const cursorReducer: Reducer = (state = null, action) => { +export const cursorReducer: Reducer = ( + state = {cursorPosition: null, hoveredChannels: []}, + action +) => { if (!action) { return state; } switch (action.type) { case SET_CURSOR: { - return action.payload; + return R.assoc('cursorPosition', action.payload, state); + } + case SET_HOVERED_CHANNELS: { + return R.assoc('hoveredChannels', action.payload, state); } default: { return state; diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx index 2e49c8ad983..8bbea84d17b 100644 --- a/jsx/react-series-data-viewer/src/series/store/types.tsx +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -1,3 +1,5 @@ +import {MutableRefObject} from "react"; + export type Chunk = { index: number, originalValues: number[], @@ -55,3 +57,8 @@ export type Electrode = { channelIndex?: number, position: [number, number, number], }; + +export type Cursor = { + cursorPosition: [number, number] | null, + viewerRef: MutableRefObject | null, +}; From 08758ae636dc3d602c6e00da6b29afd1d037f0bb Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 5 Jan 2023 15:13:59 -0500 Subject: [PATCH 059/126] Reverted EEGMontage.tsx to working version --- .../src/series/components/EEGMontage.tsx | 191 +++++------------- 1 file changed, 48 insertions(+), 143 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx index f2431100eca..cb053df941b 100644 --- a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx @@ -4,7 +4,7 @@ import {_3d} from 'd3-3d'; import {Group} from '@visx/group'; import ResponsiveViewer from './ResponsiveViewer'; import {Electrode} from '../../series/store/types'; -import {setHidden} from '../store/state/montage'; +import {setHidden} from '../../series/store/state/montage'; import React, {useState} from 'react'; import Panel from 'Panel'; import {RootState} from '../store'; @@ -18,19 +18,13 @@ type CProps = { mouseX: number, mouseY: number, setHidden: (_: number[]) => void, - physioFileID: number, }; -/** - * - * @param root0 - * @param root0.electrodes - * @param root0.physioFileID - */ const EEGMontage = ( { electrodes, - physioFileID, + hidden, + setHidden, }: CProps) => { if (electrodes.length === 0) return null; @@ -43,33 +37,26 @@ const EEGMontage = ( const [mouseY, setMouseY] = useState(0); const [view3D, setView3D] = useState(false); - const scatter3D = []; - const scatter2D = []; + const scale = 1200; + let scatter3D = []; + let scatter2D = []; const startAngle = 0; const color = '#000000'; - const point3D = _3d() + let point3D = _3d() .x((d) => d.x) .y((d) => d.y) .z((d) => d.z) .rotateZ( startAngle) - .rotateX(-startAngle); + .rotateX(-startAngle) + .scale(scale); - /** - * - * @param v - */ const dragStart = (v: any) => { setDrag(true); setMx(v[0]); setMy(v[1]); }; - - /** - * - * @param v - */ const dragged = (v: any) => { if (!drag) return; const beta = (v[0] - mx + mouseX) * -2 * Math.PI; @@ -81,132 +68,48 @@ const EEGMontage = ( const angleZ = (beta + startAngle); setAngleZ(angleZ); }; - - /** - * - * @param v - */ + const dragEnd = (v: any) => { - setDrag(false); - setMouseX(v[0] - mx + mouseX); + setDrag( false); + setMouseX( v[0] - mx + mouseX); setMouseY(v[1] - my + mouseY); }; /** * Compute the stereographic projection. * - * Given a unit sphere with radius r = 1 and center at the origin. + * Given a unit sphere with radius r = 1 and center at The origin. * Project the point p = (x, y, z) from the sphere's South pole (0, 0, -1) * on a plane on the sphere's North pole (0, 0, 1). * * P' = P * (2r / (r + z)) * * @param {number} x - x coordinate of electrodes on a unit sphere scale - * @param {number} y - y coordinate of electrodes on a unit sphere scale - * @param {number} z - z coordinate of electrodes on a unit sphere scale - * @param {number} scale - Scale to change the projection point. - * Defaults to 1, which is on the sphere - * @return {number[]} : x, y positions of electrodes - * as projected onto a unit circle. + * @param {number} y - x coordinate of electrodes on a unit sphere scale + * @param {number} z - x coordinate of electrodes on a unit sphere scale + * @param {number} scale - Scale to change the projection point.Defaults to 1, which is on the sphere + * + * @return {number[]} : x, y positions of electrodes as projected onto a unit circle. */ const stereographicProjection = (x, y, z, scale=1.0) => { - const mu = (2 * scale) / (scale + z); + const mu = 1.0 / (scale + z); return [x * mu, y * mu]; }; - /** - * Computes an axis aligned bounding box for a set of points - * - * @param {number[][]} points - an array of nD points - * @return {[number, number]} : a pair of lower and upper bounds - */ - const boundingBox = (points) => { - if (points.length === 0) return []; - const dim = points[0].length; - - return points.reduce( - (boundingBox, point) => { - for (let j=0; j < dim; ++j) { - boundingBox[0][j] = Math.min(boundingBox[0][j], point[j]); - boundingBox[1][j] = Math.max(boundingBox[1][j], point[j]); - } - return boundingBox; - }, - [points[0].slice(), points[0].slice()] - ); - }; - - // Find the enclosing rectangle - const bb = boundingBox( - electrodes.map( - (electrode) => electrode.position.slice(0, 2) - ) - ); - - let ALSOrientation = false; - let headRadius = 1; - let headRatio = 1; - let montageRadius = 100; - - // === Those values may need to be adjusted - // depending on the coord space/net used - const scale3D = 10; - const scale2D = 5; - // === - - if (bb.length > 0) { - // Determine if the points are in an ALS or RAS coordinate system - const bbw = Math.abs(bb[0][0]) + Math.abs(bb[1][0]); - const bbh = Math.abs(bb[0][1]) + Math.abs(bb[1][1]); - if (bbw > bbh) ALSOrientation = true; - - // Scale the sphere used for projection - // with the radius of the enclosing sphere - headRadius = Math.max(bbw, bbh)/2; - headRatio = Math.max(bbw, bbh) / Math.min(bbw, bbh); - montageRadius = stereographicProjection( - headRadius, - 0, - 0, - headRadius - )[0] * scale2D; - } - - electrodes.map((electrode) => { - let electrodeCoords = electrode.position.slice(); - - // SVG Y axis points toward bottom - // Rotate the points to have the nose up - electrodeCoords[1] *= -1; - - // We want the electrodes in the RAS orientation - // Convert from ALS if necessary - if (ALSOrientation) { - electrodeCoords = [ - electrodeCoords[1], - -electrodeCoords[0], - electrodeCoords[2], - ]; - } - + electrodes.map((electrode, i) => { scatter3D.push({ - x: electrodeCoords[0] * scale3D, - y: electrodeCoords[1] * scale3D, - z: electrodeCoords[2] * scale3D, + x: electrode.position[0], + y: electrode.position[1], + z: electrode.position[2], }); - const [x, y] = stereographicProjection( - electrodeCoords[0] * headRatio, - electrodeCoords[1], - electrodeCoords[2], - headRadius + electrode.position[0] * 10, + electrode.position[1] * 10, + electrode.position[2] * 10 ); - scatter2D.push({x: x * scale2D, y: y * scale2D}); + scatter2D.push({x: x * 150, y: y * 150 / 0.8}); }); - /** - * - */ const Montage3D = () => ( {point3D.rotateZ(angleZ).rotateX(angleX)(scatter3D).map((point, i) => { @@ -219,43 +122,38 @@ const EEGMontage = ( fill={color} fillOpacity='0.3' opacity='1' - > - {electrodes[i].name} - + /> ); })} ); - /** - * - */ const Montage2D = () => ( @@ -265,20 +163,28 @@ const EEGMontage = ( key={i} > {electrodes[i].name} {i + 1} {electrodes[i].name} @@ -291,7 +197,7 @@ const EEGMontage = ( return (
    ({ hidden: state.montage.hidden, electrodes: state.montage.electrodes, - physioFileID: state.dataset.physioFileID, }), (dispatch: (_: any) => void) => ({ setHidden: R.compose( From caede9f27fe44c16f20755994d8027d844518838 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 6 Jan 2023 11:26:56 -0500 Subject: [PATCH 060/126] Removed scale lines on the vertical axis on the left side --- .../src/series/components/SeriesRenderer.tsx | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index cd895ca2153..d573337a483 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -267,6 +267,7 @@ const SeriesRenderer: FunctionComponent = ({ ]; const filteredChannels = channels.filter((_, i) => !hidden.includes(i)); + const showAxisScaleLines = false; // Visibility state of y-axis scale lines /** * @@ -356,7 +357,7 @@ const SeriesRenderer: FunctionComponent = ({ {filteredChannels.map((channel, i) => { const seriesRange = channelMetadata[channel.index]?.seriesRange; - if (!seriesRange) return null; + if (!seriesRange || !showAxisScaleLines) return null; return ( = ({ onMouseLeave={() => setCursor(null)} >
    -
    - ({SIGNAL_UNIT}) -
    + {showAxisScaleLines + ?
    + ({SIGNAL_UNIT}) +
    + : null + }
    Date: Fri, 6 Jan 2023 12:01:48 -0500 Subject: [PATCH 061/126] Moved horizontal axis text and ticks to the outside of the graph --- .../src/series/components/ResponsiveViewer.tsx | 2 +- .../src/series/components/SeriesRenderer.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx index 1b8950daf9e..8106606529c 100644 --- a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx @@ -89,7 +89,7 @@ const ResponsiveViewer : FunctionComponent = ({ parentWidth, parentHeight, ].join(' ')} - style={{overflow: 'hidden'}} + style={{overflow: 'visible'}} width={parentWidth} height={parentHeight} onMouseDown={R.compose( diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index d573337a483..a92d1774ce8 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -283,11 +283,11 @@ const SeriesRenderer: FunctionComponent = ({ - + ); @@ -494,7 +494,7 @@ const SeriesRenderer: FunctionComponent = ({
    = ({
    Date: Fri, 6 Jan 2023 13:56:42 -0500 Subject: [PATCH 062/126] Added ability to dynamically change number of displayed channels --- css/electrophysiology_browser.css | 2 +- .../src/series/components/SeriesRenderer.tsx | 58 ++++++++++++++----- .../src/series/store/state/dataset.tsx | 3 +- .../src/vector/index.tsx | 2 + 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index 724043443fe..f8b41e0a59d 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -196,7 +196,7 @@ svg { /* Large Devices, Wide Screens */ @media only screen and (min-width : 1200px) { .pull-right-lg { - float: right; + text-align: right; } .pagination-nav { diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index cd895ca2153..c0c584df477 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -12,6 +12,7 @@ import {scaleLinear, ScaleLinear} from 'd3-scale'; import { MAX_RENDERED_EPOCHS, MAX_CHANNELS, + CHANNEL_DISPLAY_OPTIONS, SIGNAL_UNIT, Vector2, } from '../../vector'; @@ -22,7 +23,7 @@ import Epoch from './Epoch'; import SeriesCursor from './SeriesCursor'; import {setCursor} from '../store/state/cursor'; import {setRightPanel} from '../store/state/rightPanel'; -import {setFilteredEpochs} from '../store/state/dataset'; +import {setFilteredEpochs, setDatasetMetadata} from '../store/state/dataset'; import {setOffsetIndex} from '../store/logic/pagination'; import IntervalSelect from './IntervalSelect'; import EventManager from './EventManager'; @@ -84,6 +85,7 @@ type CProps = { setViewerWidth: (_: number) => void, setViewerHeight: (_: number) => void, setFilteredEpochs: (_: number[]) => void, + setDatasetMetadata: (_: { limit: number }) => void, dragStart: (_: number) => void, dragContinue: (_: number) => void, dragEnd: (_: number) => void, @@ -122,6 +124,7 @@ type CProps = { * @param root0.setViewerWidth * @param root0.setViewerHeight * @param root0.setFilteredEpochs + * @param root0.setDatasetMetadata * @param root0.dragStart * @param root0.dragContinue * @param root0.dragEnd @@ -156,6 +159,7 @@ const SeriesRenderer: FunctionComponent = ({ setViewerWidth, setViewerHeight, setFilteredEpochs, + setDatasetMetadata, dragStart, dragContinue, dragEnd, @@ -167,7 +171,7 @@ const SeriesRenderer: FunctionComponent = ({ if (channels.length === 0) return null; // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [offsetIndex, interval]); + const memoizedCallback = useCallback(() => {}, [offsetIndex, interval, limit]); useEffect(() => { // Keypress handler const keybindHandler = (e) => { if (document.querySelector('#cursor-div')) { // Cursor not null implies on page / focus @@ -227,6 +231,7 @@ const SeriesRenderer: FunctionComponent = ({ } }, [viewerWidth]); + const [numDisplayedChannels, setNumDisplayedChannels] = useState(MAX_CHANNELS); const [highPass, setHighPass] = useState('none'); const [lowPass, setLowPass] = useState('none'); const [refNode, setRefNode] = useState(null); @@ -350,7 +355,7 @@ const SeriesRenderer: FunctionComponent = ({ * @param root0.viewerHeight */ const ChannelAxesLayer = ({viewerWidth, viewerHeight}) => { - const axisHeight = viewerHeight / MAX_CHANNELS; + const axisHeight = viewerHeight / numDisplayedChannels; return ( @@ -391,9 +396,9 @@ const SeriesRenderer: FunctionComponent = ({ > @@ -405,7 +410,7 @@ const SeriesRenderer: FunctionComponent = ({ vec2.add( subTopLeft, topLeft, - vec2.fromValues(0, (i * diagonal[1]) / MAX_CHANNELS) + vec2.fromValues(0, (i * diagonal[1]) / numDisplayedChannels) ); const subBottomRight = vec2.create(); @@ -414,7 +419,7 @@ const SeriesRenderer: FunctionComponent = ({ topLeft, vec2.fromValues( diagonal[0], - ((i + 1) * diagonal[1]) / MAX_CHANNELS + ((i + 1) * diagonal[1]) / numDisplayedChannels ) ); @@ -483,6 +488,18 @@ const SeriesRenderer: FunctionComponent = ({ return (dragEnd)(x); }; + + /** + * + * @param e + */ + const handleChannelChange = (e) => { + let numChannels = parseInt(e.target.value, 10); + setNumDisplayedChannels(numChannels); // This one is the frontend controller + setDatasetMetadata({limit: numChannels}); // Will trigger re-render to the store + setOffsetIndex(offsetIndex); // Will include new channels on limit increase + }; + return ( <> {channels.length > 0 ? ( @@ -496,7 +513,7 @@ const SeriesRenderer: FunctionComponent = ({ style={{paddingTop: '15px', paddingBottom: '10px'}} >
    = ({
    = ({ }} > - Showing channels{' '} + Displaying:  + +  Showing channels  = ({ !isNaN(value) && setOffsetIndex(value); }} /> - {' '} +   to {hardLimit} of {channelMetadata.length}
    = ({ alignItems: 'center', height: viewerHeight, }} - > - {filteredChannels.map((channel) => ( + >{/* Below slice changes labels to be subset of channel choice */} + {filteredChannels.slice(0, numDisplayedChannels).map((channel) => (
    @@ -876,6 +899,7 @@ export default connect( hidden: state.montage.hidden, channelMetadata: state.dataset.channelMetadata, offsetIndex: state.dataset.offsetIndex, + limit: state.dataset.limit, domain: state.bounds.domain, physioFileID: state.dataset.physioFileID, }), @@ -924,7 +948,11 @@ export default connect( dispatch, setFilteredEpochs ), - setCurrentAnnotation: R.compose( + setDatasetMetadata: R.compose( + dispatch, + setDatasetMetadata + ), + setCurrentAnnotation: R.compose( dispatch, setCurrentAnnotation ), diff --git a/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx b/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx index 65a3174742f..b42b0ea808c 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/dataset.tsx @@ -31,7 +31,8 @@ export type Action = shapes: number[][], timeInterval: [number, number], seriesRange: [number, number], - limit: number + limit: number, + offsetIndex: number, } }; diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index 355c80cd5a9..60c2c0c86f1 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -22,6 +22,8 @@ export const MAX_VIEWED_CHUNKS = 3; export const MAX_CHANNELS = 32; +export const CHANNEL_DISPLAY_OPTIONS = [6, 8, 12, 16, 24, 32, 64]; + export const DEFAULT_TIME_INTERVAL: [number, number] = [0, 30]; export const SIGNAL_SCALE = Math.pow(10, 6); From bc7c665ff801602700ebf872c43715e247c7192c Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 13 Jan 2023 14:04:41 -0500 Subject: [PATCH 063/126] Fixed overflow issue --- css/electrophysiology_browser.css | 4 ++++ .../src/series/components/ResponsiveViewer.tsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index 724043443fe..d7607055032 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -42,6 +42,10 @@ svg { user-select: none; } +svg:not(:root) { + overflow: clip; +} + /* ##################### EEGNET OVERRIDE START ################## */ .list-group-item { position: relative; diff --git a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx index 8106606529c..70becfc9d6b 100644 --- a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx @@ -89,7 +89,7 @@ const ResponsiveViewer : FunctionComponent = ({ parentWidth, parentHeight, ].join(' ')} - style={{overflow: 'visible'}} + style={{overflowY: 'visible'}} width={parentWidth} height={parentHeight} onMouseDown={R.compose( From 20f9627a6d78fea49c9b2e2237f34a8a44221682 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 13 Jan 2023 17:21:32 -0500 Subject: [PATCH 064/126] Added hover functionality to channel name --- .../src/series/components/SeriesRenderer.tsx | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 929d330f8be..3c0060ae3e5 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -61,6 +61,7 @@ import { } from '../store/types'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; import {setCursorInteraction} from "../store/logic/cursorInteraction"; +import {setHoveredChannels} from "../store/state/cursor"; type CProps = { ref: MutableRefObject, @@ -96,7 +97,8 @@ type CProps = { setCurrentAnnotation: (_: EpochType) => void, physioFileID: number, annotationMetadata: AnnotationMetadata, - hoveredChannels: number[] + hoveredChannels: number[], + setHoveredChannels: (_: number[]) => void, }; /** @@ -135,6 +137,7 @@ type CProps = { * @param root0.physioFileID * @param root0.annotationMetadata * @param root0.hoveredChannels + * @param root0.setHoveredChannels */ const SeriesRenderer: FunctionComponent = ({ viewerHeight, @@ -169,7 +172,8 @@ const SeriesRenderer: FunctionComponent = ({ setCurrentAnnotation, physioFileID, annotationMetadata, - hoveredChannels + hoveredChannels, + setHoveredChannels }) => { if (channels.length === 0) return null; @@ -499,7 +503,16 @@ const SeriesRenderer: FunctionComponent = ({ return (dragEnd)(x); }; - return ( + /** + * + * @param channelIndex + */ + const onChannelHover = (channelIndex : number) => { + setHoveredChannels(channelIndex === -1 ? [] : [channelIndex]); + }; + + + return ( <> {channels.length > 0 ? (
    @@ -678,8 +691,13 @@ const SeriesRenderer: FunctionComponent = ({ display: 'flex', height: 1 / MAX_CHANNELS * 100 + '%', alignItems: 'center', - color: `${hoveredChannels.includes(channel.index) ? colorOrder(channel.index.toString()) : '#333'}` + cursor: 'default', + color: `${hoveredChannels.includes(channel.index) + ? colorOrder(channel.index.toString()) + : '#333'}`, }} + onMouseEnter={() => onChannelHover(channel.index)} + onMouseLeave={() => onChannelHover(-1)} > {channelMetadata[channel.index] && channelMetadata[channel.index].name} @@ -968,5 +986,9 @@ export default connect( dispatch, endDragSelection ), + setHoveredChannels: R.compose( + dispatch, + setHoveredChannels + ), }) )(SeriesRenderer); From 9f92ee39875c68cf18402c87b7f0a587eceb8592 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Mon, 16 Jan 2023 16:29:12 -0500 Subject: [PATCH 065/126] Fixed time selection from right to left --- .../src/series/store/logic/timeSelection.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx index 5bd62d8652e..98496daeef7 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx @@ -65,7 +65,11 @@ export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( const x = interval[0] + position * (interval[1] - interval[0]); const minSize = Math.abs(interval[1] - interval[0]) * MIN_INTERVAL_FACTOR; timeSelection[1] = Math.round( - x + Math.max(timeSelection[0] + minSize - timeSelection[1], 0) + x + Math.max( + Math.abs(timeSelection[1] - timeSelection[0]) < minSize + ? minSize + : 0 + ) ); return setTimeSelection(timeSelection); @@ -77,7 +81,7 @@ export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( Rx.map(([, state]) => { if ( state.timeSelection - && (state.timeSelection[1] - state.timeSelection[0] < 2) + && (Math.abs(state.timeSelection[1] - state.timeSelection[0]) < 2) ) { return setTimeSelection(null); } else { From c5c89452193ac957ecc6eb1cb2982745d832dfbc Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 18 Jan 2023 13:24:56 -0500 Subject: [PATCH 066/126] Changed channel display options to reflect discussed values --- jsx/react-series-data-viewer/src/vector/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index 60c2c0c86f1..8ae84c9c4e8 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -22,7 +22,7 @@ export const MAX_VIEWED_CHUNKS = 3; export const MAX_CHANNELS = 32; -export const CHANNEL_DISPLAY_OPTIONS = [6, 8, 12, 16, 24, 32, 64]; +export const CHANNEL_DISPLAY_OPTIONS = [4, 8, 16, 32, 64]; export const DEFAULT_TIME_INTERVAL: [number, number] = [0, 30]; From db403c2c4fb07456be0a89c582e6ebb2df92630c Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 18 Jan 2023 14:57:13 -0500 Subject: [PATCH 067/126] Visual improvements to the Series Renderer --- css/electrophysiology_browser.css | 1 + .../src/series/components/SeriesRenderer.tsx | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/css/electrophysiology_browser.css b/css/electrophysiology_browser.css index 957318cd313..f7706d22fb9 100644 --- a/css/electrophysiology_browser.css +++ b/css/electrophysiology_browser.css @@ -107,6 +107,7 @@ svg:not(:root) { height: 22px; font-size: 10px; float: left; + text-align: center; } #electrode-montage .list-group { diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index f508b5429e8..d052cbb4749 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -183,7 +183,7 @@ const SeriesRenderer: FunctionComponent = ({ const viewerRef = useRef(null); const cursorRef = useRef(null); - + // Memoized to singal which vars are to be read from const memoizedCallback = useCallback(() => {}, [offsetIndex, interval, limit]); useEffect(() => { // Keypress handler @@ -705,6 +705,7 @@ const SeriesRenderer: FunctionComponent = ({ flexDirection: 'column', alignItems: 'center', height: viewerHeight, + paddingRight: '0px', }} >{/* Below slice changes labels to be subset of channel choice */} {filteredChannels.slice(0, numDisplayedChannels).map((channel) => ( @@ -729,6 +730,9 @@ const SeriesRenderer: FunctionComponent = ({
    setCursor(null)} >
    From 7bbdaca9a0dff7d8f3fe51d2e4831f0e95dba950 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Mon, 23 Jan 2023 12:38:29 -0500 Subject: [PATCH 068/126] Modification to allow 3-decimal precision on time selection --- .../src/series/components/AnnotationForm.tsx | 35 +++++++++++-------- .../src/series/components/IntervalSelect.tsx | 4 +-- .../src/series/store/logic/timeSelection.tsx | 15 ++++++-- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index fdd83dd2998..e77ccad0a40 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -62,7 +62,12 @@ const AnnotationForm = ({ interval, }: CProps) => { const [startEvent = '', endEvent = ''] = timeSelection || []; - const [event, setEvent] = useState([startEvent, endEvent]); + const [event, setEvent] = useState<(number | string)[]>( + [ + startEvent, + endEvent + ] + ); const [label, setLabel] = useState( currentAnnotation ? currentAnnotation.label : @@ -101,14 +106,14 @@ const AnnotationForm = ({ * @param val */ const handleStartTimeChange = (id, val) => { - const value = parseInt(val); + const value = parseFloat(val); setEvent([value, event[1]]); if (validate([value, event[1]])) { let endTime = event[1]; if (typeof endTime === 'string') { - endTime = parseInt(endTime); + endTime = parseFloat(endTime); } setTimeSelection( [ @@ -125,14 +130,14 @@ const AnnotationForm = ({ * @param val */ const handleEndTimeChange = (name, val) => { - const value = parseInt(val); + const value = parseFloat(val); setEvent([event[0], value]); if (validate([event[0], value])) { let startTime = event[0]; if (typeof startTime === 'string') { - startTime = parseInt(startTime); + startTime = parseFloat(startTime); } setTimeSelection( [ @@ -209,10 +214,10 @@ const AnnotationForm = ({ let startTime = event[0]; let endTime = event[1]; if (typeof startTime === 'string') { - startTime = parseInt(startTime); + startTime = parseFloat(startTime); } if (typeof endTime === 'string') { - endTime = parseInt(endTime); + endTime = parseFloat(endTime); } const duration = endTime - startTime; @@ -412,13 +417,13 @@ const AnnotationForm = ({ onUserInput={handleStartTimeChange} /> } - -
    - {[...Array(epochs.length).keys()].filter((i) => - epochs[i].onset + epochs[i].duration > interval[0] - && epochs[i].onset < interval[1] - && ( - (epochs[i].type === 'Event' - && rightPanel === 'eventList') - || - (epochs[i].type === 'Annotation' - && rightPanel === 'annotationList') - ) - ).length >= MAX_RENDERED_EPOCHS && -
    - Too many events to display for the timeline range. -
    - } -
    diff --git a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index 156906fe839..67fbb437cf3 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -114,3 +114,13 @@ export const createActiveEpochEpic = (fromState: (_: any) => any) => ( }) ); }; + + +export const getEpochsInRange = (epochs, interval, epochType, withComments = false) => { + return [...Array(epochs.length).keys()].filter((index) => + epochs[index].onset + epochs[index].duration > interval[0] && + epochs[index].onset < interval[1] && + epochs[index].type === epochType && + (!withComments || epochs[index].hed || epochs[index].comment) + ); +} diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index 9e1baa60204..524bbaf9615 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -32,4 +32,4 @@ export const SIGNAL_SCALE = Math.pow(10, 6); export const SIGNAL_UNIT = 'µV'; -export const MAX_RENDERED_EPOCHS = 100; +export const MAX_RENDERED_EPOCHS = 500; From bfd9c887f907c0b8b715aaf47bb537e7236d5b97 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Mon, 30 Jan 2023 16:07:14 -0500 Subject: [PATCH 097/126] Limited channel offset index to prevent whitespace --- .../src/series/store/logic/pagination.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx b/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx index c92750a5b22..1659e91e4f4 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/pagination.tsx @@ -38,7 +38,7 @@ export const createPaginationEpic = (fromState: (_: any) => State) => ( const offsetIndex = Math.min( Math.max(payload, 1), - channelMetadata.length + Math.max(channelMetadata.length - limit + 1, 1) ); let channelIndex = offsetIndex - 1; From 2aa6701888b754045fc2974d750dc40577c6b4fc Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Mon, 30 Jan 2023 16:20:24 -0500 Subject: [PATCH 098/126] Reduced viewwer height by 20% when 4 channels are visible --- .../src/series/components/EventManager.tsx | 8 ++++++-- .../src/series/components/SeriesRenderer.tsx | 6 ++++++ .../src/series/store/state/bounds.tsx | 3 ++- jsx/react-series-data-viewer/src/vector/index.tsx | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 97132fd07ac..f3e56a3f60f 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -1,6 +1,6 @@ import React, {useState, useEffect} from 'react'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; -import {MAX_RENDERED_EPOCHS} from '../../vector'; +import {DEFAULT_VIEWER_HEIGHT, MAX_RENDERED_EPOCHS} from '../../vector'; import {toggleEpoch, updateActiveEpoch, updateFilteredEpochs} from '../store/logic/filterEpochs'; import {Epoch as EpochType, RightPanel} from '../store/types'; import {connect} from 'react-redux'; @@ -20,6 +20,7 @@ type CProps = { toggleEpoch: (_: number) => void, updateActiveEpoch: (_: number) => void, interval: [number, number], + viewerHeight: number, }; /** @@ -34,6 +35,7 @@ type CProps = { * @param root0.toggleEpoch * @param root0.updateActiveEpoch * @param root0.interval + * @param root0.viewerHeight */ const EventManager = ({ epochs, @@ -45,6 +47,7 @@ const EventManager = ({ toggleEpoch, updateActiveEpoch, interval, + viewerHeight }: CProps) => { // ##################### EEGNET OVERRIDE START ################## // @@ -143,7 +146,7 @@ const EventManager = ({
    void) => ({ setCurrentAnnotation: R.compose( diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 1894f18b463..685291a95aa 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -20,6 +20,7 @@ import { Vector2, DEFAULT_TIME_INTERVAL, STACKED_SERIES_RANGE, + DEFAULT_VIEWER_HEIGHT, } from '../../vector'; import ResponsiveViewer from './ResponsiveViewer'; import Axis from './Axis'; @@ -667,6 +668,11 @@ const SeriesRenderer: FunctionComponent = ({ setNumDisplayedChannels(numChannels); // This one is the frontend controller setDatasetMetadata({limit: numChannels}); // Will trigger re-render to the store setOffsetIndex(offsetIndex); // Will include new channels on limit increase + setViewerHeight( + numChannels > 4 + ? DEFAULT_VIEWER_HEIGHT + : DEFAULT_VIEWER_HEIGHT * 0.8 + ); }; /** diff --git a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx index e575f2bc604..35772bdcaf6 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx @@ -1,5 +1,6 @@ import {createAction} from 'redux-actions'; import {act} from "react-dom/test-utils"; +import {DEFAULT_VIEWER_HEIGHT} from "../../../vector"; export const SET_INTERVAL = 'SET_INTERVAL'; export const setInterval = createAction(SET_INTERVAL); @@ -103,7 +104,7 @@ const viewerWidth = (state = 400, action?: Action): number => { * @param {Action} action - The action * @returns {State} - The updated state */ -const viewerHeight = (state = 800, action?: Action): number => { +const viewerHeight = (state = DEFAULT_VIEWER_HEIGHT, action?: Action): number => { if (action && action.type === 'SET_VIEWER_HEIGHT') { return action.payload; } diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index 9e1baa60204..79312c3fc5f 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -28,6 +28,8 @@ export const STACKED_SERIES_RANGE: [number, number] = [-0.005, 0.005]; export const DEFAULT_TIME_INTERVAL: [number, number] = [0, 30]; +export const DEFAULT_VIEWER_HEIGHT = 800; + export const SIGNAL_SCALE = Math.pow(10, 6); export const SIGNAL_UNIT = 'µV'; From 3adaf8a92b45cc94373d6f6ed40e80cc4310669f Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 1 Feb 2023 13:42:37 -0500 Subject: [PATCH 099/126] Modified panel to show visible/total events --- .../src/series/components/EventManager.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index e9f2a3eade1..5613212df03 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -113,6 +113,11 @@ const EventManager = ({ } } + const epochsInRange = getEpochsInRange(epochs, interval, epochType); + const visibleEpochsInRange = epochsInRange.filter( + (epochIndex) => filteredEpochs.includes(epochIndex) + ); + return (

    - {`${epochType}s (${getEpochsInRange(epochs, interval, epochType).length})`} + + {`${epochType}s (${visibleEpochsInRange.length}/${epochsInRange.length})`} +
    in timeline view
    From b4b2a2511549d414cdd0c48f48739c41e561b1a6 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 1 Feb 2023 15:30:16 -0500 Subject: [PATCH 100/126] Added total number of epochs to panel and included those with NaN onset --- .../src/series/components/EventManager.tsx | 5 ++++- .../src/series/store/logic/filterEpochs.tsx | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 574043e2311..783e5319578 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -71,6 +71,9 @@ const EventManager = ({ }); const [visibleComments, setVisibleComments] = useState([]); const [allCommentsVisible, setAllCommentsVisible] = useState(false); + const totalEpochs = epochs.filter( + (epoch) => epoch.type === epochType + ).length; // Update window visibility state useEffect(() => { @@ -136,7 +139,7 @@ const EventManager = ({ {`${epochType}s (${visibleEpochsInRange.length}/${epochsInRange.length})`} -
    in timeline view +
    in timeline view [Total: {totalEpochs}]

    diff --git a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index 67fbb437cf3..d05c7d66897 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -118,8 +118,14 @@ export const createActiveEpochEpic = (fromState: (_: any) => any) => ( export const getEpochsInRange = (epochs, interval, epochType, withComments = false) => { return [...Array(epochs.length).keys()].filter((index) => - epochs[index].onset + epochs[index].duration > interval[0] && - epochs[index].onset < interval[1] && + ( + (isNaN(epochs[index].onset) && interval[0] === 0) + || + ( + epochs[index].onset + epochs[index].duration > interval[0] && + epochs[index].onset < interval[1] + ) + ) && epochs[index].type === epochType && (!withComments || epochs[index].hed || epochs[index].comment) ); From e45ec20df7183fb4e8ea72511573c00eb822fda9 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 1 Feb 2023 15:48:28 -0500 Subject: [PATCH 101/126] Slight refactor for improved efficiency --- .../src/series/components/EventManager.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index 783e5319578..fdc316d93b3 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -60,8 +60,10 @@ const EventManager = ({ && rightPanel === 'eventList') ? 'Event' : 'Annotation'); const [activeEpochs, setActiveEpochs] = useState([]); + const [epochsInRange, setEpochsInRange] = useState( + getEpochsInRange(epochs, interval, epochType) + ); const [allEpochsVisible, setAllEpochsVisibility] = useState(() => { - const epochsInRange = getEpochsInRange(epochs, interval, epochType); if (epochsInRange.length < MAX_RENDERED_EPOCHS) { return epochsInRange.some((index) => { return !filteredEpochs.includes(index); @@ -77,7 +79,7 @@ const EventManager = ({ // Update window visibility state useEffect(() => { - const epochsInRange = getEpochsInRange(epochs, interval, epochType); + setEpochsInRange(getEpochsInRange(epochs, interval, epochType)); if (epochsInRange.length < MAX_RENDERED_EPOCHS) { setAllEpochsVisibility(!epochsInRange.some((index) => { return !filteredEpochs.includes(index); @@ -108,7 +110,6 @@ const EventManager = ({ const setEpochsInViewVisibility = (visible) => { - const epochsInRange = getEpochsInRange(epochs, interval, epochType); if (epochsInRange.length < MAX_RENDERED_EPOCHS) { epochsInRange.map((index) => { if ((visible && !filteredEpochs.includes(index)) @@ -119,7 +120,6 @@ const EventManager = ({ } } - const epochsInRange = getEpochsInRange(epochs, interval, epochType); const visibleEpochsInRange = epochsInRange.filter( (epochIndex) => filteredEpochs.includes(epochIndex) ); @@ -177,7 +177,7 @@ const EventManager = ({ marginBottom: 0, }} > - {getEpochsInRange(epochs, interval, epochType).length >= MAX_RENDERED_EPOCHS && + {epochsInRange.length >= MAX_RENDERED_EPOCHS &&
    } - {getEpochsInRange(epochs, interval, epochType).map((index) => { + {epochsInRange.map((index) => { const epoch = epochs[index]; const visible = filteredEpochs.includes(index); From 3d37990dea5a1424d14e489b39c3ea4d3c9bb5ff Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 1 Feb 2023 16:07:32 -0500 Subject: [PATCH 102/126] Event panel message UX improvement --- .../src/series/components/EventManager.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index fdc316d93b3..cef2e43ab88 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -181,8 +181,11 @@ const EventManager = ({
    Too many events to display for the timeline range. From 41f0e748363c3d8b78902145254c9d9a7dac5d8c Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 1 Feb 2023 16:35:28 -0500 Subject: [PATCH 103/126] Fixed parsing error --- .../src/series/components/AnnotationForm.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index b56e256f312..bb275d88a04 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -414,8 +414,8 @@ const AnnotationForm = ({ label="Start Time" value={event ? Math.min( - parseFloat(event[0].toString()), - parseFloat(event[1].toString()) + parseFloat(event[0] ? event[0].toString() : ''), + parseFloat(event[1] ? event[1].toString() : '') ) : '' } @@ -429,8 +429,8 @@ const AnnotationForm = ({ label="End Time" value={event ? Math.max( - parseFloat(event[0].toString()), - parseFloat(event[1].toString()) + parseFloat(event[0] ? event[0].toString() : ''), + parseFloat(event[1] ? event[1].toString() : '') ) : '' } From 3b50bf140dc37e1e10d680dce72beb3ec0ce3712 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 1 Feb 2023 16:52:39 -0500 Subject: [PATCH 104/126] Fixed error thrown when trying to display epochs with NaN onset and/or duration --- jsx/react-series-data-viewer/src/series/components/Epoch.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx index 06902e813fe..a790668fa49 100644 --- a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx +++ b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx @@ -33,13 +33,16 @@ const Epoch = ( color, opacity, }: CProps) => { + onset = isNaN(onset) ? 0 : onset; + duration = isNaN(duration) ? 0 : duration; + const start = vec2.fromValues( scales[0](onset), scales[1](-parentHeight/2), ); const end = vec2.fromValues( - scales[0](onset + duration) + MIN_EPOCH_WIDTH, + scales[0](onset + Math.max(duration, MIN_EPOCH_WIDTH)), scales[1](parentHeight/2) ); From 25e029a5f36a1fd40864e01764dce1650829135e Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 8 Feb 2023 13:25:18 -0500 Subject: [PATCH 105/126] Reduced width of durationless epochs + Improved event highlight behaviour --- .../src/series/components/EventManager.tsx | 4 ++-- jsx/react-series-data-viewer/src/vector/index.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx index cef2e43ab88..50af7cf2cca 100644 --- a/jsx/react-series-data-viewer/src/series/components/EventManager.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EventManager.tsx @@ -232,6 +232,8 @@ const EventManager = ({ style={{ position: 'relative', }} + onMouseEnter={() => updateActiveEpoch(index)} + onMouseLeave={() => updateActiveEpoch(null)} >
    toggleEpoch(index)} - onMouseEnter={() => updateActiveEpoch(index)} - onMouseLeave={() => updateActiveEpoch(null)} > Date: Thu, 9 Feb 2023 14:42:43 -0500 Subject: [PATCH 106/126] Minimum epoch size scales with interval --- .../src/series/components/Epoch.tsx | 6 +++++- .../src/series/components/SeriesRenderer.tsx | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx index a790668fa49..c267d72344e 100644 --- a/jsx/react-series-data-viewer/src/series/components/Epoch.tsx +++ b/jsx/react-series-data-viewer/src/series/components/Epoch.tsx @@ -12,6 +12,7 @@ type CProps = { ], color: string, opacity: number, + minWidth: number, }; /** @@ -23,6 +24,7 @@ type CProps = { * @param root0.scales * @param root0.color * @param root0.opacity + * @param root0.minWidth */ const Epoch = ( { @@ -32,6 +34,7 @@ const Epoch = ( scales, color, opacity, + minWidth, }: CProps) => { onset = isNaN(onset) ? 0 : onset; duration = isNaN(duration) ? 0 : duration; @@ -42,7 +45,7 @@ const Epoch = ( ); const end = vec2.fromValues( - scales[0](onset + Math.max(duration, MIN_EPOCH_WIDTH)), + scales[0](onset + Math.max(duration, minWidth)), scales[1](parentHeight/2) ); @@ -65,6 +68,7 @@ const Epoch = ( Epoch.defaultProps = { color: '#dae5f2', opacity: 1, + minWidth: MIN_EPOCH_WIDTH }; export default Epoch; diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 4c7cb40fdae..40937262c63 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -21,6 +21,7 @@ import { DEFAULT_TIME_INTERVAL, STACKED_SERIES_RANGE, DEFAULT_VIEWER_HEIGHT, + MIN_EPOCH_WIDTH, } from '../../vector'; import ResponsiveViewer from './ResponsiveViewer'; import Axis from './Axis'; @@ -466,6 +467,7 @@ const SeriesRenderer: FunctionComponent = ({ : null ; const visibleEpochs = getEpochsInRange(epochs, interval, epochType); + const minEpochWidth = (interval[1] - interval[0]) * MIN_EPOCH_WIDTH / DEFAULT_TIME_INTERVAL[1]; return ( @@ -482,7 +484,8 @@ const SeriesRenderer: FunctionComponent = ({ } key={`${index}`} scales={scales} - opacity={0.7} + opacity={0.8} + minWidth={minEpochWidth} /> ); }) @@ -503,6 +506,7 @@ const SeriesRenderer: FunctionComponent = ({ parentHeight={viewerHeight} scales={scales} color={'#d8ffcc'} + minWidth={minEpochWidth} /> } From 5ddf0dc1c5d05b4c4d3d342b1234611260d50339 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 9 Feb 2023 14:59:51 -0500 Subject: [PATCH 107/126] Improved visibility of epoch when hovered via panel --- .../src/series/components/SeriesRenderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 40937262c63..0a58f9bd021 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -505,7 +505,7 @@ const SeriesRenderer: FunctionComponent = ({ {...epochs[activeEpoch]} parentHeight={viewerHeight} scales={scales} - color={'#d8ffcc'} + color={'#97b68c'} minWidth={minEpochWidth} /> } From cc5b3e920fe5c3b71fb6e16c3bc9427c2b6cfcd1 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Tue, 14 Feb 2023 16:29:19 -0500 Subject: [PATCH 108/126] Added DC offset feature --- .../src/series/components/LineChunk.tsx | 79 +++++---- .../src/series/components/SeriesRenderer.tsx | 164 ++++++++++++------ .../src/series/store/state/bounds.tsx | 2 +- .../src/vector/index.tsx | 8 +- 4 files changed, 165 insertions(+), 88 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx b/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx index b1717139135..8727d54936a 100644 --- a/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx +++ b/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx @@ -7,21 +7,26 @@ import {Group} from '@visx/group'; import {colorOrder} from "../../color"; const LineMemo = R.memoizeWith( - ({interval, amplitudeScale, filters, channelIndex, traceIndex, chunkIndex, isStacked}) => - `${interval.join(',')},${amplitudeScale},${filters.join('-')},` - + `${channelIndex}-${traceIndex}-${chunkIndex}-${isStacked}`, + ({amplitudeScale, filters, channelIndex, traceIndex, + chunkIndex, isStacked, DCOffset, numChannels, numChunks}) => + `${amplitudeScale},${filters.join('-')},` + + `${channelIndex}-${traceIndex}-${chunkIndex},` + + `${isStacked},${DCOffset},${numChannels},${numChunks}`, ({ - channelIndex, - traceIndex, - chunkIndex, - interval, - seriesRange, - amplitudeScale, - filters, - values, - isStacked, - ...rest -}) => { + channelIndex, + traceIndex, + chunkIndex, + interval, + seriesRange, + amplitudeScale, + filters, + values, + isStacked, + DCOffset, + numChannels, + numChunks, + ...rest + }) => { const scales = [ scaleLinear() @@ -37,12 +42,10 @@ const LineMemo = R.memoizeWith( scales[0]( interval[0] + (i / values.length) * (interval[1] - interval[0]) ), - -scales[1](value) + -(scales[1](value) - DCOffset) ) ); - - return ( { + channelIndex, + traceIndex, + chunkIndex, + chunk, + seriesRange, + amplitudeScale, + scales, + physioFileID, + isHovered, + isStacked, + withDCOffset, + numChannels, + numChunks, + ...rest + }: CProps) => { const {interval, values} = chunk; if (values.length === 0) { @@ -109,11 +121,13 @@ const LineChunk = ({ const chunkLength = Math.abs(scales[0](interval[1]) - scales[0](interval[0])); const chunkHeight = Math.abs(range[1] - range[0]); + const p0 = vec2.fromValues( (scales[0](interval[0]) + scales[0](interval[1])) / 2, (range[0] + range[1]) / 2 ); + return ( diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 0a58f9bd021..193146d38ab 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -19,7 +19,7 @@ import { SIGNAL_UNIT, Vector2, DEFAULT_TIME_INTERVAL, - STACKED_SERIES_RANGE, + STATIC_SERIES_RANGE, DEFAULT_VIEWER_HEIGHT, MIN_EPOCH_WIDTH, } from '../../vector'; @@ -250,7 +250,10 @@ const SeriesRenderer: FunctionComponent = ({ const cursorRef = useRef(null); // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [offsetIndex, interval, limit, timeSelection]); + const memoizedCallback = useCallback(() => {}, [ + offsetIndex, interval, limit, timeSelection, amplitudeScale + ]); + useEffect(() => { // Keypress handler const keybindHandler = (e) => { if (cursorRef.current) { // Cursor is on page / focus @@ -320,6 +323,12 @@ const SeriesRenderer: FunctionComponent = ({ case 'Equal': // This key combination is '+' zoomIn(); break; + case 'KeyN': // Lower amplitude scale + setAmplitudesScale(1.1); + break; + case 'KeyM': // Increase amplitude scale + setAmplitudesScale(0.9); + break; } } } @@ -356,7 +365,7 @@ const SeriesRenderer: FunctionComponent = ({ line.setAttribute( 'stroke-width', colored && (!singleMode || cursorRef.current) - ? '3' + ? '2' : '1' ); }); @@ -381,6 +390,8 @@ const SeriesRenderer: FunctionComponent = ({ const [numDisplayedChannels, setNumDisplayedChannels] = useState(DEFAULT_MAX_CHANNELS); const [cursorEnabled, setCursorEnabled] = useState(false); const toggleCursor = () => setCursorEnabled(value => !value); + const [DCOffsetView, setDCOffsetView] = useState(true); + const toggleDCOffsetView = () => setDCOffsetView(value => !value); const [stackedView, setStackedView] = useState(false); const toggleStackedView = () => setStackedView(value => !value); const [singleMode, setSingleMode] = useState(false); @@ -452,14 +463,6 @@ const SeriesRenderer: FunctionComponent = ({ }; const EpochsLayer = () => { - // ##################### EEGNET OVERRIDE START ################## // - // Override: Delete Enclosed Code - /*const fEpochs = [...Array(epochs.length).keys()].filter((i) => - epochs[i].onset + epochs[i].duration > interval[0] - && epochs[i].onset < interval[1] - );*/ - // ##################### EEGNET OVERRIDE END ################## // - const epochType = rightPanel === 'eventList' ? 'Event' : rightPanel === 'annotationList' @@ -553,8 +556,8 @@ const SeriesRenderer: FunctionComponent = ({ setViewerWidth(viewerWidth); }, [viewerWidth]); - const channelList: Channel[] = (! - cursorRef.current && stackedView && + const channelList: Channel[] = ( + !cursorRef.current && stackedView && singleMode && hoveredChannels.length > 0 ) ? filteredChannels.filter((channel) => hoveredChannels.includes(channel.index)) @@ -584,8 +587,8 @@ const SeriesRenderer: FunctionComponent = ({ topLeft, vec2.fromValues( 0, - stackedView - ? 0 + stackedView && !singleMode + ? (numDisplayedChannels - 2) * diagonal[1] / (2 * numDisplayedChannels) : (i * diagonal[1]) / numDisplayedChannels ) ); @@ -596,8 +599,8 @@ const SeriesRenderer: FunctionComponent = ({ topLeft, vec2.fromValues( diagonal[0], - stackedView - ? diagonal[1] + stackedView && !singleMode + ? (numDisplayedChannels + 2) * diagonal[1] / (2 * numDisplayedChannels) : ((i + 1) * diagonal[1]) / numDisplayedChannels ) ); @@ -608,40 +611,86 @@ const SeriesRenderer: FunctionComponent = ({ const axisEnd = vec2.create(); vec2.add(axisEnd, subTopLeft, vec2.fromValues(0.1, subDiagonal[1])); - const seriesRange: [number, number] = stackedView - ? STACKED_SERIES_RANGE - : channelMetadata[channel.index].seriesRange; - - const scales: [ - ScaleLinear, - ScaleLinear - ] = [ - scaleLinear() - .domain(interval) - .range([subTopLeft[0], subBottomRight[0]]), - scaleLinear() - .domain(seriesRange) - .range([subTopLeft[1], subBottomRight[1]]), - ]; - return ( - channel.traces.map((trace, j) => ( - trace.chunks.map((chunk, k) => ( - - )) - )) + channel.traces.map((trace, j) => { + const numChunks = trace.chunks.length; + if (numChunks === 0) + return null; + + const valuesInView = trace.chunks.map((chunk) => { + let includedIndices = [0, chunk.values.length]; + if (chunk.interval[0] < interval[0]) { + const startIndex = chunk.values.length * (interval[0] - chunk.interval[0]) / (chunk.interval[1] - chunk.interval[0]); + includedIndices = [startIndex, includedIndices[1]]; + } + if (chunk.interval[1] > interval[1]) { + const endIndex = chunk.values.length * (interval[1] - chunk.interval[0]) / (chunk.interval[1] - chunk.interval[0]); + includedIndices = [includedIndices[0], endIndex]; + } + return chunk.values.slice(includedIndices[0], includedIndices[1]); + }).flat(); + + const seriesRange: [number, number] = STATIC_SERIES_RANGE; + + const scales: [ + ScaleLinear, + ScaleLinear + ] = [ + scaleLinear() + .domain(interval) + .range([subTopLeft[0], subBottomRight[0]]), + scaleLinear() + .domain(seriesRange) + .range( + stackedView + ? [ + -viewerHeight / (2 * numDisplayedChannels), + viewerHeight / (2 * numDisplayedChannels) + ] + : [subTopLeft[1], subBottomRight[1]] + ), + ]; + + const scaleByAmplitude = scaleLinear() + .domain(seriesRange.map((x) => x * amplitudeScale)) + .range([-0.5, 0.5]); + + const getScaledMean = (values) => { + let numValues = values.length; + return values.reduce((a, b) => { + if (isNaN(b)) { + numValues--; + b = 0; + } + return a + scaleByAmplitude(b); + }, 0) / numValues + } + + const DCOffset = DCOffsetView + ? getScaledMean(valuesInView) + : 0; + + return ( + trace.chunks.map((chunk, k) => ( + + )) + ) + }) ); })} @@ -1047,9 +1096,20 @@ const SeriesRenderer: FunctionComponent = ({ style={{ textAlign: 'center', position: 'absolute', - bottom: '15px', + bottom: '0', }} > + +
    = ({ marginTop: '3px', }} onClick={toggleStackedView} - value={stackedView ? 'Unstack' : 'Stack'} + value={stackedView ? 'Spread' : 'Stack'} />
    { +const amplitudeScale = (state = 0.0005, action?: Action): number => { if (action && action.type === 'SET_AMPLITUDE_SCALE') { return action.payload; } diff --git a/jsx/react-series-data-viewer/src/vector/index.tsx b/jsx/react-series-data-viewer/src/vector/index.tsx index 1162e334edb..303562813b1 100644 --- a/jsx/react-series-data-viewer/src/vector/index.tsx +++ b/jsx/react-series-data-viewer/src/vector/index.tsx @@ -20,15 +20,15 @@ export const MIN_EPOCH_WIDTH = 0.025; export const MAX_VIEWED_CHUNKS = 3; -export const DEFAULT_MAX_CHANNELS = 32; +export const DEFAULT_MAX_CHANNELS = 16; export const CHANNEL_DISPLAY_OPTIONS = [4, 8, 16, 32, 64]; -export const STACKED_SERIES_RANGE: [number, number] = [-0.005, 0.005]; +export const STATIC_SERIES_RANGE: [number, number] = [-0.05, 0.05]; -export const DEFAULT_TIME_INTERVAL: [number, number] = [0, 30]; +export const DEFAULT_TIME_INTERVAL: [number, number] = [0, 5]; -export const DEFAULT_VIEWER_HEIGHT = 800; +export const DEFAULT_VIEWER_HEIGHT = 700; export const SIGNAL_SCALE = Math.pow(10, 6); From 900fe52be585d3d89a276d07846b5bb88e3982cd Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Thu, 16 Feb 2023 11:19:00 -0500 Subject: [PATCH 109/126] Buttons are now in front of out bounds signals --- .../src/series/components/IntervalSelect.tsx | 1 + .../src/series/components/SeriesRenderer.tsx | 5 ++++- jsx/react-series-data-viewer/src/vector/index.tsx | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index 21e05d0ccd6..ec3a23ed99f 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -167,6 +167,7 @@ const IntervalSelect: FunctionComponent = ({ marginBottom: '20px', display: 'flex', justifyContent: 'center', + zIndex: '1', }} >
    diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 193146d38ab..17ffa617713 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -812,7 +812,10 @@ const SeriesRenderer: FunctionComponent = ({
    -
    +
    Date: Thu, 16 Feb 2023 13:46:19 -0500 Subject: [PATCH 110/126] Fixed chunk fetching near edges + Refactored variable names --- .../src/series/components/SeriesRenderer.tsx | 9 +-- .../src/series/store/logic/fetchChunks.tsx | 71 ++++++++++--------- 2 files changed, 43 insertions(+), 37 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 17ffa617713..0bb2f4065ef 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -613,9 +613,7 @@ const SeriesRenderer: FunctionComponent = ({ return ( channel.traces.map((trace, j) => { - const numChunks = trace.chunks.length; - if (numChunks === 0) - return null; + const numChunks = trace.chunks.filter((chunk) => chunk.values.length > 0).length; const valuesInView = trace.chunks.map((chunk) => { let includedIndices = [0, chunk.values.length]; @@ -630,6 +628,9 @@ const SeriesRenderer: FunctionComponent = ({ return chunk.values.slice(includedIndices[0], includedIndices[1]); }).flat(); + if (valuesInView.length === 0) + return; + const seriesRange: [number, number] = STATIC_SERIES_RANGE; const scales: [ @@ -660,7 +661,7 @@ const SeriesRenderer: FunctionComponent = ({ return values.reduce((a, b) => { if (isNaN(b)) { numValues--; - b = 0; + return a; } return a + scaleByAmplitude(b); }, 0) / numValues diff --git a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx index ba9f611ad51..ef8355068a2 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx @@ -114,23 +114,23 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( channels.map((channel) => { return ( channel && - channel.traces.map((_, j) => { - const ncs = shapes.map((shape) => shape[shape.length - 2]); + channel.traces.map((_, traceIndex) => { + const shapeChunks = shapes.map((shape) => shape[shape.length - 2]); - const citvs = ncs - .map((nc, downsampling) => { - const timeLength = Math.abs( + const chunkIntervals = shapeChunks + .map((numChunks, downsampling) => { + const recordingDuration = Math.abs( timeInterval[1] - timeInterval[0] ); const i0 = - (nc * Math.ceil(bounds.interval[0] - bounds.domain[0])) / - timeLength; + (numChunks * Math.floor(bounds.interval[0] - bounds.domain[0])) / + recordingDuration; const i1 = - (nc * Math.ceil(bounds.interval[1] - bounds.domain[0])) / - timeLength; + (numChunks * Math.ceil(bounds.interval[1] - bounds.domain[0])) / + recordingDuration; return { - interval: [Math.floor(i0), Math.min(Math.ceil(i1), nc)], - numChunks: nc, + interval: [Math.floor(i0), Math.min(Math.ceil(i1), numChunks)], + numChunks: numChunks, downsampling, }; }) @@ -140,39 +140,44 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( ) .reverse(); - const max = R.reduce( + const finestChunks = R.reduce( R.maxBy(({interval}) => interval[1] - interval[0]), {interval: [0, 0]}, - citvs + chunkIntervals ); - const chunkPromises = R.range(...max.interval).map( + const chunkPromises = R.range(...finestChunks.interval).flatMap( (chunkIndex) => { - const numChunks = max.numChunks; - return fetchChunkAt( - chunksURL, - max.downsampling, - channel.index, - j, - chunkIndex - ).then((chunk) => ({ - interval: [ - timeInterval[0] + - (chunkIndex / numChunks) * - (timeInterval[1] - timeInterval[0]), - timeInterval[0] + - ((chunkIndex + 1) / numChunks) * - (timeInterval[1] - timeInterval[0]), - ], - ...chunk, - })); + const numChunks = finestChunks.numChunks; + const chunkInterval = [ + timeInterval[0] + + (chunkIndex / numChunks) * + (timeInterval[1] - timeInterval[0]), + timeInterval[0] + + ((chunkIndex + 1) / numChunks) * + (timeInterval[1] - timeInterval[0]), + ]; + if (chunkInterval[0] <= bounds.interval[1]) { + return fetchChunkAt( + chunksURL, + finestChunks.downsampling, + channel.index, + traceIndex, + chunkIndex + ).then((chunk) => ({ + interval: chunkInterval, + ...chunk, + })); + } else { + return []; + } } ); return from( Promise.all(chunkPromises).then((chunks) => ({ channelIndex: channel.index, - traceIndex: j, + traceIndex: traceIndex, chunks, })) ); From 10241199203ec8257c51df6048e5f899cc833bda Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Wed, 22 Feb 2023 13:34:27 -0500 Subject: [PATCH 111/126] Added overflow toggle button + Minor UI improvements --- .../series/components/ResponsiveViewer.tsx | 7 +++++-- .../src/series/components/SeriesRenderer.tsx | 19 ++++++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx index a7d99a1382d..8ecc20fe967 100644 --- a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx @@ -11,7 +11,8 @@ type CProps = { mouseDown?: (_: any) => void, mouseMove?: (_: any) => void, mouseUp?: (_: any) => void, - mouseLeave?: (_: any) => void + mouseLeave?: (_: any) => void, + showOverflow: boolean }; /** @@ -25,6 +26,7 @@ type CProps = { * @param root0.mouseUp * @param root0.mouseLeave * @param root0.children + * @param root0.showOverflow */ const ResponsiveViewer : FunctionComponent = ({ ref, @@ -35,6 +37,7 @@ const ResponsiveViewer : FunctionComponent = ({ mouseUp, mouseLeave, children, + showOverflow, }) => { /** * @@ -92,7 +95,7 @@ const ResponsiveViewer : FunctionComponent = ({ parentWidth, parentHeight, ].join(' ')} - style={{overflowY: 'visible'}} + style={{overflowY: showOverflow ? 'visible' : 'hidden'}} width={parentWidth} height={parentHeight} onMouseDown={R.compose( diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 0bb2f4065ef..272c9140cc9 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -396,6 +396,8 @@ const SeriesRenderer: FunctionComponent = ({ const toggleStackedView = () => setStackedView(value => !value); const [singleMode, setSingleMode] = useState(false); const toggleSingleMode = () => setSingleMode(value => !value); + const [showOverflow, setShowOverflow] = useState(false); + const toggleShowOverflow = () => setShowOverflow(value => !value); const [highPass, setHighPass] = useState('none'); const [lowPass, setLowPass] = useState('none'); const [refNode, setRefNode] = useState(null); @@ -452,11 +454,12 @@ const SeriesRenderer: FunctionComponent = ({ - + ); @@ -822,7 +825,6 @@ const SeriesRenderer: FunctionComponent = ({ style={{ paddingTop: '15px', paddingBottom: '20px', - textAlign: 'center', }} >
    = ({ }} >
    + = ({ document.addEventListener('mouseup', onMouseUp); R.compose(dragStart, R.nth(0))(v); }, [bounds])} + showOverflow={showOverflow} > Date: Wed, 22 Feb 2023 17:22:55 -0500 Subject: [PATCH 112/126] Fixed capitalization of word --- .../src/series/components/SeriesRenderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 272c9140cc9..b842f3dd535 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -843,7 +843,7 @@ const SeriesRenderer: FunctionComponent = ({ marginRight: '10px', }} onClick={toggleShowOverflow} - value={`${showOverflow ? 'Hide' : 'Show'} overflow`} + value={`${showOverflow ? 'Hide' : 'Show'} Overflow`} /> Date: Thu, 23 Feb 2023 18:23:03 -0500 Subject: [PATCH 113/126] First pass as fixing eslint errors --- .../src/eeglab/EEGLabSeriesProvider.tsx | 11 +- .../src/series/components/AnnotationForm.tsx | 6 +- .../src/series/components/EEGMontage.tsx | 32 ++- .../src/series/components/Epoch.tsx | 2 +- .../src/series/components/EventManager.tsx | 28 ++- .../src/series/components/IntervalSelect.tsx | 34 +-- .../src/series/components/LineChunk.tsx | 7 +- .../series/components/ResponsiveViewer.tsx | 3 +- .../src/series/components/SeriesCursor.tsx | 17 +- .../src/series/components/SeriesRenderer.tsx | 205 ++++++++++++------ .../src/series/store/index.tsx | 2 +- .../series/store/logic/cursorInteraction.tsx | 12 +- .../src/series/store/logic/dragBounds.tsx | 7 + .../src/series/store/logic/fetchChunks.tsx | 19 +- .../src/series/store/logic/filterEpochs.tsx | 20 +- .../src/series/store/logic/timeSelection.tsx | 6 +- .../src/series/store/state/bounds.tsx | 10 +- .../src/series/store/types.tsx | 2 +- 18 files changed, 279 insertions(+), 144 deletions(-) diff --git a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx index 3c2676c0617..7fe1d4e8fd2 100644 --- a/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx +++ b/jsx/react-series-data-viewer/src/eeglab/EEGLabSeriesProvider.tsx @@ -88,10 +88,10 @@ class EEGLabSeriesProvider extends Component { // if request fails don't resolve .catch((error) => { console.error(error); - return new Promise((resolve) => {}); + return Promise.resolve(); })]; } else { - return [new Promise((resolve) => {})]; + return [Promise.resolve()]; } }; @@ -116,11 +116,8 @@ class EEGLabSeriesProvider extends Component { this.store.dispatch(setDomain(timeInterval)); this.store.dispatch(setInterval(DEFAULT_TIME_INTERVAL)); } - } - ) - // ##################### EEGNET OVERRIDE START ################## // - .then(() => { - return events.instances.map(instance => { + }).then(() => { + return events.instances.map((instance) => { const onset = parseFloat(instance.Onset); const duration = parseFloat(instance.Duration); const label = instance.TrialType && instance.TrialType !== 'n/a' ? diff --git a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx index bb275d88a04..682191250ef 100644 --- a/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx +++ b/jsx/react-series-data-viewer/src/series/components/AnnotationForm.tsx @@ -46,6 +46,8 @@ type CProps = { * @param root0.toggleEpoch, * @param root0.updateActiveEpoch, * @param root0.interval + * @param root0.toggleEpoch + * @param root0.updateActiveEpoch */ const AnnotationForm = ({ timeSelection, @@ -65,7 +67,7 @@ const AnnotationForm = ({ const [event, setEvent] = useState<(number | string)[]>( [ startEvent, - endEvent + endEvent, ] ); const [label, setLabel] = useState( @@ -234,7 +236,7 @@ const AnnotationForm = ({ label_name: label, label_description: label, channels: 'all', - description: comment + description: comment, }, }; diff --git a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx index cb053df941b..5381ef9a769 100644 --- a/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx +++ b/jsx/react-series-data-viewer/src/series/components/EEGMontage.tsx @@ -20,6 +20,13 @@ type CProps = { setHidden: (_: number[]) => void, }; +/** + * + * @param root0 + * @param root0.electrodes + * @param root0.hidden + * @param root0.setHidden + */ const EEGMontage = ( { electrodes, @@ -38,12 +45,12 @@ const EEGMontage = ( const [view3D, setView3D] = useState(false); const scale = 1200; - let scatter3D = []; - let scatter2D = []; + const scatter3D = []; + const scatter2D = []; const startAngle = 0; const color = '#000000'; - let point3D = _3d() + const point3D = _3d() .x((d) => d.x) .y((d) => d.y) .z((d) => d.z) @@ -51,12 +58,20 @@ const EEGMontage = ( .rotateX(-startAngle) .scale(scale); + /** + * + * @param v + */ const dragStart = (v: any) => { setDrag(true); setMx(v[0]); setMy(v[1]); }; + /** + * + * @param v + */ const dragged = (v: any) => { if (!drag) return; const beta = (v[0] - mx + mouseX) * -2 * Math.PI; @@ -69,6 +84,10 @@ const EEGMontage = ( setAngleZ(angleZ); }; + /** + * + * @param v + */ const dragEnd = (v: any) => { setDrag( false); setMouseX( v[0] - mx + mouseX); @@ -88,7 +107,6 @@ const EEGMontage = ( * @param {number} y - x coordinate of electrodes on a unit sphere scale * @param {number} z - x coordinate of electrodes on a unit sphere scale * @param {number} scale - Scale to change the projection point.Defaults to 1, which is on the sphere - * * @return {number[]} : x, y positions of electrodes as projected onto a unit circle. */ const stereographicProjection = (x, y, z, scale=1.0) => { @@ -110,6 +128,9 @@ const EEGMontage = ( scatter2D.push({x: x * 150, y: y * 150 / 0.8}); }); + /** + * + */ const Montage3D = () => ( {point3D.rotateZ(angleZ).rotateX(angleX)(scatter3D).map((point, i) => { @@ -128,6 +149,9 @@ const EEGMontage = ( ); + /** + * + */ const Montage2D = () => ( { - // ##################### EEGNET OVERRIDE START ################## // const [epochType, setEpochType] = useState((rightPanel && rightPanel !== 'annotationForm' @@ -67,7 +70,7 @@ const EventManager = ({ if (epochsInRange.length < MAX_RENDERED_EPOCHS) { return epochsInRange.some((index) => { return !filteredEpochs.includes(index); - }) + }); } return true; }); @@ -83,7 +86,7 @@ const EventManager = ({ if (epochsInRange.length < MAX_RENDERED_EPOCHS) { setAllEpochsVisibility(!epochsInRange.some((index) => { return !filteredEpochs.includes(index); - })); // If one or more event isn't visible, set to be able to reveal all + })); // If one or more event isn't visible, set to be able to reveal all } else { setAllEpochsVisibility(false); } @@ -109,6 +112,10 @@ const EventManager = ({ }, [rightPanel]); + /** + * + * @param visible + */ const setEpochsInViewVisibility = (visible) => { if (epochsInRange.length < MAX_RENDERED_EPOCHS) { epochsInRange.map((index) => { @@ -118,7 +125,7 @@ const EventManager = ({ } }); } - } + }; const visibleEpochsInRange = epochsInRange.filter( (epochIndex) => filteredEpochs.includes(epochIndex) @@ -136,7 +143,8 @@ const EventManager = ({ >

    - {`${epochType}s (${visibleEpochsInRange.length}/${epochsInRange.length})`} + {`${epochType}s  + (${visibleEpochsInRange.length}/${epochsInRange.length})`}
    in timeline view [Total: {totalEpochs}] diff --git a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx index ec3a23ed99f..938b650a2b9 100644 --- a/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx +++ b/jsx/react-series-data-viewer/src/series/components/IntervalSelect.tsx @@ -10,8 +10,8 @@ import {Slider, Rail, Handles, Ticks} from 'react-compound-slider'; import {Handle, Tick} from './components'; import React, {useState, FunctionComponent, useRef} from 'react'; import {RootState} from '../store'; -import {DEFAULT_TIME_INTERVAL} from "../../vector"; -import {roundTime} from "../store/logic/timeSelection"; +import {DEFAULT_TIME_INTERVAL} from '../../vector'; +import {roundTime} from '../store/logic/timeSelection'; type CProps = { viewerHeight?: number, @@ -69,9 +69,9 @@ const IntervalSelect: FunctionComponent = ({ const intervalSize = interval[1] - interval[0]; setInterval([ Math.min(domain[1] - intervalSize, interval[0] + increment), - Math.min(domain[1], interval[1] + increment) + Math.min(domain[1], interval[1] + increment), ]); - } + }; /** * @@ -81,9 +81,9 @@ const IntervalSelect: FunctionComponent = ({ const intervalSize = interval[1] - interval[0]; setInterval([ Math.max(domain[0], interval[0] - decrement), - Math.max(domain[0] + intervalSize, interval[1] - decrement) + Math.max(domain[0] + intervalSize, interval[1] - decrement), ]); - } + }; /** * @@ -92,7 +92,7 @@ const IntervalSelect: FunctionComponent = ({ const handleIntervalChange = (event) => { const value = roundTime(parseFloat(event.target.value)); - if (isNaN(value)){ + if (isNaN(value)) { if (event.target.value === '') { if (event.target === lowerBoundInputRef.current) { setInterval([0, interval[1]]); @@ -104,22 +104,24 @@ const IntervalSelect: FunctionComponent = ({ } if (event.target === lowerBoundInputRef.current) { - if (value > interval[1]) { // This condition causes a swap + if (value > interval[1]) { // This condition causes a swap upperBoundInputRef.current.focus(); } - if (value === roundTime(interval[1])) - return; // do nothing if change causes overlap + if (value === roundTime(interval[1])) { +return; +} // do nothing if change causes overlap // Prevent exceeding max, which causes render setInterval([Math.min(value, domain[1]), interval[1]]); } else if (event.target === upperBoundInputRef.current) { - if (value < interval[0]) { // This condition causes a swap + if (value < interval[0]) { // This condition causes a swap lowerBoundInputRef.current.focus(); } - if (value === roundTime(interval[0])) - return; // do nothing if change causes overlap + if (value === roundTime(interval[0])) { +return; +} // do nothing if change causes overlap setInterval([interval[0], value]); } @@ -132,13 +134,13 @@ const IntervalSelect: FunctionComponent = ({ const handleIntervalBlur = (event) => { const value = roundTime(parseFloat(event.target.value)); - if (isNaN(value)){ - setInterval(interval); // Reset + if (isNaN(value)) { + setInterval(interval); // Reset return; } if (interval[0] > interval[1] || interval[1] < interval[0]) { - setInterval([interval[1], interval[0]]); // Invert + setInterval([interval[1], interval[0]]); // Invert } }; diff --git a/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx b/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx index 8727d54936a..5d3afd4d581 100644 --- a/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx +++ b/jsx/react-series-data-viewer/src/series/components/LineChunk.tsx @@ -4,7 +4,7 @@ import {vec2} from 'gl-matrix'; import {Chunk} from '../store/types'; import {LinePath} from '@visx/shape'; import {Group} from '@visx/group'; -import {colorOrder} from "../../color"; +import {colorOrder} from '../../color'; const LineMemo = R.memoizeWith( ({amplitudeScale, filters, channelIndex, traceIndex, @@ -27,7 +27,6 @@ const LineMemo = R.memoizeWith( numChunks, ...rest }) => { - const scales = [ scaleLinear() .domain(interval) @@ -52,7 +51,9 @@ const LineMemo = R.memoizeWith( vectorEffect="non-scaling-stroke" data={points} strokeWidth={1} - stroke={isStacked ? colorOrder(channelIndex.toString()).toString() : '#999'} + stroke={isStacked + ? colorOrder(channelIndex.toString()).toString() + : '#999'} {...rest} /> ); diff --git a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx index 8ecc20fe967..dd42e697713 100644 --- a/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/ResponsiveViewer.tsx @@ -1,8 +1,7 @@ import * as R from 'ramda'; -import React, {FunctionComponent, ReactNode, Children, MutableRefObject} from 'react'; +import React, {FunctionComponent, MutableRefObject} from 'react'; import {scaleLinear} from 'd3-scale'; import {withParentSize} from '@visx/responsive'; -import { WithParentSizeProps } from '@visx/responsive/lib/enhancers/withParentSizeModern'; type CProps = { ref: MutableRefObject, diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx index 1a8f489375f..2ced672dd12 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesCursor.tsx @@ -6,7 +6,7 @@ import {connect} from 'react-redux'; import {MAX_RENDERED_EPOCHS, SIGNAL_SCALE, SIGNAL_UNIT} from '../../vector'; import {MutableRefObject, useEffect} from 'react'; import {RootState} from '../store'; -import {getEpochsInRange} from "../store/logic/filterEpochs"; +import {getEpochsInRange} from '../store/logic/filterEpochs'; type CursorContentProps = { @@ -59,7 +59,7 @@ const SeriesCursor = ( showEvents, enabled, hoveredChannels, - channelMetadata + channelMetadata, }: CProps ) => { if (!cursorPosition) return null; @@ -165,7 +165,7 @@ const SeriesCursor = (

    {channelName}: {Math.round(chunkValue)} {SIGNAL_UNIT} @@ -183,7 +183,9 @@ const SeriesCursor = ( const EpochMarker = () => { const visibleEpochs = getEpochsInRange(epochs, interval, 'Event'); if (visibleEpochs - .filter((index) => { filteredEpochs.includes(index) }) + .filter((index) => { + filteredEpochs.includes(index); +}) .length > MAX_RENDERED_EPOCHS ) { return null; @@ -253,6 +255,8 @@ const computeValue = (chunk, time) => { * @param root0.channel * @param root0.contentIndex * @param root0.showEvents + * @param root0.hoveredChannels + * @param root0.channelMetadata */ const CursorContent = ( { @@ -261,10 +265,9 @@ const CursorContent = ( contentIndex, showEvents, hoveredChannels, - channelMetadata + channelMetadata, }: CursorContentProps ) => { - return (
    {channel.traces.map((trace, i) => { @@ -284,7 +287,7 @@ const CursorContent = ( color: `${hoveredChannels.includes(channel.index) ? colorOrder(channel.index.toString()) : '#333' - }` + }`, }} > {channelMetadata[channel.index].name}:  diff --git a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index b842f3dd535..e12a63c3cac 100644 --- a/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -11,7 +11,7 @@ import {vec2} from 'gl-matrix'; import {Group} from '@visx/group'; import {connect} from 'react-redux'; import {scaleLinear, ScaleLinear} from 'd3-scale'; -import {colorOrder} from "../../color"; +import {colorOrder} from '../../color'; import { MAX_RENDERED_EPOCHS, DEFAULT_MAX_CHANNELS, @@ -65,9 +65,9 @@ import { AnnotationMetadata, } from '../store/types'; import {setCurrentAnnotation} from '../store/state/currentAnnotation'; -import {setCursorInteraction} from "../store/logic/cursorInteraction"; -import {setHoveredChannels} from "../store/state/cursor"; -import {getEpochsInRange} from "../store/logic/filterEpochs"; +import {setCursorInteraction} from '../store/logic/cursorInteraction'; +import {setHoveredChannels} from '../store/state/cursor'; +import {getEpochsInRange} from '../store/logic/filterEpochs'; type CProps = { ref: MutableRefObject, @@ -105,7 +105,7 @@ type CProps = { physioFileID: number, annotationMetadata: AnnotationMetadata, hoveredChannels: number[], - setHoveredChannels: (_: number[]) => void, + setHoveredChannels: (_: number[]) => void, }; /** @@ -182,7 +182,7 @@ const SeriesRenderer: FunctionComponent = ({ physioFileID, annotationMetadata, hoveredChannels, - setHoveredChannels + setHoveredChannels, }) => { if (channels.length === 0) return null; @@ -192,8 +192,11 @@ const SeriesRenderer: FunctionComponent = ({ Math.floor(Math.log10(interval[1] - interval[0])) - 1, -1 ) - ); // Scale to interval size + ); // Scale to interval size + /** + * + */ const zoomIn = () => { const currentInterval = interval[1] - interval[0]; let zoomInterval = intervalChange; @@ -205,12 +208,18 @@ const SeriesRenderer: FunctionComponent = ({ } setInterval([interval[0] + zoomInterval, interval[1] - zoomInterval]); - } + }; + /** + * + */ const zoomOut = () => { setInterval([interval[0] - intervalChange, interval[1] + intervalChange]); - } + }; + /** + * + */ const zoomReset = () => { const defaultInterval = DEFAULT_TIME_INTERVAL[1] - DEFAULT_TIME_INTERVAL[0]; const currentMidpoint = (interval[0] + interval[1]) / 2; @@ -229,55 +238,70 @@ const SeriesRenderer: FunctionComponent = ({ setInterval([ Math.max(lowerBound, domain[0]), - Math.min(upperBound, domain[1]) + Math.min(upperBound, domain[1]), ]); - } + }; const selectionCanBeZoomedTo = timeSelection && Math.abs(timeSelection[1] - timeSelection[0]) >= 0.1; + /** + * + */ const zoomToSelection = () => { if (selectionCanBeZoomedTo) { setInterval([ Math.min(timeSelection[0], timeSelection[1]), - Math.max(timeSelection[0], timeSelection[1]) + Math.max(timeSelection[0], timeSelection[1]), ]); } - } + }; const viewerRef = useRef(null); const cursorRef = useRef(null); // Memoized to singal which vars are to be read from - const memoizedCallback = useCallback(() => {}, [ - offsetIndex, interval, limit, timeSelection, amplitudeScale + const memoizedCallback = useCallback(null, [ + offsetIndex, interval, limit, timeSelection, amplitudeScale, ]); useEffect(() => { // Keypress handler + /** + * + * @param e + */ const keybindHandler = (e) => { if (cursorRef.current) { // Cursor is on page / focus - if (["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].indexOf(e.code) > -1) { + if ([ + 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', + ].indexOf(e.code) > -1) { e.preventDefault(); // Make sure arrows don't scroll const intervalSize = interval[1] - interval[0]; switch (e.code) { - case "ArrowUp": + case 'ArrowUp': setOffsetIndex(offsetIndex - limit); break; - case "ArrowDown": + case 'ArrowDown': setOffsetIndex(offsetIndex + limit); break; - case "ArrowRight": + case 'ArrowRight': setInterval([ - Math.min(Math.ceil(domain[1]) - intervalSize, interval[0] + intervalSize), - Math.min(Math.ceil(domain[1]), interval[1] + intervalSize) + Math.min( + Math.ceil(domain[1]) - intervalSize, + interval[0] + intervalSize + ), + Math.min(Math.ceil(domain[1]), interval[1] + intervalSize), ]); break; - case "ArrowLeft": + case 'ArrowLeft': setInterval([ Math.max(Math.floor(domain[0]), interval[0] - intervalSize), - Math.max(Math.floor(domain[0]) + intervalSize, interval[1] - intervalSize) + Math.max( + Math.floor(domain[0]) + intervalSize, + interval[1] - intervalSize + ), ]); break; default: @@ -295,8 +319,9 @@ const SeriesRenderer: FunctionComponent = ({ toggleStackedView(); break; case 'KeyS': - if (stackedView) - toggleSingleMode(); + if (stackedView) { +toggleSingleMode(); +} break; } } @@ -323,20 +348,20 @@ const SeriesRenderer: FunctionComponent = ({ case 'Equal': // This key combination is '+' zoomIn(); break; - case 'KeyN': // Lower amplitude scale + case 'KeyN': // Lower amplitude scale setAmplitudesScale(1.1); break; - case 'KeyM': // Increase amplitude scale + case 'KeyM': // Increase amplitude scale setAmplitudesScale(0.9); break; } } - } + }; window.addEventListener('keydown', keybindHandler); return function cleanUp() { // Prevent multiple listeners window.removeEventListener('keydown', keybindHandler); - } + }; }, [memoizedCallback]); useEffect(() => { @@ -352,6 +377,11 @@ const SeriesRenderer: FunctionComponent = ({ const prevHoveredChannels = useRef([]); const defaultLineColor = '#999'; + /** + * + * @param channelIndex + * @param colored + */ const setLineColor = (channelIndex: number, colored: boolean) => { const classString = `.visx-linepath.channel-${channelIndex}`; document.querySelectorAll(classString).forEach((line) => { @@ -369,12 +399,13 @@ const SeriesRenderer: FunctionComponent = ({ : '1' ); }); - } + }; useEffect(() => { hoveredChannels.forEach((channelIndex) => { - if (prevHoveredChannels.current.includes(channelIndex)) - return; + if (prevHoveredChannels.current.includes(channelIndex)) { +return; +} setLineColor(channelIndex, true); }); @@ -384,20 +415,23 @@ const SeriesRenderer: FunctionComponent = ({ } }); - prevHoveredChannels.current = hoveredChannels + prevHoveredChannels.current = hoveredChannels; }, [hoveredChannels]); - const [numDisplayedChannels, setNumDisplayedChannels] = useState(DEFAULT_MAX_CHANNELS); + const [ + numDisplayedChannels, + setNumDisplayedChannels, + ] = useState(DEFAULT_MAX_CHANNELS); const [cursorEnabled, setCursorEnabled] = useState(false); - const toggleCursor = () => setCursorEnabled(value => !value); + const toggleCursor = () => setCursorEnabled((value) => !value); const [DCOffsetView, setDCOffsetView] = useState(true); - const toggleDCOffsetView = () => setDCOffsetView(value => !value); + const toggleDCOffsetView = () => setDCOffsetView((value) => !value); const [stackedView, setStackedView] = useState(false); - const toggleStackedView = () => setStackedView(value => !value); + const toggleStackedView = () => setStackedView((value) => !value); const [singleMode, setSingleMode] = useState(false); - const toggleSingleMode = () => setSingleMode(value => !value); + const toggleSingleMode = () => setSingleMode((value) => !value); const [showOverflow, setShowOverflow] = useState(false); - const toggleShowOverflow = () => setShowOverflow(value => !value); + const toggleShowOverflow = () => setShowOverflow((value) => !value); const [highPass, setHighPass] = useState('none'); const [lowPass, setLowPass] = useState('none'); const [refNode, setRefNode] = useState(null); @@ -438,7 +472,7 @@ const SeriesRenderer: FunctionComponent = ({ ]; const filteredChannels = channels.filter((_, i) => !hidden.includes(i)); - const showAxisScaleLines = false; // Visibility state of y-axis scale lines + const showAxisScaleLines = false; // Visibility state of y-axis scale lines /** * @@ -465,6 +499,9 @@ const SeriesRenderer: FunctionComponent = ({ ); }; + /** + * + */ const EpochsLayer = () => { const epochType = rightPanel === 'eventList' ? 'Event' @@ -473,11 +510,12 @@ const SeriesRenderer: FunctionComponent = ({ : null ; const visibleEpochs = getEpochsInRange(epochs, interval, epochType); - const minEpochWidth = (interval[1] - interval[0]) * MIN_EPOCH_WIDTH / DEFAULT_TIME_INTERVAL[1]; + const minEpochWidth = (interval[1] - interval[0]) * + MIN_EPOCH_WIDTH / DEFAULT_TIME_INTERVAL[1]; return ( - {// ##################### EEGNET OVERRIDE START ################## // + { visibleEpochs.length < MAX_RENDERED_EPOCHS && visibleEpochs.map((index) => { return filteredEpochs.includes(index) && ( @@ -563,7 +601,9 @@ const SeriesRenderer: FunctionComponent = ({ !cursorRef.current && stackedView && singleMode && hoveredChannels.length > 0 ) - ? filteredChannels.filter((channel) => hoveredChannels.includes(channel.index)) + ? filteredChannels.filter( + (channel) => hoveredChannels.includes(channel.index) + ) : filteredChannels; return ( @@ -591,7 +631,8 @@ const SeriesRenderer: FunctionComponent = ({ vec2.fromValues( 0, stackedView && !singleMode - ? (numDisplayedChannels - 2) * diagonal[1] / (2 * numDisplayedChannels) + ? (numDisplayedChannels - 2) * + diagonal[1] / (2 * numDisplayedChannels) : (i * diagonal[1]) / numDisplayedChannels ) ); @@ -603,7 +644,8 @@ const SeriesRenderer: FunctionComponent = ({ vec2.fromValues( diagonal[0], stackedView && !singleMode - ? (numDisplayedChannels + 2) * diagonal[1] / (2 * numDisplayedChannels) + ? (numDisplayedChannels + 2) * + diagonal[1] / (2 * numDisplayedChannels) : ((i + 1) * diagonal[1]) / numDisplayedChannels ) ); @@ -616,23 +658,32 @@ const SeriesRenderer: FunctionComponent = ({ return ( channel.traces.map((trace, j) => { - const numChunks = trace.chunks.filter((chunk) => chunk.values.length > 0).length; + const numChunks = trace.chunks.filter( + (chunk) => chunk.values.length > 0 + ).length; const valuesInView = trace.chunks.map((chunk) => { let includedIndices = [0, chunk.values.length]; if (chunk.interval[0] < interval[0]) { - const startIndex = chunk.values.length * (interval[0] - chunk.interval[0]) / (chunk.interval[1] - chunk.interval[0]); + const startIndex = chunk.values.length * + (interval[0] - chunk.interval[0]) / + (chunk.interval[1] - chunk.interval[0]); includedIndices = [startIndex, includedIndices[1]]; } if (chunk.interval[1] > interval[1]) { - const endIndex = chunk.values.length * (interval[1] - chunk.interval[0]) / (chunk.interval[1] - chunk.interval[0]); + const endIndex = chunk.values.length * + (interval[1] - chunk.interval[0]) / + (chunk.interval[1] - chunk.interval[0]); includedIndices = [includedIndices[0], endIndex]; } - return chunk.values.slice(includedIndices[0], includedIndices[1]); + return chunk.values.slice( + includedIndices[0], includedIndices[1] + ); }).flat(); - if (valuesInView.length === 0) - return; + if (valuesInView.length === 0) { +return; +} const seriesRange: [number, number] = STATIC_SERIES_RANGE; @@ -649,7 +700,7 @@ const SeriesRenderer: FunctionComponent = ({ stackedView ? [ -viewerHeight / (2 * numDisplayedChannels), - viewerHeight / (2 * numDisplayedChannels) + viewerHeight / (2 * numDisplayedChannels), ] : [subTopLeft[1], subBottomRight[1]] ), @@ -659,6 +710,10 @@ const SeriesRenderer: FunctionComponent = ({ .domain(seriesRange.map((x) => x * amplitudeScale)) .range([-0.5, 0.5]); + /** + * + * @param values + */ const getScaledMean = (values) => { let numValues = values.length; return values.reduce((a, b) => { @@ -667,8 +722,8 @@ const SeriesRenderer: FunctionComponent = ({ return a; } return a + scaleByAmplitude(b); - }, 0) / numValues - } + }, 0) / numValues; + }; const DCOffset = DCOffsetView ? getScaledMean(valuesInView) @@ -693,7 +748,7 @@ const SeriesRenderer: FunctionComponent = ({ numChunks={numChunks} /> )) - ) + ); }) ); })} @@ -709,7 +764,10 @@ const SeriesRenderer: FunctionComponent = ({ */ const onMouseMove = (v : MouseEvent) => { if (bounds === null || bounds === undefined) return; - const x = Math.min(1, Math.max(0, (v.pageX - bounds.left)/bounds.width)); + const x = Math.min( + 1, + Math.max(0, (v.pageX - bounds.left)/bounds.width) + ); return (dragContinue)(x); }; @@ -730,10 +788,10 @@ const SeriesRenderer: FunctionComponent = ({ * @param e */ const handleChannelChange = (e) => { - let numChannels = parseInt(e.target.value, 10); - setNumDisplayedChannels(numChannels); // This one is the frontend controller + const numChannels = parseInt(e.target.value, 10); + setNumDisplayedChannels(numChannels); // This one is the frontend controller setDatasetMetadata({limit: numChannels}); // Will trigger re-render to the store - setOffsetIndex(offsetIndex); // Will include new channels on limit increase + setOffsetIndex(offsetIndex); // Will include new channels on limit increase setViewerHeight( numChannels > 4 ? DEFAULT_VIEWER_HEIGHT @@ -818,7 +876,7 @@ const SeriesRenderer: FunctionComponent = ({
    = ({ > Displaying:  - {CHANNEL_DISPLAY_OPTIONS.map((numChannels) => { - return ; + return ; })};  Showing channels  @@ -1004,7 +1069,9 @@ const SeriesRenderer: FunctionComponent = ({ paddingRight: '0px', }} >{/* Below slice changes labels to be subset of channel choice */} - {filteredChannels.slice(0, numDisplayedChannels).map((channel) => ( + {filteredChannels + .slice(0, numDisplayedChannels) + .map((channel) => (
    = ({ height: 1 / numDisplayedChannels * 100 + '%', alignItems: 'center', cursor: 'default', - color: `${stackedView || hoveredChannels.includes(channel.index) + color: `${stackedView || + hoveredChannels.includes(channel.index) ? colorOrder(channel.index.toString()) : '#333'}`, - fontWeight: `${stackedView && hoveredChannels.includes(channel.index) + fontWeight: `${stackedView && + hoveredChannels.includes(channel.index) ? 'bold' : 'normal'}`, }} @@ -1073,7 +1142,7 @@ const SeriesRenderer: FunctionComponent = ({ mouseMove={useCallback((cursor: [number, number]) => { setCursor({ cursorPosition: [cursor[0], cursor[1]], - viewerRef: viewerRef + viewerRef: viewerRef, }); }, [])} mouseDown={useCallback((v: Vector2) => { @@ -1144,7 +1213,7 @@ const SeriesRenderer: FunctionComponent = ({ style={{ width: '65px', marginTop: '3px', - visibility: stackedView ? 'visible' : 'hidden' + visibility: stackedView ? 'visible' : 'hidden', }} onClick={toggleSingleMode} value={`${singleMode ? 'Standard' : 'Isolate'}`} @@ -1266,7 +1335,7 @@ export default connect( limit: state.dataset.limit, domain: state.bounds.domain, physioFileID: state.dataset.physioFileID, - hoveredChannels: state.cursor.hoveredChannels + hoveredChannels: state.cursor.hoveredChannels, }), (dispatch: (_: any) => void) => ({ setOffsetIndex: R.compose( diff --git a/jsx/react-series-data-viewer/src/series/store/index.tsx b/jsx/react-series-data-viewer/src/series/store/index.tsx index 38aa248fd68..6446ad84fda 100644 --- a/jsx/react-series-data-viewer/src/series/store/index.tsx +++ b/jsx/react-series-data-viewer/src/series/store/index.tsx @@ -27,7 +27,7 @@ import { createLowPassFilterEpic, createHighPassFilterEpic, } from './logic/highLowPass'; -import {createCursorInteractionEpic} from "./logic/cursorInteraction"; +import {createCursorInteractionEpic} from './logic/cursorInteraction'; export const rootReducer = combineReducers({ bounds: boundsReducer, diff --git a/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx b/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx index d4ee08ea077..cec4ed7cd7f 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/cursorInteraction.tsx @@ -3,8 +3,8 @@ import {Observable} from 'rxjs'; import * as Rx from 'rxjs/operators'; import {ofType} from 'redux-observable'; import {createAction} from 'redux-actions'; -import {setCursor, setHoveredChannels} from "../state/cursor"; -import {Cursor} from "../types"; +import {setCursor, setHoveredChannels} from '../state/cursor'; +import {Cursor} from '../types'; export const SET_CURSOR_INTERACTION = 'SET_CURSOR_INTERACTION'; export const setCursorInteraction = createAction(SET_CURSOR_INTERACTION); @@ -26,7 +26,6 @@ export const createCursorInteractionEpic = (fromState: (_: any) => any) => ( Rx.map(R.prop('payload')), Rx.withLatestFrom(state$), Rx.map<[Cursor, any], any>(([cursor, state]) => { - const channelElements = getChannelsAtCursor( cursor ? cursor.cursorPosition : null, cursor ? cursor.viewerRef : null @@ -42,8 +41,11 @@ export const createCursorInteractionEpic = (fromState: (_: any) => any) => ( return (dispatch) => { dispatch(setCursor(cursor ? cursor.cursorPosition : null)); - if (JSON.stringify(hoveredChannels) !== JSON.stringify(channelIndices)) + if ( + JSON.stringify(hoveredChannels) !== JSON.stringify(channelIndices) + ) { dispatch(setHoveredChannels(channelIndices)); + } }; }) ); @@ -72,4 +74,4 @@ const getChannelsAtCursor = (cursorPosition, viewerRef) => { (cursorPosition[0] * width) + left, (cursorPosition[1] * height) + top ).filter((element) => element.tagName === 'path'); -} +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx b/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx index e9fd4ae1ac0..d209df79c6f 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx @@ -25,6 +25,7 @@ export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; /** * createDragBoundsEpic * + * @param fromState * @returns {Observable} - A stream of actions */ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( @@ -43,6 +44,12 @@ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( const endDrag$ = action$.pipe(ofType(END_DRAG_INTERVAL)); + /** + * + * @param root0 + * @param root0."0" + * @param root0."1" + */ const computeNewInterval = ([selection, _]) => setInterval(selection); const startUpdates$ = startDrag$.pipe( diff --git a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx index ef8355068a2..8740c025f4e 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/fetchChunks.tsx @@ -115,7 +115,8 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( return ( channel && channel.traces.map((_, traceIndex) => { - const shapeChunks = shapes.map((shape) => shape[shape.length - 2]); + const shapeChunks = + shapes.map((shape) => shape[shape.length - 2]); const chunkIntervals = shapeChunks .map((numChunks, downsampling) => { @@ -123,13 +124,19 @@ export const createFetchChunksEpic = (fromState: (any) => State) => ( timeInterval[1] - timeInterval[0] ); const i0 = - (numChunks * Math.floor(bounds.interval[0] - bounds.domain[0])) / - recordingDuration; + (numChunks * + Math.floor(bounds.interval[0] - bounds.domain[0]) + ) / recordingDuration; const i1 = - (numChunks * Math.ceil(bounds.interval[1] - bounds.domain[0])) / - recordingDuration; + (numChunks * + Math.ceil(bounds.interval[1] - bounds.domain[0]) + ) / recordingDuration; return { - interval: [Math.floor(i0), Math.min(Math.ceil(i1), numChunks)], + interval: + [ + Math.floor(i0), + Math.min(Math.ceil(i1), numChunks), + ], numChunks: numChunks, downsampling, }; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index d05c7d66897..182a5e43eb5 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -116,7 +116,19 @@ export const createActiveEpochEpic = (fromState: (_: any) => any) => ( }; -export const getEpochsInRange = (epochs, interval, epochType, withComments = false) => { +/** + * + * @param epochs + * @param interval + * @param epochType + * @param withComments + */ +export const getEpochsInRange = ( + epochs, + interval, + epochType, + withComments = false, +) => { return [...Array(epochs.length).keys()].filter((index) => ( (isNaN(epochs[index].onset) && interval[0] === 0) @@ -125,8 +137,6 @@ export const getEpochsInRange = (epochs, interval, epochType, withComments = fal epochs[index].onset + epochs[index].duration > interval[0] && epochs[index].onset < interval[1] ) - ) && - epochs[index].type === epochType && - (!withComments || epochs[index].hed || epochs[index].comment) + ) && epochs[index].type ); -} +}; diff --git a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx index 3147047f7e6..075aa8e1a37 100644 --- a/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx +++ b/jsx/react-series-data-viewer/src/series/store/logic/timeSelection.tsx @@ -27,7 +27,7 @@ export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; */ export const roundTime = (value, decimals = 3) => { return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals); -} +}; /** * createTimeSelectionEpic @@ -84,7 +84,9 @@ export const createTimeSelectionEpic = (fromState: (_: any) => any) => ( Rx.map(([, state]) => { if ( state.timeSelection - && (Math.abs(state.timeSelection[1] - state.timeSelection[0]) < MIN_INTERVAL) + && ( + Math.abs(state.timeSelection[1] - state.timeSelection[0] + ) < MIN_INTERVAL) ) { return setTimeSelection(null); } else { diff --git a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx index 87988907759..8cfe866adb9 100644 --- a/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx +++ b/jsx/react-series-data-viewer/src/series/store/state/bounds.tsx @@ -1,6 +1,5 @@ import {createAction} from 'redux-actions'; -import {act} from "react-dom/test-utils"; -import {DEFAULT_VIEWER_HEIGHT} from "../../../vector"; +import {DEFAULT_VIEWER_HEIGHT} from '../../../vector'; export const SET_INTERVAL = 'SET_INTERVAL'; export const setInterval = createAction(SET_INTERVAL); @@ -46,7 +45,7 @@ const interval = ( if (action && action.type === 'SET_INTERVAL') { return [ Math.min(action.payload[0], action.payload[1]), - Math.max(action.payload[0], action.payload[1]) + Math.max(action.payload[0], action.payload[1]), ]; } return state; @@ -104,7 +103,10 @@ const viewerWidth = (state = 400, action?: Action): number => { * @param {Action} action - The action * @returns {State} - The updated state */ -const viewerHeight = (state = DEFAULT_VIEWER_HEIGHT, action?: Action): number => { +const viewerHeight = ( + state = DEFAULT_VIEWER_HEIGHT, + action?: Action +): number => { if (action && action.type === 'SET_VIEWER_HEIGHT') { return action.payload; } diff --git a/jsx/react-series-data-viewer/src/series/store/types.tsx b/jsx/react-series-data-viewer/src/series/store/types.tsx index 8bbea84d17b..cd826e781ee 100644 --- a/jsx/react-series-data-viewer/src/series/store/types.tsx +++ b/jsx/react-series-data-viewer/src/series/store/types.tsx @@ -1,4 +1,4 @@ -import {MutableRefObject} from "react"; +import {MutableRefObject} from 'react'; export type Chunk = { index: number, From f592cee0cab2c5aa03467bd052ce77127eff8e57 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 24 Feb 2023 16:31:18 -0500 Subject: [PATCH 114/126] Fixed lint errors --- .../src/series/store/logic/dragBounds.tsx | 9 +++++---- .../src/series/store/logic/filterEpochs.tsx | 10 ++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx index d209df79c6f..4b64d5d5cf0 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx @@ -25,7 +25,7 @@ export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; /** * createDragBoundsEpic * - * @param fromState + * @param {Function} fromState - A function to parse the current state * @returns {Observable} - A stream of actions */ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( @@ -45,10 +45,11 @@ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( const endDrag$ = action$.pipe(ofType(END_DRAG_INTERVAL)); /** + * computeNewInterval * - * @param root0 - * @param root0."0" - * @param root0."1" + * @param root0 - Payload + * @param root0."0" - Interval + * @param root0."1" - Unused */ const computeNewInterval = ([selection, _]) => setInterval(selection); diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index 0588ccf6db5..c69712a32cb 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -116,11 +116,13 @@ export const createActiveEpochEpic = (fromState: (_: any) => any) => ( }; /** + * getEpochsInRange * - * @param epochs - * @param interval - * @param epochType - * @param withComments + * @param {Epoch[]} epochs - Array of epoch + * @param {[number, number]} interval - Time interval to search + * @param {string} epochType - Epoch type (Annotation|Event) + * @param {boolean} withComments - Include only if has comments + * @returns {Epoch[]} - Epoch[] in interval with epochType */ export const getEpochsInRange = ( epochs, From b6598d961ab174bea19c4daa316d459c2d8cf9fe Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 24 Feb 2023 16:33:10 -0500 Subject: [PATCH 115/126] Fixed lint errors --- .../src/series/store/logic/dragBounds.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx index 4b64d5d5cf0..b45de4c5c4c 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx @@ -50,6 +50,7 @@ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( * @param root0 - Payload * @param root0."0" - Interval * @param root0."1" - Unused + * @returns {void} */ const computeNewInterval = ([selection, _]) => setInterval(selection); From b15cd8f974e132d5e36f137ab9fd1d48c7389b09 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 24 Feb 2023 16:31:18 -0500 Subject: [PATCH 116/126] Fixed lint errors --- .../src/series/store/logic/dragBounds.tsx | 10 ++++++---- .../src/series/store/logic/filterEpochs.tsx | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx index d209df79c6f..b45de4c5c4c 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/dragBounds.tsx @@ -25,7 +25,7 @@ export type Action = BoundsAction | { type: 'UPDATE_VIEWED_CHUNKS' }; /** * createDragBoundsEpic * - * @param fromState + * @param {Function} fromState - A function to parse the current state * @returns {Observable} - A stream of actions */ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( @@ -45,10 +45,12 @@ export const createDragBoundsEpic = (fromState: (any) => BoundsState) => ( const endDrag$ = action$.pipe(ofType(END_DRAG_INTERVAL)); /** + * computeNewInterval * - * @param root0 - * @param root0."0" - * @param root0."1" + * @param root0 - Payload + * @param root0."0" - Interval + * @param root0."1" - Unused + * @returns {void} */ const computeNewInterval = ([selection, _]) => setInterval(selection); diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index 0588ccf6db5..c69712a32cb 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -116,11 +116,13 @@ export const createActiveEpochEpic = (fromState: (_: any) => any) => ( }; /** + * getEpochsInRange * - * @param epochs - * @param interval - * @param epochType - * @param withComments + * @param {Epoch[]} epochs - Array of epoch + * @param {[number, number]} interval - Time interval to search + * @param {string} epochType - Epoch type (Annotation|Event) + * @param {boolean} withComments - Include only if has comments + * @returns {Epoch[]} - Epoch[] in interval with epochType */ export const getEpochsInRange = ( epochs, From 60095fe009368d4e292514d14c700ab7c5724d0c Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 24 Feb 2023 16:46:50 -0500 Subject: [PATCH 117/126] Fixed css file --- .../css/electrophysiology_browser.css | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/modules/electrophysiology_browser/css/electrophysiology_browser.css b/modules/electrophysiology_browser/css/electrophysiology_browser.css index b00ea4d4564..65688ebbd6b 100644 --- a/modules/electrophysiology_browser/css/electrophysiology_browser.css +++ b/modules/electrophysiology_browser/css/electrophysiology_browser.css @@ -168,4 +168,60 @@ svg:not(:root) { #eegSidebar { top: 0; + bottom: 0; + left: 0; + height: calc(100%); + position: fixed; +} + +#page.eegBrowser { + vertical-align: top; + position: relative; + width: auto; +} + +/* Custom, iPhone Retina */ +@media only screen and (min-width : 320px) { + .pagination-nav { + padding-top: 8px; + } + + #eegSidebar { + display: none; + } +} + +/* Extra Small Devices, Phones */ +@media only screen and (min-width : 480px) { + +} + +/* Small Devices, Tablets */ +@media only screen and (min-width : 768px) { + #eegSidebar { + display: block; + } + + #page.eegBrowser { + margin-left: 150px; + } +} + +/* Medium Devices, Desktops */ +@media only screen and (min-width : 992px) { + .event-list { + margin-top: 40px; + margin-bottom: 0; + } +} + +/* Large Devices, Wide Screens */ +@media only screen and (min-width : 1200px) { + .pull-right-lg { + text-align: right; + } + + .pagination-nav { + padding-top: 0; + } } From 652f8016340ba50bd4679f6b7bc9f84a3abc1fb2 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Tue, 28 Feb 2023 15:01:59 -0500 Subject: [PATCH 118/126] Re-added truncated snippet --- .../src/series/store/logic/filterEpochs.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx index c69712a32cb..4d59f84c57b 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/store/logic/filterEpochs.tsx @@ -138,6 +138,8 @@ export const getEpochsInRange = ( epochs[index].onset + epochs[index].duration > interval[0] && epochs[index].onset < interval[1] ) - ) && epochs[index].type + ) && + epochs[index].type === epochType && + (!withComments || epochs[index].hed || epochs[index].comment) ); }; From 21ec40c148c9b5213129f3f82629046d2e7a1136 Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 3 Mar 2023 14:25:17 -0500 Subject: [PATCH 119/126] Minor UI changes --- .../src/series/components/SeriesRenderer.tsx | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx index 0bf46aefbf7..d7256d1c0f8 100644 --- a/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx +++ b/modules/electrophysiology_browser/jsx/react-series-data-viewer/src/series/components/SeriesRenderer.tsx @@ -885,7 +885,7 @@ const SeriesRenderer: FunctionComponent = ({ }} >
    = ({
    - setAmplitudesScale(1.1)} value='-' @@ -917,7 +907,7 @@ const SeriesRenderer: FunctionComponent = ({ /> setAmplitudesScale(0.9)} value='+' @@ -986,18 +976,28 @@ const SeriesRenderer: FunctionComponent = ({ )}
    +
    - + Displaying:  -  Showing channels  +  Showing:  { const value = parseInt(e.target.value); From 8924a0f21c2361f7fc4c625a6b7a6d584491d7ba Mon Sep 17 00:00:00 2001 From: jeffersoncasimir Date: Fri, 3 Mar 2023 14:27:44 -0500 Subject: [PATCH 120/126] Modified README to reflect new changes --- .../images/event-panel.png | Bin 199659 -> 347675 bytes .../images/older_images/event-panel.png | Bin 0 -> 199659 bytes .../images/older_images/overall-view.png | Bin 0 -> 338560 bytes .../older_images/signal-values-details.png | Bin 0 -> 258713 bytes .../images/older_images/signal-values.png | Bin 0 -> 213578 bytes .../images/overall-view.png | Bin 338560 -> 411921 bytes .../images/signal-isolated.png | Bin 0 -> 109862 bytes .../images/signal-stacked.png | Bin 0 -> 166407 bytes .../images/signal-values-details.png | Bin 258713 -> 444534 bytes .../images/signal-values.png | Bin 213578 -> 379563 bytes .../jsx/react-series-data-viewer/README.md | 47 ++++++++++++++---- 11 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 modules/electrophysiology_browser/images/older_images/event-panel.png create mode 100644 modules/electrophysiology_browser/images/older_images/overall-view.png create mode 100644 modules/electrophysiology_browser/images/older_images/signal-values-details.png create mode 100644 modules/electrophysiology_browser/images/older_images/signal-values.png create mode 100644 modules/electrophysiology_browser/images/signal-isolated.png create mode 100644 modules/electrophysiology_browser/images/signal-stacked.png diff --git a/modules/electrophysiology_browser/images/event-panel.png b/modules/electrophysiology_browser/images/event-panel.png index 0e2255672522bc7286c25997bda7dc4c5474b11b..f4415f5974f47b8bf1121d8983a1411f9f94231c 100644 GIT binary patch literal 347675 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�O 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 `JVs?9O4o>9@}Md+_!0PsobHqtuI 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