diff --git a/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css b/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css
index 5c6a57033..00d134422 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css
+++ b/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css
@@ -1,258 +1,258 @@
-.mailto {
-  box-sizing: border-box;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 100%;
-  height: 100%;
-  padding: 10px;
-  color: #333;
-  background: #f2f2f2;
-  height: 100% p;
-    height-font-size: 16px;
-    height-line-height: 1.6em; }
-  .mailto .button {
-    border: 1px solid #6576a8;
-    background: #6d85ad;
-    border: 0;
-    outline: 0;
-    font-weight: bold;
-    text-transform: uppercase;
-    text-decoration: none;
-    letter-spacing: 1px;
-    color: #fff;
-    cursor: pointer; }
-    .mailto .button:hover {
-      background: #9cb8d9; }
-    .mailto .button:active {
-      background: #6576a8; }
-  .mailto .button--large {
-    position: relative;
-    padding: 15px 30px;
-    border-radius: 5px;
-    font-size: 16px; }
-    .mailto .button--large:active {
-      top: 1px; }
-  .mailto .content {
-    max-width: 350px;
-    text-align: center; }
-  .mailto .email {
-    position: relative; }
-
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,500,300,700);
 body {
   overflow: hidden;
   background: rgba(255, 255, 255, 0.9);
   font-family: 'Roboto', sans-serif; }
 
 html,
 body,
 .box-wrapper {
   width: 100%;
   height: 100%;
   margin: 0; }
 
 .box-wrapper {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-orient: vertical;
   -webkit-box-direction: normal;
   -ms-flex-direction: column;
   flex-direction: column;
   -ms-flex-wrap: wrap;
   flex-wrap: wrap; }
 
 .box-wrapper > .box {
   margin-top: 1%;
   width: 100%;
   transition: all .2s ease; }
   .box-wrapper > .box .hideextra {
     white-space: nowrap;
     overflow: hidden;
     text-overflow: ellipsis; }
   .box-wrapper > .box section {
     margin: 20 0 6 0; }
     .box-wrapper > .box section .v-full {
       height: 90vh; }
     .box-wrapper > .box section .v-full > table {
       padding-bottom: 10%; }
     .box-wrapper > .box section .v-min {
       height: 100px; }
     .box-wrapper > .box section .v-min > table {
       padding-bottom: 1%; }
     .box-wrapper > .box section .tbl-content {
       overflow: auto;
       margin-top: 0px;
       border: 1px solid rgba(98, 108, 146, 0.3); }
   .box-wrapper > .box table {
     width: 100%;
     table-layout: fixed; }
     .box-wrapper > .box table .tbl-header {
       background-color: rgba(98, 108, 146, 0.3); }
       .box-wrapper > .box table .tbl-header div.tbl-header {
         max-width: 5rem; }
     .box-wrapper > .box table tr {
       background: white;
       cursor: pointer; }
       .box-wrapper > .box table tr:hover {
         background: rgba(98, 108, 146, 0.3) !important; }
       .box-wrapper > .box table tr:nth-child(odd) {
         background: rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table th {
       padding: 2px 4px 4px 2px;
       text-align: left;
       font-weight: 500;
       font-size: .75rem;
       color: #626C92;
       text-transform: uppercase;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table td {
       transition: all .5s ease;
       padding: 2px;
       text-align: left;
       vertical-align: top;
       font-weight: 300;
       font-size: 12px;
       color: black;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
 
 .circle-pagination {
   position: absolute;
   z-index: 1000;
   list-style-type: none;
   margin: 0;
   top: -.3rem; }
   .circle-pagination li {
     border-radius: 50%;
     border: 2px solid #626C92;
     width: 12px;
     height: 12px;
     padding: 4px;
     margin: 6px;
     cursor: pointer;
     float: left;
     transition: all .2s ease; }
     .circle-pagination li.active, .circle-pagination li:hover {
       background: #626C92;
       width: 14px;
       height: 14px; }
     .circle-pagination li.active div,
     .circle-pagination li div:hover {
       color: white; }
     .circle-pagination li div {
       font-size: .6rem;
       width: 24px;
       position: relative;
       left: -6px;
       top: 1px;
       color: #626C92;
       font-weight: 600;
       text-transform: capitalize; }
 
+.mailto {
+  box-sizing: border-box;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
+  padding: 10px;
+  color: #333;
+  background: #f2f2f2;
+  height: 100% p;
+    height-font-size: 16px;
+    height-line-height: 1.6em; }
+  .mailto .button {
+    border: 1px solid #6576a8;
+    background: #6d85ad;
+    border: 0;
+    outline: 0;
+    font-weight: bold;
+    text-transform: uppercase;
+    text-decoration: none;
+    letter-spacing: 1px;
+    color: #fff;
+    cursor: pointer; }
+    .mailto .button:hover {
+      background: #9cb8d9; }
+    .mailto .button:active {
+      background: #6576a8; }
+  .mailto .button--large {
+    position: relative;
+    padding: 15px 30px;
+    border-radius: 5px;
+    font-size: 16px; }
+    .mailto .button--large:active {
+      top: 1px; }
+  .mailto .content {
+    max-width: 350px;
+    text-align: center; }
+  .mailto .email {
+    position: relative; }
+
+@import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
+ul.context-menu {
+  transition: opacity 0.2s linear;
+  list-style: none;
+  margin: 0;
+  padding: 0;
+  font: 200 11px "Roboto", sans-serif;
+  position: absolute;
+  color: #626C92;
+  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);
+  border-radius: 5px;
+  border: 1px solid rgba(98, 108, 146, 0.25); }
+  ul.context-menu * {
+    transition: color 0.2s, background 0.2s; }
+  ul.context-menu.hide {
+    visibility: hidden;
+    opacity: 0; }
+  ul.context-menu.show {
+    visibility: visible;
+    opacity: 1; }
+  ul.context-menu li {
+    min-width: 100px;
+    overflow: hidden;
+    white-space: nowrap;
+    padding: 6px 8px;
+    background-color: #fff;
+    border-bottom: 1px solid #ecf0f1; }
+    ul.context-menu li a {
+      color: #626C92;
+      text-decoration: none; }
+    ul.context-menu li:hover {
+      background-color: #ecf0f1;
+      color: #2980b9; }
+      ul.context-menu li:hover a {
+        color: #2980b9; }
+    ul.context-menu li:first-child {
+      border-radius: 5px 5px 0 0; }
+    ul.context-menu li:last-child {
+      border-bottom: 0;
+      border-radius: 0 0 5px 5px; }
+
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
 .loader {
   background: #fff;
   margin: 50px 300px;
   /*todo cleanup with mixin*/ }
   .loader h1 {
     color: #626C92;
     font: 300 11px "Roboto", sans-serif; }
   .loader div.slider {
     position: absolute;
     width: 200px;
     height: 2px;
     margin-top: -30px; }
     .loader div.slider div.line {
       position: absolute;
       background: rgba(0, 0, 0, 0.2);
       width: 200px;
       height: 2px; }
     .loader div.slider div.break {
       position: absolute;
       width: 50%;
       height: 2px; }
     .loader div.slider div.break.dot1 {
       animation: loading 2s infinite;
       background: #D9ECF0; }
     .loader div.slider div.break.dot2 {
       animation: loading 2s 0.5s infinite;
       background: #6677AA; }
     .loader div.slider div.break.dot3 {
       animation: loading 2s 1s infinite;
       background: #D9ECF0; }
 
 @-webkit-keyframes "loading" {
   from {
     left: 0;
     opacity: 1; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-moz-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-o-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
-
-@import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
-ul.context-menu {
-  transition: opacity 0.2s linear;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-  font: 200 11px "Roboto", sans-serif;
-  position: absolute;
-  color: #626C92;
-  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);
-  border-radius: 5px;
-  border: 1px solid rgba(98, 108, 146, 0.25); }
-  ul.context-menu * {
-    transition: color 0.2s, background 0.2s; }
-  ul.context-menu.hide {
-    visibility: hidden;
-    opacity: 0; }
-  ul.context-menu.show {
-    visibility: visible;
-    opacity: 1; }
-  ul.context-menu li {
-    min-width: 100px;
-    overflow: hidden;
-    white-space: nowrap;
-    padding: 6px 8px;
-    background-color: #fff;
-    border-bottom: 1px solid #ecf0f1; }
-    ul.context-menu li a {
-      color: #626C92;
-      text-decoration: none; }
-    ul.context-menu li:hover {
-      background-color: #ecf0f1;
-      color: #2980b9; }
-      ul.context-menu li:hover a {
-        color: #2980b9; }
-    ul.context-menu li:first-child {
-      border-radius: 5px 5px 0 0; }
-    ul.context-menu li:last-child {
-      border-bottom: 0;
-      border-radius: 0 0 5px 5px; }
diff --git a/shrine-webclient/src/main/js/client/js-shrine/config.js b/shrine-webclient/src/main/js/client/js-shrine/config.js
index eecd7cd67..9389e2eaf 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/config.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/config.js
@@ -1,672 +1,675 @@
 System.config({
   defaultJSExtensions: true,
   transpiler: false,
   paths: {
     "*": "dist/*",
     "github:*": "jspm_packages/github/*",
     "npm:*": "jspm_packages/npm/*"
   },
   map: {
     "aurelia-animator-css": "npm:aurelia-animator-css@1.0.1",
     "aurelia-bootstrapper": "npm:aurelia-bootstrapper@1.0.0",
     "aurelia-fetch-client": "npm:aurelia-fetch-client@1.0.1",
     "aurelia-framework": "npm:aurelia-framework@1.0.6",
     "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
     "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
     "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
     "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
     "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
     "aurelia-router": "npm:aurelia-router@1.3.0",
     "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
     "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
     "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0",
     "bluebird": "npm:bluebird@3.4.1",
     "bootstrap": "github:twbs/bootstrap@3.3.7",
     "fetch": "github:github/fetch@1.0.0",
     "font-awesome": "npm:font-awesome@4.7.0",
     "jquery": "npm:jquery@2.2.4",
     "ramda": "npm:ramda@0.23.0",
     "text": "github:systemjs/plugin-text@0.0.8",
     "github:jspm/nodelibs-assert@0.1.0": {
       "assert": "npm:assert@1.4.1"
     },
     "github:jspm/nodelibs-buffer@0.1.1": {
       "buffer": "npm:buffer@5.0.6"
     },
     "github:jspm/nodelibs-process@0.1.2": {
       "process": "npm:process@0.11.10"
     },
     "github:jspm/nodelibs-util@0.1.0": {
       "util": "npm:util@0.10.3"
     },
     "github:jspm/nodelibs-vm@0.1.0": {
       "vm-browserify": "npm:vm-browserify@0.0.4"
     },
     "github:twbs/bootstrap@3.3.7": {
       "jquery": "npm:jquery@2.2.4"
     },
     "npm:assert@1.4.1": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "buffer": "github:jspm/nodelibs-buffer@0.1.1",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "npm:util@0.10.3"
     },
     "npm:aurelia-animator-css@1.0.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-binding@1.0.9": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:aurelia-bootstrapper@1.0.0": {
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-framework": "npm:aurelia-framework@1.0.6",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
       "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
       "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
       "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1",
       "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
       "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
       "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0"
     },
     "npm:aurelia-dependency-injection@1.3.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-event-aggregator@1.0.1": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-framework@1.0.6": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-history-browser@1.0.0": {
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader-default@1.0.0": {
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader@1.0.0": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-logging-console@1.0.0": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-metadata@1.0.3": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-pal-browser@1.0.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-polyfills@1.1.1": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-route-recognizer@1.1.0": {
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-router@1.3.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-route-recognizer": "npm:aurelia-route-recognizer@1.1.0"
     },
     "npm:aurelia-task-queue@1.1.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-templating-binding@1.0.0": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-resources@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-router@1.0.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:bluebird@3.4.1": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:buffer@5.0.6": {
       "base64-js": "npm:base64-js@1.2.0",
       "ieee754": "npm:ieee754@1.1.8"
     },
     "npm:font-awesome@4.7.0": {
       "css": "github:systemjs/plugin-css@0.1.33"
     },
     "npm:inherits@2.0.1": {
       "util": "github:jspm/nodelibs-util@0.1.0"
     },
     "npm:process@0.11.10": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "fs": "github:jspm/nodelibs-fs@0.1.2",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:ramda@0.23.0": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "github:jspm/nodelibs-util@0.1.0",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:util@0.10.3": {
       "inherits": "npm:inherits@2.0.1",
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:vm-browserify@0.0.4": {
       "indexof": "npm:indexof@0.0.1"
     }
   },
   depCache: {
+    "common/container.js": [
+      "ramda"
+    ],
     "common/i2b2.service.js": [
       "ramda",
       "./container"
     ],
     "repository/qep.repository.js": [
       "aurelia-framework",
       "aurelia-fetch-client",
       "fetch"
     ],
     "views/mailto/mailto.js": [
       "aurelia-framework",
       "views/mailto/mailto.service",
       "views/mailto/mailto.config"
     ],
     "views/mailto/mailto.service.js": [
       "aurelia-framework",
       "repository/qep.repository"
     ],
     "views/query-viewer/context-menu/context-menu.js": [
       "aurelia-framework",
       "common/i2b2.service.js"
     ],
     "views/query-viewer/loading-bar/loading-bar.js": [
       "aurelia-framework"
     ],
     "views/query-viewer/query-viewer.js": [
       "aurelia-framework",
       "views/query-viewer/query-viewer.service",
       "common/i2b2.service.js",
       "./query-viewer.model"
     ],
     "views/query-viewer/query-viewer.service.js": [
       "aurelia-framework",
       "repository/qep.repository",
       "./query-viewer.config"
     ]
   },
   bundles: {
     "app-build.js": [
       "common/container.js",
       "common/i2b2.service.js",
       "main.js",
       "repository/qep.repository.js",
       "shell.html!github:systemjs/plugin-text@0.0.8.js",
       "shell.js",
       "views/mailto/mailto.config.js",
       "views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",
       "views/mailto/mailto.js",
       "views/mailto/mailto.service.js",
       "views/query-viewer/box-style.converter.js",
       "views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/context-menu/context-menu.js",
       "views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/loading-bar/loading-bar.js",
       "views/query-viewer/query-viewer.config.js",
       "views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/query-viewer.js",
       "views/query-viewer/query-viewer.model.js",
       "views/query-viewer/query-viewer.service.js",
       "views/query-viewer/result-style.converter.js",
       "views/query-viewer/result-value.converter.js"
     ],
     "aurelia.js": [
       "github:github/fetch@1.0.0.js",
       "github:github/fetch@1.0.0/fetch.js",
       "github:jspm/nodelibs-process@0.1.2.js",
       "github:jspm/nodelibs-process@0.1.2/index.js",
       "npm:aurelia-binding@1.0.9.js",
       "npm:aurelia-binding@1.0.9/aurelia-binding.js",
       "npm:aurelia-bootstrapper@1.0.0.js",
       "npm:aurelia-bootstrapper@1.0.0/aurelia-bootstrapper.js",
       "npm:aurelia-dependency-injection@1.3.1.js",
       "npm:aurelia-dependency-injection@1.3.1/aurelia-dependency-injection.js",
       "npm:aurelia-event-aggregator@1.0.1.js",
       "npm:aurelia-event-aggregator@1.0.1/aurelia-event-aggregator.js",
       "npm:aurelia-fetch-client@1.0.1.js",
       "npm:aurelia-fetch-client@1.0.1/aurelia-fetch-client.js",
       "npm:aurelia-framework@1.0.6.js",
       "npm:aurelia-framework@1.0.6/aurelia-framework.js",
       "npm:aurelia-history-browser@1.0.0.js",
       "npm:aurelia-history-browser@1.0.0/aurelia-history-browser.js",
       "npm:aurelia-history@1.0.0.js",
       "npm:aurelia-history@1.0.0/aurelia-history.js",
       "npm:aurelia-loader-default@1.0.0.js",
       "npm:aurelia-loader-default@1.0.0/aurelia-loader-default.js",
       "npm:aurelia-loader@1.0.0.js",
       "npm:aurelia-loader@1.0.0/aurelia-loader.js",
       "npm:aurelia-logging-console@1.0.0.js",
       "npm:aurelia-logging-console@1.0.0/aurelia-logging-console.js",
       "npm:aurelia-logging@1.3.1.js",
       "npm:aurelia-logging@1.3.1/aurelia-logging.js",
       "npm:aurelia-metadata@1.0.3.js",
       "npm:aurelia-metadata@1.0.3/aurelia-metadata.js",
       "npm:aurelia-pal-browser@1.0.0.js",
       "npm:aurelia-pal-browser@1.0.0/aurelia-pal-browser.js",
       "npm:aurelia-pal@1.3.0.js",
       "npm:aurelia-pal@1.3.0/aurelia-pal.js",
       "npm:aurelia-path@1.1.1.js",
       "npm:aurelia-path@1.1.1/aurelia-path.js",
       "npm:aurelia-polyfills@1.1.1.js",
       "npm:aurelia-polyfills@1.1.1/aurelia-polyfills.js",
       "npm:aurelia-route-recognizer@1.1.0.js",
       "npm:aurelia-route-recognizer@1.1.0/aurelia-route-recognizer.js",
       "npm:aurelia-router@1.3.0.js",
       "npm:aurelia-router@1.3.0/aurelia-router.js",
       "npm:aurelia-task-queue@1.1.0.js",
       "npm:aurelia-task-queue@1.1.0/aurelia-task-queue.js",
       "npm:aurelia-templating-binding@1.0.0.js",
       "npm:aurelia-templating-binding@1.0.0/aurelia-templating-binding.js",
       "npm:aurelia-templating-resources@1.1.1.js",
       "npm:aurelia-templating-resources@1.1.1/abstract-repeater.js",
       "npm:aurelia-templating-resources@1.1.1/analyze-view-factory.js",
       "npm:aurelia-templating-resources@1.1.1/array-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/attr-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-hide-style.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-templating-resources.js",
       "npm:aurelia-templating-resources@1.1.1/binding-mode-behaviors.js",
       "npm:aurelia-templating-resources@1.1.1/binding-signaler.js",
       "npm:aurelia-templating-resources@1.1.1/compose.js",
       "npm:aurelia-templating-resources@1.1.1/css-resource.js",
       "npm:aurelia-templating-resources@1.1.1/debounce-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/dynamic-element.js",
       "npm:aurelia-templating-resources@1.1.1/focus.js",
       "npm:aurelia-templating-resources@1.1.1/hide.js",
       "npm:aurelia-templating-resources@1.1.1/html-resource-plugin.js",
       "npm:aurelia-templating-resources@1.1.1/html-sanitizer.js",
       "npm:aurelia-templating-resources@1.1.1/if.js",
       "npm:aurelia-templating-resources@1.1.1/map-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/null-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/number-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-strategy-locator.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-utilities.js",
       "npm:aurelia-templating-resources@1.1.1/repeat.js",
       "npm:aurelia-templating-resources@1.1.1/replaceable.js",
       "npm:aurelia-templating-resources@1.1.1/sanitize-html.js",
       "npm:aurelia-templating-resources@1.1.1/set-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/show.js",
       "npm:aurelia-templating-resources@1.1.1/signal-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/throttle-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/update-trigger-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/with.js",
       "npm:aurelia-templating-router@1.0.0.js",
       "npm:aurelia-templating-router@1.0.0/aurelia-templating-router.js",
       "npm:aurelia-templating-router@1.0.0/route-href.js",
       "npm:aurelia-templating-router@1.0.0/route-loader.js",
       "npm:aurelia-templating-router@1.0.0/router-view.js",
       "npm:aurelia-templating@1.1.1.js",
       "npm:aurelia-templating@1.1.1/aurelia-templating.js",
       "npm:font-awesome@4.7.0.js",
       "npm:font-awesome@4.7.0/css/font-awesome.css!github:systemjs/plugin-css@0.1.33.js",
       "npm:jquery@2.2.4.js",
       "npm:jquery@2.2.4/dist/jquery.js",
       "npm:process@0.11.10.js",
       "npm:process@0.11.10/browser.js",
       "npm:ramda@0.23.0.js",
       "npm:ramda@0.23.0/index.js",
       "npm:ramda@0.23.0/src/F.js",
       "npm:ramda@0.23.0/src/T.js",
       "npm:ramda@0.23.0/src/__.js",
       "npm:ramda@0.23.0/src/add.js",
       "npm:ramda@0.23.0/src/addIndex.js",
       "npm:ramda@0.23.0/src/adjust.js",
       "npm:ramda@0.23.0/src/all.js",
       "npm:ramda@0.23.0/src/allPass.js",
       "npm:ramda@0.23.0/src/always.js",
       "npm:ramda@0.23.0/src/and.js",
       "npm:ramda@0.23.0/src/any.js",
       "npm:ramda@0.23.0/src/anyPass.js",
       "npm:ramda@0.23.0/src/ap.js",
       "npm:ramda@0.23.0/src/aperture.js",
       "npm:ramda@0.23.0/src/append.js",
       "npm:ramda@0.23.0/src/apply.js",
       "npm:ramda@0.23.0/src/applySpec.js",
       "npm:ramda@0.23.0/src/ascend.js",
       "npm:ramda@0.23.0/src/assoc.js",
       "npm:ramda@0.23.0/src/assocPath.js",
       "npm:ramda@0.23.0/src/binary.js",
       "npm:ramda@0.23.0/src/bind.js",
       "npm:ramda@0.23.0/src/both.js",
       "npm:ramda@0.23.0/src/call.js",
       "npm:ramda@0.23.0/src/chain.js",
       "npm:ramda@0.23.0/src/clamp.js",
       "npm:ramda@0.23.0/src/clone.js",
       "npm:ramda@0.23.0/src/comparator.js",
       "npm:ramda@0.23.0/src/complement.js",
       "npm:ramda@0.23.0/src/compose.js",
       "npm:ramda@0.23.0/src/composeK.js",
       "npm:ramda@0.23.0/src/composeP.js",
       "npm:ramda@0.23.0/src/concat.js",
       "npm:ramda@0.23.0/src/cond.js",
       "npm:ramda@0.23.0/src/construct.js",
       "npm:ramda@0.23.0/src/constructN.js",
       "npm:ramda@0.23.0/src/contains.js",
       "npm:ramda@0.23.0/src/converge.js",
       "npm:ramda@0.23.0/src/countBy.js",
       "npm:ramda@0.23.0/src/curry.js",
       "npm:ramda@0.23.0/src/curryN.js",
       "npm:ramda@0.23.0/src/dec.js",
       "npm:ramda@0.23.0/src/defaultTo.js",
       "npm:ramda@0.23.0/src/descend.js",
       "npm:ramda@0.23.0/src/difference.js",
       "npm:ramda@0.23.0/src/differenceWith.js",
       "npm:ramda@0.23.0/src/dissoc.js",
       "npm:ramda@0.23.0/src/dissocPath.js",
       "npm:ramda@0.23.0/src/divide.js",
       "npm:ramda@0.23.0/src/drop.js",
       "npm:ramda@0.23.0/src/dropLast.js",
       "npm:ramda@0.23.0/src/dropLastWhile.js",
       "npm:ramda@0.23.0/src/dropRepeats.js",
       "npm:ramda@0.23.0/src/dropRepeatsWith.js",
       "npm:ramda@0.23.0/src/dropWhile.js",
       "npm:ramda@0.23.0/src/either.js",
       "npm:ramda@0.23.0/src/empty.js",
       "npm:ramda@0.23.0/src/eqBy.js",
       "npm:ramda@0.23.0/src/eqProps.js",
       "npm:ramda@0.23.0/src/equals.js",
       "npm:ramda@0.23.0/src/evolve.js",
       "npm:ramda@0.23.0/src/filter.js",
       "npm:ramda@0.23.0/src/find.js",
       "npm:ramda@0.23.0/src/findIndex.js",
       "npm:ramda@0.23.0/src/findLast.js",
       "npm:ramda@0.23.0/src/findLastIndex.js",
       "npm:ramda@0.23.0/src/flatten.js",
       "npm:ramda@0.23.0/src/flip.js",
       "npm:ramda@0.23.0/src/forEach.js",
       "npm:ramda@0.23.0/src/forEachObjIndexed.js",
       "npm:ramda@0.23.0/src/fromPairs.js",
       "npm:ramda@0.23.0/src/groupBy.js",
       "npm:ramda@0.23.0/src/groupWith.js",
       "npm:ramda@0.23.0/src/gt.js",
       "npm:ramda@0.23.0/src/gte.js",
       "npm:ramda@0.23.0/src/has.js",
       "npm:ramda@0.23.0/src/hasIn.js",
       "npm:ramda@0.23.0/src/head.js",
       "npm:ramda@0.23.0/src/identical.js",
       "npm:ramda@0.23.0/src/identity.js",
       "npm:ramda@0.23.0/src/ifElse.js",
       "npm:ramda@0.23.0/src/inc.js",
       "npm:ramda@0.23.0/src/indexBy.js",
       "npm:ramda@0.23.0/src/indexOf.js",
       "npm:ramda@0.23.0/src/init.js",
       "npm:ramda@0.23.0/src/insert.js",
       "npm:ramda@0.23.0/src/insertAll.js",
       "npm:ramda@0.23.0/src/internal/_Set.js",
       "npm:ramda@0.23.0/src/internal/_aperture.js",
       "npm:ramda@0.23.0/src/internal/_arity.js",
       "npm:ramda@0.23.0/src/internal/_arrayFromIterator.js",
       "npm:ramda@0.23.0/src/internal/_assign.js",
       "npm:ramda@0.23.0/src/internal/_checkForMethod.js",
       "npm:ramda@0.23.0/src/internal/_clone.js",
       "npm:ramda@0.23.0/src/internal/_cloneRegExp.js",
       "npm:ramda@0.23.0/src/internal/_complement.js",
       "npm:ramda@0.23.0/src/internal/_concat.js",
       "npm:ramda@0.23.0/src/internal/_contains.js",
       "npm:ramda@0.23.0/src/internal/_containsWith.js",
       "npm:ramda@0.23.0/src/internal/_createPartialApplicator.js",
       "npm:ramda@0.23.0/src/internal/_curry1.js",
       "npm:ramda@0.23.0/src/internal/_curry2.js",
       "npm:ramda@0.23.0/src/internal/_curry3.js",
       "npm:ramda@0.23.0/src/internal/_curryN.js",
       "npm:ramda@0.23.0/src/internal/_dispatchable.js",
       "npm:ramda@0.23.0/src/internal/_dropLast.js",
       "npm:ramda@0.23.0/src/internal/_dropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_equals.js",
       "npm:ramda@0.23.0/src/internal/_filter.js",
       "npm:ramda@0.23.0/src/internal/_flatCat.js",
       "npm:ramda@0.23.0/src/internal/_forceReduced.js",
       "npm:ramda@0.23.0/src/internal/_functionName.js",
       "npm:ramda@0.23.0/src/internal/_has.js",
       "npm:ramda@0.23.0/src/internal/_identity.js",
       "npm:ramda@0.23.0/src/internal/_indexOf.js",
       "npm:ramda@0.23.0/src/internal/_isArguments.js",
       "npm:ramda@0.23.0/src/internal/_isArray.js",
       "npm:ramda@0.23.0/src/internal/_isFunction.js",
       "npm:ramda@0.23.0/src/internal/_isInteger.js",
       "npm:ramda@0.23.0/src/internal/_isNumber.js",
       "npm:ramda@0.23.0/src/internal/_isObject.js",
       "npm:ramda@0.23.0/src/internal/_isPlaceholder.js",
       "npm:ramda@0.23.0/src/internal/_isRegExp.js",
       "npm:ramda@0.23.0/src/internal/_isString.js",
       "npm:ramda@0.23.0/src/internal/_isTransformer.js",
       "npm:ramda@0.23.0/src/internal/_makeFlat.js",
       "npm:ramda@0.23.0/src/internal/_map.js",
       "npm:ramda@0.23.0/src/internal/_objectAssign.js",
       "npm:ramda@0.23.0/src/internal/_of.js",
       "npm:ramda@0.23.0/src/internal/_pipe.js",
       "npm:ramda@0.23.0/src/internal/_pipeP.js",
       "npm:ramda@0.23.0/src/internal/_quote.js",
       "npm:ramda@0.23.0/src/internal/_reduce.js",
       "npm:ramda@0.23.0/src/internal/_reduced.js",
       "npm:ramda@0.23.0/src/internal/_stepCat.js",
       "npm:ramda@0.23.0/src/internal/_toISOString.js",
       "npm:ramda@0.23.0/src/internal/_toString.js",
       "npm:ramda@0.23.0/src/internal/_xall.js",
       "npm:ramda@0.23.0/src/internal/_xany.js",
       "npm:ramda@0.23.0/src/internal/_xaperture.js",
       "npm:ramda@0.23.0/src/internal/_xchain.js",
       "npm:ramda@0.23.0/src/internal/_xdrop.js",
       "npm:ramda@0.23.0/src/internal/_xdropLast.js",
       "npm:ramda@0.23.0/src/internal/_xdropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_xdropRepeatsWith.js",
       "npm:ramda@0.23.0/src/internal/_xdropWhile.js",
       "npm:ramda@0.23.0/src/internal/_xfBase.js",
       "npm:ramda@0.23.0/src/internal/_xfilter.js",
       "npm:ramda@0.23.0/src/internal/_xfind.js",
       "npm:ramda@0.23.0/src/internal/_xfindIndex.js",
       "npm:ramda@0.23.0/src/internal/_xfindLast.js",
       "npm:ramda@0.23.0/src/internal/_xfindLastIndex.js",
       "npm:ramda@0.23.0/src/internal/_xmap.js",
       "npm:ramda@0.23.0/src/internal/_xreduceBy.js",
       "npm:ramda@0.23.0/src/internal/_xtake.js",
       "npm:ramda@0.23.0/src/internal/_xtakeWhile.js",
       "npm:ramda@0.23.0/src/internal/_xwrap.js",
       "npm:ramda@0.23.0/src/intersection.js",
       "npm:ramda@0.23.0/src/intersectionWith.js",
       "npm:ramda@0.23.0/src/intersperse.js",
       "npm:ramda@0.23.0/src/into.js",
       "npm:ramda@0.23.0/src/invert.js",
       "npm:ramda@0.23.0/src/invertObj.js",
       "npm:ramda@0.23.0/src/invoker.js",
       "npm:ramda@0.23.0/src/is.js",
       "npm:ramda@0.23.0/src/isArrayLike.js",
       "npm:ramda@0.23.0/src/isEmpty.js",
       "npm:ramda@0.23.0/src/isNil.js",
       "npm:ramda@0.23.0/src/join.js",
       "npm:ramda@0.23.0/src/juxt.js",
       "npm:ramda@0.23.0/src/keys.js",
       "npm:ramda@0.23.0/src/keysIn.js",
       "npm:ramda@0.23.0/src/last.js",
       "npm:ramda@0.23.0/src/lastIndexOf.js",
       "npm:ramda@0.23.0/src/length.js",
       "npm:ramda@0.23.0/src/lens.js",
       "npm:ramda@0.23.0/src/lensIndex.js",
       "npm:ramda@0.23.0/src/lensPath.js",
       "npm:ramda@0.23.0/src/lensProp.js",
       "npm:ramda@0.23.0/src/lift.js",
       "npm:ramda@0.23.0/src/liftN.js",
       "npm:ramda@0.23.0/src/lt.js",
       "npm:ramda@0.23.0/src/lte.js",
       "npm:ramda@0.23.0/src/map.js",
       "npm:ramda@0.23.0/src/mapAccum.js",
       "npm:ramda@0.23.0/src/mapAccumRight.js",
       "npm:ramda@0.23.0/src/mapObjIndexed.js",
       "npm:ramda@0.23.0/src/match.js",
       "npm:ramda@0.23.0/src/mathMod.js",
       "npm:ramda@0.23.0/src/max.js",
       "npm:ramda@0.23.0/src/maxBy.js",
       "npm:ramda@0.23.0/src/mean.js",
       "npm:ramda@0.23.0/src/median.js",
       "npm:ramda@0.23.0/src/memoize.js",
       "npm:ramda@0.23.0/src/merge.js",
       "npm:ramda@0.23.0/src/mergeAll.js",
       "npm:ramda@0.23.0/src/mergeWith.js",
       "npm:ramda@0.23.0/src/mergeWithKey.js",
       "npm:ramda@0.23.0/src/min.js",
       "npm:ramda@0.23.0/src/minBy.js",
       "npm:ramda@0.23.0/src/modulo.js",
       "npm:ramda@0.23.0/src/multiply.js",
       "npm:ramda@0.23.0/src/nAry.js",
       "npm:ramda@0.23.0/src/negate.js",
       "npm:ramda@0.23.0/src/none.js",
       "npm:ramda@0.23.0/src/not.js",
       "npm:ramda@0.23.0/src/nth.js",
       "npm:ramda@0.23.0/src/nthArg.js",
       "npm:ramda@0.23.0/src/objOf.js",
       "npm:ramda@0.23.0/src/of.js",
       "npm:ramda@0.23.0/src/omit.js",
       "npm:ramda@0.23.0/src/once.js",
       "npm:ramda@0.23.0/src/or.js",
       "npm:ramda@0.23.0/src/over.js",
       "npm:ramda@0.23.0/src/pair.js",
       "npm:ramda@0.23.0/src/partial.js",
       "npm:ramda@0.23.0/src/partialRight.js",
       "npm:ramda@0.23.0/src/partition.js",
       "npm:ramda@0.23.0/src/path.js",
       "npm:ramda@0.23.0/src/pathEq.js",
       "npm:ramda@0.23.0/src/pathOr.js",
       "npm:ramda@0.23.0/src/pathSatisfies.js",
       "npm:ramda@0.23.0/src/pick.js",
       "npm:ramda@0.23.0/src/pickAll.js",
       "npm:ramda@0.23.0/src/pickBy.js",
       "npm:ramda@0.23.0/src/pipe.js",
       "npm:ramda@0.23.0/src/pipeK.js",
       "npm:ramda@0.23.0/src/pipeP.js",
       "npm:ramda@0.23.0/src/pluck.js",
       "npm:ramda@0.23.0/src/prepend.js",
       "npm:ramda@0.23.0/src/product.js",
       "npm:ramda@0.23.0/src/project.js",
       "npm:ramda@0.23.0/src/prop.js",
       "npm:ramda@0.23.0/src/propEq.js",
       "npm:ramda@0.23.0/src/propIs.js",
       "npm:ramda@0.23.0/src/propOr.js",
       "npm:ramda@0.23.0/src/propSatisfies.js",
       "npm:ramda@0.23.0/src/props.js",
       "npm:ramda@0.23.0/src/range.js",
       "npm:ramda@0.23.0/src/reduce.js",
       "npm:ramda@0.23.0/src/reduceBy.js",
       "npm:ramda@0.23.0/src/reduceRight.js",
       "npm:ramda@0.23.0/src/reduceWhile.js",
       "npm:ramda@0.23.0/src/reduced.js",
       "npm:ramda@0.23.0/src/reject.js",
       "npm:ramda@0.23.0/src/remove.js",
       "npm:ramda@0.23.0/src/repeat.js",
       "npm:ramda@0.23.0/src/replace.js",
       "npm:ramda@0.23.0/src/reverse.js",
       "npm:ramda@0.23.0/src/scan.js",
       "npm:ramda@0.23.0/src/sequence.js",
       "npm:ramda@0.23.0/src/set.js",
       "npm:ramda@0.23.0/src/slice.js",
       "npm:ramda@0.23.0/src/sort.js",
       "npm:ramda@0.23.0/src/sortBy.js",
       "npm:ramda@0.23.0/src/sortWith.js",
       "npm:ramda@0.23.0/src/split.js",
       "npm:ramda@0.23.0/src/splitAt.js",
       "npm:ramda@0.23.0/src/splitEvery.js",
       "npm:ramda@0.23.0/src/splitWhen.js",
       "npm:ramda@0.23.0/src/subtract.js",
       "npm:ramda@0.23.0/src/sum.js",
       "npm:ramda@0.23.0/src/symmetricDifference.js",
       "npm:ramda@0.23.0/src/symmetricDifferenceWith.js",
       "npm:ramda@0.23.0/src/tail.js",
       "npm:ramda@0.23.0/src/take.js",
       "npm:ramda@0.23.0/src/takeLast.js",
       "npm:ramda@0.23.0/src/takeLastWhile.js",
       "npm:ramda@0.23.0/src/takeWhile.js",
       "npm:ramda@0.23.0/src/tap.js",
       "npm:ramda@0.23.0/src/test.js",
       "npm:ramda@0.23.0/src/times.js",
       "npm:ramda@0.23.0/src/toLower.js",
       "npm:ramda@0.23.0/src/toPairs.js",
       "npm:ramda@0.23.0/src/toPairsIn.js",
       "npm:ramda@0.23.0/src/toString.js",
       "npm:ramda@0.23.0/src/toUpper.js",
       "npm:ramda@0.23.0/src/transduce.js",
       "npm:ramda@0.23.0/src/transpose.js",
       "npm:ramda@0.23.0/src/traverse.js",
       "npm:ramda@0.23.0/src/trim.js",
       "npm:ramda@0.23.0/src/tryCatch.js",
       "npm:ramda@0.23.0/src/type.js",
       "npm:ramda@0.23.0/src/unapply.js",
       "npm:ramda@0.23.0/src/unary.js",
       "npm:ramda@0.23.0/src/uncurryN.js",
       "npm:ramda@0.23.0/src/unfold.js",
       "npm:ramda@0.23.0/src/union.js",
       "npm:ramda@0.23.0/src/unionWith.js",
       "npm:ramda@0.23.0/src/uniq.js",
       "npm:ramda@0.23.0/src/uniqBy.js",
       "npm:ramda@0.23.0/src/uniqWith.js",
       "npm:ramda@0.23.0/src/unless.js",
       "npm:ramda@0.23.0/src/unnest.js",
       "npm:ramda@0.23.0/src/until.js",
       "npm:ramda@0.23.0/src/update.js",
       "npm:ramda@0.23.0/src/useWith.js",
       "npm:ramda@0.23.0/src/values.js",
       "npm:ramda@0.23.0/src/valuesIn.js",
       "npm:ramda@0.23.0/src/view.js",
       "npm:ramda@0.23.0/src/when.js",
       "npm:ramda@0.23.0/src/where.js",
       "npm:ramda@0.23.0/src/whereEq.js",
       "npm:ramda@0.23.0/src/without.js",
       "npm:ramda@0.23.0/src/xprod.js",
       "npm:ramda@0.23.0/src/zip.js",
       "npm:ramda@0.23.0/src/zipObj.js",
       "npm:ramda@0.23.0/src/zipWith.js"
     ]
   }
 });
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js b/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js
index ca1d65557..35d651c63 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js
@@ -1 +1 @@
-"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("shell.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("Shell",d=function(){function a(){c(this,a)}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}()),a("Shell",d)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:"subject="+encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n\n***Never send patient information, passwords, or other sensitive information by email****\nName:\nTitle:\nUser name (to log into SHRINE):\nTelephone Number (optional):\nPreferred email address (optional):\n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){return window.top.location=a.getComposition(b),a})},a.prototype.getComposition=function(a){return this.config.mailto+a+"?"+this.config.subject+"&"+this.config.body},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">${nodeResult | result}</td></tr></tbody></table><div if.bind="runningQuery">${runningQuery}</div></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(){return this.http.fetch("qep/queryResults").then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){return this.repository.fetchPreviousQueries()},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/container.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",e=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(b)},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},d(a,[{key:"value",get:function(){return this.__value}}]),a}()),a("Container",e)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b,c){return c.hasNothing()?a:b(c)})(e.of(null)),h=d.curry(function(a,b){return b.map(d.prop(a))}),i=d.curry(function(a,b){return g(h(a),b)}),j=d.compose(i("i2b2"),i("window"),i("parent")),k=d.compose(i("CRC"),j),l=d.compose(i("events"),j);this.onResize=function(a){return g(function(b){return b.value.changedZoomWindows.subscribe(a)},l(f))},this.onHistory=function(a){return g(function(b){return b.value.ctrlr.history.events.onDataUpdate.subscribe(a)},k(f))},this.onQuery=function(a){return g(function(b){return b.value.afterQueryInit.subscribe(a)},l(f))},this.loadHistory=function(){return g(function(a){return a.value.view.history.doRefreshAll()},k(f))},this.loadQuery=function(a){return g(function(b){return b.value.ctrlr.QT.doQueryLoad(a)},k(f))}}),a("I2B2Service",f)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("QueryViewerModel",d=function b(){c(this,b),this.isLoaded=!1,this.screens=[]}),a("QueryViewerModel",d)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","./query-viewer.model"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.QueryViewerModel}],execute:function(){a("QueryViewer",(i=d(f,g,h),k=i(j=function(){function a(b,d,e){var f=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle="v-min";var g=function(a){return f.service.getScreens(a.adapters,a.queryResults)},h=function(a){f.showLoader=!1,f.runningQuery=null,f.screens=a,f.showCircles=f.screens.length>1,e.screens=a,e.isLoaded=!0},i=function(){return f.service.fetchPreviousQueries().then(g).then(h)["catch"](function(a){return console.log(a)})},j=function(a,b){return f.runningQuery=b[0].name},k=function(){return e.isLoaded?h(e.screens):i()},l=function(a){return"ADD"!==a.action},m=function(a,b){return f.vertStyle=b.find(l)?"v-min":"v-full"};d.onResize(m),d.onHistory(i),d.onQuery(j),k()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a}())||j)),a("QueryViewer",k)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?a.status:a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
+"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("shell.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("Shell",d=function(){function a(){c(this,a)}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}()),a("Shell",d)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:"subject="+encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n\n***Never send patient information, passwords, or other sensitive information by email****\nName:\nTitle:\nUser name (to log into SHRINE):\nTelephone Number (optional):\nPreferred email address (optional):\n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){return window.top.location=a.getComposition(b),a})},a.prototype.getComposition=function(a){return this.config.mailto+a+"?"+this.config.subject+"&"+this.config.body},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu>scrollRatio: ${scrollRatio}<div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">${nodeResult | result}</td></tr></tbody></table><div if.bind="runningQuery">${runningQuery}</div></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(){return this.http.fetch("qep/queryResults").then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){return this.repository.fetchPreviousQueries()},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/container.js",["ramda"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a}],execute:function(){e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",f=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(function(){return b})},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},e(a,[{key:"value",get:function(){return this.__value()}}]),a}()),a("Container",f)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b,c){return c.hasNothing()?a:b(c)})(e.of(null)),h=d.curry(function(a,b){return b.map(d.prop(a))}),i=d.curry(function(a,b){return g(h(a),b)}),j=d.compose(i("i2b2"),i("window"),i("parent")),k=d.compose(i("CRC"),j),l=d.compose(i("events"),j);this.onResize=function(a){return g(function(b){return b.value.changedZoomWindows.subscribe(a)},l(f))},this.onHistory=function(a){return g(function(b){return b.value.ctrlr.history.events.onDataUpdate.subscribe(a)},k(f))},this.onQuery=function(a){return g(function(b){return b.value.afterQueryInit.subscribe(a)},l(f))},this.loadHistory=function(){return g(function(a){return a.value.view.history.doRefreshAll()},k(f))},this.loadQuery=function(a){return g(function(b){return b.value.ctrlr.QT.doQueryLoad(a)},k(f))}}),a("I2B2Service",f)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("QueryViewerModel",d=function b(){c(this,b),this.isLoaded=!1,this.screens=[]}),a("QueryViewerModel",d)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","./query-viewer.model"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.QueryViewerModel}],execute:function(){a("QueryViewer",(i=d(f,g,h),k=i(j=function(){function a(b,d,e){var f=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle="v-min",this.scrollRatio=0;var g=function(a){return f.service.getScreens(a.adapters,a.queryResults)},h=function(a){f.showLoader=!1,f.runningQuery=null,f.screens=a,f.showCircles=f.screens.length>1,e.screens=a,e.isLoaded=!0},i=function(){return f.service.fetchPreviousQueries().then(g).then(h)["catch"](function(a){return console.log(a)})},j=function(a,b){return f.runningQuery=b[0].name},k=function(){return e.isLoaded?h(e.screens):i()},l=function(a){return"ADD"!==a.action},m=function(a,b){return f.vertStyle=b.find(l)?"v-min":"v-full"};d.onResize(m),d.onHistory(i),d.onQuery(j),k()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a.prototype.onScroll=function(a){this.scrollRatio=a.target.clientHeight+a.target.scrollTop+"/"+a.target.scrollHeight},a}())||j)),a("QueryViewer",k)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?a.status:a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js
index 50fc0a62c..8bb389fe0 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js
@@ -1,66 +1,70 @@
-System.register([], function (_export, _context) {
+System.register(['ramda'], function (_export, _context) {
     "use strict";
 
-    var _createClass, Container;
+    var _, _createClass, Container;
 
     function _classCallCheck(instance, Constructor) {
         if (!(instance instanceof Constructor)) {
             throw new TypeError("Cannot call a class as a function");
         }
     }
 
     return {
-        setters: [],
+        setters: [function (_ramda) {
+            _ = _ramda;
+        }],
         execute: function () {
             _createClass = function () {
                 function defineProperties(target, props) {
                     for (var i = 0; i < props.length; i++) {
                         var descriptor = props[i];
                         descriptor.enumerable = descriptor.enumerable || false;
                         descriptor.configurable = true;
                         if ("value" in descriptor) descriptor.writable = true;
                         Object.defineProperty(target, descriptor.key, descriptor);
                     }
                 }
 
                 return function (Constructor, protoProps, staticProps) {
                     if (protoProps) defineProperties(Constructor.prototype, protoProps);
                     if (staticProps) defineProperties(Constructor, staticProps);
                     return Constructor;
                 };
             }();
 
-            _export("Container", Container = function () {
-                function Container(v) {
+            _export('Container', Container = function () {
+                function Container(f) {
                     _classCallCheck(this, Container);
 
-                    this.__value = v;
+                    this.__value = f;
                 }
 
                 Container.of = function of(value) {
-                    return new Container(value);
+                    return new Container(function () {
+                        return value;
+                    });
                 };
 
                 Container.prototype.map = function map(f) {
                     return this.hasNothing() ? Container.of(null) : Container.of(f(this.value));
                 };
 
                 Container.prototype.hasNothing = function hasNothing() {
                     return this.value === null || this.value === undefined;
                 };
 
                 _createClass(Container, [{
-                    key: "value",
+                    key: 'value',
                     get: function get() {
-                        return this.__value;
+                        return this.__value();
                     }
                 }]);
 
                 return Container;
             }());
 
-            _export("Container", Container);
+            _export('Container', Container);
         }
     };
 });
 //# sourceMappingURL=container.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map
index 785490fb6..7ed17493a 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map
@@ -1 +1 @@
-{"version":3,"sources":["common/container.js"],"names":["Container","v","__value","of","value","map","f","hasNothing","undefined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAAaA,S;AACT,mCAAYC,CAAZ,EAAe;AAAA;;AACX,yBAAKC,OAAL,GAAeD,CAAf;AACH;;0BAEME,E,eAAGC,K,EAAO;AACb,2BAAO,IAAIJ,SAAJ,CAAcI,KAAd,CAAP;AACH,iB;;oCAMDC,G,gBAAIC,C,EAAG;AACH,2BAAO,KAAKC,UAAL,KAAoBP,UAAUG,EAAV,CAAa,IAAb,CAApB,GAAyCH,UAAUG,EAAV,CAAaG,EAAE,KAAKF,KAAP,CAAb,CAAhD;AACH,iB;;oCAEDG,U,yBAAa;AACT,2BAAO,KAAKH,KAAL,KAAe,IAAf,IAAuB,KAAKA,KAAL,KAAeI,SAA7C;AACH,iB;;;;wCAVW;AACR,+BAAO,KAAKN,OAAZ;AACH","file":"container.js","sourceRoot":"/src"}
\ No newline at end of file
+{"version":3,"sources":["common/container.js"],"names":["_","Container","f","__value","of","value","map","hasNothing","undefined"],"mappings":";;;;;;;;;;;;;AAAYA,a;;;;;;;;;;;;;;;;;;;;;iCACCC,S;AACT,mCAAYC,CAAZ,EAAe;AAAA;;AACX,yBAAKC,OAAL,GAAeD,CAAf;AACH;;0BAEME,E,eAAGC,K,EAAO;AACb,2BAAO,IAAIJ,SAAJ,CAAc,YAAW;AAC5B,+BAAOI,KAAP;AACH,qBAFM,CAAP;AAGH,iB;;oCAMDC,G,gBAAIJ,C,EAAG;AACH,2BAAO,KAAKK,UAAL,KAAoBN,UAAUG,EAAV,CAAa,IAAb,CAApB,GAAyCH,UAAUG,EAAV,CAAaF,EAAE,KAAKG,KAAP,CAAb,CAAhD;AACH,iB;;oCAEDE,U,yBAAa;AACT,2BAAO,KAAKF,KAAL,KAAe,IAAf,IAAuB,KAAKA,KAAL,KAAeG,SAA7C;AACH,iB;;;;wCAVW;AACR,+BAAO,KAAKL,OAAL,EAAP;AACH","file":"container.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html
index 290163cc4..4104b97a1 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html
@@ -1 +1 @@
-<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="'Loading...'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">${nodeResult | result}</td></tr></tbody></table><div if.bind="runningQuery">${runningQuery}</div></div></section></div></div></template>
\ No newline at end of file
+<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="'Loading...'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu>scrollRatio: ${scrollRatio}<div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">${nodeResult | result}</td></tr></tbody></table><div if.bind="runningQuery">${runningQuery}</div></div></section></div></div></template>
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js
index e90133bbd..c4dddb57a 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js
@@ -1,89 +1,94 @@
 System.register(['aurelia-framework', 'views/query-viewer/query-viewer.service', 'common/i2b2.service.js', './query-viewer.model'], function (_export, _context) {
     "use strict";
 
     var inject, computedFrom, QueryViewerService, I2B2Service, QueryViewerModel, _dec, _class, QueryViewer;
 
     function _classCallCheck(instance, Constructor) {
         if (!(instance instanceof Constructor)) {
             throw new TypeError("Cannot call a class as a function");
         }
     }
 
     return {
         setters: [function (_aureliaFramework) {
             inject = _aureliaFramework.inject;
             computedFrom = _aureliaFramework.computedFrom;
         }, function (_viewsQueryViewerQueryViewerService) {
             QueryViewerService = _viewsQueryViewerQueryViewerService.QueryViewerService;
         }, function (_commonI2b2ServiceJs) {
             I2B2Service = _commonI2b2ServiceJs.I2B2Service;
         }, function (_queryViewerModel) {
             QueryViewerModel = _queryViewerModel.QueryViewerModel;
         }],
         execute: function () {
             _export('QueryViewer', QueryViewer = (_dec = inject(QueryViewerService, I2B2Service, QueryViewerModel), _dec(_class = function () {
                 function QueryViewer(service, i2b2Svc, model) {
                     var _this = this;
 
                     _classCallCheck(this, QueryViewer);
 
                     this.screenIndex = 0;
                     this.showCircles = false;
                     this.showLoader = true;
                     this.runningQuery = null;
                     this.service = service;
                     this.vertStyle = 'v-min';
+                    this.scrollRatio = 0;
 
                     var parseResultToScreens = function parseResultToScreens(result) {
                         return _this.service.getScreens(result.adapters, result.queryResults);
                     };
                     var setVM = function setVM(screens) {
                         _this.showLoader = false;
                         _this.runningQuery = null;
                         _this.screens = screens;
                         _this.showCircles = _this.screens.length > 1;
                         model.screens = screens;
                         model.isLoaded = true;
                     };
                     var refresh = function refresh() {
                         return _this.service.fetchPreviousQueries().then(parseResultToScreens).then(setVM).catch(function (error) {
                             return console.log(error);
                         });
                     };
 
                     var addQuery = function addQuery(event, data) {
                         return _this.runningQuery = data[0].name;
                     };
                     var init = function init() {
                         return model.isLoaded ? setVM(model.screens) : refresh();
                     };
 
                     var isMinimized = function isMinimized(e) {
                         return e.action !== 'ADD';
                     };
                     var setVertStyle = function setVertStyle(a, b) {
                         return _this.vertStyle = b.find(isMinimized) ? 'v-min' : 'v-full';
                     };
                     i2b2Svc.onResize(setVertStyle);
                     i2b2Svc.onHistory(refresh);
                     i2b2Svc.onQuery(addQuery);
                     init();
                 }
 
                 QueryViewer.prototype.getContext = function getContext(event, result) {
                     return {
                         x: event.pageX,
                         y: event.pageY,
                         id: result.id,
                         class: 'show'
                     };
                 };
 
+                QueryViewer.prototype.onScroll = function onScroll(e) {
+                    this.scrollRatio = e.target.clientHeight + e.target.scrollTop + '/' + e.target.scrollHeight;
+                };
+
                 return QueryViewer;
             }()) || _class));
 
             _export('QueryViewer', QueryViewer);
         }
     };
 });
 //# sourceMappingURL=query-viewer.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map
index 803c2b887..f5b15252a 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map
@@ -1 +1 @@
-{"version":3,"sources":["views/query-viewer/query-viewer.js"],"names":["inject","computedFrom","QueryViewerService","I2B2Service","QueryViewerModel","QueryViewer","service","i2b2Svc","model","screenIndex","showCircles","showLoader","runningQuery","vertStyle","parseResultToScreens","getScreens","result","adapters","queryResults","setVM","screens","length","isLoaded","refresh","fetchPreviousQueries","then","catch","console","log","error","addQuery","event","data","name","init","isMinimized","e","action","setVertStyle","a","b","find","onResize","onHistory","onQuery","getContext","x","pageX","y","pageY","id","class"],"mappings":";;;;;;;;;;;;;AAASA,kB,qBAAAA,M;AAAQC,wB,qBAAAA,Y;;AACRC,8B,uCAAAA,kB;;AACAC,uB,wBAAAA,W;;AACAC,4B,qBAAAA,gB;;;mCAGIC,W,WADZL,OAAOE,kBAAP,EAA2BC,WAA3B,EAAwCC,gBAAxC,C;AAEG,qCAAYE,OAAZ,EAAqBC,OAArB,EAA8BC,KAA9B,EAAqC;AAAA;;AAAA;;AAGjC,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,WAAL,GAAmB,KAAnB;AACA,yBAAKC,UAAL,GAAkB,IAAlB;AACA,yBAAKC,YAAL,GAAoB,IAApB;AACA,yBAAKN,OAAL,GAAeA,OAAf;AACA,yBAAKO,SAAL,GAAiB,OAAjB;;AAGA,wBAAMC,uBAAuB,SAAvBA,oBAAuB;AAAA,+BAAU,MAAKR,OAAL,CAAaS,UAAb,CAAwBC,OAAOC,QAA/B,EAAyCD,OAAOE,YAAhD,CAAV;AAAA,qBAA7B;AACA,wBAAMC,QAAQ,SAARA,KAAQ,UAAW;AACrB,8BAAKR,UAAL,GAAkB,KAAlB;AACA,8BAAKC,YAAL,GAAoB,IAApB;AACA,8BAAKQ,OAAL,GAAeA,OAAf;AACA,8BAAKV,WAAL,GAAmB,MAAKU,OAAL,CAAaC,MAAb,GAAsB,CAAzC;AACAb,8BAAMY,OAAN,GAAgBA,OAAhB;AACAZ,8BAAMc,QAAN,GAAiB,IAAjB;AACH,qBAPD;AAQA,wBAAMC,UAAU,SAAVA,OAAU;AAAA,+BAAM,MAAKjB,OAAL,CACjBkB,oBADiB,GAEjBC,IAFiB,CAEZX,oBAFY,EAGjBW,IAHiB,CAGZN,KAHY,EAIjBO,KAJiB,CAIX;AAAA,mCAASC,QAAQC,GAAR,CAAYC,KAAZ,CAAT;AAAA,yBAJW,CAAN;AAAA,qBAAhB;;AAMA,wBAAMC,WAAW,SAAXA,QAAW,CAACC,KAAD,EAAQC,IAAR;AAAA,+BAAiB,MAAKpB,YAAL,GAAoBoB,KAAK,CAAL,EAAQC,IAA7C;AAAA,qBAAjB;AACA,wBAAMC,OAAO,SAAPA,IAAO;AAAA,+BAAO1B,MAAMc,QAAP,GAAmBH,MAAMX,MAAMY,OAAZ,CAAnB,GAA0CG,SAAhD;AAAA,qBAAb;;AAGA,wBAAMY,cAAc,SAAdA,WAAc;AAAA,+BAAKC,EAAEC,MAAF,KAAa,KAAlB;AAAA,qBAApB;AACA,wBAAMC,eAAe,SAAfA,YAAe,CAACC,CAAD,EAAIC,CAAJ;AAAA,+BAAU,MAAK3B,SAAL,GAAiB2B,EAAEC,IAAF,CAAON,WAAP,IAAsB,OAAtB,GAAgC,QAA3D;AAAA,qBAArB;AACA5B,4BAAQmC,QAAR,CAAiBJ,YAAjB;AACA/B,4BAAQoC,SAAR,CAAkBpB,OAAlB;AACAhB,4BAAQqC,OAAR,CAAgBd,QAAhB;AACAI;AACH;;sCAEDW,U,uBAAWd,K,EAAOf,M,EAAQ;AACtB,2BAAO;AACH8B,2BAAGf,MAAMgB,KADN;AAEHC,2BAAGjB,MAAMkB,KAFN;AAGHC,4BAAIlC,OAAOkC,EAHR;AAIHC,+BAAO;AAJJ,qBAAP;AAMH,iB","file":"query-viewer.js","sourceRoot":"/src"}
\ No newline at end of file
+{"version":3,"sources":["views/query-viewer/query-viewer.js"],"names":["inject","computedFrom","QueryViewerService","I2B2Service","QueryViewerModel","QueryViewer","service","i2b2Svc","model","screenIndex","showCircles","showLoader","runningQuery","vertStyle","scrollRatio","parseResultToScreens","getScreens","result","adapters","queryResults","setVM","screens","length","isLoaded","refresh","fetchPreviousQueries","then","catch","console","log","error","addQuery","event","data","name","init","isMinimized","e","action","setVertStyle","a","b","find","onResize","onHistory","onQuery","getContext","x","pageX","y","pageY","id","class","onScroll","target","clientHeight","scrollTop","scrollHeight"],"mappings":";;;;;;;;;;;;;AAASA,kB,qBAAAA,M;AAAQC,wB,qBAAAA,Y;;AACRC,8B,uCAAAA,kB;;AACAC,uB,wBAAAA,W;;AACAC,4B,qBAAAA,gB;;;mCAGIC,W,WADZL,OAAOE,kBAAP,EAA2BC,WAA3B,EAAwCC,gBAAxC,C;AAEG,qCAAYE,OAAZ,EAAqBC,OAArB,EAA8BC,KAA9B,EAAqC;AAAA;;AAAA;;AAGjC,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,WAAL,GAAmB,KAAnB;AACA,yBAAKC,UAAL,GAAkB,IAAlB;AACA,yBAAKC,YAAL,GAAoB,IAApB;AACA,yBAAKN,OAAL,GAAeA,OAAf;AACA,yBAAKO,SAAL,GAAiB,OAAjB;AACA,yBAAKC,WAAL,GAAmB,CAAnB;;AAGA,wBAAMC,uBAAuB,SAAvBA,oBAAuB;AAAA,+BAAU,MAAKT,OAAL,CAAaU,UAAb,CAAwBC,OAAOC,QAA/B,EAAyCD,OAAOE,YAAhD,CAAV;AAAA,qBAA7B;AACA,wBAAMC,QAAQ,SAARA,KAAQ,UAAW;AACrB,8BAAKT,UAAL,GAAkB,KAAlB;AACA,8BAAKC,YAAL,GAAoB,IAApB;AACA,8BAAKS,OAAL,GAAeA,OAAf;AACA,8BAAKX,WAAL,GAAmB,MAAKW,OAAL,CAAaC,MAAb,GAAsB,CAAzC;AACAd,8BAAMa,OAAN,GAAgBA,OAAhB;AACAb,8BAAMe,QAAN,GAAiB,IAAjB;AACH,qBAPD;AAQA,wBAAMC,UAAU,SAAVA,OAAU;AAAA,+BAAM,MAAKlB,OAAL,CACjBmB,oBADiB,GAEjBC,IAFiB,CAEZX,oBAFY,EAGjBW,IAHiB,CAGZN,KAHY,EAIjBO,KAJiB,CAIX;AAAA,mCAASC,QAAQC,GAAR,CAAYC,KAAZ,CAAT;AAAA,yBAJW,CAAN;AAAA,qBAAhB;;AAMA,wBAAMC,WAAW,SAAXA,QAAW,CAACC,KAAD,EAAQC,IAAR;AAAA,+BAAiB,MAAKrB,YAAL,GAAoBqB,KAAK,CAAL,EAAQC,IAA7C;AAAA,qBAAjB;AACA,wBAAMC,OAAO,SAAPA,IAAO;AAAA,+BAAO3B,MAAMe,QAAP,GAAmBH,MAAMZ,MAAMa,OAAZ,CAAnB,GAA0CG,SAAhD;AAAA,qBAAb;;AAGA,wBAAMY,cAAc,SAAdA,WAAc;AAAA,+BAAKC,EAAEC,MAAF,KAAa,KAAlB;AAAA,qBAApB;AACA,wBAAMC,eAAe,SAAfA,YAAe,CAACC,CAAD,EAAIC,CAAJ;AAAA,+BAAU,MAAK5B,SAAL,GAAiB4B,EAAEC,IAAF,CAAON,WAAP,IAAsB,OAAtB,GAAgC,QAA3D;AAAA,qBAArB;AACA7B,4BAAQoC,QAAR,CAAiBJ,YAAjB;AACAhC,4BAAQqC,SAAR,CAAkBpB,OAAlB;AACAjB,4BAAQsC,OAAR,CAAgBd,QAAhB;AACAI;AACH;;sCAEDW,U,uBAAWd,K,EAAOf,M,EAAQ;AACtB,2BAAO;AACH8B,2BAAGf,MAAMgB,KADN;AAEHC,2BAAGjB,MAAMkB,KAFN;AAGHC,4BAAIlC,OAAOkC,EAHR;AAIHC,+BAAO;AAJJ,qBAAP;AAMH,iB;;sCAEDC,Q,qBAAShB,C,EAAG;AACR,yBAAKvB,WAAL,GAAoBuB,EAAEiB,MAAF,CAASC,YAAT,GAAwBlB,EAAEiB,MAAF,CAASE,SAAlC,GAAgD,GAAhD,GAAsDnB,EAAEiB,MAAF,CAASG,YAAlF;AACH,iB","file":"query-viewer.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css b/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css
index 5c6a57033..00d134422 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css
+++ b/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css
@@ -1,258 +1,258 @@
-.mailto {
-  box-sizing: border-box;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 100%;
-  height: 100%;
-  padding: 10px;
-  color: #333;
-  background: #f2f2f2;
-  height: 100% p;
-    height-font-size: 16px;
-    height-line-height: 1.6em; }
-  .mailto .button {
-    border: 1px solid #6576a8;
-    background: #6d85ad;
-    border: 0;
-    outline: 0;
-    font-weight: bold;
-    text-transform: uppercase;
-    text-decoration: none;
-    letter-spacing: 1px;
-    color: #fff;
-    cursor: pointer; }
-    .mailto .button:hover {
-      background: #9cb8d9; }
-    .mailto .button:active {
-      background: #6576a8; }
-  .mailto .button--large {
-    position: relative;
-    padding: 15px 30px;
-    border-radius: 5px;
-    font-size: 16px; }
-    .mailto .button--large:active {
-      top: 1px; }
-  .mailto .content {
-    max-width: 350px;
-    text-align: center; }
-  .mailto .email {
-    position: relative; }
-
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,500,300,700);
 body {
   overflow: hidden;
   background: rgba(255, 255, 255, 0.9);
   font-family: 'Roboto', sans-serif; }
 
 html,
 body,
 .box-wrapper {
   width: 100%;
   height: 100%;
   margin: 0; }
 
 .box-wrapper {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-orient: vertical;
   -webkit-box-direction: normal;
   -ms-flex-direction: column;
   flex-direction: column;
   -ms-flex-wrap: wrap;
   flex-wrap: wrap; }
 
 .box-wrapper > .box {
   margin-top: 1%;
   width: 100%;
   transition: all .2s ease; }
   .box-wrapper > .box .hideextra {
     white-space: nowrap;
     overflow: hidden;
     text-overflow: ellipsis; }
   .box-wrapper > .box section {
     margin: 20 0 6 0; }
     .box-wrapper > .box section .v-full {
       height: 90vh; }
     .box-wrapper > .box section .v-full > table {
       padding-bottom: 10%; }
     .box-wrapper > .box section .v-min {
       height: 100px; }
     .box-wrapper > .box section .v-min > table {
       padding-bottom: 1%; }
     .box-wrapper > .box section .tbl-content {
       overflow: auto;
       margin-top: 0px;
       border: 1px solid rgba(98, 108, 146, 0.3); }
   .box-wrapper > .box table {
     width: 100%;
     table-layout: fixed; }
     .box-wrapper > .box table .tbl-header {
       background-color: rgba(98, 108, 146, 0.3); }
       .box-wrapper > .box table .tbl-header div.tbl-header {
         max-width: 5rem; }
     .box-wrapper > .box table tr {
       background: white;
       cursor: pointer; }
       .box-wrapper > .box table tr:hover {
         background: rgba(98, 108, 146, 0.3) !important; }
       .box-wrapper > .box table tr:nth-child(odd) {
         background: rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table th {
       padding: 2px 4px 4px 2px;
       text-align: left;
       font-weight: 500;
       font-size: .75rem;
       color: #626C92;
       text-transform: uppercase;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table td {
       transition: all .5s ease;
       padding: 2px;
       text-align: left;
       vertical-align: top;
       font-weight: 300;
       font-size: 12px;
       color: black;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
 
 .circle-pagination {
   position: absolute;
   z-index: 1000;
   list-style-type: none;
   margin: 0;
   top: -.3rem; }
   .circle-pagination li {
     border-radius: 50%;
     border: 2px solid #626C92;
     width: 12px;
     height: 12px;
     padding: 4px;
     margin: 6px;
     cursor: pointer;
     float: left;
     transition: all .2s ease; }
     .circle-pagination li.active, .circle-pagination li:hover {
       background: #626C92;
       width: 14px;
       height: 14px; }
     .circle-pagination li.active div,
     .circle-pagination li div:hover {
       color: white; }
     .circle-pagination li div {
       font-size: .6rem;
       width: 24px;
       position: relative;
       left: -6px;
       top: 1px;
       color: #626C92;
       font-weight: 600;
       text-transform: capitalize; }
 
+.mailto {
+  box-sizing: border-box;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
+  padding: 10px;
+  color: #333;
+  background: #f2f2f2;
+  height: 100% p;
+    height-font-size: 16px;
+    height-line-height: 1.6em; }
+  .mailto .button {
+    border: 1px solid #6576a8;
+    background: #6d85ad;
+    border: 0;
+    outline: 0;
+    font-weight: bold;
+    text-transform: uppercase;
+    text-decoration: none;
+    letter-spacing: 1px;
+    color: #fff;
+    cursor: pointer; }
+    .mailto .button:hover {
+      background: #9cb8d9; }
+    .mailto .button:active {
+      background: #6576a8; }
+  .mailto .button--large {
+    position: relative;
+    padding: 15px 30px;
+    border-radius: 5px;
+    font-size: 16px; }
+    .mailto .button--large:active {
+      top: 1px; }
+  .mailto .content {
+    max-width: 350px;
+    text-align: center; }
+  .mailto .email {
+    position: relative; }
+
+@import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
+ul.context-menu {
+  transition: opacity 0.2s linear;
+  list-style: none;
+  margin: 0;
+  padding: 0;
+  font: 200 11px "Roboto", sans-serif;
+  position: absolute;
+  color: #626C92;
+  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);
+  border-radius: 5px;
+  border: 1px solid rgba(98, 108, 146, 0.25); }
+  ul.context-menu * {
+    transition: color 0.2s, background 0.2s; }
+  ul.context-menu.hide {
+    visibility: hidden;
+    opacity: 0; }
+  ul.context-menu.show {
+    visibility: visible;
+    opacity: 1; }
+  ul.context-menu li {
+    min-width: 100px;
+    overflow: hidden;
+    white-space: nowrap;
+    padding: 6px 8px;
+    background-color: #fff;
+    border-bottom: 1px solid #ecf0f1; }
+    ul.context-menu li a {
+      color: #626C92;
+      text-decoration: none; }
+    ul.context-menu li:hover {
+      background-color: #ecf0f1;
+      color: #2980b9; }
+      ul.context-menu li:hover a {
+        color: #2980b9; }
+    ul.context-menu li:first-child {
+      border-radius: 5px 5px 0 0; }
+    ul.context-menu li:last-child {
+      border-bottom: 0;
+      border-radius: 0 0 5px 5px; }
+
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
 .loader {
   background: #fff;
   margin: 50px 300px;
   /*todo cleanup with mixin*/ }
   .loader h1 {
     color: #626C92;
     font: 300 11px "Roboto", sans-serif; }
   .loader div.slider {
     position: absolute;
     width: 200px;
     height: 2px;
     margin-top: -30px; }
     .loader div.slider div.line {
       position: absolute;
       background: rgba(0, 0, 0, 0.2);
       width: 200px;
       height: 2px; }
     .loader div.slider div.break {
       position: absolute;
       width: 50%;
       height: 2px; }
     .loader div.slider div.break.dot1 {
       animation: loading 2s infinite;
       background: #D9ECF0; }
     .loader div.slider div.break.dot2 {
       animation: loading 2s 0.5s infinite;
       background: #6677AA; }
     .loader div.slider div.break.dot3 {
       animation: loading 2s 1s infinite;
       background: #D9ECF0; }
 
 @-webkit-keyframes "loading" {
   from {
     left: 0;
     opacity: 1; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-moz-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-o-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
-
-@import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
-ul.context-menu {
-  transition: opacity 0.2s linear;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-  font: 200 11px "Roboto", sans-serif;
-  position: absolute;
-  color: #626C92;
-  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);
-  border-radius: 5px;
-  border: 1px solid rgba(98, 108, 146, 0.25); }
-  ul.context-menu * {
-    transition: color 0.2s, background 0.2s; }
-  ul.context-menu.hide {
-    visibility: hidden;
-    opacity: 0; }
-  ul.context-menu.show {
-    visibility: visible;
-    opacity: 1; }
-  ul.context-menu li {
-    min-width: 100px;
-    overflow: hidden;
-    white-space: nowrap;
-    padding: 6px 8px;
-    background-color: #fff;
-    border-bottom: 1px solid #ecf0f1; }
-    ul.context-menu li a {
-      color: #626C92;
-      text-decoration: none; }
-    ul.context-menu li:hover {
-      background-color: #ecf0f1;
-      color: #2980b9; }
-      ul.context-menu li:hover a {
-        color: #2980b9; }
-    ul.context-menu li:first-child {
-      border-radius: 5px 5px 0 0; }
-    ul.context-menu li:last-child {
-      border-bottom: 0;
-      border-radius: 0 0 5px 5px; }
diff --git a/shrine-webclient/src/main/js/client/js-shrine/export/config.js b/shrine-webclient/src/main/js/client/js-shrine/export/config.js
index eecd7cd67..9389e2eaf 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/export/config.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/export/config.js
@@ -1,672 +1,675 @@
 System.config({
   defaultJSExtensions: true,
   transpiler: false,
   paths: {
     "*": "dist/*",
     "github:*": "jspm_packages/github/*",
     "npm:*": "jspm_packages/npm/*"
   },
   map: {
     "aurelia-animator-css": "npm:aurelia-animator-css@1.0.1",
     "aurelia-bootstrapper": "npm:aurelia-bootstrapper@1.0.0",
     "aurelia-fetch-client": "npm:aurelia-fetch-client@1.0.1",
     "aurelia-framework": "npm:aurelia-framework@1.0.6",
     "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
     "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
     "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
     "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
     "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
     "aurelia-router": "npm:aurelia-router@1.3.0",
     "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
     "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
     "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0",
     "bluebird": "npm:bluebird@3.4.1",
     "bootstrap": "github:twbs/bootstrap@3.3.7",
     "fetch": "github:github/fetch@1.0.0",
     "font-awesome": "npm:font-awesome@4.7.0",
     "jquery": "npm:jquery@2.2.4",
     "ramda": "npm:ramda@0.23.0",
     "text": "github:systemjs/plugin-text@0.0.8",
     "github:jspm/nodelibs-assert@0.1.0": {
       "assert": "npm:assert@1.4.1"
     },
     "github:jspm/nodelibs-buffer@0.1.1": {
       "buffer": "npm:buffer@5.0.6"
     },
     "github:jspm/nodelibs-process@0.1.2": {
       "process": "npm:process@0.11.10"
     },
     "github:jspm/nodelibs-util@0.1.0": {
       "util": "npm:util@0.10.3"
     },
     "github:jspm/nodelibs-vm@0.1.0": {
       "vm-browserify": "npm:vm-browserify@0.0.4"
     },
     "github:twbs/bootstrap@3.3.7": {
       "jquery": "npm:jquery@2.2.4"
     },
     "npm:assert@1.4.1": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "buffer": "github:jspm/nodelibs-buffer@0.1.1",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "npm:util@0.10.3"
     },
     "npm:aurelia-animator-css@1.0.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-binding@1.0.9": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:aurelia-bootstrapper@1.0.0": {
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-framework": "npm:aurelia-framework@1.0.6",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
       "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
       "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
       "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1",
       "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
       "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
       "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0"
     },
     "npm:aurelia-dependency-injection@1.3.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-event-aggregator@1.0.1": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-framework@1.0.6": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-history-browser@1.0.0": {
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader-default@1.0.0": {
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader@1.0.0": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-logging-console@1.0.0": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-metadata@1.0.3": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-pal-browser@1.0.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-polyfills@1.1.1": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-route-recognizer@1.1.0": {
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-router@1.3.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-route-recognizer": "npm:aurelia-route-recognizer@1.1.0"
     },
     "npm:aurelia-task-queue@1.1.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-templating-binding@1.0.0": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-resources@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-router@1.0.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:bluebird@3.4.1": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:buffer@5.0.6": {
       "base64-js": "npm:base64-js@1.2.0",
       "ieee754": "npm:ieee754@1.1.8"
     },
     "npm:font-awesome@4.7.0": {
       "css": "github:systemjs/plugin-css@0.1.33"
     },
     "npm:inherits@2.0.1": {
       "util": "github:jspm/nodelibs-util@0.1.0"
     },
     "npm:process@0.11.10": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "fs": "github:jspm/nodelibs-fs@0.1.2",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:ramda@0.23.0": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "github:jspm/nodelibs-util@0.1.0",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:util@0.10.3": {
       "inherits": "npm:inherits@2.0.1",
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:vm-browserify@0.0.4": {
       "indexof": "npm:indexof@0.0.1"
     }
   },
   depCache: {
+    "common/container.js": [
+      "ramda"
+    ],
     "common/i2b2.service.js": [
       "ramda",
       "./container"
     ],
     "repository/qep.repository.js": [
       "aurelia-framework",
       "aurelia-fetch-client",
       "fetch"
     ],
     "views/mailto/mailto.js": [
       "aurelia-framework",
       "views/mailto/mailto.service",
       "views/mailto/mailto.config"
     ],
     "views/mailto/mailto.service.js": [
       "aurelia-framework",
       "repository/qep.repository"
     ],
     "views/query-viewer/context-menu/context-menu.js": [
       "aurelia-framework",
       "common/i2b2.service.js"
     ],
     "views/query-viewer/loading-bar/loading-bar.js": [
       "aurelia-framework"
     ],
     "views/query-viewer/query-viewer.js": [
       "aurelia-framework",
       "views/query-viewer/query-viewer.service",
       "common/i2b2.service.js",
       "./query-viewer.model"
     ],
     "views/query-viewer/query-viewer.service.js": [
       "aurelia-framework",
       "repository/qep.repository",
       "./query-viewer.config"
     ]
   },
   bundles: {
     "app-build.js": [
       "common/container.js",
       "common/i2b2.service.js",
       "main.js",
       "repository/qep.repository.js",
       "shell.html!github:systemjs/plugin-text@0.0.8.js",
       "shell.js",
       "views/mailto/mailto.config.js",
       "views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",
       "views/mailto/mailto.js",
       "views/mailto/mailto.service.js",
       "views/query-viewer/box-style.converter.js",
       "views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/context-menu/context-menu.js",
       "views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/loading-bar/loading-bar.js",
       "views/query-viewer/query-viewer.config.js",
       "views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/query-viewer.js",
       "views/query-viewer/query-viewer.model.js",
       "views/query-viewer/query-viewer.service.js",
       "views/query-viewer/result-style.converter.js",
       "views/query-viewer/result-value.converter.js"
     ],
     "aurelia.js": [
       "github:github/fetch@1.0.0.js",
       "github:github/fetch@1.0.0/fetch.js",
       "github:jspm/nodelibs-process@0.1.2.js",
       "github:jspm/nodelibs-process@0.1.2/index.js",
       "npm:aurelia-binding@1.0.9.js",
       "npm:aurelia-binding@1.0.9/aurelia-binding.js",
       "npm:aurelia-bootstrapper@1.0.0.js",
       "npm:aurelia-bootstrapper@1.0.0/aurelia-bootstrapper.js",
       "npm:aurelia-dependency-injection@1.3.1.js",
       "npm:aurelia-dependency-injection@1.3.1/aurelia-dependency-injection.js",
       "npm:aurelia-event-aggregator@1.0.1.js",
       "npm:aurelia-event-aggregator@1.0.1/aurelia-event-aggregator.js",
       "npm:aurelia-fetch-client@1.0.1.js",
       "npm:aurelia-fetch-client@1.0.1/aurelia-fetch-client.js",
       "npm:aurelia-framework@1.0.6.js",
       "npm:aurelia-framework@1.0.6/aurelia-framework.js",
       "npm:aurelia-history-browser@1.0.0.js",
       "npm:aurelia-history-browser@1.0.0/aurelia-history-browser.js",
       "npm:aurelia-history@1.0.0.js",
       "npm:aurelia-history@1.0.0/aurelia-history.js",
       "npm:aurelia-loader-default@1.0.0.js",
       "npm:aurelia-loader-default@1.0.0/aurelia-loader-default.js",
       "npm:aurelia-loader@1.0.0.js",
       "npm:aurelia-loader@1.0.0/aurelia-loader.js",
       "npm:aurelia-logging-console@1.0.0.js",
       "npm:aurelia-logging-console@1.0.0/aurelia-logging-console.js",
       "npm:aurelia-logging@1.3.1.js",
       "npm:aurelia-logging@1.3.1/aurelia-logging.js",
       "npm:aurelia-metadata@1.0.3.js",
       "npm:aurelia-metadata@1.0.3/aurelia-metadata.js",
       "npm:aurelia-pal-browser@1.0.0.js",
       "npm:aurelia-pal-browser@1.0.0/aurelia-pal-browser.js",
       "npm:aurelia-pal@1.3.0.js",
       "npm:aurelia-pal@1.3.0/aurelia-pal.js",
       "npm:aurelia-path@1.1.1.js",
       "npm:aurelia-path@1.1.1/aurelia-path.js",
       "npm:aurelia-polyfills@1.1.1.js",
       "npm:aurelia-polyfills@1.1.1/aurelia-polyfills.js",
       "npm:aurelia-route-recognizer@1.1.0.js",
       "npm:aurelia-route-recognizer@1.1.0/aurelia-route-recognizer.js",
       "npm:aurelia-router@1.3.0.js",
       "npm:aurelia-router@1.3.0/aurelia-router.js",
       "npm:aurelia-task-queue@1.1.0.js",
       "npm:aurelia-task-queue@1.1.0/aurelia-task-queue.js",
       "npm:aurelia-templating-binding@1.0.0.js",
       "npm:aurelia-templating-binding@1.0.0/aurelia-templating-binding.js",
       "npm:aurelia-templating-resources@1.1.1.js",
       "npm:aurelia-templating-resources@1.1.1/abstract-repeater.js",
       "npm:aurelia-templating-resources@1.1.1/analyze-view-factory.js",
       "npm:aurelia-templating-resources@1.1.1/array-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/attr-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-hide-style.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-templating-resources.js",
       "npm:aurelia-templating-resources@1.1.1/binding-mode-behaviors.js",
       "npm:aurelia-templating-resources@1.1.1/binding-signaler.js",
       "npm:aurelia-templating-resources@1.1.1/compose.js",
       "npm:aurelia-templating-resources@1.1.1/css-resource.js",
       "npm:aurelia-templating-resources@1.1.1/debounce-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/dynamic-element.js",
       "npm:aurelia-templating-resources@1.1.1/focus.js",
       "npm:aurelia-templating-resources@1.1.1/hide.js",
       "npm:aurelia-templating-resources@1.1.1/html-resource-plugin.js",
       "npm:aurelia-templating-resources@1.1.1/html-sanitizer.js",
       "npm:aurelia-templating-resources@1.1.1/if.js",
       "npm:aurelia-templating-resources@1.1.1/map-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/null-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/number-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-strategy-locator.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-utilities.js",
       "npm:aurelia-templating-resources@1.1.1/repeat.js",
       "npm:aurelia-templating-resources@1.1.1/replaceable.js",
       "npm:aurelia-templating-resources@1.1.1/sanitize-html.js",
       "npm:aurelia-templating-resources@1.1.1/set-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/show.js",
       "npm:aurelia-templating-resources@1.1.1/signal-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/throttle-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/update-trigger-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/with.js",
       "npm:aurelia-templating-router@1.0.0.js",
       "npm:aurelia-templating-router@1.0.0/aurelia-templating-router.js",
       "npm:aurelia-templating-router@1.0.0/route-href.js",
       "npm:aurelia-templating-router@1.0.0/route-loader.js",
       "npm:aurelia-templating-router@1.0.0/router-view.js",
       "npm:aurelia-templating@1.1.1.js",
       "npm:aurelia-templating@1.1.1/aurelia-templating.js",
       "npm:font-awesome@4.7.0.js",
       "npm:font-awesome@4.7.0/css/font-awesome.css!github:systemjs/plugin-css@0.1.33.js",
       "npm:jquery@2.2.4.js",
       "npm:jquery@2.2.4/dist/jquery.js",
       "npm:process@0.11.10.js",
       "npm:process@0.11.10/browser.js",
       "npm:ramda@0.23.0.js",
       "npm:ramda@0.23.0/index.js",
       "npm:ramda@0.23.0/src/F.js",
       "npm:ramda@0.23.0/src/T.js",
       "npm:ramda@0.23.0/src/__.js",
       "npm:ramda@0.23.0/src/add.js",
       "npm:ramda@0.23.0/src/addIndex.js",
       "npm:ramda@0.23.0/src/adjust.js",
       "npm:ramda@0.23.0/src/all.js",
       "npm:ramda@0.23.0/src/allPass.js",
       "npm:ramda@0.23.0/src/always.js",
       "npm:ramda@0.23.0/src/and.js",
       "npm:ramda@0.23.0/src/any.js",
       "npm:ramda@0.23.0/src/anyPass.js",
       "npm:ramda@0.23.0/src/ap.js",
       "npm:ramda@0.23.0/src/aperture.js",
       "npm:ramda@0.23.0/src/append.js",
       "npm:ramda@0.23.0/src/apply.js",
       "npm:ramda@0.23.0/src/applySpec.js",
       "npm:ramda@0.23.0/src/ascend.js",
       "npm:ramda@0.23.0/src/assoc.js",
       "npm:ramda@0.23.0/src/assocPath.js",
       "npm:ramda@0.23.0/src/binary.js",
       "npm:ramda@0.23.0/src/bind.js",
       "npm:ramda@0.23.0/src/both.js",
       "npm:ramda@0.23.0/src/call.js",
       "npm:ramda@0.23.0/src/chain.js",
       "npm:ramda@0.23.0/src/clamp.js",
       "npm:ramda@0.23.0/src/clone.js",
       "npm:ramda@0.23.0/src/comparator.js",
       "npm:ramda@0.23.0/src/complement.js",
       "npm:ramda@0.23.0/src/compose.js",
       "npm:ramda@0.23.0/src/composeK.js",
       "npm:ramda@0.23.0/src/composeP.js",
       "npm:ramda@0.23.0/src/concat.js",
       "npm:ramda@0.23.0/src/cond.js",
       "npm:ramda@0.23.0/src/construct.js",
       "npm:ramda@0.23.0/src/constructN.js",
       "npm:ramda@0.23.0/src/contains.js",
       "npm:ramda@0.23.0/src/converge.js",
       "npm:ramda@0.23.0/src/countBy.js",
       "npm:ramda@0.23.0/src/curry.js",
       "npm:ramda@0.23.0/src/curryN.js",
       "npm:ramda@0.23.0/src/dec.js",
       "npm:ramda@0.23.0/src/defaultTo.js",
       "npm:ramda@0.23.0/src/descend.js",
       "npm:ramda@0.23.0/src/difference.js",
       "npm:ramda@0.23.0/src/differenceWith.js",
       "npm:ramda@0.23.0/src/dissoc.js",
       "npm:ramda@0.23.0/src/dissocPath.js",
       "npm:ramda@0.23.0/src/divide.js",
       "npm:ramda@0.23.0/src/drop.js",
       "npm:ramda@0.23.0/src/dropLast.js",
       "npm:ramda@0.23.0/src/dropLastWhile.js",
       "npm:ramda@0.23.0/src/dropRepeats.js",
       "npm:ramda@0.23.0/src/dropRepeatsWith.js",
       "npm:ramda@0.23.0/src/dropWhile.js",
       "npm:ramda@0.23.0/src/either.js",
       "npm:ramda@0.23.0/src/empty.js",
       "npm:ramda@0.23.0/src/eqBy.js",
       "npm:ramda@0.23.0/src/eqProps.js",
       "npm:ramda@0.23.0/src/equals.js",
       "npm:ramda@0.23.0/src/evolve.js",
       "npm:ramda@0.23.0/src/filter.js",
       "npm:ramda@0.23.0/src/find.js",
       "npm:ramda@0.23.0/src/findIndex.js",
       "npm:ramda@0.23.0/src/findLast.js",
       "npm:ramda@0.23.0/src/findLastIndex.js",
       "npm:ramda@0.23.0/src/flatten.js",
       "npm:ramda@0.23.0/src/flip.js",
       "npm:ramda@0.23.0/src/forEach.js",
       "npm:ramda@0.23.0/src/forEachObjIndexed.js",
       "npm:ramda@0.23.0/src/fromPairs.js",
       "npm:ramda@0.23.0/src/groupBy.js",
       "npm:ramda@0.23.0/src/groupWith.js",
       "npm:ramda@0.23.0/src/gt.js",
       "npm:ramda@0.23.0/src/gte.js",
       "npm:ramda@0.23.0/src/has.js",
       "npm:ramda@0.23.0/src/hasIn.js",
       "npm:ramda@0.23.0/src/head.js",
       "npm:ramda@0.23.0/src/identical.js",
       "npm:ramda@0.23.0/src/identity.js",
       "npm:ramda@0.23.0/src/ifElse.js",
       "npm:ramda@0.23.0/src/inc.js",
       "npm:ramda@0.23.0/src/indexBy.js",
       "npm:ramda@0.23.0/src/indexOf.js",
       "npm:ramda@0.23.0/src/init.js",
       "npm:ramda@0.23.0/src/insert.js",
       "npm:ramda@0.23.0/src/insertAll.js",
       "npm:ramda@0.23.0/src/internal/_Set.js",
       "npm:ramda@0.23.0/src/internal/_aperture.js",
       "npm:ramda@0.23.0/src/internal/_arity.js",
       "npm:ramda@0.23.0/src/internal/_arrayFromIterator.js",
       "npm:ramda@0.23.0/src/internal/_assign.js",
       "npm:ramda@0.23.0/src/internal/_checkForMethod.js",
       "npm:ramda@0.23.0/src/internal/_clone.js",
       "npm:ramda@0.23.0/src/internal/_cloneRegExp.js",
       "npm:ramda@0.23.0/src/internal/_complement.js",
       "npm:ramda@0.23.0/src/internal/_concat.js",
       "npm:ramda@0.23.0/src/internal/_contains.js",
       "npm:ramda@0.23.0/src/internal/_containsWith.js",
       "npm:ramda@0.23.0/src/internal/_createPartialApplicator.js",
       "npm:ramda@0.23.0/src/internal/_curry1.js",
       "npm:ramda@0.23.0/src/internal/_curry2.js",
       "npm:ramda@0.23.0/src/internal/_curry3.js",
       "npm:ramda@0.23.0/src/internal/_curryN.js",
       "npm:ramda@0.23.0/src/internal/_dispatchable.js",
       "npm:ramda@0.23.0/src/internal/_dropLast.js",
       "npm:ramda@0.23.0/src/internal/_dropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_equals.js",
       "npm:ramda@0.23.0/src/internal/_filter.js",
       "npm:ramda@0.23.0/src/internal/_flatCat.js",
       "npm:ramda@0.23.0/src/internal/_forceReduced.js",
       "npm:ramda@0.23.0/src/internal/_functionName.js",
       "npm:ramda@0.23.0/src/internal/_has.js",
       "npm:ramda@0.23.0/src/internal/_identity.js",
       "npm:ramda@0.23.0/src/internal/_indexOf.js",
       "npm:ramda@0.23.0/src/internal/_isArguments.js",
       "npm:ramda@0.23.0/src/internal/_isArray.js",
       "npm:ramda@0.23.0/src/internal/_isFunction.js",
       "npm:ramda@0.23.0/src/internal/_isInteger.js",
       "npm:ramda@0.23.0/src/internal/_isNumber.js",
       "npm:ramda@0.23.0/src/internal/_isObject.js",
       "npm:ramda@0.23.0/src/internal/_isPlaceholder.js",
       "npm:ramda@0.23.0/src/internal/_isRegExp.js",
       "npm:ramda@0.23.0/src/internal/_isString.js",
       "npm:ramda@0.23.0/src/internal/_isTransformer.js",
       "npm:ramda@0.23.0/src/internal/_makeFlat.js",
       "npm:ramda@0.23.0/src/internal/_map.js",
       "npm:ramda@0.23.0/src/internal/_objectAssign.js",
       "npm:ramda@0.23.0/src/internal/_of.js",
       "npm:ramda@0.23.0/src/internal/_pipe.js",
       "npm:ramda@0.23.0/src/internal/_pipeP.js",
       "npm:ramda@0.23.0/src/internal/_quote.js",
       "npm:ramda@0.23.0/src/internal/_reduce.js",
       "npm:ramda@0.23.0/src/internal/_reduced.js",
       "npm:ramda@0.23.0/src/internal/_stepCat.js",
       "npm:ramda@0.23.0/src/internal/_toISOString.js",
       "npm:ramda@0.23.0/src/internal/_toString.js",
       "npm:ramda@0.23.0/src/internal/_xall.js",
       "npm:ramda@0.23.0/src/internal/_xany.js",
       "npm:ramda@0.23.0/src/internal/_xaperture.js",
       "npm:ramda@0.23.0/src/internal/_xchain.js",
       "npm:ramda@0.23.0/src/internal/_xdrop.js",
       "npm:ramda@0.23.0/src/internal/_xdropLast.js",
       "npm:ramda@0.23.0/src/internal/_xdropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_xdropRepeatsWith.js",
       "npm:ramda@0.23.0/src/internal/_xdropWhile.js",
       "npm:ramda@0.23.0/src/internal/_xfBase.js",
       "npm:ramda@0.23.0/src/internal/_xfilter.js",
       "npm:ramda@0.23.0/src/internal/_xfind.js",
       "npm:ramda@0.23.0/src/internal/_xfindIndex.js",
       "npm:ramda@0.23.0/src/internal/_xfindLast.js",
       "npm:ramda@0.23.0/src/internal/_xfindLastIndex.js",
       "npm:ramda@0.23.0/src/internal/_xmap.js",
       "npm:ramda@0.23.0/src/internal/_xreduceBy.js",
       "npm:ramda@0.23.0/src/internal/_xtake.js",
       "npm:ramda@0.23.0/src/internal/_xtakeWhile.js",
       "npm:ramda@0.23.0/src/internal/_xwrap.js",
       "npm:ramda@0.23.0/src/intersection.js",
       "npm:ramda@0.23.0/src/intersectionWith.js",
       "npm:ramda@0.23.0/src/intersperse.js",
       "npm:ramda@0.23.0/src/into.js",
       "npm:ramda@0.23.0/src/invert.js",
       "npm:ramda@0.23.0/src/invertObj.js",
       "npm:ramda@0.23.0/src/invoker.js",
       "npm:ramda@0.23.0/src/is.js",
       "npm:ramda@0.23.0/src/isArrayLike.js",
       "npm:ramda@0.23.0/src/isEmpty.js",
       "npm:ramda@0.23.0/src/isNil.js",
       "npm:ramda@0.23.0/src/join.js",
       "npm:ramda@0.23.0/src/juxt.js",
       "npm:ramda@0.23.0/src/keys.js",
       "npm:ramda@0.23.0/src/keysIn.js",
       "npm:ramda@0.23.0/src/last.js",
       "npm:ramda@0.23.0/src/lastIndexOf.js",
       "npm:ramda@0.23.0/src/length.js",
       "npm:ramda@0.23.0/src/lens.js",
       "npm:ramda@0.23.0/src/lensIndex.js",
       "npm:ramda@0.23.0/src/lensPath.js",
       "npm:ramda@0.23.0/src/lensProp.js",
       "npm:ramda@0.23.0/src/lift.js",
       "npm:ramda@0.23.0/src/liftN.js",
       "npm:ramda@0.23.0/src/lt.js",
       "npm:ramda@0.23.0/src/lte.js",
       "npm:ramda@0.23.0/src/map.js",
       "npm:ramda@0.23.0/src/mapAccum.js",
       "npm:ramda@0.23.0/src/mapAccumRight.js",
       "npm:ramda@0.23.0/src/mapObjIndexed.js",
       "npm:ramda@0.23.0/src/match.js",
       "npm:ramda@0.23.0/src/mathMod.js",
       "npm:ramda@0.23.0/src/max.js",
       "npm:ramda@0.23.0/src/maxBy.js",
       "npm:ramda@0.23.0/src/mean.js",
       "npm:ramda@0.23.0/src/median.js",
       "npm:ramda@0.23.0/src/memoize.js",
       "npm:ramda@0.23.0/src/merge.js",
       "npm:ramda@0.23.0/src/mergeAll.js",
       "npm:ramda@0.23.0/src/mergeWith.js",
       "npm:ramda@0.23.0/src/mergeWithKey.js",
       "npm:ramda@0.23.0/src/min.js",
       "npm:ramda@0.23.0/src/minBy.js",
       "npm:ramda@0.23.0/src/modulo.js",
       "npm:ramda@0.23.0/src/multiply.js",
       "npm:ramda@0.23.0/src/nAry.js",
       "npm:ramda@0.23.0/src/negate.js",
       "npm:ramda@0.23.0/src/none.js",
       "npm:ramda@0.23.0/src/not.js",
       "npm:ramda@0.23.0/src/nth.js",
       "npm:ramda@0.23.0/src/nthArg.js",
       "npm:ramda@0.23.0/src/objOf.js",
       "npm:ramda@0.23.0/src/of.js",
       "npm:ramda@0.23.0/src/omit.js",
       "npm:ramda@0.23.0/src/once.js",
       "npm:ramda@0.23.0/src/or.js",
       "npm:ramda@0.23.0/src/over.js",
       "npm:ramda@0.23.0/src/pair.js",
       "npm:ramda@0.23.0/src/partial.js",
       "npm:ramda@0.23.0/src/partialRight.js",
       "npm:ramda@0.23.0/src/partition.js",
       "npm:ramda@0.23.0/src/path.js",
       "npm:ramda@0.23.0/src/pathEq.js",
       "npm:ramda@0.23.0/src/pathOr.js",
       "npm:ramda@0.23.0/src/pathSatisfies.js",
       "npm:ramda@0.23.0/src/pick.js",
       "npm:ramda@0.23.0/src/pickAll.js",
       "npm:ramda@0.23.0/src/pickBy.js",
       "npm:ramda@0.23.0/src/pipe.js",
       "npm:ramda@0.23.0/src/pipeK.js",
       "npm:ramda@0.23.0/src/pipeP.js",
       "npm:ramda@0.23.0/src/pluck.js",
       "npm:ramda@0.23.0/src/prepend.js",
       "npm:ramda@0.23.0/src/product.js",
       "npm:ramda@0.23.0/src/project.js",
       "npm:ramda@0.23.0/src/prop.js",
       "npm:ramda@0.23.0/src/propEq.js",
       "npm:ramda@0.23.0/src/propIs.js",
       "npm:ramda@0.23.0/src/propOr.js",
       "npm:ramda@0.23.0/src/propSatisfies.js",
       "npm:ramda@0.23.0/src/props.js",
       "npm:ramda@0.23.0/src/range.js",
       "npm:ramda@0.23.0/src/reduce.js",
       "npm:ramda@0.23.0/src/reduceBy.js",
       "npm:ramda@0.23.0/src/reduceRight.js",
       "npm:ramda@0.23.0/src/reduceWhile.js",
       "npm:ramda@0.23.0/src/reduced.js",
       "npm:ramda@0.23.0/src/reject.js",
       "npm:ramda@0.23.0/src/remove.js",
       "npm:ramda@0.23.0/src/repeat.js",
       "npm:ramda@0.23.0/src/replace.js",
       "npm:ramda@0.23.0/src/reverse.js",
       "npm:ramda@0.23.0/src/scan.js",
       "npm:ramda@0.23.0/src/sequence.js",
       "npm:ramda@0.23.0/src/set.js",
       "npm:ramda@0.23.0/src/slice.js",
       "npm:ramda@0.23.0/src/sort.js",
       "npm:ramda@0.23.0/src/sortBy.js",
       "npm:ramda@0.23.0/src/sortWith.js",
       "npm:ramda@0.23.0/src/split.js",
       "npm:ramda@0.23.0/src/splitAt.js",
       "npm:ramda@0.23.0/src/splitEvery.js",
       "npm:ramda@0.23.0/src/splitWhen.js",
       "npm:ramda@0.23.0/src/subtract.js",
       "npm:ramda@0.23.0/src/sum.js",
       "npm:ramda@0.23.0/src/symmetricDifference.js",
       "npm:ramda@0.23.0/src/symmetricDifferenceWith.js",
       "npm:ramda@0.23.0/src/tail.js",
       "npm:ramda@0.23.0/src/take.js",
       "npm:ramda@0.23.0/src/takeLast.js",
       "npm:ramda@0.23.0/src/takeLastWhile.js",
       "npm:ramda@0.23.0/src/takeWhile.js",
       "npm:ramda@0.23.0/src/tap.js",
       "npm:ramda@0.23.0/src/test.js",
       "npm:ramda@0.23.0/src/times.js",
       "npm:ramda@0.23.0/src/toLower.js",
       "npm:ramda@0.23.0/src/toPairs.js",
       "npm:ramda@0.23.0/src/toPairsIn.js",
       "npm:ramda@0.23.0/src/toString.js",
       "npm:ramda@0.23.0/src/toUpper.js",
       "npm:ramda@0.23.0/src/transduce.js",
       "npm:ramda@0.23.0/src/transpose.js",
       "npm:ramda@0.23.0/src/traverse.js",
       "npm:ramda@0.23.0/src/trim.js",
       "npm:ramda@0.23.0/src/tryCatch.js",
       "npm:ramda@0.23.0/src/type.js",
       "npm:ramda@0.23.0/src/unapply.js",
       "npm:ramda@0.23.0/src/unary.js",
       "npm:ramda@0.23.0/src/uncurryN.js",
       "npm:ramda@0.23.0/src/unfold.js",
       "npm:ramda@0.23.0/src/union.js",
       "npm:ramda@0.23.0/src/unionWith.js",
       "npm:ramda@0.23.0/src/uniq.js",
       "npm:ramda@0.23.0/src/uniqBy.js",
       "npm:ramda@0.23.0/src/uniqWith.js",
       "npm:ramda@0.23.0/src/unless.js",
       "npm:ramda@0.23.0/src/unnest.js",
       "npm:ramda@0.23.0/src/until.js",
       "npm:ramda@0.23.0/src/update.js",
       "npm:ramda@0.23.0/src/useWith.js",
       "npm:ramda@0.23.0/src/values.js",
       "npm:ramda@0.23.0/src/valuesIn.js",
       "npm:ramda@0.23.0/src/view.js",
       "npm:ramda@0.23.0/src/when.js",
       "npm:ramda@0.23.0/src/where.js",
       "npm:ramda@0.23.0/src/whereEq.js",
       "npm:ramda@0.23.0/src/without.js",
       "npm:ramda@0.23.0/src/xprod.js",
       "npm:ramda@0.23.0/src/zip.js",
       "npm:ramda@0.23.0/src/zipObj.js",
       "npm:ramda@0.23.0/src/zipWith.js"
     ]
   }
 });
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js b/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js
index ca1d65557..35d651c63 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js
@@ -1 +1 @@
-"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("shell.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("Shell",d=function(){function a(){c(this,a)}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}()),a("Shell",d)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:"subject="+encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n\n***Never send patient information, passwords, or other sensitive information by email****\nName:\nTitle:\nUser name (to log into SHRINE):\nTelephone Number (optional):\nPreferred email address (optional):\n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){return window.top.location=a.getComposition(b),a})},a.prototype.getComposition=function(a){return this.config.mailto+a+"?"+this.config.subject+"&"+this.config.body},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">${nodeResult | result}</td></tr></tbody></table><div if.bind="runningQuery">${runningQuery}</div></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(){return this.http.fetch("qep/queryResults").then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){return this.repository.fetchPreviousQueries()},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/container.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",e=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(b)},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},d(a,[{key:"value",get:function(){return this.__value}}]),a}()),a("Container",e)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b,c){return c.hasNothing()?a:b(c)})(e.of(null)),h=d.curry(function(a,b){return b.map(d.prop(a))}),i=d.curry(function(a,b){return g(h(a),b)}),j=d.compose(i("i2b2"),i("window"),i("parent")),k=d.compose(i("CRC"),j),l=d.compose(i("events"),j);this.onResize=function(a){return g(function(b){return b.value.changedZoomWindows.subscribe(a)},l(f))},this.onHistory=function(a){return g(function(b){return b.value.ctrlr.history.events.onDataUpdate.subscribe(a)},k(f))},this.onQuery=function(a){return g(function(b){return b.value.afterQueryInit.subscribe(a)},l(f))},this.loadHistory=function(){return g(function(a){return a.value.view.history.doRefreshAll()},k(f))},this.loadQuery=function(a){return g(function(b){return b.value.ctrlr.QT.doQueryLoad(a)},k(f))}}),a("I2B2Service",f)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("QueryViewerModel",d=function b(){c(this,b),this.isLoaded=!1,this.screens=[]}),a("QueryViewerModel",d)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","./query-viewer.model"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.QueryViewerModel}],execute:function(){a("QueryViewer",(i=d(f,g,h),k=i(j=function(){function a(b,d,e){var f=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle="v-min";var g=function(a){return f.service.getScreens(a.adapters,a.queryResults)},h=function(a){f.showLoader=!1,f.runningQuery=null,f.screens=a,f.showCircles=f.screens.length>1,e.screens=a,e.isLoaded=!0},i=function(){return f.service.fetchPreviousQueries().then(g).then(h)["catch"](function(a){return console.log(a)})},j=function(a,b){return f.runningQuery=b[0].name},k=function(){return e.isLoaded?h(e.screens):i()},l=function(a){return"ADD"!==a.action},m=function(a,b){return f.vertStyle=b.find(l)?"v-min":"v-full"};d.onResize(m),d.onHistory(i),d.onQuery(j),k()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a}())||j)),a("QueryViewer",k)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?a.status:a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
+"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("shell.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("Shell",d=function(){function a(){c(this,a)}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}()),a("Shell",d)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:"subject="+encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n\n***Never send patient information, passwords, or other sensitive information by email****\nName:\nTitle:\nUser name (to log into SHRINE):\nTelephone Number (optional):\nPreferred email address (optional):\n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){return window.top.location=a.getComposition(b),a})},a.prototype.getComposition=function(a){return this.config.mailto+a+"?"+this.config.subject+"&"+this.config.body},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu>scrollRatio: ${scrollRatio}<div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">${nodeResult | result}</td></tr></tbody></table><div if.bind="runningQuery">${runningQuery}</div></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(){return this.http.fetch("qep/queryResults").then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){return this.repository.fetchPreviousQueries()},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/container.js",["ramda"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a}],execute:function(){e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",f=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(function(){return b})},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},e(a,[{key:"value",get:function(){return this.__value()}}]),a}()),a("Container",f)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b,c){return c.hasNothing()?a:b(c)})(e.of(null)),h=d.curry(function(a,b){return b.map(d.prop(a))}),i=d.curry(function(a,b){return g(h(a),b)}),j=d.compose(i("i2b2"),i("window"),i("parent")),k=d.compose(i("CRC"),j),l=d.compose(i("events"),j);this.onResize=function(a){return g(function(b){return b.value.changedZoomWindows.subscribe(a)},l(f))},this.onHistory=function(a){return g(function(b){return b.value.ctrlr.history.events.onDataUpdate.subscribe(a)},k(f))},this.onQuery=function(a){return g(function(b){return b.value.afterQueryInit.subscribe(a)},l(f))},this.loadHistory=function(){return g(function(a){return a.value.view.history.doRefreshAll()},k(f))},this.loadQuery=function(a){return g(function(b){return b.value.ctrlr.QT.doQueryLoad(a)},k(f))}}),a("I2B2Service",f)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("QueryViewerModel",d=function b(){c(this,b),this.isLoaded=!1,this.screens=[]}),a("QueryViewerModel",d)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","./query-viewer.model"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.QueryViewerModel}],execute:function(){a("QueryViewer",(i=d(f,g,h),k=i(j=function(){function a(b,d,e){var f=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle="v-min",this.scrollRatio=0;var g=function(a){return f.service.getScreens(a.adapters,a.queryResults)},h=function(a){f.showLoader=!1,f.runningQuery=null,f.screens=a,f.showCircles=f.screens.length>1,e.screens=a,e.isLoaded=!0},i=function(){return f.service.fetchPreviousQueries().then(g).then(h)["catch"](function(a){return console.log(a)})},j=function(a,b){return f.runningQuery=b[0].name},k=function(){return e.isLoaded?h(e.screens):i()},l=function(a){return"ADD"!==a.action},m=function(a,b){return f.vertStyle=b.find(l)?"v-min":"v-full"};d.onResize(m),d.onHistory(i),d.onQuery(j),k()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a.prototype.onScroll=function(a){this.scrollRatio=a.target.clientHeight+a.target.scrollTop+"/"+a.target.scrollHeight},a}())||j)),a("QueryViewer",k)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?a.status:a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js b/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js
index c4f600654..8bc285f17 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js
@@ -1,21 +1,24 @@
+import * as _ from 'ramda';
 export class Container {
-    constructor(v) {
-        this.__value = v;
+    constructor(f) {
+        this.__value = f;
     }
 
     static of(value) {
-        return new Container(value);
+        return new Container(function() {
+            return value;
+        });
     }
 
     get value() {
-        return this.__value;
+        return this.__value();
     }
 
     map(f) {
         return this.hasNothing() ? Container.of(null) : Container.of(f(this.value));
     }
 
     hasNothing() {
         return this.value === null || this.value === undefined;
     }
 }
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html
index 541c0bd3b..2666983dc 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html
@@ -1,63 +1,66 @@
 <template>
     <require from="views/query-viewer/result-style.converter"></require>
     <require from="views/query-viewer/result-value.converter"></require>
     <require from="views/query-viewer/box-style.converter"></require>
     <require from="views/query-viewer/context-menu/context-menu"></require>
     <require from="views/query-viewer/loading-bar/loading-bar"></require>
 
     <loading-bar status.bind="'Loading...'" if.bind="showLoader"></loading-bar>
     <div style="width: 100%; text-align: center">  
         <ul class="circle-pagination" if.bind="showCircles">
             <li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}"
             click.delegate="screenIndex = $index">
                 <div>${screen.id}</div>
             </li>
         </ul>
     </div>
     <div class="box-wrapper">
         <div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle">
             <section>
                 <div>
                     <table cellpadding="0" cellspacing="0" border="0">
                         <thead>
                             <tr>
                                 <th class="tbl-header">
                                 </th>
                                 <th repeat.for="node of screen.nodes" class="tbl-header">
                                     <div class="hideextra">${node}</div>
                                 </th>
                             </tr>
                         </thead>
                     </table>
                 </div>
                 <context-menu context.bind="context"></context-menu>
-                <div class="tbl-content ${vertStyle}">
+
+                scrollRatio: ${scrollRatio}
+                <div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)">
+                    
                     <table cellpadding="0" cellspacing="0" border="0">
                         <tbody>
                             <tr if.bind="runningQuery">
                                 <th>
                                     <div class="hideextra">${runningQuery}</div>
                                 </th>
                                 <td repeat.for="node of screen.nodes" style="color: #00FF00">
                                     RUNNING
                                 </td>
                             </tr>
                             <tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)">
                                 <th>
                                     <div class="hideextra">${result.name}</div>
                                 </th>
                               <td repeat.for="nodeResult of result.nodeResults" 
                                     css="${nodeResult | resultStyle}">
                                     ${nodeResult | result}
                                 </td>
                             </tr>
                         </tbody>
                     </table>
                     <div if.bind="runningQuery">
                         ${runningQuery}
                     </div>
                 </div>
             </section>
         </div>
     </div>
 </template>
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js
index aa4437589..258958e82 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js
@@ -1,57 +1,62 @@
 import { inject, computedFrom } from 'aurelia-framework';
 import { QueryViewerService } from 'views/query-viewer/query-viewer.service';
 import { I2B2Service } from 'common/i2b2.service.js';
 import { QueryViewerModel } from './query-viewer.model';
 
 @inject(QueryViewerService, I2B2Service, QueryViewerModel)
 export class QueryViewer {
     constructor(service, i2b2Svc, model) {
 
         // -- init -- //
         this.screenIndex = 0;
         this.showCircles = false;
         this.showLoader = true;
         this.runningQuery = null;
         this.service = service;
         this.vertStyle = 'v-min';
+        this.scrollRatio = 0;
 
         // -- fetch queries -- //
         const parseResultToScreens = result => this.service.getScreens(result.adapters, result.queryResults);
         const setVM = screens => {
             this.showLoader = false;
             this.runningQuery = null;
             this.screens = screens;
             this.showCircles = this.screens.length > 1;
             model.screens = screens;
             model.isLoaded = true;
         };
         const refresh = () => this.service
             .fetchPreviousQueries()
             .then(parseResultToScreens)
             .then(setVM)
             .catch(error => console.log(error));
 
         const addQuery = (event, data) => this.runningQuery = data[0].name;
         const init = () => (model.isLoaded) ? setVM(model.screens) : refresh();
 
         // -- add i2b2 event listener -- //
         const isMinimized = e => e.action !== 'ADD';
         const setVertStyle = (a, b) => this.vertStyle = b.find(isMinimized) ? 'v-min' : 'v-full';
         i2b2Svc.onResize(setVertStyle);
         i2b2Svc.onHistory(refresh);
         i2b2Svc.onQuery(addQuery);
         init();
     }
     
     getContext(event, result) {
         return {
             x: event.pageX,
             y: event.pageY,
             id: result.id,
             class: 'show'
         };
     }
+
+    onScroll(e) {
+        this.scrollRatio = (e.target.clientHeight + e.target.scrollTop)  + '/' + e.target.scrollHeight;
+    }
 }