diff --git a/views/ngXosViews/truckroll/bower.json b/views/ngXosViews/truckroll/bower.json
index 4eddd1e..c0f3265 100644
--- a/views/ngXosViews/truckroll/bower.json
+++ b/views/ngXosViews/truckroll/bower.json
@@ -15,6 +15,7 @@
     "tests"
   ],
   "dependencies": {
+    "angular-animate": "~1.5.0"
   },
   "devDependencies": {
     "jquery": "~2.1.4",
@@ -25,5 +26,8 @@
     "angular-resource": "~1.4.7",
     "ng-lodash": "~0.3.0",
     "bootstrap-css": "~3.3.6"
+  },
+  "resolutions": {
+    "angular": "~1.4.7"
   }
 }
diff --git a/views/ngXosViews/truckroll/env/default.js b/views/ngXosViews/truckroll/env/default.js
index d1e41fd..2236839 100644
--- a/views/ngXosViews/truckroll/env/default.js
+++ b/views/ngXosViews/truckroll/env/default.js
@@ -8,6 +8,6 @@
 
 module.exports = {
   host: 'http://apt088.apt.emulab.net:9999/',
-  xoscsrftoken: 'AcDUMSMLenXesxkAmRRfuDrrcm0nfK2R',
-  xossessionid: 'vpfim02rcpr3fcp4uf37l4ffilavr6x7'
+  xoscsrftoken: 'sBLEU3jBpCFVUSBrxZ3pFeGFV50LR1GE',
+  xossessionid: 'n73jta6yf81hrgzmmut04vuens090kfc'
 };
diff --git a/views/ngXosViews/truckroll/src/css/truckroll.css b/views/ngXosViews/truckroll/src/css/truckroll.css
index 4ff5ccf..8ac0369 100644
--- a/views/ngXosViews/truckroll/src/css/truckroll.css
+++ b/views/ngXosViews/truckroll/src/css/truckroll.css
@@ -2,6 +2,39 @@
   margin-top: 20px;
 }
 
+/* ANIMATIONS */
+.animate-vertical.ng-hide-add {
+  animation:0.5s slideOutDown ease-in-out;
+}
+.animate-vertical.ng-hide-remove {
+  animation:0.5s slideInUp ease-in-out;
+}
+
+@keyframes slideInUp {
+  from {
+    transform: translate3d(0, 100%, 0);
+    opacity: 0;
+  }
+
+  to {
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+
+@keyframes slideOutDown {
+  from {
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
 /* LOADER */
 .loader {
   font-size: 10px;
diff --git a/views/ngXosViews/truckroll/src/index.html b/views/ngXosViews/truckroll/src/index.html
index 0b6606e..048c112 100644
--- a/views/ngXosViews/truckroll/src/index.html
+++ b/views/ngXosViews/truckroll/src/index.html
@@ -20,6 +20,7 @@
 <script src="vendor/angular-resource/angular-resource.js"></script>
 <script src="vendor/ng-lodash/build/ng-lodash.js"></script>
 <script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
+<script src="vendor/angular-animate/angular-animate.js"></script>
 <!-- endbower --><!-- endjs -->
 <!-- inject:js -->
 <script src="/xosHelpers/src/xosHelpers.module.js"></script>
diff --git a/views/ngXosViews/truckroll/src/js/main.js b/views/ngXosViews/truckroll/src/js/main.js
index 514126e..8f43c35 100644
--- a/views/ngXosViews/truckroll/src/js/main.js
+++ b/views/ngXosViews/truckroll/src/js/main.js
@@ -3,6 +3,7 @@
 angular.module('xos.truckroll', [
   'ngResource',
   'ngCookies',
+  'ngAnimate',
   'ngLodash',
   'ui.router',
   'xos.helpers'
@@ -58,16 +59,16 @@
         Truckroll.get({id: id}).$promise
         .then((testResult) => {
           // if error
-          if(testResult.backend_status.indexOf('2') >= 0 || (testResult.result_code && testResult.result_code.indexOf('2') >= 0)){
-            this.truckroll = angular.copy(testResult);
-            this.loader = false;
-            // not deleting failed test for debugging
-          }
+          // or
           // if is synced
-          else if(testResult.is_synced){
+          if(
+              testResult.backend_status.indexOf('2') >= 0 ||
+              (testResult.result_code && testResult.result_code.indexOf('2') >= 0) ||
+              testResult.is_synced
+            ){
             this.truckroll = angular.copy(testResult);
-            Truckroll.delete({id: id});
             this.loader = false;
+            Truckroll.delete({id: id});
           }
           // else keep polling
           else{
diff --git a/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html b/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html
index 424cf26..f0c2dbe 100644
--- a/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html
+++ b/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html
@@ -1,6 +1,8 @@
 <div class="row">
-  <h2>Virtual Truck Roll</h2>
-  <p>Use this page to run test against your subscriber</p>
+  <div class="col-xs-12">
+    <h2>Virtual Truck Roll</h2>
+    <p>Use this page to run test against your subscriber</p>
+  </div>
 </div>
 <form ng-submit="vm.runTest()">
   <div class="row">
@@ -69,7 +71,10 @@
     <div class="col-xs-12" ng-show="!vm.loader">
       <button class="btn btn-success btn-block">Run test</button>
     </div>
-    <div class="col-xs-12" ng-show="vm.loader">
+  </div>
+</form>
+<div class="row">
+    <div class="col-xs-12 animate-vertical" ng-show="vm.loader">
       <div class="loader"></div>
     </div>
   </div>
@@ -93,10 +98,9 @@
   </div>
   <div class="row" ng-hide="!vm.truckroll.backend_status">
     <div class="col-xs-12">
-      <label>Result Code</label>
+      <label>Backend Status</label>
     </div>
     <div class="col-xs-12">
       <pre>{{vm.truckroll.backend_status}}</pre>
     </div>
-  </div>
-</form>
\ No newline at end of file
+  </div>
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosTruckroll.html b/xos/core/xoslib/dashboards/xosTruckroll.html
index e8bb216..ab289f2 100644
--- a/xos/core/xoslib/dashboards/xosTruckroll.html
+++ b/xos/core/xoslib/dashboards/xosTruckroll.html
@@ -10,5 +10,6 @@
 
 
 <!-- inject:js -->
+<script src="/static/js/vendor/xosTruckrollVendor.js"></script>
 <script src="/static/js/xosTruckroll.js"></script>
 <!-- endinject -->
diff --git a/xos/core/xoslib/static/css/xosTruckroll.css b/xos/core/xoslib/static/css/xosTruckroll.css
index 553215e..66136da 100644
--- a/xos/core/xoslib/static/css/xosTruckroll.css
+++ b/xos/core/xoslib/static/css/xosTruckroll.css
@@ -1 +1 @@
-.row+.row{margin-top:20px}.loader{font-size:10px;margin:0 auto;text-indent:-9999em;width:11em;height:11em;border-radius:50%;background:#fff;background:linear-gradient(to right,#fff 10%,rgba(255,255,255,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}.loader:before{width:50%;height:50%;background:#105e9e;border-radius:100% 0 0;position:absolute;top:0;left:0;content:''}.loader:after{background:#fff;width:75%;height:75%;border-radius:50%;content:'';margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
\ No newline at end of file
+.row+.row{margin-top:20px}.animate-vertical.ng-hide-add{animation:.5s slideOutDown ease-in-out}.animate-vertical.ng-hide-remove{animation:.5s slideInUp ease-in-out}@keyframes slideInUp{from{transform:translate3d(0,100%,0);opacity:0}to{transform:translate3d(0,0,0);opacity:1}}@keyframes slideOutDown{from{transform:translate3d(0,0,0);opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.loader{font-size:10px;margin:0 auto;text-indent:-9999em;width:11em;height:11em;border-radius:50%;background:#fff;background:linear-gradient(to right,#fff 10%,rgba(255,255,255,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}.loader:before{width:50%;height:50%;background:#105e9e;border-radius:100% 0 0;position:absolute;top:0;left:0;content:''}.loader:after{background:#fff;width:75%;height:75%;border-radius:50%;content:'';margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/vendor/xosTruckrollVendor.js b/xos/core/xoslib/static/js/vendor/xosTruckrollVendor.js
new file mode 100644
index 0000000..81b0d27
--- /dev/null
+++ b/xos/core/xoslib/static/js/vendor/xosTruckrollVendor.js
@@ -0,0 +1 @@
+!function(n,t,e){"use strict";function a(n,t,e){if(!n)throw gn("areq","Argument '{0}' is {1}",t||"?",e||"required");return n}function r(n,t){return n||t?n?t?(K(n)&&(n=n.join(" ")),K(t)&&(t=t.join(" ")),n+" "+t):n:t:""}function i(n){var t={};return n&&(n.to||n.from)&&(t.to=n.to,t.from=n.from),t}function o(n,t,e){var a="";return n=K(n)?n:n&&Q(n)&&n.length?n.split(/\s+/):[],J(n,function(n,r){n&&n.length>0&&(a+=r>0?" ":"",a+=e?t+n:n+t)}),a}function s(n,t){var e=n.indexOf(t);t>=0&&n.splice(e,1)}function u(n){if(n instanceof B)switch(n.length){case 0:return[];case 1:if(n[0].nodeType===X)return n;break;default:return B(l(n))}return n.nodeType===X?B(n):void 0}function l(n){if(!n[0])return n;for(var t=0;t<n.length;t++){var e=n[t];if(e.nodeType==X)return e}}function c(n,t,e){J(t,function(t){n.addClass(t,e)})}function f(n,t,e){J(t,function(t){n.removeClass(t,e)})}function m(n){return function(t,e){e.addClass&&(c(n,t,e.addClass),e.addClass=null),e.removeClass&&(f(n,t,e.removeClass),e.removeClass=null)}}function v(n){if(n=n||{},!n.$$prepared){var t=n.domOperation||q;n.domOperation=function(){n.$$domOperationFired=!0,t(),t=q},n.$$prepared=!0}return n}function d(n,t){p(n,t),h(n,t)}function p(n,t){t.from&&(n.css(t.from),t.from=null)}function h(n,t){t.to&&(n.css(t.to),t.to=null)}function g(n,t,e){var a=t.options||{},r=e.options||{},i=(a.addClass||"")+" "+(r.addClass||""),o=(a.removeClass||"")+" "+(r.removeClass||""),s=$(n.attr("class"),i,o);r.preparationClasses&&(a.preparationClasses=w(r.preparationClasses,a.preparationClasses),delete r.preparationClasses);var u=a.domOperation!==q?a.domOperation:null;return H(a,r),u&&(a.domOperation=u),s.addClass?a.addClass=s.addClass:a.addClass=null,s.removeClass?a.removeClass=s.removeClass:a.removeClass=null,t.addClass=a.addClass,t.removeClass=a.removeClass,a}function $(n,t,e){function a(n){Q(n)&&(n=n.split(" "));var t={};return J(n,function(n){n.length&&(t[n]=!0)}),t}var r=1,i=-1,o={};n=a(n),t=a(t),J(t,function(n,t){o[t]=r}),e=a(e),J(e,function(n,t){o[t]=o[t]===r?null:i});var s={addClass:"",removeClass:""};return J(o,function(t,e){var a,o;t===r?(a="addClass",o=!n[e]):t===i&&(a="removeClass",o=n[e]),o&&(s[a].length&&(s[a]+=" "),s[a]+=e)}),s}function C(n){return n instanceof t.element?n[0]:n}function y(n,t,e){var a="";t&&(a=o(t,_,!0)),e.addClass&&(a=w(a,o(e.addClass,Y))),e.removeClass&&(a=w(a,o(e.removeClass,Z))),a.length&&(e.preparationClasses=a,n.addClass(a))}function D(n,t){t.preparationClasses&&(n.removeClass(t.preparationClasses),t.preparationClasses=null),t.activeClasses&&(n.removeClass(t.activeClasses),t.activeClasses=null)}function b(n,t){var e=t?"-"+t+"s":"";return k(n,[pn,e]),[pn,e]}function A(n,t){var e=t?"paused":"",a=I+fn;return k(n,[a,e]),[a,e]}function k(n,t){var e=t[0],a=t[1];n.style[e]=a}function w(n,t){return n?t?n+" "+t:n:t}function T(n){return[dn,n+"s"]}function S(n,t){var e=t?vn:pn;return[e,n+"s"]}function j(n,t,e){var a=Object.create(null),r=n.getComputedStyle(t)||{};return J(e,function(n,t){var e=r[n];if(e){var i=e.charAt(0);("-"===i||"+"===i||i>=0)&&(e=x(e)),0===e&&(e=null),a[t]=e}}),a}function x(n){var t=0,e=n.split(/\s*,\s*/);return J(e,function(n){"s"==n.charAt(n.length-1)&&(n=n.substring(0,n.length-1)),n=parseFloat(n)||0,t=t?Math.max(n,t):n}),t}function O(n){return 0===n||null!=n}function P(n,t){var e=M,a=n+"s";return t?e+=on:a+=" linear all",[e,a]}function N(){var n=Object.create(null);return{flush:function(){n=Object.create(null)},count:function(t){var e=n[t];return e?e.total:0},get:function(t){var e=n[t];return e&&e.value},put:function(t,e){n[t]?n[t].total++:n[t]={total:1,value:e}}}}function F(n,t,e){J(e,function(e){n[e]=V(n[e])?n[e]:t.style.getPropertyValue(e)})}var M,E,I,R,q=t.noop,L=t.copy,H=t.extend,B=t.element,J=t.forEach,K=t.isArray,Q=t.isString,U=t.isObject,W=t.isUndefined,V=t.isDefined,z=t.isFunction,G=t.isElement,X=1,Y="-add",Z="-remove",_="ng-",nn="-active",tn="-prepare",en="ng-animate",an="$$ngAnimateChildren",rn="";W(n.ontransitionend)&&V(n.onwebkittransitionend)?(rn="-webkit-",M="WebkitTransition",E="webkitTransitionEnd transitionend"):(M="transition",E="transitionend"),W(n.onanimationend)&&V(n.onwebkitanimationend)?(rn="-webkit-",I="WebkitAnimation",R="webkitAnimationEnd animationend"):(I="animation",R="animationend");var on="Duration",sn="Property",un="Delay",ln="TimingFunction",cn="IterationCount",fn="PlayState",mn=9999,vn=I+un,dn=I+on,pn=M+un,hn=M+on,gn=t.$$minErr("ng"),$n=["$$rAF",function(n){function t(n){a=a.concat(n),e()}function e(){if(a.length){for(var t=a.shift(),i=0;i<t.length;i++)t[i]();r||n(function(){r||e()})}}var a,r;return a=t.queue=[],t.waitUntilQuiet=function(t){r&&r(),r=n(function(){r=null,t(),e()})},t}],Cn=["$interpolate",function(n){return{link:function(e,a,r){function i(n){n="on"===n||"true"===n,a.data(an,n)}var o=r.ngAnimateChildren;t.isString(o)&&0===o.length?a.data(an,!0):(i(n(o)(e)),r.$observe("ngAnimateChildren",i))}}}],yn="$$animateCss",Dn=1e3,bn=3,An=1.5,kn={transitionDuration:hn,transitionDelay:pn,transitionProperty:M+sn,animationDuration:dn,animationDelay:vn,animationIterationCount:I+cn},wn={transitionDuration:hn,transitionDelay:pn,animationDuration:dn,animationDelay:vn},Tn=["$animateProvider",function(n){var t=N(),e=N();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(n,a,r,u,l,c,f,g){function $(n,t){var e="$$ngAnimateParentKey",a=n.parentNode,r=a[e]||(a[e]=++H);return r+"-"+n.getAttribute("class")+"-"+t}function y(e,a,r,i){var o=t.get(r);return o||(o=j(n,e,i),"infinite"===o.animationIterationCount&&(o.animationIterationCount=1)),t.put(r,o),o}function D(r,i,s,u){var l;if(t.count(s)>0&&(l=e.get(s),!l)){var c=o(i,"-stagger");a.addClass(r,c),l=j(n,r,u),l.animationDuration=Math.max(l.animationDuration,0),l.transitionDuration=Math.max(l.transitionDuration,0),a.removeClass(r,c),e.put(s,l)}return l||{}}function w(n){B.push(n),f.waitUntilQuiet(function(){t.flush(),e.flush();for(var n=l(),a=0;a<B.length;a++)B[a](n);B.length=0})}function x(n,t,e){var a=y(n,t,e,kn),r=a.animationDelay,i=a.transitionDelay;return a.maxDelay=r&&i?Math.max(r,i):r||i,a.maxDuration=Math.max(a.animationDuration*a.animationIterationCount,a.transitionDuration),a}var N=m(a),H=0,B=[];return function(n,e){function l(){m()}function f(){m(!0)}function m(t){if(!(V||G&&z)){V=!0,z=!1,Q.$$skipPreparationClasses||a.removeClass(n,Cn),a.removeClass(n,Tn),A(W,!1),b(W,!1),J(cn,function(n){W.style[n[0]]=""}),N(n,Q),d(n,Q),Object.keys(U).length&&J(U,function(n,t){n?W.style.setProperty(t,n):W.style.removeProperty(t)}),Q.onDone&&Q.onDone(),dn&&dn.length&&n.off(dn.join(" "),H);var e=n.data(yn);e&&(u.cancel(e[0].timer),n.removeData(yn)),X&&X.complete(!t)}}function y(n){Hn.blockTransition&&b(W,n),Hn.blockKeyframeAnimation&&A(W,!!n)}function j(){return X=new r({end:l,cancel:f}),w(q),m(),{$$willAnimate:!1,start:function(){return X},end:l}}function H(n){n.stopPropagation();var t=n.originalEvent||n,e=t.$manualTimeStamp||Date.now(),a=parseFloat(t.elapsedTime.toFixed(bn));Math.max(e-un,0)>=an&&a>=rn&&(G=!0,m())}function B(){function t(){if(!V){if(y(!1),J(cn,function(n){var t=n[0],e=n[1];W.style[t]=e}),N(n,Q),a.addClass(n,Tn),Hn.recalculateTimingStyles){if(kn=W.className+" "+Cn,xn=$(W,kn),qn=x(W,kn,xn),Ln=qn.maxDelay,en=Math.max(Ln,0),rn=qn.maxDuration,0===rn)return void m();Hn.hasTransitions=qn.transitionDuration>0,Hn.hasAnimations=qn.animationDuration>0}if(Hn.applyAnimationDelay&&(Ln="boolean"!=typeof Q.delay&&O(Q.delay)?parseFloat(Q.delay):Ln,en=Math.max(Ln,0),qn.animationDelay=Ln,Bn=S(Ln,!0),cn.push(Bn),W.style[Bn[0]]=Bn[1]),an=en*Dn,on=rn*Dn,Q.easing){var t,r=Q.easing;Hn.hasTransitions&&(t=M+ln,cn.push([t,r]),W.style[t]=r),Hn.hasAnimations&&(t=I+ln,cn.push([t,r]),W.style[t]=r)}qn.transitionDuration&&dn.push(E),qn.animationDuration&&dn.push(R),un=Date.now();var i=an+An*on,o=un+i,s=n.data(yn)||[],l=!0;if(s.length){var c=s[0];l=o>c.expectedEndTime,l?u.cancel(c.timer):s.push(m)}if(l){var f=u(e,i,!1);s[0]={timer:f,expectedEndTime:o},s.push(m),n.data(yn,s)}dn.length&&n.on(dn.join(" "),H),Q.to&&(Q.cleanupStyles&&F(U,W,Object.keys(Q.to)),h(n,Q))}}function e(){var t=n.data(yn);if(t){for(var e=1;e<t.length;e++)t[e]();n.removeData(yn)}}if(!V){if(!W.parentNode)return void m();var r=function(n){if(G)z&&n&&(z=!1,m());else if(z=!n,qn.animationDuration){var t=A(W,z);z?cn.push(t):s(cn,t)}},i=In>0&&(qn.transitionDuration&&0===On.transitionDuration||qn.animationDuration&&0===On.animationDuration)&&Math.max(On.animationDelay,On.transitionDelay);i?u(t,Math.floor(i*In*Dn),!1):t(),tn.resume=function(){r(!0)},tn.pause=function(){r(!1)}}}var Q=e||{};Q.$$prepared||(Q=v(L(Q)));var U={},W=C(n);if(!W||!W.parentNode||!g.enabled())return j();var V,z,G,X,tn,en,an,rn,on,un,cn=[],fn=n.attr("class"),vn=i(Q),dn=[];if(0===Q.duration||!c.animations&&!c.transitions)return j();var pn=Q.event&&K(Q.event)?Q.event.join(" "):Q.event,hn=pn&&Q.structural,gn="",$n="";hn?gn=o(pn,_,!0):pn&&(gn=pn),Q.addClass&&($n+=o(Q.addClass,Y)),Q.removeClass&&($n.length&&($n+=" "),$n+=o(Q.removeClass,Z)),Q.applyClassesEarly&&$n.length&&N(n,Q);var Cn=[gn,$n].join(" ").trim(),kn=fn+" "+Cn,Tn=o(Cn,nn),Sn=vn.to&&Object.keys(vn.to).length>0,jn=(Q.keyframeStyle||"").length>0;if(!jn&&!Sn&&!Cn)return j();var xn,On;if(Q.stagger>0){var Pn=parseFloat(Q.stagger);On={transitionDelay:Pn,animationDelay:Pn,transitionDuration:0,animationDuration:0}}else xn=$(W,kn),On=D(W,Cn,xn,wn);Q.$$skipPreparationClasses||a.addClass(n,Cn);var Nn;if(Q.transitionStyle){var Fn=[M,Q.transitionStyle];k(W,Fn),cn.push(Fn)}if(Q.duration>=0){Nn=W.style[M].length>0;var Mn=P(Q.duration,Nn);k(W,Mn),cn.push(Mn)}if(Q.keyframeStyle){var En=[I,Q.keyframeStyle];k(W,En),cn.push(En)}var In=On?Q.staggerIndex>=0?Q.staggerIndex:t.count(xn):0,Rn=0===In;Rn&&!Q.skipBlocking&&b(W,mn);var qn=x(W,kn,xn),Ln=qn.maxDelay;en=Math.max(Ln,0),rn=qn.maxDuration;var Hn={};if(Hn.hasTransitions=qn.transitionDuration>0,Hn.hasAnimations=qn.animationDuration>0,Hn.hasTransitionAll=Hn.hasTransitions&&"all"==qn.transitionProperty,Hn.applyTransitionDuration=Sn&&(Hn.hasTransitions&&!Hn.hasTransitionAll||Hn.hasAnimations&&!Hn.hasTransitions),Hn.applyAnimationDuration=Q.duration&&Hn.hasAnimations,Hn.applyTransitionDelay=O(Q.delay)&&(Hn.applyTransitionDuration||Hn.hasTransitions),Hn.applyAnimationDelay=O(Q.delay)&&Hn.hasAnimations,Hn.recalculateTimingStyles=$n.length>0,(Hn.applyTransitionDuration||Hn.applyAnimationDuration)&&(rn=Q.duration?parseFloat(Q.duration):rn,Hn.applyTransitionDuration&&(Hn.hasTransitions=!0,qn.transitionDuration=rn,Nn=W.style[M+sn].length>0,cn.push(P(rn,Nn))),Hn.applyAnimationDuration&&(Hn.hasAnimations=!0,qn.animationDuration=rn,cn.push(T(rn)))),0===rn&&!Hn.recalculateTimingStyles)return j();if(null!=Q.delay){var Bn;"boolean"!=typeof Q.delay&&(Bn=parseFloat(Q.delay),en=Math.max(Bn,0)),Hn.applyTransitionDelay&&cn.push(S(Bn)),Hn.applyAnimationDelay&&cn.push(S(Bn,!0))}return null==Q.duration&&qn.transitionDuration>0&&(Hn.recalculateTimingStyles=Hn.recalculateTimingStyles||Rn),an=en*Dn,on=rn*Dn,Q.skipBlocking||(Hn.blockTransition=qn.transitionDuration>0,Hn.blockKeyframeAnimation=qn.animationDuration>0&&On.animationDelay>0&&0===On.animationDuration),Q.from&&(Q.cleanupStyles&&F(U,W,Object.keys(Q.from)),p(n,Q)),Hn.blockTransition||Hn.blockKeyframeAnimation?y(rn):Q.skipBlocking||b(W,!1),{$$willAnimate:!0,end:l,start:function(){return V?void 0:(tn={end:l,cancel:f,resume:null,pause:null},X=new r(tn),w(B),X)}}}}]}],Sn=["$$animationProvider",function(n){function t(n){return n.parentNode&&11===n.parentNode.nodeType}n.drivers.push("$$animateCssDriver");var e="ng-animate-shim",a="ng-anchor",r="ng-anchor-out",i="ng-anchor-in";this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(n,o,s,u,l,c,f){function v(n){return n.replace(/\bng-\S+\b/g,"")}function d(n,t){return Q(n)&&(n=n.split(" ")),Q(t)&&(t=t.split(" ")),n.filter(function(n){return-1===t.indexOf(n)}).join(" ")}function p(t,o,u){function l(n){var t={},e=C(n).getBoundingClientRect();return J(["width","height","top","left"],function(n){var a=e[n];switch(n){case"top":a+=$.scrollTop;break;case"left":a+=$.scrollLeft}t[n]=Math.floor(a)+"px"}),t}function c(){var t=n(h,{addClass:r,delay:!0,from:l(o)});return t.$$willAnimate?t:null}function f(n){return n.attr("class")||""}function m(){var t=v(f(u)),e=d(t,g),a=d(g,t),o=n(h,{to:l(u),addClass:i+" "+e,removeClass:r+" "+a,delay:!0});return o.$$willAnimate?o:null}function p(){h.remove(),o.removeClass(e),u.removeClass(e)}var h=B(C(o).cloneNode(!0)),g=v(f(h));o.addClass(e),u.addClass(e),h.addClass(a),D.append(h);var y,b=c();if(!b&&(y=m(),!y))return p();var A=b||y;return{start:function(){function n(){e&&e.end()}var t,e=A.start();return e.done(function(){return e=null,!y&&(y=m())?(e=y.start(),e.done(function(){e=null,p(),t.complete()}),e):(p(),void t.complete())}),t=new s({end:n,cancel:n})}}}function h(n,t,e,a){var r=g(n,q),i=g(t,q),o=[];return J(a,function(n){var t=n.out,a=n["in"],r=p(e,t,a);r&&o.push(r)}),r||i||0!==o.length?{start:function(){function n(){J(t,function(n){n.end()})}var t=[];r&&t.push(r.start()),i&&t.push(i.start()),J(o,function(n){t.push(n.start())});var e=new s({end:n,cancel:n});return s.all(t,function(n){e.complete(n)}),e}}:void 0}function g(t){var e=t.element,a=t.options||{};t.structural&&(a.event=t.event,a.structural=!0,a.applyClassesEarly=!0,"leave"===t.event&&(a.onDone=a.domOperation)),a.preparationClasses&&(a.event=w(a.event,a.preparationClasses));var r=n(e,a);return r.$$willAnimate?r:null}if(!l.animations&&!l.transitions)return q;var $=f[0].body,y=C(u),D=B(t(y)||$.contains(y)?y:$);m(c);return function(n){return n.from&&n.to?h(n.from,n.to,n.classes,n.anchors):g(n)}}]}],jn=["$animateProvider",function(n){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(t,e,a){function r(e){e=K(e)?e:e.split(" ");for(var a=[],r={},i=0;i<e.length;i++){var o=e[i],s=n.$$registeredAnimations[o];s&&!r[o]&&(a.push(t.get(s)),r[o]=!0)}return a}var i=m(a);return function(n,t,a,o){function s(){o.domOperation(),i(n,o)}function u(){m=!0,s(),d(n,o)}function l(n,t,a,r,i){var o;switch(a){case"animate":o=[t,r.from,r.to,i];break;case"setClass":o=[t,g,$,i];break;case"addClass":o=[t,g,i];break;case"removeClass":o=[t,$,i];break;default:o=[t,i]}o.push(r);var s=n.apply(n,o);if(s)if(z(s.start)&&(s=s.start()),s instanceof e)s.done(i);else if(z(s))return s;return q}function c(n,t,a,r,i){var o=[];return J(r,function(r){var s=r[i];s&&o.push(function(){var r,i,o=!1,u=function(n){o||(o=!0,(i||q)(n),r.complete(!n))};return r=new e({end:function(){u()},cancel:function(){u(!0)}}),i=l(s,n,t,a,function(n){var t=n===!1;u(t)}),r})}),o}function f(n,t,a,r,i){var o=c(n,t,a,r,i);if(0===o.length){var s,u;"beforeSetClass"===i?(s=c(n,"removeClass",a,r,"beforeRemoveClass"),u=c(n,"addClass",a,r,"beforeAddClass")):"setClass"===i&&(s=c(n,"removeClass",a,r,"removeClass"),u=c(n,"addClass",a,r,"addClass")),s&&(o=o.concat(s)),u&&(o=o.concat(u))}if(0!==o.length)return function(n){var t=[];return o.length&&J(o,function(n){t.push(n())}),t.length?e.all(t,n):n(),function(n){J(t,function(t){n?t.cancel():t.end()})}}}var m=!1;3===arguments.length&&U(a)&&(o=a,a=null),o=v(o),a||(a=n.attr("class")||"",o.addClass&&(a+=" "+o.addClass),o.removeClass&&(a+=" "+o.removeClass));var p,h,g=o.addClass,$=o.removeClass,C=r(a);if(C.length){var y,D;"leave"==t?(D="leave",y="afterLeave"):(D="before"+t.charAt(0).toUpperCase()+t.substr(1),y=t),"enter"!==t&&"move"!==t&&(p=f(n,t,o,C,D)),h=f(n,t,o,C,y)}if(p||h){var b;return{$$willAnimate:!0,end:function(){return b?b.end():(u(),b=new e,b.complete(!0)),b},start:function(){function n(n){u(n),b.complete(n)}function t(t){m||((a||q)(t),n(t))}if(b)return b;b=new e;var a,r=[];return p&&r.push(function(n){a=p(n)}),r.length?r.push(function(n){s(),n(!0)}):s(),h&&r.push(function(n){a=h(n)}),b.setHost({end:function(){t()},cancel:function(){t(!0)}}),e.chain(r,n),b}}}}}]}],xn=["$$animationProvider",function(n){n.drivers.push("$$animateJsDriver"),this.$get=["$$animateJs","$$AnimateRunner",function(n,t){function e(t){var e=t.element,a=t.event,r=t.options,i=t.classes;return n(e,a,i,r)}return function(n){if(n.from&&n.to){var a=e(n.from),r=e(n.to);if(!a&&!r)return;return{start:function(){function n(){return function(){J(i,function(n){n.end()})}}function e(n){o.complete(n)}var i=[];a&&i.push(a.start()),r&&i.push(r.start()),t.all(i,e);var o=new t({end:n(),cancel:n()});return o}}}return e(n)}}]}],On="data-ng-animate",Pn="$ngAnimatePin",Nn=["$animateProvider",function(n){function t(n){if(!n)return null;var t=n.split(c),e=Object.create(null);return J(t,function(n){e[n]=!0}),e}function e(n,e){if(n&&e){var a=t(e);return n.split(c).some(function(n){return a[n]})}}function r(n,t,e,a){return f[n].some(function(n){return n(t,e,a)})}function i(n,t){var e=(n.addClass||"").length>0,a=(n.removeClass||"").length>0;return t?e&&a:e||a}var o=1,s=2,c=" ",f=this.rules={skip:[],cancel:[],join:[]};f.join.push(function(n,t,e){return!t.structural&&i(t)}),f.skip.push(function(n,t,e){return!t.structural&&!i(t)}),f.skip.push(function(n,t,e){return"leave"==e.event&&t.structural}),f.skip.push(function(n,t,e){return e.structural&&e.state===s&&!t.structural}),f.cancel.push(function(n,t,e){return e.structural&&t.structural}),f.cancel.push(function(n,t,e){return e.state===s&&t.structural}),f.cancel.push(function(n,t,a){var r=t.addClass,i=t.removeClass,o=a.addClass,s=a.removeClass;return W(r)&&W(i)||W(o)&&W(s)?!1:e(r,s)||e(i,o)}),this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(t,e,c,f,p,h,$,b,A,k){function w(){var n=!1;return function(t){n?t():e.$$postDigest(function(){n=!0,t()})}}function T(n,t){return g(n,t,{})}function S(n,t,e){var a=C(t),r=C(n),i=[],o=q[e];return o&&J(o,function(n){_.call(n.node,a)?i.push(n.callback):"leave"===e&&_.call(n.node,r)&&i.push(n.callback)}),i}function j(n,a,l){function c(e,a,r,i){j(function(){var e=S(b,n,a);e.length&&t(function(){J(e,function(t){t(n,r,i)})})}),e.progress(a,r,i)}function m(t){D(n,A),Z(n,A),d(n,A),A.domOperation(),k.complete(!t)}var p,b,A=L(l);n=u(n),n&&(p=C(n),b=n.parent()),A=v(A);var k=new $,j=w();if(K(A.addClass)&&(A.addClass=A.addClass.join(" ")),A.addClass&&!Q(A.addClass)&&(A.addClass=null),K(A.removeClass)&&(A.removeClass=A.removeClass.join(" ")),A.removeClass&&!Q(A.removeClass)&&(A.removeClass=null),A.from&&!U(A.from)&&(A.from=null),A.to&&!U(A.to)&&(A.to=null),!p)return m(),k;var P=[p.className,A.addClass,A.removeClass].join(" ");if(!Y(P))return m(),k;var R=["enter","move","leave"].indexOf(a)>=0,q=!I||f[0].hidden||E.get(p),H=!q&&M.get(p)||{},B=!!H.state;if(q||B&&H.state==o||(q=!N(n,b,a)),q)return m(),k;R&&x(n);var W={structural:R,element:n,event:a,addClass:A.addClass,removeClass:A.removeClass,close:m,options:A,runner:k};if(B){var V=r("skip",n,W,H);if(V)return H.state===s?(m(),k):(g(n,H,W),H.runner);var z=r("cancel",n,W,H);if(z)if(H.state===s)H.runner.end();else{if(!H.structural)return g(n,H,W),H.runner;H.close()}else{var G=r("join",n,W,H);if(G){if(H.state!==s)return y(n,R?a:null,A),a=W.event=H.event,A=g(n,H,W),H.runner;T(n,W)}}}else T(n,W);var X=W.structural;if(X||(X="animate"===W.event&&Object.keys(W.options.to||{}).length>0||i(W)),!X)return m(),O(n),k;var _=(H.counter||0)+1;return W.counter=_,F(n,o,W),e.$$postDigest(function(){var t=M.get(p),e=!t;t=t||{};var r=n.parent()||[],o=r.length>0&&("animate"===t.event||t.structural||i(t));if(e||t.counter!==_||!o)return e&&(Z(n,A),d(n,A)),(e||R&&t.event!==a)&&(A.domOperation(),k.end()),void(o||O(n));a=!t.structural&&i(t,!0)?"setClass":t.event,F(n,s);var u=h(n,a,t.options);u.done(function(t){m(!t);var e=M.get(p);e&&e.counter===_&&O(C(n)),c(k,a,"close",{})}),k.setHost(u),c(k,a,"start",{})}),k}function x(n){var t=C(n),e=t.querySelectorAll("["+On+"]");J(e,function(n){var t=parseInt(n.getAttribute(On)),e=M.get(n);if(e)switch(t){case s:e.runner.end();case o:M.remove(n)}})}function O(n){var t=C(n);t.removeAttribute(On),M.remove(t)}function P(n,t){return C(n)===C(t)}function N(n,t,e){var a,r=B(f[0].body),i=P(n,r)||"HTML"===n[0].nodeName,o=P(n,c),s=!1,u=E.get(C(n)),l=n.data(Pn);for(l&&(t=l);t&&t.length;){o||(o=P(t,c));var m=t[0];if(m.nodeType!==X)break;var v=M.get(m)||{};if(!s){var d=E.get(m);if(d===!0&&u!==!1){u=!0;break}d===!1&&(u=!1),s=v.structural}if(W(a)||a===!0){var p=t.data(an);V(p)&&(a=p)}if(s&&a===!1)break;if(i||(i=P(t,r)),i&&o)break;t=o||!(l=t.data(Pn))?t.parent():l}var h=(!s||a)&&u!==!0;return h&&o&&i}function F(n,t,e){e=e||{},e.state=t;var a=C(n);a.setAttribute(On,t);var r=M.get(a),i=r?H(r,e):e;M.put(a,i)}var M=new p,E=new p,I=null,R=e.$watch(function(){return 0===b.totalPendingRequests},function(n){n&&(R(),e.$$postDigest(function(){e.$$postDigest(function(){null===I&&(I=!0)})}))}),q={},z=n.classNameFilter(),Y=z?function(n){return z.test(n)}:function(){return!0},Z=m(A),_=Node.prototype.contains||function(n){return this===n||!!(16&this.compareDocumentPosition(n))};return{on:function(n,t,e){var a=l(t);q[n]=q[n]||[],q[n].push({node:a,callback:e})},off:function(n,t,e){function a(n,t,e){var a=l(t);return n.filter(function(n){var t=n.node===a&&(!e||n.callback===e);return!t})}var r=q[n];r&&(q[n]=1===arguments.length?null:a(r,t,e))},pin:function(n,t){a(G(n),"element","not an element"),a(G(t),"parentElement","not an element"),n.data(Pn,t)},push:function(n,t,e,a){return e=e||{},e.domOperation=a,j(n,t,e)},enabled:function(n,t){var e=arguments.length;if(0===e)t=!!I;else{var a=G(n);if(a){var r=C(n),i=E.get(r);1===e?t=!i:E.put(r,!t)}else t=I=!!n}return t}}}]}],Fn=["$animateProvider",function(n){function t(n,t){n.data(s,t)}function e(n){n.removeData(s)}function a(n){return n.data(s)}var i="ng-animate-ref",o=this.drivers=[],s="$$animationRunner";this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(n,s,u,l,c,f){function p(n){function t(n){if(n.processed)return n;n.processed=!0;var e=n.domNode,a=e.parentNode;i.put(e,n);for(var o;a;){if(o=i.get(a)){o.processed||(o=t(o));break}a=a.parentNode}return(o||r).children.push(n),n}function e(n){var t,e=[],a=[];for(t=0;t<n.children.length;t++)a.push(n.children[t]);var r=a.length,i=0,o=[];for(t=0;t<a.length;t++){var s=a[t];0>=r&&(r=i,i=0,e.push(o),o=[]),o.push(s.fn),s.children.forEach(function(n){i++,a.push(n)}),r--}return o.length&&e.push(o),e}var a,r={children:[]},i=new c;for(a=0;a<n.length;a++){var o=n[a];i.put(o.domNode,n[a]={domNode:o.domNode,fn:o.fn,children:[]})}for(a=0;a<n.length;a++)t(n[a]);return e(r)}var h=[],g=m(n);return function(c,m,$){function y(n){var t="["+i+"]",e=n.hasAttribute(i)?[n]:n.querySelectorAll(t),a=[];return J(e,function(n){var t=n.getAttribute(i);t&&t.length&&a.push(n)}),a}function D(n){var t=[],e={};J(n,function(n,a){var r=n.element,o=C(r),s=n.event,u=["enter","move"].indexOf(s)>=0,l=n.structural?y(o):[];if(l.length){var c=u?"to":"from";J(l,function(n){var t=n.getAttribute(i);e[t]=e[t]||{},e[t][c]={animationID:a,element:B(n)}})}else t.push(n)});var a={},r={};return J(e,function(e,i){var o=e.from,s=e.to;if(!o||!s){var u=o?o.animationID:s.animationID,l=u.toString();return void(a[l]||(a[l]=!0,t.push(n[u])))}var c=n[o.animationID],f=n[s.animationID],m=o.animationID.toString();if(!r[m]){var v=r[m]={structural:!0,beforeStart:function(){c.beforeStart(),f.beforeStart()},close:function(){c.close(),f.close()},classes:b(c.classes,f.classes),from:c,to:f,anchors:[]};v.classes.length?t.push(v):(t.push(c),t.push(f))}r[m].anchors.push({out:o.element,"in":s.element})}),t}function b(n,t){n=n.split(" "),t=t.split(" ");for(var e=[],a=0;a<n.length;a++){var r=n[a];if("ng-"!==r.substring(0,3))for(var i=0;i<t.length;i++)if(r===t[i]){e.push(r);break}}return e.join(" ")}function A(n){for(var t=o.length-1;t>=0;t--){var e=o[t];if(u.has(e)){var a=u.get(e),r=a(n);if(r)return r}}}function k(){c.addClass(en),P&&n.addClass(c,P),N&&(n.removeClass(c,N),N=null)}function w(n,t){function e(n){a(n).setHost(t)}n.from&&n.to?(e(n.from.element),e(n.to.element)):e(n.element)}function T(){var n=a(c);!n||"leave"===m&&$.$$domOperationFired||n.end()}function S(t){c.off("$destroy",T),e(c),g(c,$),d(c,$),$.domOperation(),P&&n.removeClass(c,P),c.removeClass(en),x.complete(!t)}$=v($);var j=["enter","move","leave"].indexOf(m)>=0,x=new l({end:function(){S()},cancel:function(){S(!0)}});if(!o.length)return S(),x;t(c,x);var O=r(c.attr("class"),r($.addClass,$.removeClass)),P=$.tempClasses;P&&(O+=" "+P,$.tempClasses=null);var N;return j&&(N="ng-"+m+tn,n.addClass(c,N)),h.push({element:c,classes:O,event:m,structural:j,options:$,beforeStart:k,close:S}),c.on("$destroy",T),h.length>1?x:(s.$$postDigest(function(){var n=[];J(h,function(t){a(t.element)?n.push(t):t.close()}),h.length=0;var t=D(n),e=[];J(t,function(n){e.push({domNode:C(n.from?n.from.element:n.element),fn:function(){n.beforeStart();var t,e=n.close,r=n.anchors?n.from.element||n.to.element:n.element;if(a(r)){var i=A(n);i&&(t=i.start)}if(t){var o=t();o.done(function(n){e(!n)}),w(n,o)}else e()}})}),f(p(e))}),x)}}]}],Mn=["$animate","$rootScope",function(n,t){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(t,e,a,r,i){var o,s;t.$watchCollection(a.ngAnimateSwap||a["for"],function(a){o&&n.leave(o),s&&(s.$destroy(),s=null),(a||0===a)&&(s=t.$new(),i(s,function(t){o=t,n.enter(t,null,e)}))})}}}];t.module("ngAnimate",[]).directive("ngAnimateSwap",Mn).directive("ngAnimateChildren",Cn).factory("$$rAFScheduler",$n).provider("$$animateQueue",Nn).provider("$$animation",Fn).provider("$animateCss",Tn).provider("$$animateCssDriver",Sn).provider("$$animateJs",jn).provider("$$animateJsDriver",xn)}(window,window.angular);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosTruckroll.js b/xos/core/xoslib/static/js/xosTruckroll.js
index 7c5a450..f3017d9 100644
--- a/xos/core/xoslib/static/js/xosTruckroll.js
+++ b/xos/core/xoslib/static/js/xosTruckroll.js
@@ -1 +1 @@
-"use strict";angular.module("xos.truckroll",["ngResource","ngCookies","ngLodash","ui.router","xos.helpers"]).config(["$stateProvider",function(l){l.state("user-list",{url:"/",template:"<truckroll></truckroll>"})}]).config(["$httpProvider",function(l){l.interceptors.push("NoHyperlinks")}]).service("Subscribers",["$resource",function(l){return l("/xos/subscribers/:id")}]).service("Truckroll",["$resource",function(l){return l("/xoslib/truckroll/:id")}]).directive("truckroll",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/truckroll.tpl.html",controller:["$timeout","Subscribers","Truckroll",function(l,n,t){var r=this;n.query().$promise.then(function(l){r.subscribers=l}),this.loader=!1,this.runTest=function(){delete r.truckroll.result,delete r.truckroll.is_synced,delete r.truckroll.result_code,delete r.truckroll.backend_status;var l=new t(r.truckroll);r.loader=!0,l.$save().then(function(l){r.waitForTest(l.id)})},this.waitForTest=function(n){t.get({id:n}).$promise.then(function(s){s.backend_status.indexOf("2")>=0||s.result_code&&s.result_code.indexOf("2")>=0?(r.truckroll=angular.copy(s),r.loader=!1):s.is_synced?(r.truckroll=angular.copy(s),t["delete"]({id:n}),r.loader=!1):l(function(){r.waitForTest(n)},2e3)})}}]}}),angular.module("xos.truckroll").run(["$templateCache",function(l){l.put("templates/truckroll.tpl.html",'<div class="row">\n  <h2>Virtual Truck Roll</h2>\n  <p>Use this page to run test against your subscriber</p>\n</div>\n<form ng-submit="vm.runTest()">\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Target:</label>\n    </div>\n    <div class="col-xs-12">\n      <select class="form-control" ng-model="vm.truckroll.target_id" ng-options="s.id as s.humanReadableName for s in vm.subscribers"></select>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Scope:</label>\n    </div>\n    <div class="col-xs-6">\n      <a \n      ng-click="vm.truckroll.scope = \'container\'"\n      ng-class="{\'btn-default\': vm.truckroll.scope !== \'container\', \'btn-primary\': vm.truckroll.scope === \'container\'}"\n      class="btn btn-block"\n      >\n        Container\n      </a>\n    </div>\n    <div class="col-xs-6">\n      <a \n      ng-click="vm.truckroll.scope = \'vm\'"\n      ng-class="{\'btn-default\': vm.truckroll.scope !== \'vm\', \'btn-primary\': vm.truckroll.scope === \'vm\'}"\n      class="btn btn-block"\n      >\n        VM\n      </a>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Test:</label>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'ping\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'ping\', \'btn-primary\': vm.truckroll.test === \'ping\'}"\n      class="btn btn-block">Ping</a>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'traceroute\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'traceroute\', \'btn-primary\': vm.truckroll.test === \'traceroute\'}"\n      class="btn btn-block">Traceroute</a>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'tcpdump\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'tcpdump\', \'btn-primary\': vm.truckroll.test === \'tcpdump\'}"\n      class="btn btn-block">Tcp Dump</a>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Argument:</label>\n    </div>\n    <div class="col-xs-12">\n      <input type="text" class="form-control" ng-model="vm.truckroll.argument" required />\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12" ng-show="!vm.loader">\n      <button class="btn btn-success btn-block">Run test</button>\n    </div>\n    <div class="col-xs-12" ng-show="vm.loader">\n      <div class="loader"></div>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.result_code">\n    <div class="col-xs-12">\n      <label>Result Code</label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.result_code}}</pre>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.result">\n    <div class="col-xs-12">\n      <label>\n        Result:\n      </label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.result}}</pre>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.backend_status">\n    <div class="col-xs-12">\n      <label>Result Code</label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.backend_status}}</pre>\n    </div>\n  </div>\n</form>')}]),angular.module("xos.truckroll").run(["$location",function(l){l.path("/")}]),angular.bootstrap(angular.element("#xosTruckroll"),["xos.truckroll"]);
\ No newline at end of file
+"use strict";angular.module("xos.truckroll",["ngResource","ngCookies","ngAnimate","ngLodash","ui.router","xos.helpers"]).config(["$stateProvider",function(l){l.state("user-list",{url:"/",template:"<truckroll></truckroll>"})}]).config(["$httpProvider",function(l){l.interceptors.push("NoHyperlinks")}]).service("Subscribers",["$resource",function(l){return l("/xos/subscribers/:id")}]).service("Truckroll",["$resource",function(l){return l("/xoslib/truckroll/:id")}]).directive("truckroll",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/truckroll.tpl.html",controller:["$timeout","Subscribers","Truckroll",function(l,n,t){var s=this;n.query().$promise.then(function(l){s.subscribers=l}),this.loader=!1,this.runTest=function(){delete s.truckroll.result,delete s.truckroll.is_synced,delete s.truckroll.result_code,delete s.truckroll.backend_status;var l=new t(s.truckroll);s.loader=!0,l.$save().then(function(l){s.waitForTest(l.id)})},this.waitForTest=function(n){t.get({id:n}).$promise.then(function(r){r.backend_status.indexOf("2")>=0||r.result_code&&r.result_code.indexOf("2")>=0||r.is_synced?(s.truckroll=angular.copy(r),s.loader=!1,t["delete"]({id:n})):l(function(){s.waitForTest(n)},2e3)})}}]}}),angular.module("xos.truckroll").run(["$templateCache",function(l){l.put("templates/truckroll.tpl.html",'<div class="row">\n  <div class="col-xs-12">\n    <h2>Virtual Truck Roll</h2>\n    <p>Use this page to run test against your subscriber</p>\n  </div>\n</div>\n<form ng-submit="vm.runTest()">\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Target:</label>\n    </div>\n    <div class="col-xs-12">\n      <select class="form-control" ng-model="vm.truckroll.target_id" ng-options="s.id as s.humanReadableName for s in vm.subscribers"></select>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Scope:</label>\n    </div>\n    <div class="col-xs-6">\n      <a \n      ng-click="vm.truckroll.scope = \'container\'"\n      ng-class="{\'btn-default\': vm.truckroll.scope !== \'container\', \'btn-primary\': vm.truckroll.scope === \'container\'}"\n      class="btn btn-block"\n      >\n        Container\n      </a>\n    </div>\n    <div class="col-xs-6">\n      <a \n      ng-click="vm.truckroll.scope = \'vm\'"\n      ng-class="{\'btn-default\': vm.truckroll.scope !== \'vm\', \'btn-primary\': vm.truckroll.scope === \'vm\'}"\n      class="btn btn-block"\n      >\n        VM\n      </a>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Test:</label>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'ping\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'ping\', \'btn-primary\': vm.truckroll.test === \'ping\'}"\n      class="btn btn-block">Ping</a>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'traceroute\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'traceroute\', \'btn-primary\': vm.truckroll.test === \'traceroute\'}"\n      class="btn btn-block">Traceroute</a>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'tcpdump\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'tcpdump\', \'btn-primary\': vm.truckroll.test === \'tcpdump\'}"\n      class="btn btn-block">Tcp Dump</a>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Argument:</label>\n    </div>\n    <div class="col-xs-12">\n      <input type="text" class="form-control" ng-model="vm.truckroll.argument" required />\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12" ng-show="!vm.loader">\n      <button class="btn btn-success btn-block">Run test</button>\n    </div>\n  </div>\n</form>\n<div class="row">\n    <div class="col-xs-12 animate-vertical" ng-show="vm.loader">\n      <div class="loader"></div>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.result_code">\n    <div class="col-xs-12">\n      <label>Result Code</label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.result_code}}</pre>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.result">\n    <div class="col-xs-12">\n      <label>\n        Result:\n      </label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.result}}</pre>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.backend_status">\n    <div class="col-xs-12">\n      <label>Backend Status</label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.backend_status}}</pre>\n    </div>\n  </div>')}]),angular.module("xos.truckroll").run(["$location",function(l){l.path("/")}]),angular.bootstrap(angular.element("#xosTruckroll"),["xos.truckroll"]);
\ No newline at end of file
