diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a10f5ff2f..ad11d6740 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,7 +16,7 @@ jobs:
       - name: setup java
         uses: actions/setup-java@v1
         with:
-          java-version: '14'
+        java-version: '15'
           java-package: jdk
           architecture: x64
 
diff --git a/Dockerfile b/Dockerfile
index 80d12e4f5..9d384545d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM openjdk:14-alpine
+FROM openjdk:15-alpine
 RUN apk --no-cache add curl
 
 COPY nb/target/nb.jar nb.jar
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index e69de29bb..4adc2f46d 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -0,0 +1,8 @@
+- 526d09cd (HEAD -> nb4-rc1) auto create dirs for grafana_apikey
+- b4ec4c9a (origin/nb4-rc1) trigger build
+- af87ef9c relaxed requirement for finicky test
+- 3436ec61 trigger build
+- 17ed4c1e annotator and dashboard fixes
+- 4dab9b89 move annotations enums to package
+- 6d514cb6 bump middle version number to required java version '15'
+- fa78e27f set NB4 to Java 15
diff --git a/devdocs/devguide/hybrid_ratelimiter.md b/devdocs/devguide/hybrid_ratelimiter.md
new file mode 100644
index 000000000..1da432cb6
--- /dev/null
+++ b/devdocs/devguide/hybrid_ratelimiter.md
@@ -0,0 +1,244 @@
+## RateLimiter Design
+
+The nosqlbench rate limiter is a hybrid design, combining ideas from
+well-known algorithms with a heavy dose of mechanical sympathy. The
+resulting implementation provides the following:
+
+1. A basic design that can be explained in one page (this page!)
+2. High throughput, compared to other rate limiters tested.
+3. Graceful degradation with increasing concurrency.
+4. Clearly defined behavioral semantics.
+5. Efficient burst capability, for tunable catch-up rates.
+6. Efficient calculation of wait time.
+
+## Parameters
+
+**rate** - In simplest terms, users simply need to configure the *rate*.
+For example, `rate=12000` specifies an op rate of 12000 ops/second.
+
+**burst rate** - Additionally, users may specify a burst rate which can be
+used to recover unused time when a client is able to go faster than the
+strict limit. The burst rate is multiplied by the _op rate_ to arrive at
+the maximum rate when wait time is available to recover. For
+example, `rate=12000,1.1`
+specifies that a client may operate at 12000 ops/s _when it is caught up_,
+while allowing it to go at a rate of up to 13200 ops/s _when it is behind
+schedule_.
+
+## Design Principles
+
+The core design of the rate limiter is based on
+the [token bucket](https://en.wikipedia.org/wiki/Token_bucket) algorithm
+as established in the telecom industry for rate metering. Additional
+refinements have been added to allow for flexible and reliable use on
+non-realtime systems.
+
+The unit of scheduling used in this design is the token, corresponding
+directly to a nanosecond of time. The scheduling time that is made
+available to callers is stored in a pool of tokens which is set to a
+configured size. The size of the token pool determines how many grants are
+allowed to be dispatched before the next one is forced to wait for
+available tokens.
+
+At some regular frequency, a filler thread adds tokens (nanoseconds of
+time to be distributed to waiting ops) to the pool. The callers which are
+waiting for these tokens consume a number of tokens serially. If the pool
+does not contain the requested number of tokens, then the caller is
+blocked using basic synchronization primitives. When the pool is filled
+any blocked callers are unblocked.
+
+The hybrid rate limiter tracks and accumulates both the passage of system
+time and the usage rate of this time as a measurement of progress. The
+delta between these two reference points in time captures a very simple
+and empirical value of imposed wait time.
+
+That is, the time which was allocated but which was not used always
+represents a slow down which is imposed by external factors. This
+manifests as slower response when considering the target rate to be
+equivalent to user load.
+
+## Design Details
+
+In fact, there are three pools. The _active_ pool, the _bursting_ pool,
+and the
+_waiting_ pool. The active pool has a limited size based on the number of
+operations that are allowed to be granted concurrently.
+
+The bursting pool is sized according to the relative burst rate and the
+size of the active pool. For example, with an op rate of 1000 ops/s and a
+burst rate of 1.1, the active pool can be sized to 1E9 nanos (one second
+of nanos), and the burst pool can be sized to 1E8 (1/10 of that), thus
+yielding a combined pool size of 1E9 + 1E8, or 1100000000 ns.
+
+The waiting pool is where all extra tokens are held in reserve. It is
+unlimited except by the size of a long value. The size of the waiting pool
+is a direct measure of wait time in nanoseconds.
+
+Within the pools, tokens (time) are neither created nor destroyed. They
+are added by the filler based on the passage of time, and consumed by
+callers when they become available. In between these operations, the net
+sum of tokens is preserved. In short, when time deltas are observed in the
+system clock, this time is accumulated into the available scheduling time
+of the token pools. In this way, the token pool acts as a metered
+dispenser of scheduling time to waiting (or not) consumers.
+
+The filler thread adds tokens to the pool according to the system
+real-time clock, at some estimated but unreliable interval. The frequency
+of filling is set high enough to give a reliable perception of time
+passing smoothly, but low enough to avoid wasting too much thread time in
+calling overhead. (It is set to 1K/s by default). Each time filling
+occurs, the real-time clock is check-pointed, and the time delta is fed
+into the pool filling logic as explained below.
+
+## Visual Explanation
+
+The diagram below explains the moving parts of the hybrid rate limiter.
+The arrows represent the flow of tokens (ns) as a form of scheduling
+currency.
+
+The top box shows an active token filler thread which polls the system
+clock and accumulates new time into the token pool.
+
+The bottom boxes represent concurrent readers of the token pool. These are
+typically independent threads which do a blocking read for tokens once
+they are ready to execute the rate-limited task.
+
+![Hybrid Ratelimiter Schematic](hybrid_ratelimiter.png)
+
+In the middle, the passive component in this diagram is the token pool
+itself. When the token filler adds tokens, it never blocks. However, the
+token filler can cause any readers of the token pool to unblock so that
+they can acquire newly available tokens.
+
+When time is added to the token pool, the following steps are taken:
+
+1) New tokens (based on measured time elapsed since the last fill) are
+   added to the active pool until it is full.
+2) Any extra tokens are added to the waiting pool.
+3) If the waiting pool has any tokens, and there is room in the bursting
+   pool, some tokens are moved from the waiting pool to the bursting pool
+   according to how many will fit.
+
+When a caller asks for a number of tokens, the combined total from the
+active and burst pools is available to that caller. If the number of
+tokens needed is not yet available, then the caller will block until
+tokens are added.
+
+## Bursting Logic
+
+Tokens in the waiting pool represent time that has not been claimed by a
+caller. Tokens accumulate in the waiting pool as a side-effect of
+continuous filling outpacing continuous draining, thus creating a backlog
+of operations.
+
+The pool sizes determine both the maximum instantaneously available
+operations as well as the rate at which unclaimed time can be back-filled
+back into the active or burst pools.
+
+### Normalizing for Jitter
+
+Since it is not possible to schedule the filler thread to trigger on a
+strict and reliable schedule (as in a real-time system), the method of
+moving tokens from the waiting pool to the bursting pool must account for
+differences in timing. Thus, tokens which are activated for bursting are
+scaled according to the amount of time added in the last fill, relative to
+the maximum active pool. This means that a full pool fill will allow a
+full burst pool fill, presuming wait time is positive by that amount. It
+also means that the same effect can be achieved by ten consecutive fills
+of a tenth the time each. In effect, bursting is normalized to the passage
+of time along with the burst rate, with a maximum cap imposed when
+operations are unclaimed by callers.
+
+## Mechanical Trade-offs
+
+In this implementation, it is relatively easy to explain how accuracy and
+performance trade-off. They are competing concerns. Consider these two
+extremes of an isochronous configuration:
+
+### Slow Isochronous
+
+For example, the rate limiter could be configured for strict isochronous
+behavior by setting the active pool size to *one* op of nanos and the
+burst rate to 1.0, thus disabling bursting. If the op rate requested is 1
+op/s, this configuration will work relatively well, although *any* caller
+which doesn't show up (or isn't already waiting) when the tokens become
+available will incur a waittime penalty. The odds of this are relatively
+low for a high-velocity client.
+
+### Fast Isochronous
+
+However, if the op rate for this type of configuration is set to 1E8
+operations per second, then the filler thread will be adding 100 ops worth
+of time when there is only *one* op worth of active pool space. This is
+due to the fact that filling can only occur at a maximal frequency which
+has been set to 1K fills/s on average. That will create artificial wait
+time, since the token consumers and producers would not have enough pool
+space to hold the tokens needed during fill. It is not possible on most
+systems to fill the pool at arbitrarily high fill frequencies. Thus, it is
+important for users to understand the limits of the machinery when using
+high rates. In most scenarios, these limits will not be onerous.
+
+### Boundary Rules
+
+Taking these effects into account, the default configuration makes some
+reasonable trade-offs according to the rules below. These rules should
+work well for most rates below 50M ops/s. The net effect of these rules is
+to increase work bulking within the token pools as rates go higher.
+
+Trying to go above 50M ops/s while also forcing isochronous behavior will
+result in artificial wait-time. For this reason, the pool size itself is
+not user-configurable at this time.
+
+- The pool size will always be at least as big as two ops. This rule
+  ensures that there is adequate buffer space for tokens when callers are
+  accessing the token pools near the rate of the filler thread. If this
+  were not ensured, then artificial wait time would be injected due to
+  overflow error.
+- The pool size will always be at least as big as 1E6 nanos, or 1/1000 of
+  a second. This rule ensures that the filler thread has a reasonably
+  attainable update frequency which will prevent underflow in the active
+  or burst pools.
+- The number of ops that can fit in the pool will determine how many ops
+  can be dispatched between fills. For example, an op rate of 1E6 will
+  mean that up to 1000 ops worth of tokens may be present between fills,
+  and up to 1000 ops may be allowed to start at any time before the next
+  fill.
+
+  .1 ops/s : .2 seconds worth 1 ops/s : 2 seconds worth 100 ops/s : 2
+  seconds worth
+
+In practical terms, this means that rates slower than 1K ops/S will have
+their strictness controlled by the burst rate in general, and rates faster
+than 1K ops/S will automatically include some op bulking between fills.
+
+## History
+
+A CAS-oriented method which compensated for RTC calling overhead was used
+previously. This method afforded very high performance, but it was
+difficult to reason about.
+
+This implementation replaces that previous version. Basic synchronization
+primitives (implicit locking via synchronized methods) performed
+surprisingly well -- well enough to discard the complexity of the previous
+implementation.
+
+Further, this version is much easier to study and reason about.
+
+## New Challenges
+
+While the current implementation works well for most basic cases, high CPU
+contention has shown that it can become an artificial bottleneck. Based on
+observations on higher end systems with many cores running many threads
+and high target rates, it appears that the rate limiter becomes a resource
+blocker or forces too much thread management.
+
+Strategies for handling this should be considered:
+
+1) Make callers able to pseudo-randomly (or not randomly) act as a token
+   filler, such that active consumers can do some work stealing from the
+   original token filler thread.
+2) Analyze the timing and history of a high-contention scenario for
+   weaknesses in the parameter adjustment rules above.
+3) Add internal micro-batching at the consumer interface, such that
+   contention cost is lower in general.
+4) Partition the rate limiter into multiple slices.
diff --git a/devdocs/devguide/hybrid_ratelimiter.png b/devdocs/devguide/hybrid_ratelimiter.png
new file mode 100644
index 000000000..68107623c
Binary files /dev/null and b/devdocs/devguide/hybrid_ratelimiter.png differ
diff --git a/devdocs/devguide/hybrid_ratelimiter.svg b/devdocs/devguide/hybrid_ratelimiter.svg
new file mode 100644
index 000000000..f3b9e05fc
--- /dev/null
+++ b/devdocs/devguide/hybrid_ratelimiter.svg
@@ -0,0 +1,2186 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+    width="297mm"
+    height="210mm"
+    viewBox="0 0 297 210"
+    version="1.1"
+    id="svg8"
+    inkscape:version="1.1-dev (1:1.0+devel+202008182239+0d2e79aadc)"
+    sodipodi:docname="hybrid_ratelimiter.svg"
+    inkscape:export-filename="/home/jshook/IdeaProjects/nosqlbench/devdocs/hybrid_ratelimiter.png"
+    inkscape:export-xdpi="96"
+    inkscape:export-ydpi="96"
+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+    xmlns="http://www.w3.org/2000/svg"
+    xmlns:svg="http://www.w3.org/2000/svg"
+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+    xmlns:cc="http://creativecommons.org/ns#"
+    xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <defs
+      id="defs2">
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker2159"
+        style="overflow:visible;"
+        inkscape:isstock="true">
+      <path
+          id="path2157"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#ededed;stroke-width:1pt;stroke-opacity:1;fill:#ededed;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:isstock="true"
+        style="overflow:visible;"
+        id="marker2131"
+        refX="0.0"
+        refY="0.0"
+        orient="auto"
+        inkscape:stockid="Arrow1Lend">
+      <path
+          transform="scale(0.8) rotate(180) translate(12.5,0)"
+          style="fill-rule:evenodd;stroke:#ededed;stroke-width:1pt;stroke-opacity:1;fill:#ededed;fill-opacity:1"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          id="path2129"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker2087"
+        style="overflow:visible;"
+        inkscape:isstock="true">
+      <path
+          id="path2085"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#969696;stroke-width:1pt;stroke-opacity:1;fill:#969696;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:isstock="true"
+        style="overflow:visible;"
+        id="marker2083"
+        refX="0.0"
+        refY="0.0"
+        orient="auto"
+        inkscape:stockid="Arrow1Lend">
+      <path
+          transform="scale(0.8) rotate(180) translate(12.5,0)"
+          style="fill-rule:evenodd;stroke:#969696;stroke-width:1pt;stroke-opacity:1;fill:#969696;fill-opacity:1"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          id="path2081"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker1640"
+        style="overflow:visible;"
+        inkscape:isstock="true">
+      <path
+          id="path1638"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker1501"
+        style="overflow:visible;"
+        inkscape:isstock="true">
+      <path
+          id="path1499"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:isstock="true"
+        style="overflow:visible;"
+        id="marker1475"
+        refX="0.0"
+        refY="0.0"
+        orient="auto"
+        inkscape:stockid="Arrow1Lend"
+        inkscape:collect="always">
+      <path
+          transform="scale(0.8) rotate(180) translate(12.5,0)"
+          style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          id="path1473"/>
+    </marker>
+    <marker
+        inkscape:isstock="true"
+        style="overflow:visible;"
+        id="marker1467"
+        refX="0.0"
+        refY="0.0"
+        orient="auto"
+        inkscape:stockid="Arrow1Lend">
+      <path
+          transform="scale(0.8) rotate(180) translate(12.5,0)"
+          style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          id="path1465"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker1435"
+        style="overflow:visible;"
+        inkscape:isstock="true"
+        inkscape:collect="always">
+      <path
+          id="path1433"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker1431"
+        style="overflow:visible;"
+        inkscape:isstock="true"
+        inkscape:collect="always">
+      <path
+          id="path1171"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="marker4804"
+        style="overflow:visible;"
+        inkscape:isstock="true">
+      <path
+          id="path4802"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#7d7d7d;stroke-width:1pt;stroke-opacity:1;fill:#7d7d7d;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0.0"
+        refX="0.0"
+        id="Arrow1Lend"
+        style="overflow:visible;"
+        inkscape:isstock="true">
+      <path
+          id="path4529"
+          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+          style="fill-rule:evenodd;stroke:#7d7d7d;stroke-width:1pt;stroke-opacity:1;fill:#7d7d7d;fill-opacity:1"
+          transform="scale(0.8) rotate(180) translate(12.5,0)"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0"
+        refX="0"
+        id="marker1431-1"
+        style="overflow:visible"
+        inkscape:isstock="true">
+      <path
+          inkscape:connector-curvature="0"
+          id="path1171-0"
+          d="M 0,0 5,-5 -12.5,0 5,5 Z"
+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+          transform="matrix(-0.8,0,0,-0.8,-10,0)"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0"
+        refX="0"
+        id="marker1435-1"
+        style="overflow:visible"
+        inkscape:isstock="true">
+      <path
+          inkscape:connector-curvature="0"
+          id="path1433-3"
+          d="M 0,0 5,-5 -12.5,0 5,5 Z"
+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+          transform="matrix(-0.8,0,0,-0.8,-10,0)"/>
+    </marker>
+    <marker
+        inkscape:isstock="true"
+        style="overflow:visible"
+        id="marker1475-7"
+        refX="0"
+        refY="0"
+        orient="auto"
+        inkscape:stockid="Arrow1Lend">
+      <path
+          inkscape:connector-curvature="0"
+          transform="matrix(-0.8,0,0,-0.8,-10,0)"
+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+          d="M 0,0 5,-5 -12.5,0 5,5 Z"
+          id="path1473-2"/>
+    </marker>
+    <marker
+        inkscape:stockid="Arrow1Lend"
+        orient="auto"
+        refY="0"
+        refX="0"
+        id="marker1640-5"
+        style="overflow:visible"
+        inkscape:isstock="true">
+      <path
+          inkscape:connector-curvature="0"
+          id="path1638-1"
+          d="M 0,0 5,-5 -12.5,0 5,5 Z"
+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+          transform="matrix(-0.8,0,0,-0.8,-10,0)"/>
+    </marker>
+  </defs>
+  <sodipodi:namedview
+      id="base"
+      pagecolor="#ffffff"
+      bordercolor="#666666"
+      borderopacity="1.0"
+      inkscape:pageopacity="0.0"
+      inkscape:pageshadow="2"
+      inkscape:zoom="1.6411848"
+      inkscape:cx="269.62229"
+      inkscape:cy="433.22361"
+      inkscape:document-units="mm"
+      inkscape:current-layer="g1199"
+      showgrid="true"
+      inkscape:window-width="3554"
+      inkscape:window-height="2007"
+      inkscape:window-x="286"
+      inkscape:window-y="2160"
+      inkscape:window-maximized="1"
+      inkscape:snap-intersection-paths="true"
+      inkscape:snap-bbox="true"
+      inkscape:bbox-paths="true"
+      inkscape:bbox-nodes="true"
+      inkscape:snap-bbox-edge-midpoints="true"
+      inkscape:snap-bbox-midpoints="true">
+    <inkscape:grid
+        type="xygrid"
+        id="grid815"
+        dotted="false"/>
+  </sodipodi:namedview>
+  <metadata
+      id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+          rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+            rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+      inkscape:label="Layer 1"
+      inkscape:groupmode="layer"
+      id="layer1"
+      transform="translate(0,-87)"
+      style="display:none">
+    <path
+        style="fill:none;stroke:#7d7d7d;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lend);marker-end:url(#marker4804)"
+        d="M 50.799999,178.46667 H 186.26667"
+        id="path4524"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"/>
+    <path
+        style="fill:none;stroke:#7d7d7d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 67.733332,174.23333 V 182.7"
+        id="path4978"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#7d7d7d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 101.6,174.23333 V 182.7"
+        id="path4980"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#7d7d7d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 135.46666,174.23333 V 182.7"
+        id="path4982"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#7d7d7d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 169.33333,174.23333 V 182.7"
+        id="path4984"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"/>
+    <g
+        aria-label="{"
+        transform="matrix(0,-2.509412,-2.509412,0,409.26608,1096.1585)"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:6.77553px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        id="flowRoot4986">
+      <path
+          d="m 363.16948,136.10071 h -0.0703 q -0.85627,0 -1.30358,-0.5815 -0.42174,-0.51759 -0.42174,-1.38664 l 0.0128,-3.85961 q 0,-0.81793 -0.79876,-0.82432 v -0.21087 l 0.23643,-0.0128 q 0.56233,-0.0958 0.56233,-0.82432 l -0.0128,-3.8596 q 0,-0.88183 0.46647,-1.40582 0.46009,-0.53038 1.32914,-0.53038 v 0.21088 l -0.29395,0.0192 -0.23643,0.0639 q -0.73486,0.28116 -0.75403,1.46332 l -0.0511,3.6743 q -0.0192,0.90739 -0.8371,1.30996 0.81793,0.3898 0.8371,1.32275 l 0.0511,3.66151 q 0.0256,1.5464 1.25246,1.55918 0.0192,0 0.0319,0 z"
+          style="font-size:13.0869px;line-height:1.25;letter-spacing:10.082px;word-spacing:8.54225px"
+          id="path4994"
+          inkscape:connector-curvature="0"/>
+    </g>
+    <path
+        inkscape:connector-curvature="0"
+        id="path4994-6"
+        d="m 71.904189,167.87727 c 0,0 2.63e-4,0.006 2.63e-4,0.006 h -0.03926 l -0.0079,0.38558 c -0.0398,0.61143 -0.211087,0.91691 -0.513628,0.91691 l -2.404205,-0.0208 c -0.36621,0 -0.658025,0.25387 -0.875631,0.76107 -0.220261,0.50027 -0.330447,1.22275 -0.330447,2.16768 0.100316,-10e-4 0.143416,-0.47962 0.143416,-0.47962 l 0.03977,-0.38557 c 0.116761,-0.79903 0.420617,-1.2091 0.911551,-1.22994 l 2.288752,-0.0833 c 0.345684,-0.0191 0.725624,-0.47362 0.849977,-1.15067 0.124403,0.6769 0.504082,1.13152 0.849719,1.15067 l 2.288753,0.0833 c 0.490932,0.0208 0.794789,0.43091 0.91155,1.22994 l 0.03977,0.38557 c 0,0 0.0431,0.47815 0.143416,0.47962 0,-0.94493 -0.110186,-1.66741 -0.330446,-2.16768 -0.217607,-0.5072 -0.509422,-0.76107 -0.875632,-0.76107 l -2.404205,0.0208 c -0.30254,0 -0.473823,-0.30548 -0.513628,-0.91691 l -0.008,-0.38558 h -0.03925 c 4e-6,-1.2e-4 2.63e-4,-0.006 2.63e-4,-0.006 l -0.06234,0.004 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:1.00795"/>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot6447"
+        style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:10px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,-17.226329,158.0725)"><flowRegion
+         id="flowRegion6449"
+         style="letter-spacing:10px"><rect
+           id="rect6451"
+           width="224"
+           height="80"
+           x="272"
+           y="105.70079"
+           style="letter-spacing:10px" /></flowRegion>
+      <flowPara
+          id="flowPara6453"
+          style="font-size:16px;text-align:center;letter-spacing:0px;text-anchor:middle">window</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot6447-8"
+        style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:10px;word-spacing:0px;opacity:1;vector-effect:none;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:4.7422;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,-21.84749,128.83581)"><flowRegion
+         id="flowRegion6449-5"
+         style="letter-spacing:10px;vector-effect:none;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:4.7422;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect6451-5"
+           width="224"
+           height="80"
+           x="272"
+           y="105.70079"
+           style="letter-spacing:10px;vector-effect:none;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:4.74219561;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara6453-0"
+          style="font-size:21.3333px;text-align:center;letter-spacing:0px;text-anchor:middle;vector-effect:none;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:4.7422;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1">ops ...</flowPara></flowRoot>
+    <g
+        aria-label="{"
+        transform="matrix(0,-2.509426,-3.1367641,0,494.24825,1111.4453)"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:6.77553px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        id="flowRoot4986-8">
+      <path
+          d="m 363.16948,136.10071 h -0.0703 q -0.85627,0 -1.30358,-0.5815 -0.42174,-0.51759 -0.42174,-1.38664 l 0.0128,-3.85961 q 0,-0.81793 -0.79876,-0.82432 v -0.21087 l 0.23643,-0.0128 q 0.56233,-0.0958 0.56233,-0.82432 l -0.0128,-3.8596 q 0,-0.88183 0.46647,-1.40582 0.46009,-0.53038 1.32914,-0.53038 v 0.21088 l -0.29395,0.0192 -0.23643,0.0639 q -0.73486,0.28116 -0.75403,1.46332 l -0.0511,3.6743 q -0.0192,0.90739 -0.8371,1.30996 0.81793,0.3898 0.8371,1.32275 l 0.0511,3.66151 q 0.0256,1.5464 1.25246,1.55918 0.0192,0 0.0319,0 z"
+          style="font-size:13.0869px;line-height:1.25;letter-spacing:10.082px;word-spacing:8.54225px"
+          id="path4994-2"
+          inkscape:connector-curvature="0"/>
+    </g>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot6447-3"
+        style="font-style:normal;font-weight:normal;font-size:40px;line-height:0.5;font-family:sans-serif;letter-spacing:10px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,-31.568495,171.82043)"><flowRegion
+         id="flowRegion6449-0"
+         style="line-height:0.5;letter-spacing:10px"><rect
+           id="rect6451-7"
+           width="242.06213"
+           height="36.3475"
+           x="334.10321"
+           y="127.86569"
+           style="line-height:0.5;letter-spacing:10px" /></flowRegion>
+      <flowPara
+          style="font-size:16px;line-height:0.5;text-align:center;letter-spacing:0px;text-anchor:middle"
+          id="flowPara6539">window * burst ratio</flowPara></flowRoot>
+    <g
+        aria-label="{"
+        transform="matrix(0,-2.5093559,-0.62735364,0,186.98327,1096.1381)"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:6.77553px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        id="flowRoot4986-1">
+      <path
+          d="m 363.16948,136.10071 h -0.0703 q -0.85627,0 -1.30358,-0.5815 -0.42174,-0.51759 -0.42174,-1.38664 l 0.0128,-3.85961 q 0,-0.81793 -0.79876,-0.82432 v -0.21087 l 0.23643,-0.0128 q 0.56233,-0.0958 0.56233,-0.82432 l -0.0128,-3.8596 q 0,-0.88183 0.46647,-1.40582 0.46009,-0.53038 1.32914,-0.53038 v 0.21088 l -0.29395,0.0192 -0.23643,0.0639 q -0.73486,0.28116 -0.75403,1.46332 l -0.0511,3.6743 q -0.0192,0.90739 -0.8371,1.30996 0.81793,0.3898 0.8371,1.32275 l 0.0511,3.66151 q 0.0256,1.5464 1.25246,1.55918 0.0192,0 0.0319,0 z"
+          style="font-size:13.0869px;line-height:1.25;letter-spacing:10.082px;word-spacing:8.54225px"
+          id="path4994-9"
+          inkscape:connector-curvature="0"/>
+    </g>
+    <g
+        id="use6977"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:6.77553px;word-spacing:0px;fill:#ae8fe2;fill-opacity:1;stroke:none"
+        transform="matrix(0,1.6309665,0.62292356,0,-0.1735206,-420.22365)"
+        aria-label="{">
+      <path
+          inkscape:connector-curvature="0"
+          id="path1769"
+          transform="matrix(0,0.21087279,0.21087279,0,297.01851,65.343312)"
+          d="m 303.29688,301.44141 c 0,0 0.002,0.0172 0.002,0.0176 H 303 l -0.0605,1.1211 c -0.30302,1.7778 -1.60696,2.66601 -3.91015,2.66601 l -18.30274,-0.0605 c -2.78789,0 -5.00942,0.73816 -6.66601,2.21289 -1.6768,1.45457 -2.51563,3.55525 -2.51563,6.30273 0.76369,-0.004 1.0918,-1.39453 1.0918,-1.39453 l 0.30273,-1.12109 c 0.88888,-2.32325 3.20208,-3.51557 6.93946,-3.57617 l 17.42382,-0.24219 c 2.63163,-0.0557 5.52404,-1.37711 6.47071,-3.34571 0.94706,1.96816 3.83748,3.29003 6.46875,3.34571 l 17.42383,0.24219 c 3.73737,0.0606 6.05057,1.25292 6.93945,3.57617 l 0.30273,1.12109 c 0,0 0.32812,1.39026 1.0918,1.39453 0,-2.74748 -0.83883,-4.84816 -2.51562,-6.30273 -1.6566,-1.47473 -3.87813,-2.21289 -6.66602,-2.21289 l -18.30274,0.0605 c -2.30318,0 -3.60712,-0.88821 -3.91015,-2.66601 l -0.0606,-1.1211 h -0.29883 c 3e-5,-3.5e-4 0.002,-0.0176 0.002,-0.0176 l -0.47461,0.0117 z"
+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:4.7422"/>
+    </g>
+    <g
+        id="use6983"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:6.77553px;word-spacing:0px;fill:#ae8fe2;fill-opacity:1;stroke:none"
+        transform="matrix(0,1.6309665,0.62292356,0,8.2931456,-420.22365)"
+        aria-label="{">
+      <path
+          inkscape:connector-curvature="0"
+          id="path1773"
+          transform="matrix(0,0.21087279,0.21087279,0,297.01851,65.343312)"
+          d="m 303.29688,301.44141 c 0,0 0.002,0.0172 0.002,0.0176 H 303 l -0.0605,1.1211 c -0.30302,1.7778 -1.60696,2.66601 -3.91015,2.66601 l -18.30274,-0.0605 c -2.78789,0 -5.00942,0.73816 -6.66601,2.21289 -1.6768,1.45457 -2.51563,3.55525 -2.51563,6.30273 0.76369,-0.004 1.0918,-1.39453 1.0918,-1.39453 l 0.30273,-1.12109 c 0.88888,-2.32325 3.20208,-3.51557 6.93946,-3.57617 l 17.42382,-0.24219 c 2.63163,-0.0557 5.52404,-1.37711 6.47071,-3.34571 0.94706,1.96816 3.83748,3.29003 6.46875,3.34571 l 17.42383,0.24219 c 3.73737,0.0606 6.05057,1.25292 6.93945,3.57617 l 0.30273,1.12109 c 0,0 0.32812,1.39026 1.0918,1.39453 0,-2.74748 -0.83883,-4.84816 -2.51562,-6.30273 -1.6566,-1.47473 -3.87813,-2.21289 -6.66602,-2.21289 l -18.30274,0.0605 c -2.30318,0 -3.60712,-0.88821 -3.91015,-2.66601 l -0.0606,-1.1211 h -0.29883 c 3e-5,-3.5e-4 0.002,-0.0176 0.002,-0.0176 l -0.47461,0.0117 z"
+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;fill:#ae8fe2;fill-opacity:1;stroke:none;stroke-width:4.7422"/>
+    </g>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot6447-9"
+        style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:10px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,-17.226329,149.60583)"><flowRegion
+         id="flowRegion6449-7"
+         style="letter-spacing:10px"><rect
+           id="rect6451-6"
+           width="224"
+           height="80"
+           x="272"
+           y="105.70079"
+           style="letter-spacing:10px" /></flowRegion>
+      <flowPara
+          id="flowPara6453-2"
+          style="font-size:10.6667px;text-align:center;letter-spacing:0px;text-anchor:middle">16</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot6447-9-7"
+        style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:10px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,3.9403381,149.60583)"><flowRegion
+         id="flowRegion6449-7-1"
+         style="letter-spacing:10px"><rect
+           id="rect6451-6-5"
+           width="224"
+           height="80"
+           x="272"
+           y="105.70079"
+           style="letter-spacing:10px" /></flowRegion>
+      <flowPara
+          id="flowPara6453-2-8"
+          style="font-size:10.6667px;text-align:center;letter-spacing:0px;text-anchor:middle">4</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot6447-9-8"
+        style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:10px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,-12.992995,164.4225)"><flowRegion
+         id="flowRegion6449-7-4"
+         style="letter-spacing:10px"><rect
+           id="rect6451-6-56"
+           width="224"
+           height="80"
+           x="272"
+           y="105.70079"
+           style="letter-spacing:10px" /></flowRegion>
+      <flowPara
+          id="flowPara6453-2-5"
+          style="font-size:10.6667px;text-align:center;letter-spacing:0px;text-anchor:middle">20</flowPara></flowRoot>
+  </g>
+  <g
+      inkscape:groupmode="layer"
+      id="layer3"
+      inkscape:label="braces"
+      style="display:none">
+    <path
+        style="display:inline;fill:none;stroke:#ededed;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+        d="M 101.6,74.533333 V 104.16667"
+        id="path2056-0"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="display:inline;fill:none;stroke:#ededed;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+        d="M 67.733337,74.533333 V 104.16667"
+        id="path2056-4"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="fill:none;stroke:#ededed;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+        d="M 110.06667,74.533333 V 104.16667"
+        id="path2056"
+        inkscape:connector-curvature="0"/>
+    <path
+        sodipodi:nodetypes="ccccccccccccccccccccc"
+        inkscape:connector-curvature="0"
+        id="path4994-6-0"
+        d="m 105.83333,91.443669 -0.10942,-0.38556 c -0.0398,-0.611433 -0.21108,-0.916913 -0.51363,-0.916913 l -2.4042,0.02088 c -0.36621,0 -0.65803,-0.253876 -0.87563,-0.761074 -0.22026,-0.50027 -0.33045,-1.22274 -0.33045,-2.167673 0.10032,0.0014 0.14342,0.479619 0.14342,0.479619 l 0.0397,0.385576 c 0.11676,0.799027 0.42061,1.209085 0.91155,1.229929 l 2.28875,0.08334 c 0.34568,0.01924 0.72562,0.473633 0.84998,1.150679 0.1244,-0.6769 0.50408,-1.131532 0.84972,-1.150679 l 2.28875,-0.08334 c 0.49094,-0.02088 0.79479,-0.430902 0.91155,-1.229929 l 0.0397,-0.385576 c 0,0 0.0431,-0.478151 0.14342,-0.479619 0,0.944933 -0.11019,1.667403 -0.33045,2.167669 -0.21761,0.507198 -0.50942,0.761074 -0.87563,0.761074 l -2.40421,-0.02088 c -0.30254,0 -0.47382,0.30548 -0.51363,0.916913 -0.10942,0.38556 -0.10942,0.38556 -0.10942,0.38556 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="cccccccccccccccccccccccccc"
+        inkscape:connector-curvature="0"
+        id="path4994-6-0-4-0"
+        d="m 84.66671,91.466666 -0.109422,-0.387697 c -0.03981,-0.614826 -0.211084,-0.921986 -0.513626,-0.921986 l -1.318321,0.01142 -13.785928,0.0098 c -0.36621,0 -0.658025,-0.255279 -0.875631,-0.765298 -0.22026,-0.503039 -0.330448,-1.229504 -0.330448,-2.179673 0.100315,0.0014 0.143415,0.482277 0.143415,0.482277 l 0.03974,0.387713 c 0.116761,0.803447 0.420616,1.215788 0.911549,1.236746 l 13.888567,0.04338 1.100229,0.04028 c 0.345685,0.01941 0.725625,0.476259 0.849979,1.157057 0.124404,-0.680651 0.504082,-1.137811 0.849718,-1.157057 l 1.096705,-0.04012 13.892054,-0.04355 c 0.49093,-0.02104 0.79478,-0.433299 0.91155,-1.236746 l 0.0397,-0.387713 c 0,0 0.0431,-0.480793 0.14342,-0.482277 0,0.950169 -0.11019,1.676634 -0.33045,2.179673 -0.2176,0.510019 -0.50942,0.765298 -0.87563,0.765298 l -13.7631,-0.0098 -1.341102,-0.01142 c -0.302541,0 -0.473827,0.30716 -0.513632,0.921986 l -0.109422,0.387697 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="ccccccccccccscccscccc"
+        inkscape:connector-curvature="0"
+        id="path4994-6-0-0"
+        d="m 114.30004,91.443669 -0.10942,-0.38556 c -0.0398,-0.611433 -0.21109,-0.916913 -0.51363,-0.916913 l -2.4042,0.02088 c -0.36621,0 -0.65803,-0.253876 -0.87563,-0.761074 -0.22026,-0.500266 -0.33045,-1.222736 -0.33045,-2.167669 0.10031,0.0014 0.14341,0.479619 0.14341,0.479619 l 0.0397,0.385576 c 0.11676,0.799027 0.42061,1.209085 0.91155,1.229929 l 2.28875,0.08334 c 0.34568,0.01924 0.72562,0.473633 0.84998,1.150679 0.1244,-0.6769 0.50408,-1.131532 0.84971,-1.150679 0,0 1.5263,-0.04501 2.28876,-0.08334 1.02037,-0.05121 14.26874,-0.418154 14.26874,-0.418154 l 1.64269,0.89159 -1.66189,0.849203 c 0,0 -13.46931,-0.440515 -14.3609,-0.48902 -0.80025,-0.04355 -2.40421,-0.02088 -2.40421,-0.02088 -0.30254,0 -0.47382,0.30548 -0.51363,0.916913 L 114.3,91.443669 Z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
+    <path
+        d="m 131.01288,90.188575 q -0.0482,-0.05595 -0.12433,-0.186487 -0.10412,0.186487 -0.19581,0.268851 -0.11499,0.09946 -0.29371,0.09946 -0.2098,0 -0.3481,-0.156957 -0.14609,-0.164729 -0.14609,-0.436687 0,-0.261081 0.14609,-0.438241 0.13053,-0.156961 0.35121,-0.156961 0.11344,0 0.19736,0.04662 0.0979,0.05129 0.16473,0.139865 0.0622,0.07926 0.12432,0.186483 0.10412,-0.186483 0.19581,-0.268847 0.11501,-0.09946 0.29372,-0.09946 0.2098,0 0.34811,0.156958 0.14608,0.164729 0.14608,0.436686 0,0.261082 -0.14608,0.438242 -0.13054,0.156957 -0.35122,0.156957 -0.11344,0 -0.19737,-0.04662 -0.0839,-0.04196 -0.16472,-0.139864 z m -0.63094,-0.02176 q 0.25642,0 0.41026,-0.372972 -0.19736,-0.407159 -0.41026,-0.407159 -0.15541,0 -0.23466,0.111893 -0.0855,0.119661 -0.0855,0.278174 0,0.174053 0.0855,0.281281 0.087,0.108783 0.23466,0.108783 z m 1.01324,-0.777021 q -0.23156,0 -0.41028,0.372971 0.19581,0.40716 0.41028,0.40716 0.1554,0 0.23466,-0.111893 0.0855,-0.119662 0.0855,-0.278174 0,-0.174054 -0.0855,-0.281281 -0.087,-0.108783 -0.23466,-0.108783 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;vector-effect:none;fill:#050023;fill-opacity:1;stroke:none;stroke-width:0.72471;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        id="path1109"
+        inkscape:connector-curvature="0"/>
+    <text
+        id="text1114"
+        y="93.535225"
+        x="80.366043"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        xml:space="preserve"><tspan
+         style="font-size:2.82222px;stroke-width:0.264583"
+         y="93.535225"
+         x="80.366043"
+         id="tspan1112"
+         sodipodi:role="line">active</tspan></text>
+    <text
+        id="text1118"
+        y="93.233032"
+        x="102.11585"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        xml:space="preserve"><tspan
+         style="font-size:2.82222px;stroke-width:0.264583"
+         y="93.233032"
+         x="102.11585"
+         id="tspan1116"
+         sodipodi:role="line">burst</tspan></text>
+    <text
+        id="text1122"
+        y="93.195877"
+        x="111.30794"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        xml:space="preserve"><tspan
+         style="font-size:2.82222px;stroke-width:0.264583"
+         y="93.195877"
+         x="111.30794"
+         id="tspan1120"
+         sodipodi:role="line">wait</tspan></text>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1431);marker-end:url(#marker1435)"
+        d="m 67.733333,78.766667 h 6.330709 c 1.0669,0.04027 2.110809,0.928831 2.135958,2.126243 v 4.223757"
+        id="path1166"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1475)"
+        d="m 74.083333,78.766667 c 2.116667,0 3.006299,0.06907 4.313132,0.04208 2.036868,-0.04208 21.782585,-0.238843 35.903535,-0.04208 1.21139,0.02829 2.06952,1.009 2.11667,2.116663 v 4.233339"
+        id="path1437"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="csccc"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1501)"
+        d="m 112.18333,89.35 v -6.352517 c 0,-2.11415 -4.23333,-2.11415 -4.23333,-0.0943 v 4.33015"
+        id="path1477"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1507"
+        style="font-style:normal;font-weight:normal;font-size:medium;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.108927"
+        d="m 58.538652,77.608182 -1.021989,2.044587 h 2.04647 z m -1.704976,2.349641 1.420813,-2.710985 h 0.570818 l 1.418321,2.710985 z"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1509"
+        style="font-style:normal;font-weight:normal;font-size:medium;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0619049"
+        d="m 60.270397,79.646308 v -0.235239 h 0.178286 v -0.420953 l 0.126286,-0.02724 q 0.151048,-0.03219 0.242668,-0.116382 0.0941,-0.08419 0.118857,-0.27981 0.02971,-0.235238 0.141143,-0.416001 0.111429,-0.183238 0.289715,-0.287239 0.180762,-0.104 0.413525,-0.104 0.230286,0 0.408573,0.104 0.180761,0.104001 0.29219,0.287239 0.113906,0.180763 0.143621,0.416001 0.02476,0.19562 0.116378,0.27981 0.0941,0.08419 0.245144,0.116382 l 0.126287,0.02724 v 0.420953 h 0.178288 v 0.235239 h -0.869147 v -0.09905 h -1.285145 v 0.09905 z m 1.51048,-0.443239 q 0.133715,0 0.252572,-0.04952 0.118857,-0.052 0.208001,-0.141143 0.08914,-0.08914 0.138667,-0.208001 0.052,-0.118857 0.052,-0.252572 0,-0.133715 -0.052,-0.252572 -0.04952,-0.118857 -0.138667,-0.208 -0.08914,-0.08914 -0.208001,-0.138667 -0.118857,-0.052 -0.252572,-0.052 -0.133715,0 -0.252572,0.052 -0.118857,0.04952 -0.208,0.138667 -0.08914,0.08914 -0.141144,0.208 -0.04952,0.118857 -0.04952,0.252572 0,0.133715 0.04952,0.252572 0.052,0.118857 0.141144,0.208001 0.08914,0.08914 0.208,0.141143 0.118857,0.04952 0.252572,0.04952 z m 0,-0.542287 q -0.04705,0 -0.07924,-0.03219 -0.03219,-0.03219 -0.03219,-0.07924 l -0.24019,-0.141141 0.052,-0.08667 0.240192,0.136191 0.0074,-0.0025 v -0.49524 h 0.104 v 0.49524 q 0.02476,0.01485 0.03962,0.03962 0.01733,0.02476 0.01733,0.05695 0,0.04457 -0.03219,0.07676 -0.03219,0.03219 -0.07676,0.03219 z m 0.282286,-0.552192 q -0.01733,0 -0.03219,-0.01238 -0.01238,-0.01486 -0.01238,-0.02971 0,-0.01733 0.01238,-0.02971 0.01486,-0.01238 0.02971,-0.01238 0.01982,0 0.02971,0.01486 0.01238,0.01486 0.01238,0.02724 0,0.01733 -0.01238,0.02971 -0.01237,0.01238 -0.02724,0.01238 z m -0.564573,0 q -0.01486,0 -0.02971,-0.01238 -0.01238,-0.01238 -0.01238,-0.02971 0,-0.01733 0.01238,-0.02971 0.01238,-0.01238 0.02971,-0.01238 0.01733,0 0.02971,0.01238 0.01238,0.01238 0.01238,0.02971 0,0.02476 -0.01733,0.03467 -0.01733,0.0074 -0.02476,0.0074 z m 0.770099,0.205524 q -0.01734,0 -0.02971,-0.01238 -0.01238,-0.01238 -0.01238,-0.02971 0,-0.01733 0.0099,-0.02971 0.01238,-0.01486 0.03219,-0.01486 0.01486,0 0.02724,0.01238 0.01238,0.01238 0.01238,0.03219 0,0.02229 -0.01733,0.03219 -0.01486,0.0099 -0.0223,0.0099 z m -0.975623,0 q -0.01981,0 -0.03219,-0.01238 -0.0099,-0.01486 -0.0099,-0.02971 0,-0.01981 0.01238,-0.03219 0.01486,-0.01238 0.02971,-0.01238 0.01486,0 0.02724,0.01238 0.01486,0.01238 0.01486,0.03219 0,0.01981 -0.01238,0.03219 -0.01238,0.0099 -0.02971,0.0099 z m 0.487811,0.27981 q 0.01734,0 0.02971,-0.01238 0.01238,-0.01238 0.01238,-0.02971 0,-0.01734 -0.01238,-0.02971 -0.01238,-0.01238 -0.02971,-0.01238 -0.01734,0 -0.02971,0.01238 -0.01238,0.01238 -0.01238,0.02971 0,0.01733 0.01238,0.02971 0.01238,0.01238 0.02971,0.01238 z m 0.562097,0 q -0.01734,0 -0.02971,-0.01238 -0.0099,-0.01238 -0.0099,-0.02971 0,-0.01734 0.0099,-0.02971 0.01238,-0.01238 0.02971,-0.01238 0.01734,0 0.02971,0.01238 0.01238,0.01238 0.01238,0.02971 0,0.01733 -0.01238,0.02971 -0.01238,0.01238 -0.02971,0.01238 z m -1.124194,0 q -0.01981,0 -0.03219,-0.01238 -0.0099,-0.01238 -0.0099,-0.02971 0,-0.01734 0.0099,-0.02971 0.01238,-0.01238 0.03219,-0.01238 0.01733,0 0.02724,0.01238 0.01238,0.01238 0.01238,0.02971 0,0.01733 -0.01238,0.02971 -0.0099,0.01238 -0.02724,0.01238 z m 0.07429,0.282287 q -0.01486,0 -0.02971,-0.01238 -0.01238,-0.01238 -0.01238,-0.02971 0,-0.02229 0.01733,-0.03219 0.01733,-0.01238 0.02476,-0.01238 0.01486,0 0.02724,0.01238 0.01486,0.01238 0.01486,0.03219 0,0.01486 -0.01238,0.02971 -0.0099,0.01238 -0.02971,0.01238 z m 0.975623,0 q -0.01982,0 -0.03219,-0.01238 -0.0099,-0.01486 -0.0099,-0.02971 0,-0.01733 0.01238,-0.02971 0.01238,-0.01238 0.02971,-0.01238 0.03962,0 0.03962,0.03962 0,0.01981 -0.01238,0.03219 -0.01238,0.01238 -0.02724,0.01238 z m -0.205526,0.205524 q -0.01733,0 -0.03219,-0.0099 -0.01238,-0.01238 -0.01238,-0.03219 0,-0.01733 0.01238,-0.02971 0.01238,-0.01238 0.03219,-0.01238 0.01486,0 0.02724,0.01238 0.01238,0.0099 0.01238,0.02971 0,0.01486 -0.01238,0.02971 -0.0099,0.01238 -0.02724,0.01238 z m -0.564573,0 q -0.01733,0 -0.02971,-0.01238 -0.01238,-0.01486 -0.01238,-0.02971 0,-0.01981 0.01238,-0.02971 0.01486,-0.01238 0.02971,-0.01238 0.02476,0 0.03219,0.01486 0.0099,0.01486 0.0099,0.02724 0,0.01981 -0.01238,0.03219 -0.01238,0.0099 -0.02971,0.0099 z m 0.282287,0.07429 q -0.01734,0 -0.02971,-0.0099 -0.01238,-0.01238 -0.01238,-0.03219 0,-0.01733 0.01238,-0.02724 0.01238,-0.01238 0.02971,-0.01238 0.01734,0 0.02971,0.01238 0.01238,0.0099 0.01238,0.02724 0,0.01981 -0.01238,0.03219 -0.01238,0.0099 -0.02971,0.0099 z"/>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="77.238121"
+        y="83.363823"
+        id="text1532"><tspan
+         sodipodi:role="line"
+         id="tspan1530"
+         x="77.238121"
+         y="83.363823"
+         style="font-size:2.82222px;stroke-width:0.264583">1</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="117.45479"
+        y="85.480492"
+        id="text1532-0"><tspan
+         sodipodi:role="line"
+         id="tspan1530-9"
+         x="117.45479"
+         y="85.480492"
+         style="font-size:2.82222px;stroke-width:0.264583">2</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="109.41487"
+        y="84.546974"
+        id="text1532-0-7"><tspan
+         sodipodi:role="line"
+         id="tspan1530-9-5"
+         x="109.41487"
+         y="84.546974"
+         style="font-size:2.82222px;stroke-width:0.264583">3</tspan></text>
+    <text
+        id="text1114-3"
+        y="78.380775"
+        x="68.256477"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        xml:space="preserve"><tspan
+         style="font-size:2.82222px;stroke-width:0.264583"
+         y="78.380775"
+         x="68.256477"
+         id="tspan1112-8"
+         sodipodi:role="line">refill</tspan></text>
+    <text
+        id="text1114-7"
+        y="87.520348"
+        x="68.574081"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;display:inline;opacity:1;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         y="87.520348"
+         x="68.574081"
+         id="tspan1112-4"
+         sodipodi:role="line">op</tspan></text>
+    <path
+        inkscape:connector-curvature="0"
+        id="path4994-6-8"
+        d="m 69.81873,85.110602 c 0,0 1.31e-4,0.003 1.31e-4,0.003 h -0.01963 l -0.0039,0.194119 c -0.0199,0.307822 -0.105543,0.461614 -0.256811,0.461614 l -1.202093,-0.01047 c -0.183104,0 -0.32901,0.127809 -0.437811,0.383158 -0.110131,0.251859 -0.165223,0.615589 -0.165223,1.09131 0.05016,-5.03e-4 0.07171,-0.241462 0.07171,-0.241462 l 0.01989,-0.194114 c 0.05838,-0.402269 0.210306,-0.608718 0.455771,-0.619209 l 1.144367,-0.04194 c 0.17284,-0.0096 0.362809,-0.238442 0.424984,-0.579301 0.0622,0.340784 0.252039,0.56966 0.424857,0.579301 l 1.144366,0.04194 c 0.245464,0.01047 0.397391,0.21694 0.455771,0.619209 l 0.01989,0.194114 c 0,0 0.02155,0.240722 0.07171,0.241462 0,-0.475721 -0.05509,-0.839451 -0.165222,-1.09131 -0.108803,-0.255349 -0.254709,-0.383158 -0.437813,-0.383158 l -1.202091,0.01047 c -0.151269,0 -0.23691,-0.153792 -0.256812,-0.461614 l -0.004,-0.194119 h -0.01963 c 2e-6,-6.1e-5 1.31e-4,-0.003 1.31e-4,-0.003 l -0.03117,0.002 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;opacity:1;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path4994-6-8-8"
+        d="m 74.052065,85.110602 c 0,0 1.31e-4,0.003 1.31e-4,0.003 h -0.01963 l -0.0039,0.194119 c -0.0199,0.307822 -0.105543,0.461614 -0.256811,0.461614 l -1.202093,-0.01047 c -0.183104,0 -0.32901,0.127809 -0.437811,0.383158 -0.110131,0.251859 -0.165223,0.615589 -0.165223,1.09131 0.05016,-5.03e-4 0.07171,-0.241462 0.07171,-0.241462 l 0.01989,-0.194114 c 0.05838,-0.402269 0.210306,-0.608718 0.455771,-0.619209 l 1.144367,-0.04194 c 0.17284,-0.0096 0.362809,-0.238442 0.424984,-0.579301 0.0622,0.340784 0.252039,0.56966 0.424857,0.579301 l 1.144366,0.04194 c 0.245464,0.01047 0.397391,0.21694 0.455771,0.619209 l 0.01989,0.194114 c 0,0 0.02155,0.240722 0.07171,0.241462 0,-0.475721 -0.05509,-0.839451 -0.165222,-1.09131 -0.108802,-0.255349 -0.254708,-0.383158 -0.437812,-0.383158 l -1.202091,0.01047 c -0.151269,0 -0.23691,-0.153793 -0.256812,-0.461615 l -0.004,-0.194119 h -0.01963 c 2e-6,-6.1e-5 1.31e-4,-0.003 1.31e-4,-0.003 l -0.03117,0.002 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;opacity:1;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+    <text
+        id="text1114-7-3"
+        y="87.520348"
+        x="72.807419"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;display:inline;opacity:1;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         y="87.520348"
+         x="72.807419"
+         id="tspan1112-4-7"
+         sodipodi:role="line">op</tspan></text>
+    <text
+        id="text1114-7-3-3"
+        y="101.96121"
+        x="68.433533"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;display:inline;opacity:1;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;vector-effect:none;fill:#806aff;fill-opacity:1;stroke:none;stroke-width:0.816494;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         y="101.96121"
+         x="68.433533"
+         id="tspan1112-4-7-8"
+         sodipodi:role="line">op</tspan></text>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1875"
+        style="font-style:normal;font-weight:normal;font-size:10.6667px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+        transform="scale(0.26458333)"><flowRegion
+         id="flowRegion1877"
+         style="font-size:10.6667px"><rect
+           id="rect1879"
+           width="200"
+           height="40"
+           x="304"
+           y="257.70078"
+           style="font-size:10.66666698px" /></flowRegion>
+      <flowPara
+          id="flowPara1881"/></flowRoot>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="141.81667"
+        y="110.51666"
+        id="text1897"/>
+    <text
+        id="text1114-0"
+        y="97.761757"
+        x="70.888428"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#dadada;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        xml:space="preserve"><tspan
+         style="font-style:italic;font-weight:bold;font-size:2.82222px;vector-effect:none;fill:#dadada;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         y="97.761757"
+         x="70.888428"
+         id="tspan1112-9"
+         sodipodi:role="line">available to consumers</tspan></text>
+    <g
+        id="g1956"
+        transform="translate(0,-2.559597)">
+      <path
+          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.714701"
+          d="m 84.666564,98.702477 -0.109422,-0.19385 c -0.03981,-0.30741 -0.211084,-0.46099 -0.513626,-0.46099 l -9.784987,0.0057 -5.319262,0.005 c -0.36621,0 -0.658025,-0.12764 -0.875631,-0.382645 -0.22026,-0.25152 -0.330448,-0.614755 -0.330448,-1.08984 0.100315,5e-4 0.143415,0.24114 0.143415,0.24114 l 0.03974,0.193855 c 0.116761,0.401725 0.420616,0.607895 0.911549,0.618375 l 5.421901,0.0217 9.566895,0.02015 c 0.345685,0.0097 0.725625,0.238125 0.849979,0.578525 0.124404,-0.340325 0.504082,-0.568905 0.849718,-0.578525 l 1.096705,-0.02005 22.35871,-0.02175 c 0.49093,-0.0105 0.79479,-0.21665 0.91155,-0.618375 l 0.0397,-0.193855 c 0,0 0.0431,-0.240395 0.14342,-0.24114 0,0.475085 -0.11018,0.83832 -0.33044,1.08984 -0.21761,0.255005 -0.50942,0.382645 -0.87563,0.382645 l -22.229766,-0.005 -1.341102,-0.0057 c -0.302541,0 -0.473827,0.15358 -0.513632,0.46099 l -0.109422,0.19385 z"
+          id="path4994-6-0-4"
+          inkscape:connector-curvature="0"
+          sodipodi:nodetypes="cccccccccccccccccccccccccc"/>
+      <path
+          sodipodi:nodetypes="ccsc"
+          inkscape:connector-curvature="0"
+          id="path1616"
+          d="m 84.674306,98.542354 -0.0076,1.833906 c 0,0 0,2.11667 -2.116667,2.11667 H 63.5"
+          style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1640)"/>
+    </g>
+    <path
+        sodipodi:nodetypes="ccccccccsscssc"
+        inkscape:connector-curvature="0"
+        id="path4994-6-0-4-4"
+        d="m 116.5919,95.49374 -5.31926,0.005 c -0.36621,0 -0.65803,-0.12764 -0.87563,-0.382645 -0.22026,-0.25152 -0.33045,-0.614755 -0.33045,-1.08984 0.10031,5e-4 0.14341,0.24114 0.14341,0.24114 l 0.0397,0.193855 c 0.11676,0.401725 0.42062,0.607895 0.91155,0.618375 l 5.4219,0.0217 c 2.93565,0.0045 9.63606,0.08367 13.81362,0.09876 0.65243,0.0024 0.12011,-0.218605 0.80418,-0.201947 0.74349,0.0181 1.46534,0.200354 2.04745,0.330975 -0.51415,0.110172 -1.32169,0.36346 -2.02005,0.362679 -0.66603,-7.44e-4 -0.16383,-0.155869 -0.82576,-0.15706 -4.20173,-0.0076 -9.95511,0.0051 -13.81066,-0.04099 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.714701"/>
+    <text
+        id="text1114-0-7"
+        y="97.906219"
+        x="110.96845"
+        style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;display:inline;opacity:1;vector-effect:none;fill:#dadada;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        xml:space="preserve"><tspan
+         style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.82222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;vector-effect:none;fill:#dadada;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         y="97.906219"
+         x="110.96845"
+         id="tspan1112-9-1"
+         sodipodi:role="line">unused time</tspan></text>
+  </g>
+  <g
+      inkscape:groupmode="layer"
+      id="layer2"
+      inkscape:label="buckets2"
+      style="display:none">
+    <path
+        style="opacity:1;vector-effect:none;fill:#fef7cf;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="m 61.383333,146.5 v -25.4 h 31.75 l -10e-7,25.4 z"
+        id="path1110"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="ccccc"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:#d6fee4;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 78.316667,95.699999 V 102.05 H 105.83333 V 121.1 H 93.133333 l -10e-7,25.4 H 150.28333 V 95.699999 Z"
+        id="path1093"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="ccccccccc"/>
+    <path
+        style="fill:#d6fef1;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+        d="m 46.566666,95.7 h 31.750001 v 6.35 H 105.83333 V 121.1 H 61.383333 v 25.4 H 46.566667 Z"
+        id="path1051"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="ccccccccc"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1005"
+        d="m 69.85,108.4 v 8.46667 h 31.74999 V 108.4"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        sodipodi:nodetypes="cccc"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1007"
+        d="m 74.083333,133.8 v 8.46667 H 88.9 V 133.8"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        sodipodi:nodetypes="cccc"/>
+    <path
+        sodipodi:nodetypes="cccc"
+        inkscape:connector-curvature="0"
+        id="path1009"
+        d="m 95.25,125.33333 v 16.93334 h 50.8 v -16.93334"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <g
+        id="g1076"
+        transform="translate(2.1166677)">
+      <path
+          sodipodi:nodetypes="cccc"
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 88.899999,125.33333 v 4.23333 L 84.666666,127.45 Z"
+          id="path1013"
+          inkscape:connector-curvature="0"/>
+      <path
+          sodipodi:nodetypes="ccccc"
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 84.666666,127.45 h -8.466667 v 2.11666 0 0"
+          id="path1015"
+          inkscape:connector-curvature="0"/>
+      <path
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="M 78.316665,129.56666 H 74.083332 L 76.199999,133.8 Z"
+          id="path1017"
+          inkscape:connector-curvature="0"
+          sodipodi:nodetypes="cccc"/>
+    </g>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1019"
+        d="m 74.083333,108.4 -2.116666,-4.23333 H 76.2 Z"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        sodipodi:nodetypes="cccc"/>
+    <path
+        sodipodi:nodetypes="cccccc"
+        inkscape:connector-curvature="0"
+        id="path1021"
+        d="m 74.083334,104.16667 v -4.23334 l -21.166669,3e-6 -4.233332,2.116667 v -4.233333 l 4.233332,2.116666"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="ccc"
+        inkscape:connector-curvature="0"
+        id="path1025"
+        d="m 82.55,99.933333 h 27.51666 V 121.1"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1027"
+        d="m 112.18333,121.1 h -4.23334 l 2.11667,4.23333 z"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1038"
+        d="M 69.85,135.91667 V 140.15 l -4.233333,-2.11667 z"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path
+        inkscape:connector-curvature="0"
+        id="path1040"
+        d="M 65.616667,110.51667 V 114.75 l -4.233333,-2.11667 z"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="cccccccc"
+        inkscape:connector-curvature="0"
+        id="path1042"
+        d="M 61.383333,112.63333 H 57.15 v 25.4 h -4.233333 v -2.11666 l -4.233333,2.11666 4.233333,2.11667 v -2.11667"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="cc"
+        inkscape:connector-curvature="0"
+        id="path1044"
+        d="M 65.616667,138.03333 H 57.15"
+        style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.264583, 0.264583;stroke-dashoffset:0;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="cc"
+        inkscape:connector-curvature="0"
+        id="path1044-3"
+        d="m 82.55,99.933333 -8.466667,-2e-6"
+        style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.264583, 0.264583;stroke-dashoffset:0;stroke-opacity:1"/>
+  </g>
+  <g
+      inkscape:label="betterbuckets"
+      id="g1164"
+      inkscape:groupmode="layer"
+      style="display:none">
+    <rect
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        id="rect1670"
+        width="116.41666"
+        height="97.366669"
+        x="59.266666"
+        y="2.5666666"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:#fff6f4;fill-opacity:1;stroke:#dcdcdc;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 127,80.883333 H 84.666666 V 47.016667 H 127 Z"
+        id="path1536"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:#f7f4ff;fill-opacity:1;stroke:#dcdcdc;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 105.83333,19.5 V 47.016667 H 127 v 33.866666 h 42.33333 V 19.5 Z"
+        id="path1534"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:#f4fff7;fill-opacity:1;stroke:#dcdcdc;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 105.83333,47.016667 H 84.666667 V 80.883333 H 63.5 L 63.500003,19.5 h 42.333327 z"
+        id="path1519"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="ccccccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        sodipodi:nodetypes="ccccc"
+        inkscape:connector-curvature="0"
+        id="path1126"
+        d="m 116.41667,176.13333 v -25.4 h 31.75 v 25.4 z"
+        style="opacity:1;vector-effect:none;fill:#fef7cf;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="ccccccccc"
+        inkscape:connector-curvature="0"
+        id="path1128"
+        d="m 133.35,125.33333 v 6.35 h 27.51666 v 19.05 h -12.69999 v 25.4 h 57.14999 v -50.8 z"
+        style="opacity:1;vector-effect:none;fill:#d6fee4;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="ccccccccc"
+        inkscape:connector-curvature="0"
+        id="path1130"
+        d="m 101.6,125.33333 h 31.75 v 6.35 h 27.51666 v 19.05 h -44.44999 v 25.4 H 101.6 Z"
+        style="fill:#d6fef1;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
+    <path
+        sodipodi:nodetypes="cccc"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 124.88333,138.03333 V 146.5 h 31.74999 v -8.46667"
+        id="path1132"
+        inkscape:connector-curvature="0"/>
+    <path
+        sodipodi:nodetypes="cccc"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 129.11667,163.43333 V 171.9 h 14.81666 v -8.46667"
+        id="path1134"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 150.28333,154.96666 V 171.9 h 50.8 v -16.93334"
+        id="path1136"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"/>
+    <g
+        transform="translate(57.150002,29.633337)"
+        id="g1144">
+      <path
+          inkscape:connector-curvature="0"
+          id="path1138"
+          d="m 88.899999,125.33333 v 4.23333 L 84.666666,127.45 Z"
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          sodipodi:nodetypes="cccc"/>
+      <path
+          inkscape:connector-curvature="0"
+          id="path1140"
+          d="m 84.666666,127.45 h -8.466667 v 2.11666 0 0"
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          sodipodi:nodetypes="ccccc"/>
+      <path
+          sodipodi:nodetypes="cccc"
+          inkscape:connector-curvature="0"
+          id="path1142"
+          d="M 78.316665,129.56666 H 74.083332 L 76.199999,133.8 Z"
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
+    </g>
+    <path
+        sodipodi:nodetypes="cccc"
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 129.11667,138.03333 127,133.8 h 4.23333 z"
+        id="path1146"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 129.11667,133.8 v -4.23334 l -21.16667,10e-6 -4.23333,2.11666 V 127.45 l 4.23333,2.11667"
+        id="path1148"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccccc"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 137.58333,129.56667 h 27.51666 v 21.16666"
+        id="path1150"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="ccc"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 167.21666,150.73333 h -4.23334 l 2.11667,4.23333 z"
+        id="path1152"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 124.88333,165.55 v 4.23333 L 120.65,167.66666 Z"
+        id="path1154"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 120.65,140.15 v 4.23333 l -4.23333,-2.11667 z"
+        id="path1156"
+        inkscape:connector-curvature="0"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 116.41667,142.26666 h -4.23334 v 25.4 H 107.95 V 165.55 l -4.23333,2.11666 4.23333,2.11667 v -2.11667"
+        id="path1158"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccccccc"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.264583, 0.264583;stroke-dashoffset:0;stroke-opacity:1"
+        d="m 120.65,167.66666 h -8.46667"
+        id="path1160"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+        d="M 67.733332,32.2 V 42.783333 H 101.6 V 32.2"
+        id="path1167"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 88.900001,51.25 88.9,61.833333 h 12.7 V 51.25"
+        id="path1176"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 105.83333,53.366667 4.23334,-2.116666 v 4.233333 z"
+        id="path1188"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 122.76666,51.249999 v 4.233333 l -4.23333,-2.116667 4.23333,-2.116666"
+        id="path1190"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 118.53333,53.366665 -8.46666,2e-6"
+        id="path1192"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 131.23333,23.733333 V 76.65 h 33.86666 V 23.733333"
+        id="path1194"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 71.966667,44.900001 h 8.466666 L 76.2,53.366667 Z"
+        id="path1266"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 91.016667,63.950001 h 8.466666 L 95.25,72.416667 Z"
+        id="path1268"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 71.966664,6.8 h 8.466666 l -4.233333,8.466666 z"
+        id="path1266-6"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 71.966664,23.733333 h 8.466666 l -4.233333,8.466666 z"
+        id="path1266-6-2"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 76.199996,15.266666 v 8.466667"
+        id="path1330"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 76.2,53.366667 V 76.65 H 95.250001 L 95.25,72.416667"
+        id="path1332"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 80.433333,85.116667 H 71.966667 L 76.2,93.583334 Z"
+        id="path1336"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 127,34.316667 -4.23334,-2.116666 v 4.233333 z"
+        id="path1188-9"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 110.06667,32.200001 v 4.233333 L 114.3,34.316667 110.06667,32.200001"
+        id="path1190-1"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 114.3,34.316667 h 8.46667"
+        id="path1192-2"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1359"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,-3.4088254e-8,2.0460518)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1361"
+         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1363"
+           width="128"
+           height="32"
+           x="256"
+           y="121.70079"
+           style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1365"
+          style="font-size:18.6667px;text-align:center;text-anchor:middle">active pool</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1367"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,8.3844208,-2.3366917)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1369"
+         style="text-align:center;text-anchor:middle"><rect
+           id="rect1371"
+           width="112.31086"
+           height="48.831589"
+           x="472"
+           y="177.70079"
+           style="text-align:center;text-anchor:middle" /></flowRegion>
+      <flowPara
+          id="flowPara1373"
+          style="font-size:18.6667px">waiting</flowPara>
+      <flowPara
+          style="font-size:18.6667px"
+          id="flowPara1700">pool</flowPara></flowRoot>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,5.3596998,18.746883)"
+        xml:space="preserve"
+        id="flowRoot1359-6"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1361-0"
+         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1363-6"
+           width="72"
+           height="48.000004"
+           x="304"
+           y="121.70078"
+           style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1365-2"
+          style="font-size:16px;text-align:center;text-anchor:middle">burst</flowPara>
+      <flowPara
+          style="font-size:16px;text-align:center;text-anchor:middle"
+          id="flowPara1521">pool</flowPara></flowRoot>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,24.917761,5.9263119)"
+        xml:space="preserve"
+        id="flowRoot1359-6-6"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1361-0-1"
+         style="font-size:13.3333px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1363-6-8"
+           width="96.924362"
+           height="39.349098"
+           x="304"
+           y="121.70078"
+           style="font-size:13.33333397px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1365-2-7"
+          style="font-size:16px;text-align:center;text-anchor:middle">overflow</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1359-3"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,15.741519,-23.500341)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1361-7"
+         style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1363-5"
+           width="88"
+           height="24.000006"
+           x="248"
+           y="121.96767"
+           style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           ry="9.8712544e-06" /></flowRegion>
+      <flowPara
+          id="flowPara1365-9"
+          style="font-size:18.6667px;text-align:start;text-anchor:start">refill</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1359-3-2"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,16.358086,53.684792)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1361-7-2"
+         style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1363-5-8"
+           width="88"
+           height="24.000006"
+           x="248"
+           y="121.96767"
+           style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           ry="9.8712544e-06" /></flowRegion>
+      <flowPara
+          id="flowPara1365-9-9"
+          style="font-size:18.6667px;text-align:start;text-anchor:start">consume</flowPara></flowRoot>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 76.199999,76.65 v 8.466666"
+        id="path1532"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,22.205187,24.631874)"
+        xml:space="preserve"
+        id="flowRoot1359-6-6-7"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1361-0-1-3"
+         style="font-size:13.3333px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1363-6-8-6"
+           width="96.924362"
+           height="39.349098"
+           x="304"
+           y="121.70078"
+           style="font-size:13.33333397px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1365-2-7-1"
+          style="font-size:16px;text-align:center;text-anchor:middle">backfill</flowPara></flowRoot>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="92.522484"
+        y="14.705019"
+        id="text1674"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1672"
+         x="92.522484"
+         y="14.705019"
+         style="stroke-width:0.264583">1</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="127.06158"
+        y="43.465328"
+        id="text1678"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1676"
+         x="127.06158"
+         y="43.465328"
+         style="stroke-width:0.264583">2</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="123.05116"
+        y="61.939545"
+        id="text1682"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1680"
+         x="123.05116"
+         y="61.939545"
+         style="stroke-width:0.264583">3</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="104.15981"
+        y="92.254868"
+        id="text1698"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1696"
+         x="104.15981"
+         y="92.254868"
+         style="stroke-width:0.264583">4</tspan></text>
+  </g>
+  <g
+      inkscape:label="betterbuckets copy"
+      id="g1199"
+      inkscape:groupmode="layer"
+      style="display:inline">
+    <rect
+        style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        id="rect1042-0"
+        width="123.03124"
+        height="210.29375"
+        x="55.562504"
+        y="0.050000001"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <rect
+        style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        id="rect1042-6"
+        width="116.41701"
+        height="26.458334"
+        x="59.266666"
+        y="2.6458333"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <rect
+        style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+        id="rect2113"
+        width="37.041668"
+        height="2.6458333"
+        x="63.5"
+        y="1.3229166"
+        rx="0"
+        ry="0"/>
+    <g
+        id="g1936"
+        transform="translate(-6.6145833,-9.2604157)"/>
+    <rect
+        style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        id="rect1042"
+        width="116.41666"
+        height="94.720833"
+        x="59.266666"
+        y="34.395832"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:#ffded6;fill-opacity:1;stroke:#dcdcdc;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 127,110.06667 H 84.666666 V 76.2 H 127 Z"
+        id="path1045"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:#e4d6ff;fill-opacity:1;stroke:#dcdcdc;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 105.83333,48.683333 V 76.2 H 127 v 33.86667 h 42.33333 V 48.683333 Z"
+        id="path1047"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:#ccffde;fill-opacity:1;stroke:#dcdcdc;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 105.83333,76.2 H 84.666667 v 33.86667 H 63.5 l 3e-6,-61.383337 h 42.333327 z"
+        id="path1049"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="ccccccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+        d="M 67.733332,61.383333 V 71.966666 H 101.6 V 61.383333"
+        id="path1088"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 88.900001,80.433333 88.9,91.016666 h 12.7 V 80.433333"
+        id="path1090"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 105.83333,82.55 4.23334,-2.116666 v 4.233333 z"
+        id="path1092"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 122.76666,80.433332 v 4.233333 l -4.23333,-2.116667 4.23333,-2.116666"
+        id="path1094"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 118.53333,82.549998 -8.46666,2e-6"
+        id="path1096"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        d="m 131.23333,52.916666 v 52.916664 h 33.86666 V 52.916666"
+        id="path1098"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 71.966667,74.083334 h 8.466666 L 76.2,82.55 Z"
+        id="path1100"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 91.016667,93.133334 h 8.466666 L 95.25,101.6 Z"
+        id="path1102"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 72.495834,53.048958 H 80.9625 l -4.233333,8.466666 z"
+        id="path1106"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 76.2,82.55 v 23.28333 H 95.250001 L 95.25,101.6"
+        id="path1111"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 80.433333,114.3 H 71.966667 L 76.2,122.76667 Z"
+        id="path1113"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 127,63.5 -4.23334,-2.116666 v 4.233333 z"
+        id="path1115"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cccc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 110.06667,61.383334 v 4.233333 L 114.3,63.5 110.06667,61.383334"
+        id="path1117"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 114.3,63.5 h 8.46667"
+        id="path1119"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="cc"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1127"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,-3.4088269e-8,31.229385)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1123"
+         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1121"
+           width="128"
+           height="32"
+           x="256"
+           y="121.70079"
+           style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1125"
+          style="font-size:18.6667px;text-align:center;text-anchor:middle">active pool</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1137"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+        transform="matrix(0.26458333,0,0,0.26458333,8.3844208,26.846641)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1131"
+         style="text-align:center;text-anchor:middle"><rect
+           id="rect1129"
+           width="112.31086"
+           height="48.831589"
+           x="472"
+           y="177.70079"
+           style="text-align:center;text-anchor:middle" /></flowRegion>
+      <flowPara
+          id="flowPara1133"
+          style="font-size:18.6667px">waiting</flowPara>
+      <flowPara
+          style="font-size:18.6667px"
+          id="flowPara1135">pool</flowPara></flowRoot>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,5.3596998,47.930216)"
+        xml:space="preserve"
+        id="flowRoot1147"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1141"
+         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1139"
+           width="72"
+           height="48.000004"
+           x="304"
+           y="121.70078"
+           style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1143"
+          style="font-size:16px;text-align:center;text-anchor:middle">burst</flowPara>
+      <flowPara
+          style="font-size:16px;text-align:center;text-anchor:middle"
+          id="flowPara1145">pool</flowPara></flowRoot>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,24.917761,35.109645)"
+        xml:space="preserve"
+        id="flowRoot1155"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1151"
+         style="font-size:13.3333px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1149"
+           width="96.924362"
+           height="39.349098"
+           x="304"
+           y="121.70078"
+           style="font-size:13.33333397px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1153"
+          style="font-size:16px;text-align:center;text-anchor:middle">overflow</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1163"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,15.741519,7.4336055)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1159"
+         style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1157"
+           width="88"
+           height="24.000006"
+           x="248"
+           y="121.96767"
+           style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           ry="9.8712544e-06" /></flowRegion>
+      <flowPara
+          id="flowPara1161"
+          style="font-size:18.6667px;text-align:start;text-anchor:start">refill</flowPara></flowRoot>
+    <flowRoot
+        xml:space="preserve"
+        id="flowRoot1171"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        transform="matrix(0.26458333,0,0,0.26458333,16.358086,82.868125)"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1167"
+         style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1165"
+           width="88"
+           height="24.000006"
+           x="248"
+           y="121.96767"
+           style="text-align:start;text-anchor:start;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           ry="9.8712544e-06" /></flowRegion>
+      <flowPara
+          id="flowPara1169"
+          style="font-size:18.6667px;text-align:start;text-anchor:start">consume</flowPara></flowRoot>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 76.199999,105.83333 V 114.3"
+        id="path1173"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,22.205187,53.815207)"
+        xml:space="preserve"
+        id="flowRoot1181"
+        style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1177"
+         style="font-size:13.3333px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1175"
+           width="96.924362"
+           height="39.349098"
+           x="304"
+           y="121.70078"
+           style="font-size:13.33333397px;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          id="flowPara1179"
+          style="font-size:16px;text-align:center;text-anchor:middle">backfill</flowPara></flowRoot>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="92.522484"
+        y="44.915668"
+        id="text1185"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1183"
+         x="92.522484"
+         y="44.915668"
+         style="stroke-width:0.264583">1</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="127.06158"
+        y="72.648659"
+        id="text1189"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1187"
+         x="127.06158"
+         y="72.648659"
+         style="stroke-width:0.264583">2</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="123.05116"
+        y="91.122879"
+        id="text1193"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1191"
+         x="123.05116"
+         y="91.122879"
+         style="stroke-width:0.264583">3</tspan></text>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:3.52778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="104.15981"
+        y="121.4382"
+        id="text1197"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><tspan
+         sodipodi:role="line"
+         id="tspan1195"
+         x="104.15981"
+         y="121.4382"
+         style="stroke-width:0.264583">4</tspan></text>
+    <g
+        id="g1529"
+        transform="translate(-0.18229109,35.79792)">
+      <path
+          style="fill:#ffffff;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 59.531249,103.1875 h 34.395834 v 48.94792 H 59.53125 Z"
+          id="path1220"
+          sodipodi:nodetypes="ccccc"/>
+      <path
+          style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 72.760417,105.83333 h 7.9375 l -3.96875,7.9375 z"
+          id="path1100-6"
+          inkscape:connector-curvature="0"
+          sodipodi:nodetypes="cccc"
+          inkscape:export-xdpi="174.39999"
+          inkscape:export-ydpi="174.39999"/>
+      <g
+          id="g1507">
+        <path
+            style="display:inline;fill:none;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+            d="m 64.029167,117.73959 -3e-6,6.61458 h 24.606253 l 3e-6,-6.61458"
+            id="path1088-7"
+            inkscape:connector-curvature="0"
+            sodipodi:nodetypes="cccc"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"/>
+        <flowRoot
+            transform="matrix(0.26458333,0,0,0.26458333,-17.368629,86.298887)"
+            xml:space="preserve"
+            id="flowRoot1147-5"
+            style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"><flowRegion
+             id="flowRegion1141-3"
+             style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+               id="rect1139-5"
+               width="100.74287"
+               height="22.44486"
+               x="304"
+               y="121.70078"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1145-2">microbatch</flowPara></flowRoot>
+      </g>
+      <g
+          id="g1500"
+          transform="translate(-0.6096664,1.9846287)">
+        <g
+            id="g1491"
+            transform="matrix(1.0810282,0,0,1.0810282,-5.4668683,-10.344173)">
+          <path
+              style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+              d="m 83.867105,139.88628 c -1.36777,2.93715 -4.345822,4.9731 -7.799396,4.9731 -4.749074,0 -8.598959,-3.84989 -8.598958,-8.59896 4e-6,-4.74907 3.849888,-8.59895 8.598958,-8.59895 3.681674,0 6.822939,2.31377 8.04901,5.56654"
+              id="path1457"/>
+          <path
+              style="fill:#000000;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+              d="m 85.090119,134.8609 -0.302241,-3.83346 -2.767046,1.52881 z"
+              id="path1461"
+              sodipodi:nodetypes="cccc"/>
+        </g>
+        <flowRoot
+            transform="matrix(0.26458333,0,0,0.26458333,-16.81238,102.4441)"
+            xml:space="preserve"
+            id="flowRoot1147-5-9"
+            style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"><flowRegion
+             id="flowRegion1141-3-2"
+             style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+               id="rect1139-5-0"
+               width="100.74287"
+               height="22.44486"
+               x="304"
+               y="121.70078"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1145-2-2">iteration</flowPara></flowRoot>
+      </g>
+      <path
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 76.729166,105.83333 v -3.96875"
+          id="path1510"/>
+    </g>
+    <g
+        id="g1529-3"
+        transform="translate(40.745833,35.79792)"
+        style="display:inline">
+      <path
+          style="fill:#ffffff;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 59.531249,103.1875 h 34.395834 v 48.94792 H 59.53125 Z"
+          id="path1220-7"
+          sodipodi:nodetypes="ccccc"/>
+      <path
+          style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 72.760417,105.83333 h 7.9375 l -3.96875,7.9375 z"
+          id="path1100-6-5"
+          inkscape:connector-curvature="0"
+          sodipodi:nodetypes="cccc"
+          inkscape:export-xdpi="174.39999"
+          inkscape:export-ydpi="174.39999"/>
+      <g
+          id="g1507-9">
+        <path
+            style="display:inline;fill:none;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+            d="m 64.029167,117.73959 -3e-6,6.61458 h 24.606253 l 3e-6,-6.61458"
+            id="path1088-7-2"
+            inkscape:connector-curvature="0"
+            sodipodi:nodetypes="cccc"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"/>
+        <flowRoot
+            transform="matrix(0.26458333,0,0,0.26458333,-17.368629,86.298887)"
+            xml:space="preserve"
+            id="flowRoot1147-5-2"
+            style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"><flowRegion
+             id="flowRegion1141-3-8"
+             style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+               id="rect1139-5-9"
+               width="100.74287"
+               height="22.44486"
+               x="304"
+               y="121.70078"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1145-2-7">microbatch</flowPara></flowRoot>
+      </g>
+      <g
+          id="g1500-3"
+          transform="translate(-0.6096664,1.9846287)">
+        <g
+            id="g1491-6"
+            transform="matrix(1.0810282,0,0,1.0810282,-5.4668683,-10.344173)">
+          <path
+              style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+              d="m 83.867105,139.88628 c -1.36777,2.93715 -4.345822,4.9731 -7.799396,4.9731 -4.749074,0 -8.598959,-3.84989 -8.598958,-8.59896 4e-6,-4.74907 3.849888,-8.59895 8.598958,-8.59895 3.681674,0 6.822939,2.31377 8.04901,5.56654"
+              id="path1457-1"/>
+          <path
+              style="fill:#000000;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+              d="m 85.090119,134.8609 -0.302241,-3.83346 -2.767046,1.52881 z"
+              id="path1461-2"
+              sodipodi:nodetypes="cccc"/>
+        </g>
+        <flowRoot
+            transform="matrix(0.26458333,0,0,0.26458333,-16.81238,102.4441)"
+            xml:space="preserve"
+            id="flowRoot1147-5-9-9"
+            style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"><flowRegion
+             id="flowRegion1141-3-2-3"
+             style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+               id="rect1139-5-0-1"
+               width="100.74287"
+               height="22.44486"
+               x="304"
+               y="121.70078"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1145-2-2-9">iteration</flowPara></flowRoot>
+      </g>
+      <path
+          style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 76.729166,105.83333 v -3.96875"
+          id="path1510-4"/>
+    </g>
+    <g
+        aria-label="{"
+        transform="matrix(0,-2.509426,-3.136764,0,478.02635,1119.7745)"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:6.77553px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+        id="flowRoot4986-8-6">
+      <g
+          id="g1529-7"
+          transform="matrix(0,-0.31879989,-0.39849751,0,431.96197,126.3571)"
+          style="display:inline">
+        <path
+            style="fill:#ffffff;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+            d="m 59.531249,103.1875 h 34.395834 v 48.94792 H 59.53125 Z"
+            id="path1220-8"
+            sodipodi:nodetypes="ccccc"/>
+        <path
+            style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+            d="m 72.760417,105.83333 h 7.9375 l -3.96875,7.9375 z"
+            id="path1100-6-4"
+            inkscape:connector-curvature="0"
+            sodipodi:nodetypes="cccc"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"/>
+        <g
+            id="g1507-5">
+          <path
+              style="display:inline;fill:none;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+              d="m 64.029167,117.73959 -3e-6,6.61458 h 24.606253 l 3e-6,-6.61458"
+              id="path1088-7-0"
+              inkscape:connector-curvature="0"
+              sodipodi:nodetypes="cccc"
+              inkscape:export-xdpi="174.39999"
+              inkscape:export-ydpi="174.39999"/>
+          <flowRoot
+              transform="matrix(0.26458333,0,0,0.26458333,-17.368629,86.298887)"
+              xml:space="preserve"
+              id="flowRoot1147-5-3"
+              style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+              inkscape:export-xdpi="174.39999"
+              inkscape:export-ydpi="174.39999"><flowRegion
+               id="flowRegion1141-3-6"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+                 id="rect1139-5-1"
+                 width="100.74287"
+                 height="22.44486"
+                 x="304"
+                 y="121.70078"
+                 style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+            <flowPara
+                style="font-size:16px;text-align:center;text-anchor:middle"
+                id="flowPara1145-2-0">microbatch</flowPara></flowRoot>
+        </g>
+        <g
+            id="g1500-6"
+            transform="translate(-0.6096664,1.9846287)">
+          <g
+              id="g1491-3"
+              transform="matrix(1.0810282,0,0,1.0810282,-5.4668683,-10.344173)">
+            <path
+                style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+                d="m 83.867105,139.88628 c -1.36777,2.93715 -4.345822,4.9731 -7.799396,4.9731 -4.749074,0 -8.598959,-3.84989 -8.598958,-8.59896 4e-6,-4.74907 3.849888,-8.59895 8.598958,-8.59895 3.681674,0 6.822939,2.31377 8.04901,5.56654"
+                id="path1457-2"/>
+            <path
+                style="fill:#000000;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+                d="m 85.090119,134.8609 -0.302241,-3.83346 -2.767046,1.52881 z"
+                id="path1461-0"
+                sodipodi:nodetypes="cccc"/>
+          </g>
+          <flowRoot
+              transform="matrix(0.26458333,0,0,0.26458333,-16.81238,102.4441)"
+              xml:space="preserve"
+              id="flowRoot1147-5-9-6"
+              style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+              inkscape:export-xdpi="174.39999"
+              inkscape:export-ydpi="174.39999"><flowRegion
+               id="flowRegion1141-3-2-1"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+                 id="rect1139-5-0-5"
+                 width="100.74287"
+                 height="22.44486"
+                 x="304"
+                 y="121.70078"
+                 style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+            <flowPara
+                style="font-size:16px;text-align:center;text-anchor:middle"
+                id="flowPara1145-2-2-5">iteration</flowPara></flowRoot>
+        </g>
+        <path
+            style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+            d="m 76.729166,105.83333 v -3.96875"
+            id="path1510-47"/>
+      </g>
+    </g>
+    <path
+        d="m 59.972248,193.95458 v 0.17641 c 0,1.43249 0.60801,2.52291 1.82403,3.27124 1.082374,0.70555 2.532225,1.05832 4.349555,1.05832 l 48.442797,-0.0321 c 1.71043,0 2.57233,0.66814 2.58569,2.00443 h 0.66145 l 0.0401,-0.5933 c 0.20034,-0.94075 1.06224,-1.41113 2.5857,-1.41113 l 48.87176,0.0321 c 1.84406,0 3.31397,-0.39019 4.40973,-1.17057 1.10912,-0.76971 1.66367,-1.8815 1.66367,-3.33538 h -0.66148 l -0.0602,0.73765 -0.20044,0.5933 c -0.58795,1.22939 -2.11798,1.86011 -4.59009,1.89218 l -48.29052,0.12823 c -1.89751,0.0321 -3.26719,0.73235 -4.10903,2.10064 -0.81514,-1.36835 -2.19819,-2.06857 -4.14916,-2.10064 l -47.821397,-0.12823 c -3.23379,-0.0428 -4.864048,-1.09045 -4.890775,-3.14295 v -0.08 z"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.0869px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.082px;word-spacing:8.54225px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.80562"
+        id="path4994-2-5"
+        inkscape:connector-curvature="0"
+        sodipodi:nodetypes="csccccccccccccccccccccc"/>
+    <flowRoot
+        transform="matrix(0.26458333,0,0,0.26458333,-10.018783,170.22091)"
+        xml:space="preserve"
+        id="flowRoot1147-5-3-6"
+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.6667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"><flowRegion
+         id="flowRegion1141-3-6-9"
+         style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+           id="rect1139-5-1-3"
+           width="356.64523"
+           height="27.130173"
+           x="304"
+           y="121.70078"
+           style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+      <flowPara
+          style="font-size:18.6667px;text-align:center;text-anchor:middle"
+          id="flowPara1145-2-0-7">individual consumers (threads)</flowPara></flowRoot>
+    <g
+        id="g1529-4"
+        transform="translate(-35.281578,-95.285575)"
+        style="display:inline">
+      <g
+          id="g1500-8-8"
+          transform="translate(85.33962,-25.796614)"
+          style="display:inline">
+        <g
+            id="g1491-68-9"
+            transform="matrix(1.0810282,0,0,1.0810282,-5.4668683,-10.344173)">
+          <path
+              style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+              d="m 83.867105,139.88628 c -1.36777,2.93715 -4.345822,4.9731 -7.799396,4.9731 -4.749074,0 -8.598959,-3.84989 -8.598958,-8.59896 4e-6,-4.74907 3.849888,-8.59895 8.598958,-8.59895 3.681674,0 6.822939,2.31377 8.04901,5.56654"
+              id="path1457-8-2"/>
+          <path
+              style="fill:#000000;fill-opacity:0.999567;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+              d="m 85.090119,134.8609 -0.302241,-3.83346 -2.767046,1.52881 z"
+              id="path1461-4-6"
+              sodipodi:nodetypes="cccc"/>
+        </g>
+        <flowRoot
+            transform="matrix(0.26458333,0,0,0.26458333,-16.760187,101.12118)"
+            xml:space="preserve"
+            id="flowRoot1147-5-9-3-6"
+            style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+            inkscape:export-xdpi="174.39999"
+            inkscape:export-ydpi="174.39999"><flowRegion
+             id="flowRegion1141-3-2-14-4"
+             style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+               id="rect1139-5-0-9-9"
+               width="100.34711"
+               height="43.74239"
+               x="304"
+               y="121.70078"
+               style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /></flowRegion>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1145-2-2-2-5">iteration</flowPara>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1428">/time</flowPara>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1422"/>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1424"/>
+          <flowPara
+              style="font-size:16px;text-align:center;text-anchor:middle"
+              id="flowPara1426"/></flowRoot>
+      </g>
+    </g>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.25, 0.5;stroke-dashoffset:0;stroke-opacity:1"
+        d="M 127,120.38542 101.86458,91.281249"
+        id="path1974"
+        sodipodi:nodetypes="cc"/>
+    <g
+        id="g1972"
+        transform="translate(117.73958,58.208334)">
+      <path
+          style="display:inline;fill:#feffcc;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="M 19.84375,67.46875 15.875,71.4375 v 5.291666 l 33.07292,-1e-6 v -9.260417 z"
+          id="path1930"
+          sodipodi:nodetypes="cccccc"
+          transform="translate(-6.6145833,-9.2604156)"/>
+      <path
+          style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+          d="m 15.875,71.437499 h 3.96875 v -3.96875 z"
+          id="path1932"
+          transform="translate(-6.6145833,-9.2604156)"/>
+      <flowRoot
+          transform="matrix(0.26458333,0,0,0.26458333,-70.576587,27.168906)"
+          xml:space="preserve"
+          id="flowRoot1147-0"
+          style="font-style:normal;font-weight:normal;font-size:10.6667px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+          inkscape:export-xdpi="174.39999"
+          inkscape:export-ydpi="174.39999"><flowRegion
+           id="flowRegion1141-4"
+           style="text-align:end;text-anchor:end;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"><rect
+             id="rect1139-8"
+             width="118.38902"
+             height="30.964956"
+             x="304"
+             y="121.70078"
+             style="vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;text-anchor:end;text-align:end" /></flowRegion>
+        <flowPara
+            style="font-size:10.6667px;text-align:end;text-anchor:end"
+            id="flowPara1145-1">burst pool is sized according to burst rate</flowPara></flowRoot>
+    </g>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="30.427082"
+        y="34.395832"
+        id="text1978"><tspan
+         sodipodi:role="line"
+         id="tspan1976"
+         style="stroke-width:0.264583" /></text>
+    <g
+        id="g2074"
+        transform="matrix(0.86478602,0,0,0.86478602,22.001849,2.146522)">
+      <path
+          style="color:#000000;fill:none;stroke-width:0.25"
+          d="m 170.5218,11.29551 -7.80305,4.532323 9.0238,0.02358 -9.0238,0.02358 7.80305,4.532323 -7.82663,-4.491476 4.49147,7.826632 -4.53232,-7.803049 -0.0236,9.0238 -0.0236,-9.0238 -4.53232,7.803049 4.49148,-7.826632 -7.82663,4.491476 7.80304,-4.532323 -9.0238,-0.02358 9.0238,-0.02358 -7.80304,-4.532323 7.82663,4.491476 -4.49148,-7.8266314 4.53232,7.8030484 0.0236,-9.0238 0.0236,9.0238 4.53232,-7.8030484 -4.49147,7.8266314 z"
+          id="path2058"/>
+      <path
+          id="path2060"
+          style="color:#000000;fill:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
+          d="m 162.59134,6.7544064 -0.004,1.4789795 a 7.6729163,7.6729163 0 0 1 0.21652,-0.017053 7.6729163,7.6729163 0 0 1 0.0408,0.00103 l -0.004,-1.4629598 z m -4.32222,1.1580688 -0.21704,0.1250571 0.76119,1.3260173 a 7.6729163,7.6729163 0 0 1 0.22015,-0.1348755 z m 8.89455,0 -0.71314,1.2273153 a 7.6729163,7.6729163 0 0 1 0.22428,0.1266073 l 0.70538,-1.2288655 z m -12.27522,3.2892058 -0.12506,0.217041 1.33429,0.775146 a 7.6729163,7.6729163 0 0 1 0.13539,-0.220658 z m 15.65589,0 -1.19476,0.685229 a 7.6729163,7.6729163 0 0 1 0.12919,0.223242 l 1.19063,-0.69143 z m -15.40113,4.535123 -1.5384,0.0041 v 0.250114 l 1.53479,0.0036 a 7.6729163,7.6729163 0 0 1 -0.008,-0.10542 7.6729163,7.6729163 0 0 1 0.0119,-0.152446 z m 15.32982,5.17e-4 a 7.6729163,7.6729163 0 0 1 0.004,0.151929 7.6729163,7.6729163 0 0 1 -0.008,0.10542 l 1.35858,-0.0036 v -0.250114 z m -14.39654,3.813204 -1.3131,0.762744 0.12506,0.216524 1.32292,-0.759643 a 7.6729163,7.6729163 0 0 1 -0.13488,-0.219625 z m 13.40952,0.07545 a 7.6729163,7.6729163 0 0 1 -0.13436,0.219108 l 1.19269,0.684712 0.12506,-0.216524 z m -10.69289,2.776574 -0.74104,1.291394 0.21704,0.125057 0.74414,-1.281575 a 7.6729163,7.6729163 0 0 1 -0.22014,-0.134876 z m 7.89151,0.0801 a 7.6729163,7.6729163 0 0 1 -0.21911,0.134358 l 0.69815,1.201994 0.21652,-0.125057 z m -4.09691,1.062467 0.004,1.431954 h 0.25011 l 0.004,-1.418001 a 7.6729163,7.6729163 0 0 1 -0.0408,0.0031 7.6729163,7.6729163 0 0 1 -0.21652,-0.01705 z"/>
+      <circle
+          style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+          id="path2012"
+          cx="162.71875"
+          cy="15.875"
+          r="10.583333"/>
+      <circle
+          style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+          id="path2012-2"
+          cx="162.71875"
+          cy="15.875"
+          r="9.7895832"/>
+      <path
+          style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+          d="M 162.71875,8.9958333 V 15.875 h 6.35"
+          id="path2026"
+          sodipodi:nodetypes="ccc"/>
+    </g>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 140.22916,15.875 H 150.8125"
+        id="path2107"/>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="64.367897"
+        y="4.2439156"
+        id="text2111"><tspan
+         sodipodi:role="line"
+         id="tspan2109"
+         style="font-size:4.23333px;stroke-width:0.264583"
+         x="64.367897"
+         y="4.2439156">token filler thread</tspan></text>
+    <path
+        id="path1209"
+        style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17009px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 95.625248,10.129208 89.958333,21.62495 h 11.906257 l -5.668972,-11.4999 z m -0.11067,1.573867 4.762502,9.525 h -9.525002 z"
+        sodipodi:nodetypes="ccccccccc"/>
+    <path
+        style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-variation-settings:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stop-color:#000000;stop-opacity:1"
+        d="m 72.495837,22.621875 h 8.46666 l -4.23333,8.46666 z"
+        id="path1104-7-2-6-4"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="M 76.729167,41.010417 76.596875,52.916668"
+        id="path1108"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"
+        sodipodi:nodetypes="cc"/>
+    <path
+        style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+        d="M 72.495834,33.205208 H 80.9625 l -4.233333,8.466666 z"
+        id="path1104"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+        d="m 148.03438,11.64167 v 8.46666 L 139.56772,15.875 Z"
+        id="path1104-7-2"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="display:inline;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 103.18749,16.007291 h 10.58334"
+        id="path2107-1"/>
+    <path
+        style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+        d="m 110.99271,11.64167 v 8.46666 L 102.52605,15.875 Z"
+        id="path1104-7-2-6"
+        inkscape:connector-curvature="0"
+        inkscape:export-xdpi="174.39999"
+        inkscape:export-ydpi="174.39999"/>
+    <path
+        style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+        d="m 88.635416,15.875 c 0,0 -7.9375,0 -9.260417,0 -1.322917,0 -2.645833,0 -2.645833,1.322916 0,1.322917 0,5.291667 0,5.291667"
+        id="path1386"/>
+    <rect
+        style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+        id="rect2113-0"
+        width="22.489584"
+        height="2.6458321"
+        x="152.13542"
+        y="33.072918"
+        rx="0"
+        ry="0"/>
+    <text
+        xml:space="preserve"
+        style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+        x="153.14851"
+        y="35.496498"
+        id="text2111-9"><tspan
+         sodipodi:role="line"
+         id="tspan2109-3"
+         style="font-size:4.23333px;stroke-width:0.264583"
+         x="153.14851"
+         y="35.496498">token pool</tspan></text>
+  </g>
+</svg>
diff --git a/docsys/pom.xml b/docsys/pom.xml
index 1d8744a79..281fb1882 100644
--- a/docsys/pom.xml
+++ b/docsys/pom.xml
@@ -9,7 +9,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -18,7 +18,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>nb-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
@@ -98,7 +98,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/driver-cql-shaded/pom.xml b/driver-cql-shaded/pom.xml
index 455a6769e..e1680a6aa 100644
--- a/driver-cql-shaded/pom.xml
+++ b/driver-cql-shaded/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <groupId>io.nosqlbench</groupId>
         <artifactId>mvn-defaults</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -23,13 +23,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java
index 7572aad8e..2b5421bd5 100644
--- a/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java
+++ b/driver-cql-shaded/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivityType.java
@@ -34,11 +34,6 @@ public class CqlActivityType implements ActivityType<CqlActivity> {
             throw new RuntimeException("Currently, the cql activity type requires yaml/workload activity parameter.");
         }
 
-        // allow shortcut: yaml parameter provide the default alias name
-        if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) {
-            activityDef.getParams().set("alias",yaml.get());
-        }
-
         return new CqlActivity(activityDef);
     }
 
diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java
index 28d117e52..290be30b8 100644
--- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java
+++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlActivityType.java
@@ -3,7 +3,6 @@ package io.nosqlbench.activitytype.cqld4.core;
 
 import com.datastax.oss.driver.api.core.data.TupleValue;
 import com.datastax.oss.driver.api.core.type.UserDefinedType;
-import io.nosqlbench.activitytype.cqld4.codecsupport.UDTJavaType;
 import io.nosqlbench.engine.api.activityapi.core.ActionDispenser;
 import io.nosqlbench.engine.api.activityapi.core.ActivityType;
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
@@ -35,11 +34,6 @@ public class CqlActivityType implements ActivityType<CqlActivity> {
             throw new RuntimeException("Currently, the cql activity type requires yaml/workload activity parameter.");
         }
 
-        // allow shortcut: yaml parameter provide the default alias name
-        if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) {
-            activityDef.getParams().set("alias",yaml.get());
-        }
-
         return new CqlActivity(activityDef);
     }
 
diff --git a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java
index f00f6f2f2..06dbf2f1c 100644
--- a/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java
+++ b/driver-cqld4/src/main/java/io/nosqlbench/activitytype/cqld4/core/CqlAsyncAction.java
@@ -79,7 +79,7 @@ public class CqlAsyncAction extends BaseAsyncAction<CqlOpData, CqlActivity> {
 
     @Override
     public void startOpCycle(TrackedOp<CqlOpData> opc) {
-        CqlOpData cqlop = opc.getData();
+        CqlOpData cqlop = opc.getOpData();
         long cycle = opc.getCycle();
 
         // bind timer covers all statement selection and binding, skipping, transforming logic
@@ -123,7 +123,7 @@ public class CqlAsyncAction extends BaseAsyncAction<CqlOpData, CqlActivity> {
 
 
     public void onSuccess(StartedOp<CqlOpData> sop, AsyncResultSet resultSet) {
-        CqlOpData cqlop = sop.getData();
+        CqlOpData cqlop = sop.getOpData();
 
         HashedCQLErrorHandler.resetThreadStatusCode();
         if (cqlop.skipped) {
@@ -218,7 +218,7 @@ public class CqlAsyncAction extends BaseAsyncAction<CqlOpData, CqlActivity> {
 
     public void onFailure(StartedOp<CqlOpData> startedOp) {
 
-        CqlOpData cqlop = startedOp.getData();
+        CqlOpData cqlop = startedOp.getOpData();
         long serviceTime = startedOp.getCurrentServiceTimeNanos();
 
         // Even if this is retryable, we expose error events
diff --git a/driver-cqlverify/pom.xml b/driver-cqlverify/pom.xml
index 0c6827e29..8fa57456b 100644
--- a/driver-cqlverify/pom.xml
+++ b/driver-cqlverify/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.nosqlbench</groupId>
     <artifactId>mvn-defaults</artifactId>
-    <version>3.12.160-SNAPSHOT</version>
+    <version>4.15.5-SNAPSHOT</version>
     <relativePath>../mvn-defaults</relativePath>
   </parent>
 
@@ -24,13 +24,13 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-cql-shaded</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>drivers-api</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
   </dependencies>
diff --git a/driver-diag/pom.xml b/driver-diag/pom.xml
index c251fb3ea..593ddcde3 100644
--- a/driver-diag/pom.xml
+++ b/driver-diag/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -20,13 +20,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/driver-dsegraph-shaded/pom.xml b/driver-dsegraph-shaded/pom.xml
index 1737368c2..b445ca375 100644
--- a/driver-dsegraph-shaded/pom.xml
+++ b/driver-dsegraph-shaded/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.nosqlbench</groupId>
     <artifactId>mvn-defaults</artifactId>
-    <version>3.12.160-SNAPSHOT</version>
+    <version>4.15.5-SNAPSHOT</version>
     <relativePath>../mvn-defaults</relativePath>
   </parent>
 
@@ -23,13 +23,13 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-api</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>drivers-api</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
diff --git a/driver-http/pom.xml b/driver-http/pom.xml
index 21500ad1a..070b676ae 100644
--- a/driver-http/pom.xml
+++ b/driver-http/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -22,13 +22,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java
index b97425c47..9c7464551 100644
--- a/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java
+++ b/driver-http/src/main/java/io/nosqlbench/activitytype/http/HttpAction.java
@@ -7,11 +7,10 @@ import io.nosqlbench.engine.api.activityapi.core.SyncAction;
 import io.nosqlbench.engine.api.activityapi.planning.OpSequence;
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
 import io.nosqlbench.nb.api.errors.BasicError;
-import io.nosqlbench.virtdata.core.templates.StringBindings;
-import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-import java.io.*;
+import java.io.FileNotFoundException;
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
@@ -28,14 +27,11 @@ public class HttpAction implements SyncAction {
     private final HttpActivity httpActivity;
     private final int slot;
     private final int maxTries = 1;
-    private boolean showstmts;
 
     private OpSequence<ReadyHttpOp> sequencer;
     private HttpClient client;
 
     private final HttpResponse.BodyHandler<String> bodyreader = HttpResponse.BodyHandlers.ofString();
-    private final long timeoutMillis=30000L;
-
 
     public HttpAction(ActivityDef activityDef, int slot, HttpActivity httpActivity) {
         this.slot = slot;
@@ -54,25 +50,15 @@ public class HttpAction implements SyncAction {
 
     @Override
     public int runCycle(long cycleValue) {
-        StringBindings stringBindings;
-        String statement = null;
-        InputStream result = null;
+
+        // The request to be used must be constructed from the template each time.
+        HttpOp httpOp = null;
 
         // The bind timer captures all the time involved in preparing the
         // operation for execution, including data generation as well as
         // op construction
-
-        // The request to be used must be constructed from the template each time.
-        HttpOp httpOp=null;
-
-        // A specifier for what makes a response ok. If this is provided, then it is
-        // either a list of valid http status codes, or if non-numeric, a regex for the body
-        // which must match.
-        // If not provided, then status code 200 is the only thing required to be matched.
-        String ok;
-
         try (Timer.Context bindTime = httpActivity.bindTimer.time()) {
-            ReadyHttpOp readHTTPOperation = httpActivity.getSequencer().get(cycleValue);
+            ReadyHttpOp readHTTPOperation = sequencer.get(cycleValue);
             httpOp = readHTTPOperation.apply(cycleValue);
         } catch (Exception e) {
             if (httpActivity.isDiagnosticMode()) {
@@ -135,98 +121,10 @@ public class HttpAction implements SyncAction {
                 }
             }
 
-
-//            if (ok == null) {
-//                if (response.statusCode() != 200) {
-//                    throw new ResponseError("Result had status code " +
-//                            response.statusCode() + ", but 'ok' was not set for this statement," +
-//                            "so it is considered an error.");
-//                }
-//            } else {
-//                String[] oks = ok.split(",");
-//                for (String ok_condition : oks) {
-//                    if (ok_condition.charAt(0)>='0' && ok_condition.charAt(0)<='9') {
-//                        int matching_status = Integer.parseInt(ok_condition);
-//                    } else {
-//                        Pattern successRegex = Pattern.compile(ok);
-//                    }
-//                }
-////                Matcher matcher = successRegex.matcher(String.valueOf(response.statusCode()));
-////                if (!matcher.matches()) {
-////                    throw new BasicError("status code " + response.statusCode() + " did not match " + success);
-////                }
-//            }
         }
         return 0;
     }
 
-//                String body = future.body();
-
-
-//            String[] splitStatement = statement.split("\\?");
-//            String path, query;
-//
-//            path = splitStatement[0];
-//            query = "";
-//
-//            if (splitStatement.length >= 2) {
-//                query = splitStatement[1];
-//            }
-//
-//            URI uri = new URI(
-//                "http",
-//                null,
-//                host,
-//                httpActivity.getPort(),
-//                path,
-//                query,
-//                null);
-//
-//                statement = uri.toString();
-//
-//            showstmts = httpActivity.getShowstmts();
-
-//            if (showstmts) {
-//                logger.info("STMT(cycle=" + cycleValue + "):\n" + statement);
-//            }
-//        } catch (URISyntaxException e) {
-//            e.printStackTrace();
-//        }
-//
-//        long nanoStartTime=System.nanoTime();
-//
-
-//                Timer.Context resultTime = httpActivity.resultTimer.time();
-//                try {
-//                    StringBuilder res = new StringBuilder();
-//
-//                    BufferedReader rd = new BufferedReader(new InputStreamReader(result));
-//                    String line;
-//                    while ((line = rd.readLine()) != null) {
-//                        res.append(line);
-//                    }
-//                    rd.close();
-//
-//                } catch (Exception e) {
-//                    long resultNanos = resultTime.stop();
-//                    resultTime = null;
-//                } finally {
-//                    if (resultTime != null) {
-//                        resultTime.stop();
-//                    }
-//
-//                }
-//
-//            }
-//            long resultNanos = System.nanoTime() - nanoStartTime;
-//            httpActivity.resultSuccessTimer.update(resultNanos, TimeUnit.NANOSECONDS);
-
-
-//        protected HttpActivity getHttpActivity () {
-//            return httpActivity;
-//        }
-//    }
-
     private HttpRequest.BodyPublisher bodySourceFrom(Map<String, String> cmdMap) {
         if (cmdMap.containsKey("body")) {
             String body = cmdMap.remove("body");
diff --git a/driver-jmx/pom.xml b/driver-jmx/pom.xml
index efd475d99..a8c0bb1b1 100644
--- a/driver-jmx/pom.xml
+++ b/driver-jmx/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -22,13 +22,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/driver-kafka/pom.xml b/driver-kafka/pom.xml
index 2790b180e..4a330b5a0 100644
--- a/driver-kafka/pom.xml
+++ b/driver-kafka/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -44,13 +44,13 @@
       <dependency>
         <groupId>io.nosqlbench</groupId>
         <artifactId>engine-api</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
       </dependency>
 
       <dependency>
         <groupId>io.nosqlbench</groupId>
         <artifactId>driver-stdout</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
       </dependency>
 
       <!--        <dependency>-->
diff --git a/driver-mongodb/pom.xml b/driver-mongodb/pom.xml
index c22d56037..b8ec87e7f 100644
--- a/driver-mongodb/pom.xml
+++ b/driver-mongodb/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -21,13 +21,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/driver-stdout/pom.xml b/driver-stdout/pom.xml
index 7c112009f..d4745c9a9 100644
--- a/driver-stdout/pom.xml
+++ b/driver-stdout/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -22,13 +22,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java
index 6de74b7cd..0399bacf2 100644
--- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java
+++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java
@@ -27,11 +27,6 @@ public class StdoutActivityType implements ActivityType<StdoutActivity> {
                 ".");
         }
 
-        // allow shortcut: yaml parameter provide the default alias name
-        if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) {
-            activityDef.getParams().set("alias",yaml.get());
-        }
-
         return new StdoutActivity(activityDef);
     }
 
diff --git a/driver-tcp/pom.xml b/driver-tcp/pom.xml
index 43a4349ff..0c0282353 100644
--- a/driver-tcp/pom.xml
+++ b/driver-tcp/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -24,19 +24,19 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>driver-stdout</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/driver-web/pom.xml b/driver-web/pom.xml
index bdcf5f5ac..2ff90a4a1 100644
--- a/driver-web/pom.xml
+++ b/driver-web/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -22,13 +22,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/drivers-api/pom.xml b/drivers-api/pom.xml
index 0a7a6fce0..c295faa1a 100644
--- a/drivers-api/pom.xml
+++ b/drivers-api/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -23,13 +23,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>nb-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-userlibs</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/engine-api/pom.xml b/engine-api/pom.xml
index 4ef4e27aa..fa7c94a4d 100644
--- a/engine-api/pom.xml
+++ b/engine-api/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -23,25 +23,25 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>nb-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>nb-annotations</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-userlibs</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java
index b97cf281c..e72b533e3 100644
--- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java
+++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/HybridRateLimiter.java
@@ -21,8 +21,9 @@ import com.codahale.metrics.Gauge;
 import io.nosqlbench.engine.api.activityapi.core.Startable;
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
-import org.apache.logging.log4j.Logger;
+import io.nosqlbench.nb.annotations.Service;
 import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -76,11 +77,12 @@ import java.util.concurrent.atomic.AtomicLong;
  * overall workload is not saturating resources.
  * </p>
  */
+@Service(value = RateLimiter.class, selector = "hybrid")
 public class HybridRateLimiter implements Startable, RateLimiter {
 
     private final static Logger logger = LogManager.getLogger(HybridRateLimiter.class);
 
-    private volatile TokenFiller filler;
+    //private volatile TokenFiller filler;
     private volatile long starttime;
 
     // rate controls
@@ -150,8 +152,9 @@ public class HybridRateLimiter implements Startable, RateLimiter {
         }
 
         this.rateSpec = updatingRateSpec;
-        this.filler = (this.filler == null) ? new TokenFiller(rateSpec, activityDef) : filler.apply(rateSpec);
-        this.tokens = this.filler.getTokenPool();
+        this.tokens = (this.tokens == null) ? new ThreadDrivenTokenPool(rateSpec, activityDef) : this.tokens.apply(rateSpec);
+//        this.filler = (this.filler == null) ? new TokenFiller(rateSpec, activityDef) : filler.apply(rateSpec);
+//        this.tokens = this.filler.getTokenPool();
 
         if (this.state == State.Idle && updatingRateSpec.isAutoStart()) {
             this.start();
@@ -177,7 +180,7 @@ public class HybridRateLimiter implements Startable, RateLimiter {
             case Idle:
                 long nanos = getNanoClockTime();
                 this.starttime = nanos;
-                this.filler.start();
+                this.tokens.start();
                 state = State.Started;
                 break;
         }
@@ -191,7 +194,7 @@ public class HybridRateLimiter implements Startable, RateLimiter {
             case Started:
                 long accumulatedWaitSinceLastStart = cumulativeWaitTimeNanos.get();
                 cumulativeWaitTimeNanos.set(0L);
-                return this.filler.restart() + accumulatedWaitSinceLastStart;
+                return this.tokens.restart() + accumulatedWaitSinceLastStart;
             default:
                 return 0L;
         }
@@ -215,14 +218,14 @@ public class HybridRateLimiter implements Startable, RateLimiter {
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder(HybridRateLimiter.class.getSimpleName());
-        if (this.getRateSpec()!=null) {
+        if (this.getRateSpec() != null) {
             sb.append(" spec=").append(this.getRateSpec().toString());
         }
-        if (this.state!=null) {
+        if (this.state != null) {
             sb.append(" state=").append(this.state);
         }
-        if (this.filler !=null) {
-            sb.append(" filler=").append(this.filler.toString());
+        if (this.tokens != null) {
+            sb.append(" tokens=").append(this.tokens.toString());
         }
         return sb.toString();
     }
@@ -245,7 +248,7 @@ public class HybridRateLimiter implements Startable, RateLimiter {
 
         @Override
         public Long getValue() {
-            TokenPool pool = rl.filler.getTokenPool();
+            TokenPool pool = rl.tokens;
             if (pool==null) {
                 return 0L;
             }
diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java
new file mode 100644
index 000000000..2605d1126
--- /dev/null
+++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/ThreadDrivenTokenPool.java
@@ -0,0 +1,269 @@
+/*
+ *
+ *    Copyright 2016 jshook
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ * /
+ */
+
+package io.nosqlbench.engine.api.activityapi.ratelimits;
+
+import io.nosqlbench.engine.api.activityimpl.ActivityDef;
+import io.nosqlbench.nb.annotations.Service;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import static io.nosqlbench.engine.api.util.Colors.*;
+
+/**
+ * <h2>Synopsis</h2>
+ *
+ * This TokenPool represents a finite quantity which can be
+ * replenished with regular refills. Extra tokens that do not fit
+ * within the active token pool are saved in a waiting token pool and
+ * used to backfill when allowed according to the backfill rate.
+ *
+ * A detailed explanation for how this works will be included
+ * at @link "http://docs.nosqlbench.io/" under dev notes.
+ *
+ * <p>This is the basis for the token-based rate limiters in
+ * NB. This mechanism is easily adaptable to bursting
+ * capability as well as a degree of stricter timing at speed.
+ * Various methods for doing this in a lock free way were
+ * investigated, but the intrinsic locks provided by synchronized
+ * method won out for now. This may be revisited when EB is
+ * retrofitted for J11.
+ * </p>
+ */
+@Service(value = TokenPool.class, selector = "threaded")
+public class ThreadDrivenTokenPool implements TokenPool {
+
+    private final static Logger logger = LogManager.getLogger(ThreadDrivenTokenPool.class);
+
+    public static final double MIN_CONCURRENT_OPS = 2;
+
+    private long maxActivePool;
+    private long burstPoolSize;
+    private long maxOverActivePool;
+    private double burstRatio;
+    // TODO Consider removing volatile after investigating 
+    private volatile long activePool;
+    private volatile long waitingPool;
+    private RateSpec rateSpec;
+    private long nanosPerOp;
+    //    private long debugTrigger=0L;
+//    private long debugRate=1000000000;
+    private long blocks = 0L;
+
+    private TokenFiller filler;
+    private final ActivityDef activityDef;
+
+    /**
+     * This constructor tries to pick reasonable defaults for the token pool for
+     * a given rate spec. The active pool must be large enough to contain one
+     * op worth of time, and the burst ratio
+     *
+     * @param rateSpec a {@link RateSpec}
+     */
+    public ThreadDrivenTokenPool(RateSpec rateSpec, ActivityDef activityDef) {
+        this.activityDef = activityDef;
+        apply(rateSpec);
+        logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString());
+//        filler.start();
+    }
+
+    /**
+     * Change the settings of this token pool, and wake any blocked callers
+     * just in case it allows them to proceed.
+     *
+     * @param rateSpec The rate specifier.
+     */
+    @Override
+    public synchronized TokenPool apply(RateSpec rateSpec) {
+        this.rateSpec = rateSpec;
+        this.maxActivePool = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS));
+        this.maxOverActivePool = (long) (maxActivePool * rateSpec.getBurstRatio());
+        this.burstRatio = rateSpec.getBurstRatio();
+
+        this.burstPoolSize = maxOverActivePool - maxActivePool;
+        this.nanosPerOp = rateSpec.getNanosPerOp();
+        this.filler = (this.filler == null) ? new TokenFiller(rateSpec, this, activityDef) : filler.apply(rateSpec);
+        notifyAll();
+        return this;
+    }
+
+
+    @Override
+    public double getBurstRatio() {
+        return burstRatio;
+    }
+
+    /**
+     * Take tokens up to amt tokens form the pool and report
+     * the amount of token removed.
+     *
+     * @param amt tokens requested
+     * @return actual number of tokens removed, greater to or equal to zero
+     */
+    @Override
+    public synchronized long takeUpTo(long amt) {
+        long take = Math.min(amt, activePool);
+        activePool -= take;
+        return take;
+    }
+
+    /**
+     * wait for the given number of tokens to be available, and then remove
+     * them from the pool.
+     *
+     * @return the total number of tokens untaken, including wait tokens
+     */
+    @Override
+    public synchronized long blockAndTake() {
+        while (activePool < nanosPerOp) {
+            blocks++;
+            //System.out.println(ANSI_BrightRed +  "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
+            try {
+                wait(maxActivePool / 1000000, (int) maxActivePool % 1000000);
+            } catch (InterruptedException ignored) {
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            //System.out.println("waited for " + amt + "/" + activePool + " tokens");
+        }
+        //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
+
+        activePool -= nanosPerOp;
+        return waitingPool + activePool;
+    }
+
+    @Override
+    public synchronized long blockAndTake(long tokens) {
+        while (activePool < tokens) {
+            //System.out.println(ANSI_BrightRed +  "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
+            try {
+                wait(maxActivePool / 1000000, (int) maxActivePool % 1000000);
+            } catch (InterruptedException ignored) {
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            //System.out.println("waited for " + amt + "/" + activePool + " tokens");
+        }
+        //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
+
+        activePool -= tokens;
+        return waitingPool + activePool;
+    }
+
+    @Override
+    public long getWaitTime() {
+        return activePool + waitingPool;
+    }
+
+    @Override
+    public long getWaitPool() {
+        return waitingPool;
+    }
+
+    @Override
+    public long getActivePool() {
+        return activePool;
+    }
+
+    /**
+     * Add the given number of new tokens to the pool, forcing any amount
+     * that would spill over the current pool size into the wait token pool, but
+     * moving up to the configured burst tokens back from the wait token pool
+     * otherwise.
+     *
+     * The amount of backfilling that occurs is controlled by the backfill ratio,
+     * based on the number of tokens submitted. This causes normalizes the
+     * backfilling rate to the fill rate, so that it is not sensitive to refill
+     * scheduling.
+     *
+     * @param newTokens The number of new tokens to add to the token pools
+     * @return the total number of tokens in all pools
+     */
+    public synchronized long refill(long newTokens) {
+        boolean debugthis = false;
+//        long debugAt = System.nanoTime();
+//        if (debugAt>debugTrigger+debugRate) {
+//            debugTrigger=debugAt;
+//            debugthis=true;
+//        }
+
+        long needed = Math.max(maxActivePool - activePool, 0L);
+        long allocatedToActivePool = Math.min(newTokens, needed);
+        activePool += allocatedToActivePool;
+
+
+        // overflow logic
+        long allocatedToOverflowPool = newTokens - allocatedToActivePool;
+        waitingPool += allocatedToOverflowPool;
+
+        // backfill logic
+        double refillFactor = Math.min((double) newTokens / maxActivePool, 1.0D);
+        long burstFillAllowed = (long) (refillFactor * burstPoolSize);
+
+        burstFillAllowed = Math.min(maxOverActivePool - activePool, burstFillAllowed);
+        long burstFill = Math.min(burstFillAllowed, waitingPool);
+
+        waitingPool -= burstFill;
+        activePool += burstFill;
+
+        if (debugthis) {
+            System.out.print(this);
+            System.out.print(ANSI_BrightBlue + " adding=" + allocatedToActivePool);
+            if (allocatedToOverflowPool > 0) {
+                System.out.print(ANSI_Red + " OVERFLOW:" + allocatedToOverflowPool + ANSI_Reset);
+            }
+            if (burstFill > 0) {
+                System.out.print(ANSI_BrightGreen + " BACKFILL:" + burstFill + ANSI_Reset);
+            }
+            System.out.println();
+        }
+        //System.out.println(this);
+        notifyAll();
+
+        return activePool + waitingPool;
+    }
+
+    @Override
+    public String toString() {
+        return "Tokens: active=" + activePool + "/" + maxActivePool
+                + String.format(
+                " (%3.1f%%)A (%3.1f%%)B ",
+                (((double) activePool / (double) maxActivePool) * 100.0),
+                (((double) activePool / (double) maxOverActivePool) * 100.0)) + " waiting=" + waitingPool +
+                " blocks=" + blocks +
+                " rateSpec:" + ((rateSpec != null) ? rateSpec.toString() : "NULL");
+    }
+
+    @Override
+    public RateSpec getRateSpec() {
+        return rateSpec;
+    }
+
+    @Override
+    public synchronized long restart() {
+        long wait = activePool + waitingPool;
+        activePool = 0L;
+        waitingPool = 0L;
+        filler.restart();
+        return wait;
+    }
+
+    @Override
+    public void start() {
+        filler.start();
+    }
+}
diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java
index 359996db3..695da698b 100644
--- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java
+++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenFiller.java
@@ -35,7 +35,7 @@ public class TokenFiller implements Runnable {
 //    (false);
     private final long interval = (long) 1E6;
 
-    private final TokenPool tokenPool;
+    private final ThreadDrivenTokenPool tokenPool;
     private volatile boolean running = true;
     private RateSpec rateSpec;
     private Thread thread;
@@ -43,23 +43,21 @@ public class TokenFiller implements Runnable {
     private final Timer timer;
 
     /**
-     * A token filler adds tokens to a {@link TokenPool} at some rate.
+     * A token filler adds tokens to a {@link ThreadDrivenTokenPool} at some rate.
      * By default, this rate is at least every millisecond +- scheduling jitter
      * in the JVM.
      *
      * @param rateSpec A {@link RateSpec}
-     * @param def An {@link ActivityDef}
+     * @param def      An {@link ActivityDef}
      */
-    public TokenFiller(RateSpec rateSpec, ActivityDef def) {
+    public TokenFiller(RateSpec rateSpec, ThreadDrivenTokenPool tokenPool, ActivityDef def) {
         this.rateSpec = rateSpec;
-        this.tokenPool= new TokenPool(rateSpec);
-        this.tokenPool.refill(rateSpec.getNanosPerOp());
+        this.tokenPool = tokenPool;
         this.timer = ActivityMetrics.timer(def, "tokenfiller");
     }
 
     public TokenFiller apply(RateSpec rateSpec) {
         this.rateSpec = rateSpec;
-        this.tokenPool.apply(rateSpec);
         return this;
     }
 
@@ -99,6 +97,8 @@ public class TokenFiller implements Runnable {
     }
 
     public TokenFiller start() {
+        this.tokenPool.refill(rateSpec.getNanosPerOp());
+
         thread = new Thread(this);
         thread.setName(this.toString());
         thread.setPriority(Thread.MAX_PRIORITY);
diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java
index 1a37ab2ae..a2f02ac5d 100644
--- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java
+++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPool.java
@@ -1,252 +1,25 @@
-/*
- *
- *    Copyright 2016 jshook
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- * /
- */
-
 package io.nosqlbench.engine.api.activityapi.ratelimits;
 
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
+public interface TokenPool {
+    TokenPool apply(RateSpec rateSpec);
 
-import static io.nosqlbench.engine.api.util.Colors.*;
+    double getBurstRatio();
 
-/**
- * <h2>Synopsis</h2>
- *
- * This TokenPool represents a finite quantity which can be
- * replenished with regular refills. Extra tokens that do not fit
- * within the active token pool are saved in a waiting token pool and
- * used to backfill when allowed according to the backfill rate.
- *
- * A detailed explanation for how this works will be included
- * at @link "http://docs.nosqlbench.io/" under dev notes.
- *
- * <p>This is the basis for the token-based rate limiters in
- * NB. This mechanism is easily adaptable to bursting
- * capability as well as a degree of stricter timing at speed.
- * Various methods for doing this in a lock free way were
- * investigated, but the intrinsic locks provided by synchronized
- * method won out for now. This may be revisited when EB is
- * retrofitted for J11.
- * </p>
- */
-public class TokenPool {
+    long takeUpTo(long amt);
 
-    private final static Logger logger = LogManager.getLogger(TokenPool.class);
+    long blockAndTake();
 
-    public static final double MIN_CONCURRENT_OPS = 2;
+    long blockAndTake(long tokens);
 
-    private long maxActivePool;
-    private long burstPoolSize;
-    private long maxOverActivePool;
-    private double burstRatio;
-    // TODO Consider removing volatile after investigating 
-    private volatile long activePool;
-    private volatile long waitingPool;
-    private RateSpec rateSpec;
-    private long nanosPerOp;
-//    private long debugTrigger=0L;
-//    private long debugRate=1000000000;
-    private long blocks = 0L;
+    long getWaitTime();
 
+    long getWaitPool();
 
-    /**
-     * This constructor tries to pick reasonable defaults for the token pool for
-     * a given rate spec. The active pool must be large enough to contain one
-     * op worth of time, and the burst ratio
-     *
-     * @param rateSpec a {@link RateSpec}
-     */
-    public TokenPool(RateSpec rateSpec) {
-        apply(rateSpec);
-        logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString());
-    }
+    long getActivePool();
 
-    public TokenPool(long poolsize, double burstRatio) {
-        this.maxActivePool = poolsize;
-        this.burstRatio = burstRatio;
-        this.maxOverActivePool = (long) (maxActivePool * burstRatio);
-        this.burstPoolSize = maxOverActivePool - maxActivePool;
-    }
+    RateSpec getRateSpec();
 
-    /**
-     * Change the settings of this token pool, and wake any blocked callers
-     * just in case it allows them to proceed.
-     *
-     * @param rateSpec The rate specifier.
-     */
-    public synchronized void apply(RateSpec rateSpec) {
-        this.rateSpec=rateSpec;
-        this.maxActivePool = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS));
-        this.maxOverActivePool = (long) (maxActivePool * rateSpec.getBurstRatio());
-        this.burstRatio = rateSpec.getBurstRatio();
+    long restart();
 
-        this.burstPoolSize = maxOverActivePool - maxActivePool;
-        this.nanosPerOp = rateSpec.getNanosPerOp();
-        notifyAll();
-    }
-
-
-    public double getBurstRatio() {
-        return burstRatio;
-    }
-
-    /**
-     * Take tokens up to amt tokens form the pool and report
-     * the amount of token removed.
-     *
-     * @param amt tokens requested
-     * @return actual number of tokens removed, greater to or equal to zero
-     */
-    public synchronized long takeUpTo(long amt) {
-        long take = Math.min(amt, activePool);
-        activePool -= take;
-        return take;
-    }
-
-    /**
-     * wait for the given number of tokens to be available, and then remove
-     * them from the pool.
-     *
-     * @return the total number of tokens untaken, including wait tokens
-     */
-    public synchronized long blockAndTake() {
-        while (activePool < nanosPerOp) {
-            blocks++;
-            //System.out.println(ANSI_BrightRed +  "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
-            try {
-                wait(maxActivePool / 1000000, (int) maxActivePool % 1000000);
-            } catch (InterruptedException ignored) {
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            //System.out.println("waited for " + amt + "/" + activePool + " tokens");
-        }
-        //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
-
-        activePool -= nanosPerOp;
-        return waitingPool + activePool;
-    }
-
-    public synchronized long blockAndTake(long tokens) {
-        while (activePool < tokens) {
-            //System.out.println(ANSI_BrightRed +  "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
-            try {
-                wait(maxActivePool / 1000000, (int) maxActivePool % 1000000);
-            } catch (InterruptedException ignored) {
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            //System.out.println("waited for " + amt + "/" + activePool + " tokens");
-        }
-        //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
-
-        activePool -= tokens;
-        return waitingPool + activePool;
-    }
-
-    public long getWaitTime() {
-        return activePool + waitingPool;
-    }
-
-    public long getWaitPool() {
-        return waitingPool;
-    }
-
-    public long getActivePool() {
-        return activePool;
-    }
-
-    /**
-     * Add the given number of new tokens to the pool, forcing any amount
-     * that would spill over the current pool size into the wait token pool, but
-     * moving up to the configured burst tokens back from the wait token pool
-     * otherwise.
-     *
-     * The amount of backfilling that occurs is controlled by the backfill ratio,
-     * based on the number of tokens submitted. This causes normalizes the
-     * backfilling rate to the fill rate, so that it is not sensitive to refill
-     * scheduling.
-     *
-     * @param newTokens The number of new tokens to add to the token pools
-     * @return the total number of tokens in all pools
-     */
-    public synchronized long refill(long newTokens) {
-        boolean debugthis=false;
-//        long debugAt = System.nanoTime();
-//        if (debugAt>debugTrigger+debugRate) {
-//            debugTrigger=debugAt;
-//            debugthis=true;
-//        }
-
-        long needed = Math.max(maxActivePool - activePool, 0L);
-        long allocatedToActivePool = Math.min(newTokens, needed);
-        activePool += allocatedToActivePool;
-
-
-        // overflow logic
-        long allocatedToOverflowPool = newTokens - allocatedToActivePool;
-        waitingPool += allocatedToOverflowPool;
-
-        // backfill logic
-        double refillFactor = Math.min((double) newTokens / maxActivePool, 1.0D);
-        long burstFillAllowed =(long) (refillFactor* burstPoolSize);
-
-        burstFillAllowed = Math.min(maxOverActivePool - activePool, burstFillAllowed);
-        long burstFill = Math.min(burstFillAllowed, waitingPool);
-
-        waitingPool -= burstFill;
-        activePool += burstFill;
-
-        if (debugthis) {
-            System.out.print(this);
-            System.out.print(ANSI_BrightBlue + " adding=" + allocatedToActivePool);
-            if (allocatedToOverflowPool>0) {
-                System.out.print(ANSI_Red + " OVERFLOW:" + allocatedToOverflowPool + ANSI_Reset);
-            }
-            if (burstFill>0) {
-                System.out.print(ANSI_BrightGreen + " BACKFILL:" + burstFill + ANSI_Reset);
-            }
-            System.out.println();
-        }
-        //System.out.println(this);
-        notifyAll();
-
-        return activePool+waitingPool;
-    }
-
-    @Override
-    public String toString() {
-        return "Tokens: active=" + activePool +"/" + maxActivePool
-                + String.format(
-                        " (%3.1f%%)A (%3.1f%%)B ",
-                (((double)activePool/(double)maxActivePool)*100.0),
-                (((double)activePool/(double)maxOverActivePool)*100.0)) + " waiting=" + waitingPool +
-                " blocks=" + blocks +
-                " rateSpec:"+ ((rateSpec!=null) ? rateSpec.toString() : "NULL");
-    }
-
-    public RateSpec getRateSpec() {
-        return rateSpec;
-    }
-
-    public synchronized long restart() {
-        long wait=activePool+waitingPool;
-        activePool=0L;
-        waitingPool=0L;
-        return wait;
-
-    }
+    void start();
 }
diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
index 884a7f569..09e00fbf0 100644
--- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
+++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/SimpleActivity.java
@@ -27,6 +27,7 @@ import java.io.InputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -52,9 +53,23 @@ public class SimpleActivity implements Activity, ProgressCapable {
     private ActivityInstrumentation activityInstrumentation;
     private PrintWriter console;
     private long startedAtMillis;
+    private int nameEnumerator = 0;
 
     public SimpleActivity(ActivityDef activityDef) {
         this.activityDef = activityDef;
+        if (activityDef.getAlias().equals(ActivityDef.DEFAULT_ALIAS)) {
+            Optional<String> workloadOpt = activityDef.getParams().getOptionalString(
+                    "workload",
+                    "yaml"
+            );
+            if (workloadOpt.isPresent()) {
+                activityDef.getParams().set("alias", workloadOpt.get());
+            } else {
+                activityDef.getParams().set("alias",
+                        activityDef.getActivityType().toUpperCase(Locale.ROOT)
+                                + String.valueOf(nameEnumerator++));
+            }
+        }
     }
 
     public SimpleActivity(String activityDefString) {
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java
index 09def25dc..86dc50afc 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TokenPoolTest.java
@@ -17,30 +17,33 @@
 
 package io.nosqlbench.engine.api.activityapi.ratelimits;
 
-import org.junit.Ignore;
+import io.nosqlbench.engine.api.activityimpl.ActivityDef;
+import io.nosqlbench.engine.api.activityimpl.ParameterMap;
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class TokenPoolTest {
 
+    ActivityDef def = new ActivityDef(ParameterMap.parseOrException("alias=testing"));
+
     @Test
     public void testBackfillFullRate() {
-        TokenPool p = new TokenPool(100, 1.1);
-        assertThat(p.refill(100L)).isEqualTo(100L);
+        ThreadDrivenTokenPool p = new ThreadDrivenTokenPool(new RateSpec(10000000, 1.1), def);
+        assertThat(p.refill(1000000L)).isEqualTo(1000000L);
         assertThat(p.getWaitPool()).isEqualTo(0L);
-        assertThat(p.refill(100L)).isEqualTo(200);
+        assertThat(p.refill(100L)).isEqualTo(1000100);
         assertThat(p.getWaitPool()).isEqualTo(90L);
-        assertThat(p.refill(10L)).isEqualTo(210L);
-        assertThat(p.getWaitPool()).isEqualTo(100L);
+        assertThat(p.refill(10L)).isEqualTo(1000110L);
+        assertThat(p.getWaitPool()).isEqualTo(99L);
 
-        assertThat(p.refill(10)).isEqualTo(220L);
+        assertThat(p.refill(10)).isEqualTo(1000120L);
         assertThat(p.takeUpTo(100)).isEqualTo(100L);
 
     }
     @Test
     public void testTakeRanges() {
-        TokenPool p = new TokenPool(100, 10);
+        ThreadDrivenTokenPool p = new ThreadDrivenTokenPool(new RateSpec(100, 10), def);
         p.refill(100);
         assertThat(p.takeUpTo(99)).isEqualTo(99L);
         assertThat(p.takeUpTo(10)).isEqualTo(1L);
@@ -51,7 +54,7 @@ public class TokenPoolTest {
     public void testChangedParameters() {
 
         RateSpec s1 = new RateSpec(1000L, 1.10D);
-        TokenPool p = new TokenPool(s1);
+        ThreadDrivenTokenPool p = new ThreadDrivenTokenPool(s1, def);
         long r = p.refill(10000000);
         assertThat(r).isEqualTo(10000000L);
         assertThat(p.getWaitTime()).isEqualTo(10000000L);
diff --git a/engine-cli/pom.xml b/engine-cli/pom.xml
index d21d57308..6bcc5e654 100644
--- a/engine-cli/pom.xml
+++ b/engine-cli/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -23,13 +23,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-core</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-docker</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
index 44cfec7ff..44930bc46 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java
@@ -21,7 +21,7 @@ import io.nosqlbench.engine.core.script.ScenariosExecutor;
 import io.nosqlbench.engine.core.script.ScriptParams;
 import io.nosqlbench.engine.docker.DockerMetricsManager;
 import io.nosqlbench.nb.api.annotations.Annotation;
-import io.nosqlbench.nb.api.Layer;
+import io.nosqlbench.nb.api.annotations.Layer;
 import io.nosqlbench.nb.api.content.Content;
 import io.nosqlbench.nb.api.content.NBIO;
 import io.nosqlbench.nb.api.errors.BasicError;
@@ -89,8 +89,10 @@ public class NBCLI {
         loggerConfig.setConsoleLevel(NBLogLevel.ERROR);
 
         NBCLIOptions globalOptions = new NBCLIOptions(args, NBCLIOptions.Mode.ParseGlobalsOnly);
+        String sessionName = new SessionNamer().format(globalOptions.getSessionName());
 
         loggerConfig
+                .setSessionName(sessionName)
                 .setConsoleLevel(globalOptions.getConsoleLogLevel())
                 .setConsolePattern(globalOptions.getConsoleLoggingPattern())
                 .setLogfileLevel(globalOptions.getScenarioLogLevel())
@@ -103,6 +105,7 @@ public class NBCLI {
         logger = LogManager.getLogger("NBCLI");
         loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO"));
         logger.info("Configured scenario log at " + loggerConfig.getLogfileLocation());
+        logger.debug("Scenario log started");
 
         // Global only processing
         if (args.length == 0) {
@@ -131,7 +134,8 @@ public class NBCLI {
             logger.info("Docker metrics is enabled. Docker must be installed for this to work");
             DockerMetricsManager dmh = new DockerMetricsManager();
             Map<String, String> dashboardOptions = Map.of(
-                    DockerMetricsManager.GRAFANA_TAG, globalOptions.getDockerGrafanaTag()
+                    DockerMetricsManager.GRAFANA_TAG, globalOptions.getDockerGrafanaTag(),
+                    DockerMetricsManager.PROM_TAG, globalOptions.getDockerPromTag()
             );
             dmh.startMetrics(dashboardOptions);
             String warn = "Docker Containers are started, for grafana and prometheus, hit" +
@@ -144,8 +148,11 @@ public class NBCLI {
 
         if (metricsAddr != null) {
             reportGraphiteTo = metricsAddr + ":9109";
-            annotatorsConfig = "[{type:'log'},{type:'grafana',baseurl:'http://" + metricsAddr + ":3000/'," +
+            annotatorsConfig = "[{type:'log',level:'info'},{type:'grafana',baseurl:'http://" + metricsAddr + ":3000" +
+                    "/'," +
                     "tags:'appname:nosqlbench',timeoutms:5000,onerror:'warn'}]";
+        } else {
+            annotatorsConfig = "[{type:'log',level:'info'}]";
         }
 
         if (args.length > 0 && args[0].toLowerCase().equals("virtdata")) {
@@ -162,7 +169,6 @@ public class NBCLI {
         }
 
         NBCLIOptions options = new NBCLIOptions(args);
-        String sessionName = new SessionNamer().format(options.getSessionName());
         logger = LogManager.getLogger("NBCLI");
 
         NBIO.addGlobalIncludes(options.wantsIncludes());
@@ -271,6 +277,7 @@ public class NBCLI {
             System.exit(0);
         }
 
+        logger.debug("initializing annotators with config:'" + annotatorsConfig + "'");
         Annotators.init(annotatorsConfig);
         Annotators.recordAnnotation(
                 Annotation.newBuilder()
@@ -330,7 +337,8 @@ public class NBCLI {
                 options.getProgressSpec(),
                 options.wantsGraaljsCompatMode(),
                 options.wantsStackTraces(),
-                options.wantsCompileScript()
+                options.wantsCompileScript(),
+                String.join("\n", args)
         );
         ScriptBuffer buffer = new BasicScriptBuffer()
                 .add(options.getCommands().toArray(new Cmd[0]));
@@ -378,7 +386,7 @@ public class NBCLI {
         scenariosResults.reportToLog();
         ShutdownManager.shutdown();
 
-        logger.info(scenariosResults.getExecutionSummary());
+//        logger.info(scenariosResults.getExecutionSummary());
 
         if (scenariosResults.hasError()) {
             Exception exception = scenariosResults.getOne().getException().get();
diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java
index c642f4cd2..6dda818f0 100644
--- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java
+++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java
@@ -4,10 +4,8 @@ import io.nosqlbench.engine.api.metrics.IndicatorMode;
 import io.nosqlbench.engine.api.util.Unit;
 import io.nosqlbench.engine.core.script.Scenario;
 import io.nosqlbench.nb.api.Environment;
-import io.nosqlbench.nb.api.logging.NBLogLevel;
 import io.nosqlbench.nb.api.errors.BasicError;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
+import io.nosqlbench.nb.api.logging.NBLogLevel;
 
 import java.io.File;
 import java.io.IOException;
@@ -37,7 +35,6 @@ public class NBCLIOptions {
 
     private static final String METRICS_PREFIX = "--metrics-prefix";
 
-    //    private static final String ANNOTATE_TO_GRAFANA = "--grafana-baseurl";
     private static final String ANNOTATE_EVENTS = "--annotate";
     private static final String ANNOTATORS_CONFIG = "--annotators";
     private static final String DEFAULT_ANNOTATORS = "all";
@@ -88,11 +85,12 @@ public class NBCLIOptions {
     private final static String ENABLE_CHART = "--enable-chart";
     private final static String DOCKER_METRICS = "--docker-metrics";
     private final static String DOCKER_METRICS_AT = "--docker-metrics-at";
+    private static final String DOCKER_GRAFANA_TAG = "--docker-grafana-tag";
+    private static final String DOCKER_PROM_TAG = "--docker-prom-tag";
 
     private static final String GRAALJS_ENGINE = "--graaljs";
     private static final String NASHORN_ENGINE = "--nashorn";
     private static final String GRAALJS_COMPAT = "--graaljs-compat";
-    private static final String DOCKER_GRAFANA_TAG = "--docker-grafana-tag";
 
     private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%7r %-5level [%t] %-12logger{0} %msg%n%throwable";
 
@@ -136,8 +134,9 @@ public class NBCLIOptions {
     private final List<String> wantsToIncludePaths = new ArrayList<>();
     private Scenario.Engine engine = Scenario.Engine.Graalvm;
     private boolean graaljs_compat = false;
-    private int hdr_digits = 4;
-    private String docker_grafana_tag = "7.2.2";
+    private int hdr_digits = 3;
+    private String docker_grafana_tag = "7.3.4";
+    private String docker_prom_tag = "latest";
     private boolean showStackTraces = false;
     private boolean compileScript = false;
     private String scriptFile = null;
@@ -146,8 +145,8 @@ public class NBCLIOptions {
     private String annotatorsConfig = "";
     private String statedirs = NB_STATEDIR_PATHS;
     private Path statepath;
-    private List<String> statePathAccesses = new ArrayList<>();
-    private String hdrForChartFileName = DEFAULT_CHART_HDR_LOG_NAME;
+    private final List<String> statePathAccesses = new ArrayList<>();
+    private final String hdrForChartFileName = DEFAULT_CHART_HDR_LOG_NAME;
 
     public String getAnnotatorsConfig() {
         return annotatorsConfig;
@@ -285,6 +284,10 @@ public class NBCLIOptions {
                     arglist.removeFirst();
                     workspacesDirectory = readWordOrThrow(arglist, "a workspaces directory");
                     break;
+                case DOCKER_PROM_TAG:
+                    arglist.removeFirst();
+                    docker_prom_tag = readWordOrThrow(arglist, "prometheus docker tag");
+                    break;
                 case DOCKER_GRAFANA_TAG:
                     arglist.removeFirst();
                     docker_grafana_tag = readWordOrThrow(arglist, "grafana docker tag");
@@ -766,6 +769,10 @@ public class NBCLIOptions {
         return docker_grafana_tag;
     }
 
+    public String getDockerPromTag() {
+        return docker_prom_tag;
+    }
+
     public static class LoggerConfigData {
         public String file;
         public String pattern = ".*";
diff --git a/engine-clients/pom.xml b/engine-clients/pom.xml
index 05532cf79..6a5061cd8 100644
--- a/engine-clients/pom.xml
+++ b/engine-clients/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>mvn-defaults</artifactId>
     <groupId>io.nosqlbench</groupId>
-    <version>3.12.160-SNAPSHOT</version>
+    <version>4.15.5-SNAPSHOT</version>
     <relativePath>../mvn-defaults</relativePath>
   </parent>
 
@@ -21,7 +21,7 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-api</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
   </dependencies>
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java
index 110b251de..ab5e056b3 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java
@@ -1,6 +1,7 @@
 package io.nosqlbench.engine.clients.grafana;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class By {
@@ -57,8 +58,11 @@ public class By {
         return new By("type", "alert");
     }
 
-    public static By tags(String tag) {
-        return new By("tags", tag);
+    /**
+     * Add one tag at a time, in either "tag" or "tag:value" form.
+     */
+    public static By tag(String tag) {
+        return new By("tag", tag);
     }
 
     public static By id(int id) {
@@ -69,11 +73,12 @@ public class By {
         List<String> tags = new ArrayList<>();
         StringBuilder sb = new StringBuilder();
         for (By by : bys) {
-            if (by.key.equals("tags")) {
-                tags.add(by.value.toString());
+            if (by.key.equals("tag")) {
+                tags.addAll(Arrays.asList(by.value.toString().split(",")));
+            } else {
+                sb.append(by.key).append("=").append(by.value);
+                sb.append("&");
             }
-            sb.append(by.key).append("=").append(by.value);
-            sb.append("&");
         }
         for (String tag : tags) {
             sb.append("tags=").append(tag).append("&");
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
index 597977f81..419b5f0f1 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaClient.java
@@ -2,13 +2,19 @@ package io.nosqlbench.engine.clients.grafana;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation;
 import io.nosqlbench.engine.clients.grafana.transfer.Annotations;
 import io.nosqlbench.engine.clients.grafana.transfer.ApiTokenRequest;
+import io.nosqlbench.engine.clients.grafana.transfer.DashboardResponse;
+import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation;
 
+import java.io.File;
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.util.function.Supplier;
 
 /**
  * @see <a href="https://grafana.com/docs/grafana/latest/http_api/annotations/">Grafana Annotations API Docs</a>
@@ -179,6 +185,27 @@ public class GrafanaClient {
         return savedGrafanaAnnotation;
     }
 
+    public DashboardResponse getDashboardByUid(String uid) {
+        HttpClient client = config.newClient();
+        HttpRequest.Builder rqb = config.newRequest("api/dashboards/uid/" + uid);
+        rqb = rqb.GET();
+
+        HttpResponse<String> response = null;
+        try {
+            response = client.send(rqb.build(), HttpResponse.BodyHandlers.ofString());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        if (response.statusCode() < 200 || response.statusCode() >= 300) {
+            throw new RuntimeException("Getting dashboard by uid (" + uid + ") failed with status code " + response.statusCode() +
+                    " at baseuri " + config.getBaseUri() + ": " + response.body());
+        }
+        String body = response.body();
+
+        DashboardResponse dashboardResponse = gson.fromJson(body, DashboardResponse.class);
+        return dashboardResponse;
+    }
+
     /**
      * <pre>{@code
      * POST /api/annotations/graphite
@@ -302,13 +329,52 @@ public class GrafanaClient {
         throw new RuntimeException("unimplemented");
     }
 
+    /**
+     * This can be called to create an api token and store it for later use as long as you
+     * have the admin credentials for basic auth. This is preferred to continuing to
+     * passing basic auth for admin privileges. The permissions can now be narrowed or managed
+     * in a modular way.
+     *
+     * @param namer       the principal name for the privelege
+     * @param role        the Grafana role
+     * @param ttl         Length of validity for the granted api token
+     * @param keyfilePath The path of the token. If it is present it will simply be used.
+     * @param un          The basic auth username for the Admin role
+     * @param pw          The basic auth password for the Admin role
+     */
+    public void cacheApiToken(Supplier<String> namer, String role, long ttl, Path keyfilePath, String un, String pw) {
+        if (!Files.exists(keyfilePath)) {
+            GrafanaClientConfig basicClientConfig = config.copy();
+            basicClientConfig = basicClientConfig.basicAuth(un, pw);
+            GrafanaClient apiClient = new GrafanaClient(basicClientConfig);
+            String keyName = namer.get();
+            ApiToken apiToken = apiClient.createApiToken(keyName, role, ttl);
+            try {
+                if (keyfilePath.toString().contains(File.separator)) {
+                    Files.createDirectories(keyfilePath.getParent(),
+                            PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")));
+                }
+                Files.writeString(keyfilePath, apiToken.getKey());
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        GrafanaMetricsAnnotator.AuthWrapper authHeaderSupplier = new GrafanaMetricsAnnotator.AuthWrapper(
+                "Authorization",
+                new GrafanaKeyFileReader(keyfilePath),
+                s -> "Bearer " + s
+        );
+        config.addHeaderSource(authHeaderSupplier);
+    }
+
     public ApiToken createApiToken(String name, String role, long ttl) {
         ApiTokenRequest r = new ApiTokenRequest(name, role, ttl);
-        ApiToken token = postToGrafana(r, ApiToken.class, "gen api token");
+        ApiToken token = postApiTokenRequest(r, ApiToken.class, "gen api token");
         return token;
     }
 
-    private <T> T postToGrafana(Object request, Class<? extends T> clazz, String desc) {
+    private <T> T postApiTokenRequest(Object request, Class<? extends T> clazz, String desc) {
         HttpRequest rq = config.newJsonPOST("api/auth/keys", request);
         HttpClient client = config.newClient();
 
@@ -331,4 +397,5 @@ public class GrafanaClient {
         T result = gson.fromJson(body, clazz);
         return result;
     }
+
 }
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java
index 25d50aac6..c93bb1e48 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/GrafanaMetricsAnnotator.java
@@ -11,7 +11,6 @@ import io.nosqlbench.nb.api.config.*;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -19,11 +18,11 @@ import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
-@Service(value = Annotator.class, selector = "grafana" )
+@Service(value = Annotator.class, selector = "grafana")
 public class GrafanaMetricsAnnotator implements Annotator, ConfigAware {
 
-    private final static Logger logger = LogManager.getLogger("ANNOTATORS" );
-    private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS" );
+    private final static Logger logger = LogManager.getLogger("ANNOTATORS");
+    //private final static Logger annotationsLog = LogManager.getLogger("ANNOTATIONS" );
     private OnError onError = OnError.Warn;
 
     private GrafanaClient client;
@@ -45,9 +44,15 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware {
             });
             ga.getTags().add("layer:" + annotation.getLayer().toString());
 
+            if (annotation.getStart() == annotation.getEnd()) {
+                ga.getTags().add("span:instant");
+            } else {
+                ga.getTags().add("span:interval");
+            }
+
             Map<String, String> labels = annotation.getLabels();
 
-            Optional.ofNullable(labels.get("alertId" ))
+            Optional.ofNullable(labels.get("alertId"))
                     .map(Integer::parseInt).ifPresent(ga::setAlertId);
 
             ga.setText(annotation.toString());
@@ -56,33 +61,32 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware {
 
 
             // Target
-            Optional.ofNullable(labels.get("type" ))
+            Optional.ofNullable(labels.get("type"))
                     .ifPresent(ga::setType);
 
-            Optional.ofNullable(labels.get("id" )).map(Integer::valueOf)
+            Optional.ofNullable(labels.get("id")).map(Integer::valueOf)
                     .ifPresent(ga::setId);
 
-            Optional.ofNullable(labels.get("alertId" )).map(Integer::valueOf)
+            Optional.ofNullable(labels.get("alertId")).map(Integer::valueOf)
                     .ifPresent(ga::setAlertId);
 
-            Optional.ofNullable(labels.get("dashboardId" )).map(Integer::valueOf)
+            Optional.ofNullable(labels.get("dashboardId")).map(Integer::valueOf)
                     .ifPresent(ga::setDashboardId);
 
-            Optional.ofNullable(labels.get("panelId" )).map(Integer::valueOf)
+            Optional.ofNullable(labels.get("panelId")).map(Integer::valueOf)
                     .ifPresent(ga::setPanelId);
 
-            Optional.ofNullable(labels.get("userId" )).map(Integer::valueOf)
+            Optional.ofNullable(labels.get("userId")).map(Integer::valueOf)
                     .ifPresent(ga::setUserId);
 
-            Optional.ofNullable(labels.get("userName" ))
+            Optional.ofNullable(labels.get("userName"))
                     .ifPresent(ga::setUserName);
 
-            Optional.ofNullable(labels.get("metric" ))
+            Optional.ofNullable(labels.get("metric"))
                     .ifPresent(ga::setMetric);
 
             // Details
 
-            annotationsLog.info("ANNOTATION:" + ga.toString());
             GrafanaAnnotation created = this.client.createAnnotation(ga);
 
         } catch (Exception e) {
@@ -110,58 +114,65 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware {
         GrafanaClientConfig gc = new GrafanaClientConfig();
         gc.setBaseUri(cfg.param("baseurl", String.class));
 
-        if (cfg.containsKey("tags" )) {
+        if (cfg.containsKey("tags")) {
             this.tags = ParamsParser.parse(cfg.param("tags", String.class), false);
         }
 
-        if (cfg.containsKey("username" )) {
-            if (cfg.containsKey("password" )) {
+        if (cfg.containsKey("username")) {
+            if (cfg.containsKey("password")) {
                 gc.basicAuth(
                         cfg.param("username", String.class),
                         cfg.param("password", String.class)
                 );
             } else {
-                gc.basicAuth(cfg.param("username", String.class), "" );
+                gc.basicAuth(cfg.param("username", String.class), "");
             }
         }
 
         Path keyfilePath = null;
-        if (cfg.containsKey("apikeyfile" )) {
+        if (cfg.containsKey("apikeyfile")) {
             String apikeyfile = cfg.paramEnv("apikeyfile", String.class);
             keyfilePath = Path.of(apikeyfile);
-        } else if (cfg.containsKey("apikey" )) {
+        } else if (cfg.containsKey("apikey")) {
             gc.addHeaderSource(() -> Map.of("Authorization", "Bearer " + cfg.param("apikey", String.class)));
         } else {
-            Optional<String> apikeyLocation = Environment.INSTANCE.interpolate("$NBSTATEDIR/grafana_apikey" );
+            Optional<String> apikeyLocation = Environment.INSTANCE
+                    .interpolate(cfg.paramEnv("apikeyfile", String.class));
             keyfilePath = apikeyLocation.map(Path::of).orElseThrow();
         }
 
-        if (!Files.exists(keyfilePath)) {
-            logger.info("Auto-configuring grafana apikey." );
-            GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin" );
-            GrafanaClient apiClient = new GrafanaClient(apiClientConf);
-            try {
-                String nodeId = SystemId.getNodeId();
 
-                String keyName = "nosqlbench-" + nodeId + "-" + System.currentTimeMillis();
-                ApiToken apiToken = apiClient.createApiToken(keyName, "Admin", Long.MAX_VALUE);
-                Files.writeString(keyfilePath, apiToken.getKey());
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
+//        if (!Files.exists(keyfilePath)) {
+//            logger.info("Auto-configuring grafana apikey.");
+//            GrafanaClientConfig apiClientConf = gc.copy().basicAuth("admin", "admin");
+//            GrafanaClient apiClient = new GrafanaClient(apiClientConf);
+//            try {
+//                String nodeId = SystemId.getNodeId();
+//
+//                String keyName = "nosqlbench-" + nodeId + "-" + System.currentTimeMillis();
+//                ApiToken apiToken = apiClient.createApiToken(keyName, "Admin", Long.MAX_VALUE);
+//                Files.createDirectories(keyfilePath.getParent(),
+//                        PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwx---")));
+//                Files.writeString(keyfilePath, apiToken.getKey());
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//        }
+//
+//        AuthWrapper authHeaderSupplier = new AuthWrapper(
+//                "Authorization",
+//                new GrafanaKeyFileReader(keyfilePath),
+//                s -> "Bearer " + s
+//        );
+//        gc.addHeaderSource(authHeaderSupplier);
 
-        AuthWrapper authHeaderSupplier = new AuthWrapper(
-                "Authorization",
-                new GrafanaKeyFileReader(keyfilePath),
-                s -> "Bearer " + s
-        );
-        gc.addHeaderSource(authHeaderSupplier);
-
-        this.onError = OnError.valueOfName(cfg.get("onerror" ).toString());
+        this.onError = OnError.valueOfName(cfg.get("onerror").toString());
 
         this.client = new GrafanaClient(gc);
 
+        String keyName = "nosqlbench-" + SystemId.getNodeId() + "-" + System.currentTimeMillis();
+        Supplier<String> namer = () -> "nosqlbench-" + SystemId.getNodeId() + "-" + System.currentTimeMillis();
+        this.client.cacheApiToken(namer, "Admin", Long.MAX_VALUE, keyfilePath, "admin", "admin");
 
     }
 
@@ -169,22 +180,22 @@ public class GrafanaMetricsAnnotator implements Annotator, ConfigAware {
     public ConfigModel getConfigModel() {
         return new MutableConfigModel(this)
                 .required("baseurl", String.class,
-                        "The base url of the grafana node, like http://localhost:3000/" )
-                .defaultto("apikeyfile", "$NBSTATEDIR/grafana_apikey",
-                        "The file that contains the api key, supersedes apikey" )
+                        "The base url of the grafana node, like http://localhost:3000/")
+                .defaultto("apikeyfile", "$NBSTATEDIR/grafana/grafana_apikey",
+                        "The file that contains the api key, supersedes apikey")
                 .optional("apikey", String.class,
-                        "The api key to use, supersedes basic username and password" )
+                        "The api key to use, supersedes basic username and password")
                 .optional("username", String.class,
-                        "The username to use for basic auth" )
+                        "The username to use for basic auth")
                 .optional("password", String.class,
-                        "The password to use for basic auth" )
+                        "The password to use for basic auth")
                 .defaultto("tags", "source:nosqlbench",
-                        "The tags that identify the annotations, in k:v,... form" )
+                        "The tags that identify the annotations, in k:v,... form")
 //                .defaultto("onerror", OnError.Warn)
                 .defaultto("onerror", "warn",
-                        "What to do when an error occurs while posting an annotation" )
+                        "What to do when an error occurs while posting an annotation")
                 .defaultto("timeoutms", 5000,
-                        "connect and transport timeout for the HTTP client" )
+                        "connect and transport timeout for the HTTP client")
                 .asReadOnly();
     }
 
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java
new file mode 100644
index 000000000..70a061c0c
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/analyzer/GrafanaRegionAnalyzer.java
@@ -0,0 +1,42 @@
+package io.nosqlbench.engine.clients.grafana.analyzer;
+
+import io.nosqlbench.engine.clients.grafana.By;
+import io.nosqlbench.engine.clients.grafana.GrafanaClient;
+import io.nosqlbench.engine.clients.grafana.GrafanaClientConfig;
+import io.nosqlbench.engine.clients.grafana.transfer.Annotations;
+import io.nosqlbench.engine.clients.grafana.transfer.DashboardResponse;
+import io.nosqlbench.engine.clients.grafana.transfer.GrafanaAnnotation;
+import io.nosqlbench.nb.api.SystemId;
+
+import java.nio.file.Path;
+import java.util.Comparator;
+import java.util.List;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+public class GrafanaRegionAnalyzer {
+
+    public static void main(String[] args) {
+
+        GrafanaClientConfig ccfg = new GrafanaClientConfig();
+        ccfg.setBaseUri("http://18.191.247.162:3000/");
+        GrafanaClient gclient = new GrafanaClient(ccfg);
+        Supplier<String> namer = () -> "nosqlbench-" + SystemId.getNodeId() + "-" + System.currentTimeMillis();
+        gclient.cacheApiToken(namer, "Admin", Long.MAX_VALUE, Path.of("grafana_apikey"), "admin", "admin");
+
+
+        DashboardResponse dashboardResponse = gclient.getDashboardByUid("aIIX1f6Wz");
+
+
+        Annotations annotations = gclient.findAnnotations(By.tag("appname:nosqlbench,layer:Activity"));
+        List<GrafanaAnnotation> mainActivities = annotations.stream()
+                .filter(s -> s.getTagMap().getOrDefault("alias", "").contains("main"))
+                .sorted(Comparator.comparing(t -> t.getTime()))
+                .collect(Collectors.toList());
+        System.out.println("end");
+        GrafanaAnnotation last = mainActivities.get(mainActivities.size() - 1);
+        long start = last.getTime();
+        long end = last.getTimeEnd();
+
+    }
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java
new file mode 100644
index 000000000..10c9bfe25
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Dashboard.java
@@ -0,0 +1,28 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Dashboard {
+    Map<String, Object> annotations = new HashMap<>();
+    String description;
+    boolean editable;
+    long graphToolTip;
+    long id;
+    long iteration;
+    List<Object> links;
+    List<PanelDef> panels;
+    String refresh;
+    long schemaVersion;
+    String style;
+    List<Object> tags;
+    Map<String, Object> templating;
+    Map<String, Object> time;
+    Map<String, List<String>> timepicker;
+    String timezone;
+    String title;
+    String uid;
+    long version;
+
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java
new file mode 100644
index 000000000..242f62ba4
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardAnnotations.java
@@ -0,0 +1,8 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.List;
+import java.util.Map;
+
+public class DashboardAnnotations {
+    List<Map<String, Object>> list;
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java
new file mode 100644
index 000000000..06f0132b9
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/DashboardResponse.java
@@ -0,0 +1,9 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DashboardResponse {
+    Map<String, String> meta = new HashMap<>();
+    Dashboard dashboard;
+}
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java
index 058abdca9..f03a2d279 100644
--- a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/GrafanaAnnotation.java
@@ -171,4 +171,13 @@ public class GrafanaAnnotation {
                 ", data=" + data +
                 '}';
     }
+
+    public LinkedHashMap<String, String> getTagMap() {
+        LinkedHashMap<String, String> map = new LinkedHashMap<>();
+        for (String tag : this.getTags()) {
+            String[] split = tag.split(":", 2);
+            map.put(split[0], (split.length == 2 ? split[1] : null));
+        }
+        return map;
+    }
 }
diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java
new file mode 100644
index 000000000..fcefc648c
--- /dev/null
+++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/PanelDef.java
@@ -0,0 +1,24 @@
+package io.nosqlbench.engine.clients.grafana.transfer;
+
+import java.util.List;
+import java.util.Map;
+
+public class PanelDef {
+    boolean collapsed;
+    Map<String, String> gridPos;
+    long id;
+    List<PanelDef> panels;
+    String description;
+    Map<String, Object> fieldConfig;
+    Map<String, String> options;
+    String pluginVersion;
+    List<Map<String, String>> targets;
+    String title;
+    String type;
+    String datasource;
+
+
+    public String toString() {
+        return id + ":'" + title + "'";
+    }
+}
diff --git a/engine-core/pom.xml b/engine-core/pom.xml
index 51e02fed3..cad9a9018 100644
--- a/engine-core/pom.xml
+++ b/engine-core/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -28,13 +28,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>drivers-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
@@ -85,7 +85,7 @@
       <dependency>
         <groupId>io.nosqlbench</groupId>
         <artifactId>engine-clients</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <scope>compile</scope>
       </dependency>
 
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java
index dbe55a2d1..053c0006d 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/annotation/Annotators.java
@@ -96,7 +96,14 @@ public class Annotators {
     }
 
     public static synchronized void recordAnnotation(Annotation annotation) {
-        getAnnotators().forEach(a -> a.recordAnnotation(annotation));
+        for (Annotator annotator : getAnnotators()) {
+            try {
+                logger.trace("calling annotator " + annotator.getName());
+                annotator.recordAnnotation(annotation);
+            } catch (Exception e) {
+                logger.error(e);
+            }
+        }
     }
 
 //    public static synchronized void recordAnnotation(
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java
index b344f97d1..837db9032 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityExecutor.java
@@ -18,6 +18,9 @@ import io.nosqlbench.engine.api.activityapi.core.*;
 import io.nosqlbench.engine.api.activityimpl.ActivityDef;
 import io.nosqlbench.engine.api.activityimpl.ParameterMap;
 import io.nosqlbench.engine.api.activityimpl.input.ProgressCapable;
+import io.nosqlbench.engine.core.annotation.Annotators;
+import io.nosqlbench.nb.api.annotations.Layer;
+import io.nosqlbench.nb.api.annotations.Annotation;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
@@ -52,24 +55,33 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
     private final List<Motor<?>> motors = new ArrayList<>();
     private final Activity activity;
     private final ActivityDef activityDef;
-    private ExecutorService executorService;
+    private final ExecutorService executorService;
     private RuntimeException stoppingException;
 
     private final static int waitTime = 10000;
+    private String sessionId = "";
+    private long startedAt = 0L;
+    private long stoppedAt = 0L;
+    private String[] annotatedCommand;
 
 //    private RunState intendedState = RunState.Uninitialized;
 
-    public ActivityExecutor(Activity activity) {
+    public ActivityExecutor(Activity activity, String sessionId) {
         this.activity = activity;
         this.activityDef = activity.getActivityDef();
         executorService = new ThreadPoolExecutor(
-            0, Integer.MAX_VALUE,
-            0L, TimeUnit.SECONDS,
-            new SynchronousQueue<>(),
-            new IndexedThreadFactory(activity.getAlias(), new ActivityExceptionHandler(this))
+                0, Integer.MAX_VALUE,
+                0L, TimeUnit.SECONDS,
+                new SynchronousQueue<>(),
+                new IndexedThreadFactory(activity.getAlias(), new ActivityExceptionHandler(this))
         );
         activity.getActivityDef().getParams().addListener(this);
         activity.setActivityController(this);
+        this.sessionId = sessionId;
+    }
+
+    public void setSessionId(String sessionId) {
+        this.sessionId = sessionId;
     }
 
 
@@ -86,9 +98,22 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
      */
     public synchronized void startActivity() {
         logger.info("starting activity " + activity.getAlias() + " for cycles " + activity.getCycleSummary());
+        this.annotatedCommand = annotatedCommand;
+        Annotators.recordAnnotation(Annotation.newBuilder()
+                .session(sessionId)
+                .now()
+                .layer(Layer.Activity)
+                .label("alias", getActivityDef().getAlias())
+                .label("driver", getActivityDef().getActivityType())
+                .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none"))
+                .detail("params", getActivityDef().toString())
+                .build()
+        );
+
         activitylogger.debug("START/before alias=(" + activity.getAlias() + ")");
         try {
             activity.setRunState(RunState.Starting);
+            this.startedAt = System.currentTimeMillis();
             activity.initActivity();
             //activity.onActivityDefUpdate(activityDef);
         } catch (Exception e) {
@@ -117,6 +142,17 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
         activity.setRunState(RunState.Stopped);
         logger.info("stopped: " + this.getActivityDef().getAlias() + " with " + motors.size() + " slots");
         activitylogger.debug("STOP/after alias=(" + activity.getAlias() + ")");
+        Annotators.recordAnnotation(Annotation.newBuilder()
+                .session(sessionId)
+                .interval(this.startedAt, this.stoppedAt)
+                .layer(Layer.Activity)
+                .label("alias", getActivityDef().getAlias())
+                .label("driver", getActivityDef().getActivityType())
+                .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none"))
+                .detail("params", getActivityDef().toString())
+                .build()
+        );
+
 
     }
 
@@ -179,11 +215,10 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
         }
     }
 
-    public boolean requestStopExecutor(int secondsToWait) {
+    public boolean finishAndShutdownExecutor(int secondsToWait) {
         activitylogger.debug("REQUEST STOP/before alias=(" + activity.getAlias() + ")");
 
-
-        logger.info("Stopping executor for " + activity.getAlias() + " when work completes.");
+        logger.debug("Stopping executor for " + activity.getAlias() + " when work completes.");
 
         executorService.shutdown();
         boolean wasStopped = false;
@@ -201,7 +236,9 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
             logger.trace("closing auto-closeables");
             activity.closeAutoCloseables();
             activity.setRunState(RunState.Stopped);
+            this.stoppedAt = System.currentTimeMillis();
         }
+
         if (stoppingException != null) {
             logger.trace("an exception caused the activity to stop:" + stoppingException.getMessage());
             throw stoppingException;
@@ -220,7 +257,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
     public synchronized void handleParameterMapUpdate(ParameterMap parameterMap) {
 
         if (activity instanceof ActivityDefObserver) {
-            ((ActivityDefObserver) activity).onActivityDefUpdate(activityDef);
+            activity.onActivityDefUpdate(activityDef);
         }
 
         // An activity must be initialized before the motors and other components are
@@ -231,10 +268,10 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
                 adjustToActivityDef(activity.getActivityDef());
             }
             motors.stream()
-                .filter(m -> (m instanceof ActivityDefObserver))
+                    .filter(m -> (m instanceof ActivityDefObserver))
 //                    .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Uninitialized)
 //                    .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Starting)
-                .forEach(m -> ((ActivityDefObserver) m).onActivityDefUpdate(activityDef));
+                    .forEach(m -> ((ActivityDefObserver) m).onActivityDefUpdate(activityDef));
         }
     }
 
@@ -242,8 +279,27 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
         return activityDef;
     }
 
+    /**
+     * This is the canonical way to wait for an activity to finish. It ties together
+     * any way that an activity can finish under one blocking call.
+     * This should be awaited asynchronously from the control layer in separate threads.
+     *
+     * TODO: move activity finisher threaad to this class and remove separate implementation
+     */
     public boolean awaitCompletion(int waitTime) {
-        return requestStopExecutor(waitTime);
+        boolean finished = finishAndShutdownExecutor(waitTime);
+        Annotators.recordAnnotation(Annotation.newBuilder()
+                .session(sessionId)
+                .interval(startedAt, this.stoppedAt)
+                .layer(Layer.Activity)
+                .label("alias", getActivityDef().getAlias())
+                .label("driver", getActivityDef().getActivityType())
+                .label("workload", getActivityDef().getParams().getOptionalString("workload").orElse("none"))
+                .detail("params", getActivityDef().toString())
+                .build()
+        );
+
+        return finished;
     }
 
     public boolean awaitFinish(int timeout) {
@@ -267,8 +323,8 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
 
     private String getSlotStatus() {
         return motors.stream()
-            .map(m -> m.getSlotStateTracker().getSlotState().getCode())
-            .collect(Collectors.joining(",", "[", "]"));
+                .map(m -> m.getSlotStateTracker().getSlotState().getCode())
+                .collect(Collectors.joining(",", "[", "]"));
     }
 
     /**
@@ -311,18 +367,18 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
             case Running:
             case Starting:
                 motors.stream()
-                    .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Running)
-                    .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Finished)
-                    .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Starting)
-                    .forEach(m -> {
-                        m.getSlotStateTracker().enterState(RunState.Starting);
-                        executorService.execute(m);
-                    });
+                        .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Running)
+                        .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Finished)
+                        .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Starting)
+                        .forEach(m -> {
+                            m.getSlotStateTracker().enterState(RunState.Starting);
+                            executorService.execute(m);
+                        });
                 break;
             case Stopped:
                 motors.stream()
-                    .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Stopped)
-                    .forEach(Motor::requestStop);
+                        .filter(m -> m.getSlotStateTracker().getSlotState() != RunState.Stopped)
+                        .forEach(Motor::requestStop);
                 break;
             case Finished:
             case Stopping:
@@ -403,7 +459,7 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
                 awaited = awaitMotorState(motor, waitTime, pollTime, awaitingState);
                 if (!awaited) {
                     logger.trace("failed awaiting motor " + motor.getSlotId() + " for state in " +
-                        Arrays.asList(awaitingState));
+                            Arrays.asList(awaitingState));
                     break;
                 }
             }
@@ -447,8 +503,8 @@ public class ActivityExecutor implements ActivityController, ParameterMap.Listen
         boolean awaitedRequiredState = awaitMotorState(m, waitTime, pollTime, awaitingState);
         if (!awaitedRequiredState) {
             String error = "Unable to await " + activityDef.getAlias() +
-                "/Motor[" + m.getSlotId() + "]: from state " + startingState + " to " + m.getSlotStateTracker().getSlotState()
-                + " after waiting for " + waitTime + "ms";
+                    "/Motor[" + m.getSlotId() + "]: from state " + startingState + " to " + m.getSlotStateTracker().getSlotState()
+                    + " after waiting for " + waitTime + "ms";
             RuntimeException e = new RuntimeException(error);
             logger.error(error);
             throw e;
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java
new file mode 100644
index 000000000..233fb30c5
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ActivityFinisher.java
@@ -0,0 +1,23 @@
+package io.nosqlbench.engine.core.lifecycle;
+
+public class ActivityFinisher extends Thread {
+
+    private final ActivityExecutor executor;
+    private final int timeout;
+    private boolean result;
+
+    public ActivityFinisher(ActivityExecutor executor, int timeout) {
+        super(executor.getActivityDef().getAlias() + "_finisher");
+        this.executor = executor;
+        this.timeout = timeout;
+    }
+
+    @Override
+    public void run() {
+        result = executor.awaitCompletion(timeout);
+    }
+
+    public boolean getResult() {
+        return result;
+    }
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java
index 26f0a9540..4be729481 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioController.java
@@ -20,6 +20,9 @@ import io.nosqlbench.engine.api.activityimpl.ActivityDef;
 import io.nosqlbench.engine.api.activityimpl.ParameterMap;
 import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
 import io.nosqlbench.engine.api.metrics.ActivityMetrics;
+import io.nosqlbench.engine.core.annotation.Annotators;
+import io.nosqlbench.nb.api.annotations.Layer;
+import io.nosqlbench.nb.api.annotations.Annotation;
 import io.nosqlbench.nb.api.errors.BasicError;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
@@ -38,6 +41,11 @@ public class ScenarioController {
     private static final Logger scenariologger = LogManager.getLogger("SCENARIO");
 
     private final Map<String, ActivityExecutor> activityExecutors = new ConcurrentHashMap<>();
+    private final String sessionId;
+
+    public ScenarioController(String sessionId) {
+        this.sessionId = sessionId;
+    }
 
     /**
      * Start an activity, given the activity definition for it. The activity will be known in the scenario
@@ -46,9 +54,20 @@ public class ScenarioController {
      * @param activityDef string in alias=value1;driver=value2;... format
      */
     public synchronized void start(ActivityDef activityDef) {
+        Annotators.recordAnnotation(Annotation.newBuilder()
+                .session(sessionId)
+                .now()
+                .layer(Layer.Activity)
+                .label("alias", activityDef.getAlias())
+                .detail("command", "start")
+                .detail("params", activityDef.toString())
+                .build());
+
+
         ActivityExecutor activityExecutor = getActivityExecutor(activityDef, true);
         scenariologger.debug("START " + activityDef.getAlias());
         activityExecutor.startActivity();
+
     }
 
     /**
@@ -84,6 +103,15 @@ public class ScenarioController {
      * @param activityDef A definition for an activity to run
      */
     public synchronized void run(int timeout, ActivityDef activityDef) {
+        Annotators.recordAnnotation(Annotation.newBuilder()
+                .session(sessionId)
+                .now()
+                .layer(Layer.Activity)
+                .label("alias", activityDef.getAlias())
+                .detail("command", "run")
+                .detail("params", activityDef.toString())
+                .build());
+
         ActivityExecutor activityExecutor = getActivityExecutor(activityDef, true);
         scenariologger.debug("RUN alias=" + activityDef.getAlias());
         scenariologger.debug(" (RUN/START) alias=" + activityDef.getAlias());
@@ -135,6 +163,15 @@ public class ScenarioController {
      * @param activityDef An activity def, including at least the alias parameter.
      */
     public synchronized void stop(ActivityDef activityDef) {
+        Annotators.recordAnnotation(Annotation.newBuilder()
+                .session(sessionId)
+                .now()
+                .layer(Layer.Activity)
+                .label("alias", activityDef.getAlias())
+                .detail("command", "stop")
+                .detail("params", activityDef.toString())
+                .build());
+
         ActivityExecutor activityExecutor = getActivityExecutor(activityDef, false);
         if (activityExecutor == null) {
             throw new RuntimeException("could not stop missing activity:" + activityDef);
@@ -179,7 +216,7 @@ public class ScenarioController {
         }
         ActivityExecutor activityExecutor = getActivityExecutor(alias);
         ParameterMap params = activityExecutor.getActivityDef().getParams();
-        scenariologger.debug("SET ("+alias+"/"+param + ")=(" + value + ")");
+        scenariologger.debug("SET (" + alias + "/" + param + ")=(" + value + ")");
         params.set(param, value);
     }
 
@@ -242,30 +279,31 @@ public class ScenarioController {
 
             if (executor == null && createIfMissing) {
 
-                String activityTypeName = activityDef.getParams().getOptionalString("driver","type").orElse(null);
+                String activityTypeName = activityDef.getParams().getOptionalString("driver", "type").orElse(null);
                 List<String> knownTypes = ActivityType.FINDER.getAll().stream().map(ActivityType::getName).collect(Collectors.toList());
 
                 // Infer the type from either alias or yaml if possible (exactly one matches)
-                if (activityTypeName==null) {
+                if (activityTypeName == null) {
                     List<String> matching = knownTypes.stream().filter(
                             n ->
                                     activityDef.getParams().getOptionalString("alias").orElse("").contains(n)
                                             || activityDef.getParams().getOptionalString("yaml", "workload").orElse("").contains(n)
                     ).collect(Collectors.toList());
-                    if (matching.size()==1) {
-                        activityTypeName=matching.get(0);
+                    if (matching.size() == 1) {
+                        activityTypeName = matching.get(0);
                         logger.info("param 'type' was inferred as '" + activityTypeName + "' since it was seen in yaml or alias parameter.");
                     }
                 }
 
-                if (activityTypeName==null) {
+                if (activityTypeName == null) {
                     String errmsg = "You must provide a driver=<driver> parameter. Valid examples are:\n" +
-                            knownTypes.stream().map(t -> " driver="+t+"\n").collect(Collectors.joining());
+                            knownTypes.stream().map(t -> " driver=" + t + "\n").collect(Collectors.joining());
                     throw new BasicError(errmsg);
                 }
 
                 ActivityType<?> activityType = ActivityType.FINDER.getOrThrow(activityTypeName);
-                executor = new ActivityExecutor(activityType.getAssembledActivity(activityDef, getActivityMap()));
+                executor = new ActivityExecutor(activityType.getAssembledActivity(activityDef, getActivityMap()),
+                        this.sessionId);
                 activityExecutors.put(activityDef.getAlias(), executor);
             }
             return executor;
@@ -345,15 +383,33 @@ public class ScenarioController {
      * @return true, if all activities completed before the timer expired, false otherwise
      */
     public boolean awaitCompletion(int waitTimeMillis) {
-        boolean completed = false;
-        for (ActivityExecutor executor : activityExecutors.values()) {
-            if (!executor.awaitCompletion(waitTimeMillis)) {
-                logger.debug("awaiting completion signaled FALSE");
-                return false;
+        boolean completed = true;
+        long waitstart = System.currentTimeMillis();
+        long remaining = waitTimeMillis;
+
+        List<ActivityFinisher> finishers = new ArrayList<>();
+        for (ActivityExecutor ae : activityExecutors.values()) {
+            ActivityFinisher finisher = new ActivityFinisher(ae, (int) remaining);
+            finishers.add(finisher);
+            finisher.start();
+        }
+
+        for (ActivityFinisher finisher : finishers) {
+            try {
+                finisher.join(waitTimeMillis);
+            } catch (InterruptedException ignored) {
             }
         }
-        logger.debug("All activities awaiting completion signaled TRUE");
-        return true;
+
+        for (ActivityFinisher finisher : finishers) {
+            if (!finisher.getResult()) {
+                logger.debug("finisher for " + finisher.getName() + " did not signal TRUE");
+                completed = false;
+            }
+        }
+
+        return completed;
+
     }
 
     private ActivityDef aliasToDef(String alias) {
@@ -364,9 +420,10 @@ public class ScenarioController {
         }
     }
 
-    public boolean await(Map<String,String> activityDefMap) {
+    public boolean await(Map<String, String> activityDefMap) {
         return this.awaitActivity(activityDefMap);
     }
+
     public boolean awaitActivity(Map<String, String> activityDefMap) {
         ActivityDef ad = new ActivityDef(new ParameterMap(activityDefMap));
         return awaitActivity(ad);
@@ -375,6 +432,7 @@ public class ScenarioController {
     public boolean await(String alias) {
         return this.awaitActivity(alias);
     }
+
     public boolean awaitActivity(String alias) {
         ActivityDef toAwait = aliasToDef(alias);
         return awaitActivity(toAwait);
@@ -383,6 +441,7 @@ public class ScenarioController {
     public boolean await(ActivityDef activityDef) {
         return this.awaitActivity(activityDef);
     }
+
     public boolean awaitActivity(ActivityDef activityDef) {
         ActivityExecutor activityExecutor = getActivityExecutor(activityDef, false);
         if (activityExecutor == null) {
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java
index 57f6c43d2..56bf419ac 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenarioResult.java
@@ -31,23 +31,33 @@ import java.util.concurrent.TimeUnit;
 public class ScenarioResult {
 
     private final static Logger logger = LogManager.getLogger(ScenarioResult.class);
+    private final long startedAt;
+    private final long endedAt;
 
     private Exception exception;
     private final String iolog;
 
-    public ScenarioResult(String iolog) {
+    public ScenarioResult(String iolog, long startedAt, long endedAt) {
         this.iolog = iolog;
+        this.startedAt = startedAt;
+        this.endedAt = endedAt;
     }
 
-    public ScenarioResult(Exception e) {
+    public ScenarioResult(Exception e, long startedAt, long endedAt) {
         this.iolog = e.getMessage();
+        this.startedAt = startedAt;
+        this.endedAt = endedAt;
         this.exception = e;
     }
 
-    public void reportToLog() {
+    public void reportElapsedMillis() {
+        logger.info("-- SCENARIO TOOK " + getElapsedMillis() + "ms --");
+    }
 
-        logger.info("-- BEGIN METRICS DETAIL --");
+    public void reportToLog() {
+        logger.debug("-- BEGIN METRICS DETAIL --");
         Log4JMetricsReporter reporter = Log4JMetricsReporter.forRegistry(ActivityMetrics.getMetricRegistry())
+                .withLoggingLevel(Log4JMetricsReporter.LoggingLevel.DEBUG)
                 .convertDurationsTo(TimeUnit.MICROSECONDS)
                 .convertRatesTo(TimeUnit.SECONDS)
                 .filter(MetricFilter.ALL)
@@ -87,4 +97,7 @@ public class ScenarioResult {
         return this.iolog;
     }
 
+    public long getElapsedMillis() {
+        return endedAt - startedAt;
+    }
 }
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java
index daa937ceb..85fa585dd 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ScenariosResults.java
@@ -66,8 +66,15 @@ public class ScenariosResults {
             logger.info("results for scenario: " + scenario);
 
             if (oresult != null) {
-                oresult.reportToLog();
-                oresult.reportToConsole();
+                oresult.reportElapsedMillis();
+                if (oresult.getElapsedMillis() >= 60_000) {
+                    oresult.reportToConsole();
+                    oresult.reportToLog();
+                } else {
+                    logger.info("Metrics suppressed because scenario was less than 1 minute long.");
+                    logger.info("Metrics data is not reliable for short sampling periods.");
+                    logger.info("To get metrics on console, run a longer scenario.");
+                }
             } else {
                 logger.error(scenario.getScenarioName() + ": incomplete (missing result)");
             }
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java
index 882325897..0338ba8b1 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/logging/LoggerConfig.java
@@ -13,12 +13,16 @@ import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.config.builder.api.*;
 import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
 
+import java.nio.file.attribute.*;
+
+
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.attribute.PosixFilePermissions;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -202,6 +206,16 @@ public class LoggerConfig extends ConfigurationFactory {
     }
 
     public void activate() {
+        if (!Files.exists(loggerDir)) {
+            try {
+                FileAttribute<Set<PosixFilePermission>> attrs = PosixFilePermissions.asFileAttribute(
+                        PosixFilePermissions.fromString("rwxrwx---")
+                );
+                Path directory = Files.createDirectory(loggerDir, attrs);
+            } catch (Exception e) {
+                throw new RuntimeException("Error while creating directory " + loggerDir.toString() + ": " + e.getMessage(), e);
+            }
+        }
         ConfigurationFactory.setConfigurationFactory(this);
     }
 
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java
index 4926b64c9..9bcad6c60 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/metrics/LoggingAnnotator.java
@@ -28,7 +28,8 @@ public class LoggingAnnotator implements Annotator, ConfigAware {
 
     @Override
     public void recordAnnotation(Annotation annotation) {
-        annotationsLog.log(level, annotation.toString());
+        String inlineForm = annotation.asJson();
+        annotationsLog.log(level, inlineForm);
     }
 
     /**
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
index a02afe9d6..4e5e84976 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/Scenario.java
@@ -25,7 +25,7 @@ import io.nosqlbench.engine.core.lifecycle.ScenarioController;
 import io.nosqlbench.engine.core.lifecycle.ScenarioResult;
 import io.nosqlbench.engine.core.annotation.Annotators;
 import io.nosqlbench.engine.core.metrics.PolyglotMetricRegistryBindings;
-import io.nosqlbench.nb.api.Layer;
+import io.nosqlbench.nb.api.annotations.Layer;
 import io.nosqlbench.nb.api.annotations.Annotation;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -56,14 +56,19 @@ import java.util.stream.Collectors;
 
 public class Scenario implements Callable<ScenarioResult> {
 
+    private final String commandLine;
     private Logger logger = LogManager.getLogger("SCENARIO");
 
     private State state = State.Scheduled;
+    private volatile ScenarioShutdownHook scenarioShutdownHook;
+    private Exception error;
+
 
     public enum State {
         Scheduled,
         Running,
         Errored,
+        Interrupted,
         Finished
     }
 
@@ -96,7 +101,8 @@ public class Scenario implements Callable<ScenarioResult> {
             String progressInterval,
             boolean wantsGraaljsCompatMode,
             boolean wantsStackTraces,
-            boolean wantsCompiledScript) {
+            boolean wantsCompiledScript,
+            String commandLine) {
         this.scenarioName = scenarioName;
         this.scriptfile = scriptfile;
         this.engine = engine;
@@ -104,6 +110,7 @@ public class Scenario implements Callable<ScenarioResult> {
         this.wantsGraaljsCompatMode = wantsGraaljsCompatMode;
         this.wantsStackTraces = wantsStackTraces;
         this.wantsCompiledScript = wantsCompiledScript;
+        this.commandLine = commandLine;
     }
 
     public Scenario setLogger(Logger logger) {
@@ -118,6 +125,7 @@ public class Scenario implements Callable<ScenarioResult> {
     public Scenario(String name, Engine engine) {
         this.scenarioName = name;
         this.engine = engine;
+        this.commandLine = "";
     }
 
     public Scenario addScriptText(String scriptText) {
@@ -180,7 +188,7 @@ public class Scenario implements Callable<ScenarioResult> {
                 break;
         }
 
-        scenarioController = new ScenarioController();
+        scenarioController = new ScenarioController(this.scenarioName);
         if (!progressInterval.equals("disabled")) {
             activityProgressIndicator = new ActivityProgressIndicator(scenarioController, progressInterval);
         }
@@ -229,6 +237,9 @@ public class Scenario implements Callable<ScenarioResult> {
     }
 
     public void run() {
+        scenarioShutdownHook = new ScenarioShutdownHook(this);
+        Runtime.getRuntime().addShutdownHook(scenarioShutdownHook);
+
         state = State.Running;
 
         startedAtMillis = System.currentTimeMillis();
@@ -237,7 +248,6 @@ public class Scenario implements Callable<ScenarioResult> {
                         .session(this.scenarioName)
                         .now()
                         .layer(Layer.Scenario)
-                        .label("scenario", getScenarioName())
                         .detail("engine", this.engine.toString())
                         .build()
         );
@@ -285,14 +295,12 @@ public class Scenario implements Callable<ScenarioResult> {
                 this.state = State.Errored;
                 logger.warn("Error in scenario, shutting down.");
                 this.scenarioController.forceStopScenario(5000, false);
+                this.error = e;
                 throw new RuntimeException(e);
             } finally {
-                if (this.state==State.Running) {
-                    this.state = State.Finished;
-                }
                 System.out.flush();
                 System.err.flush();
-                endedAtMillis=System.currentTimeMillis();
+                endedAtMillis = System.currentTimeMillis();
             }
         }
         int awaitCompletionTime = 86400 * 365 * 1000;
@@ -300,8 +308,38 @@ public class Scenario implements Callable<ScenarioResult> {
         scenarioController.awaitCompletion(awaitCompletionTime);
         //TODO: Ensure control flow covers controller shutdown in event of internal error.
 
-        logger.debug("scenario completed without errors");
-        endedAtMillis=System.currentTimeMillis(); //TODO: Make only one endedAtMillis assignment
+        Runtime.getRuntime().removeShutdownHook(scenarioShutdownHook);
+        scenarioShutdownHook = null;
+        finish();
+    }
+
+    public void finish() {
+        logger.debug("finishing scenario");
+        endedAtMillis = System.currentTimeMillis(); //TODO: Make only one endedAtMillis assignment
+        if (this.state == State.Running) {
+            this.state = State.Finished;
+        }
+
+        if (scenarioShutdownHook != null) {
+            // If this method was called while the shutdown hook is defined, then it means
+            // that the scenario was ended before the hook was uninstalled normally.
+            this.state = State.Interrupted;
+            logger.warn("Scenario was interrupted by process exit, shutting down");
+        }
+
+        logger.info("scenario state: " + this.state);
+
+        // We report the scenario state via annotation even for short runs
+        Annotation annotation = Annotation.newBuilder()
+                .session(this.scenarioName)
+                .interval(this.startedAtMillis, endedAtMillis)
+                .layer(Layer.Scenario)
+                .label("state", this.state.toString())
+                .detail("command_line", this.commandLine)
+                .build();
+
+        Annotators.recordAnnotation(annotation);
+
     }
 
     public long getStartedAtMillis() {
@@ -315,7 +353,7 @@ public class Scenario implements Callable<ScenarioResult> {
     public ScenarioResult call() {
         run();
         String iolog = scriptEnv.getTimedLog();
-        return new ScenarioResult(iolog);
+        return new ScenarioResult(iolog, this.startedAtMillis, this.endedAtMillis);
     }
 
     @Override
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java
new file mode 100644
index 000000000..a8bb700aa
--- /dev/null
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenarioShutdownHook.java
@@ -0,0 +1,20 @@
+package io.nosqlbench.engine.core.script;
+
+import org.apache.logging.log4j.Logger;
+
+public class ScenarioShutdownHook extends Thread {
+
+    private final Scenario scenario;
+    private final Logger logger;
+
+    public ScenarioShutdownHook(Scenario scenario) {
+        this.scenario = scenario;
+        logger = scenario.getLogger();
+    }
+
+    @Override
+    public void run() {
+        scenario.finish();
+    }
+
+}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java
index 411c3aea3..a4914ffa5 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/script/ScenariosExecutor.java
@@ -149,7 +149,8 @@ public class ScenariosExecutor {
                 try {
                     oResult = Optional.of(resultFuture.get());
                 } catch (Exception e) {
-                    oResult = Optional.of(new ScenarioResult(e));
+                    long now = System.currentTimeMillis();
+                    oResult = Optional.of(new ScenarioResult(e, now, now));
                 }
             }
 
@@ -182,27 +183,28 @@ public class ScenariosExecutor {
         if (resultFuture1 == null) {
             throw new BasicError("Unknown scenario name:" + scenarioName);
         }
+        long now = System.currentTimeMillis();
         if (resultFuture1.isDone()) {
             try {
                 return Optional.ofNullable(resultFuture1.get());
             } catch (Exception e) {
-                return Optional.of(new ScenarioResult(e));
+                return Optional.of(new ScenarioResult(e, now, now));
             }
         } else if (resultFuture1.isCancelled()) {
-            return Optional.of(new ScenarioResult(new Exception("result was cancelled.")));
+            return Optional.of(new ScenarioResult(new Exception("result was cancelled."), now, now));
         }
         return Optional.empty();
     }
 
     public synchronized void stopScenario(String scenarioName) {
-        this.stopScenario(scenarioName,false);
+        this.stopScenario(scenarioName, false);
     }
 
     public synchronized void stopScenario(String scenarioName, boolean rethrow) {
         Optional<Scenario> pendingScenario = getPendingScenario(scenarioName);
         if (pendingScenario.isPresent()) {
             ScenarioController controller = pendingScenario.get().getScenarioController();
-            if (controller!=null) {
+            if (controller != null) {
                 controller.forceStopScenario(0, rethrow);
             }
         } else {
diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java
index a0669beb4..d91c12497 100644
--- a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java
+++ b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java
@@ -52,7 +52,7 @@ public class ActivityExecutorTest {
         a.setInputDispenserDelegate(idisp);
         a.setMotorDispenserDelegate(mdisp);
 
-        ActivityExecutor ae = new ActivityExecutor(a);
+        ActivityExecutor ae = new ActivityExecutor(a, "test-restart");
         ad.setThreads(1);
         ae.startActivity();
         ae.stopActivity();
@@ -76,7 +76,7 @@ public class ActivityExecutorTest {
         a.setInputDispenserDelegate(idisp);
         a.setMotorDispenserDelegate(mdisp);
 
-        ActivityExecutor ae = new ActivityExecutor(a);
+        ActivityExecutor ae = new ActivityExecutor(a, "test-delayed-start");
         ad.setThreads(1);
         ae.startActivity();
         ae.awaitCompletion(15000);
@@ -101,7 +101,7 @@ public class ActivityExecutorTest {
         a.setInputDispenserDelegate(idisp);
         a.setMotorDispenserDelegate(mdisp);
 
-        ActivityExecutor ae = new ActivityExecutor(a);
+        ActivityExecutor ae = new ActivityExecutor(a, "test-new-executor");
         ad.setThreads(5);
         ae.startActivity();
 
diff --git a/engine-docker/pom.xml b/engine-docker/pom.xml
index ebbeb5fa4..028e5a0da 100644
--- a/engine-docker/pom.xml
+++ b/engine-docker/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -65,7 +65,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
     </dependencies>
 
diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
index b18a8855b..dd1bd4e46 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerHelper.java
@@ -45,7 +45,7 @@ public class DockerHelper {
     }
 
     public String startDocker(String IMG, String tag, String name, List<Integer> ports, List<String> volumeDescList, List<String> envList, List<String> cmdList, String reload, List<String> linkNames) {
-        logger.debug("Starting docker with img=" + IMG + ", tag=" + tag + ", name=" + name + ", " +
+        logger.info("Starting docker with img=" + IMG + ", tag=" + tag + ", name=" + name + ", " +
                 "ports=" + ports + ", volumes=" + volumeDescList + ", env=" + envList + ", cmds=" + cmdList + ", reload=" + reload);
 
         boolean existingContainer = removeExitedContainers(name);
@@ -155,7 +155,7 @@ public class DockerHelper {
             logger.error("Unable to contact docker, make sure docker is up and try again.");
             logger.error("If docker is installed make sure this user has access to the docker group.");
             logger.error("$ sudo gpasswd -a ${USER} docker && newgrp docker");
-            System.exit(1);
+            throw e;
         }
 
         return false;
@@ -178,7 +178,7 @@ public class DockerHelper {
             logger.error("Unable to contact docker, make sure docker is up and try again.");
             logger.error("If docker is installed make sure this user has access to the docker group.");
             logger.error("$ sudo gpasswd -a ${USER} docker && newgrp docker");
-            System.exit(1);
+            throw e;
         }
         return false;
     }
@@ -193,7 +193,7 @@ public class DockerHelper {
         } catch (Exception e) {
             e.printStackTrace();
             logger.error("Unable to contact docker, make sure docker is up and try again.");
-            System.exit(1);
+            throw e;
         }
 
         if (runningContainers.size() >= 1) {
@@ -204,9 +204,10 @@ public class DockerHelper {
 
             if (reload != null) {
                 try {
-                    post(reload, null, false, "reloading config");
+                    post(reload, null, false, "reload config");
                 } catch (Exception e) {
                     logger.error(String.format("Unexpected config/state for docker container %s, consider removing the container", name));
+                    throw e;
                 }
             }
 
@@ -233,6 +234,7 @@ public class DockerHelper {
         } catch (InterruptedException e) {
             logger.error("Error getting docker log and detect start for containerId: " + containerId);
             e.printStackTrace();
+            throw new RuntimeException(e);
         }
 
     }
diff --git a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
index 3cf593765..7208b6985 100644
--- a/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
+++ b/engine-docker/src/main/java/io/nosqlbench/engine/docker/DockerMetricsManager.java
@@ -29,6 +29,7 @@ import static io.nosqlbench.engine.docker.RestHelper.post;
 public class DockerMetricsManager {
 
     public static final String GRAFANA_TAG = "grafana_tag";
+    public static final String PROM_TAG = "prom_tag";
 
     private final DockerHelper dh;
 
@@ -44,7 +45,7 @@ public class DockerMetricsManager {
 
         String ip = startGraphite();
 
-        startPrometheus(ip);
+        startPrometheus(ip, options.get(PROM_TAG));
 
         startGrafana(ip, options.get(GRAFANA_TAG));
 
@@ -71,9 +72,9 @@ public class DockerMetricsManager {
         );
         List<String> envList = Arrays.asList(
                 "GF_SECURITY_ADMIN_PASSWORD=admin",
-                "GF_AUTH_ANONYMOUS_ENABLED=\"true\"",
-                "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL=https://assethub.datastax.com:3001",
-                "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME=\"Upload to DataStax\""
+                "GF_AUTH_ANONYMOUS_ENABLED=\"true\""
+//                , "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL=https://assethub.datastax.com:3001",
+//                "GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME=\"Upload to DataStax\""
         );
 
         String reload = null;
@@ -93,12 +94,10 @@ public class DockerMetricsManager {
         }
     }
 
-    private void startPrometheus(String ip) {
+    private void startPrometheus(String ip, String tag) {
 
         logger.info("preparing to start docker metrics");
         String PROMETHEUS_IMG = "prom/prometheus";
-        String tag = "latest";
-//        String tag = "v2.20.1";
         String name = "prom";
         List<Integer> port = Arrays.asList(9090);
 
@@ -228,7 +227,7 @@ public class DockerMetricsManager {
             logger.error("failed to set permissions on prom backup " +
                     "directory " + userHome + "/.nosqlbench/prometheus)");
             e.printStackTrace();
-            System.exit(1);
+            throw new RuntimeException(e);
         }
 
         try (PrintWriter out = new PrintWriter(
@@ -238,11 +237,11 @@ public class DockerMetricsManager {
         } catch (FileNotFoundException e) {
             e.printStackTrace();
             logger.error("error writing prometheus yaml file to ~/.prometheus");
-            System.exit(1);
+            throw new RuntimeException(e);
         } catch (IOException e) {
             e.printStackTrace();
             logger.error("creating file in ~/.prometheus");
-            System.exit(1);
+            throw new RuntimeException(e);
         }
     }
 
@@ -302,7 +301,7 @@ public class DockerMetricsManager {
             logger.error("failed to set permissions on grafana directory " +
                     "directory " + userHome + "/.nosqlbench/grafana)");
             e.printStackTrace();
-            System.exit(1);
+            throw new RuntimeException(e);
         }
     }
 
@@ -348,6 +347,7 @@ public class DockerMetricsManager {
                     close();
                 } catch (IOException e) {
                     e.printStackTrace();
+                    throw new RuntimeException(e);
                 }
             }
         }
diff --git a/engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json
deleted file mode 100644
index 243ebf231..000000000
--- a/engine-docker/src/main/resources/docker/dashboards/classic-nb-dashboard.json
+++ /dev/null
@@ -1,7077 +0,0 @@
-{
-  "meta": {
-    "type": "db",
-    "canSave": true,
-    "canEdit": true,
-    "canAdmin": true,
-    "canStar": true,
-    "slug": "analysis",
-    "url": "/d/FEp0TiXik/analysis",
-    "expires": "0001-01-01T00:00:00Z",
-    "created": "2019-06-11T16:21:40Z",
-    "updated": "2019-06-11T16:21:40Z",
-    "updatedBy": "Anonymous",
-    "createdBy": "Anonymous",
-    "version": 1,
-    "hasAcl": false,
-    "isFolder": false,
-    "folderId": 0,
-    "folderTitle": "General",
-    "folderUrl": "",
-    "provisioned": true
-  },
-  "dashboard": {
-    "id": null,
-    "__inputs": [
-      {
-        "description": "",
-        "label": "prometheus",
-        "name": "DS_PROMETHEUS",
-        "pluginId": "prometheus",
-        "pluginName": "Prometheus",
-        "type": "datasource"
-      }
-    ],
-    "__requires": [
-      {
-        "id": "grafana",
-        "name": "Grafana",
-        "type": "grafana",
-        "version": "5.3.2"
-      },
-      {
-        "id": "graph",
-        "name": "Graph",
-        "type": "panel",
-        "version": "5.0.0"
-      },
-      {
-        "id": "prometheus",
-        "name": "Prometheus",
-        "type": "datasource",
-        "version": "5.0.0"
-      },
-      {
-        "id": "singlestat",
-        "name": "Singlestat",
-        "type": "panel",
-        "version": "5.0.0"
-      }
-    ],
-    "annotations": {
-      "list": [
-        {
-          "builtIn": 1,
-          "datasource": "-- Grafana --",
-          "enable": true,
-          "hide": true,
-          "iconColor": "rgba(0, 211, 255, 1)",
-          "name": "Annotations & Alerts",
-          "type": "dashboard"
-        }
-      ]
-    },
-    "editable": true,
-    "gnetId": null,
-    "graphTooltip": 1,
-    "iteration": 1552332041877,
-    "links": [],
-    "panels": [
-      {
-        "collapsed": false,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 0
-        },
-        "id": 91,
-        "panels": [],
-        "title": "nosqlbench and DSE",
-        "type": "row"
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 0,
-          "y": 1
-        },
-        "id": 95,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_m1_rate\"}",
-            "format": "time_series",
-            "hide": false,
-            "intervalFactor": 1,
-            "legendFormat": "main ops",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_m1_rate\"}",
-            "format": "time_series",
-            "hide": false,
-            "intervalFactor": 1,
-            "legendFormat": "main success",
-            "refId": "C"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_m1_rate\"}",
-            "format": "time_series",
-            "hide": false,
-            "intervalFactor": 1,
-            "legendFormat": "rampup ops",
-            "refId": "B"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_m1_rate\"}",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "rampup success",
-            "refId": "D"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Ops and Successful Ops",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 6,
-          "y": 1
-        },
-        "id": 93,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "connected",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_WriteTimeoutException_count\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main write timeout",
-            "refId": "H"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_ReadTimeoutException_count\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main read timeout",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_OperationTimedOutException_count\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main op timeout",
-            "refId": "B"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_WriteTimeoutException_count\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup write timeout",
-            "refId": "C"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_ReadTimeoutException_count\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup read timeout",
-            "refId": "D"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_OperationTimedOutException_count\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup op timeout",
-            "refId": "E"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_NoHostAvailableException_count\"}",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "refId": "F"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_errorcounts_UnavailableException_count\"}",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "refId": "G"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Error Counts",
-        "tooltip": {
-          "shared": true,
-          "sort": 2,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 12,
-          "y": 1
-        },
-        "id": 97,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_min\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main min",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p50\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p50",
-            "refId": "B"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p75",
-            "refId": "D"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p95\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p95",
-            "refId": "C"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p98\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p98",
-            "refId": "E"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p99",
-            "refId": "F"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p999\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p999",
-            "refId": "G"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_min\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup min",
-            "refId": "H"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p50\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup p50",
-            "refId": "I"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup p75",
-            "refId": "J"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p95\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup p95",
-            "refId": "K"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup p99",
-            "refId": "L"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_p999\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup p999",
-            "refId": "M"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max \"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main max",
-            "refId": "N"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup max",
-            "refId": "O"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "service time distribution",
-        "tooltip": {
-          "shared": true,
-          "sort": 2,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "ns",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 18,
-          "y": 1
-        },
-        "id": 109,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main max",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_success_max\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup max",
-            "refId": "B"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "service time max",
-        "tooltip": {
-          "shared": true,
-          "sort": 2,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "ns",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 0,
-          "y": 7
-        },
-        "id": 99,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 1,
-        "points": true,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main bind p75",
-            "refId": "C"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main execute p75",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main result p75",
-            "refId": "B"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main input p75",
-            "refId": "D"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup bind p75",
-            "refId": "E"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup execute p75",
-            "refId": "F"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup result p75",
-            "refId": "G"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p75\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup input p75",
-            "refId": "H"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "p75 client overhead",
-        "tooltip": {
-          "shared": true,
-          "sort": 2,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "decimals": null,
-            "format": "ns",
-            "label": null,
-            "logBase": 10,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 6,
-          "y": 7
-        },
-        "id": 111,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 1,
-        "points": true,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main bind p99",
-            "refId": "C"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main execute p99",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main result p99",
-            "refId": "B"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main input p99",
-            "refId": "D"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_bind_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup bind p99",
-            "refId": "E"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_execute_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup execute p99",
-            "refId": "F"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_result_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup result p99",
-            "refId": "G"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_read_input_p99\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup input p99",
-            "refId": "H"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "p99 client overhead",
-        "tooltip": {
-          "shared": true,
-          "sort": 2,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "decimals": null,
-            "format": "ns",
-            "label": null,
-            "logBase": 10,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 12,
-          "y": 7
-        },
-        "id": 98,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_min\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main min tries",
-            "refId": "H"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p50  \"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main median tries",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p999\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main p999 tries",
-            "refId": "B"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_max\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "main max tries",
-            "refId": "C"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_min\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup min tries",
-            "refId": "D"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p50  \"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup median tries",
-            "refId": "E"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_p999\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup p999 tries",
-            "refId": "F"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_tries_max\"}",
-            "format": "time_series",
-            "hide": false,
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "rampup max tries",
-            "refId": "G"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "op tries distribution",
-        "tooltip": {
-          "shared": true,
-          "sort": 2,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "ns",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 18,
-          "y": 7
-        },
-        "id": 101,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "connected",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(dse_storage_load_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{$by}}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Storage Load / $by",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "bytes",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "decimals": null,
-        "description": "Read/Write bytes/sec",
-        "fill": 4,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 6,
-          "y": 13
-        },
-        "height": "",
-        "id": 105,
-        "legend": {
-          "alignAsTable": false,
-          "avg": false,
-          "current": false,
-          "hideEmpty": true,
-          "hideZero": true,
-          "max": false,
-          "min": false,
-          "rightSide": false,
-          "show": true,
-          "sort": "current",
-          "sortDesc": false,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "minSpan": 4,
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [
-          {
-            "alias": "/.*Read.*/",
-            "transform": "negative-Y"
-          }
-        ],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "irate(collectd_disk_disk_octets_read_total{disk=~\".*\\\\d+\"}[$rate])",
-            "format": "time_series",
-            "hide": true,
-            "instant": false,
-            "intervalFactor": 1,
-            "legendFormat": "{{instance}} {{disk}} - Reads",
-            "refId": "A",
-            "step": 240
-          },
-          {
-            "expr": "irate(collectd_disk_disk_octets_write_total{disk=~\".*\\\\d+\"}[$rate])",
-            "format": "time_series",
-            "hide": true,
-            "instant": false,
-            "intervalFactor": 1,
-            "legendFormat": "{{instance}} {{disk}} - Writes",
-            "refId": "B"
-          },
-          {
-            "expr": "irate(collectd_disk_disk_octets_read_total{disk=~\".*md0\"}[$rate])",
-            "format": "time_series",
-            "instant": false,
-            "intervalFactor": 1,
-            "legendFormat": "{{instance}} {{disk}} - Reads",
-            "refId": "C",
-            "step": 240
-          },
-          {
-            "expr": "irate(collectd_disk_disk_octets_write_total{disk=~\".*md0\"}[$rate])",
-            "format": "time_series",
-            "instant": false,
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "{{instance}} {{disk}} - Write",
-            "refId": "D",
-            "step": 240
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Disk Rate / sec",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "decimals": null,
-            "format": "Bps",
-            "label": "IO read (-) / write (+)",
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": false
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {
-          "Recv_bytes_eth2": "#7EB26D",
-          "Recv_bytes_lo": "#0A50A1",
-          "Recv_drop_eth2": "#6ED0E0",
-          "Recv_drop_lo": "#E0F9D7",
-          "Recv_errs_eth2": "#BF1B00",
-          "Recv_errs_lo": "#CCA300",
-          "Trans_bytes_eth2": "#7EB26D",
-          "Trans_bytes_lo": "#0A50A1",
-          "Trans_drop_eth2": "#6ED0E0",
-          "Trans_drop_lo": "#E0F9D7",
-          "Trans_errs_eth2": "#BF1B00",
-          "Trans_errs_lo": "#CCA300",
-          "recv_bytes_lo": "#0A50A1",
-          "recv_drop_eth0": "#99440A",
-          "recv_drop_lo": "#967302",
-          "recv_errs_eth0": "#BF1B00",
-          "recv_errs_lo": "#890F02",
-          "trans_bytes_eth0": "#7EB26D",
-          "trans_bytes_lo": "#0A50A1",
-          "trans_drop_eth0": "#99440A",
-          "trans_drop_lo": "#967302",
-          "trans_errs_eth0": "#BF1B00",
-          "trans_errs_lo": "#890F02"
-        },
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "description": "Basic network info per interface",
-        "fill": 4,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 12,
-          "y": 13
-        },
-        "id": 103,
-        "legend": {
-          "alignAsTable": true,
-          "avg": true,
-          "current": true,
-          "hideEmpty": false,
-          "hideZero": true,
-          "max": true,
-          "min": true,
-          "rightSide": false,
-          "show": true,
-          "sort": "current",
-          "sortDesc": true,
-          "total": false,
-          "values": true
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [
-          {
-            "alias": "/.*read.*/",
-            "transform": "negative-Y"
-          },
-          {
-            "alias": "/.*lo.*/",
-            "color": "#7EB26D"
-          },
-          {
-            "alias": "/.*eth0.*/"
-          },
-          {
-            "alias": "/.*eth1.*/",
-            "color": "#6ED0E0"
-          },
-          {
-            "alias": "/.*eth2.*/",
-            "color": "#EF843C"
-          },
-          {
-            "alias": "/.*eth3.*/",
-            "color": "#E24D42"
-          },
-          {
-            "alias": "/.*eth4.*/",
-            "color": "#1F78C1"
-          },
-          {
-            "alias": "/.*eth5.*/",
-            "color": "#BA43A9"
-          }
-        ],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "irate(collectd_interface_if_octets_rx_total[1m]) * 8",
-            "format": "time_series",
-            "interval": "",
-            "intervalFactor": 1,
-            "legendFormat": "{{instance}} {{interface}} read ",
-            "refId": "A",
-            "step": 240
-          },
-          {
-            "expr": "irate(collectd_interface_if_octets_tx_total[1m]) * 8",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{instance}} {{interface}} write",
-            "refId": "B",
-            "step": 240
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Network Traffic Basic",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "transparent": false,
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "decimals": null,
-            "format": "bps",
-            "label": "Read (-) /  Write (+)",
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "pps",
-            "label": "",
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": false
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 6,
-          "w": 6,
-          "x": 18,
-          "y": 13
-        },
-        "id": 113,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_cycles_responsetime_count\"}",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "response count",
-            "refId": "A"
-          },
-          {
-            "expr": "{__name__=~\"nosqlbench__workloads_.+_cycles_servicetime_count\"}",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "response count",
-            "refId": "B"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Cycle Count",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "collapsed": false,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 19
-        },
-        "id": 4,
-        "panels": [],
-        "title": "Cluster Overview",
-        "type": "row"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": true,
-        "colors": [
-          "#d44a3a",
-          "rgba(237, 129, 40, 0.89)",
-          "#7eb26d"
-        ],
-        "datasource": "prometheus",
-        "decimals": null,
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 2,
-          "x": 0,
-          "y": 20
-        },
-        "id": 8,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": false
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "count(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"} >= 0) or vector(0)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "1,1,1999",
-        "title": "Nodes Up",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "current"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": true,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 2,
-          "x": 2,
-          "y": 20
-        },
-        "id": 9,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": false
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "count(absent(sum(rate(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[2m])))) OR vector(0)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "1,1,1000",
-        "title": "Nodes Down",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "current"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "decimals": 0,
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 2,
-          "x": 4,
-          "y": 20
-        },
-        "id": 16,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(irate(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "",
-        "title": "Compactions / $rate",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "avg"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 3,
-          "x": 6,
-          "y": 20
-        },
-        "id": 10,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(irate(dse_client_request_latency_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "",
-        "title": "Requests / $rate",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "avg"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "decimals": 0,
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 3,
-          "x": 9,
-          "y": 20
-        },
-        "id": 17,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(irate(dse_table_dropped_mutations_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "10,100,100000",
-        "title": "Dropped Messages / $rate",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "avg"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "decimals": 0,
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 3,
-          "x": 12,
-          "y": 20
-        },
-        "id": 18,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(dse_client_connected_native_clients{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"})",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "10,100,100000",
-        "title": "Clients Connected",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "avg"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "decimals": 0,
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 3,
-          "x": 15,
-          "y": 20
-        },
-        "id": 19,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(irate(dse_client_request_timeouts_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate]))",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "10,100,100000",
-        "title": "Client Timeouts / $rate",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "avg"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "decimals": 0,
-        "format": "none",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 3,
-          "x": 18,
-          "y": 20
-        },
-        "id": 20,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(dse_storage_hints_on_disk_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"})",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "10,100,100000",
-        "title": "Total Hints",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "avg"
-      },
-      {
-        "cacheTimeout": null,
-        "colorBackground": false,
-        "colorValue": false,
-        "colors": [
-          "#299c46",
-          "rgba(237, 129, 40, 0.89)",
-          "#d44a3a"
-        ],
-        "datasource": "prometheus",
-        "decimals": 0,
-        "format": "decbytes",
-        "gauge": {
-          "maxValue": 100,
-          "minValue": 0,
-          "show": false,
-          "thresholdLabels": false,
-          "thresholdMarkers": true
-        },
-        "gridPos": {
-          "h": 3,
-          "w": 3,
-          "x": 21,
-          "y": 20
-        },
-        "id": 44,
-        "interval": null,
-        "links": [],
-        "mappingType": 1,
-        "mappingTypes": [
-          {
-            "name": "value to text",
-            "value": 1
-          },
-          {
-            "name": "range to text",
-            "value": 2
-          }
-        ],
-        "maxDataPoints": 100,
-        "nullPointMode": "connected",
-        "nullText": null,
-        "postfix": "",
-        "postfixFontSize": "50%",
-        "prefix": "",
-        "prefixFontSize": "50%",
-        "rangeMaps": [
-          {
-            "from": "null",
-            "text": "N/A",
-            "to": "null"
-          }
-        ],
-        "sparkline": {
-          "fillColor": "rgba(31, 118, 189, 0.18)",
-          "full": false,
-          "lineColor": "rgb(31, 120, 193)",
-          "show": true
-        },
-        "tableColumn": "",
-        "targets": [
-          {
-            "expr": "sum(dse_table_live_disk_space_used_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"})",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "",
-            "refId": "A"
-          }
-        ],
-        "thresholds": "",
-        "title": "Live Data Size",
-        "type": "singlestat",
-        "valueFontSize": "80%",
-        "valueMaps": [
-          {
-            "op": "=",
-            "text": "N/A",
-            "value": "null"
-          }
-        ],
-        "valueName": "current"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 23
-        },
-        "id": 14,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 18
-            },
-            "id": 6,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": true,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(irate(dse_client_request_latency_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by, request_type)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}}:{{request_type}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Requests Served / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 18
-            },
-            "id": 45,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": true,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(dse_client_connected_native_clients{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Clients Connected / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 18
-            },
-            "id": 46,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": true,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(irate(dse_client_request_timeouts_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Client Timeouts / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 27
-            },
-            "id": 51,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator Read Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 27
-            },
-            "id": 11,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator Write Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 27
-            },
-            "id": 21,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"range_slice\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator Range Read Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 36
-            },
-            "id": 22,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator CAS Read Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 36
-            },
-            "id": 48,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"cas_read\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator CAS Read Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 36
-            },
-            "id": 47,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(rate(dse_client_request_latency_bucket{request_type=\"view_write\", cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator View Write Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "Coordinator Metrics (no keyspace/table filters apply)",
-        "type": "row"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 24
-        },
-        "id": 43,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 19
-            },
-            "id": 15,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(irate(dse_table_coordinator_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator Table Read Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 19
-            },
-            "id": 49,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(irate(dse_table_read_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Local Table Read Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 19
-            },
-            "id": 23,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(irate(dse_table_write_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Local Table Write Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 28
-            },
-            "id": 52,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "interval": "",
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(irate(dse_table_coordinator_scan_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Coordinator Table Range Scan Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 28
-            },
-            "id": 53,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "histogram_quantile(0.50, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P50 ",
-                "refId": "B"
-              },
-              {
-                "expr": "histogram_quantile(0.75, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P75",
-                "refId": "A"
-              },
-              {
-                "expr": "histogram_quantile(0.90, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P90",
-                "refId": "C"
-              },
-              {
-                "expr": "histogram_quantile(0.95, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P95",
-                "refId": "D"
-              },
-              {
-                "expr": "histogram_quantile(0.99, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P99",
-                "refId": "E"
-              },
-              {
-                "expr": "histogram_quantile(0.999, sum(irate(dse_table_range_latency_bucket{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (le, $by))",
-                "format": "time_series",
-                "hide": false,
-                "intervalFactor": 1,
-                "legendFormat": "$by:{{$by}} P999",
-                "refId": "F"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Local Table Range Scan Latency / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": null,
-                "format": "µs",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 28
-            },
-            "id": 50,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [
-              {
-                "alias": "/.*Flushes/",
-                "bars": true,
-                "lines": false,
-                "yaxis": 2
-              }
-            ],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(dse_table_memtable_off_heap_size{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}} : Off Heap",
-                "refId": "A"
-              },
-              {
-                "expr": "sum(dse_table_memtable_on_heap_size{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}} : On Heap",
-                "refId": "B"
-              },
-              {
-                "expr": "sum(dse_table_memtable_live_data_size{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}} : Data Size",
-                "refId": "C"
-              },
-              {
-                "expr": "sum(idelta(dse_table_memtable_switch_count_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)",
-                "format": "time_series",
-                "instant": false,
-                "intervalFactor": 2,
-                "legendFormat": "{{$by}} : Flushes",
-                "refId": "D"
-              },
-              {
-                "expr": "sum(idelta(dse_table_pending_flushes_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}} : Pending Flushes",
-                "refId": "E"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Memtable Space  $keyspace.$table / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "bytes",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              },
-              {
-                "decimals": 0,
-                "format": "short",
-                "label": "Flushes",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 37
-            },
-            "id": 88,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(dse_table_ss_tables_per_read_histogram{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\", quantile=~\".\\\\d+\"}) by (quantile, instance) * 1000",
-                "format": "time_series",
-                "interval": "",
-                "intervalFactor": 1,
-                "legendFormat": "Node {{instance}} P{{quantile}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "SSTables Per Read / Node",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": 0,
-                "format": "short",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 37
-            },
-            "id": 89,
-            "legend": {
-              "alignAsTable": false,
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(dse_table_tombstone_scanned_histogram{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\", quantile=~\".\\\\d+\"}) by (quantile, instance) * 1000",
-                "format": "time_series",
-                "interval": "",
-                "intervalFactor": 1,
-                "legendFormat": "{{instance}} : P{{quantile}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Tombstones Scanned / Node",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "decimals": 0,
-                "format": "short",
-                "label": "",
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "decimals": null,
-                "format": "short",
-                "label": "foo",
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": false
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "Table Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": false,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 25
-        },
-        "id": 25,
-        "panels": [],
-        "title": "Storage Metrics",
-        "type": "row"
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 0,
-          "y": 26
-        },
-        "id": 54,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(dse_table_total_disk_space_used_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{$by}}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Live Disk Space Used / $by",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "bytes",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 6,
-          "y": 26
-        },
-        "id": 55,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(dse_storage_load_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{$by}}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Storage Load / $by",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "bytes",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 12,
-          "y": 26
-        },
-        "id": 57,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(irate(dse_storage_total_hints_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{$by}}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Total Hints / $by / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "none",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 7,
-          "w": 6,
-          "x": 18,
-          "y": 26
-        },
-        "id": 58,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(increase(dse_storage_hints_on_disk_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{$by}}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Hints on Disk / $by / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "none",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 33
-        },
-        "id": 39,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 8,
-              "x": 0,
-              "y": 21
-            },
-            "id": 59,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "avg(dse_cql_prepared_statements_ratio{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Prepared Statement Ratio / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "percentunit",
-                "label": null,
-                "logBase": 1,
-                "max": "1",
-                "min": null,
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 8,
-              "x": 8,
-              "y": 21
-            },
-            "id": 60,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(dse_cql_prepared_statements_count{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Prepared Statements / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "none",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 8,
-              "x": 16,
-              "y": 21
-            },
-            "id": 61,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(increase(dse_cql_prepared_statements_executed_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{$by}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Executed Prepared Statements / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "none",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "CQL Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 34
-        },
-        "id": 41,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 6,
-              "x": 0,
-              "y": 22
-            },
-            "id": 62,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "dse_jvm_memory_pool_used{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.memory.pools.g1_eden_space.used\"}",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM G1 Eden Space Used / node",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "bytes",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 6,
-              "x": 6,
-              "y": 22
-            },
-            "id": 63,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "dse_jvm_memory_pool_used{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.memory.pools.g1_old_gen.used\"}",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM G1 Old Gen Used / node",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "bytes",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 6,
-              "x": 12,
-              "y": 22
-            },
-            "id": 64,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "dse_jvm_memory_pool_used{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.memory.pools.g1_survivor_space.used\"}",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM G1 Survivor Space / node",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "bytes",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 6,
-              "x": 18,
-              "y": 22
-            },
-            "id": 65,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "increase(dse_jvm_gc_time{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_young_generation.time\"}[$rate])",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM GC Young Gen / node / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "ms",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 8,
-              "x": 0,
-              "y": 28
-            },
-            "id": 68,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "increase(dse_jvm_gc_count{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_young_generation.count\"}[$rate])",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM GC Old Gen Count / node / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "none",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 8,
-              "x": 8,
-              "y": 28
-            },
-            "id": 66,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "increase(dse_jvm_gc_time{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_old_generation.time\"}[$rate])",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM GC Old Gen / node / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "ms",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 6,
-              "w": 8,
-              "x": 16,
-              "y": 28
-            },
-            "id": 67,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "increase(dse_jvm_gc_count{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", dse=\"jvm.gc.g1_old_generation.count\"}[$rate])",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ instance }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "JVM GC Old Gen Count / node / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "none",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "JVM Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": false,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 35
-        },
-        "id": 31,
-        "panels": [],
-        "title": "Compaction Metrics",
-        "type": "row"
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 9,
-          "w": 8,
-          "x": 0,
-          "y": 36
-        },
-        "id": 69,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(dse_compaction_pending_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{ $by }}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Pending Compactions / node / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "none",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 9,
-          "w": 8,
-          "x": 8,
-          "y": 36
-        },
-        "id": 70,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(increase(dse_compaction_completed_tasks{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{ $by }}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Completed Compactions / node / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "none",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 9,
-          "w": 8,
-          "x": 16,
-          "y": 36
-        },
-        "id": 71,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(increase(dse_compaction_bytes_compacted_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{ $by }}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Compacted Bytes / node / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "bytes",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "collapsed": false,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 45
-        },
-        "id": 29,
-        "panels": [],
-        "title": "Hint Metrics",
-        "type": "row"
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 9,
-          "w": 8,
-          "x": 0,
-          "y": 46
-        },
-        "id": 72,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(increase(dse_hints_hint_delays_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{ $by }}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Hint Delays / $by / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "ms",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 9,
-          "w": 8,
-          "x": 8,
-          "y": 46
-        },
-        "id": 73,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(increase(dse_hints_hints_succeeded_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{ $by }}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Hints Succeeded / $by / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "none",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "aliasColors": {},
-        "bars": false,
-        "dashLength": 10,
-        "dashes": false,
-        "datasource": "prometheus",
-        "fill": 1,
-        "gridPos": {
-          "h": 9,
-          "w": 8,
-          "x": 16,
-          "y": 46
-        },
-        "id": 74,
-        "legend": {
-          "avg": false,
-          "current": false,
-          "max": false,
-          "min": false,
-          "show": true,
-          "total": false,
-          "values": false
-        },
-        "lines": true,
-        "linewidth": 1,
-        "links": [],
-        "nullPointMode": "null",
-        "percentage": false,
-        "pointradius": 5,
-        "points": false,
-        "renderer": "flot",
-        "seriesOverrides": [],
-        "spaceLength": 10,
-        "stack": false,
-        "steppedLine": false,
-        "targets": [
-          {
-            "expr": "sum(increase(dse_hints_hints_failed_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-            "format": "time_series",
-            "intervalFactor": 1,
-            "legendFormat": "{{ $by }}",
-            "refId": "A"
-          }
-        ],
-        "thresholds": [],
-        "timeFrom": null,
-        "timeShift": null,
-        "title": "Hints Failed / $by / $rate",
-        "tooltip": {
-          "shared": true,
-          "sort": 0,
-          "value_type": "individual"
-        },
-        "type": "graph",
-        "xaxis": {
-          "buckets": null,
-          "mode": "time",
-          "name": null,
-          "show": true,
-          "values": []
-        },
-        "yaxes": [
-          {
-            "format": "none",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": "0",
-            "show": true
-          },
-          {
-            "format": "short",
-            "label": null,
-            "logBase": 1,
-            "max": null,
-            "min": null,
-            "show": true
-          }
-        ],
-        "yaxis": {
-          "align": false,
-          "alignLevel": null
-        }
-      },
-      {
-        "collapsed": false,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 55
-        },
-        "id": 37,
-        "panels": [],
-        "title": "NodeSync Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 56
-        },
-        "id": 35,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 16
-            },
-            "id": 77,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(increase(dse_table_repair_jobs_completed_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (table, $by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }} : {{ table }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Repairs Completed / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "none",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 16
-            },
-            "id": 78,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(increase(dse_table_read_repair_requests_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", keyspace=~\"$keyspace\", table=~\"$table\"}[$rate])) by (table, $by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }} : {{ table }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Read Repair Requests / $by / $rate",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "none",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "Repair Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 57
-        },
-        "id": 33,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 17
-            },
-            "id": 79,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(idelta(dse_streaming_incoming_bytes_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Streaming Incoming Bytes / $by / sec",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "Bps",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 17
-            },
-            "id": 80,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(idelta(dse_streaming_outgoing_bytes_total{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\"}[$rate])) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Streaming Outgoing Bytes / $by / sec",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "Bps",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "Streaming Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 58
-        },
-        "id": 27,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 0,
-              "y": 18
-            },
-            "id": 81,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "avg(dse_cache_hit_rate{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", cache_name=\"chunk_cache\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Chunk Cache Hit Rate / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "percentunit",
-                "label": null,
-                "logBase": 1,
-                "max": "1",
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 8,
-              "y": 18
-            },
-            "id": 82,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "avg(dse_cache_hit_rate{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", cache_name=\"counter_cache\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Counter Cache Hit Rate / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "percentunit",
-                "label": null,
-                "logBase": 1,
-                "max": "1",
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          },
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 9,
-              "w": 8,
-              "x": 16,
-              "y": 18
-            },
-            "id": 83,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "avg(dse_cache_hit_rate{cluster=~\"$cluster\", dc=~\"$dc\", rack=~\"$rack\", cache_name=\"key_cache\"}) by ($by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{ $by }}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "Key Cache Hit Rate / $by",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "percentunit",
-                "label": null,
-                "logBase": 1,
-                "max": "1",
-                "min": "0",
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "Cache Metrics",
-        "type": "row"
-      },
-      {
-        "collapsed": true,
-        "gridPos": {
-          "h": 1,
-          "w": 24,
-          "x": 0,
-          "y": 59
-        },
-        "id": 85,
-        "panels": [
-          {
-            "aliasColors": {},
-            "bars": false,
-            "dashLength": 10,
-            "dashes": false,
-            "datasource": "prometheus",
-            "fill": 1,
-            "gridPos": {
-              "h": 10,
-              "w": 24,
-              "x": 0,
-              "y": 29
-            },
-            "id": 87,
-            "legend": {
-              "avg": false,
-              "current": false,
-              "hideEmpty": true,
-              "hideZero": true,
-              "max": false,
-              "min": false,
-              "show": true,
-              "total": false,
-              "values": false
-            },
-            "lines": true,
-            "linewidth": 1,
-            "links": [],
-            "nullPointMode": "null",
-            "percentage": false,
-            "pointradius": 5,
-            "points": false,
-            "renderer": "flot",
-            "seriesOverrides": [],
-            "spaceLength": 10,
-            "stack": false,
-            "steppedLine": false,
-            "targets": [
-              {
-                "expr": "sum(rate(dse_thread_pools_completed_tasks{pool_name=~\"tpc_.*\"}[$rate])) by (pool_name, $by)",
-                "format": "time_series",
-                "intervalFactor": 1,
-                "legendFormat": "{{pool_name}}",
-                "refId": "A"
-              }
-            ],
-            "thresholds": [],
-            "timeFrom": null,
-            "timeShift": null,
-            "title": "TPC Task Types",
-            "tooltip": {
-              "shared": true,
-              "sort": 0,
-              "value_type": "individual"
-            },
-            "type": "graph",
-            "xaxis": {
-              "buckets": null,
-              "mode": "time",
-              "name": null,
-              "show": true,
-              "values": []
-            },
-            "yaxes": [
-              {
-                "format": "ops",
-                "label": null,
-                "logBase": 10,
-                "max": null,
-                "min": null,
-                "show": true
-              },
-              {
-                "format": "short",
-                "label": null,
-                "logBase": 1,
-                "max": null,
-                "min": null,
-                "show": true
-              }
-            ],
-            "yaxis": {
-              "align": false,
-              "alignLevel": null
-            }
-          }
-        ],
-        "title": "TPC Metrics",
-        "type": "row"
-      }
-    ],
-    "refresh": "30s",
-    "schemaVersion": 16,
-    "style": "dark",
-    "tags": [
-      "dse"
-    ],
-    "templating": {
-      "list": [
-        {
-          "allValue": null,
-          "current": {
-            "selected": false,
-            "text": "Node",
-            "value": "instance"
-          },
-          "hide": 0,
-          "includeAll": false,
-          "label": "Group By",
-          "multi": false,
-          "name": "by",
-          "options": [
-            {
-              "selected": false,
-              "text": "Cluster",
-              "value": "cluster"
-            },
-            {
-              "selected": false,
-              "text": "DC",
-              "value": "dc"
-            },
-            {
-              "selected": false,
-              "text": "Rack",
-              "value": "rack"
-            },
-            {
-              "selected": true,
-              "text": "Node",
-              "value": "instance"
-            }
-          ],
-          "query": "cluster,dc,rack,instance",
-          "skipUrlSync": false,
-          "type": "custom"
-        },
-        {
-          "allValue": null,
-          "current": {
-            "selected": true,
-            "text": "1m",
-            "value": "1m"
-          },
-          "hide": 0,
-          "includeAll": false,
-          "label": "Rate",
-          "multi": false,
-          "name": "rate",
-          "options": [
-            {
-              "selected": true,
-              "text": "1m",
-              "value": "1m"
-            },
-            {
-              "selected": false,
-              "text": "5m",
-              "value": "5m"
-            },
-            {
-              "selected": false,
-              "text": "10m",
-              "value": "10m"
-            },
-            {
-              "selected": false,
-              "text": "30m",
-              "value": "30m"
-            },
-            {
-              "selected": false,
-              "text": "1h",
-              "value": "1h"
-            },
-            {
-              "selected": false,
-              "text": "6h",
-              "value": "6h"
-            },
-            {
-              "selected": false,
-              "text": "12h",
-              "value": "12h"
-            }
-          ],
-          "query": "1m,5m,10m,30m,1h,6h,12h",
-          "skipUrlSync": false,
-          "type": "custom"
-        },
-        {
-          "allValue": null,
-          "current": {},
-          "datasource": "prometheus",
-          "hide": 0,
-          "includeAll": false,
-          "label": "Cluster",
-          "multi": false,
-          "name": "cluster",
-          "options": [],
-          "query": "label_values(collectd_cpu_total, cluster)",
-          "refresh": 2,
-          "regex": "",
-          "skipUrlSync": false,
-          "sort": 0,
-          "tagValuesQuery": "",
-          "tags": [],
-          "tagsQuery": "",
-          "type": "query",
-          "useTags": false
-        },
-        {
-          "allValue": ".*",
-          "current": {},
-          "datasource": "prometheus",
-          "hide": 0,
-          "includeAll": true,
-          "label": "DataCenter",
-          "multi": false,
-          "name": "dc",
-          "options": [],
-          "query": "label_values(collectd_cpu_total{cluster=~\"$cluster\"}, dc)",
-          "refresh": 2,
-          "regex": "",
-          "skipUrlSync": false,
-          "sort": 0,
-          "tagValuesQuery": "",
-          "tags": [],
-          "tagsQuery": "",
-          "type": "query",
-          "useTags": false
-        },
-        {
-          "allValue": ".*",
-          "current": {},
-          "datasource": "prometheus",
-          "hide": 0,
-          "includeAll": true,
-          "label": "Rack",
-          "multi": false,
-          "name": "rack",
-          "options": [],
-          "query": "label_values(collectd_cpu_total{cluster=~\"$cluster\", dc=~\"$dc\"}, rack)",
-          "refresh": 2,
-          "regex": "",
-          "skipUrlSync": false,
-          "sort": 0,
-          "tagValuesQuery": "",
-          "tags": [],
-          "tagsQuery": "",
-          "type": "query",
-          "useTags": false
-        },
-        {
-          "allValue": ".*",
-          "current": {},
-          "datasource": "prometheus",
-          "hide": 0,
-          "includeAll": true,
-          "label": "Keyspace",
-          "multi": false,
-          "name": "keyspace",
-          "options": [],
-          "query": "label_values(dse_table_read_latency{cluster=~\"$cluster\"}, keyspace)",
-          "refresh": 2,
-          "regex": "",
-          "skipUrlSync": false,
-          "sort": 0,
-          "tagValuesQuery": "",
-          "tags": [],
-          "tagsQuery": "",
-          "type": "query",
-          "useTags": false
-        },
-        {
-          "allValue": ".*",
-          "current": {},
-          "datasource": "prometheus",
-          "hide": 0,
-          "includeAll": true,
-          "label": "Table",
-          "multi": false,
-          "name": "table",
-          "options": [],
-          "query": "label_values(dse_table_read_latency{keyspace=~\"$keyspace\"}, table)",
-          "refresh": 2,
-          "regex": "",
-          "skipUrlSync": false,
-          "sort": 1,
-          "tagValuesQuery": "",
-          "tags": [],
-          "tagsQuery": "",
-          "type": "query",
-          "useTags": true
-        }
-      ]
-    },
-    "time": {
-      "from": "now-30m",
-      "to": "now"
-    },
-    "timepicker": {
-      "refresh_intervals": [
-        "5s",
-        "10s",
-        "30s",
-        "1m",
-        "5m",
-        "15m",
-        "30m",
-        "1h",
-        "2h",
-        "1d"
-      ],
-      "time_options": [
-        "5m",
-        "15m",
-        "1h",
-        "6h",
-        "12h",
-        "24h",
-        "2d",
-        "7d",
-        "30d"
-      ]
-    },
-    "timezone": "",
-    "title": "NoSQLBench (deprecated)",
-    "id": null,
-    "uid": null,
-    "version": 1
-  }
-}
diff --git a/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json
new file mode 100644
index 000000000..6be25578f
--- /dev/null
+++ b/engine-docker/src/main/resources/docker/dashboards/nb4-new-dashboard.json
@@ -0,0 +1,1408 @@
+{
+  "dashboard": {
+    "annotations": {
+      "list": [
+        {
+          "datasource": "-- Grafana --",
+          "enable": true,
+          "hide": false,
+          "iconColor": "#96D98D",
+          "limit": 1000,
+          "name": "ShowMatching",
+          "showIn": 0,
+          "tags": [
+            "appname:nosqlbench",
+            "span:$span",
+            "layer:$layer"
+          ],
+          "type": "tags"
+        },
+        {
+          "builtIn": 1,
+          "datasource": "-- Grafana --",
+          "enable": true,
+          "hide": true,
+          "iconColor": "rgba(0, 211, 255, 1)",
+          "limit": 100,
+          "name": "Annotations & Alerts",
+          "showIn": 0,
+          "type": "dashboard"
+        },
+        {
+          "datasource": "-- Grafana --",
+          "enable": false,
+          "hide": false,
+          "iconColor": "rgba(255, 96, 96, 1)",
+          "limit": 1000,
+          "matchAny": true,
+          "name": "ShowAll",
+          "showIn": 0,
+          "tags": [
+            "appname:nosqlbench"
+          ],
+          "type": "tags"
+        }
+      ]
+    },
+    "description": "Basic Dashboard with Annotations for NoSQLBench 4",
+    "editable": true,
+    "gnetId": null,
+    "graphTooltip": 1,
+    "id": null,
+    "iteration": 1607542677976,
+    "links": [],
+    "panels": [
+      {
+        "collapsed": true,
+        "datasource": null,
+        "gridPos": {
+          "h": 1,
+          "w": 24,
+          "x": 0,
+          "y": 0
+        },
+        "id": 130,
+        "panels": [
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 4,
+              "w": 4,
+              "x": 0,
+              "y": 1
+            },
+            "id": 132,
+            "options": {
+              "content": "This selects the specific NoSQLBench alias, which includes workload, named scenario, and step components.\n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "targets": [
+              {
+                "queryType": "randomWalk",
+                "refId": "A"
+              }
+            ],
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Alias",
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 4,
+              "w": 4,
+              "x": 4,
+              "y": 1
+            },
+            "id": 133,
+            "options": {
+              "content": "This chooses an Annotation Layer to focus on. Each layer is a different shell of execution within NoSQLBench.   \n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "targets": [
+              {
+                "queryType": "randomWalk",
+                "refId": "A"
+              }
+            ],
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "AnLayer",
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 4,
+              "w": 4,
+              "x": 8,
+              "y": 1
+            },
+            "id": 134,
+            "options": {
+              "content": "This chooses an Annotation Layer to focus on. An instant is a point in time. An Interval is defined by two instants representing start and end times.",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "targets": [
+              {
+                "queryType": "randomWalk",
+                "refId": "A"
+              }
+            ],
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "AnSpan",
+            "type": "text"
+          }
+        ],
+        "title": "NoSQLBench Controls Guide",
+        "type": "row"
+      },
+      {
+        "collapsed": true,
+        "datasource": null,
+        "gridPos": {
+          "h": 1,
+          "w": 24,
+          "x": 0,
+          "y": 1
+        },
+        "id": 115,
+        "panels": [
+          {
+            "datasource": null,
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 2,
+              "w": 24,
+              "x": 0,
+              "y": 2
+            },
+            "id": 128,
+            "options": {
+              "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 0,
+              "y": 4
+            },
+            "id": 117,
+            "options": {
+              "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Ops and Successful Ops",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 6,
+              "y": 4
+            },
+            "id": 118,
+            "options": {
+              "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Error Counts",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 12,
+              "y": 4
+            },
+            "id": 119,
+            "options": {
+              "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Service Time Distribution",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 18,
+              "y": 4
+            },
+            "id": 120,
+            "options": {
+              "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Op Tries Distribution",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 0,
+              "y": 7
+            },
+            "id": 121,
+            "options": {
+              "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "P75 NB Internals",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 6,
+              "y": 7
+            },
+            "id": 122,
+            "options": {
+              "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "P99 NB Internals",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 12,
+              "y": 7
+            },
+            "id": 123,
+            "options": {
+              "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Service Time Range",
+            "transparent": true,
+            "type": "text"
+          },
+          {
+            "datasource": null,
+            "description": "",
+            "fieldConfig": {
+              "defaults": {
+                "custom": {}
+              },
+              "overrides": []
+            },
+            "gridPos": {
+              "h": 3,
+              "w": 6,
+              "x": 18,
+              "y": 7
+            },
+            "id": 124,
+            "options": {
+              "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.",
+              "mode": "markdown"
+            },
+            "pluginVersion": "7.3.4",
+            "timeFrom": null,
+            "timeShift": null,
+            "title": "Cycle Count",
+            "transparent": true,
+            "type": "text"
+          }
+        ],
+        "title": "NoSQLBench Metrics Guide",
+        "type": "row"
+      },
+      {
+        "collapsed": false,
+        "datasource": null,
+        "gridPos": {
+          "h": 1,
+          "w": 24,
+          "x": 0,
+          "y": 2
+        },
+        "id": 91,
+        "panels": [],
+        "title": "NoSQLBench Metrics",
+        "type": "row"
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "description": "",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 0,
+          "y": 3
+        },
+        "hiddenSeries": false,
+        "id": 95,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 5,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-allops",
+            "refId": "C"
+          },
+          {
+            "expr": "result{type=\"avg_rate\",avg_of=\"1m\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-allops",
+            "refId": "B"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "Ops and Successful Ops",
+        "tooltip": {
+          "shared": true,
+          "sort": 0,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": "0",
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 6,
+          "y": 3
+        },
+        "hiddenSeries": false,
+        "id": 93,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": true,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "connected",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 5,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "{__name__=~\"errorcounts.*\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-{{error}}",
+            "refId": "B"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "Error Counts",
+        "tooltip": {
+          "shared": true,
+          "sort": 2,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": "0",
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 12,
+          "y": 3
+        },
+        "hiddenSeries": false,
+        "id": 97,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "rightSide": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 5,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "result_success{type=\"pctile\",alias=~\"$Alias\"}",
+            "hide": false,
+            "interval": "",
+            "legendFormat": "{{alias}}-p{{pctile}}",
+            "refId": "B"
+          },
+          {
+            "expr": "result_success{type=\"pctile\",alias=~\"$alias\"}",
+            "hide": false,
+            "interval": "",
+            "legendFormat": "{{alias}}-p{{pctile}}",
+            "refId": "C"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "service time distribution",
+        "tooltip": {
+          "shared": true,
+          "sort": 2,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "format": "ns",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 18,
+          "y": 3
+        },
+        "hiddenSeries": false,
+        "id": 98,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 5,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "tries{type=\"pctile\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-p{{pctile}}",
+            "refId": "A"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "op tries distribution",
+        "tooltip": {
+          "shared": true,
+          "sort": 2,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 0,
+          "y": 9
+        },
+        "hiddenSeries": false,
+        "id": 99,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 1,
+        "points": true,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}",
+            "refId": "B"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "p75 client overhead",
+        "tooltip": {
+          "shared": true,
+          "sort": 2,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "decimals": null,
+            "format": "ns",
+            "label": null,
+            "logBase": 10,
+            "max": null,
+            "min": "0",
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 6,
+          "y": 9
+        },
+        "hiddenSeries": false,
+        "id": 111,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 1,
+        "points": true,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\",alias=~\"$alias\"}",
+            "format": "time_series",
+            "hide": false,
+            "instant": false,
+            "interval": "",
+            "intervalFactor": 1,
+            "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}",
+            "refId": "C"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "p99 client overhead",
+        "tooltip": {
+          "shared": true,
+          "sort": 2,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "decimals": null,
+            "format": "ns",
+            "label": null,
+            "logBase": 10,
+            "max": null,
+            "min": "0",
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "description": "",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 2,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 12,
+          "y": 9
+        },
+        "hiddenSeries": false,
+        "id": 109,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 2,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 5,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "result_success{type=\"pctile\",pctile=\"0\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-min",
+            "refId": "B"
+          },
+          {
+            "expr": "result_success{type=\"pctile\",pctile=\"100\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-max",
+            "refId": "A"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "service time range",
+        "tooltip": {
+          "shared": true,
+          "sort": 2,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "format": "ns",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": "prometheus",
+        "fieldConfig": {
+          "defaults": {
+            "custom": {},
+            "links": []
+          },
+          "overrides": []
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 6,
+          "x": 18,
+          "y": 9
+        },
+        "hiddenSeries": false,
+        "id": 113,
+        "legend": {
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "links": [],
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "7.3.4",
+        "pointradius": 5,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "expr": "cycles_servicetime{type=\"counter\",alias=~\"$alias\"}",
+            "interval": "",
+            "legendFormat": "{{alias}}-count",
+            "refId": "C"
+          }
+        ],
+        "thresholds": [],
+        "timeFrom": null,
+        "timeRegions": [],
+        "timeShift": null,
+        "title": "Cycle Count",
+        "tooltip": {
+          "shared": true,
+          "sort": 0,
+          "value_type": "individual"
+        },
+        "transparent": true,
+        "type": "graph",
+        "xaxis": {
+          "buckets": null,
+          "mode": "time",
+          "name": null,
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          },
+          {
+            "format": "short",
+            "label": null,
+            "logBase": 1,
+            "max": null,
+            "min": null,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false,
+          "alignLevel": null
+        }
+      }
+    ],
+    "refresh": "1m",
+    "schemaVersion": 26,
+    "style": "dark",
+    "tags": [
+      "NoSQLBench"
+    ],
+    "templating": {
+      "list": [
+        {
+          "allValue": ".*",
+          "current": {
+            "selected": true,
+            "text": [
+              "All"
+            ],
+            "value": [
+              "$__all"
+            ]
+          },
+          "datasource": "prometheus",
+          "definition": "{appname=\"nosqlbench\"}",
+          "error": null,
+          "hide": 0,
+          "includeAll": true,
+          "label": "Alias",
+          "multi": true,
+          "name": "alias",
+          "options": [],
+          "query": "{appname=\"nosqlbench\"}",
+          "refresh": 2,
+          "regex": "/.*alias=\"([^\"]+)\".*/",
+          "skipUrlSync": false,
+          "sort": 1,
+          "tagValuesQuery": "",
+          "tags": [],
+          "tagsQuery": "",
+          "type": "query",
+          "useTags": false
+        },
+        {
+          "allValue": " ",
+          "current": {
+            "selected": true,
+            "text": "Activity",
+            "value": "Activity"
+          },
+          "error": null,
+          "hide": 0,
+          "includeAll": true,
+          "label": "AnLayer",
+          "multi": false,
+          "name": "layer",
+          "options": [
+            {
+              "selected": false,
+              "text": "All",
+              "value": "$__all"
+            },
+            {
+              "selected": false,
+              "text": "NONE",
+              "value": "NONE"
+            },
+            {
+              "selected": false,
+              "text": "CLI",
+              "value": "CLI"
+            },
+            {
+              "selected": true,
+              "text": "Scenario",
+              "value": "Scenario"
+            },
+            {
+              "selected": false,
+              "text": "Script",
+              "value": "Script"
+            },
+            {
+              "selected": false,
+              "text": "Activity",
+              "value": "Activity"
+            }
+          ],
+          "query": "NONE,CLI,Scenario,Script,Activity",
+          "queryValue": "",
+          "skipUrlSync": false,
+          "type": "custom"
+        },
+        {
+          "allValue": null,
+          "current": {
+            "selected": false,
+            "text": "interval",
+            "value": "interval"
+          },
+          "error": null,
+          "hide": 0,
+          "includeAll": false,
+          "label": "AnSpan",
+          "multi": false,
+          "name": "span",
+          "options": [
+            {
+              "selected": false,
+              "text": "NONE",
+              "value": "NONE"
+            },
+            {
+              "selected": false,
+              "text": "interval",
+              "value": "interval"
+            },
+            {
+              "selected": true,
+              "text": "instant",
+              "value": "instant"
+            }
+          ],
+          "query": "NONE,interval,instant",
+          "queryValue": "",
+          "skipUrlSync": false,
+          "type": "custom"
+        }
+      ]
+    },
+    "time": {
+      "from": "now-5m",
+      "to": "now"
+    },
+    "timepicker": {
+      "refresh_intervals": [
+        "10s",
+        "30s",
+        "1m",
+        "5m",
+        "15m",
+        "30m",
+        "1h",
+        "2h",
+        "1d"
+      ],
+      "time_options": [
+        "5m",
+        "15m",
+        "1h",
+        "6h",
+        "12h",
+        "24h",
+        "2d",
+        "7d",
+        "30d"
+      ]
+    },
+    "timezone": "",
+    "title": "NB4 Dashboard",
+    "uid": "aIIX1f6Wz",
+    "version": 8
+  }
+}
diff --git a/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json b/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json
deleted file mode 100644
index 8460ab572..000000000
--- a/engine-docker/src/main/resources/docker/dashboards/new-nb-dashboard.json
+++ /dev/null
@@ -1,1105 +0,0 @@
-{
-  "dashboard": {
-  "annotations": {
-    "list": [
-      {
-        "builtIn": 1,
-        "datasource": "-- Grafana --",
-        "enable": true,
-        "hide": true,
-        "iconColor": "rgba(0, 211, 255, 1)",
-        "name": "Annotations & Alerts",
-        "type": "dashboard"
-      }
-    ]
-  },
-  "editable": true,
-  "gnetId": null,
-  "graphTooltip": 1,
-  "id": null,
-  "links": [],
-  "panels": [
-    {
-      "collapsed": false,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 0
-      },
-      "id": 115,
-      "panels": [],
-      "title": "NoSQLBench Metrics Guide",
-      "type": "row"
-    },
-    {
-      "content": "The descriptions below are in the same position as the metric they desscribe.\nYou can collapse this row when you no longer need the descriptions.\nSome of the descriptions have additional details if you scroll with\nyour mouse wheel.\n\n\n",
-      "datasource": null,
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 2,
-        "w": 24,
-        "x": 0,
-        "y": 1
-      },
-      "id": 128,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "These two metrics show the 1-minute averaged ops per second for all ops (successes and errors) and succesful ops (no errors during execution) separately.\n\nWhen there are no errors, these metrics should be the same. When there are errors, there will be a difference. In that case, you can look at the error metrics to learn more about what is happening.\n\nBy comparing these two metrics for any activity, you have a quick first-glance sanity check that your tests are configured properly and\nthat there are no serious configuration or resource issues. In addition, this is the primary throughput metric.\n\n\n\n\n\n",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 0,
-        "y": 3
-      },
-      "id": 117,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Ops and Successful Ops",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "When an exception is caught and counted in a scenario, a specially named metric is emited which includes a simplified name of the error type.\nEach of these metrics is created as needed in the NoSQLBench runtime.\n\nThese metrics are formated with a name pattern of `errorcounts.NAME` where NAME is the simple name\nof the exception class which was caught during the operation. For example, For an activity\nnamed foo (with alias=foo), you would expect an exception named 'FooTimeoutException' to be shown\nwith a metric name of ...`foo.errorcounts.FooTimeoutException`\n\n\n\n\n",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 6,
-        "y": 3
-      },
-      "id": 118,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Error Counts",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "The service time distribution is an HDR histogram that represents the time elapsed from when an operation is submitted for execution to when its result has been received.\n\nFrom the vantage point of the NoSQLBench runtime, this is a client-side metric. Thus, the service time captures the processing time that an application would see, including driver logic, wire time (transport), and server-side processing. \n\nThis metric does not include the waittime or the responsetime metrics. These metrics are only meaningful (and provided) when a `cyclerate=` is provided to an activity. When computing the responsetime metric, the servicetime is added to the waittime for a given operation.\n",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 12,
-        "y": 3
-      },
-      "id": 119,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Service Time Distribution",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "The tries distribution is an HDR histogram which represents how many times an operation was submitted. In a well balanced system,\ntries should be 1 across the board.\n\nEvery operation which is executed within NoSQLBench should have a `tries` metric. For example, with CQL, the number of times an operation is submitted\nbefore it is succesful is ideally 1. If you are overloading your target system, thus forcing resource contention, you may see operations timeout.\n\nBy default, NoSQLBench will try up to 10 times to submit operations before giving up and throwing an error for an operation.\n\nThe tries metric can be used as a low-noise indicator of system saturation. For example, if you are running a system marginally\nbeyond its capacity, the tries for operations will go above 1 at the higher percentiles such as P99. If you increase the load even further, more retries\nwill be needed and less work will be completed, thus showing higher retries at even lower percentiles, like P95, for example.\n\nAs such, you can use the tries metric as an indicator of relative saturation.",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 18,
-        "y": 3
-      },
-      "id": 120,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Op Tries Distribution",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "This panel shows the P75 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 0,
-        "y": 6
-      },
-      "id": 121,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "P75 NB Internals",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "This panel shows the P99 service times for the internal stages of NoSQLBench processing. It provides a sanity check to ensure that the client processing time is low and predictable. \n\nIf there are spikes in this data, then you are likely trying to run your workloads on insufficient client hardware. In order to ensure high fidelity results in the other metrics, the client\nneeds to be capable of driving the workload without saturating or introducing signifcant local resource contention.\n\n- **read-input** - the time it takes for a worker thread to acquire a stride (range of cycles) for execution.\n- **bind** - the time it takes to convert a cycle value into a set of fields for us in an operation.\n- **execute** - the time it takes to submit work to a protocol-specific driver.",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 6,
-        "y": 6
-      },
-      "id": 122,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "P99 NB Internals",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "This panel simply breaks out the service time range in a simpler view. This is a good metric to look at when you want to know what the best and worse case value is for any given histogram interval.\n\nThese values come from a discrete HDR histogram reservoir. They are the actual best and worst service times, unaffected by time-decaying reservoir logic.\n",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 12,
-        "y": 6
-      },
-      "id": 123,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Service Time Range",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "content": "This is a simple visual reference for the cycle count within each activity. This makes it easy to see the relative progress of an activity over time.",
-      "datasource": null,
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 18,
-        "y": 6
-      },
-      "id": 124,
-      "mode": "markdown",
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Cycle Count",
-      "transparent": true,
-      "type": "text"
-    },
-    {
-      "collapsed": false,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 9
-      },
-      "id": 91,
-      "panels": [],
-      "title": "NoSQLBench Metrics",
-      "type": "row"
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 0,
-        "y": 10
-      },
-      "hiddenSeries": false,
-      "id": 95,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 5,
-      "points": false,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "result{type=\"avg_rate\",avg_of=\"1m\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-allops",
-          "refId": "C"
-        },
-        {
-          "expr": "result_success{type=\"avg_rate\",avg_of=\"1m\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-okops",
-          "refId": "A"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "Ops and Successful Ops",
-      "tooltip": {
-        "shared": true,
-        "sort": 0,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": "0",
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 6,
-        "y": 10
-      },
-      "hiddenSeries": false,
-      "id": 93,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": true,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "connected",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 5,
-      "points": false,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "{__name__=~\"errorcounts.*\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-{{error}}",
-          "refId": "B"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "Error Counts",
-      "tooltip": {
-        "shared": true,
-        "sort": 2,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": "0",
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 12,
-        "y": 10
-      },
-      "hiddenSeries": false,
-      "id": 97,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "rightSide": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 5,
-      "points": false,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "result_success{type=\"pctile\"}",
-          "hide": false,
-          "interval": "",
-          "legendFormat": "{{alias}}-p{{pctile}}",
-          "refId": "B"
-        },
-        {
-          "expr": "cycles_servicetime{type=\"pctile\"}",
-          "hide": true,
-          "interval": "",
-          "legendFormat": "{{alias}}-{{pctile}}",
-          "refId": "A"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "service time distribution",
-      "tooltip": {
-        "shared": true,
-        "sort": 2,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "format": "ns",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 18,
-        "y": 10
-      },
-      "hiddenSeries": false,
-      "id": 98,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 5,
-      "points": false,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "tries{type=\"pctile\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-p{{pctile}}",
-          "refId": "A"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "op tries distribution",
-      "tooltip": {
-        "shared": true,
-        "sort": 2,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 0,
-        "y": 16
-      },
-      "hiddenSeries": false,
-      "id": 99,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 1,
-      "points": true,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"75\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}",
-          "refId": "A"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "p75 client overhead",
-      "tooltip": {
-        "shared": true,
-        "sort": 2,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "decimals": null,
-          "format": "ns",
-          "label": null,
-          "logBase": 10,
-          "max": null,
-          "min": "0",
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 6,
-        "y": 16
-      },
-      "hiddenSeries": false,
-      "id": 111,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 1,
-      "points": true,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "{__name__=~\"read_input|bind|execute\",type=\"pctile\",pctile=\"99\"}",
-          "format": "time_series",
-          "hide": false,
-          "instant": false,
-          "interval": "",
-          "intervalFactor": 1,
-          "legendFormat": "{{alias}}-{{__name__}}-p{{pctile}}",
-          "refId": "C"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "p99 client overhead",
-      "tooltip": {
-        "shared": true,
-        "sort": 2,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "decimals": null,
-          "format": "ns",
-          "label": null,
-          "logBase": 10,
-          "max": null,
-          "min": "0",
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 2,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 12,
-        "y": 16
-      },
-      "hiddenSeries": false,
-      "id": 109,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 2,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 5,
-      "points": false,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "result_success{type=\"pctile\",pctile=\"0\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-min",
-          "refId": "B"
-        },
-        {
-          "expr": "result_success{type=\"pctile\",pctile=\"100\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-max",
-          "refId": "A"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "service time range",
-      "tooltip": {
-        "shared": true,
-        "sort": 2,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "format": "ns",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    },
-    {
-      "aliasColors": {},
-      "bars": false,
-      "dashLength": 10,
-      "dashes": false,
-      "datasource": "prometheus",
-      "fieldConfig": {
-        "defaults": {
-          "custom": {}
-        },
-        "overrides": []
-      },
-      "fill": 1,
-      "fillGradient": 0,
-      "gridPos": {
-        "h": 6,
-        "w": 6,
-        "x": 18,
-        "y": 16
-      },
-      "hiddenSeries": false,
-      "id": 113,
-      "legend": {
-        "avg": false,
-        "current": false,
-        "max": false,
-        "min": false,
-        "show": false,
-        "total": false,
-        "values": false
-      },
-      "lines": true,
-      "linewidth": 1,
-      "links": [],
-      "nullPointMode": "null",
-      "options": {
-        "dataLinks": []
-      },
-      "percentage": false,
-      "pointradius": 5,
-      "points": false,
-      "renderer": "flot",
-      "seriesOverrides": [],
-      "spaceLength": 10,
-      "stack": false,
-      "steppedLine": false,
-      "targets": [
-        {
-          "expr": "cycles_servicetime{type=\"counter\"}",
-          "interval": "",
-          "legendFormat": "{{alias}}-count",
-          "refId": "C"
-        }
-      ],
-      "thresholds": [],
-      "timeFrom": null,
-      "timeRegions": [],
-      "timeShift": null,
-      "title": "Cycle Count",
-      "tooltip": {
-        "shared": true,
-        "sort": 0,
-        "value_type": "individual"
-      },
-      "transparent": true,
-      "type": "graph",
-      "xaxis": {
-        "buckets": null,
-        "mode": "time",
-        "name": null,
-        "show": true,
-        "values": []
-      },
-      "yaxes": [
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        },
-        {
-          "format": "short",
-          "label": null,
-          "logBase": 1,
-          "max": null,
-          "min": null,
-          "show": true
-        }
-      ],
-      "yaxis": {
-        "align": false,
-        "alignLevel": null
-      }
-    }
-  ],
-  "refresh": false,
-  "schemaVersion": 25,
-  "style": "dark",
-  "tags": [
-    "dse"
-  ],
-  "templating": {
-    "list": []
-  },
-  "time": {
-    "from": "now-5m",
-    "to": "now"
-  },
-  "timepicker": {
-    "refresh_intervals": [
-      "10s",
-      "30s",
-      "1m",
-      "5m",
-      "15m",
-      "30m",
-      "1h",
-      "2h",
-      "1d"
-    ],
-    "time_options": [
-      "5m",
-      "15m",
-      "1h",
-      "6h",
-      "12h",
-      "24h",
-      "2d",
-      "7d",
-      "30d"
-    ]
-  },
-  "timezone": "",
-  "title": "NoSQLBench",
-  "uid": "aIIX1f6Wz",
-  "version": 3
-}
-}
diff --git a/engine-docs/pom.xml b/engine-docs/pom.xml
index 1044de514..69eb64fda 100644
--- a/engine-docs/pom.xml
+++ b/engine-docs/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <artifactId>mvn-defaults</artifactId>
     <groupId>io.nosqlbench</groupId>
-    <version>3.12.160-SNAPSHOT</version>
+    <version>4.15.5-SNAPSHOT</version>
     <relativePath>../mvn-defaults</relativePath>
   </parent>
 
@@ -28,7 +28,7 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>docsys</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
   </dependencies>
diff --git a/engine-extensions/pom.xml b/engine-extensions/pom.xml
index afd0d9a16..d0bbe0dfe 100644
--- a/engine-extensions/pom.xml
+++ b/engine-extensions/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -22,7 +22,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/engine-rest/pom.xml b/engine-rest/pom.xml
index d1d8b01c6..a916876d5 100644
--- a/engine-rest/pom.xml
+++ b/engine-rest/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -47,7 +47,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>engine-cli</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java
index ccf36ce0a..e72d2d0d7 100644
--- a/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java
+++ b/engine-rest/src/main/java/io/nosqlbench/engine/rest/resources/ScenarioExecutorEndpoint.java
@@ -108,8 +108,8 @@ public class ScenarioExecutorEndpoint implements WebServiceObject {
                 "disabled",
                 false,
                 true,
-                false
-        );
+                false,
+                cmdList.toString());
 
         scenario.addScriptText(buffer.getParsedScript());
 
diff --git a/mvn-defaults/pom.xml b/mvn-defaults/pom.xml
index f0c771c23..813c07559 100644
--- a/mvn-defaults/pom.xml
+++ b/mvn-defaults/pom.xml
@@ -3,7 +3,7 @@
 
   <groupId>io.nosqlbench</groupId>
   <artifactId>mvn-defaults</artifactId>
-  <version>3.12.160-SNAPSHOT</version>
+  <version>4.15.5-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <properties>
@@ -11,10 +11,7 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <javadoc.name>nosqlbench</javadoc.name>
 
-    <java.target.version>11</java.target.version>
-
     <!-- properties for package versions -->
-    <antlr4.version>4.8</antlr4.version>
     <ascii.data.version>1.2.0</ascii.data.version>
     <commons.codec.version>1.14</commons.codec.version>
     <commons.compress.version>1.20</commons.compress.version>
@@ -323,7 +320,7 @@
       <dependency>
         <groupId>org.antlr</groupId>
         <artifactId>antlr4-runtime</artifactId>
-        <version>${antlr4.version}</version>
+        <version>4.8</version>
       </dependency>
 
       <dependency>
@@ -504,8 +501,8 @@
         <configuration>
           <debug>true</debug>
           <!--                    <release>${java.target.version}</release>-->
-          <source>11</source>
-          <target>11</target>
+          <source>15</source>
+          <target>15</target>
           <!--                    <compilerArgs>-->
           <!--                        &#45;&#45;enable-preview-->
           <!--                    </compilerArgs>-->
diff --git a/nb-annotations/pom.xml b/nb-annotations/pom.xml
index b7921e8e2..878b6d3a6 100644
--- a/nb-annotations/pom.xml
+++ b/nb-annotations/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
diff --git a/nb-api/pom.xml b/nb-api/pom.xml
index 1d4853a47..e6ffe3f7b 100644
--- a/nb-api/pom.xml
+++ b/nb-api/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>mvn-defaults</artifactId>
     <groupId>io.nosqlbench</groupId>
-    <version>3.12.160-SNAPSHOT</version>
+    <version>4.15.5-SNAPSHOT</version>
     <relativePath>../mvn-defaults</relativePath>
   </parent>
 
@@ -31,7 +31,7 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>nb-annotations</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java
index 3d2febfff..728e20ada 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Annotation.java
@@ -1,7 +1,5 @@
 package io.nosqlbench.nb.api.annotations;
 
-import io.nosqlbench.nb.api.Layer;
-
 import java.util.Map;
 
 /**
@@ -73,4 +71,12 @@ public interface Annotation {
         return new AnnotationBuilder();
     }
 
+    /**
+     * This should return {@link Span#interval} if the span of time is not an instant, and
+     * {@link Span#instant}, otherwise.
+     */
+    Span getSpan();
+
+    String asJson();
+
 }
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java
index 4bc83d516..fa8ecc510 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/AnnotationBuilder.java
@@ -1,8 +1,8 @@
 package io.nosqlbench.nb.api.annotations;
 
-import io.nosqlbench.nb.api.Layer;
-
+import java.time.ZoneId;
 import java.util.LinkedHashMap;
+import java.util.TimeZone;
 
 public class AnnotationBuilder implements BuilderFacets.All {
     private String session;
@@ -11,6 +11,7 @@ public class AnnotationBuilder implements BuilderFacets.All {
     private final LinkedHashMap<String, String> labels = new LinkedHashMap<>();
     private final LinkedHashMap<String, String> details = new LinkedHashMap<>();
     private Layer layer;
+    private final TimeZone timezone = TimeZone.getTimeZone(ZoneId.of("GMT"));
 
     @Override
     public AnnotationBuilder layer(Layer layer) {
@@ -50,6 +51,7 @@ public class AnnotationBuilder implements BuilderFacets.All {
         return this;
     }
 
+
     @Override
     public AnnotationBuilder label(String name, String value) {
         this.labels.put(name, value);
@@ -64,7 +66,7 @@ public class AnnotationBuilder implements BuilderFacets.All {
 
     @Override
     public Annotation build() {
-        return new MutableAnnotation(session, layer, start, end, labels, details).asReadOnly();
+        return new MutableAnnotation(timezone, session, layer, start, end, labels, details).asReadOnly();
 
     }
 
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java
index ebee085b0..466613ec6 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/BuilderFacets.java
@@ -1,7 +1,5 @@
 package io.nosqlbench.nb.api.annotations;
 
-import io.nosqlbench.nb.api.Layer;
-
 public interface BuilderFacets {
 
     interface All extends
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Layer.java
similarity index 73%
rename from nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Layer.java
index 459358995..1264ac94d 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/Layer.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Layer.java
@@ -1,4 +1,4 @@
-package io.nosqlbench.nb.api;
+package io.nosqlbench.nb.api.annotations;
 
 public enum Layer {
 
@@ -10,13 +10,13 @@ public enum Layer {
 
     /**
      * Events which describe scenario execution, such as parameters,
-     * lifecycle events, and critical errors
+     * lifecycle events, interruptions, and critical errors
      */
     Scenario,
 
     /**
-     * Events which describe scripting details, such as extensions,
-     * sending programmatic annotations, or critical errors
+     * Events which describe scripting details, such as commands,
+     * extension usages, sending programmatic annotations, or critical errors
      */
     Script,
 
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java
index eea57e7f9..95f1a0df0 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/MutableAnnotation.java
@@ -1,40 +1,66 @@
 package io.nosqlbench.nb.api.annotations;
 
-import io.nosqlbench.nb.api.Layer;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.Expose;
 
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.*;
 
 public class MutableAnnotation implements Annotation {
 
+    private final static Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
     private String session = "SESSION_UNNAMED";
+
+    @Expose
     private Layer layer;
+
+    @Expose
     private long start = 0L;
+
+    @Expose
     private long end = 0L;
+
+    @Expose
     private Map<String, String> labels = new LinkedHashMap<>();
+
+    @Expose
     private Map<String, String> details = new LinkedHashMap<>();
 
-    public MutableAnnotation(String session, Layer layer, long start, long end, LinkedHashMap<String, String> labels,
-                             LinkedHashMap<String, String> details) {
-        this.session = session;
-        this.layer = layer;
-        this.start = start;
-        this.end = end;
-        this.details = details;
-        this.labels = labels;
+    private final ZoneId zoneid = ZoneId.of("GMT");
+
+    public MutableAnnotation(
+            TimeZone timezone,
+            String session,
+            Layer layer,
+            long start,
+            long end,
+            LinkedHashMap<String, String> labels,
+            LinkedHashMap<String, String> details) {
+        setLabels(labels);
+        setSession(session);
+        setLayer(layer);
+        setStart(start);
+        setEnd(end);
+        setDetails(details);
+        labels.put("appname", "nosqlbench");
     }
 
     public void setSession(String sessionName) {
         this.session = sessionName;
+        this.labels.put("session", sessionName);
     }
 
     public void setStart(long intervalStart) {
         this.start = intervalStart;
+        this.labels.put("span", getSpan().toString());
     }
 
     public void setEnd(long intervalEnd) {
         this.end = intervalEnd;
+        this.labels.put("span", getSpan().toString());
     }
 
     public void setLabels(Map<String, String> labels) {
@@ -72,6 +98,9 @@ public class MutableAnnotation implements Annotation {
 
     @Override
     public Map<String, String> getLabels() {
+//        if (!labels.containsKey("span")) {
+//            labels.put("span",getSpan().toString());
+//        }
         return labels;
     }
 
@@ -85,11 +114,17 @@ public class MutableAnnotation implements Annotation {
         StringBuilder sb = new StringBuilder();
         sb.append("session: ").append(getSession()).append("\n");
 
-        sb.append("[").append(new Date(getStart()));
+        ZonedDateTime startTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(getStart()), zoneid);
+        ZonedDateTime endTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(getStart()), zoneid);
+
+
+        sb.append("[").append(startTime);
         if (getStart() != getEnd()) {
-            sb.append(" - ").append(new Date(getEnd()));
+            sb.append(" - ").append(endTime);
         }
         sb.append("]\n");
+
+        sb.append("span:").append(getSpan()).append("\n");
         sb.append("details:\n");
         formatMap(sb, getDetails());
         sb.append("labels:\n");
@@ -114,8 +149,16 @@ public class MutableAnnotation implements Annotation {
         });
     }
 
-
     public Annotation asReadOnly() {
         return this;
     }
+
+    public Span getSpan() {
+        return (getStart() == getEnd()) ? Span.instant : Span.interval;
+    }
+
+    public String asJson() {
+        String inlineForm = gson.toJson(this);
+        return inlineForm;
+    }
 }
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java
new file mode 100644
index 000000000..d13e80b14
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/annotations/Span.java
@@ -0,0 +1,12 @@
+package io.nosqlbench.nb.api.annotations;
+
+public enum Span {
+    /**
+     * A span of time of size zero.
+     */
+    instant,
+    /**
+     * A span in time for which the start and end are different.
+     */
+    interval
+}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java
new file mode 100644
index 000000000..3e465029b
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/Labeled.java
@@ -0,0 +1,7 @@
+package io.nosqlbench.nb.api.labels;
+
+import java.util.Map;
+
+public interface Labeled {
+    Map<String, String> getLabels();
+}
diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java
new file mode 100644
index 000000000..dc16e40be
--- /dev/null
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/labels/MutableLabels.java
@@ -0,0 +1,19 @@
+package io.nosqlbench.nb.api.labels;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MutableLabels extends HashMap<String, String> implements Labeled {
+
+    public static MutableLabels fromMaps(Map<String, String> entries) {
+        MutableLabels mutableLabels = new MutableLabels();
+        mutableLabels.putAll(entries);
+        return mutableLabels;
+    }
+
+
+    @Override
+    public Map<String, String> getLabels() {
+        return this;
+    }
+}
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java
index 1a7430f03..de77b36fc 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/annotations/AnnotationBuilderTest.java
@@ -1,41 +1,48 @@
 package io.nosqlbench.nb.api.annotations;
 
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
 public class AnnotationBuilderTest {
 
     private static final long time = 1600000000000L;
 
-    // Disabled until the feature is properly merged into main
-//    @Test
-//    public void testBasicAnnotation() {
-//
-//        Annotation an1 = Annotation.newBuilder()
-//                .session("test-session")
-//                .at(time)
-//                .layer(Layer.Scenario)
-//                .label("labelka", "labelvb")
-//                .label("labelkc", "labelvd")
-//                .detail("detailk1", "detailv1")
-//                .detail("detailk2", "detailv21\ndetailv22")
-//                .detail("detailk3", "v1\nv2\nv3\n")
-//                .build();
-//
-//        String represented = an1.toString();
-//        assertThat(represented).isEqualTo("session: test-session\n" +
-//                "[Sun Sep 13 07:26:40 CDT 2020]\n" +
-//                "details:\n" +
-//                " detailk1: detailv1\n" +
-//                " detailk2: \n" +
-//                "  detailv21\n" +
-//                "  detailv22\n" +
-//                " detailk3: \n" +
-//                "  v1\n" +
-//                "  v2\n" +
-//                "  v3\n" +
-//                "labels:\n" +
-//                " layer: Scenario\n" +
-//                " labelka: labelvb\n" +
-//                " labelkc: labelvd\n");
-//
-//    }
+    @Test
+    public void testBasicAnnotation() {
+
+        Annotation an1 = Annotation.newBuilder()
+                .session("test-session")
+                .at(time)
+                .layer(Layer.Scenario)
+                .label("labelka", "labelvb")
+                .label("labelkc", "labelvd")
+                .detail("detailk1", "detailv1")
+                .detail("detailk2", "detailv21\ndetailv22")
+                .detail("detailk3", "v1\nv2\nv3\n")
+                .build();
+
+        String represented = an1.toString();
+        assertThat(represented).isEqualTo("session: test-session\n" +
+                "[2020-09-13T12:26:40Z[GMT]]\n" +
+                "span:instant\n" +
+                "details:\n" +
+                " detailk1: detailv1\n" +
+                " detailk2: \n" +
+                "  detailv21\n" +
+                "  detailv22\n" +
+                " detailk3: \n" +
+                "  v1\n" +
+                "  v2\n" +
+                "  v3\n" +
+                "labels:\n" +
+                " layer: Scenario\n" +
+                " labelka: labelvb\n" +
+                " labelkc: labelvd\n" +
+                " session: test-session\n" +
+                " span: instant\n" +
+                " appname: nosqlbench\n");
+
+    }
 
 }
\ No newline at end of file
diff --git a/nb/build-bin.sh b/nb/build-bin.sh
index 4689448d2..d0acc8183 100755
--- a/nb/build-bin.sh
+++ b/nb/build-bin.sh
@@ -29,7 +29,7 @@ fi
 
 rsync -av appimage/skel/ "${APPDIR}/"
 cp target/nb.jar "${APPDIR}/usr/bin/nb.jar"
-JAVA_VERSION="14"
+JAVA_VERSION="15"
 
 mkdir -p "${APPDIR}/usr/bin/jre"
 
diff --git a/nb/pom.xml b/nb/pom.xml
index e90c14f99..21eec7188 100644
--- a/nb/pom.xml
+++ b/nb/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>mvn-defaults</artifactId>
     <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
     <relativePath>../mvn-defaults</relativePath>
   </parent>
 
@@ -24,31 +24,31 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-rest</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-cli</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-docs</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-core</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>engine-extensions</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <!--        <dependency>-->
@@ -60,67 +60,67 @@
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-web</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-kafka</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-stdout</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-diag</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-tcp</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
       <dependency>
           <groupId>io.nosqlbench</groupId>
           <artifactId>driver-http</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
       </dependency>
 
       <dependency>
           <groupId>io.nosqlbench</groupId>
           <artifactId>driver-jmx</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
       </dependency>
 
       <dependency>
           <groupId>io.nosqlbench</groupId>
           <artifactId>driver-dsegraph-shaded</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
       </dependency>
 
       <dependency>
           <groupId>io.nosqlbench</groupId>
           <artifactId>driver-cql-shaded</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
       </dependency>
 
       <dependency>
           <groupId>io.nosqlbench</groupId>
       <artifactId>driver-cqlverify</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>io.nosqlbench</groupId>
       <artifactId>driver-mongodb</artifactId>
-      <version>3.12.160-SNAPSHOT</version>
+      <version>4.15.5-SNAPSHOT</version>
     </dependency>
 
     <!--        <dependency>-->
@@ -244,7 +244,7 @@
         <dependency>
           <groupId>io.nosqlbench</groupId>
           <artifactId>driver-cqld4</artifactId>
-          <version>3.12.157-SNAPSHOT</version>
+          <version>4.0.0-SNAPSHOT</version>
         </dependency>
       </dependencies>
     </profile>
@@ -257,7 +257,7 @@
         <dependency>
           <groupId>io.nosqlbench</groupId>
           <artifactId>driver-mongodb</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
       </dependencies>
     </profile>
diff --git a/pom.xml b/pom.xml
index 21183db09..4c7b02813 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>mvn-defaults</relativePath>
     </parent>
 
diff --git a/scripts/release-notes.sh b/scripts/release-notes.sh
index a1cdecd12..9614393b7 100755
--- a/scripts/release-notes.sh
+++ b/scripts/release-notes.sh
@@ -2,7 +2,7 @@
 set -e
 #RELEASE_NOTES_FILE=${RELEASE_NOTES_FILE:?RELEASE_NOTES_FILE must be provided}
 
-git log --oneline --decorate --max-count=1000 main > /tmp/gitlog_main
+git log --oneline --decorate --max-count=1000 nb4-rc1 > /tmp/gitlog_main
 
 readarray lines < /tmp/gitlog_main
 for line in "${lines[@]}"
diff --git a/virtdata-api/pom.xml b/virtdata-api/pom.xml
index a6e944b9d..2afa2fac9 100644
--- a/virtdata-api/pom.xml
+++ b/virtdata-api/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>io.nosqlbench</groupId>
         <artifactId>mvn-defaults</artifactId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -23,14 +23,14 @@
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
             <artifactId>nb-api</artifactId>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-lang</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
 
diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml
index c7a86f3b1..d97c18851 100644
--- a/virtdata-lang/pom.xml
+++ b/virtdata-lang/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml
index 59f52c38e..a42659aee 100644
--- a/virtdata-lib-basics/pom.xml
+++ b/virtdata-lib-basics/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -20,7 +20,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/virtdata-lib-curves4/pom.xml b/virtdata-lib-curves4/pom.xml
index 115f5f4e2..ad6b1a345 100644
--- a/virtdata-lib-curves4/pom.xml
+++ b/virtdata-lib-curves4/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -22,13 +22,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-lib-basics</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/virtdata-lib-random/pom.xml b/virtdata-lib-random/pom.xml
index 03180bb5c..856b8a00f 100644
--- a/virtdata-lib-random/pom.xml
+++ b/virtdata-lib-random/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -20,13 +20,13 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-lib-basics</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/virtdata-lib-realer/pom.xml b/virtdata-lib-realer/pom.xml
index 142a532a9..17e46c584 100644
--- a/virtdata-lib-realer/pom.xml
+++ b/virtdata-lib-realer/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -20,7 +20,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-lib-basics</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/virtdata-realdata/pom.xml b/virtdata-realdata/pom.xml
index 8ebba9b05..73352bfe9 100644
--- a/virtdata-realdata/pom.xml
+++ b/virtdata-realdata/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -18,7 +18,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-api</artifactId>
-          <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
diff --git a/virtdata-userlibs/pom.xml b/virtdata-userlibs/pom.xml
index f34cb4e79..2ee6cd470 100644
--- a/virtdata-userlibs/pom.xml
+++ b/virtdata-userlibs/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>mvn-defaults</artifactId>
         <groupId>io.nosqlbench</groupId>
-        <version>3.12.160-SNAPSHOT</version>
+        <version>4.15.5-SNAPSHOT</version>
         <relativePath>../mvn-defaults</relativePath>
     </parent>
 
@@ -18,36 +18,36 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-realdata</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-lib-realer</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-api</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>virtdata-lib-random</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
             <artifactId>virtdata-lib-basics</artifactId>
         </dependency>
 
         <dependency>
             <groupId>io.nosqlbench</groupId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
             <artifactId>virtdata-lib-curves4</artifactId>
         </dependency>
 
@@ -55,7 +55,7 @@
         <dependency>
             <groupId>io.nosqlbench</groupId>
             <artifactId>docsys</artifactId>
-            <version>3.12.160-SNAPSHOT</version>
+          <version>4.15.5-SNAPSHOT</version>
         </dependency>
 
     </dependencies>